diff --git a/app.js b/app.js index ee24195..72cf8a4 100644 --- a/app.js +++ b/app.js @@ -1,2 +1,2 @@ -(()=>{var t={491:function(t){(function(){var e,i,r,s,n,a;"undefined"!=typeof performance&&null!==performance&&performance.now?t.exports=function(){return performance.now()}:"undefined"!=typeof process&&null!==process&&process.hrtime?(t.exports=function(){return(e()-n)/1e6},i=process.hrtime,s=(e=function(){var t;return 1e9*(t=i())[0]+t[1]})(),a=1e9*process.uptime(),n=s-a):Date.now?(t.exports=function(){return Date.now()-r},r=Date.now()):(t.exports=function(){return(new Date).getTime()-r},r=(new Date).getTime())}).call(this)},146:(t,e,i)=>{for(var r=i(491),s="undefined"==typeof window?i.g:window,n=["moz","webkit"],a="AnimationFrame",o=s["request"+a],h=s["cancel"+a]||s["cancelRequest"+a],l=0;!o&&l{t.exports=function(t){this.ok=!1,this.alpha=1,"#"==t.charAt(0)&&(t=t.substr(1,6)),t=(t=t.replace(/ /g,"")).toLowerCase();var e={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"00ffff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000000",blanchedalmond:"ffebcd",blue:"0000ff",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"00ffff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dodgerblue:"1e90ff",feldspar:"d19275",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"ff00ff",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgrey:"d3d3d3",lightgreen:"90ee90",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslateblue:"8470ff",lightslategray:"778899",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"00ff00",limegreen:"32cd32",linen:"faf0e6",magenta:"ff00ff",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370d8",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"d87093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",rebeccapurple:"663399",red:"ff0000",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",violetred:"d02090",wheat:"f5deb3",white:"ffffff",whitesmoke:"f5f5f5",yellow:"ffff00",yellowgreen:"9acd32"};t=e[t]||t;for(var i=[{re:/^rgba\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3}),\s*((?:\d?\.)?\d)\)$/,example:["rgba(123, 234, 45, 0.8)","rgba(255,234,245,1.0)"],process:function(t){return[parseInt(t[1]),parseInt(t[2]),parseInt(t[3]),parseFloat(t[4])]}},{re:/^rgb\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)$/,example:["rgb(123, 234, 45)","rgb(255,234,245)"],process:function(t){return[parseInt(t[1]),parseInt(t[2]),parseInt(t[3])]}},{re:/^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,example:["#00ff00","336699"],process:function(t){return[parseInt(t[1],16),parseInt(t[2],16),parseInt(t[3],16)]}},{re:/^([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,example:["#fb0","f0f"],process:function(t){return[parseInt(t[1]+t[1],16),parseInt(t[2]+t[2],16),parseInt(t[3]+t[3],16)]}}],r=0;r3&&(this.alpha=o[3]),this.ok=!0}}this.r=this.r<0||isNaN(this.r)?0:this.r>255?255:this.r,this.g=this.g<0||isNaN(this.g)?0:this.g>255?255:this.g,this.b=this.b<0||isNaN(this.b)?0:this.b>255?255:this.b,this.alpha=this.alpha<0?0:this.alpha>1||isNaN(this.alpha)?1:this.alpha,this.toRGB=function(){return"rgb("+this.r+", "+this.g+", "+this.b+")"},this.toRGBA=function(){return"rgba("+this.r+", "+this.g+", "+this.b+", "+this.alpha+")"},this.toHex=function(){var t=this.r.toString(16),e=this.g.toString(16),i=this.b.toString(16);return 1==t.length&&(t="0"+t),1==e.length&&(e="0"+e),1==i.length&&(i="0"+i),"#"+t+e+i},this.getHelpXML=function(){for(var t=new Array,r=0;r "+l.toRGB()+" -> "+l.toHex());h.appendChild(c),h.appendChild(u),o.appendChild(h)}catch(t){}return o}}}},e={};function i(r){var s=e[r];if(void 0!==s)return s.exports;var n=e[r]={exports:{}};return t[r].call(n.exports,n,n.exports,i),n.exports}i.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),(()=>{"use strict";function t(t){return new Promise(((e,i)=>{t.oncomplete=t.onsuccess=()=>e(t.result),t.onabort=t.onerror=()=>i(t.error)}))}let e;function r(){return e||(e=function(e,i){const r=indexedDB.open("keyval-store");r.onupgradeneeded=()=>r.result.createObjectStore(i);const s=t(r);return(t,e)=>s.then((r=>e(r.transaction(i,t).objectStore(i))))}(0,"keyval")),e}function s(e,i=r()){return i("readonly",(i=>t(i.get(e))))}function n(e,i,s=r()){return s("readwrite",(r=>(r.put(i,e),t(r.transaction))))}var a=i(146),o=i(855),h=function(t,e){return(h=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i])})(t,e)};function l(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function i(){this.constructor=t}h(t,e),t.prototype=null===e?Object.create(e):(i.prototype=e.prototype,new i)}function c(t,e){var i=t[0],r=t[1];return[i*Math.cos(e)-r*Math.sin(e),i*Math.sin(e)+r*Math.cos(e)]}function u(){for(var t=[],e=0;et.phi1&&(t.phi2-=2*g),1===t.sweepFlag&&t.phi2r)return[];if(0===r)return[[t*i/(t*t+e*e),e*i/(t*t+e*e)]];var s=Math.sqrt(r);return[[(t*i+e*s)/(t*t+e*e),(e*i-t*s)/(t*t+e*e)],[(t*i-e*s)/(t*t+e*e),(e*i+t*s)/(t*t+e*e)]]}var f,y=Math.PI/180;function m(t,e,i){return(1-i)*t+i*e}function x(t,e,i,r){return t+Math.cos(r/180*g)*e+Math.sin(r/180*g)*i}function b(t,e,i,r){var s=1e-6,n=e-t,a=i-e,o=3*n+3*(r-i)-6*a,h=6*(a-n),l=3*n;return Math.abs(o)y&&(s.sweepFlag=+!s.sweepFlag),s}))}t.ROUND=function(t){function e(e){return Math.round(e*t)/t}return void 0===t&&(t=1e13),u(t),function(t){return void 0!==t.x1&&(t.x1=e(t.x1)),void 0!==t.y1&&(t.y1=e(t.y1)),void 0!==t.x2&&(t.x2=e(t.x2)),void 0!==t.y2&&(t.y2=e(t.y2)),void 0!==t.x&&(t.x=e(t.x)),void 0!==t.y&&(t.y=e(t.y)),void 0!==t.rX&&(t.rX=e(t.rX)),void 0!==t.rY&&(t.rY=e(t.rY)),t}},t.TO_ABS=e,t.TO_REL=function(){return s((function(t,e,i){return t.relative||(void 0!==t.x1&&(t.x1-=e),void 0!==t.y1&&(t.y1-=i),void 0!==t.x2&&(t.x2-=e),void 0!==t.y2&&(t.y2-=i),void 0!==t.x&&(t.x-=e),void 0!==t.y&&(t.y-=i),t.relative=!0),t}))},t.NORMALIZE_HVZ=function(t,e,i){return void 0===t&&(t=!0),void 0===e&&(e=!0),void 0===i&&(i=!0),s((function(r,s,n,a,o){if(isNaN(a)&&!(r.type&P.MOVE_TO))throw new Error("path must start with moveto");return e&&r.type&P.HORIZ_LINE_TO&&(r.type=P.LINE_TO,r.y=r.relative?0:n),i&&r.type&P.VERT_LINE_TO&&(r.type=P.LINE_TO,r.x=r.relative?0:s),t&&r.type&P.CLOSE_PATH&&(r.type=P.LINE_TO,r.x=r.relative?a-s:a,r.y=r.relative?o-n:o),r.type&P.ARC&&(0===r.rX||0===r.rY)&&(r.type=P.LINE_TO,delete r.rX,delete r.rY,delete r.xRot,delete r.lArcFlag,delete r.sweepFlag),r}))},t.NORMALIZE_ST=i,t.QT_TO_C=r,t.INFO=s,t.SANITIZE=function(t){void 0===t&&(t=0),u(t);var e=NaN,i=NaN,r=NaN,n=NaN;return s((function(s,a,o,h,l){var c=Math.abs,u=!1,g=0,d=0;if(s.type&P.SMOOTH_CURVE_TO&&(g=isNaN(e)?0:a-e,d=isNaN(i)?0:o-i),s.type&(P.CURVE_TO|P.SMOOTH_CURVE_TO)?(e=s.relative?a+s.x2:s.x2,i=s.relative?o+s.y2:s.y2):(e=NaN,i=NaN),s.type&P.SMOOTH_QUAD_TO?(r=isNaN(r)?a:2*a-r,n=isNaN(n)?o:2*o-n):s.type&P.QUAD_TO?(r=s.relative?a+s.x1:s.x1,n=s.relative?o+s.y1:s.y2):(r=NaN,n=NaN),s.type&P.LINE_COMMANDS||s.type&P.ARC&&(0===s.rX||0===s.rY||!s.lArcFlag)||s.type&P.CURVE_TO||s.type&P.SMOOTH_CURVE_TO||s.type&P.QUAD_TO||s.type&P.SMOOTH_QUAD_TO){var p=void 0===s.x?0:s.relative?s.x:s.x-a,f=void 0===s.y?0:s.relative?s.y:s.y-o;g=isNaN(r)?void 0===s.x1?g:s.relative?s.x:s.x1-a:r-a,d=isNaN(n)?void 0===s.y1?d:s.relative?s.y:s.y1-o:n-o;var y=void 0===s.x2?0:s.relative?s.x:s.x2-a,m=void 0===s.y2?0:s.relative?s.y:s.y2-o;c(p)<=t&&c(f)<=t&&c(g)<=t&&c(d)<=t&&c(y)<=t&&c(m)<=t&&(u=!0)}return s.type&P.CLOSE_PATH&&c(a-h)<=t&&c(o-l)<=t&&(u=!0),u?[]:s}))},t.MATRIX=n,t.ROTATE=function(t,e,i){void 0===e&&(e=0),void 0===i&&(i=0),u(t,e,i);var r=Math.sin(t),s=Math.cos(t);return n(s,r,-r,s,e-e*s+i*r,i-e*r-i*s)},t.TRANSLATE=function(t,e){return void 0===e&&(e=0),u(t,e),n(1,0,0,1,t,e)},t.SCALE=function(t,e){return void 0===e&&(e=t),u(t,e),n(t,0,0,e,0,0)},t.SKEW_X=function(t){return u(t),n(1,0,Math.atan(t),1,0,0)},t.SKEW_Y=function(t){return u(t),n(1,Math.atan(t),0,1,0,0)},t.X_AXIS_SYMMETRY=function(t){return void 0===t&&(t=0),u(t),n(-1,0,0,1,t,0)},t.Y_AXIS_SYMMETRY=function(t){return void 0===t&&(t=0),u(t),n(1,0,0,-1,0,t)},t.A_TO_C=function(){return s((function(t,e,i){return P.ARC===t.type?function(t,e,i){var r,s,n,a;t.cX||d(t,e,i);for(var o=Math.min(t.phi1,t.phi2),h=Math.max(t.phi1,t.phi2)-o,l=Math.ceil(h/90),u=new Array(l),g=e,p=i,f=0;fo.maxX&&(o.maxX=t),to.maxY&&(o.maxY=t),tk&&h(v(i,s.x1,s.x2,s.x,k));for(var g=0,f=b(r,s.y1,s.y2,s.y);gk&&l(v(r,s.y1,s.y2,s.y,k))}if(s.type&P.ARC){h(s.x),l(s.y),d(s,i,r);for(var y=s.xRot/180*Math.PI,m=Math.cos(y)*s.rX,w=Math.sin(y)*s.rX,S=-Math.sin(y)*s.rY,T=Math.cos(y)*s.rY,A=s.phi1s.phi2?[s.phi2+360,s.phi1+360]:[s.phi2,s.phi1],C=A[0],O=A[1],N=function(t){var e=t[0],i=t[1],r=180*Math.atan2(i,e)/Math.PI;return rC&&kC&&kh)throw new SyntaxError('Expected positive number, got "'+h+'" at index "'+s+'"')}else if((3===this.curArgs.length||4===this.curArgs.length)&&"0"!==this.curNumber&&"1"!==this.curNumber)throw new SyntaxError('Expected a flag, got "'+this.curNumber+'" at index "'+s+'"');this.curArgs.push(h),this.curArgs.length===O[this.curCommandType]&&(P.HORIZ_LINE_TO===this.curCommandType?r({type:P.HORIZ_LINE_TO,relative:this.curCommandRelative,x:h}):P.VERT_LINE_TO===this.curCommandType?r({type:P.VERT_LINE_TO,relative:this.curCommandRelative,y:h}):this.curCommandType===P.MOVE_TO||this.curCommandType===P.LINE_TO||this.curCommandType===P.SMOOTH_QUAD_TO?(r({type:this.curCommandType,relative:this.curCommandRelative,x:this.curArgs[0],y:this.curArgs[1]}),P.MOVE_TO===this.curCommandType&&(this.curCommandType=P.LINE_TO)):this.curCommandType===P.CURVE_TO?r({type:P.CURVE_TO,relative:this.curCommandRelative,x1:this.curArgs[0],y1:this.curArgs[1],x2:this.curArgs[2],y2:this.curArgs[3],x:this.curArgs[4],y:this.curArgs[5]}):this.curCommandType===P.SMOOTH_CURVE_TO?r({type:P.SMOOTH_CURVE_TO,relative:this.curCommandRelative,x2:this.curArgs[0],y2:this.curArgs[1],x:this.curArgs[2],y:this.curArgs[3]}):this.curCommandType===P.QUAD_TO?r({type:P.QUAD_TO,relative:this.curCommandRelative,x1:this.curArgs[0],y1:this.curArgs[1],x:this.curArgs[2],y:this.curArgs[3]}):this.curCommandType===P.ARC&&r({type:P.ARC,relative:this.curCommandRelative,rX:this.curArgs[0],rY:this.curArgs[1],xRot:this.curArgs[2],lArcFlag:this.curArgs[3],sweepFlag:this.curArgs[4],x:this.curArgs[5],y:this.curArgs[6]})),this.curNumber="",this.curNumberHasExpDigits=!1,this.curNumberHasExp=!1,this.curNumberHasDecimal=!1,this.canParseCommandOrComma=!0}if(!T(n))if(","===n&&this.canParseCommandOrComma)this.canParseCommandOrComma=!1;else if("+"!==n&&"-"!==n&&"."!==n)if(o)this.curNumber=n,this.curNumberHasDecimal=!1;else{if(0!==this.curArgs.length)throw new SyntaxError("Unterminated command at index "+s+".");if(!this.canParseCommandOrComma)throw new SyntaxError('Unexpected character "'+n+'" at index '+s+". Command cannot follow comma");if(this.canParseCommandOrComma=!1,"z"!==n&&"Z"!==n)if("h"===n||"H"===n)this.curCommandType=P.HORIZ_LINE_TO,this.curCommandRelative="h"===n;else if("v"===n||"V"===n)this.curCommandType=P.VERT_LINE_TO,this.curCommandRelative="v"===n;else if("m"===n||"M"===n)this.curCommandType=P.MOVE_TO,this.curCommandRelative="m"===n;else if("l"===n||"L"===n)this.curCommandType=P.LINE_TO,this.curCommandRelative="l"===n;else if("c"===n||"C"===n)this.curCommandType=P.CURVE_TO,this.curCommandRelative="c"===n;else if("s"===n||"S"===n)this.curCommandType=P.SMOOTH_CURVE_TO,this.curCommandRelative="s"===n;else if("q"===n||"Q"===n)this.curCommandType=P.QUAD_TO,this.curCommandRelative="q"===n;else if("t"===n||"T"===n)this.curCommandType=P.SMOOTH_QUAD_TO,this.curCommandRelative="t"===n;else{if("a"!==n&&"A"!==n)throw new SyntaxError('Unexpected character "'+n+'" at index '+s+".");this.curCommandType=P.ARC,this.curCommandRelative="a"===n}else e.push({type:P.CLOSE_PATH}),this.canParseCommandOrComma=!0,this.curCommandType=-1}else this.curNumber=n,this.curNumberHasDecimal="."===n}else this.curNumber+=n,this.curNumberHasDecimal=!0;else this.curNumber+=n;else this.curNumber+=n,this.curNumberHasExp=!0;else this.curNumber+=n,this.curNumberHasExpDigits=this.curNumberHasExp}return e},e.prototype.transform=function(t){return Object.create(this,{parse:{value:function(e,i){void 0===i&&(i=[]);for(var r=0,s=Object.getPrototypeOf(this).parse.call(this,e);r>>w;if(o[b+3]=Z,0!==Z){var K=255/Z;o[b]=(z*v>>>w)*K,o[b+1]=(H*v>>>w)*K,o[b+2]=(U*v>>>w)*K}else o[b]=o[b+1]=o[b+2]=0;z-=I,H-=L,U-=D,F-=B,I-=y.r,L-=y.g,D-=y.b,B-=y.a;var J=$+n+1;J=x+(J>>w,lt>0?(lt=255/lt,o[Ot]=(pt*v>>>w)*lt,o[Ot+1]=(ft*v>>>w)*lt,o[Ot+2]=(yt*v>>>w)*lt):o[Ot]=o[Ot+1]=o[Ot+2]=0,pt-=ct,ft-=ut,yt-=gt,mt-=dt,ct-=y.r,ut-=y.g,gt-=y.b,dt-=y.a,Ot=nt+((Ot=Pt+u)0&&void 0!==arguments[0]?arguments[0]:{};const e={window:null,ignoreAnimation:!0,ignoreMouse:!0,DOMParser:t,createCanvas:(t,e)=>new OffscreenCanvas(t,e),async createImage(t){const e=await fetch(t),i=await e.blob();return await createImageBitmap(i)}};return void 0===globalThis.DOMParser&&void 0!==t||Reflect.deleteProperty(e,"DOMParser"),e},node:function(t){let{DOMParser:e,canvas:i,fetch:r}=t;return{window:null,ignoreAnimation:!0,ignoreMouse:!0,DOMParser:e,fetch:r,createCanvas:i.createCanvas,createImage:i.loadImage}}});function R(t){return t.replace(/(?!\u3000)\s+/gm," ")}function I(t){const e=t.match(/-?(\d+(?:\.\d*(?:[eE][+-]?\d+)?)?|\.\d+)(?=\D|$)/gm);return e?e.map(parseFloat):[]}const L=/^[A-Z-]+$/;function D(t){const e=/url\(('([^']+)'|"([^"]+)"|([^'")]+))\)/.exec(t);return e&&(e[2]||e[3]||e[4])||""}const B=/(\[[^\]]+\])/g,z=/(#[^\s+>~.[:]+)/g,H=/(\.[^\s+>~.[:]+)/g,U=/(::[^\s+>~.[:]+|:first-line|:first-letter|:before|:after)/gi,F=/(:[\w-]+\([^)]*\))/gi,X=/(:[^\s+>~.[:]+)/g,q=/([^\s+>~.[:]+)/g;function Y(t,e){const i=e.exec(t);return i?[t.replace(e," "),i.length]:[t,0]}const W=1e-8;function Q(t){return Math.sqrt(Math.pow(t[0],2)+Math.pow(t[1],2))}function j(t,e){return(t[0]*e[0]+t[1]*e[1])/(Q(t)*Q(e))}function G(t,e){return(t[0]*e[1]0&&void 0!==arguments[0]?arguments[0]:" ";const{document:e,name:i}=this;return R(this.getString()).trim().split(t).map((t=>new rt(e,i,t)))}hasValue(t){const e=this.value;return null!==e&&""!==e&&(t||0!==e)&&void 0!==e}isString(t){const{value:e}=this,i="string"==typeof e;return i&&t?t.test(e):i}isUrlDefinition(){return this.isString(/^url\(/)}isPixels(){if(!this.hasValue())return!1;const t=this.getString();switch(!0){case t.endsWith("px"):case/^[0-9]+$/.test(t):return!0;default:return!1}}setValue(t){return this.value=t,this}getValue(t){return void 0===t||this.hasValue()?this.value:t}getNumber(t){if(!this.hasValue())return void 0===t?0:parseFloat(t);const{value:e}=this;let i=parseFloat(e);return this.isString(/%$/)&&(i/=100),i}getString(t){return void 0===t||this.hasValue()?void 0===this.value?"":String(this.value):String(t)}getColor(t){let e=this.getString(t);return this.isNormalizedColor||(this.isNormalizedColor=!0,e=function(t){if(!t.startsWith("rgb"))return t;let e=3;return t.replace(/\d+(\.\d+)?/g,((t,i)=>e--&&i?String(Math.round(parseFloat(t))):t))}(e),this.value=e),e}getDpi(){return 96}getRem(){return this.document.rootEmSize}getEm(){return this.document.emSize}getUnits(){return this.getString().replace(/[0-9.-]/g,"")}getPixels(t){let e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(!this.hasValue())return 0;const[i,r]="boolean"==typeof t?[void 0,t]:[t],{viewPort:s}=this.document.screen;switch(!0){case this.isString(/vmin$/):return this.getNumber()/100*Math.min(s.computeSize("x"),s.computeSize("y"));case this.isString(/vmax$/):return this.getNumber()/100*Math.max(s.computeSize("x"),s.computeSize("y"));case this.isString(/vw$/):return this.getNumber()/100*s.computeSize("x");case this.isString(/vh$/):return this.getNumber()/100*s.computeSize("y");case this.isString(/rem$/):return this.getNumber()*this.getRem();case this.isString(/em$/):return this.getNumber()*this.getEm();case this.isString(/ex$/):return this.getNumber()*this.getEm()/2;case this.isString(/px$/):return this.getNumber();case this.isString(/pt$/):return this.getNumber()*this.getDpi()*(1/72);case this.isString(/pc$/):return 15*this.getNumber();case this.isString(/cm$/):return this.getNumber()*this.getDpi()/2.54;case this.isString(/mm$/):return this.getNumber()*this.getDpi()/25.4;case this.isString(/in$/):return this.getNumber()*this.getDpi();case this.isString(/%$/)&&r:return this.getNumber()*this.getEm();case this.isString(/%$/):return this.getNumber()*s.computeSize(i);default:{const t=this.getNumber();return e&&t<1?t*s.computeSize(i):t}}}getMilliseconds(){return this.hasValue()?this.isString(/ms$/)?this.getNumber():1e3*this.getNumber():0}getRadians(){if(!this.hasValue())return 0;switch(!0){case this.isString(/deg$/):return this.getNumber()*(Math.PI/180);case this.isString(/grad$/):return this.getNumber()*(Math.PI/200);case this.isString(/rad$/):return this.getNumber();default:return this.getNumber()*(Math.PI/180)}}getDefinition(){const t=this.getString(),e=/#([^)'"]+)/.exec(t),i=(null==e?void 0:e[1])||t;return this.document.definitions[i]}getFillStyleDefinition(t,e){let i=this.getDefinition();if(!i)return null;if("function"==typeof i.createGradient&&"getBoundingBox"in t)return i.createGradient(this.document.ctx,t,e);if("function"==typeof i.createPattern){if(i.getHrefAttribute().hasValue()){const t=i.getAttribute("patternTransform");i=i.getHrefAttribute().getDefinition(),i&&t.hasValue()&&i.getAttribute("patternTransform",!0).setValue(t.value)}if(i)return i.createPattern(this.document.ctx,t,e)}return null}getTextBaseline(){if(!this.hasValue())return null;const t=this.getString();return rt.textBaselineMapping[t]||null}addOpacity(t){let e=this.getColor();const i=e.length;let r=0;for(let t=0;t1&&void 0!==arguments[1]?arguments[1]:0;const[i=e,r=e]=I(t);return new at(i,r)}static parseScale(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;const[i=e,r=i]=I(t);return new at(i,r)}static parsePath(t){const e=I(t),i=e.length,r=[];for(let t=0;t0}runEvents(){if(!this.working)return;const{screen:t,events:e,eventElements:i}=this,{style:r}=t.ctx.canvas;let s;r&&(r.cursor=""),e.forEach(((t,e)=>{let{run:r}=t;for(s=i[e];s;)r(s),s=s.parent})),this.events=[],this.eventElements=[]}checkPath(t,e){if(!this.working||!e)return;const{events:i,eventElements:r}=this;i.forEach(((i,s)=>{let{x:n,y:a}=i;!r[s]&&e.isPointInPath&&e.isPointInPath(n,a)&&(r[s]=t)}))}checkBoundingBox(t,e){if(!this.working||!e)return;const{events:i,eventElements:r}=this;i.forEach(((i,s)=>{let{x:n,y:a}=i;!r[s]&&e.isPointInBox(n,a)&&(r[s]=t)}))}mapXY(t,e){const{window:i,ctx:r}=this.screen,s=new at(t,e);let n=r.canvas;for(;n;)s.x-=n.offsetLeft,s.y-=n.offsetTop,n=n.offsetParent;return(null==i?void 0:i.scrollX)&&(s.x+=i.scrollX),(null==i?void 0:i.scrollY)&&(s.y+=i.scrollY),s}onClick(t){const{x:e,y:i}=this.mapXY(t.clientX,t.clientY);this.events.push({type:"onclick",x:e,y:i,run(t){t.onClick&&t.onClick()}})}onMouseMove(t){const{x:e,y:i}=this.mapXY(t.clientX,t.clientY);this.events.push({type:"onmousemove",x:e,y:i,run(t){t.onMouseMove&&t.onMouseMove()}})}constructor(t){this.screen=t,this.working=!1,this.events=[],this.eventElements=[],this.onClick=this.onClick.bind(this),this.onMouseMove=this.onMouseMove.bind(this)}}const ht="undefined"!=typeof window?window:null,lt="undefined"!=typeof fetch?fetch.bind(void 0):void 0;class ct{wait(t){this.waits.push(t)}ready(){return this.readyPromise?this.readyPromise:Promise.resolve()}isReady(){if(this.isReadyLock)return!0;const t=this.waits.every((t=>t()));return t&&(this.waits=[],this.resolveReady&&this.resolveReady()),this.isReadyLock=t,t}setDefaults(t){t.strokeStyle="rgba(0,0,0,0)",t.lineCap="butt",t.lineJoin="miter",t.miterLimit=4}setViewBox(t){let{document:e,ctx:i,aspectRatio:r,width:s,desiredWidth:n,height:a,desiredHeight:o,minX:h=0,minY:l=0,refX:c,refY:u,clip:g=!1,clipX:d=0,clipY:p=0}=t;const f=R(r).replace(/^defer\s/,""),[y,m]=f.split(" "),x=y||"xMidYMid",b=m||"meet",v=s/n,w=a/o,S=Math.min(v,w),T=Math.max(v,w);let A=n,C=o;"meet"===b&&(A*=S,C*=S),"slice"===b&&(A*=T,C*=T);const P=new rt(e,"refX",c),O=new rt(e,"refY",u),N=P.hasValue()&&O.hasValue();if(N&&i.translate(-S*P.getPixels("x"),-S*O.getPixels("y")),g){const t=S*d,e=S*p;i.beginPath(),i.moveTo(t,e),i.lineTo(s,e),i.lineTo(s,a),i.lineTo(t,a),i.closePath(),i.clip()}if(!N){const t="meet"===b&&S===w,e="slice"===b&&T===w,r="meet"===b&&S===v,n="slice"===b&&T===v;x.startsWith("xMid")&&(t||e)&&i.translate(s/2-A/2,0),x.endsWith("YMid")&&(r||n)&&i.translate(0,a/2-C/2),x.startsWith("xMax")&&(t||e)&&i.translate(s-A,0),x.endsWith("YMax")&&(r||n)&&i.translate(0,a-C)}switch(!0){case"none"===x:i.scale(v,w);break;case"meet"===b:i.scale(S,S);break;case"slice"===b:i.scale(T,T)}i.translate(-h,-l)}start(t){let{enableRedraw:e=!1,ignoreMouse:i=!1,ignoreAnimation:r=!1,ignoreDimensions:s=!1,ignoreClear:n=!1,forceRedraw:o,scaleWidth:h,scaleHeight:l,offsetX:c,offsetY:u}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{mouse:g}=this,d=1e3/ct.FRAMERATE;if(this.isReadyLock=!1,this.frameDuration=d,this.readyPromise=new Promise((t=>{this.resolveReady=t})),this.isReady()&&this.render(t,s,n,h,l,c,u),!e)return;let p=Date.now(),f=p,y=0;const m=()=>{p=Date.now(),y=p-f,y>=d&&(f=p-y%d,this.shouldUpdate(r,o)&&(this.render(t,s,n,h,l,c,u),g.runEvents())),this.intervalId=a(m)};i||g.start(),this.intervalId=a(m)}stop(){this.intervalId&&(a.cancel(this.intervalId),this.intervalId=null),this.mouse.stop()}shouldUpdate(t,e){if(!t){const{frameDuration:t}=this;if(this.animations.reduce(((e,i)=>i.update(t)||e),!1))return!0}return!("function"!=typeof e||!e())||!(this.isReadyLock||!this.isReady())||!!this.mouse.hasEvents()}render(t,e,i,r,s,n,a){const{viewPort:o,ctx:h,isFirstRender:l}=this,c=h.canvas;o.clear(),c.width&&c.height&&o.setCurrent(c.width,c.height);const u=t.getStyle("width"),g=t.getStyle("height");!e&&(l||"number"!=typeof r&&"number"!=typeof s)&&(u.hasValue()&&(c.width=u.getPixels("x"),c.style&&(c.style.width="".concat(c.width,"px"))),g.hasValue()&&(c.height=g.getPixels("y"),c.style&&(c.style.height="".concat(c.height,"px"))));let d=c.clientWidth||c.width,p=c.clientHeight||c.height;if(e&&u.hasValue()&&g.hasValue()&&(d=u.getPixels("x"),p=g.getPixels("y")),o.setCurrent(d,p),"number"==typeof n&&t.getAttribute("x",!0).setValue(n),"number"==typeof a&&t.getAttribute("y",!0).setValue(a),"number"==typeof r||"number"==typeof s){const e=I(t.getAttribute("viewBox").getString());let i=0,n=0;if("number"==typeof r){const s=t.getStyle("width");s.hasValue()?i=s.getPixels("x")/r:e[2]&&!isNaN(e[2])&&(i=e[2]/r)}if("number"==typeof s){const i=t.getStyle("height");i.hasValue()?n=i.getPixels("y")/s:e[3]&&!isNaN(e[3])&&(n=e[3]/s)}i||(i=n),n||(n=i),t.getAttribute("width",!0).setValue(r),t.getAttribute("height",!0).setValue(s);const a=t.getStyle("transform",!0,!0);a.setValue("".concat(a.getString()," scale(").concat(1/i,", ").concat(1/n,")"))}i||h.clearRect(0,0,d,p),t.render(h),l&&(this.isFirstRender=!1)}constructor(t,{fetch:e=lt,window:i=ht}={}){if(this.ctx=t,this.viewPort=new st,this.mouse=new ot(this),this.animations=[],this.waits=[],this.frameDuration=0,this.isReadyLock=!1,this.isFirstRender=!0,this.intervalId=null,this.window=i,!e)throw new Error("Can't find 'fetch' in 'globalThis', please provide it via options");this.fetch=e}}ct.defaultWindow=ht,ct.defaultFetch=lt,ct.FRAMERATE=30,ct.MAX_VIRTUAL_PIXELS=3e4;const{defaultFetch:ut}=ct,gt="undefined"!=typeof DOMParser?DOMParser:void 0;class dt{async parse(t){return t.startsWith("<")?this.parseFromString(t):this.load(t)}parseFromString(t){const e=new this.DOMParser;try{return this.checkDocument(e.parseFromString(t,"image/svg+xml"))}catch(i){return this.checkDocument(e.parseFromString(t,"text/xml"))}}checkDocument(t){const e=t.getElementsByTagName("parsererror")[0];if(e)throw new Error(e.textContent||"Unknown parse error");return t}async load(t){const e=await this.fetch(t),i=await e.text();return this.parseFromString(i)}constructor({fetch:t=ut,DOMParser:e=gt}={}){if(!t)throw new Error("Can't find 'fetch' in 'globalThis', please provide it via options");if(!e)throw new Error("Can't find 'DOMParser' in 'globalThis', please provide it via options");this.fetch=t,this.DOMParser=e}}class pt{apply(t){const{originX:e,originY:i,matrix:r}=this,s=e.getPixels("x"),n=i.getPixels("y");t.translate(s,n),t.transform(r[0],r[1],r[2],r[3],r[4],r[5]),t.translate(-s,-n)}unapply(t){const{originX:e,originY:i,matrix:r}=this,s=r[0],n=r[2],a=r[4],o=r[1],h=r[3],l=r[5],c=1/(s*(1*h-0*l)-n*(1*o-0*l)+a*(0*o-0*h)),u=e.getPixels("x"),g=i.getPixels("y");t.translate(u,g),t.transform(c*(1*h-0*l),c*(0*l-1*o),c*(0*a-1*n),c*(1*s-0*a),c*(n*l-a*h),c*(a*o-s*l)),t.translate(-u,-g)}applyToPoint(t){t.applyTransform(this.matrix)}constructor(t,e,i){this.type="matrix",this.matrix=function(t){const e=I(t);return[e[0]||0,e[1]||0,e[2]||0,e[3]||0,e[4]||0,e[5]||0]}(e),this.originX=i[0],this.originY=i[1]}}class ft extends pt{constructor(t,e,i){super(t,e,i),this.type="skew",this.angle=new rt(t,"angle",e)}}class yt{static fromElement(t,e){const i=e.getStyle("transform",!1,!0);if(i.hasValue()){const[r,s=r]=e.getStyle("transform-origin",!1,!0).split();if(r&&s){const e=[r,s];return new yt(t,i.getString(),e)}}return null}apply(t){this.transforms.forEach((e=>e.apply(t)))}unapply(t){this.transforms.forEach((e=>e.unapply(t)))}applyToPoint(t){this.transforms.forEach((e=>e.applyToPoint(t)))}constructor(t,e,i){this.document=t,this.transforms=[],R(e).trim().replace(/\)([a-zA-Z])/g,") $1").replace(/\)(\s?,\s?)/g,") ").split(/\s(?=[a-z])/).forEach((t=>{if("none"===t)return;const[e,r]=function(t){const[e="",i=""]=t.split("(");return[e.trim(),i.trim().replace(")","")]}(t),s=yt.transformTypes[e];s&&this.transforms.push(new s(this.document,r,i))}))}}yt.transformTypes={translate:class{apply(t){const{x:e,y:i}=this.point;t.translate(e||0,i||0)}unapply(t){const{x:e,y:i}=this.point;t.translate(-1*e||0,-1*i||0)}applyToPoint(t){const{x:e,y:i}=this.point;t.applyTransform([1,0,0,1,e||0,i||0])}constructor(t,e){this.type="translate",this.point=at.parse(e)}},rotate:class{apply(t){const{cx:e,cy:i,originX:r,originY:s,angle:n}=this,a=e+r.getPixels("x"),o=i+s.getPixels("y");t.translate(a,o),t.rotate(n.getRadians()),t.translate(-a,-o)}unapply(t){const{cx:e,cy:i,originX:r,originY:s,angle:n}=this,a=e+r.getPixels("x"),o=i+s.getPixels("y");t.translate(a,o),t.rotate(-1*n.getRadians()),t.translate(-a,-o)}applyToPoint(t){const{cx:e,cy:i,angle:r}=this,s=r.getRadians();t.applyTransform([1,0,0,1,e||0,i||0]),t.applyTransform([Math.cos(s),Math.sin(s),-Math.sin(s),Math.cos(s),0,0]),t.applyTransform([1,0,0,1,-e||0,-i||0])}constructor(t,e,i){this.type="rotate";const r=I(e);this.angle=new rt(t,"angle",r[0]),this.originX=i[0],this.originY=i[1],this.cx=r[1]||0,this.cy=r[2]||0}},scale:class{apply(t){const{scale:{x:e,y:i},originX:r,originY:s}=this,n=r.getPixels("x"),a=s.getPixels("y");t.translate(n,a),t.scale(e,i||e),t.translate(-n,-a)}unapply(t){const{scale:{x:e,y:i},originX:r,originY:s}=this,n=r.getPixels("x"),a=s.getPixels("y");t.translate(n,a),t.scale(1/e,1/i||e),t.translate(-n,-a)}applyToPoint(t){const{x:e,y:i}=this.scale;t.applyTransform([e||0,0,0,i||0,0,0])}constructor(t,e,i){this.type="scale";const r=at.parseScale(e);0!==r.x&&0!==r.y||(r.x=W,r.y=W),this.scale=r,this.originX=i[0],this.originY=i[1]}},matrix:pt,skewX:class extends ft{constructor(t,e,i){super(t,e,i),this.type="skewX",this.matrix=[1,0,Math.tan(this.angle.getRadians()),1,0,0]}},skewY:class extends ft{constructor(t,e,i){super(t,e,i),this.type="skewY",this.matrix=[1,Math.tan(this.angle.getRadians()),0,1,0,0]}}};class mt{getAttribute(t){let e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const i=this.attributes[t];if(!i&&e){const e=new rt(this.document,t,"");return this.attributes[t]=e,e}return i||rt.empty(this.document)}getHrefAttribute(){let t;for(const e in this.attributes)if("href"===e||e.endsWith(":href")){t=this.attributes[e];break}return t||rt.empty(this.document)}getStyle(t){let e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const r=this.styles[t];if(r)return r;const s=this.getAttribute(t);if(s.hasValue())return this.styles[t]=s,s;if(!i){const{parent:e}=this;if(e){const i=e.getStyle(t);if(i.hasValue())return i}}if(e){const e=new rt(this.document,t,"");return this.styles[t]=e,e}return rt.empty(this.document)}render(t){if("none"!==this.getStyle("display").getString()&&"hidden"!==this.getStyle("visibility").getString()){if(t.save(),this.getStyle("mask").hasValue()){const e=this.getStyle("mask").getDefinition();e&&(this.applyEffects(t),e.apply(t,this))}else if("none"!==this.getStyle("filter").getValue("none")){const e=this.getStyle("filter").getDefinition();e&&(this.applyEffects(t),e.apply(t,this))}else this.setContext(t),this.renderChildren(t),this.clearContext(t);t.restore()}}setContext(t){}applyEffects(t){const e=yt.fromElement(this.document,this);e&&e.apply(t);const i=this.getStyle("clip-path",!1,!0);if(i.hasValue()){const e=i.getDefinition();e&&e.apply(t)}}clearContext(t){}renderChildren(t){this.children.forEach((e=>{e.render(t)}))}addChild(t){const e=t instanceof mt?t:this.document.createElement(t);e.parent=this,mt.ignoreChildTypes.includes(e.type)||this.children.push(e)}matchesSelector(t){var e;const{node:i}=this;if("function"==typeof i.matches)return i.matches(t);const r=null===(e=i.getAttribute)||void 0===e?void 0:e.call(i,"class");return!(!r||""===r)&&r.split(" ").some((e=>".".concat(e)===t))}addStylesFromStyleDefinition(){const{styles:t,stylesSpecificity:e}=this.document;let i;for(const r in t)if(!r.startsWith("@")&&this.matchesSelector(r)){const s=t[r],n=e[r];if(s)for(const t in s){let e=this.stylesSpecificity[t];void 0===e&&(e="000"),n&&n>=e&&(i=s[t],i&&(this.styles[t]=i),this.stylesSpecificity[t]=n)}}}removeStyles(t,e){return e.reduce(((e,i)=>{const r=t.getStyle(i);if(!r.hasValue())return e;const s=r.getString();return r.setValue(""),[...e,[i,s]]}),[])}restoreStyles(t,e){e.forEach((e=>{let[i,r]=e;t.getStyle(i,!0).setValue(r)}))}isFirstChild(){var t;return 0===(null===(t=this.parent)||void 0===t?void 0:t.children.indexOf(this))}constructor(t,e,i=!1){if(this.document=t,this.node=e,this.captureTextNodes=i,this.type="",this.attributes={},this.styles={},this.stylesSpecificity={},this.animationFrozen=!1,this.animationFrozenValue="",this.parent=null,this.children=[],!e||1!==e.nodeType)return;if(Array.from(e.attributes).forEach((e=>{const i=(r=e.nodeName,L.test(r)?r.toLowerCase():r);var r;this.attributes[i]=new rt(t,i,e.value)})),this.addStylesFromStyleDefinition(),this.getAttribute("style").hasValue()){const e=this.getAttribute("style").getString().split(";").map((t=>t.trim()));e.forEach((e=>{if(!e)return;const[i,r]=e.split(":").map((t=>t.trim()));i&&(this.styles[i]=new rt(t,i,r))}))}const{definitions:r}=t,s=this.getAttribute("id");s.hasValue()&&(r[s.getString()]||(r[s.getString()]=this)),Array.from(e.childNodes).forEach((e=>{if(1===e.nodeType)this.addChild(e);else if(i&&(3===e.nodeType||4===e.nodeType)){const i=t.createTextNode(e);i.getText().length>0&&this.addChild(i)}}))}}mt.ignoreChildTypes=["title"];class xt extends mt{constructor(t,e,i){super(t,e,i)}}function bt(t){const e=t.trim();return/^('|")/.test(e)?e:'"'.concat(e,'"')}function vt(t){if(!t)return"";const e=t.trim().toLowerCase();switch(e){case"normal":case"italic":case"oblique":case"inherit":case"initial":case"unset":return e;default:return/^oblique\s+(-|)\d+deg$/.test(e)?e:""}}function wt(t){if(!t)return"";const e=t.trim().toLowerCase();switch(e){case"normal":case"bold":case"lighter":case"bolder":case"inherit":case"initial":case"unset":return e;default:return/^[\d.]+$/.test(e)?e:""}}class St{static parse(){let t=arguments.length>1?arguments[1]:void 0,e="",i="",r="",s="",n="";const a=R(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").trim().split(" "),o={fontSize:!1,fontStyle:!1,fontWeight:!1,fontVariant:!1};return a.forEach((t=>{switch(!0){case!o.fontStyle&&St.styles.includes(t):"inherit"!==t&&(e=t),o.fontStyle=!0;break;case!o.fontVariant&&St.variants.includes(t):"inherit"!==t&&(i=t),o.fontStyle=!0,o.fontVariant=!0;break;case!o.fontWeight&&St.weights.includes(t):"inherit"!==t&&(r=t),o.fontStyle=!0,o.fontVariant=!0,o.fontWeight=!0;break;case!o.fontSize:"inherit"!==t&&(s=t.split("/")[0]||""),o.fontStyle=!0,o.fontVariant=!0,o.fontWeight=!0,o.fontSize=!0;break;default:"inherit"!==t&&(n+=t)}})),new St(e,i,r,s,n,t)}toString(){return[vt(this.fontStyle),this.fontVariant,wt(this.fontWeight),this.fontSize,(t=this.fontFamily,"undefined"==typeof process?t:t.trim().split(",").map(bt).join(","))].join(" ").trim();var t}constructor(t,e,i,r,s,n){const a=n?"string"==typeof n?St.parse(n):n:{};this.fontFamily=s||a.fontFamily,this.fontSize=r||a.fontSize,this.fontStyle=t||a.fontStyle,this.fontWeight=i||a.fontWeight,this.fontVariant=e||a.fontVariant}}St.styles="normal|italic|oblique|inherit",St.variants="normal|small-caps|inherit",St.weights="normal|bold|bolder|lighter|100|200|300|400|500|600|700|800|900|inherit";class Tt{get x(){return this.x1}get y(){return this.y1}get width(){return this.x2-this.x1}get height(){return this.y2-this.y1}addPoint(t,e){void 0!==t&&((isNaN(this.x1)||isNaN(this.x2))&&(this.x1=t,this.x2=t),tthis.x2&&(this.x2=t)),void 0!==e&&((isNaN(this.y1)||isNaN(this.y2))&&(this.y1=e,this.y2=e),ethis.y2&&(this.y2=e))}addX(t){this.addPoint(t,0)}addY(t){this.addPoint(0,t)}addBoundingBox(t){if(!t)return;const{x1:e,y1:i,x2:r,y2:s}=t;this.addPoint(e,i),this.addPoint(r,s)}sumCubic(t,e,i,r,s){return Math.pow(1-t,3)*e+3*Math.pow(1-t,2)*t*i+3*(1-t)*Math.pow(t,2)*r+Math.pow(t,3)*s}bezierCurveAdd(t,e,i,r,s){const n=6*e-12*i+6*r,a=-3*e+9*i-9*r+3*s,o=3*i-3*e;if(0===a){if(0===n)return;const a=-o/n;return void(01&&void 0!==arguments[1]&&arguments[1];if(!e){const e=this.getStyle("fill"),i=this.getStyle("fill-opacity"),r=this.getStyle("stroke"),s=this.getStyle("stroke-opacity");if(e.isUrlDefinition()){const r=e.getFillStyleDefinition(this,i);r&&(t.fillStyle=r)}else if(e.hasValue()){"currentColor"===e.getString()&&e.setValue(this.getStyle("color").getColor());const i=e.getColor();"inherit"!==i&&(t.fillStyle="none"===i?"rgba(0,0,0,0)":i)}if(i.hasValue()){const e=new rt(this.document,"fill",t.fillStyle).addOpacity(i).getColor();t.fillStyle=e}if(r.isUrlDefinition()){const e=r.getFillStyleDefinition(this,s);e&&(t.strokeStyle=e)}else if(r.hasValue()){"currentColor"===r.getString()&&r.setValue(this.getStyle("color").getColor());const e=r.getString();"inherit"!==e&&(t.strokeStyle="none"===e?"rgba(0,0,0,0)":e)}if(s.hasValue()){const e=new rt(this.document,"stroke",t.strokeStyle).addOpacity(s).getString();t.strokeStyle=e}const n=this.getStyle("stroke-width");if(n.hasValue()){const e=n.getPixels();t.lineWidth=e||W}const a=this.getStyle("stroke-linecap"),o=this.getStyle("stroke-linejoin"),h=this.getStyle("stroke-miterlimit"),l=this.getStyle("stroke-dasharray"),c=this.getStyle("stroke-dashoffset");if(a.hasValue()&&(t.lineCap=a.getString()),o.hasValue()&&(t.lineJoin=o.getString()),h.hasValue()&&(t.miterLimit=h.getNumber()),l.hasValue()&&"none"!==l.getString()){const e=I(l.getString());void 0!==t.setLineDash?t.setLineDash(e):void 0!==t.webkitLineDash?t.webkitLineDash=e:void 0===t.mozDash||1===e.length&&0===e[0]||(t.mozDash=e);const i=c.getPixels();void 0!==t.lineDashOffset?t.lineDashOffset=i:void 0!==t.webkitLineDashOffset?t.webkitLineDashOffset=i:void 0!==t.mozDashOffset&&(t.mozDashOffset=i)}}if(this.modifiedEmSizeStack=!1,void 0!==t.font){const e=this.getStyle("font"),i=this.getStyle("font-style"),r=this.getStyle("font-variant"),s=this.getStyle("font-weight"),n=this.getStyle("font-size"),a=this.getStyle("font-family"),o=new St(i.getString(),r.getString(),s.getString(),n.hasValue()?"".concat(n.getPixels(!0),"px"):"",a.getString(),St.parse(e.getString(),t.font));i.setValue(o.fontStyle),r.setValue(o.fontVariant),s.setValue(o.fontWeight),n.setValue(o.fontSize),a.setValue(o.fontFamily),t.font=o.toString(),n.isPixels()&&(this.document.emSize=n.getPixels(),this.modifiedEmSizeStack=!0)}e||(this.applyEffects(t),t.globalAlpha=this.calculateOpacity())}clearContext(t){super.clearContext(t),this.modifiedEmSizeStack&&this.document.popEmSize()}constructor(...t){super(...t),this.modifiedEmSizeStack=!1}}class Ct extends At{setContext(t){let e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];super.setContext(t,e);const i=this.getStyle("dominant-baseline").getTextBaseline()||this.getStyle("alignment-baseline").getTextBaseline();i&&(t.textBaseline=i)}initializeCoordinates(){this.x=0,this.y=0,this.leafTexts=[],this.textChunkStart=0,this.minX=Number.POSITIVE_INFINITY,this.maxX=Number.NEGATIVE_INFINITY}getBoundingBox(t){if("text"!==this.type)return this.getTElementBoundingBox(t);this.initializeCoordinates(),this.adjustChildCoordinatesRecursive(t);let e=null;return this.children.forEach(((i,r)=>{const s=this.getChildBoundingBox(t,this,this,r);e?e.addBoundingBox(s):e=s})),e}getFontSize(){const{document:t,parent:e}=this,i=St.parse(t.ctx.font).fontSize;return e.getStyle("font-size").getNumber(i)}getTElementBoundingBox(t){const e=this.getFontSize();return new Tt(this.x,this.y-e,this.x+this.measureText(t),this.y)}getGlyph(t,e,i){const r=e[i];let s;if(t.isArabic){var n;const a=e.length,o=e[i-1],h=e[i+1];let l="isolated";(0===i||" "===o)&&i0&&" "!==o&&i0&&" "!==o&&(i===a-1||" "===h)&&(l="initial"),s=(null===(n=t.arabicGlyphs[r])||void 0===n?void 0:n[l])||t.glyphs[r]}else s=t.glyphs[r];return s||(s=t.missingGlyph),s}getText(){return""}getTextFromNode(t){const e=t||this.node,i=Array.from(e.parentNode.childNodes),r=i.indexOf(e),s=i.length-1;let n=R(e.textContent||"");return 0===r&&(n=n.replace(/^[\n \t]+/,"")),r===s&&(n=n.replace(/[\n \t]+$/,"")),n}renderChildren(t){if("text"!==this.type)return void this.renderTElementChildren(t);this.initializeCoordinates(),this.adjustChildCoordinatesRecursive(t),this.children.forEach(((e,i)=>{this.renderChild(t,this,this,i)}));const{mouse:e}=this.document.screen;e.isWorking()&&e.checkBoundingBox(this,this.getBoundingBox(t))}renderTElementChildren(t){const{document:e,parent:i}=this,r=this.getText(),s=i.getStyle("font-family").getDefinition();if(s){const{unitsPerEm:n}=s.fontFace,a=St.parse(e.ctx.font),o=i.getStyle("font-size").getNumber(a.fontSize),h=i.getStyle("font-style").getString(a.fontStyle),l=o/n,c=s.isRTL?r.split("").reverse().join(""):r,u=I(i.getAttribute("dx").getString()),g=c.length;for(let e=0;e=this.leafTexts.length)return;const t=this.leafTexts[this.textChunkStart],e=t.getStyle("text-anchor").getString("start");let i=0;i="start"===e?t.x-this.minX:"end"===e?t.x-this.maxX:t.x-(this.minX+this.maxX)/2;for(let t=this.textChunkStart;t{this.adjustChildCoordinatesRecursiveCore(t,this,this,i)})),this.applyAnchoring()}adjustChildCoordinatesRecursiveCore(t,e,i,r){const s=i.children[r];s.children.length>0?s.children.forEach(((i,r)=>{e.adjustChildCoordinatesRecursiveCore(t,e,s,r)})):this.adjustChildCoordinates(t,e,i,r)}adjustChildCoordinates(t,e,i,r){const s=i.children[r];if("function"!=typeof s.measureText)return s;t.save(),s.setContext(t,!0);const n=s.getAttribute("x"),a=s.getAttribute("y"),o=s.getAttribute("dx"),h=s.getAttribute("dy"),l=s.getStyle("font-family").getDefinition(),c=Boolean(null==l?void 0:l.isRTL);0===r&&(n.hasValue()||n.setValue(s.getInheritedAttribute("x")),a.hasValue()||a.setValue(s.getInheritedAttribute("y")),o.hasValue()||o.setValue(s.getInheritedAttribute("dx")),h.hasValue()||h.setValue(s.getInheritedAttribute("dy")));const u=s.measureText(t);return c&&(e.x-=u),n.hasValue()?(e.applyAnchoring(),s.x=n.getPixels("x"),o.hasValue()&&(s.x+=o.getPixels("x"))):(o.hasValue()&&(e.x+=o.getPixels("x")),s.x=e.x),e.x=s.x,c||(e.x+=u),a.hasValue()?(s.y=a.getPixels("y"),h.hasValue()&&(s.y+=h.getPixels("y"))):(h.hasValue()&&(e.y+=h.getPixels("y")),s.y=e.y),e.y=s.y,e.leafTexts.push(s),e.minX=Math.min(e.minX,s.x,s.x+u),e.maxX=Math.max(e.maxX,s.x,s.x+u),s.clearContext(t),t.restore(),s}getChildBoundingBox(t,e,i,r){const s=i.children[r];if("function"!=typeof s.getBoundingBox)return null;const n=s.getBoundingBox(t);return n&&s.children.forEach(((i,r)=>{const a=e.getChildBoundingBox(t,e,s,r);n.addBoundingBox(a)})),n}renderChild(t,e,i,r){const s=i.children[r];s.render(t),s.children.forEach(((i,r)=>{e.renderChild(t,e,s,r)}))}measureText(t){const{measureCache:e}=this;if(~e)return e;const i=this.getText(),r=this.measureTargetText(t,i);return this.measureCache=r,r}measureTargetText(t,e){if(!e.length)return 0;const{parent:i}=this,r=i.getStyle("font-family").getDefinition();if(r){const t=this.getFontSize(),s=r.isRTL?e.split("").reverse().join(""):e,n=I(i.getAttribute("dx").getString()),a=s.length;let o=0;for(let e=0;e0?"":this.getTextFromNode()}}class Ot extends Pt{constructor(...t){super(...t),this.type="textNode"}}class Nt extends P{reset(){this.i=-1,this.command=null,this.previousCommand=null,this.start=new at(0,0),this.control=new at(0,0),this.current=new at(0,0),this.points=[],this.angles=[]}isEnd(){const{i:t,commands:e}=this;return t>=e.length-1}next(){const t=this.commands[++this.i];return this.previousCommand=this.command,this.command=t,t}getPoint(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"x",e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"y";const i=new at(this.command[t],this.command[e]);return this.makeAbsolute(i)}getAsControlPoint(t,e){const i=this.getPoint(t,e);return this.control=i,i}getAsCurrentPoint(t,e){const i=this.getPoint(t,e);return this.current=i,i}getReflectedControlPoint(){const t=this.previousCommand.type;if(t!==P.CURVE_TO&&t!==P.SMOOTH_CURVE_TO&&t!==P.QUAD_TO&&t!==P.SMOOTH_QUAD_TO)return this.current;const{current:{x:e,y:i},control:{x:r,y:s}}=this;return new at(2*e-r,2*i-s)}makeAbsolute(t){if(this.command.relative){const{x:e,y:i}=this.current;t.x+=e,t.y+=i}return t}addMarker(t,e,i){const{points:r,angles:s}=this;i&&s.length>0&&!s[s.length-1]&&(s[s.length-1]=r[r.length-1].angleTo(i)),this.addMarkerAngle(t,e?e.angleTo(t):null)}addMarkerAngle(t,e){this.points.push(t),this.angles.push(e)}getMarkerPoints(){return this.points}getMarkerAngles(){const{angles:t}=this,e=t.length;for(let i=0;i[t,i[e]]));return r}renderChildren(t){this.path(t),this.document.screen.mouse.checkPath(this,t);const e=this.getStyle("fill-rule");""!==t.fillStyle&&("inherit"!==e.getString("inherit")?t.fill(e.getString()):t.fill()),""!==t.strokeStyle&&("non-scaling-stroke"===this.getAttribute("vector-effect").getString()?(t.save(),t.setTransform(1,0,0,1,0,0),t.stroke(),t.restore()):t.stroke());const i=this.getMarkers();if(i){const e=i.length-1,r=this.getStyle("marker-start"),s=this.getStyle("marker-mid"),n=this.getStyle("marker-end");if(r.isUrlDefinition()){const e=r.getDefinition(),[s,n]=i[0];e.render(t,s,n)}if(s.isUrlDefinition()){const r=s.getDefinition();for(let s=1;s1&&(r*=Math.sqrt(u),s*=Math.sqrt(u));let g=(a===o?-1:1)*Math.sqrt((Math.pow(r,2)*Math.pow(s,2)-Math.pow(r,2)*Math.pow(c.y,2)-Math.pow(s,2)*Math.pow(c.x,2))/(Math.pow(r,2)*Math.pow(c.y,2)+Math.pow(s,2)*Math.pow(c.x,2)));isNaN(g)&&(g=0);const d=new at(g*r*c.y/s,g*-s*c.x/r),p=new at((e.x+l.x)/2+Math.cos(h)*d.x-Math.sin(h)*d.y,(e.y+l.y)/2+Math.sin(h)*d.x+Math.cos(h)*d.y),f=G([1,0],[(c.x-d.x)/r,(c.y-d.y)/s]),y=[(c.x-d.x)/r,(c.y-d.y)/s],m=[(-c.x-d.x)/r,(-c.y-d.y)/s];let x=G(y,m);return j(y,m)<=-1&&(x=Math.PI),j(y,m)>=1&&(x=0),{currentPoint:l,rX:r,rY:s,sweepFlag:o,xAxisRotation:h,centp:p,a1:f,ad:x}}pathA(t,e){const{pathParser:i}=this,{currentPoint:r,rX:s,rY:n,sweepFlag:a,xAxisRotation:o,centp:h,a1:l,ad:c}=Et.pathA(i),u=1-a?1:-1,g=l+u*(c/2),d=new at(h.x+s*Math.cos(g),h.y+n*Math.sin(g));if(i.addMarkerAngle(d,g-u*Math.PI/2),i.addMarkerAngle(r,g-u*Math.PI),e.addPoint(r.x,r.y),t&&!isNaN(l)&&!isNaN(c)){const e=s>n?s:n,i=s>n?1:s/n,r=s>n?n/s:1;t.translate(h.x,h.y),t.rotate(o),t.scale(i,r),t.arc(0,0,e,l,l+c,Boolean(1-a)),t.scale(1/i,1/r),t.rotate(-o),t.translate(-h.x,-h.y)}}static pathZ(t){t.current=t.start}pathZ(t,e){Et.pathZ(this.pathParser),t&&e.x1!==e.x2&&e.y1!==e.y2&&t.closePath()}constructor(t,e,i){super(t,e,i),this.type="path",this.pathParser=new Nt(this.getAttribute("d").getString())}}class Mt extends At{setContext(t){var e;const{document:i}=this,{screen:r,window:s}=i,n=t.canvas;if(r.setDefaults(t),"style"in n&&void 0!==t.font&&s&&void 0!==s.getComputedStyle){t.font=s.getComputedStyle(n).getPropertyValue("font");const e=new rt(i,"fontSize",St.parse(t.font).fontSize);e.hasValue()&&(i.rootEmSize=e.getPixels("y"),i.emSize=i.rootEmSize)}this.getAttribute("x").hasValue()||this.getAttribute("x",!0).setValue(0),this.getAttribute("y").hasValue()||this.getAttribute("y",!0).setValue(0);let{width:a,height:o}=r.viewPort;this.getStyle("width").hasValue()||this.getStyle("width",!0).setValue("100%"),this.getStyle("height").hasValue()||this.getStyle("height",!0).setValue("100%"),this.getStyle("color").hasValue()||this.getStyle("color",!0).setValue("black");const h=this.getAttribute("refX"),l=this.getAttribute("refY"),c=this.getAttribute("viewBox"),u=c.hasValue()?I(c.getString()):null,g=!this.root&&"visible"!==this.getStyle("overflow").getValue("hidden");let d=0,p=0,f=0,y=0;u&&(d=u[0],p=u[1]),this.root||(a=this.getStyle("width").getPixels("x"),o=this.getStyle("height").getPixels("y"),"marker"===this.type&&(f=d,y=p,d=0,p=0)),r.viewPort.setCurrent(a,o),!this.node||this.parent&&"foreignObject"!==(null===(e=this.node.parentNode)||void 0===e?void 0:e.nodeName)||!this.getStyle("transform",!1,!0).hasValue()||this.getStyle("transform-origin",!1,!0).hasValue()||this.getStyle("transform-origin",!0,!0).setValue("50% 50%"),super.setContext(t),t.translate(this.getAttribute("x").getPixels("x"),this.getAttribute("y").getPixels("y")),u&&(a=u[2],o=u[3]),i.setViewBox({ctx:t,aspectRatio:this.getAttribute("preserveAspectRatio").getString(),width:r.viewPort.width,desiredWidth:a,height:r.viewPort.height,desiredHeight:o,minX:d,minY:p,refX:h.getValue(),refY:l.getValue(),clip:g,clipX:f,clipY:y}),u&&(r.viewPort.removeCurrent(),r.viewPort.setCurrent(a,o))}clearContext(t){super.clearContext(t),this.document.screen.viewPort.removeCurrent()}resize(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t,i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const r=this.getAttribute("width",!0),s=this.getAttribute("height",!0),n=this.getAttribute("viewBox"),a=this.getAttribute("style"),o=r.getNumber(0),h=s.getNumber(0);if(i)if("string"==typeof i)this.getAttribute("preserveAspectRatio",!0).setValue(i);else{const t=this.getAttribute("preserveAspectRatio");t.hasValue()&&t.setValue(t.getString().replace(/^\s*(\S.*\S)\s*$/,"$1"))}if(r.setValue(t),s.setValue(e),n.hasValue()||n.setValue("0 0 ".concat(o||t," ").concat(h||e)),a.hasValue()){const i=this.getStyle("width"),r=this.getStyle("height");i.hasValue()&&i.setValue("".concat(t,"px")),r.hasValue()&&r.setValue("".concat(e,"px"))}}constructor(...t){super(...t),this.type="svg",this.root=!1}}class Vt extends Et{path(t){const e=this.getAttribute("x").getPixels("x"),i=this.getAttribute("y").getPixels("y"),r=this.getStyle("width",!1,!0).getPixels("x"),s=this.getStyle("height",!1,!0).getPixels("y"),n=this.getAttribute("rx"),a=this.getAttribute("ry");let o=n.getPixels("x"),h=a.getPixels("y");if(n.hasValue()&&!a.hasValue()&&(h=o),a.hasValue()&&!n.hasValue()&&(o=h),o=Math.min(o,r/2),h=Math.min(h,s/2),t){const n=(Math.sqrt(2)-1)/3*4;t.beginPath(),s>0&&r>0&&(t.moveTo(e+o,i),t.lineTo(e+r-o,i),t.bezierCurveTo(e+r-o+n*o,i,e+r,i+h-n*h,e+r,i+h),t.lineTo(e+r,i+s-h),t.bezierCurveTo(e+r,i+s-h+n*h,e+r-o+n*o,i+s,e+r-o,i+s),t.lineTo(e+o,i+s),t.bezierCurveTo(e+o-n*o,i+s,e,i+s-h+n*h,e,i+s-h),t.lineTo(e,i+h),t.bezierCurveTo(e,i+h-n*h,e+o-n*o,i,e+o,i),t.closePath())}return new Tt(e,i,e+r,i+s)}getMarkers(){return null}constructor(...t){super(...t),this.type="rect"}}class _t extends Et{path(t){const{points:e}=this,[{x:i,y:r}]=e,s=new Tt(i,r);return t&&(t.beginPath(),t.moveTo(i,r)),e.forEach((e=>{let{x:i,y:r}=e;s.addPoint(i,r),t&&t.lineTo(i,r)})),s}getMarkers(){const{points:t}=this,e=t.length-1,i=[];return t.forEach(((r,s)=>{s!==e&&i.push([r,r.angleTo(t[s+1])])})),i.length>0&&i.push([t[t.length-1],i[i.length-1][1]]),i}constructor(t,e,i){super(t,e,i),this.type="polyline",this.points=[],this.points=at.parsePath(this.getAttribute("points").getString())}}class kt extends At{getBoundingBox(t){const e=new Tt;return this.children.forEach((i=>{e.addBoundingBox(i.getBoundingBox(t))})),e}constructor(...t){super(...t),this.type="g"}}class Rt extends mt{getGradientUnits(){return this.getAttribute("gradientUnits").getString("objectBoundingBox")}createGradient(t,e,i){let r=this;this.getHrefAttribute().hasValue()&&(r=this.getHrefAttribute().getDefinition(),this.inheritStopContainer(r));const{stops:s}=r,n=this.getGradient(t,e);if(!n)return this.addParentOpacity(i,s[s.length-1].color);if(s.forEach((t=>{n.addColorStop(t.offset,this.addParentOpacity(i,t.color))})),this.getAttribute("gradientTransform").hasValue()){const{document:t}=this,{MAX_VIRTUAL_PIXELS:e}=ct,{viewPort:i}=t.screen,r=i.getRoot(),s=new Vt(t);s.attributes.x=new rt(t,"x",-e/3),s.attributes.y=new rt(t,"y",-e/3),s.attributes.width=new rt(t,"width",e),s.attributes.height=new rt(t,"height",e);const a=new kt(t);a.attributes.transform=new rt(t,"transform",this.getAttribute("gradientTransform").getValue()),a.children=[s];const o=new Mt(t);o.attributes.x=new rt(t,"x",0),o.attributes.y=new rt(t,"y",0),o.attributes.width=new rt(t,"width",r.width),o.attributes.height=new rt(t,"height",r.height),o.children=[a];const h=t.createCanvas(r.width,r.height),l=h.getContext("2d");return l.fillStyle=n,o.render(l),l.createPattern(h,"no-repeat")}return n}inheritStopContainer(t){this.attributesToInherit.forEach((e=>{!this.getAttribute(e).hasValue()&&t.getAttribute(e).hasValue()&&this.getAttribute(e,!0).setValue(t.getAttribute(e).getValue())}))}addParentOpacity(t,e){return t.hasValue()?new rt(this.document,"color",e).addOpacity(t).getColor():e}constructor(t,e,i){super(t,e,i),this.attributesToInherit=["gradientUnits"],this.stops=[];const{stops:r,children:s}=this;s.forEach((t=>{"stop"===t.type&&r.push(t)}))}}class It extends mt{getProperty(){const t=this.getAttribute("attributeType").getString(),e=this.getAttribute("attributeName").getString();return"CSS"===t?this.parent.getStyle(e,!0):this.parent.getAttribute(e,!0)}calcValue(){const{initialUnits:t}=this,{progress:e,from:i,to:r}=this.getProgress();let s=i.getNumber()+(r.getNumber()-i.getNumber())*e;return"%"===t&&(s*=100),"".concat(s).concat(t)}update(t){const{parent:e}=this,i=this.getProperty();if(this.initialValue||(this.initialValue=i.getString(),this.initialUnits=i.getUnits()),this.duration>this.maxDuration){const t=this.getAttribute("fill").getString("remove");if("indefinite"===this.getAttribute("repeatCount").getString()||"indefinite"===this.getAttribute("repeatDur").getString())this.duration=0;else if("freeze"!==t||this.frozen){if("remove"===t&&!this.removed)return this.removed=!0,e&&i&&i.setValue(e.animationFrozen?e.animationFrozenValue:this.initialValue),!0}else this.frozen=!0,e&&i&&(e.animationFrozen=!0,e.animationFrozenValue=i.getString());return!1}this.duration+=t;let r=!1;if(this.begin{const r=i.createElement(e);i.definitions[t]=r}))}catch(t){console.error('Error while loading font "'.concat(e,'":'),t)}this.loaded=!0}constructor(t){this.document=t,this.loaded=!1,t.fonts.push(this)}}class Ut extends mt{constructor(t,e,i){super(t,e,i),this.type="style";const r=R(Array.from(e.childNodes).map((t=>t.textContent)).join("").replace(/(\/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+\/)|(^[\s]*\/\/.*)/gm,"").replace(/@import.*;/g,""));r.split("}").forEach((e=>{const i=e.trim();if(!i)return;const r=i.split("{"),s=r[0].split(","),n=r[1].split(";");s.forEach((e=>{const i=e.trim();if(!i)return;const r=t.styles[i]||{};if(n.forEach((e=>{const i=e.indexOf(":"),s=e.substr(0,i).trim(),n=e.substr(i+1,e.length-i).trim();s&&n&&(r[s]=new rt(t,s,n))})),t.styles[i]=r,t.stylesSpecificity[i]=function(t){const e=[0,0,0];let i=t.replace(/:not\(([^)]*)\)/g," $1 ").replace(/{[\s\S]*/gm," "),r=0;return[i,r]=Y(i,B),e[1]+=r,[i,r]=Y(i,z),e[0]+=r,[i,r]=Y(i,H),e[1]+=r,[i,r]=Y(i,U),e[2]+=r,[i,r]=Y(i,F),e[1]+=r,[i,r]=Y(i,X),e[1]+=r,i=i.replace(/[*\s+>~]/g," ").replace(/[#.]/g," "),[i,r]=Y(i,q),e[2]+=r,e.join("")}(i),"@font-face"===i){const e=r["font-family"].getString().replace(/"|'/g,"");r.src.getString().split(",").forEach((i=>{if(i.indexOf('format("svg")')>0){const r=D(i);r&&new Ht(t).load(e,r)}}))}}))}))}}function Ft(t,e,i,r,s,n){return t[i*r*4+4*e+n]}function Xt(t,e,i,r,s,n,a){t[i*r*4+4*e+n]=a}function qt(t,e,i){return t[e]*i}function Yt(t,e,i,r){return e+Math.cos(t)*i+Math.sin(t)*r}Ut.parseExternalUrl=D;class Wt extends mt{apply(t,e,i,r,s){const{includeOpacity:n,matrix:a}=this,o=t.getImageData(0,0,r,s);for(let t=0;t{e.addBoundingBox(i.getBoundingBox(t))})),r=Math.floor(e.x1),s=Math.floor(e.y1),n=Math.floor(e.width),a=Math.floor(e.height)}const o=this.removeStyles(e,Qt.ignoreStyles),h=i.createCanvas(r+n,s+a),l=h.getContext("2d");i.screen.setDefaults(l),this.renderChildren(l),new Wt(i,{nodeType:1,childNodes:[],attributes:[{nodeName:"type",value:"luminanceToAlpha"},{nodeName:"includeOpacity",value:"true"}]}).apply(l,0,0,r+n,s+a);const c=i.createCanvas(r+n,s+a),u=c.getContext("2d");i.screen.setDefaults(u),e.render(u),u.globalCompositeOperation="destination-in",u.fillStyle=l.createPattern(h,"no-repeat"),u.fillRect(0,0,r+n,s+a),t.fillStyle=u.createPattern(c,"no-repeat"),t.fillRect(0,0,r+n,s+a),this.restoreStyles(e,o)}render(t){}constructor(...t){super(...t),this.type="mask"}}Qt.ignoreStyles=["mask","transform","clip-path"];const jt=()=>{};class Gt extends mt{apply(t,e){const{document:i,children:r}=this,s="getBoundingBox"in e?e.getBoundingBox(t):null;if(!s)return;let n=0,a=0;r.forEach((t=>{const e=t.extraFilterDistance||0;n=Math.max(n,e),a=Math.max(a,e)}));const o=Math.floor(s.width),h=Math.floor(s.height),l=o+2*n,c=h+2*a;if(l<1||c<1)return;const u=Math.floor(s.x),g=Math.floor(s.y),d=this.removeStyles(e,Gt.ignoreStyles),p=i.createCanvas(l,c),f=p.getContext("2d");i.screen.setDefaults(f),f.translate(-u+n,-g+a),e.render(f),r.forEach((t=>{"function"==typeof t.apply&&t.apply(f,0,0,l,c)})),t.drawImage(p,0,0,l,c,u-n,g-a,l,c),this.restoreStyles(e,d)}render(t){}constructor(...t){super(...t),this.type="filter"}}Gt.ignoreStyles=["filter","transform","clip-path"];const $t={svg:Mt,rect:Vt,circle:class extends Et{path(t){const e=this.getAttribute("cx").getPixels("x"),i=this.getAttribute("cy").getPixels("y"),r=this.getAttribute("r").getPixels();return t&&r>0&&(t.beginPath(),t.arc(e,i,r,0,2*Math.PI,!1),t.closePath()),new Tt(e-r,i-r,e+r,i+r)}getMarkers(){return null}constructor(...t){super(...t),this.type="circle"}},ellipse:class extends Et{path(t){const e=(Math.sqrt(2)-1)/3*4,i=this.getAttribute("rx").getPixels("x"),r=this.getAttribute("ry").getPixels("y"),s=this.getAttribute("cx").getPixels("x"),n=this.getAttribute("cy").getPixels("y");return t&&i>0&&r>0&&(t.beginPath(),t.moveTo(s+i,n),t.bezierCurveTo(s+i,n+e*r,s+e*i,n+r,s,n+r),t.bezierCurveTo(s-e*i,n+r,s-i,n+e*r,s-i,n),t.bezierCurveTo(s-i,n-e*r,s-e*i,n-r,s,n-r),t.bezierCurveTo(s+e*i,n-r,s+i,n-e*r,s+i,n),t.closePath()),new Tt(s-i,n-r,s+i,n+r)}getMarkers(){return null}constructor(...t){super(...t),this.type="ellipse"}},line:class extends Et{getPoints(){return[new at(this.getAttribute("x1").getPixels("x"),this.getAttribute("y1").getPixels("y")),new at(this.getAttribute("x2").getPixels("x"),this.getAttribute("y2").getPixels("y"))]}path(t){const[{x:e,y:i},{x:r,y:s}]=this.getPoints();return t&&(t.beginPath(),t.moveTo(e,i),t.lineTo(r,s)),new Tt(e,i,r,s)}getMarkers(){const[t,e]=this.getPoints(),i=t.angleTo(e);return[[t,i],[e,i]]}constructor(...t){super(...t),this.type="line"}},polyline:_t,polygon:class extends _t{path(t){const e=super.path(t),[{x:i,y:r}]=this.points;return t&&(t.lineTo(i,r),t.closePath()),e}constructor(...t){super(...t),this.type="polygon"}},path:Et,pattern:class extends mt{createPattern(t,e,i){const r=this.getStyle("width").getPixels("x",!0),s=this.getStyle("height").getPixels("y",!0),n=new Mt(this.document,null);n.attributes.viewBox=new rt(this.document,"viewBox",this.getAttribute("viewBox").getValue()),n.attributes.width=new rt(this.document,"width","".concat(r,"px")),n.attributes.height=new rt(this.document,"height","".concat(s,"px")),n.attributes.transform=new rt(this.document,"transform",this.getAttribute("patternTransform").getValue()),n.children=this.children;const a=this.document.createCanvas(r,s),o=a.getContext("2d"),h=this.getAttribute("x"),l=this.getAttribute("y");h.hasValue()&&l.hasValue()&&o.translate(h.getPixels("x",!0),l.getPixels("y",!0)),i.hasValue()?this.styles["fill-opacity"]=i:Reflect.deleteProperty(this.styles,"fill-opacity");for(let t=-1;t<=1;t++)for(let e=-1;e<=1;e++)o.save(),n.attributes.x=new rt(this.document,"x",t*a.width),n.attributes.y=new rt(this.document,"y",e*a.height),n.render(o),o.restore();return t.createPattern(a,"repeat")}constructor(...t){super(...t),this.type="pattern"}},marker:class extends mt{render(t,e,i){if(!e)return;const{x:r,y:s}=e,n=this.getAttribute("orient").getString("auto"),a=this.getAttribute("markerUnits").getString("strokeWidth");t.translate(r,s),"auto"===n&&t.rotate(i),"strokeWidth"===a&&t.scale(t.lineWidth,t.lineWidth),t.save();const o=new Mt(this.document);o.type=this.type,o.attributes.viewBox=new rt(this.document,"viewBox",this.getAttribute("viewBox").getValue()),o.attributes.refX=new rt(this.document,"refX",this.getAttribute("refX").getValue()),o.attributes.refY=new rt(this.document,"refY",this.getAttribute("refY").getValue()),o.attributes.width=new rt(this.document,"width",this.getAttribute("markerWidth").getValue()),o.attributes.height=new rt(this.document,"height",this.getAttribute("markerHeight").getValue()),o.attributes.overflow=new rt(this.document,"overflow",this.getAttribute("overflow").getValue()),o.attributes.fill=new rt(this.document,"fill",this.getAttribute("fill").getColor("black")),o.attributes.stroke=new rt(this.document,"stroke",this.getAttribute("stroke").getValue("none")),o.children=this.children,o.render(t),t.restore(),"strokeWidth"===a&&t.scale(1/t.lineWidth,1/t.lineWidth),"auto"===n&&t.rotate(-i),t.translate(-r,-s)}constructor(...t){super(...t),this.type="marker"}},defs:class extends mt{render(){}constructor(...t){super(...t),this.type="defs"}},linearGradient:class extends Rt{getGradient(t,e){const i="objectBoundingBox"===this.getGradientUnits(),r=i?e.getBoundingBox(t):null;if(i&&!r)return null;this.getAttribute("x1").hasValue()||this.getAttribute("y1").hasValue()||this.getAttribute("x2").hasValue()||this.getAttribute("y2").hasValue()||(this.getAttribute("x1",!0).setValue(0),this.getAttribute("y1",!0).setValue(0),this.getAttribute("x2",!0).setValue(1),this.getAttribute("y2",!0).setValue(0));const s=i?r.x+r.width*this.getAttribute("x1").getNumber():this.getAttribute("x1").getPixels("x"),n=i?r.y+r.height*this.getAttribute("y1").getNumber():this.getAttribute("y1").getPixels("y"),a=i?r.x+r.width*this.getAttribute("x2").getNumber():this.getAttribute("x2").getPixels("x"),o=i?r.y+r.height*this.getAttribute("y2").getNumber():this.getAttribute("y2").getPixels("y");return s===a&&n===o?null:t.createLinearGradient(s,n,a,o)}constructor(t,e,i){super(t,e,i),this.type="linearGradient",this.attributesToInherit.push("x1","y1","x2","y2")}},radialGradient:class extends Rt{getGradient(t,e){const i="objectBoundingBox"===this.getGradientUnits(),r=e.getBoundingBox(t);if(i&&!r)return null;this.getAttribute("cx").hasValue()||this.getAttribute("cx",!0).setValue("50%"),this.getAttribute("cy").hasValue()||this.getAttribute("cy",!0).setValue("50%"),this.getAttribute("r").hasValue()||this.getAttribute("r",!0).setValue("50%");const s=i?r.x+r.width*this.getAttribute("cx").getNumber():this.getAttribute("cx").getPixels("x"),n=i?r.y+r.height*this.getAttribute("cy").getNumber():this.getAttribute("cy").getPixels("y");let a=s,o=n;this.getAttribute("fx").hasValue()&&(a=i?r.x+r.width*this.getAttribute("fx").getNumber():this.getAttribute("fx").getPixels("x")),this.getAttribute("fy").hasValue()&&(o=i?r.y+r.height*this.getAttribute("fy").getNumber():this.getAttribute("fy").getPixels("y"));const h=i?(r.width+r.height)/2*this.getAttribute("r").getNumber():this.getAttribute("r").getPixels(),l=this.getAttribute("fr").getPixels();return t.createRadialGradient(a,o,l,s,n,h)}constructor(t,e,i){super(t,e,i),this.type="radialGradient",this.attributesToInherit.push("cx","cy","r","fx","fy","fr")}},stop:class extends mt{constructor(t,e,i){super(t,e,i),this.type="stop";const r=Math.max(0,Math.min(1,this.getAttribute("offset").getNumber())),s=this.getStyle("stop-opacity");let n=this.getStyle("stop-color",!0);""===n.getString()&&n.setValue("#000"),s.hasValue()&&(n=n.addOpacity(s)),this.offset=r,this.color=n.getColor()}},animate:It,animateColor:class extends It{calcValue(){const{progress:t,from:e,to:i}=this.getProgress(),r=new o(e.getColor()),s=new o(i.getColor());if(r.ok&&s.ok){const e=r.r+(s.r-r.r)*t,i=r.g+(s.g-r.g)*t,n=r.b+(s.b-r.b)*t;return"rgb(".concat(Math.floor(e),", ").concat(Math.floor(i),", ").concat(Math.floor(n),")")}return this.getAttribute("from").getColor()}constructor(...t){super(...t),this.type="animateColor"}},animateTransform:class extends It{calcValue(){const{progress:t,from:e,to:i}=this.getProgress(),r=I(e.getString()),s=I(i.getString()),n=r.map(((e,i)=>e+(s[i]-e)*t)).join(" ");return n}constructor(...t){super(...t),this.type="animateTransform"}},font:class extends mt{render(){}constructor(t,e,i){super(t,e,i),this.type="font",this.isArabic=!1,this.glyphs={},this.arabicGlyphs={},this.isRTL=!1,this.horizAdvX=this.getAttribute("horiz-adv-x").getNumber();const{definitions:r}=t,{children:s}=this;for(const t of s)if(t instanceof Lt){this.fontFace=t;const e=t.getStyle("font-family");e.hasValue()&&(r[e.getString()]=this)}else if(t instanceof Bt)this.missingGlyph=t;else if(t instanceof Dt)if(t.arabicForm){this.isRTL=!0,this.isArabic=!0;const e=this.arabicGlyphs[t.unicode];void 0===e?this.arabicGlyphs[t.unicode]={[t.arabicForm]:t}:e[t.arabicForm]=t}else this.glyphs[t.unicode]=t}},"font-face":Lt,"missing-glyph":Bt,glyph:Dt,text:Ct,tspan:Pt,tref:class extends Ct{getText(){const t=this.getHrefAttribute().getDefinition();if(t){const e=t.children[0];if(e)return e.getText()}return""}constructor(...t){super(...t),this.type="tref"}},a:class extends Ct{getText(){return this.text}renderChildren(t){if(this.hasText){super.renderChildren(t);const{document:e,x:i,y:r}=this,{mouse:s}=e.screen,n=new rt(e,"fontSize",St.parse(e.ctx.font).fontSize);s.isWorking()&&s.checkBoundingBox(this,new Tt(i,r-n.getPixels("y"),i+this.measureText(t),r))}else if(this.children.length>0){const e=new kt(this.document);e.children=this.children,e.parent=this,e.render(t)}}onClick(){const{window:t}=this.document;t&&t.open(this.getHrefAttribute().getString())}onMouseMove(){this.document.ctx.canvas.style.cursor="pointer"}constructor(t,e,i){super(t,e,i),this.type="a";const{childNodes:r}=e,s=r[0],n=r.length>0&&Array.from(r).every((t=>3===t.nodeType));this.hasText=n,this.text=n?this.getTextFromNode(s):""}},textPath:class extends Ct{getText(){return this.text}path(t){const{dataArray:e}=this;t&&t.beginPath(),e.forEach((e=>{let{type:i,points:r}=e;switch(i){case Nt.LINE_TO:t&&t.lineTo(r[0],r[1]);break;case Nt.MOVE_TO:t&&t.moveTo(r[0],r[1]);break;case Nt.CURVE_TO:t&&t.bezierCurveTo(r[0],r[1],r[2],r[3],r[4],r[5]);break;case Nt.QUAD_TO:t&&t.quadraticCurveTo(r[0],r[1],r[2],r[3]);break;case Nt.ARC:{const[e,i,s,n,a,o,h,l]=r,c=s>n?s:n,u=s>n?1:s/n,g=s>n?n/s:1;t&&(t.translate(e,i),t.rotate(h),t.scale(u,g),t.arc(0,0,c,a,a+o,Boolean(1-l)),t.scale(1/u,1/g),t.rotate(-h),t.translate(-e,-i));break}case Nt.CLOSE_PATH:t&&t.closePath()}}))}renderChildren(t){this.setTextData(t),t.save();const e=this.parent.getStyle("text-decoration").getString(),i=this.getFontSize(),{glyphInfo:r}=this,s=t.fillStyle;"underline"===e&&t.beginPath(),r.forEach(((r,s)=>{const{p0:n,p1:a,rotation:o,text:h}=r;t.save(),t.translate(n.x,n.y),t.rotate(o),t.fillStyle&&t.fillText(h,0,0),t.strokeStyle&&t.strokeText(h,0,0),t.restore(),"underline"===e&&(0===s&&t.moveTo(n.x,n.y+i/8),t.lineTo(a.x,a.y+i/5))})),"underline"===e&&(t.lineWidth=i/20,t.strokeStyle=s,t.stroke(),t.closePath()),t.restore()}getLetterSpacingAt(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return this.letterSpacingCache[t]||0}findSegmentToFitChar(t,e,i,r,s,n,a,o,h){let l=n,c=this.measureText(t,o);" "===o&&"justify"===e&&i-1&&(l+=this.getLetterSpacingAt(h));const u=this.textHeight/20,g=this.getEquidistantPointOnPath(l,u,0),d=this.getEquidistantPointOnPath(l+c,u,0),p={p0:g,p1:d},f=g&&d?Math.atan2(d.y-g.y,d.x-g.x):0;if(a){const t=Math.cos(Math.PI/2+f)*a,e=Math.cos(-f)*a;p.p0={...g,x:g.x+t,y:g.y+e},p.p1={...d,x:d.x+t,y:d.y+e}}return l+=c,{offset:l,segment:p,rotation:f}}measureText(t,e){const{measuresCache:i}=this,r=e||this.getText();if(i.has(r))return i.get(r);const s=this.measureTargetText(t,r);return i.set(r,s),s}setTextData(t){if(this.glyphInfo)return;const e=this.getText(),i=e.split(""),r=e.split(" ").length-1,s=this.parent.getAttribute("dx").split().map((t=>t.getPixels("x"))),n=this.parent.getAttribute("dy").getPixels("y"),a=this.parent.getStyle("text-anchor").getString("start"),o=this.getStyle("letter-spacing"),h=this.parent.getStyle("letter-spacing");let l=0;o.hasValue()&&"inherit"!==o.getValue()?o.hasValue()&&"initial"!==o.getValue()&&"unset"!==o.getValue()&&(l=o.getPixels()):l=h.getPixels();const c=[],u=e.length;this.letterSpacingCache=c;for(let t=0;t0===i?0:t+e||0),0),d=this.measureText(t),p=Math.max(d+g,0);this.textWidth=d,this.textHeight=this.getFontSize(),this.glyphInfo=[];const f=this.getPathLength(),y=this.getStyle("startOffset").getNumber(0)*f;let m=0;"middle"!==a&&"center"!==a||(m=-p/2),"end"!==a&&"right"!==a||(m=-p),m+=y,i.forEach(((e,s)=>{const{offset:o,segment:h,rotation:l}=this.findSegmentToFitChar(t,a,p,f,r,m,n,e,s);m=o,h.p0&&h.p1&&this.glyphInfo.push({text:i[s],p0:h.p0,p1:h.p1,rotation:l})}))}parsePathData(t){if(this.pathLength=-1,!t)return[];const e=[],{pathParser:i}=t;for(i.reset();!i.isEnd();){const{current:t}=i,r=t?t.x:0,s=t?t.y:0,n=i.next();let a=n.type,o=[];switch(n.type){case Nt.MOVE_TO:this.pathM(i,o);break;case Nt.LINE_TO:a=this.pathL(i,o);break;case Nt.HORIZ_LINE_TO:a=this.pathH(i,o);break;case Nt.VERT_LINE_TO:a=this.pathV(i,o);break;case Nt.CURVE_TO:this.pathC(i,o);break;case Nt.SMOOTH_CURVE_TO:a=this.pathS(i,o);break;case Nt.QUAD_TO:this.pathQ(i,o);break;case Nt.SMOOTH_QUAD_TO:a=this.pathT(i,o);break;case Nt.ARC:o=this.pathA(i);break;case Nt.CLOSE_PATH:Et.pathZ(i)}n.type!==Nt.CLOSE_PATH?e.push({type:a,points:o,start:{x:r,y:s},pathLength:this.calcLength(r,s,a,o)}):e.push({type:Nt.CLOSE_PATH,points:[],pathLength:0})}return e}pathM(t,e){const{x:i,y:r}=Et.pathM(t).point;e.push(i,r)}pathL(t,e){const{x:i,y:r}=Et.pathL(t).point;return e.push(i,r),Nt.LINE_TO}pathH(t,e){const{x:i,y:r}=Et.pathH(t).point;return e.push(i,r),Nt.LINE_TO}pathV(t,e){const{x:i,y:r}=Et.pathV(t).point;return e.push(i,r),Nt.LINE_TO}pathC(t,e){const{point:i,controlPoint:r,currentPoint:s}=Et.pathC(t);e.push(i.x,i.y,r.x,r.y,s.x,s.y)}pathS(t,e){const{point:i,controlPoint:r,currentPoint:s}=Et.pathS(t);return e.push(i.x,i.y,r.x,r.y,s.x,s.y),Nt.CURVE_TO}pathQ(t,e){const{controlPoint:i,currentPoint:r}=Et.pathQ(t);e.push(i.x,i.y,r.x,r.y)}pathT(t,e){const{controlPoint:i,currentPoint:r}=Et.pathT(t);return e.push(i.x,i.y,r.x,r.y),Nt.QUAD_TO}pathA(t){let{rX:e,rY:i,sweepFlag:r,xAxisRotation:s,centp:n,a1:a,ad:o}=Et.pathA(t);return 0===r&&o>0&&(o-=2*Math.PI),1===r&&o<0&&(o+=2*Math.PI),[n.x,n.y,e,i,a,o,s,r]}calcLength(t,e,i,r){let s=0,n=null,a=null,o=0;switch(i){case Nt.LINE_TO:return this.getLineLength(t,e,r[0],r[1]);case Nt.CURVE_TO:for(s=0,n=this.getPointOnCubicBezier(0,t,e,r[0],r[1],r[2],r[3],r[4],r[5]),o=.01;o<=1;o+=.01)a=this.getPointOnCubicBezier(o,t,e,r[0],r[1],r[2],r[3],r[4],r[5]),s+=this.getLineLength(n.x,n.y,a.x,a.y),n=a;return s;case Nt.QUAD_TO:for(s=0,n=this.getPointOnQuadraticBezier(0,t,e,r[0],r[1],r[2],r[3]),o=.01;o<=1;o+=.01)a=this.getPointOnQuadraticBezier(o,t,e,r[0],r[1],r[2],r[3]),s+=this.getLineLength(n.x,n.y,a.x,a.y),n=a;return s;case Nt.ARC:{s=0;const t=r[4],e=r[5],i=r[4]+e;let h=Math.PI/180;if(Math.abs(t-i)i;o-=h)a=this.getPointOnEllipticalArc(r[0],r[1],r[2],r[3],o,0),s+=this.getLineLength(n.x,n.y,a.x,a.y),n=a;else for(o=t+h;o5&&void 0!==arguments[5]?arguments[5]:e,a=arguments.length>6&&void 0!==arguments[6]?arguments[6]:i;const o=(s-i)/(r-e+W);let h=Math.sqrt(t*t/(1+o*o));re)return null;const{dataArray:s}=this;for(const e of s){if(e&&(e.pathLength<5e-5||i+e.pathLength+5e-5=0&&n>a)break;r=this.getPointOnEllipticalArc(e.points[0],e.points[1],e.points[2],e.points[3],n,e.points[6]);break}case Nt.CURVE_TO:n=s/e.pathLength,n>1&&(n=1),r=this.getPointOnCubicBezier(n,e.start.x,e.start.y,e.points[0],e.points[1],e.points[2],e.points[3],e.points[4],e.points[5]);break;case Nt.QUAD_TO:n=s/e.pathLength,n>1&&(n=1),r=this.getPointOnQuadraticBezier(n,e.start.x,e.start.y,e.points[0],e.points[1],e.points[2],e.points[3])}if(r)return r;break}return null}getLineLength(t,e,i,r){return Math.sqrt((i-t)*(i-t)+(r-e)*(r-e))}getPathLength(){return-1===this.pathLength&&(this.pathLength=this.dataArray.reduce(((t,e)=>e.pathLength>0?t+e.pathLength:t),0)),this.pathLength}getPointOnCubicBezier(t,e,i,r,s,n,a,o,h){return{x:o*$(t)+n*Z(t)+r*K(t)+e*J(t),y:h*$(t)+a*Z(t)+s*K(t)+i*J(t)}}getPointOnQuadraticBezier(t,e,i,r,s,n,a){return{x:n*tt(t)+r*et(t)+e*it(t),y:a*tt(t)+s*et(t)+i*it(t)}}getPointOnEllipticalArc(t,e,i,r,s,n){const a=Math.cos(n),o=Math.sin(n),h=i*Math.cos(s),l=r*Math.sin(s);return{x:t+(h*a-l*o),y:e+(h*o+l*a)}}buildEquidistantCache(t,e){const i=this.getPathLength(),r=e||.25,s=t||i/100;if(!this.equidistantCache||this.equidistantCache.step!==s||this.equidistantCache.precision!==r){this.equidistantCache={step:s,precision:r,points:[]};let t=0;for(let e=0;e<=i;e+=r){const i=this.getPointOnPath(e),n=this.getPointOnPath(e+r);i&&n&&(t+=this.getLineLength(i.x,i.y,n.x,n.y),t>=s&&(this.equidistantCache.points.push({x:i.x,y:i.y,distance:e}),t-=s))}}}getEquidistantPointOnPath(t,e,i){if(this.buildEquidistantCache(e,i),t<0||t-this.getPathLength()>5e-5)return null;const r=Math.round(t/this.getPathLength()*(this.equidistantCache.points.length-1));return this.equidistantCache.points[r]||null}constructor(t,e,i){super(t,e,i),this.type="textPath",this.textWidth=0,this.textHeight=0,this.pathLength=-1,this.glyphInfo=null,this.letterSpacingCache=[],this.measuresCache=new Map([["",0]]);const r=this.getHrefAttribute().getDefinition();this.text=this.getTextFromNode(),this.dataArray=this.parsePathData(r)}},image:class extends At{async loadImage(t){try{const e=await this.document.createImage(t);this.image=e}catch(e){console.error('Error while loading image "'.concat(t,'":'),e)}this.loaded=!0}async loadSvg(t){const e=zt.exec(t);if(e){const t=e[5];t&&("base64"===e[4]?this.image=atob(t):this.image=decodeURIComponent(t))}else try{const e=await this.document.fetch(t),i=await e.text();this.image=i}catch(e){console.error('Error while loading image "'.concat(t,'":'),e)}this.loaded=!0}renderChildren(t){const{document:e,image:i,loaded:r}=this,s=this.getAttribute("x").getPixels("x"),n=this.getAttribute("y").getPixels("y"),a=this.getStyle("width").getPixels("x"),o=this.getStyle("height").getPixels("y");if(r&&i&&a&&o){if(t.save(),t.translate(s,n),"string"==typeof i){const r=e.canvg.forkString(t,i,{ignoreMouse:!0,ignoreAnimation:!0,ignoreDimensions:!0,ignoreClear:!0,offsetX:0,offsetY:0,scaleWidth:a,scaleHeight:o}),{documentElement:s}=r.document;s&&(s.parent=this),r.render()}else e.setViewBox({ctx:t,aspectRatio:this.getAttribute("preserveAspectRatio").getString(),width:a,desiredWidth:i.width,height:o,desiredHeight:i.height}),this.loaded&&("complete"in i&&!i.complete||t.drawImage(i,0,0));t.restore()}}getBoundingBox(){const t=this.getAttribute("x").getPixels("x"),e=this.getAttribute("y").getPixels("y"),i=this.getStyle("width").getPixels("x"),r=this.getStyle("height").getPixels("y");return new Tt(t,e,t+i,e+r)}constructor(t,e,i){super(t,e,i),this.type="image",this.loaded=!1;const r=this.getHrefAttribute().getString();if(!r)return;const s=r.endsWith(".svg")||/^\s*data:image\/svg\+xml/i.test(r);t.images.push(this),s?this.loadSvg(r):this.loadImage(r)}},g:kt,symbol:class extends At{render(t){}constructor(...t){super(...t),this.type="symbol"}},style:Ut,use:class extends At{setContext(t){super.setContext(t);const e=this.getAttribute("x"),i=this.getAttribute("y");e.hasValue()&&t.translate(e.getPixels("x"),0),i.hasValue()&&t.translate(0,i.getPixels("y"))}path(t){const{element:e}=this;e&&e.path(t)}renderChildren(t){const{document:e,element:i}=this;if(i){let r=i;if("symbol"===i.type&&(r=new Mt(e),r.attributes.viewBox=new rt(e,"viewBox",i.getAttribute("viewBox").getString()),r.attributes.preserveAspectRatio=new rt(e,"preserveAspectRatio",i.getAttribute("preserveAspectRatio").getString()),r.attributes.overflow=new rt(e,"overflow",i.getAttribute("overflow").getString()),r.children=i.children,i.styles.opacity=new rt(e,"opacity",this.calculateOpacity())),"svg"===r.type){const t=this.getStyle("width",!1,!0),i=this.getStyle("height",!1,!0);t.hasValue()&&(r.attributes.width=new rt(e,"width",t.getString())),i.hasValue()&&(r.attributes.height=new rt(e,"height",i.getString()))}const s=r.parent;r.parent=this,r.render(t),r.parent=s}}getBoundingBox(t){const{element:e}=this;return e?e.getBoundingBox(t):null}elementTransform(){const{document:t,element:e}=this;return e?yt.fromElement(t,e):null}get element(){return this.cachedElement||(this.cachedElement=this.getHrefAttribute().getDefinition()),this.cachedElement}constructor(...t){super(...t),this.type="use"}},mask:Qt,clipPath:class extends mt{apply(t){const{document:e}=this,i=Reflect.getPrototypeOf(t),{beginPath:r,closePath:s}=t;i&&(i.beginPath=jt,i.closePath=jt),Reflect.apply(r,t,[]),this.children.forEach((r=>{if(!("path"in r))return;let n="elementTransform"in r?r.elementTransform():null;n||(n=yt.fromElement(e,r)),n&&n.apply(t),r.path(t),i&&(i.closePath=s),n&&n.unapply(t)})),Reflect.apply(s,t,[]),t.clip(),i&&(i.beginPath=r,i.closePath=s)}render(t){}constructor(...t){super(...t),this.type="clipPath"}},filter:Gt,feDropShadow:class extends mt{apply(t,e,i,r,s){}constructor(t,e,i){super(t,e,i),this.type="feDropShadow",this.addStylesFromStyleDefinition()}},feMorphology:class extends mt{apply(t,e,i,r,s){}constructor(...t){super(...t),this.type="feMorphology"}},feComposite:class extends mt{apply(t,e,i,r,s){}constructor(...t){super(...t),this.type="feComposite"}},feColorMatrix:Wt,feGaussianBlur:class extends mt{apply(t,e,i,r,s){const{document:n,blurRadius:a}=this,o=n.window?n.window.document.body:null,h=t.canvas;h.id=n.getUniqueId(),o&&(h.style.display="none",o.appendChild(h)),V(h,e,i,r,s,a),o&&o.removeChild(h)}constructor(t,e,i){super(t,e,i),this.type="feGaussianBlur",this.blurRadius=Math.floor(this.getAttribute("stdDeviation").getNumber()),this.extraFilterDistance=this.blurRadius}},title:class extends mt{constructor(...t){super(...t),this.type="title"}},desc:class extends mt{constructor(...t){super(...t),this.type="desc"}}};class Zt{bindCreateImage(t,e){return"boolean"==typeof e?(i,r)=>t(i,"boolean"==typeof r?r:e):t}get window(){return this.screen.window}get fetch(){return this.screen.fetch}get ctx(){return this.screen.ctx}get emSize(){const{emSizeStack:t}=this;return t[t.length-1]||12}set emSize(t){const{emSizeStack:e}=this;e.push(t)}popEmSize(){const{emSizeStack:t}=this;t.pop()}getUniqueId(){return"canvg".concat(++this.uniqueId)}isImagesLoaded(){return this.images.every((t=>t.loaded))}isFontsLoaded(){return this.fonts.every((t=>t.loaded))}createDocumentElement(t){const e=this.createElement(t.documentElement);return e.root=!0,e.addStylesFromStyleDefinition(),this.documentElement=e,e}createElement(t){const e=t.nodeName.replace(/^[^:]+:/,""),i=Zt.elementTypes[e];return i?new i(this,t):new xt(this,t)}createTextNode(t){return new Ot(this,t)}setViewBox(t){this.screen.setViewBox({document:this,...t})}constructor(t,{rootEmSize:e=12,emSize:i=12,createCanvas:r=Zt.createCanvas,createImage:s=Zt.createImage,anonymousCrossOrigin:n}={}){this.canvg=t,this.definitions={},this.styles={},this.stylesSpecificity={},this.images=[],this.fonts=[],this.emSizeStack=[],this.uniqueId=0,this.screen=t.screen,this.rootEmSize=e,this.emSize=i,this.createCanvas=r,this.createImage=this.bindCreateImage(s,n),this.screen.wait((()=>this.isImagesLoaded())),this.screen.wait((()=>this.isFontsLoaded()))}}Zt.createCanvas=function(t,e){const i=document.createElement("canvas");return i.width=t,i.height=e,i},Zt.createImage=async function(t){let e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const i=document.createElement("img");return e&&(i.crossOrigin="Anonymous"),new Promise(((e,r)=>{i.onload=()=>{e(i)},i.onerror=(t,e,i,s,n)=>{r(n)},i.src=t}))},Zt.elementTypes=$t;class Kt{static async from(t,e){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const r=new dt(i),s=await r.parse(e);return new Kt(t,s,i)}static fromString(t,e){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const r=new dt(i).parseFromString(e);return new Kt(t,r,i)}fork(t,e){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return Kt.from(t,e,{...this.options,...i})}forkString(t,e){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return Kt.fromString(t,e,{...this.options,...i})}ready(){return this.screen.ready()}isReady(){return this.screen.isReady()}async render(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.start({enableRedraw:!0,ignoreAnimation:!0,ignoreMouse:!0,...t}),await this.ready(),this.stop()}start(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{documentElement:e,screen:i,options:r}=this;i.start(e,{enableRedraw:!0,...r,...t})}stop(){this.screen.stop()}resize(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t,i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];this.documentElement.resize(t,e,i)}constructor(t,e,i={}){this.parser=new dt(i),this.screen=new ct(t,i),this.options=i;const r=new Zt(this,i),s=r.createDocumentElement(e);this.document=r,this.documentElement=s}}var Jt=function(t,e,i,r){return new(i||(i=Promise))((function(s,n){function a(t){try{h(r.next(t))}catch(t){n(t)}}function o(t){try{h(r.throw(t))}catch(t){n(t)}}function h(t){var e;t.done?s(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(a,o)}h((r=r.apply(t,e||[])).next())}))};const te=()=>{let t;return t=document.querySelector("#toggle-svg").checked?"svg":document.querySelector("#toggle-png").checked?"png":"jpeg",t},ee=()=>Jt(void 0,void 0,void 0,(function*(){var t,e;let i,r=te();return i="svg"==r?new Blob([document.querySelector("#qr").outerHTML],{type:"image/svg+xml"}):yield function(t,e,i,r){return s=this,n=void 0,o=function*(){let s=new OffscreenCanvas(i,r);return yield(yield Kt.from(s.getContext("2d"),t.outerHTML,k.offscreen())).render(),yield s.convertToBlob({type:"image/"+e})},new((a=void 0)||(a=Promise))((function(t,e){function i(t){try{h(o.next(t))}catch(t){e(t)}}function r(t){try{h(o.throw(t))}catch(t){e(t)}}function h(e){var s;e.done?t(e.value):(s=e.value,s instanceof a?s:new a((function(t){t(s)}))).then(i,r)}h((o=o.apply(s,n||[])).next())}));var s,n,a,o}(document.querySelector("#qr"),r,null!==(t=yield s("size"))&&void 0!==t?t:2e3,null!==(e=yield s("size"))&&void 0!==e?e:2e3),i})),ie=()=>Jt(void 0,void 0,void 0,(function*(){let t=te(),e=yield ee(),i=URL.createObjectURL(e),r=document.createElement("a");r.href=i,r.download="qr."+("jpeg"==t?"jpg":t),r.click(),URL.revokeObjectURL(i)})),re=()=>Jt(void 0,void 0,void 0,(function*(){let{state:t}=yield navigator.permissions.query({name:"clipboard-write"});if("granted"!=t)return void(document.querySelector("#copy").disabled=!0);let e=yield ee(),i={};i[e.type]=e,yield navigator.clipboard.write([new ClipboardItem(i)])})),se=()=>{n("content",document.querySelector("#content").value);let t=QRCode(document.querySelector("#content").value);t.id="qr",t.removeAttribute("width"),t.removeAttribute("height"),document.querySelector("#qr").outerHTML=t.outerHTML};window.onload=()=>Jt(void 0,void 0,void 0,(function*(){var t;window.onkeydown=t=>{if(t.ctrlKey||t.metaKey)switch(t.key){case"s":t.preventDefault(),document.querySelector("#toggle-svg").checked=!0;break;case"p":t.preventDefault(),document.querySelector("#toggle-png").checked=!0;break;case"j":t.preventDefault(),document.querySelector("#toggle-jpg").checked=!0;break;case"d":t.preventDefault(),ie();break;case"c":t.preventDefault(),re()}};let e=yield s("content");switch(document.querySelector("#content").value=null!=e?e:window.location.origin,se(),document.querySelector("#content").onkeyup=document.querySelector("#content").onpaste=()=>se(),document.querySelector("#content").disabled=!1,null!==(t=yield s("export-type"))&&void 0!==t?t:"png"){case"jpeg":document.querySelector("#toggle-jpg").checked=!0;break;case"svg":document.querySelector("#toggle-svg").checked=!0;break;case"png":document.querySelector("#toggle-png").checked=!0}document.querySelector("#toggle").onclick=()=>n("export-type",te());for(let t of document.querySelectorAll("input[name=toggle-state]"))t.disabled=!1;document.querySelector("#copy").onclick=re,document.querySelector("#download").onclick=ie;for(let t of document.querySelector("#export").getElementsByTagName("button"))t.disabled=!1}))})()})(); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmpzIiwibWFwcGluZ3MiOiI4QkFDQSxXQUNFLElBQUlBLEVBQWdCQyxFQUFRQyxFQUFVQyxFQUFnQkMsRUFBY0MsRUFFeEMsb0JBQWhCQyxhQUErQyxPQUFoQkEsYUFBeUJBLFlBQVlDLElBQzlFQyxFQUFPQyxRQUFVLFdBQ2YsT0FBT0gsWUFBWUMsS0FDckIsRUFDNkIsb0JBQVpHLFNBQXVDLE9BQVpBLFNBQXFCQSxRQUFRVCxRQUN6RU8sRUFBT0MsUUFBVSxXQUNmLE9BQVFULElBQW1CSSxHQUFnQixHQUM3QyxFQUNBSCxFQUFTUyxRQUFRVCxPQU1qQkUsR0FMQUgsRUFBaUIsV0FDZixJQUFJVyxFQUVKLE9BQWUsS0FEZkEsRUFBS1YsS0FDSyxHQUFXVSxFQUFHLEVBQzFCLEtBRUFOLEVBQTRCLElBQW5CSyxRQUFRRSxTQUNqQlIsRUFBZUQsRUFBaUJFLEdBQ3ZCUSxLQUFLTixLQUNkQyxFQUFPQyxRQUFVLFdBQ2YsT0FBT0ksS0FBS04sTUFBUUwsQ0FDdEIsRUFDQUEsRUFBV1csS0FBS04sUUFFaEJDLEVBQU9DLFFBQVUsV0FDZixPQUFPLElBQUlJLE1BQU9DLFVBQVlaLENBQ2hDLEVBQ0FBLEdBQVcsSUFBSVcsTUFBT0MsVUFHekIsR0FBRUMsS0FBS0MsSyxnQkMxQlIsSUFQQSxJQUFJVCxFQUFNLEVBQVEsS0FDZFUsRUFBeUIsb0JBQVhDLE9BQXlCLEVBQUFDLEVBQVNELE9BQ2hERSxFQUFVLENBQUMsTUFBTyxVQUNsQkMsRUFBUyxpQkFDVEMsRUFBTUwsRUFBSyxVQUFZSSxHQUN2QkUsRUFBTU4sRUFBSyxTQUFXSSxJQUFXSixFQUFLLGdCQUFrQkksR0FFcERHLEVBQUksR0FBSUYsR0FBT0UsRUFBSUosRUFBUUssT0FBUUQsSUFDekNGLEVBQU1MLEVBQUtHLEVBQVFJLEdBQUssVUFBWUgsR0FDcENFLEVBQU1OLEVBQUtHLEVBQVFJLEdBQUssU0FBV0gsSUFDNUJKLEVBQUtHLEVBQVFJLEdBQUssZ0JBQWtCSCxHQUk3QyxJQUFJQyxJQUFRQyxFQUFLLENBQ2YsSUFBSUcsRUFBTyxFQUNQQyxFQUFLLEVBQ0xDLEVBQVEsR0FDUkMsRUFBZ0IsSUFBTyxHQUUzQlAsRUFBTSxTQUFTUSxHQUNiLEdBQW9CLElBQWpCRixFQUFNSCxPQUFjLENBQ3JCLElBQUlNLEVBQU94QixJQUNQeUIsRUFBT0MsS0FBS0MsSUFBSSxFQUFHTCxHQUFpQkUsRUFBT0wsSUFDL0NBLEVBQU9NLEVBQU9ELEVBQ2RJLFlBQVcsV0FDVCxJQUFJQyxFQUFLUixFQUFNUyxNQUFNLEdBSXJCVCxFQUFNSCxPQUFTLEVBQ2YsSUFBSSxJQUFJRCxFQUFJLEVBQUdBLEVBQUlZLEVBQUdYLE9BQVFELElBQzVCLElBQUlZLEVBQUdaLEdBQUdjLFVBQ1IsSUFDRUYsRUFBR1osR0FBR00sU0FBU0osRUFDakIsQ0FBRSxNQUFNYSxHQUNOSixZQUFXLFdBQWEsTUFBTUksQ0FBRSxHQUFHLEVBQ3JDLENBR04sR0FBR04sS0FBS08sTUFBTVIsR0FDaEIsQ0FNQSxPQUxBSixFQUFNYSxLQUFLLENBQ1RDLFNBQVVmLEVBQ1ZHLFNBQVVBLEVBQ1ZRLFdBQVcsSUFFTlgsQ0FDVCxFQUVBSixFQUFNLFNBQVNtQixHQUNiLElBQUksSUFBSWxCLEVBQUksRUFBR0EsRUFBSUksRUFBTUgsT0FBUUQsSUFDNUJJLEVBQU1KLEdBQUdrQixTQUFXQSxJQUNyQmQsRUFBTUosR0FBR2MsV0FBWSxFQUczQixDQUNGLENBRUE5QixFQUFPQyxRQUFVLFNBQVNrQyxHQUl4QixPQUFPckIsRUFBSVAsS0FBS0UsRUFBTTBCLEVBQ3hCLEVBQ0FuQyxFQUFPQyxRQUFRbUMsT0FBUyxXQUN0QnJCLEVBQUlzQixNQUFNNUIsRUFBTTZCLFVBQ2xCLEVBQ0F0QyxFQUFPQyxRQUFRc0MsU0FBVyxTQUFTQyxHQUM1QkEsSUFDSEEsRUFBUy9CLEdBRVgrQixFQUFPQyxzQkFBd0IzQixFQUMvQjBCLEVBQU9FLHFCQUF1QjNCLENBQ2hDLEMsVUNyRUFmLEVBQU9DLFFBQVUsU0FBUzBDLEdBQ3RCbkMsS0FBS29DLElBQUssRUFDVnBDLEtBQUtxQyxNQUFRLEVBR2lCLEtBQTFCRixFQUFhRyxPQUFPLEtBQ3BCSCxFQUFlQSxFQUFhSSxPQUFPLEVBQUUsSUFJekNKLEdBREFBLEVBQWVBLEVBQWFLLFFBQVEsS0FBSyxLQUNiQyxjQUk1QixJQUFJQyxFQUFnQixDQUNoQkMsVUFBVyxTQUNYQyxhQUFjLFNBQ2RDLEtBQU0sU0FDTkMsV0FBWSxTQUNaQyxNQUFPLFNBQ1BDLE1BQU8sU0FDUEMsT0FBUSxTQUNSQyxNQUFPLFNBQ1BDLGVBQWdCLFNBQ2hCQyxLQUFNLFNBQ05DLFdBQVksU0FDWkMsTUFBTyxTQUNQQyxVQUFXLFNBQ1hDLFVBQVcsU0FDWEMsV0FBWSxTQUNaQyxVQUFXLFNBQ1hDLE1BQU8sU0FDUEMsZUFBZ0IsU0FDaEJDLFNBQVUsU0FDVkMsUUFBUyxTQUNUQyxLQUFNLFNBQ05DLFNBQVUsU0FDVkMsU0FBVSxTQUNWQyxjQUFlLFNBQ2ZDLFNBQVUsU0FDVkMsVUFBVyxTQUNYQyxVQUFXLFNBQ1hDLFlBQWEsU0FDYkMsZUFBZ0IsU0FDaEJDLFdBQVksU0FDWkMsV0FBWSxTQUNaQyxRQUFTLFNBQ1RDLFdBQVksU0FDWkMsYUFBYyxTQUNkQyxjQUFlLFNBQ2ZDLGNBQWUsU0FDZkMsY0FBZSxTQUNmQyxXQUFZLFNBQ1pDLFNBQVUsU0FDVkMsWUFBYSxTQUNiQyxRQUFTLFNBQ1RDLFdBQVksU0FDWkMsU0FBVSxTQUNWQyxVQUFXLFNBQ1hDLFlBQWEsU0FDYkMsWUFBYSxTQUNiQyxRQUFTLFNBQ1RDLFVBQVcsU0FDWEMsV0FBWSxTQUNaQyxLQUFNLFNBQ05DLFVBQVcsU0FDWEMsS0FBTSxTQUNOQyxNQUFPLFNBQ1BDLFlBQWEsU0FDYkMsU0FBVSxTQUNWQyxRQUFTLFNBQ1RDLFVBQVksU0FDWkMsT0FBUyxTQUNUQyxNQUFPLFNBQ1BDLE1BQU8sU0FDUEMsU0FBVSxTQUNWQyxjQUFlLFNBQ2ZDLFVBQVcsU0FDWEMsYUFBYyxTQUNkQyxVQUFXLFNBQ1hDLFdBQVksU0FDWkMsVUFBVyxTQUNYQyxxQkFBc0IsU0FDdEJDLFVBQVcsU0FDWEMsV0FBWSxTQUNaQyxVQUFXLFNBQ1hDLFlBQWEsU0FDYkMsY0FBZSxTQUNmQyxhQUFjLFNBQ2RDLGVBQWdCLFNBQ2hCQyxlQUFnQixTQUNoQkMsZUFBZ0IsU0FDaEJDLFlBQWEsU0FDYkMsS0FBTSxTQUNOQyxVQUFXLFNBQ1hDLE1BQU8sU0FDUEMsUUFBUyxTQUNUQyxPQUFRLFNBQ1JDLGlCQUFrQixTQUNsQkMsV0FBWSxTQUNaQyxhQUFjLFNBQ2RDLGFBQWMsU0FDZEMsZUFBZ0IsU0FDaEJDLGdCQUFpQixTQUNqQkMsa0JBQW1CLFNBQ25CQyxnQkFBaUIsU0FDakJDLGdCQUFpQixTQUNqQkMsYUFBYyxTQUNkQyxVQUFXLFNBQ1hDLFVBQVcsU0FDWEMsU0FBVSxTQUNWQyxZQUFhLFNBQ2JDLEtBQU0sU0FDTkMsUUFBUyxTQUNUQyxNQUFPLFNBQ1BDLFVBQVcsU0FDWEMsT0FBUSxTQUNSQyxVQUFXLFNBQ1hDLE9BQVEsU0FDUkMsY0FBZSxTQUNmQyxVQUFXLFNBQ1hDLGNBQWUsU0FDZkMsY0FBZSxTQUNmQyxXQUFZLFNBQ1pDLFVBQVcsU0FDWEMsS0FBTSxTQUNOQyxLQUFNLFNBQ05DLEtBQU0sU0FDTkMsV0FBWSxTQUNaQyxPQUFRLFNBQ1JDLGNBQWUsU0FDZkMsSUFBSyxTQUNMQyxVQUFXLFNBQ1hDLFVBQVcsU0FDWEMsWUFBYSxTQUNiQyxPQUFRLFNBQ1JDLFdBQVksU0FDWkMsU0FBVSxTQUNWQyxTQUFVLFNBQ1ZDLE9BQVEsU0FDUkMsT0FBUSxTQUNSQyxRQUFTLFNBQ1RDLFVBQVcsU0FDWEMsVUFBVyxTQUNYQyxLQUFNLFNBQ05DLFlBQWEsU0FDYkMsVUFBVyxTQUNYQyxJQUFLLFNBQ0xDLEtBQU0sU0FDTkMsUUFBUyxTQUNUQyxPQUFRLFNBQ1JDLFVBQVcsU0FDWEMsT0FBUSxTQUNSQyxVQUFXLFNBQ1hDLE1BQU8sU0FDUEMsTUFBTyxTQUNQQyxXQUFZLFNBQ1pDLE9BQVEsU0FDUkMsWUFBYSxVQUVqQnZKLEVBQWVPLEVBQWNQLElBQWlCQSxFQXFEOUMsSUFqREEsSUFBSXdKLEVBQWEsQ0FDYixDQUNJQyxHQUFJLGtFQUNKQyxRQUFTLENBQUMsMEJBQTJCLHlCQUNyQ25NLFFBQVMsU0FBVW9NLEdBQ2YsTUFBTyxDQUNIQyxTQUFTRCxFQUFLLElBQ2RDLFNBQVNELEVBQUssSUFDZEMsU0FBU0QsRUFBSyxJQUNkRSxXQUFXRixFQUFLLElBRXhCLEdBRUosQ0FDSUYsR0FBSSwrQ0FDSkMsUUFBUyxDQUFDLG9CQUFxQixvQkFDL0JuTSxRQUFTLFNBQVVvTSxHQUNmLE1BQU8sQ0FDSEMsU0FBU0QsRUFBSyxJQUNkQyxTQUFTRCxFQUFLLElBQ2RDLFNBQVNELEVBQUssSUFFdEIsR0FFSixDQUNJRixHQUFJLHFEQUNKQyxRQUFTLENBQUMsVUFBVyxVQUNyQm5NLFFBQVMsU0FBVW9NLEdBQ2YsTUFBTyxDQUNIQyxTQUFTRCxFQUFLLEdBQUksSUFDbEJDLFNBQVNELEVBQUssR0FBSSxJQUNsQkMsU0FBU0QsRUFBSyxHQUFJLElBRTFCLEdBRUosQ0FDSUYsR0FBSSxxREFDSkMsUUFBUyxDQUFDLE9BQVEsT0FDbEJuTSxRQUFTLFNBQVVvTSxHQUNmLE1BQU8sQ0FDSEMsU0FBU0QsRUFBSyxHQUFLQSxFQUFLLEdBQUksSUFDNUJDLFNBQVNELEVBQUssR0FBS0EsRUFBSyxHQUFJLElBQzVCQyxTQUFTRCxFQUFLLEdBQUtBLEVBQUssR0FBSSxJQUVwQyxJQUtDdEwsRUFBSSxFQUFHQSxFQUFJbUwsRUFBV2xMLE9BQVFELElBQUssQ0FDeEMsSUFBSW9MLEVBQUtELEVBQVduTCxHQUFHb0wsR0FDbkJLLEVBQVlOLEVBQVduTCxHQUFHZCxRQUMxQm9NLEVBQU9GLEVBQUdNLEtBQUsvSixHQUNuQixHQUFJMkosRUFBTSxDQUNOLElBQUlLLEVBQVdGLEVBQVVILEdBQ3pCOUwsS0FBS29NLEVBQUlELEVBQVMsR0FDbEJuTSxLQUFLRyxFQUFJZ00sRUFBUyxHQUNsQm5NLEtBQUtxTSxFQUFJRixFQUFTLEdBQ2RBLEVBQVMxTCxPQUFTLElBQ2xCVCxLQUFLcUMsTUFBUThKLEVBQVMsSUFFMUJuTSxLQUFLb0MsSUFBSyxDQUNkLENBRUosQ0FHQXBDLEtBQUtvTSxFQUFLcE0sS0FBS29NLEVBQUksR0FBS0UsTUFBTXRNLEtBQUtvTSxHQUFNLEVBQU1wTSxLQUFLb00sRUFBSSxJQUFPLElBQU1wTSxLQUFLb00sRUFDMUVwTSxLQUFLRyxFQUFLSCxLQUFLRyxFQUFJLEdBQUttTSxNQUFNdE0sS0FBS0csR0FBTSxFQUFNSCxLQUFLRyxFQUFJLElBQU8sSUFBTUgsS0FBS0csRUFDMUVILEtBQUtxTSxFQUFLck0sS0FBS3FNLEVBQUksR0FBS0MsTUFBTXRNLEtBQUtxTSxHQUFNLEVBQU1yTSxLQUFLcU0sRUFBSSxJQUFPLElBQU1yTSxLQUFLcU0sRUFDMUVyTSxLQUFLcUMsTUFBU3JDLEtBQUtxQyxNQUFRLEVBQUssRUFBTXJDLEtBQUtxQyxNQUFRLEdBQU9pSyxNQUFNdE0sS0FBS3FDLE9BQVUsRUFBTXJDLEtBQUtxQyxNQUcxRnJDLEtBQUt1TSxNQUFRLFdBQ1QsTUFBTyxPQUFTdk0sS0FBS29NLEVBQUksS0FBT3BNLEtBQUtHLEVBQUksS0FBT0gsS0FBS3FNLEVBQUksR0FDN0QsRUFDQXJNLEtBQUt3TSxPQUFTLFdBQ1YsTUFBTyxRQUFVeE0sS0FBS29NLEVBQUksS0FBT3BNLEtBQUtHLEVBQUksS0FBT0gsS0FBS3FNLEVBQUksS0FBT3JNLEtBQUtxQyxNQUFRLEdBQ2xGLEVBQ0FyQyxLQUFLeU0sTUFBUSxXQUNULElBQUlMLEVBQUlwTSxLQUFLb00sRUFBRU0sU0FBUyxJQUNwQnZNLEVBQUlILEtBQUtHLEVBQUV1TSxTQUFTLElBQ3BCTCxFQUFJck0sS0FBS3FNLEVBQUVLLFNBQVMsSUFJeEIsT0FIZ0IsR0FBWk4sRUFBRTNMLFNBQWEyTCxFQUFJLElBQU1BLEdBQ2IsR0FBWmpNLEVBQUVNLFNBQWFOLEVBQUksSUFBTUEsR0FDYixHQUFaa00sRUFBRTVMLFNBQWE0TCxFQUFJLElBQU1BLEdBQ3RCLElBQU1ELEVBQUlqTSxFQUFJa00sQ0FDekIsRUFHQXJNLEtBQUsyTSxXQUFhLFdBSWQsSUFGQSxJQUFJQyxFQUFXLElBQUlDLE1BRVZyTSxFQUFJLEVBQUdBLEVBQUltTCxFQUFXbEwsT0FBUUQsSUFFbkMsSUFEQSxJQUFJcUwsRUFBVUYsRUFBV25MLEdBQUdxTCxRQUNuQmlCLEVBQUksRUFBR0EsRUFBSWpCLEVBQVFwTCxPQUFRcU0sSUFDaENGLEVBQVNBLEVBQVNuTSxRQUFVb0wsRUFBUWlCLEdBSTVDLElBQUssSUFBSUMsS0FBTXJLLEVBQ1hrSyxFQUFTQSxFQUFTbk0sUUFBVXNNLEVBR2hDLElBQUlDLEVBQU1DLFNBQVNDLGNBQWMsTUFFakMsSUFEQUYsRUFBSUcsYUFBYSxLQUFNLHFCQUNkM00sRUFBSSxFQUFHQSxFQUFJb00sRUFBU25NLE9BQVFELElBQ2pDLElBQ0ksSUFBSTRNLEVBQVlILFNBQVNDLGNBQWMsTUFDbkNHLEVBQWEsSUFBSUMsU0FBU1YsRUFBU3BNLElBQ25DK00sRUFBY04sU0FBU0MsY0FBYyxPQUN6Q0ssRUFBWUMsTUFBTUMsUUFDVixvREFFa0JKLEVBQVdaLFFBRjdCLFdBR2FZLEVBQVdaLFFBRWhDYyxFQUFZRyxZQUFZVCxTQUFTVSxlQUFlLFNBQ2hELElBQUlDLEVBQWtCWCxTQUFTVSxlQUMzQixJQUFNZixFQUFTcE0sR0FBSyxPQUFTNk0sRUFBV2QsUUFBVSxPQUFTYyxFQUFXWixTQUUxRVcsRUFBVU0sWUFBWUgsR0FDdEJILEVBQVVNLFlBQVlFLEdBQ3RCWixFQUFJVSxZQUFZTixFQUVwQixDQUFFLE1BQU03TCxHQUFHLENBRWYsT0FBT3lMLENBRVgsQ0FFSixDLEdDNVNJYSxFQUEyQixDQUFDLEVBR2hDLFNBQVNDLEVBQW9CQyxHQUU1QixJQUFJQyxFQUFlSCxFQUF5QkUsR0FDNUMsUUFBcUJFLElBQWpCRCxFQUNILE9BQU9BLEVBQWF2TyxRQUdyQixJQUFJRCxFQUFTcU8sRUFBeUJFLEdBQVksQ0FHakR0TyxRQUFTLENBQUMsR0FPWCxPQUhBeU8sRUFBb0JILEdBQVVoTyxLQUFLUCxFQUFPQyxRQUFTRCxFQUFRQSxFQUFPQyxRQUFTcU8sR0FHcEV0TyxFQUFPQyxPQUNmLENDdEJBcU8sRUFBb0IzTixFQUFJLFdBQ3ZCLEdBQTBCLGlCQUFmZ08sV0FBeUIsT0FBT0EsV0FDM0MsSUFDQyxPQUFPbk8sTUFBUSxJQUFJb08sU0FBUyxjQUFiLEVBQ2hCLENBQUUsTUFBTzdNLEdBQ1IsR0FBc0IsaUJBQVhyQixPQUFxQixPQUFPQSxNQUN4QyxDQUNBLENBUHVCLEcsbUJDQXhCLFNBQVNtTyxFQUFpQkMsR0FDdEIsT0FBTyxJQUFJQyxTQUFRLENBQUNDLEVBQVNDLEtBRXpCSCxFQUFRSSxXQUFhSixFQUFRSyxVQUFZLElBQU1ILEVBQVFGLEVBQVFNLFFBRS9ETixFQUFRTyxRQUFVUCxFQUFRUSxRQUFVLElBQU1MLEVBQU9ILEVBQVFTLE1BQU0sR0FFdkUsQ0FPQSxJQUFJQyxFQUNKLFNBQVNDLElBSUwsT0FIS0QsSUFDREEsRUFUUixTQUFxQkUsRUFBUUMsR0FDekIsTUFBTWIsRUFBVWMsVUFBVUMsS0FRWSxnQkFQdENmLEVBQVFnQixnQkFBa0IsSUFBTWhCLEVBQVFNLE9BQU9XLGtCQUFrQkosR0FDakUsTUFBTUssRUFBTW5CLEVBQWlCQyxHQUM3QixNQUFPLENBQUNtQixFQUFRM08sSUFBYTBPLEVBQUlFLE1BQU1DLEdBQU83TyxFQUFTNk8sRUFBR0MsWUFBWVQsRUFBV00sR0FBUUksWUFBWVYsS0FDekcsQ0FJOEJXLENBQVksRUFBZ0IsV0FFL0NkLENBQ1gsQ0FPQSxTQUFTZSxFQUFJQyxFQUFLQyxFQUFjaEIsS0FDNUIsT0FBT2dCLEVBQVksWUFBYUMsR0FBVTdCLEVBQWlCNkIsRUFBTUgsSUFBSUMsS0FDekUsQ0FRQSxTQUFTRyxFQUFJSCxFQUFLSSxFQUFPSCxFQUFjaEIsS0FDbkMsT0FBT2dCLEVBQVksYUFBY0MsSUFDN0JBLEVBQU1HLElBQUlELEVBQU9KLEdBQ1YzQixFQUFpQjZCLEVBQU1OLGVBRXRDLEMsc0JDNUJJVSxFQUFFLFNBQVNsRSxFQUFFN0ssR0FBRyxPQUFPK08sRUFBRUMsT0FBT0MsZ0JBQWdCLENBQUNDLFVBQVUsY0FBYzVELE9BQU8sU0FBU3lELEVBQUVsRSxHQUFHa0UsRUFBRUcsVUFBVXJFLENBQUMsR0FBRyxTQUFTa0UsRUFBRWxFLEdBQUcsSUFBSSxJQUFJN0ssS0FBSzZLLEVBQUVtRSxPQUFPRyxVQUFVQyxlQUFlNVEsS0FBS3FNLEVBQUU3SyxLQUFLK08sRUFBRS9PLEdBQUc2SyxFQUFFN0ssR0FBRyxHQUFHNkssRUFBRTdLLEVBQUUsRUFBRSxTQUFTNkssRUFBRUEsRUFBRTdLLEdBQUcsR0FBRyxtQkFBbUJBLEdBQUcsT0FBT0EsRUFBRSxNQUFNLElBQUlxUCxVQUFVLHVCQUF1QkMsT0FBT3RQLEdBQUcsaUNBQWlDLFNBQVNmLElBQUlSLEtBQUs4USxZQUFZMUUsQ0FBQyxDQUFDa0UsRUFBRWxFLEVBQUU3SyxHQUFHNkssRUFBRXNFLFVBQVUsT0FBT25QLEVBQUVnUCxPQUFPUSxPQUFPeFAsSUFBSWYsRUFBRWtRLFVBQVVuUCxFQUFFbVAsVUFBVSxJQUFJbFEsRUFBRSxDQUFpNUIsU0FBU0EsRUFBRThQLEVBQUVsRSxHQUFHLElBQUk3SyxFQUFFK08sRUFBRSxHQUFHOVAsRUFBRThQLEVBQUUsR0FBRyxNQUFNLENBQUMvTyxFQUFFTixLQUFLK1AsSUFBSTVFLEdBQUc1TCxFQUFFUyxLQUFLZ1EsSUFBSTdFLEdBQUc3SyxFQUFFTixLQUFLZ1EsSUFBSTdFLEdBQUc1TCxFQUFFUyxLQUFLK1AsSUFBSTVFLEdBQUcsQ0FBQyxTQUFTOEUsSUFBSSxJQUFJLElBQUlaLEVBQUUsR0FBR2xFLEVBQUUsRUFBRUEsRUFBRXRLLFVBQVVyQixPQUFPMkwsSUFBSWtFLEVBQUVsRSxHQUFHdEssVUFBVXNLLEdBQUcsSUFBSSxJQUFJN0ssRUFBRSxFQUFFQSxFQUFFK08sRUFBRTdQLE9BQU9jLElBQUksR0FBRyxpQkFBaUIrTyxFQUFFL08sR0FBRyxNQUFNLElBQUk0UCxNQUFNLDJCQUEyQjVQLEVBQUUsNkJBQTZCK08sRUFBRS9PLEdBQUcsY0FBYytPLEVBQUUvTyxJQUFJLE9BQU0sQ0FBRSxDQUFDLElBQUk2UCxFQUFFblEsS0FBS29RLEdBQUcsU0FBU0MsRUFBRWhCLEVBQUVsRSxFQUFFN0ssR0FBRytPLEVBQUVpQixTQUFTLElBQUlqQixFQUFFaUIsU0FBUyxFQUFFLEVBQUVqQixFQUFFa0IsVUFBVSxJQUFJbEIsRUFBRWtCLFVBQVUsRUFBRSxFQUFFLElBQUlOLEVBQUVaLEVBQUVtQixHQUFHSCxFQUFFaEIsRUFBRW9CLEdBQUdDLEVBQUVyQixFQUFFc0IsRUFBRUMsRUFBRXZCLEVBQUV3QixFQUFFWixFQUFFalEsS0FBSzhRLElBQUl6QixFQUFFbUIsSUFBSUgsRUFBRXJRLEtBQUs4USxJQUFJekIsRUFBRW9CLElBQUksSUFBSU0sRUFBRXhSLEVBQUUsRUFBRTRMLEVBQUV1RixHQUFHLEdBQUdwUSxFQUFFc1EsR0FBRyxJQUFJdkIsRUFBRTJCLEtBQUssSUFBSWIsR0FBR2MsRUFBRUYsRUFBRSxHQUFHRixFQUFFRSxFQUFFLEdBQUdHLEVBQUVsUixLQUFLbVIsSUFBSUYsRUFBRSxHQUFHalIsS0FBS21SLElBQUlsQixFQUFFLEdBQUdqUSxLQUFLbVIsSUFBSU4sRUFBRSxHQUFHN1EsS0FBS21SLElBQUlkLEVBQUUsR0FBRyxFQUFFYSxJQUFJakIsR0FBR2pRLEtBQUtvUixLQUFLRixHQUFHYixHQUFHclEsS0FBS29SLEtBQUtGLElBQUk3QixFQUFFbUIsR0FBR1AsRUFBRVosRUFBRW9CLEdBQUdKLEVBQUUsSUFBSWdCLEVBQUVyUixLQUFLbVIsSUFBSWxCLEVBQUUsR0FBR2pRLEtBQUttUixJQUFJTixFQUFFLEdBQUc3USxLQUFLbVIsSUFBSWQsRUFBRSxHQUFHclEsS0FBS21SLElBQUlGLEVBQUUsR0FBR0ssR0FBR2pDLEVBQUVpQixXQUFXakIsRUFBRWtCLFVBQVUsR0FBRyxHQUFHdlEsS0FBS29SLEtBQUtwUixLQUFLQyxJQUFJLEdBQUdELEtBQUttUixJQUFJbEIsRUFBRSxHQUFHalEsS0FBS21SLElBQUlkLEVBQUUsR0FBR2dCLEdBQUdBLElBQUlFLEVBQUV0QixFQUFFWSxFQUFFUixFQUFFaUIsRUFBRUUsR0FBR25CLEVBQUVZLEVBQUVoQixFQUFFcUIsRUFBRUcsRUFBRWxTLEVBQUUsQ0FBQ2dTLEVBQUVDLEdBQUduQyxFQUFFMkIsS0FBSyxJQUFJYixHQUFHZCxFQUFFcUMsR0FBR0QsRUFBRSxJQUFJdEcsRUFBRXVGLEdBQUcsRUFBRXJCLEVBQUVzQyxHQUFHRixFQUFFLElBQUluUixFQUFFc1EsR0FBRyxFQUFFdkIsRUFBRXVDLEtBQUs1UixLQUFLNlIsT0FBT2hCLEVBQUVXLEdBQUduQixHQUFHWSxFQUFFTSxHQUFHdEIsR0FBR1osRUFBRXlDLEtBQUs5UixLQUFLNlIsUUFBUWhCLEVBQUVXLEdBQUduQixJQUFJWSxFQUFFTSxHQUFHdEIsR0FBRyxJQUFJWixFQUFFa0IsV0FBV2xCLEVBQUV5QyxLQUFLekMsRUFBRXVDLE9BQU92QyxFQUFFeUMsTUFBTSxFQUFFM0IsR0FBRyxJQUFJZCxFQUFFa0IsV0FBV2xCLEVBQUV5QyxLQUFLekMsRUFBRXVDLE9BQU92QyxFQUFFeUMsTUFBTSxFQUFFM0IsR0FBR2QsRUFBRXVDLE1BQU0sSUFBSXpCLEVBQUVkLEVBQUV5QyxNQUFNLElBQUkzQixDQUFDLENBQUMsU0FBU08sRUFBRXJCLEVBQUVsRSxFQUFFN0ssR0FBRzJQLEVBQUVaLEVBQUVsRSxFQUFFN0ssR0FBRyxJQUFJZixFQUFFOFAsRUFBRUEsRUFBRWxFLEVBQUVBLEVBQUU3SyxFQUFFQSxFQUFFLEdBQUcsRUFBRWYsRUFBRSxNQUFNLEdBQUcsR0FBRyxJQUFJQSxFQUFFLE1BQU0sQ0FBQyxDQUFDOFAsRUFBRS9PLEdBQUcrTyxFQUFFQSxFQUFFbEUsRUFBRUEsR0FBR0EsRUFBRTdLLEdBQUcrTyxFQUFFQSxFQUFFbEUsRUFBRUEsS0FBSyxJQUFJZ0YsRUFBRW5RLEtBQUtvUixLQUFLN1IsR0FBRyxNQUFNLENBQUMsRUFBRThQLEVBQUUvTyxFQUFFNkssRUFBRWdGLElBQUlkLEVBQUVBLEVBQUVsRSxFQUFFQSxJQUFJQSxFQUFFN0ssRUFBRStPLEVBQUVjLElBQUlkLEVBQUVBLEVBQUVsRSxFQUFFQSxJQUFJLEVBQUVrRSxFQUFFL08sRUFBRTZLLEVBQUVnRixJQUFJZCxFQUFFQSxFQUFFbEUsRUFBRUEsSUFBSUEsRUFBRTdLLEVBQUUrTyxFQUFFYyxJQUFJZCxFQUFFQSxFQUFFbEUsRUFBRUEsSUFBSSxDQUFDLElBQUl5RixFQUFFRyxFQUFFL1EsS0FBS29RLEdBQUcsSUFBSSxTQUFTYSxFQUFFNUIsRUFBRWxFLEVBQUU3SyxHQUFHLE9BQU8sRUFBRUEsR0FBRytPLEVBQUUvTyxFQUFFNkssQ0FBQyxDQUFDLFNBQVMwRixFQUFFeEIsRUFBRWxFLEVBQUU3SyxFQUFFZixHQUFHLE9BQU84UCxFQUFFclAsS0FBSytQLElBQUl4USxFQUFFLElBQUk0USxHQUFHaEYsRUFBRW5MLEtBQUtnUSxJQUFJelEsRUFBRSxJQUFJNFEsR0FBRzdQLENBQUMsQ0FBQyxTQUFTNFEsRUFBRTdCLEVBQUVsRSxFQUFFN0ssRUFBRWYsR0FBRyxJQUFJMFEsRUFBRSxLQUFLRSxFQUFFaEYsRUFBRWtFLEVBQUVnQixFQUFFL1AsRUFBRTZLLEVBQUV1RixFQUFFLEVBQUVQLEVBQUUsR0FBRzVRLEVBQUVlLEdBQUcsRUFBRStQLEVBQUVPLEVBQUUsR0FBR1AsRUFBRUYsR0FBR1ksRUFBRSxFQUFFWixFQUFFLE9BQU9uUSxLQUFLOFEsSUFBSUosR0FBR1QsRUFBRSxFQUFFYyxFQUFFSCxHQUFHLFNBQVN2QixFQUFFbEUsRUFBRTdLLFFBQUcsSUFBU0EsSUFBSUEsRUFBRSxNQUFNLElBQUlmLEVBQUU4UCxFQUFFQSxFQUFFLEVBQUVsRSxFQUFFLEdBQUc1TCxHQUFHZSxFQUFFLE1BQU0sR0FBRyxHQUFHZixHQUFHZSxFQUFFLE1BQU0sRUFBRStPLEVBQUUsR0FBRyxJQUFJWSxFQUFFalEsS0FBS29SLEtBQUs3UixHQUFHLE1BQU0sRUFBRThQLEVBQUUsRUFBRVksR0FBR1osRUFBRSxFQUFFWSxFQUFFLENBQWpJLENBQW1JVyxFQUFFRixFQUFFSyxFQUFFTCxFQUFFVCxFQUFFLENBQUMsU0FBU29CLEVBQUVoQyxFQUFFbEUsRUFBRTdLLEVBQUVmLEVBQUUwUSxHQUFHLElBQUlFLEVBQUUsRUFBRUYsRUFBRSxPQUFPWixHQUFHYyxFQUFFQSxFQUFFQSxHQUFHaEYsR0FBRyxFQUFFZ0YsRUFBRUEsRUFBRUYsR0FBRzNQLEdBQUcsRUFBRTZQLEVBQUVGLEVBQUVBLEdBQUcxUSxHQUFHMFEsRUFBRUEsRUFBRUEsRUFBRSxFQUFFLFNBQVNaLEdBQUcsU0FBU2xFLElBQUksT0FBT3lGLEdBQUUsU0FBVXZCLEVBQUVsRSxFQUFFN0ssR0FBRyxPQUFPK08sRUFBRTBDLGdCQUFXLElBQVMxQyxFQUFFMkMsS0FBSzNDLEVBQUUyQyxJQUFJN0csUUFBRyxJQUFTa0UsRUFBRTRDLEtBQUs1QyxFQUFFNEMsSUFBSTNSLFFBQUcsSUFBUytPLEVBQUU2QyxLQUFLN0MsRUFBRTZDLElBQUkvRyxRQUFHLElBQVNrRSxFQUFFOEMsS0FBSzlDLEVBQUU4QyxJQUFJN1IsUUFBRyxJQUFTK08sRUFBRXNCLElBQUl0QixFQUFFc0IsR0FBR3hGLFFBQUcsSUFBU2tFLEVBQUV3QixJQUFJeEIsRUFBRXdCLEdBQUd2USxHQUFHK08sRUFBRTBDLFVBQVMsR0FBSTFDLENBQUUsR0FBRSxDQUFDLFNBQVMvTyxJQUFJLElBQUkrTyxFQUFFK0MsSUFBSWpILEVBQUVpSCxJQUFJOVIsRUFBRThSLElBQUk3UyxFQUFFNlMsSUFBSSxPQUFPeEIsR0FBRSxTQUFVWCxFQUFFRSxFQUFFRSxHQUFHLE9BQU9KLEVBQUVvQyxLQUFLQyxFQUFFQyxrQkFBa0J0QyxFQUFFb0MsS0FBS0MsRUFBRUUsU0FBU25ELEVBQUVoRSxNQUFNZ0UsR0FBR2MsRUFBRWQsRUFBRWxFLEVBQUVFLE1BQU1GLEdBQUdrRixFQUFFbEYsRUFBRThFLEVBQUUrQixHQUFHL0IsRUFBRThCLFNBQVM1QixFQUFFZCxFQUFFLEVBQUVjLEVBQUVkLEVBQUVZLEVBQUVnQyxHQUFHaEMsRUFBRThCLFNBQVMxQixFQUFFbEYsRUFBRSxFQUFFa0YsRUFBRWxGLEdBQUc4RSxFQUFFb0MsS0FBS0MsRUFBRUUsVUFBVW5ELEVBQUVZLEVBQUU4QixTQUFTNUIsRUFBRUYsRUFBRWlDLEdBQUdqQyxFQUFFaUMsR0FBRy9HLEVBQUU4RSxFQUFFOEIsU0FBUzFCLEVBQUVKLEVBQUVrQyxHQUFHbEMsRUFBRWtDLEtBQUs5QyxFQUFFK0MsSUFBSWpILEVBQUVpSCxLQUFLbkMsRUFBRW9DLEtBQUtDLEVBQUVHLGlCQUFpQnhDLEVBQUVvQyxLQUFLQyxFQUFFSSxRQUFRcFMsRUFBRStLLE1BQU0vSyxHQUFHNlAsRUFBRTdQLEVBQUVmLEVBQUU4TCxNQUFNOUwsR0FBRzhRLEVBQUU5USxFQUFFMFEsRUFBRStCLEdBQUcvQixFQUFFOEIsU0FBUzVCLEVBQUU3UCxFQUFFLEVBQUU2UCxFQUFFN1AsRUFBRTJQLEVBQUVnQyxHQUFHaEMsRUFBRThCLFNBQVMxQixFQUFFOVEsRUFBRSxFQUFFOFEsRUFBRTlRLEdBQUcwUSxFQUFFb0MsS0FBS0MsRUFBRUksU0FBU3BTLEVBQUUyUCxFQUFFOEIsU0FBUzVCLEVBQUVGLEVBQUUrQixHQUFHL0IsRUFBRStCLEdBQUd6UyxFQUFFMFEsRUFBRThCLFNBQVMxQixFQUFFSixFQUFFZ0MsR0FBR2hDLEVBQUVnQyxLQUFLM1IsRUFBRThSLElBQUk3UyxFQUFFNlMsS0FBS25DLENBQUUsR0FBRSxDQUFDLFNBQVNFLElBQUksSUFBSWQsRUFBRStDLElBQUlqSCxFQUFFaUgsSUFBSSxPQUFPeEIsR0FBRSxTQUFVdFEsRUFBRWYsRUFBRTBRLEdBQUcsR0FBRzNQLEVBQUUrUixLQUFLQyxFQUFFRyxpQkFBaUJuUyxFQUFFK1IsS0FBS0MsRUFBRUksUUFBUXJELEVBQUVoRSxNQUFNZ0UsR0FBRzlQLEVBQUU4UCxFQUFFbEUsRUFBRUUsTUFBTUYsR0FBRzhFLEVBQUU5RSxFQUFFN0ssRUFBRTBSLEdBQUcxUixFQUFFeVIsU0FBU3hTLEVBQUU4UCxFQUFFLEVBQUU5UCxFQUFFOFAsRUFBRS9PLEVBQUUyUixHQUFHM1IsRUFBRXlSLFNBQVM5QixFQUFFOUUsRUFBRSxFQUFFOEUsRUFBRTlFLEdBQUc3SyxFQUFFK1IsS0FBS0MsRUFBRUksUUFBUSxDQUFDckQsRUFBRS9PLEVBQUV5UixTQUFTeFMsRUFBRWUsRUFBRTBSLEdBQUcxUixFQUFFMFIsR0FBRzdHLEVBQUU3SyxFQUFFeVIsU0FBUzlCLEVBQUUzUCxFQUFFMlIsR0FBRzNSLEVBQUUyUixHQUFHLElBQUk5QixFQUFFN1AsRUFBRTBSLEdBQUczQixFQUFFL1AsRUFBRTJSLEdBQUczUixFQUFFK1IsS0FBS0MsRUFBRUUsU0FBU2xTLEVBQUUwUixLQUFLMVIsRUFBRXlSLFNBQVMsRUFBRXhTLEdBQUcsRUFBRTRRLEdBQUcsRUFBRTdQLEVBQUUyUixLQUFLM1IsRUFBRXlSLFNBQVMsRUFBRTlCLEdBQUcsRUFBRUksR0FBRyxFQUFFL1AsRUFBRTRSLElBQUk1UixFQUFFcVEsRUFBRSxFQUFFUixHQUFHLEVBQUU3UCxFQUFFNlIsSUFBSTdSLEVBQUV1USxFQUFFLEVBQUVSLEdBQUcsQ0FBQyxNQUFNaEIsRUFBRStDLElBQUlqSCxFQUFFaUgsSUFBSSxPQUFPOVIsQ0FBRSxHQUFFLENBQUMsU0FBU3NRLEVBQUV2QixHQUFHLElBQUlsRSxFQUFFLEVBQUU3SyxFQUFFLEVBQUVmLEVBQUU2UyxJQUFJbkMsRUFBRW1DLElBQUksT0FBTyxTQUFTakMsR0FBRyxHQUFHOUUsTUFBTTlMLE1BQU00USxFQUFFa0MsS0FBS0MsRUFBRUssU0FBUyxNQUFNLElBQUl6QyxNQUFNLCtCQUErQixJQUFJRyxFQUFFaEIsRUFBRWMsRUFBRWhGLEVBQUU3SyxFQUFFZixFQUFFMFEsR0FBRyxPQUFPRSxFQUFFa0MsS0FBS0MsRUFBRU0sYUFBYXpILEVBQUU1TCxFQUFFZSxFQUFFMlAsUUFBRyxJQUFTRSxFQUFFUSxJQUFJeEYsRUFBRWdGLEVBQUU0QixTQUFTNUcsRUFBRWdGLEVBQUVRLEVBQUVSLEVBQUVRLFFBQUcsSUFBU1IsRUFBRVUsSUFBSXZRLEVBQUU2UCxFQUFFNEIsU0FBU3pSLEVBQUU2UCxFQUFFVSxFQUFFVixFQUFFVSxHQUFHVixFQUFFa0MsS0FBS0MsRUFBRUssVUFBVXBULEVBQUU0TCxFQUFFOEUsRUFBRTNQLEdBQUcrUCxDQUFDLENBQUMsQ0FBQyxTQUFTaUIsRUFBRWpDLEVBQUVsRSxFQUFFN0ssRUFBRWYsRUFBRTRRLEVBQUVFLEdBQUcsT0FBT0osRUFBRVosRUFBRWxFLEVBQUU3SyxFQUFFZixFQUFFNFEsRUFBRUUsR0FBR08sR0FBRSxTQUFVWCxFQUFFUyxFQUFFRSxFQUFFRyxHQUFHLElBQUlFLEVBQUVoQixFQUFFK0IsR0FBR25CLEVBQUVaLEVBQUVpQyxHQUFHaEIsRUFBRWpCLEVBQUU4QixXQUFXMUcsTUFBTTBGLEdBQUdNLE9BQUUsSUFBU3BCLEVBQUVVLEVBQUVWLEVBQUVVLEVBQUVPLEVBQUUsRUFBRVIsRUFBRVksT0FBRSxJQUFTckIsRUFBRVksRUFBRVosRUFBRVksRUFBRUssRUFBRSxFQUFFTixFQUFFLFNBQVNXLEVBQUVsQyxHQUFHLE9BQU9BLEVBQUVBLENBQUMsQ0FBQ1ksRUFBRW9DLEtBQUtDLEVBQUVPLGVBQWUsSUFBSTFILElBQUk4RSxFQUFFb0MsS0FBS0MsRUFBRVEsUUFBUTdDLEVBQUVZLEVBQUVaLEVBQUU4QixTQUFTLEVBQUVuQixHQUFHWCxFQUFFb0MsS0FBS0MsRUFBRVMsY0FBYyxJQUFJelMsSUFBSTJQLEVBQUVvQyxLQUFLQyxFQUFFUSxRQUFRN0MsRUFBRVUsRUFBRVYsRUFBRThCLFNBQVMsRUFBRXJCLFFBQUcsSUFBU1QsRUFBRVUsSUFBSVYsRUFBRVUsRUFBRVYsRUFBRVUsRUFBRXRCLEVBQUVpQyxFQUFFaFIsR0FBRzRRLEVBQUUsRUFBRWYsU0FBSSxJQUFTRixFQUFFWSxJQUFJWixFQUFFWSxFQUFFUSxFQUFFbEcsRUFBRThFLEVBQUVZLEVBQUV0UixHQUFHMlIsRUFBRSxFQUFFYixTQUFJLElBQVNKLEVBQUUrQixLQUFLL0IsRUFBRStCLEdBQUcvQixFQUFFK0IsR0FBRzNDLEVBQUVZLEVBQUVnQyxHQUFHM1IsR0FBRzRRLEVBQUUsRUFBRWYsU0FBSSxJQUFTRixFQUFFZ0MsS0FBS2hDLEVBQUVnQyxHQUFHaEIsRUFBRTlGLEVBQUU4RSxFQUFFZ0MsR0FBRzFTLEdBQUcyUixFQUFFLEVBQUViLFNBQUksSUFBU0osRUFBRWlDLEtBQUtqQyxFQUFFaUMsR0FBR2pDLEVBQUVpQyxHQUFHN0MsRUFBRVksRUFBRWtDLEdBQUc3UixHQUFHNFEsRUFBRSxFQUFFZixTQUFJLElBQVNGLEVBQUVrQyxLQUFLbEMsRUFBRWtDLEdBQUd0QixFQUFFMUYsRUFBRThFLEVBQUVrQyxHQUFHNVMsR0FBRzJSLEVBQUUsRUFBRWIsSUFBSSxJQUFJbUIsRUFBRW5DLEVBQUU5UCxFQUFFNEwsRUFBRTdLLEVBQUUsUUFBRyxJQUFTMlAsRUFBRWUsT0FBTyxJQUFJM0IsR0FBRyxJQUFJbEUsR0FBRyxJQUFJN0ssR0FBRyxJQUFJZixHQUFHLEdBQUcsSUFBSWlTLFNBQVN2QixFQUFFTyxVQUFVUCxFQUFFUSxVQUFVUixFQUFFZSxZQUFZZixFQUFFSyxnQkFBZ0JMLEVBQUVNLFVBQVVOLEVBQUVvQyxLQUFLQyxFQUFFUSxZQUFZLENBQUMsSUFBSXJCLEVBQUV4QixFQUFFZSxLQUFLaFIsS0FBS29RLEdBQUcsSUFBSTRDLEVBQUVoVCxLQUFLZ1EsSUFBSXlCLEdBQUd3QixFQUFFalQsS0FBSytQLElBQUkwQixHQUFHZCxFQUFFLEVBQUVZLEVBQUV0QixFQUFFTyxJQUFJMEMsRUFBRSxFQUFFM0IsRUFBRXRCLEVBQUVRLElBQUkwQyxFQUFFNUIsRUFBRTBCLEdBQUd0QyxFQUFFWSxFQUFFeUIsR0FBR0UsRUFBRUUsRUFBRSxFQUFFSixFQUFFQyxHQUFHdEMsRUFBRXVDLEdBQUdHLEVBQUU5QixFQUFFeUIsR0FBR3JDLEVBQUVZLEVBQUUwQixHQUFHQyxFQUFFSSxFQUFFSCxFQUFFNVQsRUFBRUEsRUFBRTZULEVBQUVqSSxFQUFFNUwsRUFBRThULEVBQUVsSSxFQUFFQSxFQUFFb0ksRUFBRUgsR0FBRy9ELEVBQUU5UCxFQUFFNEwsRUFBRTdLLEdBQUcsR0FBRzZTLEVBQUU3UyxFQUFFZixFQUFFOFQsRUFBRWhFLEVBQUVsRSxHQUFHak0sRUFBRWlVLEVBQUU3UyxFQUFFQSxFQUFFOFMsRUFBRS9ELEVBQUUvTyxFQUFFK1MsRUFBRWhFLEVBQUVBLEVBQUVtRSxHQUFHeFQsS0FBSzZSLE1BQU0wQixFQUFFRCxFQUFFcFUsR0FBR2MsS0FBS29RLElBQUlwUSxLQUFLb1EsR0FBRyxFQUFFcUQsRUFBRXpULEtBQUtnUSxJQUFJd0QsR0FBR0UsRUFBRTFULEtBQUsrUCxJQUFJeUQsR0FBR3ZELEVBQUVPLEdBQUd4USxLQUFLOFEsSUFBSVUsR0FBR3hSLEtBQUtvUixLQUFLa0MsRUFBRS9CLEVBQUVtQyxHQUFHSCxFQUFFRSxFQUFFQyxFQUFFeFUsRUFBRXFTLEVBQUVrQyxJQUFJeEQsRUFBRVEsR0FBR3pRLEtBQUs4USxJQUFJVSxHQUFHeFIsS0FBS29SLEtBQUtrQyxFQUFFL0IsRUFBRWtDLEdBQUdGLEVBQUVFLEVBQUVDLEVBQUV4VSxFQUFFcVMsRUFBRW1DLElBQUl6RCxFQUFFZSxLQUFLLElBQUl3QyxFQUFFeFQsS0FBS29RLEVBQUUsQ0FBQyxZQUFPLElBQVNILEVBQUVNLFdBQVcsRUFBRWlCLElBQUl2QixFQUFFTSxZQUFZTixFQUFFTSxXQUFXTixDQUFFLEdBQUUsQ0FBNkVaLEVBQUVzRSxNQUFNLFNBQVN0RSxHQUFHLFNBQVNsRSxFQUFFQSxHQUFHLE9BQU9uTCxLQUFLTyxNQUFNNEssRUFBRWtFLEdBQUdBLENBQUMsQ0FBQyxZQUFPLElBQVNBLElBQUlBLEVBQUUsTUFBTVksRUFBRVosR0FBRyxTQUFTQSxHQUFHLFlBQU8sSUFBU0EsRUFBRTJDLEtBQUszQyxFQUFFMkMsR0FBRzdHLEVBQUVrRSxFQUFFMkMsVUFBSyxJQUFTM0MsRUFBRTRDLEtBQUs1QyxFQUFFNEMsR0FBRzlHLEVBQUVrRSxFQUFFNEMsVUFBSyxJQUFTNUMsRUFBRTZDLEtBQUs3QyxFQUFFNkMsR0FBRy9HLEVBQUVrRSxFQUFFNkMsVUFBSyxJQUFTN0MsRUFBRThDLEtBQUs5QyxFQUFFOEMsR0FBR2hILEVBQUVrRSxFQUFFOEMsVUFBSyxJQUFTOUMsRUFBRXNCLElBQUl0QixFQUFFc0IsRUFBRXhGLEVBQUVrRSxFQUFFc0IsU0FBSSxJQUFTdEIsRUFBRXdCLElBQUl4QixFQUFFd0IsRUFBRTFGLEVBQUVrRSxFQUFFd0IsU0FBSSxJQUFTeEIsRUFBRW1CLEtBQUtuQixFQUFFbUIsR0FBR3JGLEVBQUVrRSxFQUFFbUIsVUFBSyxJQUFTbkIsRUFBRW9CLEtBQUtwQixFQUFFb0IsR0FBR3RGLEVBQUVrRSxFQUFFb0IsS0FBS3BCLENBQUMsQ0FBQyxFQUFFQSxFQUFFdUUsT0FBT3pJLEVBQUVrRSxFQUFFd0UsT0FBTyxXQUFXLE9BQU9qRCxHQUFFLFNBQVV2QixFQUFFbEUsRUFBRTdLLEdBQUcsT0FBTytPLEVBQUUwQyxnQkFBVyxJQUFTMUMsRUFBRTJDLEtBQUszQyxFQUFFMkMsSUFBSTdHLFFBQUcsSUFBU2tFLEVBQUU0QyxLQUFLNUMsRUFBRTRDLElBQUkzUixRQUFHLElBQVMrTyxFQUFFNkMsS0FBSzdDLEVBQUU2QyxJQUFJL0csUUFBRyxJQUFTa0UsRUFBRThDLEtBQUs5QyxFQUFFOEMsSUFBSTdSLFFBQUcsSUFBUytPLEVBQUVzQixJQUFJdEIsRUFBRXNCLEdBQUd4RixRQUFHLElBQVNrRSxFQUFFd0IsSUFBSXhCLEVBQUV3QixHQUFHdlEsR0FBRytPLEVBQUUwQyxVQUFTLEdBQUkxQyxDQUFFLEdBQUUsRUFBRUEsRUFBRXlFLGNBQWMsU0FBU3pFLEVBQUVsRSxFQUFFN0ssR0FBRyxZQUFPLElBQVMrTyxJQUFJQSxHQUFFLFFBQUksSUFBU2xFLElBQUlBLEdBQUUsUUFBSSxJQUFTN0ssSUFBSUEsR0FBRSxHQUFJc1EsR0FBRSxTQUFVclIsRUFBRTBRLEVBQUVFLEVBQUVFLEVBQUVLLEdBQUcsR0FBR3JGLE1BQU1nRixNQUFNOVEsRUFBRThTLEtBQUtDLEVBQUVLLFNBQVMsTUFBTSxJQUFJekMsTUFBTSwrQkFBK0IsT0FBTy9FLEdBQUc1TCxFQUFFOFMsS0FBS0MsRUFBRU8sZ0JBQWdCdFQsRUFBRThTLEtBQUtDLEVBQUVRLFFBQVF2VCxFQUFFc1IsRUFBRXRSLEVBQUV3UyxTQUFTLEVBQUU1QixHQUFHN1AsR0FBR2YsRUFBRThTLEtBQUtDLEVBQUVTLGVBQWV4VCxFQUFFOFMsS0FBS0MsRUFBRVEsUUFBUXZULEVBQUVvUixFQUFFcFIsRUFBRXdTLFNBQVMsRUFBRTlCLEdBQUdaLEdBQUc5UCxFQUFFOFMsS0FBS0MsRUFBRU0sYUFBYXJULEVBQUU4UyxLQUFLQyxFQUFFUSxRQUFRdlQsRUFBRW9SLEVBQUVwUixFQUFFd1MsU0FBUzFCLEVBQUVKLEVBQUVJLEVBQUU5USxFQUFFc1IsRUFBRXRSLEVBQUV3UyxTQUFTckIsRUFBRVAsRUFBRU8sR0FBR25SLEVBQUU4UyxLQUFLQyxFQUFFeUIsTUFBTSxJQUFJeFUsRUFBRWlSLElBQUksSUFBSWpSLEVBQUVrUixNQUFNbFIsRUFBRThTLEtBQUtDLEVBQUVRLGVBQWV2VCxFQUFFaVIsVUFBVWpSLEVBQUVrUixVQUFVbFIsRUFBRXlSLFlBQVl6UixFQUFFK1EsZ0JBQWdCL1EsRUFBRWdSLFdBQVdoUixDQUFFLEdBQUUsRUFBRThQLEVBQUUyRSxhQUFhMVQsRUFBRStPLEVBQUU0RSxRQUFROUQsRUFBRWQsRUFBRTZFLEtBQUt0RCxFQUFFdkIsRUFBRThFLFNBQVMsU0FBUzlFLFFBQUcsSUFBU0EsSUFBSUEsRUFBRSxHQUFHWSxFQUFFWixHQUFHLElBQUlsRSxFQUFFaUgsSUFBSTlSLEVBQUU4UixJQUFJN1MsRUFBRTZTLElBQUlqQyxFQUFFaUMsSUFBSSxPQUFPeEIsR0FBRSxTQUFVWCxFQUFFSSxFQUFFSyxFQUFFRSxFQUFFRyxHQUFHLElBQUlFLEVBQUVqUixLQUFLOFEsSUFBSUQsR0FBRSxFQUFHSyxFQUFFLEVBQUVHLEVBQUUsRUFBRSxHQUFHcEIsRUFBRW9DLEtBQUtDLEVBQUVDLGtCQUFrQnJCLEVBQUU3RixNQUFNRixHQUFHLEVBQUVrRixFQUFFbEYsRUFBRWtHLEVBQUVoRyxNQUFNL0ssR0FBRyxFQUFFb1EsRUFBRXBRLEdBQUcyUCxFQUFFb0MsTUFBTUMsRUFBRUUsU0FBU0YsRUFBRUMsa0JBQWtCcEgsRUFBRThFLEVBQUU4QixTQUFTMUIsRUFBRUosRUFBRWlDLEdBQUdqQyxFQUFFaUMsR0FBRzVSLEVBQUUyUCxFQUFFOEIsU0FBU3JCLEVBQUVULEVBQUVrQyxHQUFHbEMsRUFBRWtDLEtBQUtoSCxFQUFFaUgsSUFBSTlSLEVBQUU4UixLQUFLbkMsRUFBRW9DLEtBQUtDLEVBQUVHLGdCQUFnQmxULEVBQUU4TCxNQUFNOUwsR0FBRzhRLEVBQUUsRUFBRUEsRUFBRTlRLEVBQUU0USxFQUFFOUUsTUFBTThFLEdBQUdPLEVBQUUsRUFBRUEsRUFBRVAsR0FBR0YsRUFBRW9DLEtBQUtDLEVBQUVJLFNBQVNuVCxFQUFFMFEsRUFBRThCLFNBQVMxQixFQUFFSixFQUFFK0IsR0FBRy9CLEVBQUUrQixHQUFHN0IsRUFBRUYsRUFBRThCLFNBQVNyQixFQUFFVCxFQUFFZ0MsR0FBR2hDLEVBQUVrQyxLQUFLNVMsRUFBRTZTLElBQUlqQyxFQUFFaUMsS0FBS25DLEVBQUVvQyxLQUFLQyxFQUFFOEIsZUFBZW5FLEVBQUVvQyxLQUFLQyxFQUFFeUIsTUFBTSxJQUFJOUQsRUFBRU8sSUFBSSxJQUFJUCxFQUFFUSxLQUFLUixFQUFFSyxXQUFXTCxFQUFFb0MsS0FBS0MsRUFBRUUsVUFBVXZDLEVBQUVvQyxLQUFLQyxFQUFFQyxpQkFBaUJ0QyxFQUFFb0MsS0FBS0MsRUFBRUksU0FBU3pDLEVBQUVvQyxLQUFLQyxFQUFFRyxlQUFlLENBQUMsSUFBSW5CLE9BQUUsSUFBU3JCLEVBQUVVLEVBQUUsRUFBRVYsRUFBRThCLFNBQVM5QixFQUFFVSxFQUFFVixFQUFFVSxFQUFFTixFQUFFa0IsT0FBRSxJQUFTdEIsRUFBRVksRUFBRSxFQUFFWixFQUFFOEIsU0FBUzlCLEVBQUVZLEVBQUVaLEVBQUVZLEVBQUVILEVBQUVRLEVBQUU3RixNQUFNOUwsUUFBRyxJQUFTMFEsRUFBRStCLEdBQUdkLEVBQUVqQixFQUFFOEIsU0FBUzlCLEVBQUVVLEVBQUVWLEVBQUUrQixHQUFHM0IsRUFBRTlRLEVBQUU4USxFQUFFZ0IsRUFBRWhHLE1BQU04RSxRQUFHLElBQVNGLEVBQUVnQyxHQUFHWixFQUFFcEIsRUFBRThCLFNBQVM5QixFQUFFWSxFQUFFWixFQUFFZ0MsR0FBR3ZCLEVBQUVQLEVBQUVPLEVBQUUsSUFBSWMsT0FBRSxJQUFTdkIsRUFBRWlDLEdBQUcsRUFBRWpDLEVBQUU4QixTQUFTOUIsRUFBRVUsRUFBRVYsRUFBRWlDLEdBQUc3QixFQUFFb0IsT0FBRSxJQUFTeEIsRUFBRWtDLEdBQUcsRUFBRWxDLEVBQUU4QixTQUFTOUIsRUFBRVksRUFBRVosRUFBRWtDLEdBQUd6QixFQUFFTyxFQUFFSyxJQUFJakMsR0FBRzRCLEVBQUVNLElBQUlsQyxHQUFHNEIsRUFBRUMsSUFBSTdCLEdBQUc0QixFQUFFSSxJQUFJaEMsR0FBRzRCLEVBQUVPLElBQUluQyxHQUFHNEIsRUFBRVEsSUFBSXBDLElBQUl3QixHQUFFLEVBQUcsQ0FBQyxPQUFPWixFQUFFb0MsS0FBS0MsRUFBRU0sWUFBWTNCLEVBQUVaLEVBQUVPLElBQUl2QixHQUFHNEIsRUFBRVAsRUFBRUssSUFBSTFCLElBQUl3QixHQUFFLEdBQUlBLEVBQUUsR0FBR1osQ0FBRSxHQUFFLEVBQUVaLEVBQUVnRixPQUFPL0MsRUFBRWpDLEVBQUVpRixPQUFPLFNBQVNqRixFQUFFbEUsRUFBRTdLLFFBQUcsSUFBUzZLLElBQUlBLEVBQUUsUUFBRyxJQUFTN0ssSUFBSUEsRUFBRSxHQUFHMlAsRUFBRVosRUFBRWxFLEVBQUU3SyxHQUFHLElBQUlmLEVBQUVTLEtBQUtnUSxJQUFJWCxHQUFHYyxFQUFFblEsS0FBSytQLElBQUlWLEdBQUcsT0FBT2lDLEVBQUVuQixFQUFFNVEsR0FBR0EsRUFBRTRRLEVBQUVoRixFQUFFQSxFQUFFZ0YsRUFBRTdQLEVBQUVmLEVBQUVlLEVBQUU2SyxFQUFFNUwsRUFBRWUsRUFBRTZQLEVBQUUsRUFBRWQsRUFBRWtGLFVBQVUsU0FBU2xGLEVBQUVsRSxHQUFHLFlBQU8sSUFBU0EsSUFBSUEsRUFBRSxHQUFHOEUsRUFBRVosRUFBRWxFLEdBQUdtRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUVqQyxFQUFFbEUsRUFBRSxFQUFFa0UsRUFBRW1GLE1BQU0sU0FBU25GLEVBQUVsRSxHQUFHLFlBQU8sSUFBU0EsSUFBSUEsRUFBRWtFLEdBQUdZLEVBQUVaLEVBQUVsRSxHQUFHbUcsRUFBRWpDLEVBQUUsRUFBRSxFQUFFbEUsRUFBRSxFQUFFLEVBQUUsRUFBRWtFLEVBQUVvRixPQUFPLFNBQVNwRixHQUFHLE9BQU9ZLEVBQUVaLEdBQUdpQyxFQUFFLEVBQUUsRUFBRXRSLEtBQUswVSxLQUFLckYsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFQSxFQUFFc0YsT0FBTyxTQUFTdEYsR0FBRyxPQUFPWSxFQUFFWixHQUFHaUMsRUFBRSxFQUFFdFIsS0FBSzBVLEtBQUtyRixHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRUEsRUFBRXVGLGdCQUFnQixTQUFTdkYsR0FBRyxZQUFPLElBQVNBLElBQUlBLEVBQUUsR0FBR1ksRUFBRVosR0FBR2lDLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRWpDLEVBQUUsRUFBRSxFQUFFQSxFQUFFd0YsZ0JBQWdCLFNBQVN4RixHQUFHLFlBQU8sSUFBU0EsSUFBSUEsRUFBRSxHQUFHWSxFQUFFWixHQUFHaUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUVqQyxFQUFFLEVBQUVBLEVBQUV5RixPQUFPLFdBQVcsT0FBT2xFLEdBQUUsU0FBVXZCLEVBQUVsRSxFQUFFN0ssR0FBRyxPQUFPZ1MsRUFBRXlCLE1BQU0xRSxFQUFFZ0QsS0FBSyxTQUFTaEQsRUFBRWxFLEVBQUU3SyxHQUFHLElBQUkyUCxFQUFFRSxFQUFFTyxFQUFFRSxFQUFFdkIsRUFBRXFDLElBQUlyQixFQUFFaEIsRUFBRWxFLEVBQUU3SyxHQUFHLElBQUksSUFBSXVRLEVBQUU3USxLQUFLK1UsSUFBSTFGLEVBQUV1QyxLQUFLdkMsRUFBRXlDLE1BQU1aLEVBQUVsUixLQUFLQyxJQUFJb1AsRUFBRXVDLEtBQUt2QyxFQUFFeUMsTUFBTWpCLEVBQUVRLEVBQUVyUixLQUFLZ1YsS0FBSzlELEVBQUUsSUFBSUksRUFBRSxJQUFJMUYsTUFBTXlGLEdBQUdFLEVBQUVwRyxFQUFFcUcsRUFBRWxSLEVBQUVtUixFQUFFLEVBQUVBLEVBQUVKLEVBQUVJLElBQUksQ0FBQyxJQUFJdUIsRUFBRS9CLEVBQUU1QixFQUFFdUMsS0FBS3ZDLEVBQUV5QyxLQUFLTCxFQUFFSixHQUFHNEIsRUFBRWhDLEVBQUU1QixFQUFFdUMsS0FBS3ZDLEVBQUV5QyxNQUFNTCxFQUFFLEdBQUdKLEdBQUdWLEVBQUVzQyxFQUFFRCxFQUFFRSxFQUFFLEVBQUUsRUFBRWxULEtBQUs4SixJQUFJNkcsRUFBRUksRUFBRSxHQUFHb0MsRUFBRSxDQUFDblQsS0FBSytQLElBQUlpRCxFQUFFakMsR0FBR21DLEVBQUVsVCxLQUFLZ1EsSUFBSWdELEVBQUVqQyxHQUFHL1EsS0FBS2dRLElBQUlnRCxFQUFFakMsR0FBR21DLEVBQUVsVCxLQUFLK1AsSUFBSWlELEVBQUVqQyxJQUFJcUMsRUFBRUQsRUFBRSxHQUFHRSxFQUFFRixFQUFFLEdBQUdHLEVBQUUsQ0FBQ3RULEtBQUsrUCxJQUFJa0QsRUFBRWxDLEdBQUcvUSxLQUFLZ1EsSUFBSWlELEVBQUVsQyxJQUFJd0MsRUFBRUQsRUFBRSxHQUFHcFUsRUFBRW9VLEVBQUUsR0FBR0UsRUFBRSxDQUFDRCxFQUFFTCxFQUFFbFQsS0FBS2dRLElBQUlpRCxFQUFFbEMsR0FBRzdSLEVBQUVnVSxFQUFFbFQsS0FBSytQLElBQUlrRCxFQUFFbEMsSUFBSTBDLEVBQUVELEVBQUUsR0FBR0UsRUFBRUYsRUFBRSxHQUFHbEMsRUFBRUcsR0FBRyxDQUFDTSxTQUFTMUMsRUFBRTBDLFNBQVNNLEtBQUtDLEVBQUVFLFVBQVUsSUFBSXlDLEVBQUUsU0FBUzlKLEVBQUU3SyxHQUFHLElBQUkyUCxFQUFFMVEsRUFBRSxDQUFDNEwsRUFBRWtFLEVBQUVtQixHQUFHbFEsRUFBRStPLEVBQUVvQixJQUFJcEIsRUFBRTJCLE1BQU1iLEVBQUVGLEVBQUUsR0FBR0ksRUFBRUosRUFBRSxHQUFHLE1BQU0sQ0FBQ1osRUFBRXFDLEdBQUd2QixFQUFFZCxFQUFFc0MsR0FBR3RCLEVBQUUsRUFBRUosRUFBRWdGLEVBQUU3QixFQUFFQyxHQUFHL0IsRUFBRUcsR0FBR08sR0FBRy9CLEVBQUUsR0FBR3FCLEVBQUVHLEdBQUdRLEdBQUdoQyxFQUFFLEdBQUdFLEVBQUU4RSxFQUFFeEIsRUFBRUMsR0FBR3BDLEVBQUVHLEdBQUdTLEdBQUcvQixFQUFFLEdBQUdtQixFQUFFRyxHQUFHVSxHQUFHaEMsRUFBRSxHQUFHTyxFQUFFdUUsRUFBRTFCLEVBQUVyVSxHQUFHb1MsRUFBRUcsR0FBR2QsRUFBRUQsRUFBRSxHQUFHWSxFQUFFRyxHQUFHWixFQUFFSCxFQUFFLEdBQUdyQixFQUFFMEMsV0FBV1QsRUFBRUcsR0FBR08sSUFBSVQsRUFBRUQsRUFBRUcsR0FBR1EsSUFBSVQsRUFBRUYsRUFBRUcsR0FBR1MsSUFBSVgsRUFBRUQsRUFBRUcsR0FBR1UsSUFBSVgsRUFBRUYsRUFBRUcsR0FBR2QsR0FBR1ksRUFBRUQsRUFBRUcsR0FBR1osR0FBR1csR0FBR0QsR0FBR1gsRUFBRSxDQUFDVSxFQUFFRyxHQUFHZCxFQUFFVyxFQUFFRyxHQUFHWixJQUFJLEdBQUdXLEVBQUVaLEVBQUUsRUFBRSxDQUFDLE9BQU9VLENBQUMsQ0FBcHdCLENBQXN3QmpDLEVBQUVBLEVBQUUwQyxTQUFTLEVBQUU1RyxFQUFFa0UsRUFBRTBDLFNBQVMsRUFBRXpSLEdBQUcrTyxDQUFFLEdBQUUsRUFBRUEsRUFBRTZGLGNBQWMsV0FBVyxPQUFPdEUsR0FBRSxTQUFVdkIsRUFBRWxFLEVBQUU3SyxHQUFHLE9BQU8rTyxFQUFFMEMsV0FBVzVHLEVBQUUsRUFBRTdLLEVBQUUsR0FBR2dTLEVBQUV5QixNQUFNMUUsRUFBRWdELE1BQU1oQyxFQUFFaEIsRUFBRWxFLEVBQUU3SyxHQUFHK08sQ0FBRSxHQUFFLEVBQUVBLEVBQUU4RixNQUE5dkgsV0FBYSxPQUFPLFNBQVM5RixHQUFHLElBQUlsRSxFQUFFLENBQUMsRUFBRSxJQUFJLElBQUk3SyxLQUFLK08sRUFBRWxFLEVBQUU3SyxHQUFHK08sRUFBRS9PLEdBQUcsT0FBTzZLLENBQUMsQ0FBQyxFQUEyckhrRSxFQUFFK0YsaUJBQWlCLFdBQVcsSUFBOEQ3VixFQUFFNEwsSUFBSThFLEVBQUVFLElBQUlZLEVBQUV6USxJQUFJMlEsRUFBRUwsR0FBRSxTQUFVekYsRUFBRTdLLEVBQUU2UCxHQUFHLElBQUlTLEVBQUVHLEVBQUVkLEVBQUUxUSxFQUF6RyxTQUFTOFAsR0FBRyxJQUFJbEUsRUFBRSxDQUFDLEVBQUUsSUFBSSxJQUFJN0ssS0FBSytPLEVBQUVsRSxFQUFFN0ssR0FBRytPLEVBQUUvTyxHQUFHLE9BQU82SyxDQUFDLENBQXFEa0UsQ0FBRWxFLE1BQU0sU0FBU21HLEVBQUVqQyxHQUFHQSxFQUFFNEIsRUFBRW9FLE9BQU9wRSxFQUFFb0UsS0FBS2hHLEdBQUdBLEVBQUU0QixFQUFFcUUsT0FBT3JFLEVBQUVxRSxLQUFLakcsRUFBRSxDQUFDLFNBQVNrQyxFQUFFbEMsR0FBR0EsRUFBRTRCLEVBQUVzRSxPQUFPdEUsRUFBRXNFLEtBQUtsRyxHQUFHQSxFQUFFNEIsRUFBRXVFLE9BQU92RSxFQUFFdUUsS0FBS25HLEVBQUUsQ0FBQyxHQUFHdUIsRUFBRXlCLEtBQUtDLEVBQUVtRCxtQkFBbUJuRSxFQUFFaFIsR0FBR2lSLEVBQUVwQixJQUFJUyxFQUFFeUIsS0FBS0MsRUFBRU8sZUFBZXZCLEVBQUVWLEVBQUVELEdBQUdDLEVBQUV5QixLQUFLQyxFQUFFUyxjQUFjeEIsRUFBRVgsRUFBRUMsR0FBR0QsRUFBRXlCLEtBQUtDLEVBQUVRLFVBQVV4QixFQUFFVixFQUFFRCxHQUFHWSxFQUFFWCxFQUFFQyxJQUFJRCxFQUFFeUIsS0FBS0MsRUFBRUUsU0FBUyxDQUFDbEIsRUFBRVYsRUFBRUQsR0FBR1ksRUFBRVgsRUFBRUMsR0FBRyxJQUFJLElBQUlXLEVBQUUsRUFBRUMsRUFBRVAsRUFBRTVRLEVBQUVzUSxFQUFFb0IsR0FBR3BCLEVBQUVzQixHQUFHdEIsRUFBRUQsR0FBR2EsRUFBRUMsRUFBRWpTLE9BQU9nUyxJQUFLLEdBQUdrRSxFQUFFakUsRUFBRUQsS0FBSyxFQUFFa0UsR0FBR3BFLEVBQUVELEVBQUUvUSxFQUFFc1EsRUFBRW9CLEdBQUdwQixFQUFFc0IsR0FBR3RCLEVBQUVELEVBQUUrRSxJQUFJLElBQUksSUFBSTFDLEVBQUUsRUFBRUMsRUFBRS9CLEVBQUVmLEVBQUVTLEVBQUVxQixHQUFHckIsRUFBRXVCLEdBQUd2QixFQUFFQyxHQUFHbUMsRUFBRUMsRUFBRXpULE9BQU93VCxJQUFLLEdBQUcwQyxFQUFFekMsRUFBRUQsS0FBSyxFQUFFMEMsR0FBR25FLEVBQUVGLEVBQUVsQixFQUFFUyxFQUFFcUIsR0FBR3JCLEVBQUV1QixHQUFHdkIsRUFBRUMsRUFBRTZFLEdBQUksQ0FBQyxHQUFHOUUsRUFBRXlCLEtBQUtDLEVBQUV5QixJQUFJLENBQUN6QyxFQUFFVixFQUFFRCxHQUFHWSxFQUFFWCxFQUFFQyxHQUFHUixFQUFFTyxFQUFFdFEsRUFBRTZQLEdBQUcsSUFBSSxJQUFJUSxFQUFFQyxFQUFFSSxLQUFLLElBQUloUixLQUFLb1EsR0FBRzhDLEVBQUVsVCxLQUFLK1AsSUFBSVksR0FBR0MsRUFBRUosR0FBRzJDLEVBQUVuVCxLQUFLZ1EsSUFBSVcsR0FBR0MsRUFBRUosR0FBRzRDLEdBQUdwVCxLQUFLZ1EsSUFBSVcsR0FBR0MsRUFBRUgsR0FBRzRDLEVBQUVyVCxLQUFLK1AsSUFBSVksR0FBR0MsRUFBRUgsR0FBRzZDLEVBQUUxQyxFQUFFZ0IsS0FBS2hCLEVBQUVrQixLQUFLLENBQUNsQixFQUFFZ0IsS0FBS2hCLEVBQUVrQixPQUFPLElBQUlsQixFQUFFa0IsS0FBSyxDQUFDbEIsRUFBRWtCLEtBQUssSUFBSWxCLEVBQUVnQixLQUFLLEtBQUssQ0FBQ2hCLEVBQUVrQixLQUFLbEIsRUFBRWdCLE1BQU0yQixFQUFFRCxFQUFFLEdBQUdwVSxFQUFFb1UsRUFBRSxHQUFHRSxFQUFFLFNBQVNuRSxHQUFHLElBQUlsRSxFQUFFa0UsRUFBRSxHQUFHL08sRUFBRStPLEVBQUUsR0FBRzlQLEVBQUUsSUFBSVMsS0FBSzZSLE1BQU12UixFQUFFNkssR0FBR25MLEtBQUtvUSxHQUFHLE9BQU83USxFQUFFZ1UsRUFBRWhVLEVBQUUsSUFBSUEsQ0FBQyxFQUFFa1UsRUFBRSxFQUFFQyxFQUFFaEQsRUFBRTBDLEdBQUdGLEVBQUUsR0FBR3lDLElBQUluQyxHQUFHQyxFQUFFQyxFQUFFbFUsT0FBT2lVLEtBQU1pQyxFQUFFaEMsRUFBRUQsSUFBSUYsR0FBR21DLEVBQUV4VyxHQUFHb1MsRUFBRVQsRUFBRUQsRUFBRWMsR0FBR3dCLEVBQUVFLEVBQUVzQyxJQUFJLElBQUksSUFBSVQsRUFBRSxFQUFFVyxFQUFFbEYsRUFBRTJDLEdBQUdGLEVBQUUsR0FBR3dDLElBQUluQyxHQUFHeUIsRUFBRVcsRUFBRXBXLE9BQU95VixJQUFJLENBQUMsSUFBSVMsR0FBR0EsRUFBRUUsRUFBRVgsSUFBSTFCLEdBQUdtQyxFQUFFeFcsR0FBR3FTLEVBQUVWLEVBQUVELEVBQUVlLEdBQUd3QixFQUFFRSxFQUFFcUMsR0FBRyxDQUFDLENBQUMsT0FBT3ZLLENBQUUsSUFBRyxPQUFPOEYsRUFBRXFFLEtBQUssSUFBSXJFLEVBQUVvRSxNQUFLLElBQUtwRSxFQUFFdUUsS0FBSyxJQUFJdkUsRUFBRXNFLE1BQUssSUFBS3RFLENBQUMsQ0FBQyxDQUE5OU8sQ0FBZytPTCxJQUFJQSxFQUFFLENBQUMsSUFBSSxJQUFJVSxFQUFFQyxFQUFFLFdBQVcsU0FBU2xDLElBQUksQ0FBQyxPQUFPQSxFQUFFSSxVQUFVbFAsTUFBTSxTQUFTOE8sR0FBRyxPQUFPdFEsS0FBSzhXLFVBQVVqRixFQUFFK0MsTUFBTXRFLEdBQUcsRUFBRUEsRUFBRUksVUFBVXFHLE1BQU0sV0FBVyxPQUFPL1csS0FBSzhXLFVBQVVqRixFQUFFZ0QsU0FBUyxFQUFFdkUsRUFBRUksVUFBVXNHLE1BQU0sV0FBVyxPQUFPaFgsS0FBSzhXLFVBQVVqRixFQUFFaUQsU0FBUyxFQUFFeEUsRUFBRUksVUFBVXVHLGFBQWEsU0FBUzNHLEVBQUVsRSxFQUFFN0ssR0FBRyxPQUFPdkIsS0FBSzhXLFVBQVVqRixFQUFFa0QsY0FBY3pFLEVBQUVsRSxFQUFFN0ssR0FBRyxFQUFFK08sRUFBRUksVUFBVXdHLFlBQVksV0FBVyxPQUFPbFgsS0FBSzhXLFVBQVVqRixFQUFFb0QsZUFBZSxFQUFFM0UsRUFBRUksVUFBVXlHLE1BQU0sV0FBVyxPQUFPblgsS0FBSzhXLFVBQVVqRixFQUFFcUQsVUFBVSxFQUFFNUUsRUFBRUksVUFBVTBHLEtBQUssV0FBVyxPQUFPcFgsS0FBSzhXLFVBQVVqRixFQUFFa0UsU0FBUyxFQUFFekYsRUFBRUksVUFBVTJHLFNBQVMsU0FBUy9HLEdBQUcsT0FBT3RRLEtBQUs4VyxVQUFVakYsRUFBRXVELFNBQVM5RSxHQUFHLEVBQUVBLEVBQUVJLFVBQVU0RyxVQUFVLFNBQVNoSCxFQUFFbEUsR0FBRyxPQUFPcE0sS0FBSzhXLFVBQVVqRixFQUFFMkQsVUFBVWxGLEVBQUVsRSxHQUFHLEVBQUVrRSxFQUFFSSxVQUFVNkcsTUFBTSxTQUFTakgsRUFBRWxFLEdBQUcsT0FBT3BNLEtBQUs4VyxVQUFVakYsRUFBRTRELE1BQU1uRixFQUFFbEUsR0FBRyxFQUFFa0UsRUFBRUksVUFBVThHLE9BQU8sU0FBU2xILEVBQUVsRSxFQUFFN0ssR0FBRyxPQUFPdkIsS0FBSzhXLFVBQVVqRixFQUFFMEQsT0FBT2pGLEVBQUVsRSxFQUFFN0ssR0FBRyxFQUFFK08sRUFBRUksVUFBVStHLE9BQU8sU0FBU25ILEVBQUVsRSxFQUFFN0ssRUFBRWYsRUFBRTBRLEVBQUVFLEdBQUcsT0FBT3BSLEtBQUs4VyxVQUFVakYsRUFBRXlELE9BQU9oRixFQUFFbEUsRUFBRTdLLEVBQUVmLEVBQUUwUSxFQUFFRSxHQUFHLEVBQUVkLEVBQUVJLFVBQVVnSCxNQUFNLFNBQVNwSCxHQUFHLE9BQU90USxLQUFLOFcsVUFBVWpGLEVBQUU2RCxPQUFPcEYsR0FBRyxFQUFFQSxFQUFFSSxVQUFVaUgsTUFBTSxTQUFTckgsR0FBRyxPQUFPdFEsS0FBSzhXLFVBQVVqRixFQUFFK0QsT0FBT3RGLEdBQUcsRUFBRUEsRUFBRUksVUFBVWtILFVBQVUsU0FBU3RILEdBQUcsT0FBT3RRLEtBQUs4VyxVQUFVakYsRUFBRWdFLGdCQUFnQnZGLEdBQUcsRUFBRUEsRUFBRUksVUFBVW1ILFVBQVUsU0FBU3ZILEdBQUcsT0FBT3RRLEtBQUs4VyxVQUFVakYsRUFBRWlFLGdCQUFnQnhGLEdBQUcsRUFBRUEsRUFBRUksVUFBVW9ILGFBQWEsV0FBVyxPQUFPOVgsS0FBSzhXLFVBQVVqRixFQUFFc0UsZ0JBQWdCLEVBQUU3RixDQUFDLENBQWp2QyxHQUFxdkNtQyxFQUFFLFNBQVNuQyxHQUFHLE1BQU0sTUFBTUEsR0FBRyxPQUFPQSxHQUFHLE9BQU9BLEdBQUcsT0FBT0EsQ0FBQyxFQUFFb0MsRUFBRSxTQUFTcEMsR0FBRyxNQUFNLElBQUl5SCxXQUFXLElBQUl6SCxFQUFFeUgsV0FBVyxJQUFJekgsRUFBRXlILFdBQVcsSUFBSSxJQUFJQSxXQUFXLEVBQUUsRUFBRTlELEVBQUUsU0FBUzNELEdBQUcsU0FBUy9PLElBQUksSUFBSTZLLEVBQUVrRSxFQUFFdlEsS0FBS0MsT0FBT0EsS0FBSyxPQUFPb00sRUFBRTRMLFVBQVUsR0FBRzVMLEVBQUU2TCxnQkFBZ0IsRUFBRTdMLEVBQUU4TCxvQkFBbUIsRUFBRzlMLEVBQUUrTCx3QkFBdUIsRUFBRy9MLEVBQUVnTSxpQkFBZ0IsRUFBR2hNLEVBQUVpTSx1QkFBc0IsRUFBR2pNLEVBQUVrTSxxQkFBb0IsRUFBR2xNLEVBQUVtTSxRQUFRLEdBQUduTSxDQUFDLENBQUMsT0FBT0EsRUFBRTdLLEVBQUUrTyxHQUFHL08sRUFBRW1QLFVBQVU4SCxPQUFPLFNBQVNsSSxHQUFHLFFBQUcsSUFBU0EsSUFBSUEsRUFBRSxJQUFJdFEsS0FBS3lZLE1BQU0sSUFBSW5JLEdBQUcsSUFBSXRRLEtBQUt1WSxRQUFROVgsU0FBU1QsS0FBS21ZLHVCQUF1QixNQUFNLElBQUlPLFlBQVkseUNBQXlDLE9BQU9wSSxDQUFDLEVBQUUvTyxFQUFFbVAsVUFBVStILE1BQU0sU0FBU25JLEVBQUVsRSxHQUFHLElBQUk3SyxFQUFFdkIsVUFBSyxJQUFTb00sSUFBSUEsRUFBRSxJQUFJLElBQUksSUFBSTVMLEVBQUUsU0FBUzhQLEdBQUdsRSxFQUFFM0ssS0FBSzZPLEdBQUcvTyxFQUFFZ1gsUUFBUTlYLE9BQU8sRUFBRWMsRUFBRTRXLHdCQUF1QixDQUFFLEVBQUVqSCxFQUFFLEVBQUVBLEVBQUVaLEVBQUU3UCxPQUFPeVEsSUFBSSxDQUFDLElBQUlFLEVBQUVkLEVBQUVZLEdBQUdJLElBQUl0UixLQUFLaVksaUJBQWlCMUUsRUFBRXlCLEtBQUssSUFBSWhWLEtBQUt1WSxRQUFROVgsUUFBUSxJQUFJVCxLQUFLdVksUUFBUTlYLFFBQVEsSUFBSVQsS0FBS2dZLFVBQVV2WCxRQUFRLE1BQU1ULEtBQUtnWSxXQUFXLE1BQU1oWSxLQUFLZ1ksV0FBV3JHLEVBQUVlLEVBQUV0QixLQUFLLE1BQU1wUixLQUFLZ1ksV0FBVyxNQUFNNUcsR0FBR0UsR0FBRyxJQUFJb0IsRUFBRXRCLElBQUlPLEVBQUUsR0FBRyxNQUFNUCxHQUFHLE1BQU1BLEVBQUUsR0FBRyxNQUFNQSxHQUFHLE1BQU1BLElBQUlwUixLQUFLb1ksaUJBQWlCcFksS0FBS3FZLHNCQUFzQixHQUFHLE1BQU1qSCxHQUFHcFIsS0FBS29ZLGlCQUFpQnBZLEtBQUtzWSxxQkFBcUJoSCxFQUFFLENBQUMsR0FBR3RSLEtBQUtnWSxZQUFZLElBQUloWSxLQUFLaVksZUFBZSxDQUFDLElBQUlwRyxFQUFFOEcsT0FBTzNZLEtBQUtnWSxXQUFXLEdBQUcxTCxNQUFNdUYsR0FBRyxNQUFNLElBQUk2RyxZQUFZLDRCQUE0QnhILEdBQUcsR0FBR2xSLEtBQUtpWSxpQkFBaUIxRSxFQUFFeUIsSUFBSSxHQUFHLElBQUloVixLQUFLdVksUUFBUTlYLFFBQVEsSUFBSVQsS0FBS3VZLFFBQVE5WCxRQUFRLEdBQUcsRUFBRW9SLEVBQUUsTUFBTSxJQUFJNkcsWUFBWSxrQ0FBa0M3RyxFQUFFLGVBQWVYLEVBQUUsVUFBVSxJQUFJLElBQUlsUixLQUFLdVksUUFBUTlYLFFBQVEsSUFBSVQsS0FBS3VZLFFBQVE5WCxTQUFTLE1BQU1ULEtBQUtnWSxXQUFXLE1BQU1oWSxLQUFLZ1ksVUFBVSxNQUFNLElBQUlVLFlBQVkseUJBQXlCMVksS0FBS2dZLFVBQVUsZUFBZTlHLEVBQUUsS0FBS2xSLEtBQUt1WSxRQUFROVcsS0FBS29RLEdBQUc3UixLQUFLdVksUUFBUTlYLFNBQVN5VCxFQUFFbFUsS0FBS2lZLGtCQUFrQjFFLEVBQUVPLGdCQUFnQjlULEtBQUtpWSxlQUFlelgsRUFBRSxDQUFDOFMsS0FBS0MsRUFBRU8sY0FBY2QsU0FBU2hULEtBQUtrWSxtQkFBbUJ0RyxFQUFFQyxJQUFJMEIsRUFBRVMsZUFBZWhVLEtBQUtpWSxlQUFlelgsRUFBRSxDQUFDOFMsS0FBS0MsRUFBRVMsYUFBYWhCLFNBQVNoVCxLQUFLa1ksbUJBQW1CcEcsRUFBRUQsSUFBSTdSLEtBQUtpWSxpQkFBaUIxRSxFQUFFSyxTQUFTNVQsS0FBS2lZLGlCQUFpQjFFLEVBQUVRLFNBQVMvVCxLQUFLaVksaUJBQWlCMUUsRUFBRUcsZ0JBQWdCbFQsRUFBRSxDQUFDOFMsS0FBS3RULEtBQUtpWSxlQUFlakYsU0FBU2hULEtBQUtrWSxtQkFBbUJ0RyxFQUFFNVIsS0FBS3VZLFFBQVEsR0FBR3pHLEVBQUU5UixLQUFLdVksUUFBUSxLQUFLaEYsRUFBRUssVUFBVTVULEtBQUtpWSxpQkFBaUJqWSxLQUFLaVksZUFBZTFFLEVBQUVRLFVBQVUvVCxLQUFLaVksaUJBQWlCMUUsRUFBRUUsU0FBU2pULEVBQUUsQ0FBQzhTLEtBQUtDLEVBQUVFLFNBQVNULFNBQVNoVCxLQUFLa1ksbUJBQW1CakYsR0FBR2pULEtBQUt1WSxRQUFRLEdBQUdyRixHQUFHbFQsS0FBS3VZLFFBQVEsR0FBR3BGLEdBQUduVCxLQUFLdVksUUFBUSxHQUFHbkYsR0FBR3BULEtBQUt1WSxRQUFRLEdBQUczRyxFQUFFNVIsS0FBS3VZLFFBQVEsR0FBR3pHLEVBQUU5UixLQUFLdVksUUFBUSxLQUFLdlksS0FBS2lZLGlCQUFpQjFFLEVBQUVDLGdCQUFnQmhULEVBQUUsQ0FBQzhTLEtBQUtDLEVBQUVDLGdCQUFnQlIsU0FBU2hULEtBQUtrWSxtQkFBbUIvRSxHQUFHblQsS0FBS3VZLFFBQVEsR0FBR25GLEdBQUdwVCxLQUFLdVksUUFBUSxHQUFHM0csRUFBRTVSLEtBQUt1WSxRQUFRLEdBQUd6RyxFQUFFOVIsS0FBS3VZLFFBQVEsS0FBS3ZZLEtBQUtpWSxpQkFBaUIxRSxFQUFFSSxRQUFRblQsRUFBRSxDQUFDOFMsS0FBS0MsRUFBRUksUUFBUVgsU0FBU2hULEtBQUtrWSxtQkFBbUJqRixHQUFHalQsS0FBS3VZLFFBQVEsR0FBR3JGLEdBQUdsVCxLQUFLdVksUUFBUSxHQUFHM0csRUFBRTVSLEtBQUt1WSxRQUFRLEdBQUd6RyxFQUFFOVIsS0FBS3VZLFFBQVEsS0FBS3ZZLEtBQUtpWSxpQkFBaUIxRSxFQUFFeUIsS0FBS3hVLEVBQUUsQ0FBQzhTLEtBQUtDLEVBQUV5QixJQUFJaEMsU0FBU2hULEtBQUtrWSxtQkFBbUJ6RyxHQUFHelIsS0FBS3VZLFFBQVEsR0FBRzdHLEdBQUcxUixLQUFLdVksUUFBUSxHQUFHdEcsS0FBS2pTLEtBQUt1WSxRQUFRLEdBQUdoSCxTQUFTdlIsS0FBS3VZLFFBQVEsR0FBRy9HLFVBQVV4UixLQUFLdVksUUFBUSxHQUFHM0csRUFBRTVSLEtBQUt1WSxRQUFRLEdBQUd6RyxFQUFFOVIsS0FBS3VZLFFBQVEsTUFBTXZZLEtBQUtnWSxVQUFVLEdBQUdoWSxLQUFLcVksdUJBQXNCLEVBQUdyWSxLQUFLb1ksaUJBQWdCLEVBQUdwWSxLQUFLc1kscUJBQW9CLEVBQUd0WSxLQUFLbVksd0JBQXVCLENBQUUsQ0FBQyxJQUFJMUYsRUFBRXJCLEdBQUcsR0FBRyxNQUFNQSxHQUFHcFIsS0FBS21ZLHVCQUF1Qm5ZLEtBQUttWSx3QkFBdUIsT0FBUSxHQUFHLE1BQU0vRyxHQUFHLE1BQU1BLEdBQUcsTUFBTUEsRUFBRSxHQUFHTyxFQUFFM1IsS0FBS2dZLFVBQVU1RyxFQUFFcFIsS0FBS3NZLHFCQUFvQixNQUFPLENBQUMsR0FBRyxJQUFJdFksS0FBS3VZLFFBQVE5WCxPQUFPLE1BQU0sSUFBSWlZLFlBQVksaUNBQWlDeEgsRUFBRSxLQUFLLElBQUlsUixLQUFLbVksdUJBQXVCLE1BQU0sSUFBSU8sWUFBWSx5QkFBeUJ0SCxFQUFFLGNBQWNGLEVBQUUsaUNBQWlDLEdBQUdsUixLQUFLbVksd0JBQXVCLEVBQUcsTUFBTS9HLEdBQUcsTUFBTUEsRUFBRSxHQUFHLE1BQU1BLEdBQUcsTUFBTUEsRUFBRXBSLEtBQUtpWSxlQUFlMUUsRUFBRU8sY0FBYzlULEtBQUtrWSxtQkFBbUIsTUFBTTlHLE9BQU8sR0FBRyxNQUFNQSxHQUFHLE1BQU1BLEVBQUVwUixLQUFLaVksZUFBZTFFLEVBQUVTLGFBQWFoVSxLQUFLa1ksbUJBQW1CLE1BQU05RyxPQUFPLEdBQUcsTUFBTUEsR0FBRyxNQUFNQSxFQUFFcFIsS0FBS2lZLGVBQWUxRSxFQUFFSyxRQUFRNVQsS0FBS2tZLG1CQUFtQixNQUFNOUcsT0FBTyxHQUFHLE1BQU1BLEdBQUcsTUFBTUEsRUFBRXBSLEtBQUtpWSxlQUFlMUUsRUFBRVEsUUFBUS9ULEtBQUtrWSxtQkFBbUIsTUFBTTlHLE9BQU8sR0FBRyxNQUFNQSxHQUFHLE1BQU1BLEVBQUVwUixLQUFLaVksZUFBZTFFLEVBQUVFLFNBQVN6VCxLQUFLa1ksbUJBQW1CLE1BQU05RyxPQUFPLEdBQUcsTUFBTUEsR0FBRyxNQUFNQSxFQUFFcFIsS0FBS2lZLGVBQWUxRSxFQUFFQyxnQkFBZ0J4VCxLQUFLa1ksbUJBQW1CLE1BQU05RyxPQUFPLEdBQUcsTUFBTUEsR0FBRyxNQUFNQSxFQUFFcFIsS0FBS2lZLGVBQWUxRSxFQUFFSSxRQUFRM1QsS0FBS2tZLG1CQUFtQixNQUFNOUcsT0FBTyxHQUFHLE1BQU1BLEdBQUcsTUFBTUEsRUFBRXBSLEtBQUtpWSxlQUFlMUUsRUFBRUcsZUFBZTFULEtBQUtrWSxtQkFBbUIsTUFBTTlHLE1BQU0sQ0FBQyxHQUFHLE1BQU1BLEdBQUcsTUFBTUEsRUFBRSxNQUFNLElBQUlzSCxZQUFZLHlCQUF5QnRILEVBQUUsY0FBY0YsRUFBRSxLQUFLbFIsS0FBS2lZLGVBQWUxRSxFQUFFeUIsSUFBSWhWLEtBQUtrWSxtQkFBbUIsTUFBTTlHLENBQUMsTUFBTWhGLEVBQUUzSyxLQUFLLENBQUM2UixLQUFLQyxFQUFFTSxhQUFhN1QsS0FBS21ZLHdCQUF1QixFQUFHblksS0FBS2lZLGdCQUFnQixDQUFDLE1BQU1qWSxLQUFLZ1ksVUFBVTVHLEVBQUVwUixLQUFLc1ksb0JBQW9CLE1BQU1sSCxDQUFDLE1BQU1wUixLQUFLZ1ksV0FBVzVHLEVBQUVwUixLQUFLc1kscUJBQW9CLE9BQVF0WSxLQUFLZ1ksV0FBVzVHLE9BQU9wUixLQUFLZ1ksV0FBVzVHLEVBQUVwUixLQUFLb1ksaUJBQWdCLE9BQVFwWSxLQUFLZ1ksV0FBVzVHLEVBQUVwUixLQUFLcVksc0JBQXNCclksS0FBS29ZLGVBQWUsQ0FBQyxPQUFPaE0sQ0FBQyxFQUFFN0ssRUFBRW1QLFVBQVVvRyxVQUFVLFNBQVN4RyxHQUFHLE9BQU9DLE9BQU9RLE9BQU8vUSxLQUFLLENBQUN5WSxNQUFNLENBQUNySSxNQUFNLFNBQVNoRSxFQUFFN0ssUUFBRyxJQUFTQSxJQUFJQSxFQUFFLElBQUksSUFBSSxJQUFJZixFQUFFLEVBQUUwUSxFQUFFWCxPQUFPcUksZUFBZTVZLE1BQU15WSxNQUFNMVksS0FBS0MsS0FBS29NLEdBQUc1TCxFQUFFMFEsRUFBRXpRLE9BQU9ELElBQUksQ0FBQyxJQUFJNFEsRUFBRUYsRUFBRTFRLEdBQUc4USxFQUFFaEIsRUFBRWMsR0FBR3ZFLE1BQU1nTSxRQUFRdkgsR0FBRy9QLEVBQUVFLEtBQUtJLE1BQU1OLEVBQUUrUCxHQUFHL1AsRUFBRUUsS0FBSzZQLEVBQUUsQ0FBQyxPQUFPL1AsQ0FBQyxJQUFJLEVBQUVBLENBQUMsQ0FBcnRKLENBQXV0SmlSLEdBQUdlLEVBQUUsU0FBU2pELEdBQUcsU0FBUzlQLEVBQUU0TCxHQUFHLElBQUk3SyxFQUFFK08sRUFBRXZRLEtBQUtDLE9BQU9BLEtBQUssT0FBT3VCLEVBQUV1WCxTQUFTLGlCQUFpQjFNLEVBQUU1TCxFQUFFaVksTUFBTXJNLEdBQUdBLEVBQUU3SyxDQUFDLENBQUMsT0FBTzZLLEVBQUU1TCxFQUFFOFAsR0FBRzlQLEVBQUVrUSxVQUFVcUksT0FBTyxXQUFXLE9BQU92WSxFQUFFdVksT0FBTy9ZLEtBQUs4WSxTQUFTLEVBQUV0WSxFQUFFa1EsVUFBVXNJLFVBQVUsV0FBVyxJQUFJMUksRUFBRXVCLEVBQUV3RSxtQkFBbUIsT0FBT3JXLEtBQUs4VyxVQUFVeEcsR0FBR0EsQ0FBQyxFQUFFOVAsRUFBRWtRLFVBQVVvRyxVQUFVLFNBQVN4RyxHQUFHLElBQUksSUFBSWxFLEVBQUUsR0FBRzdLLEVBQUUsRUFBRWYsRUFBRVIsS0FBSzhZLFNBQVN2WCxFQUFFZixFQUFFQyxPQUFPYyxJQUFJLENBQUMsSUFBSTJQLEVBQUVaLEVBQUU5UCxFQUFFZSxJQUFJc0wsTUFBTWdNLFFBQVEzSCxHQUFHOUUsRUFBRTNLLEtBQUtJLE1BQU11SyxFQUFFOEUsR0FBRzlFLEVBQUUzSyxLQUFLeVAsRUFBRSxDQUFDLE9BQU9sUixLQUFLOFksU0FBUzFNLEVBQUVwTSxJQUFJLEVBQUVRLEVBQUV1WSxPQUFPLFNBQVN6SSxHQUFHLE9BQWxwaEIsU0FBV0EsR0FBRyxJQUFJbEUsRUFBRSxHQUFHUyxNQUFNZ00sUUFBUXZJLEtBQUtBLEVBQUUsQ0FBQ0EsSUFBSSxJQUFJLElBQUkvTyxFQUFFLEVBQUVBLEVBQUUrTyxFQUFFN1AsT0FBT2MsSUFBSSxDQUFDLElBQUlmLEVBQUU4UCxFQUFFL08sR0FBRyxHQUFHZixFQUFFOFMsT0FBT0MsRUFBRU0sV0FBV3pILEdBQUcsU0FBUyxHQUFHNUwsRUFBRThTLE9BQU9DLEVBQUVPLGNBQWMxSCxJQUFJNUwsRUFBRXdTLFNBQVMsSUFBSSxLQUFLeFMsRUFBRW9SLE9BQU8sR0FBR3BSLEVBQUU4UyxPQUFPQyxFQUFFUyxhQUFhNUgsSUFBSTVMLEVBQUV3UyxTQUFTLElBQUksS0FBS3hTLEVBQUVzUixPQUFPLEdBQUd0UixFQUFFOFMsT0FBT0MsRUFBRUssUUFBUXhILElBQUk1TCxFQUFFd1MsU0FBUyxJQUFJLEtBQUt4UyxFQUFFb1IsRUFBRSxJQUFJcFIsRUFBRXNSLE9BQU8sR0FBR3RSLEVBQUU4UyxPQUFPQyxFQUFFUSxRQUFRM0gsSUFBSTVMLEVBQUV3UyxTQUFTLElBQUksS0FBS3hTLEVBQUVvUixFQUFFLElBQUlwUixFQUFFc1IsT0FBTyxHQUFHdFIsRUFBRThTLE9BQU9DLEVBQUVFLFNBQVNySCxJQUFJNUwsRUFBRXdTLFNBQVMsSUFBSSxLQUFLeFMsRUFBRXlTLEdBQUcsSUFBSXpTLEVBQUUwUyxHQUFHLElBQUkxUyxFQUFFMlMsR0FBRyxJQUFJM1MsRUFBRTRTLEdBQUcsSUFBSTVTLEVBQUVvUixFQUFFLElBQUlwUixFQUFFc1IsT0FBTyxHQUFHdFIsRUFBRThTLE9BQU9DLEVBQUVDLGdCQUFnQnBILElBQUk1TCxFQUFFd1MsU0FBUyxJQUFJLEtBQUt4UyxFQUFFMlMsR0FBRyxJQUFJM1MsRUFBRTRTLEdBQUcsSUFBSTVTLEVBQUVvUixFQUFFLElBQUlwUixFQUFFc1IsT0FBTyxHQUFHdFIsRUFBRThTLE9BQU9DLEVBQUVJLFFBQVF2SCxJQUFJNUwsRUFBRXdTLFNBQVMsSUFBSSxLQUFLeFMsRUFBRXlTLEdBQUcsSUFBSXpTLEVBQUUwUyxHQUFHLElBQUkxUyxFQUFFb1IsRUFBRSxJQUFJcFIsRUFBRXNSLE9BQU8sR0FBR3RSLEVBQUU4UyxPQUFPQyxFQUFFRyxlQUFldEgsSUFBSTVMLEVBQUV3UyxTQUFTLElBQUksS0FBS3hTLEVBQUVvUixFQUFFLElBQUlwUixFQUFFc1IsTUFBTSxDQUFDLEdBQUd0UixFQUFFOFMsT0FBT0MsRUFBRXlCLElBQUksTUFBTSxJQUFJN0QsTUFBTSw0QkFBNEIzUSxFQUFFOFMsS0FBSyxjQUFjL1IsRUFBRSxLQUFLNkssSUFBSTVMLEVBQUV3UyxTQUFTLElBQUksS0FBS3hTLEVBQUVpUixHQUFHLElBQUlqUixFQUFFa1IsR0FBRyxJQUFJbFIsRUFBRXlSLEtBQUssTUFBTXpSLEVBQUUrUSxTQUFTLE1BQU0vUSxFQUFFZ1IsVUFBVSxJQUFJaFIsRUFBRW9SLEVBQUUsSUFBSXBSLEVBQUVzUixDQUFDLENBQUMsQ0FBQyxPQUFPMUYsQ0FBQyxDQUEwd2Y3SyxDQUFFK08sRUFBRSxFQUFFOVAsRUFBRWlZLE1BQU0sU0FBU25JLEdBQUcsSUFBSWxFLEVBQUUsSUFBSTZILEVBQUUxUyxFQUFFLEdBQUcsT0FBTzZLLEVBQUVxTSxNQUFNbkksRUFBRS9PLEdBQUc2SyxFQUFFb00sT0FBT2pYLEdBQUdBLENBQUMsRUFBRWYsRUFBRXFULFdBQVcsRUFBRXJULEVBQUVvVCxRQUFRLEVBQUVwVCxFQUFFc1QsY0FBYyxFQUFFdFQsRUFBRXdULGFBQWEsRUFBRXhULEVBQUV1VCxRQUFRLEdBQUd2VCxFQUFFaVQsU0FBUyxHQUFHalQsRUFBRWdULGdCQUFnQixHQUFHaFQsRUFBRW1ULFFBQVEsSUFBSW5ULEVBQUVrVCxlQUFlLElBQUlsVCxFQUFFd1UsSUFBSSxJQUFJeFUsRUFBRTZVLGNBQWM3VSxFQUFFdVQsUUFBUXZULEVBQUVzVCxjQUFjdFQsRUFBRXdULGFBQWF4VCxFQUFFa1csaUJBQWlCbFcsRUFBRXNULGNBQWN0VCxFQUFFd1QsYUFBYXhULEVBQUV1VCxRQUFRdlQsRUFBRWlULFNBQVNqVCxFQUFFZ1QsZ0JBQWdCaFQsRUFBRW1ULFFBQVFuVCxFQUFFa1QsZUFBZWxULEVBQUV3VSxJQUFJeFUsQ0FBQyxDQUEvMkIsQ0FBaTNCZ1MsR0FBRzBCLElBQUkzQixFQUFFLENBQUMsR0FBR2dCLEVBQUVLLFNBQVMsRUFBRXJCLEVBQUVnQixFQUFFUSxTQUFTLEVBQUV4QixFQUFFZ0IsRUFBRU8sZUFBZSxFQUFFdkIsRUFBRWdCLEVBQUVTLGNBQWMsRUFBRXpCLEVBQUVnQixFQUFFTSxZQUFZLEVBQUV0QixFQUFFZ0IsRUFBRUksU0FBUyxFQUFFcEIsRUFBRWdCLEVBQUVHLGdCQUFnQixFQUFFbkIsRUFBRWdCLEVBQUVFLFVBQVUsRUFBRWxCLEVBQUVnQixFQUFFQyxpQkFBaUIsRUFBRWpCLEVBQUVnQixFQUFFeUIsS0FBSyxFQUFFekMsR0NkdHJqQixTQUFTMEcsRUFBUUMsR0FhZixPQVRFRCxFQURvQixtQkFBWEUsUUFBb0QsaUJBQXBCQSxPQUFPQyxTQUN0QyxTQUFVRixHQUNsQixjQUFjQSxDQUNoQixFQUVVLFNBQVVBLEdBQ2xCLE9BQU9BLEdBQXlCLG1CQUFYQyxRQUF5QkQsRUFBSXBJLGNBQWdCcUksUUFBVUQsSUFBUUMsT0FBT3pJLFVBQVksZ0JBQWtCd0ksQ0FDM0gsRUFHS0QsRUFBUUMsRUFDakIsQ0FvREEsSUFBSUcsRUFBVyxDQUFDLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxLQUNsd0NDLEVBQVcsQ0FBQyxFQUFHLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUks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bUMsY0FBYyxhQUFtQzVyQixRQUFVb3NCLEdBRXJFLElBQUssSUFBSW56QyxLQUFNeU0sU0FBU2ttQyxjQUFjLFdBQThCbmtCLHFCQUFxQixVQUNyRnh1QixFQUFFOHpDLFVBQVcsQ0FFckIsRyIsInNvdXJjZXMiOlsid2VicGFjazovL21pa2V5bGFiLXFyLy4vbm9kZV9tb2R1bGVzL3BlcmZvcm1hbmNlLW5vdy9saWIvcGVyZm9ybWFuY2Utbm93LmpzIiwid2VicGFjazovL21pa2V5bGFiLXFyLy4vbm9kZV9tb2R1bGVzL3JhZi9pbmRleC5qcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9yZ2Jjb2xvci9pbmRleC5qcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9taWtleWxhYi1xci93ZWJwYWNrL3J1bnRpbWUvZ2xvYmFsIiwid2VicGFjazovL21pa2V5bGFiLXFyLy4vbm9kZV9tb2R1bGVzL2lkYi1rZXl2YWwvZGlzdC9pbmRleC5qcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9zdmctcGF0aGRhdGEvbGliL1NWR1BhdGhEYXRhLm1vZHVsZS5qcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9zdGFja2JsdXItY2FudmFzL2Rpc3Qvc3RhY2tibHVyLWVzLmpzIiwid2VicGFjazovL21pa2V5bGFiLXFyLy4vbm9kZV9tb2R1bGVzL2NhbnZnL2Rpc3QvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9zcmMvYXBwLnRzIiwid2VicGFjazovL21pa2V5bGFiLXFyLy4vc3JjL2xpYi9zdmctY29udmVydC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBHZW5lcmF0ZWQgYnkgQ29mZmVlU2NyaXB0IDEuMTIuMlxuKGZ1bmN0aW9uKCkge1xuICB2YXIgZ2V0TmFub1NlY29uZHMsIGhydGltZSwgbG9hZFRpbWUsIG1vZHVsZUxvYWRUaW1lLCBub2RlTG9hZFRpbWUsIHVwVGltZTtcblxuICBpZiAoKHR5cGVvZiBwZXJmb3JtYW5jZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBwZXJmb3JtYW5jZSAhPT0gbnVsbCkgJiYgcGVyZm9ybWFuY2Uubm93KSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICB9O1xuICB9IGVsc2UgaWYgKCh0eXBlb2YgcHJvY2VzcyAhPT0gXCJ1bmRlZmluZWRcIiAmJiBwcm9jZXNzICE9PSBudWxsKSAmJiBwcm9jZXNzLmhydGltZSkge1xuICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gKGdldE5hbm9TZWNvbmRzKCkgLSBub2RlTG9hZFRpbWUpIC8gMWU2O1xuICAgIH07XG4gICAgaHJ0aW1lID0gcHJvY2Vzcy5ocnRpbWU7XG4gICAgZ2V0TmFub1NlY29uZHMgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBocjtcbiAgICAgIGhyID0gaHJ0aW1lKCk7XG4gICAgICByZXR1cm4gaHJbMF0gKiAxZTkgKyBoclsxXTtcbiAgICB9O1xuICAgIG1vZHVsZUxvYWRUaW1lID0gZ2V0TmFub1NlY29uZHMoKTtcbiAgICB1cFRpbWUgPSBwcm9jZXNzLnVwdGltZSgpICogMWU5O1xuICAgIG5vZGVMb2FkVGltZSA9IG1vZHVsZUxvYWRUaW1lIC0gdXBUaW1lO1xuICB9IGVsc2UgaWYgKERhdGUubm93KSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBEYXRlLm5vdygpIC0gbG9hZFRpbWU7XG4gICAgfTtcbiAgICBsb2FkVGltZSA9IERhdGUubm93KCk7XG4gIH0gZWxzZSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKSAtIGxvYWRUaW1lO1xuICAgIH07XG4gICAgbG9hZFRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgfVxuXG59KS5jYWxsKHRoaXMpO1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1wZXJmb3JtYW5jZS1ub3cuanMubWFwXG4iLCJ2YXIgbm93ID0gcmVxdWlyZSgncGVyZm9ybWFuY2Utbm93JylcbiAgLCByb290ID0gdHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWwgOiB3aW5kb3dcbiAgLCB2ZW5kb3JzID0gWydtb3onLCAnd2Via2l0J11cbiAgLCBzdWZmaXggPSAnQW5pbWF0aW9uRnJhbWUnXG4gICwgcmFmID0gcm9vdFsncmVxdWVzdCcgKyBzdWZmaXhdXG4gICwgY2FmID0gcm9vdFsnY2FuY2VsJyArIHN1ZmZpeF0gfHwgcm9vdFsnY2FuY2VsUmVxdWVzdCcgKyBzdWZmaXhdXG5cbmZvcih2YXIgaSA9IDA7ICFyYWYgJiYgaSA8IHZlbmRvcnMubGVuZ3RoOyBpKyspIHtcbiAgcmFmID0gcm9vdFt2ZW5kb3JzW2ldICsgJ1JlcXVlc3QnICsgc3VmZml4XVxuICBjYWYgPSByb290W3ZlbmRvcnNbaV0gKyAnQ2FuY2VsJyArIHN1ZmZpeF1cbiAgICAgIHx8IHJvb3RbdmVuZG9yc1tpXSArICdDYW5jZWxSZXF1ZXN0JyArIHN1ZmZpeF1cbn1cblxuLy8gU29tZSB2ZXJzaW9ucyBvZiBGRiBoYXZlIHJBRiBidXQgbm90IGNBRlxuaWYoIXJhZiB8fCAhY2FmKSB7XG4gIHZhciBsYXN0ID0gMFxuICAgICwgaWQgPSAwXG4gICAgLCBxdWV1ZSA9IFtdXG4gICAgLCBmcmFtZUR1cmF0aW9uID0gMTAwMCAvIDYwXG5cbiAgcmFmID0gZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICBpZihxdWV1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHZhciBfbm93ID0gbm93KClcbiAgICAgICAgLCBuZXh0ID0gTWF0aC5tYXgoMCwgZnJhbWVEdXJhdGlvbiAtIChfbm93IC0gbGFzdCkpXG4gICAgICBsYXN0ID0gbmV4dCArIF9ub3dcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBjcCA9IHF1ZXVlLnNsaWNlKDApXG4gICAgICAgIC8vIENsZWFyIHF1ZXVlIGhlcmUgdG8gcHJldmVudFxuICAgICAgICAvLyBjYWxsYmFja3MgZnJvbSBhcHBlbmRpbmcgbGlzdGVuZXJzXG4gICAgICAgIC8vIHRvIHRoZSBjdXJyZW50IGZyYW1lJ3MgcXVldWVcbiAgICAgICAgcXVldWUubGVuZ3RoID0gMFxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgY3AubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZighY3BbaV0uY2FuY2VsbGVkKSB7XG4gICAgICAgICAgICB0cnl7XG4gICAgICAgICAgICAgIGNwW2ldLmNhbGxiYWNrKGxhc3QpXG4gICAgICAgICAgICB9IGNhdGNoKGUpIHtcbiAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgdGhyb3cgZSB9LCAwKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSwgTWF0aC5yb3VuZChuZXh0KSlcbiAgICB9XG4gICAgcXVldWUucHVzaCh7XG4gICAgICBoYW5kbGU6ICsraWQsXG4gICAgICBjYWxsYmFjazogY2FsbGJhY2ssXG4gICAgICBjYW5jZWxsZWQ6IGZhbHNlXG4gICAgfSlcbiAgICByZXR1cm4gaWRcbiAgfVxuXG4gIGNhZiA9IGZ1bmN0aW9uKGhhbmRsZSkge1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBxdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYocXVldWVbaV0uaGFuZGxlID09PSBoYW5kbGUpIHtcbiAgICAgICAgcXVldWVbaV0uY2FuY2VsbGVkID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGZuKSB7XG4gIC8vIFdyYXAgaW4gYSBuZXcgZnVuY3Rpb24gdG8gcHJldmVudFxuICAvLyBgY2FuY2VsYCBwb3RlbnRpYWxseSBiZWluZyBhc3NpZ25lZFxuICAvLyB0byB0aGUgbmF0aXZlIHJBRiBmdW5jdGlvblxuICByZXR1cm4gcmFmLmNhbGwocm9vdCwgZm4pXG59XG5tb2R1bGUuZXhwb3J0cy5jYW5jZWwgPSBmdW5jdGlvbigpIHtcbiAgY2FmLmFwcGx5KHJvb3QsIGFyZ3VtZW50cylcbn1cbm1vZHVsZS5leHBvcnRzLnBvbHlmaWxsID0gZnVuY3Rpb24ob2JqZWN0KSB7XG4gIGlmICghb2JqZWN0KSB7XG4gICAgb2JqZWN0ID0gcm9vdDtcbiAgfVxuICBvYmplY3QucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gcmFmXG4gIG9iamVjdC5jYW5jZWxBbmltYXRpb25GcmFtZSA9IGNhZlxufVxuIiwiLypcblx0QmFzZWQgb24gcmdiY29sb3IuanMgYnkgU3RveWFuIFN0ZWZhbm92IDxzc3Rvb0BnbWFpbC5jb20+XG5cdGh0dHA6Ly93d3cucGhwaWVkLmNvbS9yZ2ItY29sb3ItcGFyc2VyLWluLWphdmFzY3JpcHQvXG4qL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbG9yX3N0cmluZykge1xuICAgIHRoaXMub2sgPSBmYWxzZTtcbiAgICB0aGlzLmFscGhhID0gMS4wO1xuXG4gICAgLy8gc3RyaXAgYW55IGxlYWRpbmcgI1xuICAgIGlmIChjb2xvcl9zdHJpbmcuY2hhckF0KDApID09ICcjJykgeyAvLyByZW1vdmUgIyBpZiBhbnlcbiAgICAgICAgY29sb3Jfc3RyaW5nID0gY29sb3Jfc3RyaW5nLnN1YnN0cigxLDYpO1xuICAgIH1cblxuICAgIGNvbG9yX3N0cmluZyA9IGNvbG9yX3N0cmluZy5yZXBsYWNlKC8gL2csJycpO1xuICAgIGNvbG9yX3N0cmluZyA9IGNvbG9yX3N0cmluZy50b0xvd2VyQ2FzZSgpO1xuXG4gICAgLy8gYmVmb3JlIGdldHRpbmcgaW50byByZWdleHBzLCB0cnkgc2ltcGxlIG1hdGNoZXNcbiAgICAvLyBhbmQgb3ZlcndyaXRlIHRoZSBpbnB1dFxuICAgIHZhciBzaW1wbGVfY29sb3JzID0ge1xuICAgICAgICBhbGljZWJsdWU6ICdmMGY4ZmYnLFxuICAgICAgICBhbnRpcXVld2hpdGU6ICdmYWViZDcnLFxuICAgICAgICBhcXVhOiAnMDBmZmZmJyxcbiAgICAgICAgYXF1YW1hcmluZTogJzdmZmZkNCcsXG4gICAgICAgIGF6dXJlOiAnZjBmZmZmJyxcbiAgICAgICAgYmVpZ2U6ICdmNWY1ZGMnLFxuICAgICAgICBiaXNxdWU6ICdmZmU0YzQnLFxuICAgICAgICBibGFjazogJzAwMDAwMCcsXG4gICAgICAgIGJsYW5jaGVkYWxtb25kOiAnZmZlYmNkJyxcbiAgICAgICAgYmx1ZTogJzAwMDBmZicsXG4gICAgICAgIGJsdWV2aW9sZXQ6ICc4YTJiZTInLFxuICAgICAgICBicm93bjogJ2E1MmEyYScsXG4gICAgICAgIGJ1cmx5d29vZDogJ2RlYjg4NycsXG4gICAgICAgIGNhZGV0Ymx1ZTogJzVmOWVhMCcsXG4gICAgICAgIGNoYXJ0cmV1c2U6ICc3ZmZmMDAnLFxuICAgICAgICBjaG9jb2xhdGU6ICdkMjY5MWUnLFxuICAgICAgICBjb3JhbDogJ2ZmN2Y1MCcsXG4gICAgICAgIGNvcm5mbG93ZXJibHVlOiAnNjQ5NWVkJyxcbiAgICAgICAgY29ybnNpbGs6ICdmZmY4ZGMnLFxuICAgICAgICBjcmltc29uOiAnZGMxNDNjJyxcbiAgICAgICAgY3lhbjogJzAwZmZmZicsXG4gICAgICAgIGRhcmtibHVlOiAnMDAwMDhiJyxcbiAgICAgICAgZGFya2N5YW46ICcwMDhiOGInLFxuICAgICAgICBkYXJrZ29sZGVucm9kOiAnYjg4NjBiJyxcbiAgICAgICAgZGFya2dyYXk6ICdhOWE5YTknLFxuICAgICAgICBkYXJrZ3JlZW46ICcwMDY0MDAnLFxuICAgICAgICBkYXJra2hha2k6ICdiZGI3NmInLFxuICAgICAgICBkYXJrbWFnZW50YTogJzhiMDA4YicsXG4gICAgICAgIGRhcmtvbGl2ZWdyZWVuOiAnNTU2YjJmJyxcbiAgICAgICAgZGFya29yYW5nZTogJ2ZmOGMwMCcsXG4gICAgICAgIGRhcmtvcmNoaWQ6ICc5OTMyY2MnLFxuICAgICAgICBkYXJrcmVkOiAnOGIwMDAwJyxcbiAgICAgICAgZGFya3NhbG1vbjogJ2U5OTY3YScsXG4gICAgICAgIGRhcmtzZWFncmVlbjogJzhmYmM4ZicsXG4gICAgICAgIGRhcmtzbGF0ZWJsdWU6ICc0ODNkOGInLFxuICAgICAgICBkYXJrc2xhdGVncmF5OiAnMmY0ZjRmJyxcbiAgICAgICAgZGFya3R1cnF1b2lzZTogJzAwY2VkMScsXG4gICAgICAgIGRhcmt2aW9sZXQ6ICc5NDAwZDMnLFxuICAgICAgICBkZWVwcGluazogJ2ZmMTQ5MycsXG4gICAgICAgIGRlZXBza3libHVlOiAnMDBiZmZmJyxcbiAgICAgICAgZGltZ3JheTogJzY5Njk2OScsXG4gICAgICAgIGRvZGdlcmJsdWU6ICcxZTkwZmYnLFxuICAgICAgICBmZWxkc3BhcjogJ2QxOTI3NScsXG4gICAgICAgIGZpcmVicmljazogJ2IyMjIyMicsXG4gICAgICAgIGZsb3JhbHdoaXRlOiAnZmZmYWYwJyxcbiAgICAgICAgZm9yZXN0Z3JlZW46ICcyMjhiMjInLFxuICAgICAgICBmdWNoc2lhOiAnZmYwMGZmJyxcbiAgICAgICAgZ2FpbnNib3JvOiAnZGNkY2RjJyxcbiAgICAgICAgZ2hvc3R3aGl0ZTogJ2Y4ZjhmZicsXG4gICAgICAgIGdvbGQ6ICdmZmQ3MDAnLFxuICAgICAgICBnb2xkZW5yb2Q6ICdkYWE1MjAnLFxuICAgICAgICBncmF5OiAnODA4MDgwJyxcbiAgICAgICAgZ3JlZW46ICcwMDgwMDAnLFxuICAgICAgICBncmVlbnllbGxvdzogJ2FkZmYyZicsXG4gICAgICAgIGhvbmV5ZGV3OiAnZjBmZmYwJyxcbiAgICAgICAgaG90cGluazogJ2ZmNjliNCcsXG4gICAgICAgIGluZGlhbnJlZCA6ICdjZDVjNWMnLFxuICAgICAgICBpbmRpZ28gOiAnNGIwMDgyJyxcbiAgICAgICAgaXZvcnk6ICdmZmZmZjAnLFxuICAgICAgICBraGFraTogJ2YwZTY4YycsXG4gICAgICAgIGxhdmVuZGVyOiAnZTZlNmZhJyxcbiAgICAgICAgbGF2ZW5kZXJibHVzaDogJ2ZmZjBmNScsXG4gICAgICAgIGxhd25ncmVlbjogJzdjZmMwMCcsXG4gICAgICAgIGxlbW9uY2hpZmZvbjogJ2ZmZmFjZCcsXG4gICAgICAgIGxpZ2h0Ymx1ZTogJ2FkZDhlNicsXG4gICAgICAgIGxpZ2h0Y29yYWw6ICdmMDgwODAnLFxuICAgICAgICBsaWdodGN5YW46ICdlMGZmZmYnLFxuICAgICAgICBsaWdodGdvbGRlbnJvZHllbGxvdzogJ2ZhZmFkMicsXG4gICAgICAgIGxpZ2h0Z3JleTogJ2QzZDNkMycsXG4gICAgICAgIGxpZ2h0Z3JlZW46ICc5MGVlOTAnLFxuICAgICAgICBsaWdodHBpbms6ICdmZmI2YzEnLFxuICAgICAgICBsaWdodHNhbG1vbjogJ2ZmYTA3YScsXG4gICAgICAgIGxpZ2h0c2VhZ3JlZW46ICcyMGIyYWEnLFxuICAgICAgICBsaWdodHNreWJsdWU6ICc4N2NlZmEnLFxuICAgICAgICBsaWdodHNsYXRlYmx1ZTogJzg0NzBmZicsXG4gICAgICAgIGxpZ2h0c2xhdGVncmF5OiAnNzc4ODk5JyxcbiAgICAgICAgbGlnaHRzdGVlbGJsdWU6ICdiMGM0ZGUnLFxuICAgICAgICBsaWdodHllbGxvdzogJ2ZmZmZlMCcsXG4gICAgICAgIGxpbWU6ICcwMGZmMDAnLFxuICAgICAgICBsaW1lZ3JlZW46ICczMmNkMzInLFxuICAgICAgICBsaW5lbjogJ2ZhZjBlNicsXG4gICAgICAgIG1hZ2VudGE6ICdmZjAwZmYnLFxuICAgICAgICBtYXJvb246ICc4MDAwMDAnLFxuICAgICAgICBtZWRpdW1hcXVhbWFyaW5lOiAnNjZjZGFhJyxcbiAgICAgICAgbWVkaXVtYmx1ZTogJzAwMDBjZCcsXG4gICAgICAgIG1lZGl1bW9yY2hpZDogJ2JhNTVkMycsXG4gICAgICAgIG1lZGl1bXB1cnBsZTogJzkzNzBkOCcsXG4gICAgICAgIG1lZGl1bXNlYWdyZWVuOiAnM2NiMzcxJyxcbiAgICAgICAgbWVkaXVtc2xhdGVibHVlOiAnN2I2OGVlJyxcbiAgICAgICAgbWVkaXVtc3ByaW5nZ3JlZW46ICcwMGZhOWEnLFxuICAgICAgICBtZWRpdW10dXJxdW9pc2U6ICc0OGQxY2MnLFxuICAgICAgICBtZWRpdW12aW9sZXRyZWQ6ICdjNzE1ODUnLFxuICAgICAgICBtaWRuaWdodGJsdWU6ICcxOTE5NzAnLFxuICAgICAgICBtaW50Y3JlYW06ICdmNWZmZmEnLFxuICAgICAgICBtaXN0eXJvc2U6ICdmZmU0ZTEnLFxuICAgICAgICBtb2NjYXNpbjogJ2ZmZTRiNScsXG4gICAgICAgIG5hdmFqb3doaXRlOiAnZmZkZWFkJyxcbiAgICAgICAgbmF2eTogJzAwMDA4MCcsXG4gICAgICAgIG9sZGxhY2U6ICdmZGY1ZTYnLFxuICAgICAgICBvbGl2ZTogJzgwODAwMCcsXG4gICAgICAgIG9saXZlZHJhYjogJzZiOGUyMycsXG4gICAgICAgIG9yYW5nZTogJ2ZmYTUwMCcsXG4gICAgICAgIG9yYW5nZXJlZDogJ2ZmNDUwMCcsXG4gICAgICAgIG9yY2hpZDogJ2RhNzBkNicsXG4gICAgICAgIHBhbGVnb2xkZW5yb2Q6ICdlZWU4YWEnLFxuICAgICAgICBwYWxlZ3JlZW46ICc5OGZiOTgnLFxuICAgICAgICBwYWxldHVycXVvaXNlOiAnYWZlZWVlJyxcbiAgICAgICAgcGFsZXZpb2xldHJlZDogJ2Q4NzA5MycsXG4gICAgICAgIHBhcGF5YXdoaXA6ICdmZmVmZDUnLFxuICAgICAgICBwZWFjaHB1ZmY6ICdmZmRhYjknLFxuICAgICAgICBwZXJ1OiAnY2Q4NTNmJyxcbiAgICAgICAgcGluazogJ2ZmYzBjYicsXG4gICAgICAgIHBsdW06ICdkZGEwZGQnLFxuICAgICAgICBwb3dkZXJibHVlOiAnYjBlMGU2JyxcbiAgICAgICAgcHVycGxlOiAnODAwMDgwJyxcbiAgICAgICAgcmViZWNjYXB1cnBsZTogJzY2MzM5OScsXG4gICAgICAgIHJlZDogJ2ZmMDAwMCcsXG4gICAgICAgIHJvc3licm93bjogJ2JjOGY4ZicsXG4gICAgICAgIHJveWFsYmx1ZTogJzQxNjllMScsXG4gICAgICAgIHNhZGRsZWJyb3duOiAnOGI0NTEzJyxcbiAgICAgICAgc2FsbW9uOiAnZmE4MDcyJyxcbiAgICAgICAgc2FuZHlicm93bjogJ2Y0YTQ2MCcsXG4gICAgICAgIHNlYWdyZWVuOiAnMmU4YjU3JyxcbiAgICAgICAgc2Vhc2hlbGw6ICdmZmY1ZWUnLFxuICAgICAgICBzaWVubmE6ICdhMDUyMmQnLFxuICAgICAgICBzaWx2ZXI6ICdjMGMwYzAnLFxuICAgICAgICBza3libHVlOiAnODdjZWViJyxcbiAgICAgICAgc2xhdGVibHVlOiAnNmE1YWNkJyxcbiAgICAgICAgc2xhdGVncmF5OiAnNzA4MDkwJyxcbiAgICAgICAgc25vdzogJ2ZmZmFmYScsXG4gICAgICAgIHNwcmluZ2dyZWVuOiAnMDBmZjdmJyxcbiAgICAgICAgc3RlZWxibHVlOiAnNDY4MmI0JyxcbiAgICAgICAgdGFuOiAnZDJiNDhjJyxcbiAgICAgICAgdGVhbDogJzAwODA4MCcsXG4gICAgICAgIHRoaXN0bGU6ICdkOGJmZDgnLFxuICAgICAgICB0b21hdG86ICdmZjYzNDcnLFxuICAgICAgICB0dXJxdW9pc2U6ICc0MGUwZDAnLFxuICAgICAgICB2aW9sZXQ6ICdlZTgyZWUnLFxuICAgICAgICB2aW9sZXRyZWQ6ICdkMDIwOTAnLFxuICAgICAgICB3aGVhdDogJ2Y1ZGViMycsXG4gICAgICAgIHdoaXRlOiAnZmZmZmZmJyxcbiAgICAgICAgd2hpdGVzbW9rZTogJ2Y1ZjVmNScsXG4gICAgICAgIHllbGxvdzogJ2ZmZmYwMCcsXG4gICAgICAgIHllbGxvd2dyZWVuOiAnOWFjZDMyJ1xuICAgIH07XG4gICAgY29sb3Jfc3RyaW5nID0gc2ltcGxlX2NvbG9yc1tjb2xvcl9zdHJpbmddIHx8IGNvbG9yX3N0cmluZztcbiAgICAvLyBlbWQgb2Ygc2ltcGxlIHR5cGUtaW4gY29sb3JzXG5cbiAgICAvLyBhcnJheSBvZiBjb2xvciBkZWZpbml0aW9uIG9iamVjdHNcbiAgICB2YXIgY29sb3JfZGVmcyA9IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcmU6IC9ecmdiYVxcKChcXGR7MSwzfSksXFxzKihcXGR7MSwzfSksXFxzKihcXGR7MSwzfSksXFxzKigoPzpcXGQ/XFwuKT9cXGQpXFwpJC8sXG4gICAgICAgICAgICBleGFtcGxlOiBbJ3JnYmEoMTIzLCAyMzQsIDQ1LCAwLjgpJywgJ3JnYmEoMjU1LDIzNCwyNDUsMS4wKSddLFxuICAgICAgICAgICAgcHJvY2VzczogZnVuY3Rpb24gKGJpdHMpe1xuICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KGJpdHNbMV0pLFxuICAgICAgICAgICAgICAgICAgICBwYXJzZUludChiaXRzWzJdKSxcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VJbnQoYml0c1szXSksXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlRmxvYXQoYml0c1s0XSlcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICByZTogL15yZ2JcXCgoXFxkezEsM30pLFxccyooXFxkezEsM30pLFxccyooXFxkezEsM30pXFwpJC8sXG4gICAgICAgICAgICBleGFtcGxlOiBbJ3JnYigxMjMsIDIzNCwgNDUpJywgJ3JnYigyNTUsMjM0LDI0NSknXSxcbiAgICAgICAgICAgIHByb2Nlc3M6IGZ1bmN0aW9uIChiaXRzKXtcbiAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICBwYXJzZUludChiaXRzWzFdKSxcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VJbnQoYml0c1syXSksXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KGJpdHNbM10pXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcmU6IC9eKFswLTlhLWZBLUZdezJ9KShbMC05YS1mQS1GXXsyfSkoWzAtOWEtZkEtRl17Mn0pJC8sXG4gICAgICAgICAgICBleGFtcGxlOiBbJyMwMGZmMDAnLCAnMzM2Njk5J10sXG4gICAgICAgICAgICBwcm9jZXNzOiBmdW5jdGlvbiAoYml0cyl7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VJbnQoYml0c1sxXSwgMTYpLFxuICAgICAgICAgICAgICAgICAgICBwYXJzZUludChiaXRzWzJdLCAxNiksXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KGJpdHNbM10sIDE2KVxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlOiAvXihbMC05YS1mQS1GXXsxfSkoWzAtOWEtZkEtRl17MX0pKFswLTlhLWZBLUZdezF9KSQvLFxuICAgICAgICAgICAgZXhhbXBsZTogWycjZmIwJywgJ2YwZiddLFxuICAgICAgICAgICAgcHJvY2VzczogZnVuY3Rpb24gKGJpdHMpe1xuICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KGJpdHNbMV0gKyBiaXRzWzFdLCAxNiksXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KGJpdHNbMl0gKyBiaXRzWzJdLCAxNiksXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KGJpdHNbM10gKyBiaXRzWzNdLCAxNilcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgXTtcblxuICAgIC8vIHNlYXJjaCB0aHJvdWdoIHRoZSBkZWZpbml0aW9ucyB0byBmaW5kIGEgbWF0Y2hcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbG9yX2RlZnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHJlID0gY29sb3JfZGVmc1tpXS5yZTtcbiAgICAgICAgdmFyIHByb2Nlc3NvciA9IGNvbG9yX2RlZnNbaV0ucHJvY2VzcztcbiAgICAgICAgdmFyIGJpdHMgPSByZS5leGVjKGNvbG9yX3N0cmluZyk7XG4gICAgICAgIGlmIChiaXRzKSB7XG4gICAgICAgICAgICB2YXIgY2hhbm5lbHMgPSBwcm9jZXNzb3IoYml0cyk7XG4gICAgICAgICAgICB0aGlzLnIgPSBjaGFubmVsc1swXTtcbiAgICAgICAgICAgIHRoaXMuZyA9IGNoYW5uZWxzWzFdO1xuICAgICAgICAgICAgdGhpcy5iID0gY2hhbm5lbHNbMl07XG4gICAgICAgICAgICBpZiAoY2hhbm5lbHMubGVuZ3RoID4gMykge1xuICAgICAgICAgICAgICAgIHRoaXMuYWxwaGEgPSBjaGFubmVsc1szXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMub2sgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICAvLyB2YWxpZGF0ZS9jbGVhbnVwIHZhbHVlc1xuICAgIHRoaXMuciA9ICh0aGlzLnIgPCAwIHx8IGlzTmFOKHRoaXMucikpID8gMCA6ICgodGhpcy5yID4gMjU1KSA/IDI1NSA6IHRoaXMucik7XG4gICAgdGhpcy5nID0gKHRoaXMuZyA8IDAgfHwgaXNOYU4odGhpcy5nKSkgPyAwIDogKCh0aGlzLmcgPiAyNTUpID8gMjU1IDogdGhpcy5nKTtcbiAgICB0aGlzLmIgPSAodGhpcy5iIDwgMCB8fCBpc05hTih0aGlzLmIpKSA/IDAgOiAoKHRoaXMuYiA+IDI1NSkgPyAyNTUgOiB0aGlzLmIpO1xuICAgIHRoaXMuYWxwaGEgPSAodGhpcy5hbHBoYSA8IDApID8gMCA6ICgodGhpcy5hbHBoYSA+IDEuMCB8fCBpc05hTih0aGlzLmFscGhhKSkgPyAxLjAgOiB0aGlzLmFscGhhKTtcblxuICAgIC8vIHNvbWUgZ2V0dGVyc1xuICAgIHRoaXMudG9SR0IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAncmdiKCcgKyB0aGlzLnIgKyAnLCAnICsgdGhpcy5nICsgJywgJyArIHRoaXMuYiArICcpJztcbiAgICB9XG4gICAgdGhpcy50b1JHQkEgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAncmdiYSgnICsgdGhpcy5yICsgJywgJyArIHRoaXMuZyArICcsICcgKyB0aGlzLmIgKyAnLCAnICsgdGhpcy5hbHBoYSArICcpJztcbiAgICB9XG4gICAgdGhpcy50b0hleCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHIgPSB0aGlzLnIudG9TdHJpbmcoMTYpO1xuICAgICAgICB2YXIgZyA9IHRoaXMuZy50b1N0cmluZygxNik7XG4gICAgICAgIHZhciBiID0gdGhpcy5iLnRvU3RyaW5nKDE2KTtcbiAgICAgICAgaWYgKHIubGVuZ3RoID09IDEpIHIgPSAnMCcgKyByO1xuICAgICAgICBpZiAoZy5sZW5ndGggPT0gMSkgZyA9ICcwJyArIGc7XG4gICAgICAgIGlmIChiLmxlbmd0aCA9PSAxKSBiID0gJzAnICsgYjtcbiAgICAgICAgcmV0dXJuICcjJyArIHIgKyBnICsgYjtcbiAgICB9XG5cbiAgICAvLyBoZWxwXG4gICAgdGhpcy5nZXRIZWxwWE1MID0gZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIHZhciBleGFtcGxlcyA9IG5ldyBBcnJheSgpO1xuICAgICAgICAvLyBhZGQgcmVnZXhwc1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbG9yX2RlZnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBleGFtcGxlID0gY29sb3JfZGVmc1tpXS5leGFtcGxlO1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBleGFtcGxlLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgZXhhbXBsZXNbZXhhbXBsZXMubGVuZ3RoXSA9IGV4YW1wbGVbal07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gYWRkIHR5cGUtaW4gY29sb3JzXG4gICAgICAgIGZvciAodmFyIHNjIGluIHNpbXBsZV9jb2xvcnMpIHtcbiAgICAgICAgICAgIGV4YW1wbGVzW2V4YW1wbGVzLmxlbmd0aF0gPSBzYztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB4bWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd1bCcpO1xuICAgICAgICB4bWwuc2V0QXR0cmlidXRlKCdpZCcsICdyZ2Jjb2xvci1leGFtcGxlcycpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV4YW1wbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHZhciBsaXN0X2l0ZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaScpO1xuICAgICAgICAgICAgICAgIHZhciBsaXN0X2NvbG9yID0gbmV3IFJHQkNvbG9yKGV4YW1wbGVzW2ldKTtcbiAgICAgICAgICAgICAgICB2YXIgZXhhbXBsZV9kaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgICBleGFtcGxlX2Rpdi5zdHlsZS5jc3NUZXh0ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICdtYXJnaW46IDNweDsgJ1xuICAgICAgICAgICAgICAgICAgICAgICAgKyAnYm9yZGVyOiAxcHggc29saWQgYmxhY2s7ICdcbiAgICAgICAgICAgICAgICAgICAgICAgICsgJ2JhY2tncm91bmQ6JyArIGxpc3RfY29sb3IudG9IZXgoKSArICc7ICdcbiAgICAgICAgICAgICAgICAgICAgICAgICsgJ2NvbG9yOicgKyBsaXN0X2NvbG9yLnRvSGV4KClcbiAgICAgICAgICAgICAgICA7XG4gICAgICAgICAgICAgICAgZXhhbXBsZV9kaXYuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ3Rlc3QnKSk7XG4gICAgICAgICAgICAgICAgdmFyIGxpc3RfaXRlbV92YWx1ZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFxuICAgICAgICAgICAgICAgICAgICAnICcgKyBleGFtcGxlc1tpXSArICcgLT4gJyArIGxpc3RfY29sb3IudG9SR0IoKSArICcgLT4gJyArIGxpc3RfY29sb3IudG9IZXgoKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgbGlzdF9pdGVtLmFwcGVuZENoaWxkKGV4YW1wbGVfZGl2KTtcbiAgICAgICAgICAgICAgICBsaXN0X2l0ZW0uYXBwZW5kQ2hpbGQobGlzdF9pdGVtX3ZhbHVlKTtcbiAgICAgICAgICAgICAgICB4bWwuYXBwZW5kQ2hpbGQobGlzdF9pdGVtKTtcblxuICAgICAgICAgICAgfSBjYXRjaChlKXt9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHhtbDtcblxuICAgIH1cblxufVxuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIl9fd2VicGFja19yZXF1aXJlX18uZyA9IChmdW5jdGlvbigpIHtcblx0aWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSAnb2JqZWN0JykgcmV0dXJuIGdsb2JhbFRoaXM7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIHRoaXMgfHwgbmV3IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcpIHJldHVybiB3aW5kb3c7XG5cdH1cbn0pKCk7IiwiZnVuY3Rpb24gcHJvbWlzaWZ5UmVxdWVzdChyZXF1ZXN0KSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZSAtIGZpbGUgc2l6ZSBoYWNrc1xuICAgICAgICByZXF1ZXN0Lm9uY29tcGxldGUgPSByZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHJlc29sdmUocmVxdWVzdC5yZXN1bHQpO1xuICAgICAgICAvLyBAdHMtaWdub3JlIC0gZmlsZSBzaXplIGhhY2tzXG4gICAgICAgIHJlcXVlc3Qub25hYm9ydCA9IHJlcXVlc3Qub25lcnJvciA9ICgpID0+IHJlamVjdChyZXF1ZXN0LmVycm9yKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVN0b3JlKGRiTmFtZSwgc3RvcmVOYW1lKSB7XG4gICAgY29uc3QgcmVxdWVzdCA9IGluZGV4ZWREQi5vcGVuKGRiTmFtZSk7XG4gICAgcmVxdWVzdC5vbnVwZ3JhZGVuZWVkZWQgPSAoKSA9PiByZXF1ZXN0LnJlc3VsdC5jcmVhdGVPYmplY3RTdG9yZShzdG9yZU5hbWUpO1xuICAgIGNvbnN0IGRicCA9IHByb21pc2lmeVJlcXVlc3QocmVxdWVzdCk7XG4gICAgcmV0dXJuICh0eE1vZGUsIGNhbGxiYWNrKSA9PiBkYnAudGhlbigoZGIpID0+IGNhbGxiYWNrKGRiLnRyYW5zYWN0aW9uKHN0b3JlTmFtZSwgdHhNb2RlKS5vYmplY3RTdG9yZShzdG9yZU5hbWUpKSk7XG59XG5sZXQgZGVmYXVsdEdldFN0b3JlRnVuYztcbmZ1bmN0aW9uIGRlZmF1bHRHZXRTdG9yZSgpIHtcbiAgICBpZiAoIWRlZmF1bHRHZXRTdG9yZUZ1bmMpIHtcbiAgICAgICAgZGVmYXVsdEdldFN0b3JlRnVuYyA9IGNyZWF0ZVN0b3JlKCdrZXl2YWwtc3RvcmUnLCAna2V5dmFsJyk7XG4gICAgfVxuICAgIHJldHVybiBkZWZhdWx0R2V0U3RvcmVGdW5jO1xufVxuLyoqXG4gKiBHZXQgYSB2YWx1ZSBieSBpdHMga2V5LlxuICpcbiAqIEBwYXJhbSBrZXlcbiAqIEBwYXJhbSBjdXN0b21TdG9yZSBNZXRob2QgdG8gZ2V0IGEgY3VzdG9tIHN0b3JlLiBVc2Ugd2l0aCBjYXV0aW9uIChzZWUgdGhlIGRvY3MpLlxuICovXG5mdW5jdGlvbiBnZXQoa2V5LCBjdXN0b21TdG9yZSA9IGRlZmF1bHRHZXRTdG9yZSgpKSB7XG4gICAgcmV0dXJuIGN1c3RvbVN0b3JlKCdyZWFkb25seScsIChzdG9yZSkgPT4gcHJvbWlzaWZ5UmVxdWVzdChzdG9yZS5nZXQoa2V5KSkpO1xufVxuLyoqXG4gKiBTZXQgYSB2YWx1ZSB3aXRoIGEga2V5LlxuICpcbiAqIEBwYXJhbSBrZXlcbiAqIEBwYXJhbSB2YWx1ZVxuICogQHBhcmFtIGN1c3RvbVN0b3JlIE1ldGhvZCB0byBnZXQgYSBjdXN0b20gc3RvcmUuIFVzZSB3aXRoIGNhdXRpb24gKHNlZSB0aGUgZG9jcykuXG4gKi9cbmZ1bmN0aW9uIHNldChrZXksIHZhbHVlLCBjdXN0b21TdG9yZSA9IGRlZmF1bHRHZXRTdG9yZSgpKSB7XG4gICAgcmV0dXJuIGN1c3RvbVN0b3JlKCdyZWFkd3JpdGUnLCAoc3RvcmUpID0+IHtcbiAgICAgICAgc3RvcmUucHV0KHZhbHVlLCBrZXkpO1xuICAgICAgICByZXR1cm4gcHJvbWlzaWZ5UmVxdWVzdChzdG9yZS50cmFuc2FjdGlvbik7XG4gICAgfSk7XG59XG4vKipcbiAqIFNldCBtdWx0aXBsZSB2YWx1ZXMgYXQgb25jZS4gVGhpcyBpcyBmYXN0ZXIgdGhhbiBjYWxsaW5nIHNldCgpIG11bHRpcGxlIHRpbWVzLlxuICogSXQncyBhbHNvIGF0b21pYyDigJMgaWYgb25lIG9mIHRoZSBwYWlycyBjYW4ndCBiZSBhZGRlZCwgbm9uZSB3aWxsIGJlIGFkZGVkLlxuICpcbiAqIEBwYXJhbSBlbnRyaWVzIEFycmF5IG9mIGVudHJpZXMsIHdoZXJlIGVhY2ggZW50cnkgaXMgYW4gYXJyYXkgb2YgYFtrZXksIHZhbHVlXWAuXG4gKiBAcGFyYW0gY3VzdG9tU3RvcmUgTWV0aG9kIHRvIGdldCBhIGN1c3RvbSBzdG9yZS4gVXNlIHdpdGggY2F1dGlvbiAoc2VlIHRoZSBkb2NzKS5cbiAqL1xuZnVuY3Rpb24gc2V0TWFueShlbnRyaWVzLCBjdXN0b21TdG9yZSA9IGRlZmF1bHRHZXRTdG9yZSgpKSB7XG4gICAgcmV0dXJuIGN1c3RvbVN0b3JlKCdyZWFkd3JpdGUnLCAoc3RvcmUpID0+IHtcbiAgICAgICAgZW50cmllcy5mb3JFYWNoKChlbnRyeSkgPT4gc3RvcmUucHV0KGVudHJ5WzFdLCBlbnRyeVswXSkpO1xuICAgICAgICByZXR1cm4gcHJvbWlzaWZ5UmVxdWVzdChzdG9yZS50cmFuc2FjdGlvbik7XG4gICAgfSk7XG59XG4vKipcbiAqIEdldCBtdWx0aXBsZSB2YWx1ZXMgYnkgdGhlaXIga2V5c1xuICpcbiAqIEBwYXJhbSBrZXlzXG4gKiBAcGFyYW0gY3VzdG9tU3RvcmUgTWV0aG9kIHRvIGdldCBhIGN1c3RvbSBzdG9yZS4gVXNlIHdpdGggY2F1dGlvbiAoc2VlIHRoZSBkb2NzKS5cbiAqL1xuZnVuY3Rpb24gZ2V0TWFueShrZXlzLCBjdXN0b21TdG9yZSA9IGRlZmF1bHRHZXRTdG9yZSgpKSB7XG4gICAgcmV0dXJuIGN1c3RvbVN0b3JlKCdyZWFkb25seScsIChzdG9yZSkgPT4gUHJvbWlzZS5hbGwoa2V5cy5tYXAoKGtleSkgPT4gcHJvbWlzaWZ5UmVxdWVzdChzdG9yZS5nZXQoa2V5KSkpKSk7XG59XG4vKipcbiAqIFVwZGF0ZSBhIHZhbHVlLiBUaGlzIGxldHMgeW91IHNlZSB0aGUgb2xkIHZhbHVlIGFuZCB1cGRhdGUgaXQgYXMgYW4gYXRvbWljIG9wZXJhdGlvbi5cbiAqXG4gKiBAcGFyYW0ga2V5XG4gKiBAcGFyYW0gdXBkYXRlciBBIGNhbGxiYWNrIHRoYXQgdGFrZXMgdGhlIG9sZCB2YWx1ZSBhbmQgcmV0dXJucyBhIG5ldyB2YWx1ZS5cbiAqIEBwYXJhbSBjdXN0b21TdG9yZSBNZXRob2QgdG8gZ2V0IGEgY3VzdG9tIHN0b3JlLiBVc2Ugd2l0aCBjYXV0aW9uIChzZWUgdGhlIGRvY3MpLlxuICovXG5mdW5jdGlvbiB1cGRhdGUoa2V5LCB1cGRhdGVyLCBjdXN0b21TdG9yZSA9IGRlZmF1bHRHZXRTdG9yZSgpKSB7XG4gICAgcmV0dXJuIGN1c3RvbVN0b3JlKCdyZWFkd3JpdGUnLCAoc3RvcmUpID0+IFxuICAgIC8vIE5lZWQgdG8gY3JlYXRlIHRoZSBwcm9taXNlIG1hbnVhbGx5LlxuICAgIC8vIElmIEkgdHJ5IHRvIGNoYWluIHByb21pc2VzLCB0aGUgdHJhbnNhY3Rpb24gY2xvc2VzIGluIGJyb3dzZXJzXG4gICAgLy8gdGhhdCB1c2UgYSBwcm9taXNlIHBvbHlmaWxsIChJRTEwLzExKS5cbiAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHN0b3JlLmdldChrZXkpLm9uc3VjY2VzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgc3RvcmUucHV0KHVwZGF0ZXIodGhpcy5yZXN1bHQpLCBrZXkpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUocHJvbWlzaWZ5UmVxdWVzdChzdG9yZS50cmFuc2FjdGlvbikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH0pKTtcbn1cbi8qKlxuICogRGVsZXRlIGEgcGFydGljdWxhciBrZXkgZnJvbSB0aGUgc3RvcmUuXG4gKlxuICogQHBhcmFtIGtleVxuICogQHBhcmFtIGN1c3RvbVN0b3JlIE1ldGhvZCB0byBnZXQgYSBjdXN0b20gc3RvcmUuIFVzZSB3aXRoIGNhdXRpb24gKHNlZSB0aGUgZG9jcykuXG4gKi9cbmZ1bmN0aW9uIGRlbChrZXksIGN1c3RvbVN0b3JlID0gZGVmYXVsdEdldFN0b3JlKCkpIHtcbiAgICByZXR1cm4gY3VzdG9tU3RvcmUoJ3JlYWR3cml0ZScsIChzdG9yZSkgPT4ge1xuICAgICAgICBzdG9yZS5kZWxldGUoa2V5KTtcbiAgICAgICAgcmV0dXJuIHByb21pc2lmeVJlcXVlc3Qoc3RvcmUudHJhbnNhY3Rpb24pO1xuICAgIH0pO1xufVxuLyoqXG4gKiBEZWxldGUgbXVsdGlwbGUga2V5cyBhdCBvbmNlLlxuICpcbiAqIEBwYXJhbSBrZXlzIExpc3Qgb2Yga2V5cyB0byBkZWxldGUuXG4gKiBAcGFyYW0gY3VzdG9tU3RvcmUgTWV0aG9kIHRvIGdldCBhIGN1c3RvbSBzdG9yZS4gVXNlIHdpdGggY2F1dGlvbiAoc2VlIHRoZSBkb2NzKS5cbiAqL1xuZnVuY3Rpb24gZGVsTWFueShrZXlzLCBjdXN0b21TdG9yZSA9IGRlZmF1bHRHZXRTdG9yZSgpKSB7XG4gICAgcmV0dXJuIGN1c3RvbVN0b3JlKCdyZWFkd3JpdGUnLCAoc3RvcmUpID0+IHtcbiAgICAgICAga2V5cy5mb3JFYWNoKChrZXkpID0+IHN0b3JlLmRlbGV0ZShrZXkpKTtcbiAgICAgICAgcmV0dXJuIHByb21pc2lmeVJlcXVlc3Qoc3RvcmUudHJhbnNhY3Rpb24pO1xuICAgIH0pO1xufVxuLyoqXG4gKiBDbGVhciBhbGwgdmFsdWVzIGluIHRoZSBzdG9yZS5cbiAqXG4gKiBAcGFyYW0gY3VzdG9tU3RvcmUgTWV0aG9kIHRvIGdldCBhIGN1c3RvbSBzdG9yZS4gVXNlIHdpdGggY2F1dGlvbiAoc2VlIHRoZSBkb2NzKS5cbiAqL1xuZnVuY3Rpb24gY2xlYXIoY3VzdG9tU3RvcmUgPSBkZWZhdWx0R2V0U3RvcmUoKSkge1xuICAgIHJldHVybiBjdXN0b21TdG9yZSgncmVhZHdyaXRlJywgKHN0b3JlKSA9PiB7XG4gICAgICAgIHN0b3JlLmNsZWFyKCk7XG4gICAgICAgIHJldHVybiBwcm9taXNpZnlSZXF1ZXN0KHN0b3JlLnRyYW5zYWN0aW9uKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGVhY2hDdXJzb3Ioc3RvcmUsIGNhbGxiYWNrKSB7XG4gICAgc3RvcmUub3BlbkN1cnNvcigpLm9uc3VjY2VzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnJlc3VsdClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FsbGJhY2sodGhpcy5yZXN1bHQpO1xuICAgICAgICB0aGlzLnJlc3VsdC5jb250aW51ZSgpO1xuICAgIH07XG4gICAgcmV0dXJuIHByb21pc2lmeVJlcXVlc3Qoc3RvcmUudHJhbnNhY3Rpb24pO1xufVxuLyoqXG4gKiBHZXQgYWxsIGtleXMgaW4gdGhlIHN0b3JlLlxuICpcbiAqIEBwYXJhbSBjdXN0b21TdG9yZSBNZXRob2QgdG8gZ2V0IGEgY3VzdG9tIHN0b3JlLiBVc2Ugd2l0aCBjYXV0aW9uIChzZWUgdGhlIGRvY3MpLlxuICovXG5mdW5jdGlvbiBrZXlzKGN1c3RvbVN0b3JlID0gZGVmYXVsdEdldFN0b3JlKCkpIHtcbiAgICByZXR1cm4gY3VzdG9tU3RvcmUoJ3JlYWRvbmx5JywgKHN0b3JlKSA9PiB7XG4gICAgICAgIC8vIEZhc3QgcGF0aCBmb3IgbW9kZXJuIGJyb3dzZXJzXG4gICAgICAgIGlmIChzdG9yZS5nZXRBbGxLZXlzKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJvbWlzaWZ5UmVxdWVzdChzdG9yZS5nZXRBbGxLZXlzKCkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gW107XG4gICAgICAgIHJldHVybiBlYWNoQ3Vyc29yKHN0b3JlLCAoY3Vyc29yKSA9PiBpdGVtcy5wdXNoKGN1cnNvci5rZXkpKS50aGVuKCgpID0+IGl0ZW1zKTtcbiAgICB9KTtcbn1cbi8qKlxuICogR2V0IGFsbCB2YWx1ZXMgaW4gdGhlIHN0b3JlLlxuICpcbiAqIEBwYXJhbSBjdXN0b21TdG9yZSBNZXRob2QgdG8gZ2V0IGEgY3VzdG9tIHN0b3JlLiBVc2Ugd2l0aCBjYXV0aW9uIChzZWUgdGhlIGRvY3MpLlxuICovXG5mdW5jdGlvbiB2YWx1ZXMoY3VzdG9tU3RvcmUgPSBkZWZhdWx0R2V0U3RvcmUoKSkge1xuICAgIHJldHVybiBjdXN0b21TdG9yZSgncmVhZG9ubHknLCAoc3RvcmUpID0+IHtcbiAgICAgICAgLy8gRmFzdCBwYXRoIGZvciBtb2Rlcm4gYnJvd3NlcnNcbiAgICAgICAgaWYgKHN0b3JlLmdldEFsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHByb21pc2lmeVJlcXVlc3Qoc3RvcmUuZ2V0QWxsKCkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gW107XG4gICAgICAgIHJldHVybiBlYWNoQ3Vyc29yKHN0b3JlLCAoY3Vyc29yKSA9PiBpdGVtcy5wdXNoKGN1cnNvci52YWx1ZSkpLnRoZW4oKCkgPT4gaXRlbXMpO1xuICAgIH0pO1xufVxuLyoqXG4gKiBHZXQgYWxsIGVudHJpZXMgaW4gdGhlIHN0b3JlLiBFYWNoIGVudHJ5IGlzIGFuIGFycmF5IG9mIGBba2V5LCB2YWx1ZV1gLlxuICpcbiAqIEBwYXJhbSBjdXN0b21TdG9yZSBNZXRob2QgdG8gZ2V0IGEgY3VzdG9tIHN0b3JlLiBVc2Ugd2l0aCBjYXV0aW9uIChzZWUgdGhlIGRvY3MpLlxuICovXG5mdW5jdGlvbiBlbnRyaWVzKGN1c3RvbVN0b3JlID0gZGVmYXVsdEdldFN0b3JlKCkpIHtcbiAgICByZXR1cm4gY3VzdG9tU3RvcmUoJ3JlYWRvbmx5JywgKHN0b3JlKSA9PiB7XG4gICAgICAgIC8vIEZhc3QgcGF0aCBmb3IgbW9kZXJuIGJyb3dzZXJzXG4gICAgICAgIC8vIChhbHRob3VnaCwgaG9wZWZ1bGx5IHdlJ2xsIGdldCBhIHNpbXBsZXIgcGF0aCBzb21lIGRheSlcbiAgICAgICAgaWYgKHN0b3JlLmdldEFsbCAmJiBzdG9yZS5nZXRBbGxLZXlzKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoW1xuICAgICAgICAgICAgICAgIHByb21pc2lmeVJlcXVlc3Qoc3RvcmUuZ2V0QWxsS2V5cygpKSxcbiAgICAgICAgICAgICAgICBwcm9taXNpZnlSZXF1ZXN0KHN0b3JlLmdldEFsbCgpKSxcbiAgICAgICAgICAgIF0pLnRoZW4oKFtrZXlzLCB2YWx1ZXNdKSA9PiBrZXlzLm1hcCgoa2V5LCBpKSA9PiBba2V5LCB2YWx1ZXNbaV1dKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXRlbXMgPSBbXTtcbiAgICAgICAgcmV0dXJuIGN1c3RvbVN0b3JlKCdyZWFkb25seScsIChzdG9yZSkgPT4gZWFjaEN1cnNvcihzdG9yZSwgKGN1cnNvcikgPT4gaXRlbXMucHVzaChbY3Vyc29yLmtleSwgY3Vyc29yLnZhbHVlXSkpLnRoZW4oKCkgPT4gaXRlbXMpKTtcbiAgICB9KTtcbn1cblxuZXhwb3J0IHsgY2xlYXIsIGNyZWF0ZVN0b3JlLCBkZWwsIGRlbE1hbnksIGVudHJpZXMsIGdldCwgZ2V0TWFueSwga2V5cywgcHJvbWlzaWZ5UmVxdWVzdCwgc2V0LCBzZXRNYW55LCB1cGRhdGUsIHZhbHVlcyB9O1xuIiwiLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cblxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXG52YXIgdD1mdW5jdGlvbihyLGUpe3JldHVybih0PU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbih0LHIpe3QuX19wcm90b19fPXJ9fHxmdW5jdGlvbih0LHIpe2Zvcih2YXIgZSBpbiByKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLGUpJiYodFtlXT1yW2VdKX0pKHIsZSl9O2Z1bmN0aW9uIHIocixlKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlJiZudWxsIT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIitTdHJpbmcoZSkrXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtmdW5jdGlvbiBpKCl7dGhpcy5jb25zdHJ1Y3Rvcj1yfXQocixlKSxyLnByb3RvdHlwZT1udWxsPT09ZT9PYmplY3QuY3JlYXRlKGUpOihpLnByb3RvdHlwZT1lLnByb3RvdHlwZSxuZXcgaSl9ZnVuY3Rpb24gZSh0KXt2YXIgcj1cIlwiO0FycmF5LmlzQXJyYXkodCl8fCh0PVt0XSk7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspe3ZhciBpPXRbZV07aWYoaS50eXBlPT09Xy5DTE9TRV9QQVRIKXIrPVwielwiO2Vsc2UgaWYoaS50eXBlPT09Xy5IT1JJWl9MSU5FX1RPKXIrPShpLnJlbGF0aXZlP1wiaFwiOlwiSFwiKStpLng7ZWxzZSBpZihpLnR5cGU9PT1fLlZFUlRfTElORV9UTylyKz0oaS5yZWxhdGl2ZT9cInZcIjpcIlZcIikraS55O2Vsc2UgaWYoaS50eXBlPT09Xy5NT1ZFX1RPKXIrPShpLnJlbGF0aXZlP1wibVwiOlwiTVwiKStpLngrXCIgXCIraS55O2Vsc2UgaWYoaS50eXBlPT09Xy5MSU5FX1RPKXIrPShpLnJlbGF0aXZlP1wibFwiOlwiTFwiKStpLngrXCIgXCIraS55O2Vsc2UgaWYoaS50eXBlPT09Xy5DVVJWRV9UTylyKz0oaS5yZWxhdGl2ZT9cImNcIjpcIkNcIikraS54MStcIiBcIitpLnkxK1wiIFwiK2kueDIrXCIgXCIraS55MitcIiBcIitpLngrXCIgXCIraS55O2Vsc2UgaWYoaS50eXBlPT09Xy5TTU9PVEhfQ1VSVkVfVE8pcis9KGkucmVsYXRpdmU/XCJzXCI6XCJTXCIpK2kueDIrXCIgXCIraS55MitcIiBcIitpLngrXCIgXCIraS55O2Vsc2UgaWYoaS50eXBlPT09Xy5RVUFEX1RPKXIrPShpLnJlbGF0aXZlP1wicVwiOlwiUVwiKStpLngxK1wiIFwiK2kueTErXCIgXCIraS54K1wiIFwiK2kueTtlbHNlIGlmKGkudHlwZT09PV8uU01PT1RIX1FVQURfVE8pcis9KGkucmVsYXRpdmU/XCJ0XCI6XCJUXCIpK2kueCtcIiBcIitpLnk7ZWxzZXtpZihpLnR5cGUhPT1fLkFSQyl0aHJvdyBuZXcgRXJyb3IoJ1VuZXhwZWN0ZWQgY29tbWFuZCB0eXBlIFwiJytpLnR5cGUrJ1wiIGF0IGluZGV4ICcrZStcIi5cIik7cis9KGkucmVsYXRpdmU/XCJhXCI6XCJBXCIpK2kuclgrXCIgXCIraS5yWStcIiBcIitpLnhSb3QrXCIgXCIrICtpLmxBcmNGbGFnK1wiIFwiKyAraS5zd2VlcEZsYWcrXCIgXCIraS54K1wiIFwiK2kueX19cmV0dXJuIHJ9ZnVuY3Rpb24gaSh0LHIpe3ZhciBlPXRbMF0saT10WzFdO3JldHVybltlKk1hdGguY29zKHIpLWkqTWF0aC5zaW4ociksZSpNYXRoLnNpbihyKStpKk1hdGguY29zKHIpXX1mdW5jdGlvbiBhKCl7Zm9yKHZhciB0PVtdLHI9MDtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKXRbcl09YXJndW1lbnRzW3JdO2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKWlmKFwibnVtYmVyXCIhPXR5cGVvZiB0W2VdKXRocm93IG5ldyBFcnJvcihcImFzc2VydE51bWJlcnMgYXJndW1lbnRzW1wiK2UrXCJdIGlzIG5vdCBhIG51bWJlci4gXCIrdHlwZW9mIHRbZV0rXCIgPT0gdHlwZW9mIFwiK3RbZV0pO3JldHVybiEwfXZhciBuPU1hdGguUEk7ZnVuY3Rpb24gbyh0LHIsZSl7dC5sQXJjRmxhZz0wPT09dC5sQXJjRmxhZz8wOjEsdC5zd2VlcEZsYWc9MD09PXQuc3dlZXBGbGFnPzA6MTt2YXIgYT10LnJYLG89dC5yWSxzPXQueCx1PXQueTthPU1hdGguYWJzKHQuclgpLG89TWF0aC5hYnModC5yWSk7dmFyIGg9aShbKHItcykvMiwoZS11KS8yXSwtdC54Um90LzE4MCpuKSxjPWhbMF0seT1oWzFdLHA9TWF0aC5wb3coYywyKS9NYXRoLnBvdyhhLDIpK01hdGgucG93KHksMikvTWF0aC5wb3cobywyKTsxPHAmJihhKj1NYXRoLnNxcnQocCksbyo9TWF0aC5zcXJ0KHApKSx0LnJYPWEsdC5yWT1vO3ZhciBtPU1hdGgucG93KGEsMikqTWF0aC5wb3coeSwyKStNYXRoLnBvdyhvLDIpKk1hdGgucG93KGMsMiksTz0odC5sQXJjRmxhZyE9PXQuc3dlZXBGbGFnPzE6LTEpKk1hdGguc3FydChNYXRoLm1heCgwLChNYXRoLnBvdyhhLDIpKk1hdGgucG93KG8sMiktbSkvbSkpLGw9YSp5L28qTyxUPS1vKmMvYSpPLHY9aShbbCxUXSx0LnhSb3QvMTgwKm4pO3QuY1g9dlswXSsocitzKS8yLHQuY1k9dlsxXSsoZSt1KS8yLHQucGhpMT1NYXRoLmF0YW4yKCh5LVQpL28sKGMtbCkvYSksdC5waGkyPU1hdGguYXRhbjIoKC15LVQpL28sKC1jLWwpL2EpLDA9PT10LnN3ZWVwRmxhZyYmdC5waGkyPnQucGhpMSYmKHQucGhpMi09MipuKSwxPT09dC5zd2VlcEZsYWcmJnQucGhpMjx0LnBoaTEmJih0LnBoaTIrPTIqbiksdC5waGkxKj0xODAvbix0LnBoaTIqPTE4MC9ufWZ1bmN0aW9uIHModCxyLGUpe2EodCxyLGUpO3ZhciBpPXQqdCtyKnItZSplO2lmKDA+aSlyZXR1cm5bXTtpZigwPT09aSlyZXR1cm5bW3QqZS8odCp0K3IqciksciplLyh0KnQrcipyKV1dO3ZhciBuPU1hdGguc3FydChpKTtyZXR1cm5bWyh0KmUrcipuKS8odCp0K3IqciksKHIqZS10Km4pLyh0KnQrcipyKV0sWyh0KmUtcipuKS8odCp0K3IqciksKHIqZSt0Km4pLyh0KnQrcipyKV1dfXZhciB1LGg9TWF0aC5QSS8xODA7ZnVuY3Rpb24gYyh0LHIsZSl7cmV0dXJuKDEtZSkqdCtlKnJ9ZnVuY3Rpb24geSh0LHIsZSxpKXtyZXR1cm4gdCtNYXRoLmNvcyhpLzE4MCpuKSpyK01hdGguc2luKGkvMTgwKm4pKmV9ZnVuY3Rpb24gcCh0LHIsZSxpKXt2YXIgYT0xZS02LG49ci10LG89ZS1yLHM9MypuKzMqKGktZSktNipvLHU9Niooby1uKSxoPTMqbjtyZXR1cm4gTWF0aC5hYnMocyk8YT9bLWgvdV06ZnVuY3Rpb24odCxyLGUpe3ZvaWQgMD09PWUmJihlPTFlLTYpO3ZhciBpPXQqdC80LXI7aWYoaTwtZSlyZXR1cm5bXTtpZihpPD1lKXJldHVyblstdC8yXTt2YXIgYT1NYXRoLnNxcnQoaSk7cmV0dXJuWy10LzItYSwtdC8yK2FdfSh1L3MsaC9zLGEpfWZ1bmN0aW9uIG0odCxyLGUsaSxhKXt2YXIgbj0xLWE7cmV0dXJuIHQqKG4qbipuKStyKigzKm4qbiphKStlKigzKm4qYSphKStpKihhKmEqYSl9IWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIHIoKXtyZXR1cm4gdSgoZnVuY3Rpb24odCxyLGUpe3JldHVybiB0LnJlbGF0aXZlJiYodm9pZCAwIT09dC54MSYmKHQueDErPXIpLHZvaWQgMCE9PXQueTEmJih0LnkxKz1lKSx2b2lkIDAhPT10LngyJiYodC54Mis9ciksdm9pZCAwIT09dC55MiYmKHQueTIrPWUpLHZvaWQgMCE9PXQueCYmKHQueCs9ciksdm9pZCAwIT09dC55JiYodC55Kz1lKSx0LnJlbGF0aXZlPSExKSx0fSkpfWZ1bmN0aW9uIGUoKXt2YXIgdD1OYU4scj1OYU4sZT1OYU4saT1OYU47cmV0dXJuIHUoKGZ1bmN0aW9uKGEsbixvKXtyZXR1cm4gYS50eXBlJl8uU01PT1RIX0NVUlZFX1RPJiYoYS50eXBlPV8uQ1VSVkVfVE8sdD1pc05hTih0KT9uOnQscj1pc05hTihyKT9vOnIsYS54MT1hLnJlbGF0aXZlP24tdDoyKm4tdCxhLnkxPWEucmVsYXRpdmU/by1yOjIqby1yKSxhLnR5cGUmXy5DVVJWRV9UTz8odD1hLnJlbGF0aXZlP24rYS54MjphLngyLHI9YS5yZWxhdGl2ZT9vK2EueTI6YS55Mik6KHQ9TmFOLHI9TmFOKSxhLnR5cGUmXy5TTU9PVEhfUVVBRF9UTyYmKGEudHlwZT1fLlFVQURfVE8sZT1pc05hTihlKT9uOmUsaT1pc05hTihpKT9vOmksYS54MT1hLnJlbGF0aXZlP24tZToyKm4tZSxhLnkxPWEucmVsYXRpdmU/by1pOjIqby1pKSxhLnR5cGUmXy5RVUFEX1RPPyhlPWEucmVsYXRpdmU/bithLngxOmEueDEsaT1hLnJlbGF0aXZlP28rYS55MTphLnkxKTooZT1OYU4saT1OYU4pLGF9KSl9ZnVuY3Rpb24gbigpe3ZhciB0PU5hTixyPU5hTjtyZXR1cm4gdSgoZnVuY3Rpb24oZSxpLGEpe2lmKGUudHlwZSZfLlNNT09USF9RVUFEX1RPJiYoZS50eXBlPV8uUVVBRF9UTyx0PWlzTmFOKHQpP2k6dCxyPWlzTmFOKHIpP2E6cixlLngxPWUucmVsYXRpdmU/aS10OjIqaS10LGUueTE9ZS5yZWxhdGl2ZT9hLXI6MiphLXIpLGUudHlwZSZfLlFVQURfVE8pe3Q9ZS5yZWxhdGl2ZT9pK2UueDE6ZS54MSxyPWUucmVsYXRpdmU/YStlLnkxOmUueTE7dmFyIG49ZS54MSxvPWUueTE7ZS50eXBlPV8uQ1VSVkVfVE8sZS54MT0oKGUucmVsYXRpdmU/MDppKSsyKm4pLzMsZS55MT0oKGUucmVsYXRpdmU/MDphKSsyKm8pLzMsZS54Mj0oZS54KzIqbikvMyxlLnkyPShlLnkrMipvKS8zfWVsc2UgdD1OYU4scj1OYU47cmV0dXJuIGV9KSl9ZnVuY3Rpb24gdSh0KXt2YXIgcj0wLGU9MCxpPU5hTixhPU5hTjtyZXR1cm4gZnVuY3Rpb24obil7aWYoaXNOYU4oaSkmJiEobi50eXBlJl8uTU9WRV9UTykpdGhyb3cgbmV3IEVycm9yKFwicGF0aCBtdXN0IHN0YXJ0IHdpdGggbW92ZXRvXCIpO3ZhciBvPXQobixyLGUsaSxhKTtyZXR1cm4gbi50eXBlJl8uQ0xPU0VfUEFUSCYmKHI9aSxlPWEpLHZvaWQgMCE9PW4ueCYmKHI9bi5yZWxhdGl2ZT9yK24ueDpuLngpLHZvaWQgMCE9PW4ueSYmKGU9bi5yZWxhdGl2ZT9lK24ueTpuLnkpLG4udHlwZSZfLk1PVkVfVE8mJihpPXIsYT1lKSxvfX1mdW5jdGlvbiBPKHQscixlLGksbixvKXtyZXR1cm4gYSh0LHIsZSxpLG4sbyksdSgoZnVuY3Rpb24oYSxzLHUsaCl7dmFyIGM9YS54MSx5PWEueDIscD1hLnJlbGF0aXZlJiYhaXNOYU4oaCksbT12b2lkIDAhPT1hLng/YS54OnA/MDpzLE89dm9pZCAwIT09YS55P2EueTpwPzA6dTtmdW5jdGlvbiBsKHQpe3JldHVybiB0KnR9YS50eXBlJl8uSE9SSVpfTElORV9UTyYmMCE9PXImJihhLnR5cGU9Xy5MSU5FX1RPLGEueT1hLnJlbGF0aXZlPzA6dSksYS50eXBlJl8uVkVSVF9MSU5FX1RPJiYwIT09ZSYmKGEudHlwZT1fLkxJTkVfVE8sYS54PWEucmVsYXRpdmU/MDpzKSx2b2lkIDAhPT1hLngmJihhLng9YS54KnQrTyplKyhwPzA6bikpLHZvaWQgMCE9PWEueSYmKGEueT1tKnIrYS55KmkrKHA/MDpvKSksdm9pZCAwIT09YS54MSYmKGEueDE9YS54MSp0K2EueTEqZSsocD8wOm4pKSx2b2lkIDAhPT1hLnkxJiYoYS55MT1jKnIrYS55MSppKyhwPzA6bykpLHZvaWQgMCE9PWEueDImJihhLngyPWEueDIqdCthLnkyKmUrKHA/MDpuKSksdm9pZCAwIT09YS55MiYmKGEueTI9eSpyK2EueTIqaSsocD8wOm8pKTt2YXIgVD10KmktciplO2lmKHZvaWQgMCE9PWEueFJvdCYmKDEhPT10fHwwIT09cnx8MCE9PWV8fDEhPT1pKSlpZigwPT09VClkZWxldGUgYS5yWCxkZWxldGUgYS5yWSxkZWxldGUgYS54Um90LGRlbGV0ZSBhLmxBcmNGbGFnLGRlbGV0ZSBhLnN3ZWVwRmxhZyxhLnR5cGU9Xy5MSU5FX1RPO2Vsc2V7dmFyIHY9YS54Um90Kk1hdGguUEkvMTgwLGY9TWF0aC5zaW4odiksTj1NYXRoLmNvcyh2KSx4PTEvbChhLnJYKSxkPTEvbChhLnJZKSxFPWwoTikqeCtsKGYpKmQsQT0yKmYqTiooeC1kKSxDPWwoZikqeCtsKE4pKmQsTT1FKmkqaS1BKnIqaStDKnIqcixSPUEqKHQqaStyKmUpLTIqKEUqZSppK0MqdCpyKSxnPUUqZSplLUEqdCplK0MqdCp0LEk9KE1hdGguYXRhbjIoUixNLWcpK01hdGguUEkpJU1hdGguUEkvMixTPU1hdGguc2luKEkpLEw9TWF0aC5jb3MoSSk7YS5yWD1NYXRoLmFicyhUKS9NYXRoLnNxcnQoTSpsKEwpK1IqUypMK2cqbChTKSksYS5yWT1NYXRoLmFicyhUKS9NYXRoLnNxcnQoTSpsKFMpLVIqUypMK2cqbChMKSksYS54Um90PTE4MCpJL01hdGguUEl9cmV0dXJuIHZvaWQgMCE9PWEuc3dlZXBGbGFnJiYwPlQmJihhLnN3ZWVwRmxhZz0rIWEuc3dlZXBGbGFnKSxhfSkpfWZ1bmN0aW9uIGwoKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHI9e307Zm9yKHZhciBlIGluIHQpcltlXT10W2VdO3JldHVybiByfX10LlJPVU5EPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIHIocil7cmV0dXJuIE1hdGgucm91bmQocip0KS90fXJldHVybiB2b2lkIDA9PT10JiYodD0xZTEzKSxhKHQpLGZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDAhPT10LngxJiYodC54MT1yKHQueDEpKSx2b2lkIDAhPT10LnkxJiYodC55MT1yKHQueTEpKSx2b2lkIDAhPT10LngyJiYodC54Mj1yKHQueDIpKSx2b2lkIDAhPT10LnkyJiYodC55Mj1yKHQueTIpKSx2b2lkIDAhPT10LngmJih0Lng9cih0LngpKSx2b2lkIDAhPT10LnkmJih0Lnk9cih0LnkpKSx2b2lkIDAhPT10LnJYJiYodC5yWD1yKHQuclgpKSx2b2lkIDAhPT10LnJZJiYodC5yWT1yKHQuclkpKSx0fX0sdC5UT19BQlM9cix0LlRPX1JFTD1mdW5jdGlvbigpe3JldHVybiB1KChmdW5jdGlvbih0LHIsZSl7cmV0dXJuIHQucmVsYXRpdmV8fCh2b2lkIDAhPT10LngxJiYodC54MS09ciksdm9pZCAwIT09dC55MSYmKHQueTEtPWUpLHZvaWQgMCE9PXQueDImJih0LngyLT1yKSx2b2lkIDAhPT10LnkyJiYodC55Mi09ZSksdm9pZCAwIT09dC54JiYodC54LT1yKSx2b2lkIDAhPT10LnkmJih0LnktPWUpLHQucmVsYXRpdmU9ITApLHR9KSl9LHQuTk9STUFMSVpFX0hWWj1mdW5jdGlvbih0LHIsZSl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSEwKSx2b2lkIDA9PT1yJiYocj0hMCksdm9pZCAwPT09ZSYmKGU9ITApLHUoKGZ1bmN0aW9uKGksYSxuLG8scyl7aWYoaXNOYU4obykmJiEoaS50eXBlJl8uTU9WRV9UTykpdGhyb3cgbmV3IEVycm9yKFwicGF0aCBtdXN0IHN0YXJ0IHdpdGggbW92ZXRvXCIpO3JldHVybiByJiZpLnR5cGUmXy5IT1JJWl9MSU5FX1RPJiYoaS50eXBlPV8uTElORV9UTyxpLnk9aS5yZWxhdGl2ZT8wOm4pLGUmJmkudHlwZSZfLlZFUlRfTElORV9UTyYmKGkudHlwZT1fLkxJTkVfVE8saS54PWkucmVsYXRpdmU/MDphKSx0JiZpLnR5cGUmXy5DTE9TRV9QQVRIJiYoaS50eXBlPV8uTElORV9UTyxpLng9aS5yZWxhdGl2ZT9vLWE6byxpLnk9aS5yZWxhdGl2ZT9zLW46cyksaS50eXBlJl8uQVJDJiYoMD09PWkuclh8fDA9PT1pLnJZKSYmKGkudHlwZT1fLkxJTkVfVE8sZGVsZXRlIGkuclgsZGVsZXRlIGkuclksZGVsZXRlIGkueFJvdCxkZWxldGUgaS5sQXJjRmxhZyxkZWxldGUgaS5zd2VlcEZsYWcpLGl9KSl9LHQuTk9STUFMSVpFX1NUPWUsdC5RVF9UT19DPW4sdC5JTkZPPXUsdC5TQU5JVElaRT1mdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD0wKSxhKHQpO3ZhciByPU5hTixlPU5hTixpPU5hTixuPU5hTjtyZXR1cm4gdSgoZnVuY3Rpb24oYSxvLHMsdSxoKXt2YXIgYz1NYXRoLmFicyx5PSExLHA9MCxtPTA7aWYoYS50eXBlJl8uU01PT1RIX0NVUlZFX1RPJiYocD1pc05hTihyKT8wOm8tcixtPWlzTmFOKGUpPzA6cy1lKSxhLnR5cGUmKF8uQ1VSVkVfVE98Xy5TTU9PVEhfQ1VSVkVfVE8pPyhyPWEucmVsYXRpdmU/bythLngyOmEueDIsZT1hLnJlbGF0aXZlP3MrYS55MjphLnkyKToocj1OYU4sZT1OYU4pLGEudHlwZSZfLlNNT09USF9RVUFEX1RPPyhpPWlzTmFOKGkpP286MipvLWksbj1pc05hTihuKT9zOjIqcy1uKTphLnR5cGUmXy5RVUFEX1RPPyhpPWEucmVsYXRpdmU/bythLngxOmEueDEsbj1hLnJlbGF0aXZlP3MrYS55MTphLnkyKTooaT1OYU4sbj1OYU4pLGEudHlwZSZfLkxJTkVfQ09NTUFORFN8fGEudHlwZSZfLkFSQyYmKDA9PT1hLnJYfHwwPT09YS5yWXx8IWEubEFyY0ZsYWcpfHxhLnR5cGUmXy5DVVJWRV9UT3x8YS50eXBlJl8uU01PT1RIX0NVUlZFX1RPfHxhLnR5cGUmXy5RVUFEX1RPfHxhLnR5cGUmXy5TTU9PVEhfUVVBRF9UTyl7dmFyIE89dm9pZCAwPT09YS54PzA6YS5yZWxhdGl2ZT9hLng6YS54LW8sbD12b2lkIDA9PT1hLnk/MDphLnJlbGF0aXZlP2EueTphLnktcztwPWlzTmFOKGkpP3ZvaWQgMD09PWEueDE/cDphLnJlbGF0aXZlP2EueDphLngxLW86aS1vLG09aXNOYU4obik/dm9pZCAwPT09YS55MT9tOmEucmVsYXRpdmU/YS55OmEueTEtczpuLXM7dmFyIFQ9dm9pZCAwPT09YS54Mj8wOmEucmVsYXRpdmU/YS54OmEueDItbyx2PXZvaWQgMD09PWEueTI/MDphLnJlbGF0aXZlP2EueTphLnkyLXM7YyhPKTw9dCYmYyhsKTw9dCYmYyhwKTw9dCYmYyhtKTw9dCYmYyhUKTw9dCYmYyh2KTw9dCYmKHk9ITApfXJldHVybiBhLnR5cGUmXy5DTE9TRV9QQVRIJiZjKG8tdSk8PXQmJmMocy1oKTw9dCYmKHk9ITApLHk/W106YX0pKX0sdC5NQVRSSVg9Tyx0LlJPVEFURT1mdW5jdGlvbih0LHIsZSl7dm9pZCAwPT09ciYmKHI9MCksdm9pZCAwPT09ZSYmKGU9MCksYSh0LHIsZSk7dmFyIGk9TWF0aC5zaW4odCksbj1NYXRoLmNvcyh0KTtyZXR1cm4gTyhuLGksLWksbixyLXIqbitlKmksZS1yKmktZSpuKX0sdC5UUkFOU0xBVEU9ZnVuY3Rpb24odCxyKXtyZXR1cm4gdm9pZCAwPT09ciYmKHI9MCksYSh0LHIpLE8oMSwwLDAsMSx0LHIpfSx0LlNDQUxFPWZ1bmN0aW9uKHQscil7cmV0dXJuIHZvaWQgMD09PXImJihyPXQpLGEodCxyKSxPKHQsMCwwLHIsMCwwKX0sdC5TS0VXX1g9ZnVuY3Rpb24odCl7cmV0dXJuIGEodCksTygxLDAsTWF0aC5hdGFuKHQpLDEsMCwwKX0sdC5TS0VXX1k9ZnVuY3Rpb24odCl7cmV0dXJuIGEodCksTygxLE1hdGguYXRhbih0KSwwLDEsMCwwKX0sdC5YX0FYSVNfU1lNTUVUUlk9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PTApLGEodCksTygtMSwwLDAsMSx0LDApfSx0LllfQVhJU19TWU1NRVRSWT1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9MCksYSh0KSxPKDEsMCwwLC0xLDAsdCl9LHQuQV9UT19DPWZ1bmN0aW9uKCl7cmV0dXJuIHUoKGZ1bmN0aW9uKHQscixlKXtyZXR1cm4gXy5BUkM9PT10LnR5cGU/ZnVuY3Rpb24odCxyLGUpe3ZhciBhLG4scyx1O3QuY1h8fG8odCxyLGUpO2Zvcih2YXIgeT1NYXRoLm1pbih0LnBoaTEsdC5waGkyKSxwPU1hdGgubWF4KHQucGhpMSx0LnBoaTIpLXksbT1NYXRoLmNlaWwocC85MCksTz1uZXcgQXJyYXkobSksbD1yLFQ9ZSx2PTA7djxtO3YrKyl7dmFyIGY9Yyh0LnBoaTEsdC5waGkyLHYvbSksTj1jKHQucGhpMSx0LnBoaTIsKHYrMSkvbSkseD1OLWYsZD00LzMqTWF0aC50YW4oeCpoLzQpLEU9W01hdGguY29zKGYqaCktZCpNYXRoLnNpbihmKmgpLE1hdGguc2luKGYqaCkrZCpNYXRoLmNvcyhmKmgpXSxBPUVbMF0sQz1FWzFdLE09W01hdGguY29zKE4qaCksTWF0aC5zaW4oTipoKV0sUj1NWzBdLGc9TVsxXSxJPVtSK2QqTWF0aC5zaW4oTipoKSxnLWQqTWF0aC5jb3MoTipoKV0sUz1JWzBdLEw9SVsxXTtPW3ZdPXtyZWxhdGl2ZTp0LnJlbGF0aXZlLHR5cGU6Xy5DVVJWRV9UT307dmFyIEg9ZnVuY3Rpb24ocixlKXt2YXIgYT1pKFtyKnQuclgsZSp0LnJZXSx0LnhSb3QpLG49YVswXSxvPWFbMV07cmV0dXJuW3QuY1grbix0LmNZK29dfTthPUgoQSxDKSxPW3ZdLngxPWFbMF0sT1t2XS55MT1hWzFdLG49SChTLEwpLE9bdl0ueDI9blswXSxPW3ZdLnkyPW5bMV0scz1IKFIsZyksT1t2XS54PXNbMF0sT1t2XS55PXNbMV0sdC5yZWxhdGl2ZSYmKE9bdl0ueDEtPWwsT1t2XS55MS09VCxPW3ZdLngyLT1sLE9bdl0ueTItPVQsT1t2XS54LT1sLE9bdl0ueS09VCksbD0odT1bT1t2XS54LE9bdl0ueV0pWzBdLFQ9dVsxXX1yZXR1cm4gT30odCx0LnJlbGF0aXZlPzA6cix0LnJlbGF0aXZlPzA6ZSk6dH0pKX0sdC5BTk5PVEFURV9BUkNTPWZ1bmN0aW9uKCl7cmV0dXJuIHUoKGZ1bmN0aW9uKHQscixlKXtyZXR1cm4gdC5yZWxhdGl2ZSYmKHI9MCxlPTApLF8uQVJDPT09dC50eXBlJiZvKHQscixlKSx0fSkpfSx0LkNMT05FPWwsdC5DQUxDVUxBVEVfQk9VTkRTPWZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24odCl7dmFyIHI9e307Zm9yKHZhciBlIGluIHQpcltlXT10W2VdO3JldHVybiByfSxpPXIoKSxhPW4oKSxoPWUoKSxjPXUoKGZ1bmN0aW9uKHIsZSxuKXt2YXIgdT1oKGEoaSh0KHIpKSkpO2Z1bmN0aW9uIE8odCl7dD5jLm1heFgmJihjLm1heFg9dCksdDxjLm1pblgmJihjLm1pblg9dCl9ZnVuY3Rpb24gbCh0KXt0PmMubWF4WSYmKGMubWF4WT10KSx0PGMubWluWSYmKGMubWluWT10KX1pZih1LnR5cGUmXy5EUkFXSU5HX0NPTU1BTkRTJiYoTyhlKSxsKG4pKSx1LnR5cGUmXy5IT1JJWl9MSU5FX1RPJiZPKHUueCksdS50eXBlJl8uVkVSVF9MSU5FX1RPJiZsKHUueSksdS50eXBlJl8uTElORV9UTyYmKE8odS54KSxsKHUueSkpLHUudHlwZSZfLkNVUlZFX1RPKXtPKHUueCksbCh1LnkpO2Zvcih2YXIgVD0wLHY9cChlLHUueDEsdS54Mix1LngpO1Q8di5sZW5ndGg7VCsrKXswPCh3PXZbVF0pJiYxPncmJk8obShlLHUueDEsdS54Mix1LngsdykpfWZvcih2YXIgZj0wLE49cChuLHUueTEsdS55Mix1LnkpO2Y8Ti5sZW5ndGg7ZisrKXswPCh3PU5bZl0pJiYxPncmJmwobShuLHUueTEsdS55Mix1LnksdykpfX1pZih1LnR5cGUmXy5BUkMpe08odS54KSxsKHUueSksbyh1LGUsbik7Zm9yKHZhciB4PXUueFJvdC8xODAqTWF0aC5QSSxkPU1hdGguY29zKHgpKnUuclgsRT1NYXRoLnNpbih4KSp1LnJYLEE9LU1hdGguc2luKHgpKnUuclksQz1NYXRoLmNvcyh4KSp1LnJZLE09dS5waGkxPHUucGhpMj9bdS5waGkxLHUucGhpMl06LTE4MD51LnBoaTI/W3UucGhpMiszNjAsdS5waGkxKzM2MF06W3UucGhpMix1LnBoaTFdLFI9TVswXSxnPU1bMV0sST1mdW5jdGlvbih0KXt2YXIgcj10WzBdLGU9dFsxXSxpPTE4MCpNYXRoLmF0YW4yKGUscikvTWF0aC5QSTtyZXR1cm4gaTxSP2krMzYwOml9LFM9MCxMPXMoQSwtZCwwKS5tYXAoSSk7UzxMLmxlbmd0aDtTKyspeyh3PUxbU10pPlImJnc8ZyYmTyh5KHUuY1gsZCxBLHcpKX1mb3IodmFyIEg9MCxVPXMoQywtRSwwKS5tYXAoSSk7SDxVLmxlbmd0aDtIKyspe3ZhciB3Oyh3PVVbSF0pPlImJnc8ZyYmbCh5KHUuY1ksRSxDLHcpKX19cmV0dXJuIHJ9KSk7cmV0dXJuIGMubWluWD0xLzAsYy5tYXhYPS0xLzAsYy5taW5ZPTEvMCxjLm1heFk9LTEvMCxjfX0odXx8KHU9e30pKTt2YXIgTyxsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUucm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtKHUuUk9VTkQodCkpfSx0LnByb3RvdHlwZS50b0Ficz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRyYW5zZm9ybSh1LlRPX0FCUygpKX0sdC5wcm90b3R5cGUudG9SZWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0odS5UT19SRUwoKSl9LHQucHJvdG90eXBlLm5vcm1hbGl6ZUhWWj1mdW5jdGlvbih0LHIsZSl7cmV0dXJuIHRoaXMudHJhbnNmb3JtKHUuTk9STUFMSVpFX0hWWih0LHIsZSkpfSx0LnByb3RvdHlwZS5ub3JtYWxpemVTVD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRyYW5zZm9ybSh1Lk5PUk1BTElaRV9TVCgpKX0sdC5wcm90b3R5cGUucXRUb0M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0odS5RVF9UT19DKCkpfSx0LnByb3RvdHlwZS5hVG9DPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtKHUuQV9UT19DKCkpfSx0LnByb3RvdHlwZS5zYW5pdGl6ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0odS5TQU5JVElaRSh0KSl9LHQucHJvdG90eXBlLnRyYW5zbGF0ZT1mdW5jdGlvbih0LHIpe3JldHVybiB0aGlzLnRyYW5zZm9ybSh1LlRSQU5TTEFURSh0LHIpKX0sdC5wcm90b3R5cGUuc2NhbGU9ZnVuY3Rpb24odCxyKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0odS5TQ0FMRSh0LHIpKX0sdC5wcm90b3R5cGUucm90YXRlPWZ1bmN0aW9uKHQscixlKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0odS5ST1RBVEUodCxyLGUpKX0sdC5wcm90b3R5cGUubWF0cml4PWZ1bmN0aW9uKHQscixlLGksYSxuKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0odS5NQVRSSVgodCxyLGUsaSxhLG4pKX0sdC5wcm90b3R5cGUuc2tld1g9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtKHUuU0tFV19YKHQpKX0sdC5wcm90b3R5cGUuc2tld1k9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtKHUuU0tFV19ZKHQpKX0sdC5wcm90b3R5cGUueFN5bW1ldHJ5PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnRyYW5zZm9ybSh1LlhfQVhJU19TWU1NRVRSWSh0KSl9LHQucHJvdG90eXBlLnlTeW1tZXRyeT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0odS5ZX0FYSVNfU1lNTUVUUlkodCkpfSx0LnByb3RvdHlwZS5hbm5vdGF0ZUFyY3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0odS5BTk5PVEFURV9BUkNTKCkpfSx0fSgpLFQ9ZnVuY3Rpb24odCl7cmV0dXJuXCIgXCI9PT10fHxcIlxcdFwiPT09dHx8XCJcXHJcIj09PXR8fFwiXFxuXCI9PT10fSx2PWZ1bmN0aW9uKHQpe3JldHVyblwiMFwiLmNoYXJDb2RlQXQoMCk8PXQuY2hhckNvZGVBdCgwKSYmdC5jaGFyQ29kZUF0KDApPD1cIjlcIi5jaGFyQ29kZUF0KDApfSxmPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt2YXIgcj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuY3VyTnVtYmVyPVwiXCIsci5jdXJDb21tYW5kVHlwZT0tMSxyLmN1ckNvbW1hbmRSZWxhdGl2ZT0hMSxyLmNhblBhcnNlQ29tbWFuZE9yQ29tbWE9ITAsci5jdXJOdW1iZXJIYXNFeHA9ITEsci5jdXJOdW1iZXJIYXNFeHBEaWdpdHM9ITEsci5jdXJOdW1iZXJIYXNEZWNpbWFsPSExLHIuY3VyQXJncz1bXSxyfXJldHVybiByKGUsdCksZS5wcm90b3R5cGUuZmluaXNoPWZ1bmN0aW9uKHQpe2lmKHZvaWQgMD09PXQmJih0PVtdKSx0aGlzLnBhcnNlKFwiIFwiLHQpLDAhPT10aGlzLmN1ckFyZ3MubGVuZ3RofHwhdGhpcy5jYW5QYXJzZUNvbW1hbmRPckNvbW1hKXRocm93IG5ldyBTeW50YXhFcnJvcihcIlVudGVybWluYXRlZCBjb21tYW5kIGF0IHRoZSBwYXRoIGVuZC5cIik7cmV0dXJuIHR9LGUucHJvdG90eXBlLnBhcnNlPWZ1bmN0aW9uKHQscil7dmFyIGU9dGhpczt2b2lkIDA9PT1yJiYocj1bXSk7Zm9yKHZhciBpPWZ1bmN0aW9uKHQpe3IucHVzaCh0KSxlLmN1ckFyZ3MubGVuZ3RoPTAsZS5jYW5QYXJzZUNvbW1hbmRPckNvbW1hPSEwfSxhPTA7YTx0Lmxlbmd0aDthKyspe3ZhciBuPXRbYV0sbz0hKHRoaXMuY3VyQ29tbWFuZFR5cGUhPT1fLkFSQ3x8MyE9PXRoaXMuY3VyQXJncy5sZW5ndGgmJjQhPT10aGlzLmN1ckFyZ3MubGVuZ3RofHwxIT09dGhpcy5jdXJOdW1iZXIubGVuZ3RofHxcIjBcIiE9PXRoaXMuY3VyTnVtYmVyJiZcIjFcIiE9PXRoaXMuY3VyTnVtYmVyKSxzPXYobikmJihcIjBcIj09PXRoaXMuY3VyTnVtYmVyJiZcIjBcIj09PW58fG8pO2lmKCF2KG4pfHxzKWlmKFwiZVwiIT09biYmXCJFXCIhPT1uKWlmKFwiLVwiIT09biYmXCIrXCIhPT1ufHwhdGhpcy5jdXJOdW1iZXJIYXNFeHB8fHRoaXMuY3VyTnVtYmVySGFzRXhwRGlnaXRzKWlmKFwiLlwiIT09bnx8dGhpcy5jdXJOdW1iZXJIYXNFeHB8fHRoaXMuY3VyTnVtYmVySGFzRGVjaW1hbHx8byl7aWYodGhpcy5jdXJOdW1iZXImJi0xIT09dGhpcy5jdXJDb21tYW5kVHlwZSl7dmFyIHU9TnVtYmVyKHRoaXMuY3VyTnVtYmVyKTtpZihpc05hTih1KSl0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJJbnZhbGlkIG51bWJlciBlbmRpbmcgYXQgXCIrYSk7aWYodGhpcy5jdXJDb21tYW5kVHlwZT09PV8uQVJDKWlmKDA9PT10aGlzLmN1ckFyZ3MubGVuZ3RofHwxPT09dGhpcy5jdXJBcmdzLmxlbmd0aCl7aWYoMD51KXRocm93IG5ldyBTeW50YXhFcnJvcignRXhwZWN0ZWQgcG9zaXRpdmUgbnVtYmVyLCBnb3QgXCInK3UrJ1wiIGF0IGluZGV4IFwiJythKydcIicpfWVsc2UgaWYoKDM9PT10aGlzLmN1ckFyZ3MubGVuZ3RofHw0PT09dGhpcy5jdXJBcmdzLmxlbmd0aCkmJlwiMFwiIT09dGhpcy5jdXJOdW1iZXImJlwiMVwiIT09dGhpcy5jdXJOdW1iZXIpdGhyb3cgbmV3IFN5bnRheEVycm9yKCdFeHBlY3RlZCBhIGZsYWcsIGdvdCBcIicrdGhpcy5jdXJOdW1iZXIrJ1wiIGF0IGluZGV4IFwiJythKydcIicpO3RoaXMuY3VyQXJncy5wdXNoKHUpLHRoaXMuY3VyQXJncy5sZW5ndGg9PT1OW3RoaXMuY3VyQ29tbWFuZFR5cGVdJiYoXy5IT1JJWl9MSU5FX1RPPT09dGhpcy5jdXJDb21tYW5kVHlwZT9pKHt0eXBlOl8uSE9SSVpfTElORV9UTyxyZWxhdGl2ZTp0aGlzLmN1ckNvbW1hbmRSZWxhdGl2ZSx4OnV9KTpfLlZFUlRfTElORV9UTz09PXRoaXMuY3VyQ29tbWFuZFR5cGU/aSh7dHlwZTpfLlZFUlRfTElORV9UTyxyZWxhdGl2ZTp0aGlzLmN1ckNvbW1hbmRSZWxhdGl2ZSx5OnV9KTp0aGlzLmN1ckNvbW1hbmRUeXBlPT09Xy5NT1ZFX1RPfHx0aGlzLmN1ckNvbW1hbmRUeXBlPT09Xy5MSU5FX1RPfHx0aGlzLmN1ckNvbW1hbmRUeXBlPT09Xy5TTU9PVEhfUVVBRF9UTz8oaSh7dHlwZTp0aGlzLmN1ckNvbW1hbmRUeXBlLHJlbGF0aXZlOnRoaXMuY3VyQ29tbWFuZFJlbGF0aXZlLHg6dGhpcy5jdXJBcmdzWzBdLHk6dGhpcy5jdXJBcmdzWzFdfSksXy5NT1ZFX1RPPT09dGhpcy5jdXJDb21tYW5kVHlwZSYmKHRoaXMuY3VyQ29tbWFuZFR5cGU9Xy5MSU5FX1RPKSk6dGhpcy5jdXJDb21tYW5kVHlwZT09PV8uQ1VSVkVfVE8/aSh7dHlwZTpfLkNVUlZFX1RPLHJlbGF0aXZlOnRoaXMuY3VyQ29tbWFuZFJlbGF0aXZlLHgxOnRoaXMuY3VyQXJnc1swXSx5MTp0aGlzLmN1ckFyZ3NbMV0seDI6dGhpcy5jdXJBcmdzWzJdLHkyOnRoaXMuY3VyQXJnc1szXSx4OnRoaXMuY3VyQXJnc1s0XSx5OnRoaXMuY3VyQXJnc1s1XX0pOnRoaXMuY3VyQ29tbWFuZFR5cGU9PT1fLlNNT09USF9DVVJWRV9UTz9pKHt0eXBlOl8uU01PT1RIX0NVUlZFX1RPLHJlbGF0aXZlOnRoaXMuY3VyQ29tbWFuZFJlbGF0aXZlLHgyOnRoaXMuY3VyQXJnc1swXSx5Mjp0aGlzLmN1ckFyZ3NbMV0seDp0aGlzLmN1ckFyZ3NbMl0seTp0aGlzLmN1ckFyZ3NbM119KTp0aGlzLmN1ckNvbW1hbmRUeXBlPT09Xy5RVUFEX1RPP2koe3R5cGU6Xy5RVUFEX1RPLHJlbGF0aXZlOnRoaXMuY3VyQ29tbWFuZFJlbGF0aXZlLHgxOnRoaXMuY3VyQXJnc1swXSx5MTp0aGlzLmN1ckFyZ3NbMV0seDp0aGlzLmN1ckFyZ3NbMl0seTp0aGlzLmN1ckFyZ3NbM119KTp0aGlzLmN1ckNvbW1hbmRUeXBlPT09Xy5BUkMmJmkoe3R5cGU6Xy5BUkMscmVsYXRpdmU6dGhpcy5jdXJDb21tYW5kUmVsYXRpdmUsclg6dGhpcy5jdXJBcmdzWzBdLHJZOnRoaXMuY3VyQXJnc1sxXSx4Um90OnRoaXMuY3VyQXJnc1syXSxsQXJjRmxhZzp0aGlzLmN1ckFyZ3NbM10sc3dlZXBGbGFnOnRoaXMuY3VyQXJnc1s0XSx4OnRoaXMuY3VyQXJnc1s1XSx5OnRoaXMuY3VyQXJnc1s2XX0pKSx0aGlzLmN1ck51bWJlcj1cIlwiLHRoaXMuY3VyTnVtYmVySGFzRXhwRGlnaXRzPSExLHRoaXMuY3VyTnVtYmVySGFzRXhwPSExLHRoaXMuY3VyTnVtYmVySGFzRGVjaW1hbD0hMSx0aGlzLmNhblBhcnNlQ29tbWFuZE9yQ29tbWE9ITB9aWYoIVQobikpaWYoXCIsXCI9PT1uJiZ0aGlzLmNhblBhcnNlQ29tbWFuZE9yQ29tbWEpdGhpcy5jYW5QYXJzZUNvbW1hbmRPckNvbW1hPSExO2Vsc2UgaWYoXCIrXCIhPT1uJiZcIi1cIiE9PW4mJlwiLlwiIT09bilpZihzKXRoaXMuY3VyTnVtYmVyPW4sdGhpcy5jdXJOdW1iZXJIYXNEZWNpbWFsPSExO2Vsc2V7aWYoMCE9PXRoaXMuY3VyQXJncy5sZW5ndGgpdGhyb3cgbmV3IFN5bnRheEVycm9yKFwiVW50ZXJtaW5hdGVkIGNvbW1hbmQgYXQgaW5kZXggXCIrYStcIi5cIik7aWYoIXRoaXMuY2FuUGFyc2VDb21tYW5kT3JDb21tYSl0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ1VuZXhwZWN0ZWQgY2hhcmFjdGVyIFwiJytuKydcIiBhdCBpbmRleCAnK2ErXCIuIENvbW1hbmQgY2Fubm90IGZvbGxvdyBjb21tYVwiKTtpZih0aGlzLmNhblBhcnNlQ29tbWFuZE9yQ29tbWE9ITEsXCJ6XCIhPT1uJiZcIlpcIiE9PW4paWYoXCJoXCI9PT1ufHxcIkhcIj09PW4pdGhpcy5jdXJDb21tYW5kVHlwZT1fLkhPUklaX0xJTkVfVE8sdGhpcy5jdXJDb21tYW5kUmVsYXRpdmU9XCJoXCI9PT1uO2Vsc2UgaWYoXCJ2XCI9PT1ufHxcIlZcIj09PW4pdGhpcy5jdXJDb21tYW5kVHlwZT1fLlZFUlRfTElORV9UTyx0aGlzLmN1ckNvbW1hbmRSZWxhdGl2ZT1cInZcIj09PW47ZWxzZSBpZihcIm1cIj09PW58fFwiTVwiPT09bil0aGlzLmN1ckNvbW1hbmRUeXBlPV8uTU9WRV9UTyx0aGlzLmN1ckNvbW1hbmRSZWxhdGl2ZT1cIm1cIj09PW47ZWxzZSBpZihcImxcIj09PW58fFwiTFwiPT09bil0aGlzLmN1ckNvbW1hbmRUeXBlPV8uTElORV9UTyx0aGlzLmN1ckNvbW1hbmRSZWxhdGl2ZT1cImxcIj09PW47ZWxzZSBpZihcImNcIj09PW58fFwiQ1wiPT09bil0aGlzLmN1ckNvbW1hbmRUeXBlPV8uQ1VSVkVfVE8sdGhpcy5jdXJDb21tYW5kUmVsYXRpdmU9XCJjXCI9PT1uO2Vsc2UgaWYoXCJzXCI9PT1ufHxcIlNcIj09PW4pdGhpcy5jdXJDb21tYW5kVHlwZT1fLlNNT09USF9DVVJWRV9UTyx0aGlzLmN1ckNvbW1hbmRSZWxhdGl2ZT1cInNcIj09PW47ZWxzZSBpZihcInFcIj09PW58fFwiUVwiPT09bil0aGlzLmN1ckNvbW1hbmRUeXBlPV8uUVVBRF9UTyx0aGlzLmN1ckNvbW1hbmRSZWxhdGl2ZT1cInFcIj09PW47ZWxzZSBpZihcInRcIj09PW58fFwiVFwiPT09bil0aGlzLmN1ckNvbW1hbmRUeXBlPV8uU01PT1RIX1FVQURfVE8sdGhpcy5jdXJDb21tYW5kUmVsYXRpdmU9XCJ0XCI9PT1uO2Vsc2V7aWYoXCJhXCIhPT1uJiZcIkFcIiE9PW4pdGhyb3cgbmV3IFN5bnRheEVycm9yKCdVbmV4cGVjdGVkIGNoYXJhY3RlciBcIicrbisnXCIgYXQgaW5kZXggJythK1wiLlwiKTt0aGlzLmN1ckNvbW1hbmRUeXBlPV8uQVJDLHRoaXMuY3VyQ29tbWFuZFJlbGF0aXZlPVwiYVwiPT09bn1lbHNlIHIucHVzaCh7dHlwZTpfLkNMT1NFX1BBVEh9KSx0aGlzLmNhblBhcnNlQ29tbWFuZE9yQ29tbWE9ITAsdGhpcy5jdXJDb21tYW5kVHlwZT0tMX1lbHNlIHRoaXMuY3VyTnVtYmVyPW4sdGhpcy5jdXJOdW1iZXJIYXNEZWNpbWFsPVwiLlwiPT09bn1lbHNlIHRoaXMuY3VyTnVtYmVyKz1uLHRoaXMuY3VyTnVtYmVySGFzRGVjaW1hbD0hMDtlbHNlIHRoaXMuY3VyTnVtYmVyKz1uO2Vsc2UgdGhpcy5jdXJOdW1iZXIrPW4sdGhpcy5jdXJOdW1iZXJIYXNFeHA9ITA7ZWxzZSB0aGlzLmN1ck51bWJlcis9bix0aGlzLmN1ck51bWJlckhhc0V4cERpZ2l0cz10aGlzLmN1ck51bWJlckhhc0V4cH1yZXR1cm4gcn0sZS5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuY3JlYXRlKHRoaXMse3BhcnNlOnt2YWx1ZTpmdW5jdGlvbihyLGUpe3ZvaWQgMD09PWUmJihlPVtdKTtmb3IodmFyIGk9MCxhPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZS5jYWxsKHRoaXMscik7aTxhLmxlbmd0aDtpKyspe3ZhciBuPWFbaV0sbz10KG4pO0FycmF5LmlzQXJyYXkobyk/ZS5wdXNoLmFwcGx5KGUsbyk6ZS5wdXNoKG8pfXJldHVybiBlfX19KX0sZX0obCksXz1mdW5jdGlvbih0KXtmdW5jdGlvbiBpKHIpe3ZhciBlPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gZS5jb21tYW5kcz1cInN0cmluZ1wiPT10eXBlb2Ygcj9pLnBhcnNlKHIpOnIsZX1yZXR1cm4gcihpLHQpLGkucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbigpe3JldHVybiBpLmVuY29kZSh0aGlzLmNvbW1hbmRzKX0saS5wcm90b3R5cGUuZ2V0Qm91bmRzPWZ1bmN0aW9uKCl7dmFyIHQ9dS5DQUxDVUxBVEVfQk9VTkRTKCk7cmV0dXJuIHRoaXMudHJhbnNmb3JtKHQpLHR9LGkucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbih0KXtmb3IodmFyIHI9W10sZT0wLGk9dGhpcy5jb21tYW5kcztlPGkubGVuZ3RoO2UrKyl7dmFyIGE9dChpW2VdKTtBcnJheS5pc0FycmF5KGEpP3IucHVzaC5hcHBseShyLGEpOnIucHVzaChhKX1yZXR1cm4gdGhpcy5jb21tYW5kcz1yLHRoaXN9LGkuZW5jb2RlPWZ1bmN0aW9uKHQpe3JldHVybiBlKHQpfSxpLnBhcnNlPWZ1bmN0aW9uKHQpe3ZhciByPW5ldyBmLGU9W107cmV0dXJuIHIucGFyc2UodCxlKSxyLmZpbmlzaChlKSxlfSxpLkNMT1NFX1BBVEg9MSxpLk1PVkVfVE89MixpLkhPUklaX0xJTkVfVE89NCxpLlZFUlRfTElORV9UTz04LGkuTElORV9UTz0xNixpLkNVUlZFX1RPPTMyLGkuU01PT1RIX0NVUlZFX1RPPTY0LGkuUVVBRF9UTz0xMjgsaS5TTU9PVEhfUVVBRF9UTz0yNTYsaS5BUkM9NTEyLGkuTElORV9DT01NQU5EUz1pLkxJTkVfVE98aS5IT1JJWl9MSU5FX1RPfGkuVkVSVF9MSU5FX1RPLGkuRFJBV0lOR19DT01NQU5EUz1pLkhPUklaX0xJTkVfVE98aS5WRVJUX0xJTkVfVE98aS5MSU5FX1RPfGkuQ1VSVkVfVE98aS5TTU9PVEhfQ1VSVkVfVE98aS5RVUFEX1RPfGkuU01PT1RIX1FVQURfVE98aS5BUkMsaX0obCksTj0oKE89e30pW18uTU9WRV9UT109MixPW18uTElORV9UT109MixPW18uSE9SSVpfTElORV9UT109MSxPW18uVkVSVF9MSU5FX1RPXT0xLE9bXy5DTE9TRV9QQVRIXT0wLE9bXy5RVUFEX1RPXT00LE9bXy5TTU9PVEhfUVVBRF9UT109MixPW18uQ1VSVkVfVE9dPTYsT1tfLlNNT09USF9DVVJWRV9UT109NCxPW18uQVJDXT03LE8pO2V4cG9ydHtOIGFzIENPTU1BTkRfQVJHX0NPVU5UUyxfIGFzIFNWR1BhdGhEYXRhLGYgYXMgU1ZHUGF0aERhdGFQYXJzZXIsdSBhcyBTVkdQYXRoRGF0YVRyYW5zZm9ybWVyLGUgYXMgZW5jb2RlU1ZHUGF0aH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1TVkdQYXRoRGF0YS5tb2R1bGUuanMubWFwXG4iLCJmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7XG4gICAgX3R5cGVvZiA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgIHJldHVybiB0eXBlb2Ygb2JqO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgX3R5cGVvZiA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgIHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gX3R5cGVvZihvYmopO1xufVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgfVxufVxuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1iaXR3aXNlIC0tIHVzZWQgZm9yIGNhbGN1bGF0aW9ucyAqL1xuXG4vKiBlc2xpbnQtZGlzYWJsZSB1bmljb3JuL3ByZWZlci1xdWVyeS1zZWxlY3RvciAtLSBhaW1pbmcgYXRcbiAgYmFja3dhcmQtY29tcGF0aWJpbGl0eSAqL1xuXG4vKipcbiogU3RhY2tCbHVyIC0gYSBmYXN0IGFsbW9zdCBHYXVzc2lhbiBCbHVyIEZvciBDYW52YXNcbipcbiogSW4gY2FzZSB5b3UgZmluZCB0aGlzIGNsYXNzIHVzZWZ1bCAtIGVzcGVjaWFsbHkgaW4gY29tbWVyY2lhbCBwcm9qZWN0cyAtXG4qIEkgYW0gbm90IHRvdGFsbHkgdW5oYXBweSBmb3IgYSBzbWFsbCBkb25hdGlvbiB0byBteSBQYXlQYWwgYWNjb3VudFxuKiBtYXJpb0BxdWFzaW1vbmRvLmRlXG4qXG4qIE9yIHN1cHBvcnQgbWUgb24gZmxhdHRyOlxuKiB7QGxpbmsgaHR0cHM6Ly9mbGF0dHIuY29tL3RoaW5nLzcyNzkxL1N0YWNrQmx1ci1hLWZhc3QtYWxtb3N0LUdhdXNzaWFuLUJsdXItRWZmZWN0LWZvci1DYW52YXNKYXZhc2NyaXB0fS5cbipcbiogQG1vZHVsZSBTdGFja0JsdXJcbiogQGF1dGhvciBNYXJpbyBLbGluZ2VtYW5uXG4qIENvbnRhY3Q6IG1hcmlvQHF1YXNpbW9uZG8uY29tXG4qIFdlYnNpdGU6IHtAbGluayBodHRwOi8vd3d3LnF1YXNpbW9uZG8uY29tL1N0YWNrQmx1ckZvckNhbnZhcy9TdGFja0JsdXJEZW1vLmh0bWx9XG4qIFR3aXR0ZXI6IEBxdWFzaW1vbmRvXG4qXG4qIEBjb3B5cmlnaHQgKGMpIDIwMTAgTWFyaW8gS2xpbmdlbWFublxuKlxuKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvblxuKiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvblxuKiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXRcbiogcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsXG4qIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4qIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZVxuKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZ1xuKiBjb25kaXRpb25zOlxuKlxuKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZVxuKiBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbipcbiogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCxcbiogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTXG4qIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EXG4qIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUXG4qIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLFxuKiBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkdcbiogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUlxuKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xudmFyIG11bFRhYmxlID0gWzUxMiwgNTEyLCA0NTYsIDUxMiwgMzI4LCA0NTYsIDMzNSwgNTEyLCA0MDUsIDMyOCwgMjcxLCA0NTYsIDM4OCwgMzM1LCAyOTIsIDUxMiwgNDU0LCA0MDUsIDM2NCwgMzI4LCAyOTgsIDI3MSwgNDk2LCA0NTYsIDQyMCwgMzg4LCAzNjAsIDMzNSwgMzEyLCAyOTIsIDI3MywgNTEyLCA0ODIsIDQ1NCwgNDI4LCA0MDUsIDM4MywgMzY0LCAzNDUsIDMyOCwgMzEyLCAyOTgsIDI4NCwgMjcxLCAyNTksIDQ5NiwgNDc1LCA0NTYsIDQzNywgNDIwLCA0MDQsIDM4OCwgMzc0LCAzNjAsIDM0NywgMzM1LCAzMjMsIDMxMiwgMzAyLCAyOTIsIDI4MiwgMjczLCAyNjUsIDUxMiwgNDk3LCA0ODIsIDQ2OCwgNDU0LCA0NDEsIDQyOCwgNDE3LCA0MDUsIDM5NCwgMzgzLCAzNzMsIDM2NCwgMzU0LCAzNDUsIDMzNywgMzI4LCAzMjAsIDMxMiwgMzA1LCAyOTgsIDI5MSwgMjg0LCAyNzgsIDI3MSwgMjY1LCAyNTksIDUwNywgNDk2LCA0ODUsIDQ3NSwgNDY1LCA0NTYsIDQ0NiwgNDM3LCA0MjgsIDQyMCwgNDEyLCA0MDQsIDM5NiwgMzg4LCAzODEsIDM3NCwgMzY3LCAzNjAsIDM1NCwgMzQ3LCAzNDEsIDMzNSwgMzI5LCAzMjMsIDMxOCwgMzEyLCAzMDcsIDMwMiwgMjk3LCAyOTIsIDI4NywgMjgyLCAyNzgsIDI3MywgMjY5LCAyNjUsIDI2MSwgNTEyLCA1MDUsIDQ5NywgNDg5LCA0ODIsIDQ3NSwgNDY4LCA0NjEsIDQ1NCwgNDQ3LCA0NDEsIDQzNSwgNDI4LCA0MjIsIDQxNywgNDExLCA0MDUsIDM5OSwgMzk0LCAzODksIDM4MywgMzc4LCAzNzMsIDM2OCwgMzY0LCAzNTksIDM1NCwgMzUwLCAzNDUsIDM0MSwgMzM3LCAzMzIsIDMyOCwgMzI0LCAzMjAsIDMxNiwgMzEyLCAzMDksIDMwNSwgMzAxLCAyOTgsIDI5NCwgMjkxLCAyODcsIDI4NCwgMjgxLCAyNzgsIDI3NCwgMjcxLCAyNjgsIDI2NSwgMjYyLCAyNTksIDI1NywgNTA3LCA1MDEsIDQ5NiwgNDkxLCA0ODUsIDQ4MCwgNDc1LCA0NzAsIDQ2NSwgNDYwLCA0NTYsIDQ1MSwgNDQ2LCA0NDIsIDQzNywgNDMzLCA0MjgsIDQyNCwgNDIwLCA0MTYsIDQxMiwgNDA4LCA0MDQsIDQwMCwgMzk2LCAzOTIsIDM4OCwgMzg1LCAzODEsIDM3NywgMzc0LCAzNzAsIDM2NywgMzYzLCAzNjAsIDM1NywgMzU0LCAzNTAsIDM0NywgMzQ0LCAzNDEsIDMzOCwgMzM1LCAzMzIsIDMyOSwgMzI2LCAzMjMsIDMyMCwgMzE4LCAzMTUsIDMxMiwgMzEwLCAzMDcsIDMwNCwgMzAyLCAyOTksIDI5NywgMjk0LCAyOTIsIDI4OSwgMjg3LCAyODUsIDI4MiwgMjgwLCAyNzgsIDI3NSwgMjczLCAyNzEsIDI2OSwgMjY3LCAyNjUsIDI2MywgMjYxLCAyNTldO1xudmFyIHNoZ1RhYmxlID0gWzksIDExLCAxMiwgMTMsIDEzLCAxNCwgMTQsIDE1LCAxNSwgMTUsIDE1LCAxNiwgMTYsIDE2LCAxNiwgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjIsIDIyLCAyMiwgMjIsIDIyLCAyMiwgMjIsIDIyLCAyMiwgMjIsIDIyLCAyMiwgMjIsIDIyLCAyMiwgMjIsIDIyLCAyMiwgMjIsIDIyLCAyMiwgMjIsIDIyLCAyMiwgMjIsIDIyLCAyMiwgMjIsIDIyLCAyMiwgMjIsIDIyLCAyMiwgMjIsIDIyLCAyMiwgMjIsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNF07XG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfEhUTUxJbWFnZUVsZW1lbnR9IGltZ1xuICogQHBhcmFtIHtzdHJpbmd8SFRNTENhbnZhc0VsZW1lbnR9IGNhbnZhc1xuICogQHBhcmFtIHtGbG9hdH0gcmFkaXVzXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGJsdXJBbHBoYUNoYW5uZWxcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gdXNlT2Zmc2V0XG4gKiBAcGFyYW0ge2Jvb2xlYW59IHNraXBTdHlsZXNcbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gKi9cblxuZnVuY3Rpb24gcHJvY2Vzc0ltYWdlKGltZywgY2FudmFzLCByYWRpdXMsIGJsdXJBbHBoYUNoYW5uZWwsIHVzZU9mZnNldCwgc2tpcFN0eWxlcykge1xuICBpZiAodHlwZW9mIGltZyA9PT0gJ3N0cmluZycpIHtcbiAgICBpbWcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpbWcpO1xuICB9XG5cbiAgaWYgKCFpbWcgfHwgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGltZykuc2xpY2UoOCwgLTEpID09PSAnSFRNTEltYWdlRWxlbWVudCcgJiYgISgnbmF0dXJhbFdpZHRoJyBpbiBpbWcpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGRpbWVuc2lvblR5cGUgPSB1c2VPZmZzZXQgPyAnb2Zmc2V0JyA6ICduYXR1cmFsJztcbiAgdmFyIHcgPSBpbWdbZGltZW5zaW9uVHlwZSArICdXaWR0aCddO1xuICB2YXIgaCA9IGltZ1tkaW1lbnNpb25UeXBlICsgJ0hlaWdodCddOyAvLyBhZGQgSW1hZ2VCaXRtYXAgc3VwcG9ydCxjYW4gYmx1ciB0ZXh0dXJlIHNvdXJjZVxuXG4gIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW1nKS5zbGljZSg4LCAtMSkgPT09ICdJbWFnZUJpdG1hcCcpIHtcbiAgICB3ID0gaW1nLndpZHRoO1xuICAgIGggPSBpbWcuaGVpZ2h0O1xuICB9XG5cbiAgaWYgKHR5cGVvZiBjYW52YXMgPT09ICdzdHJpbmcnKSB7XG4gICAgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoY2FudmFzKTtcbiAgfVxuXG4gIGlmICghY2FudmFzIHx8ICEoJ2dldENvbnRleHQnIGluIGNhbnZhcykpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoIXNraXBTdHlsZXMpIHtcbiAgICBjYW52YXMuc3R5bGUud2lkdGggPSB3ICsgJ3B4JztcbiAgICBjYW52YXMuc3R5bGUuaGVpZ2h0ID0gaCArICdweCc7XG4gIH1cblxuICBjYW52YXMud2lkdGggPSB3O1xuICBjYW52YXMuaGVpZ2h0ID0gaDtcbiAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgY29udGV4dC5jbGVhclJlY3QoMCwgMCwgdywgaCk7XG4gIGNvbnRleHQuZHJhd0ltYWdlKGltZywgMCwgMCwgaW1nLm5hdHVyYWxXaWR0aCwgaW1nLm5hdHVyYWxIZWlnaHQsIDAsIDAsIHcsIGgpO1xuXG4gIGlmIChpc05hTihyYWRpdXMpIHx8IHJhZGl1cyA8IDEpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoYmx1ckFscGhhQ2hhbm5lbCkge1xuICAgIHByb2Nlc3NDYW52YXNSR0JBKGNhbnZhcywgMCwgMCwgdywgaCwgcmFkaXVzKTtcbiAgfSBlbHNlIHtcbiAgICBwcm9jZXNzQ2FudmFzUkdCKGNhbnZhcywgMCwgMCwgdywgaCwgcmFkaXVzKTtcbiAgfVxufVxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ3xIVE1MQ2FudmFzRWxlbWVudH0gY2FudmFzXG4gKiBAcGFyYW0ge0ludGVnZXJ9IHRvcFhcbiAqIEBwYXJhbSB7SW50ZWdlcn0gdG9wWVxuICogQHBhcmFtIHtJbnRlZ2VyfSB3aWR0aFxuICogQHBhcmFtIHtJbnRlZ2VyfSBoZWlnaHRcbiAqIEB0aHJvd3Mge0Vycm9yfFR5cGVFcnJvcn1cbiAqIEByZXR1cm5zIHtJbWFnZURhdGF9IFNlZSB7QGxpbmsgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvY2FudmFzLmh0bWwjaW1hZ2VkYXRhfVxuICovXG5cblxuZnVuY3Rpb24gZ2V0SW1hZ2VEYXRhRnJvbUNhbnZhcyhjYW52YXMsIHRvcFgsIHRvcFksIHdpZHRoLCBoZWlnaHQpIHtcbiAgaWYgKHR5cGVvZiBjYW52YXMgPT09ICdzdHJpbmcnKSB7XG4gICAgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoY2FudmFzKTtcbiAgfVxuXG4gIGlmICghY2FudmFzIHx8IF90eXBlb2YoY2FudmFzKSAhPT0gJ29iamVjdCcgfHwgISgnZ2V0Q29udGV4dCcgaW4gY2FudmFzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGluZyBjYW52YXMgd2l0aCBgZ2V0Q29udGV4dGAgbWV0aG9kICcgKyAnaW4gcHJvY2Vzc0NhbnZhc1JHQihBKSBjYWxscyEnKTtcbiAgfVxuXG4gIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gY29udGV4dC5nZXRJbWFnZURhdGEodG9wWCwgdG9wWSwgd2lkdGgsIGhlaWdodCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuYWJsZSB0byBhY2Nlc3MgaW1hZ2UgZGF0YTogJyArIGUpO1xuICB9XG59XG4vKipcbiAqIEBwYXJhbSB7SFRNTENhbnZhc0VsZW1lbnR9IGNhbnZhc1xuICogQHBhcmFtIHtJbnRlZ2VyfSB0b3BYXG4gKiBAcGFyYW0ge0ludGVnZXJ9IHRvcFlcbiAqIEBwYXJhbSB7SW50ZWdlcn0gd2lkdGhcbiAqIEBwYXJhbSB7SW50ZWdlcn0gaGVpZ2h0XG4gKiBAcGFyYW0ge0Zsb2F0fSByYWRpdXNcbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gKi9cblxuXG5mdW5jdGlvbiBwcm9jZXNzQ2FudmFzUkdCQShjYW52YXMsIHRvcFgsIHRvcFksIHdpZHRoLCBoZWlnaHQsIHJhZGl1cykge1xuICBpZiAoaXNOYU4ocmFkaXVzKSB8fCByYWRpdXMgPCAxKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcmFkaXVzIHw9IDA7XG4gIHZhciBpbWFnZURhdGEgPSBnZXRJbWFnZURhdGFGcm9tQ2FudmFzKGNhbnZhcywgdG9wWCwgdG9wWSwgd2lkdGgsIGhlaWdodCk7XG4gIGltYWdlRGF0YSA9IHByb2Nlc3NJbWFnZURhdGFSR0JBKGltYWdlRGF0YSwgdG9wWCwgdG9wWSwgd2lkdGgsIGhlaWdodCwgcmFkaXVzKTtcbiAgY2FudmFzLmdldENvbnRleHQoJzJkJykucHV0SW1hZ2VEYXRhKGltYWdlRGF0YSwgdG9wWCwgdG9wWSk7XG59XG4vKipcbiAqIEBwYXJhbSB7SW1hZ2VEYXRhfSBpbWFnZURhdGFcbiAqIEBwYXJhbSB7SW50ZWdlcn0gdG9wWFxuICogQHBhcmFtIHtJbnRlZ2VyfSB0b3BZXG4gKiBAcGFyYW0ge0ludGVnZXJ9IHdpZHRoXG4gKiBAcGFyYW0ge0ludGVnZXJ9IGhlaWdodFxuICogQHBhcmFtIHtGbG9hdH0gcmFkaXVzXG4gKiBAcmV0dXJucyB7SW1hZ2VEYXRhfVxuICovXG5cblxuZnVuY3Rpb24gcHJvY2Vzc0ltYWdlRGF0YVJHQkEoaW1hZ2VEYXRhLCB0b3BYLCB0b3BZLCB3aWR0aCwgaGVpZ2h0LCByYWRpdXMpIHtcbiAgdmFyIHBpeGVscyA9IGltYWdlRGF0YS5kYXRhO1xuICB2YXIgZGl2ID0gMiAqIHJhZGl1cyArIDE7IC8vIGNvbnN0IHc0ID0gd2lkdGggPDwgMjtcblxuICB2YXIgd2lkdGhNaW51czEgPSB3aWR0aCAtIDE7XG4gIHZhciBoZWlnaHRNaW51czEgPSBoZWlnaHQgLSAxO1xuICB2YXIgcmFkaXVzUGx1czEgPSByYWRpdXMgKyAxO1xuICB2YXIgc3VtRmFjdG9yID0gcmFkaXVzUGx1czEgKiAocmFkaXVzUGx1czEgKyAxKSAvIDI7XG4gIHZhciBzdGFja1N0YXJ0ID0gbmV3IEJsdXJTdGFjaygpO1xuICB2YXIgc3RhY2sgPSBzdGFja1N0YXJ0O1xuICB2YXIgc3RhY2tFbmQ7XG5cbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBkaXY7IGkrKykge1xuICAgIHN0YWNrID0gc3RhY2submV4dCA9IG5ldyBCbHVyU3RhY2soKTtcblxuICAgIGlmIChpID09PSByYWRpdXNQbHVzMSkge1xuICAgICAgc3RhY2tFbmQgPSBzdGFjaztcbiAgICB9XG4gIH1cblxuICBzdGFjay5uZXh0ID0gc3RhY2tTdGFydDtcbiAgdmFyIHN0YWNrSW4gPSBudWxsLFxuICAgICAgc3RhY2tPdXQgPSBudWxsLFxuICAgICAgeXcgPSAwLFxuICAgICAgeWkgPSAwO1xuICB2YXIgbXVsU3VtID0gbXVsVGFibGVbcmFkaXVzXTtcbiAgdmFyIHNoZ1N1bSA9IHNoZ1RhYmxlW3JhZGl1c107XG5cbiAgZm9yICh2YXIgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykge1xuICAgIHN0YWNrID0gc3RhY2tTdGFydDtcbiAgICB2YXIgcHIgPSBwaXhlbHNbeWldLFxuICAgICAgICBwZyA9IHBpeGVsc1t5aSArIDFdLFxuICAgICAgICBwYiA9IHBpeGVsc1t5aSArIDJdLFxuICAgICAgICBwYSA9IHBpeGVsc1t5aSArIDNdO1xuXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IHJhZGl1c1BsdXMxOyBfaSsrKSB7XG4gICAgICBzdGFjay5yID0gcHI7XG4gICAgICBzdGFjay5nID0gcGc7XG4gICAgICBzdGFjay5iID0gcGI7XG4gICAgICBzdGFjay5hID0gcGE7XG4gICAgICBzdGFjayA9IHN0YWNrLm5leHQ7XG4gICAgfVxuXG4gICAgdmFyIHJJblN1bSA9IDAsXG4gICAgICAgIGdJblN1bSA9IDAsXG4gICAgICAgIGJJblN1bSA9IDAsXG4gICAgICAgIGFJblN1bSA9IDAsXG4gICAgICAgIHJPdXRTdW0gPSByYWRpdXNQbHVzMSAqIHByLFxuICAgICAgICBnT3V0U3VtID0gcmFkaXVzUGx1czEgKiBwZyxcbiAgICAgICAgYk91dFN1bSA9IHJhZGl1c1BsdXMxICogcGIsXG4gICAgICAgIGFPdXRTdW0gPSByYWRpdXNQbHVzMSAqIHBhLFxuICAgICAgICByU3VtID0gc3VtRmFjdG9yICogcHIsXG4gICAgICAgIGdTdW0gPSBzdW1GYWN0b3IgKiBwZyxcbiAgICAgICAgYlN1bSA9IHN1bUZhY3RvciAqIHBiLFxuICAgICAgICBhU3VtID0gc3VtRmFjdG9yICogcGE7XG5cbiAgICBmb3IgKHZhciBfaTIgPSAxOyBfaTIgPCByYWRpdXNQbHVzMTsgX2kyKyspIHtcbiAgICAgIHZhciBwID0geWkgKyAoKHdpZHRoTWludXMxIDwgX2kyID8gd2lkdGhNaW51czEgOiBfaTIpIDw8IDIpO1xuICAgICAgdmFyIHIgPSBwaXhlbHNbcF0sXG4gICAgICAgICAgZyA9IHBpeGVsc1twICsgMV0sXG4gICAgICAgICAgYiA9IHBpeGVsc1twICsgMl0sXG4gICAgICAgICAgYSA9IHBpeGVsc1twICsgM107XG4gICAgICB2YXIgcmJzID0gcmFkaXVzUGx1czEgLSBfaTI7XG4gICAgICByU3VtICs9IChzdGFjay5yID0gcikgKiByYnM7XG4gICAgICBnU3VtICs9IChzdGFjay5nID0gZykgKiByYnM7XG4gICAgICBiU3VtICs9IChzdGFjay5iID0gYikgKiByYnM7XG4gICAgICBhU3VtICs9IChzdGFjay5hID0gYSkgKiByYnM7XG4gICAgICBySW5TdW0gKz0gcjtcbiAgICAgIGdJblN1bSArPSBnO1xuICAgICAgYkluU3VtICs9IGI7XG4gICAgICBhSW5TdW0gKz0gYTtcbiAgICAgIHN0YWNrID0gc3RhY2submV4dDtcbiAgICB9XG5cbiAgICBzdGFja0luID0gc3RhY2tTdGFydDtcbiAgICBzdGFja091dCA9IHN0YWNrRW5kO1xuXG4gICAgZm9yICh2YXIgeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7XG4gICAgICB2YXIgcGFJbml0aWFsID0gYVN1bSAqIG11bFN1bSA+Pj4gc2hnU3VtO1xuICAgICAgcGl4ZWxzW3lpICsgM10gPSBwYUluaXRpYWw7XG5cbiAgICAgIGlmIChwYUluaXRpYWwgIT09IDApIHtcbiAgICAgICAgdmFyIF9hMiA9IDI1NSAvIHBhSW5pdGlhbDtcblxuICAgICAgICBwaXhlbHNbeWldID0gKHJTdW0gKiBtdWxTdW0gPj4+IHNoZ1N1bSkgKiBfYTI7XG4gICAgICAgIHBpeGVsc1t5aSArIDFdID0gKGdTdW0gKiBtdWxTdW0gPj4+IHNoZ1N1bSkgKiBfYTI7XG4gICAgICAgIHBpeGVsc1t5aSArIDJdID0gKGJTdW0gKiBtdWxTdW0gPj4+IHNoZ1N1bSkgKiBfYTI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwaXhlbHNbeWldID0gcGl4ZWxzW3lpICsgMV0gPSBwaXhlbHNbeWkgKyAyXSA9IDA7XG4gICAgICB9XG5cbiAgICAgIHJTdW0gLT0gck91dFN1bTtcbiAgICAgIGdTdW0gLT0gZ091dFN1bTtcbiAgICAgIGJTdW0gLT0gYk91dFN1bTtcbiAgICAgIGFTdW0gLT0gYU91dFN1bTtcbiAgICAgIHJPdXRTdW0gLT0gc3RhY2tJbi5yO1xuICAgICAgZ091dFN1bSAtPSBzdGFja0luLmc7XG4gICAgICBiT3V0U3VtIC09IHN0YWNrSW4uYjtcbiAgICAgIGFPdXRTdW0gLT0gc3RhY2tJbi5hO1xuXG4gICAgICB2YXIgX3AgPSB4ICsgcmFkaXVzICsgMTtcblxuICAgICAgX3AgPSB5dyArIChfcCA8IHdpZHRoTWludXMxID8gX3AgOiB3aWR0aE1pbnVzMSkgPDwgMjtcbiAgICAgIHJJblN1bSArPSBzdGFja0luLnIgPSBwaXhlbHNbX3BdO1xuICAgICAgZ0luU3VtICs9IHN0YWNrSW4uZyA9IHBpeGVsc1tfcCArIDFdO1xuICAgICAgYkluU3VtICs9IHN0YWNrSW4uYiA9IHBpeGVsc1tfcCArIDJdO1xuICAgICAgYUluU3VtICs9IHN0YWNrSW4uYSA9IHBpeGVsc1tfcCArIDNdO1xuICAgICAgclN1bSArPSBySW5TdW07XG4gICAgICBnU3VtICs9IGdJblN1bTtcbiAgICAgIGJTdW0gKz0gYkluU3VtO1xuICAgICAgYVN1bSArPSBhSW5TdW07XG4gICAgICBzdGFja0luID0gc3RhY2tJbi5uZXh0O1xuICAgICAgdmFyIF9zdGFja091dCA9IHN0YWNrT3V0LFxuICAgICAgICAgIF9yID0gX3N0YWNrT3V0LnIsXG4gICAgICAgICAgX2cgPSBfc3RhY2tPdXQuZyxcbiAgICAgICAgICBfYiA9IF9zdGFja091dC5iLFxuICAgICAgICAgIF9hID0gX3N0YWNrT3V0LmE7XG4gICAgICByT3V0U3VtICs9IF9yO1xuICAgICAgZ091dFN1bSArPSBfZztcbiAgICAgIGJPdXRTdW0gKz0gX2I7XG4gICAgICBhT3V0U3VtICs9IF9hO1xuICAgICAgckluU3VtIC09IF9yO1xuICAgICAgZ0luU3VtIC09IF9nO1xuICAgICAgYkluU3VtIC09IF9iO1xuICAgICAgYUluU3VtIC09IF9hO1xuICAgICAgc3RhY2tPdXQgPSBzdGFja091dC5uZXh0O1xuICAgICAgeWkgKz0gNDtcbiAgICB9XG5cbiAgICB5dyArPSB3aWR0aDtcbiAgfVxuXG4gIGZvciAodmFyIF94ID0gMDsgX3ggPCB3aWR0aDsgX3grKykge1xuICAgIHlpID0gX3ggPDwgMjtcblxuICAgIHZhciBfcHIgPSBwaXhlbHNbeWldLFxuICAgICAgICBfcGcgPSBwaXhlbHNbeWkgKyAxXSxcbiAgICAgICAgX3BiID0gcGl4ZWxzW3lpICsgMl0sXG4gICAgICAgIF9wYSA9IHBpeGVsc1t5aSArIDNdLFxuICAgICAgICBfck91dFN1bSA9IHJhZGl1c1BsdXMxICogX3ByLFxuICAgICAgICBfZ091dFN1bSA9IHJhZGl1c1BsdXMxICogX3BnLFxuICAgICAgICBfYk91dFN1bSA9IHJhZGl1c1BsdXMxICogX3BiLFxuICAgICAgICBfYU91dFN1bSA9IHJhZGl1c1BsdXMxICogX3BhLFxuICAgICAgICBfclN1bSA9IHN1bUZhY3RvciAqIF9wcixcbiAgICAgICAgX2dTdW0gPSBzdW1GYWN0b3IgKiBfcGcsXG4gICAgICAgIF9iU3VtID0gc3VtRmFjdG9yICogX3BiLFxuICAgICAgICBfYVN1bSA9IHN1bUZhY3RvciAqIF9wYTtcblxuICAgIHN0YWNrID0gc3RhY2tTdGFydDtcblxuICAgIGZvciAodmFyIF9pMyA9IDA7IF9pMyA8IHJhZGl1c1BsdXMxOyBfaTMrKykge1xuICAgICAgc3RhY2suciA9IF9wcjtcbiAgICAgIHN0YWNrLmcgPSBfcGc7XG4gICAgICBzdGFjay5iID0gX3BiO1xuICAgICAgc3RhY2suYSA9IF9wYTtcbiAgICAgIHN0YWNrID0gc3RhY2submV4dDtcbiAgICB9XG5cbiAgICB2YXIgeXAgPSB3aWR0aDtcbiAgICB2YXIgX2dJblN1bSA9IDAsXG4gICAgICAgIF9iSW5TdW0gPSAwLFxuICAgICAgICBfYUluU3VtID0gMCxcbiAgICAgICAgX3JJblN1bSA9IDA7XG5cbiAgICBmb3IgKHZhciBfaTQgPSAxOyBfaTQgPD0gcmFkaXVzOyBfaTQrKykge1xuICAgICAgeWkgPSB5cCArIF94IDw8IDI7XG5cbiAgICAgIHZhciBfcmJzID0gcmFkaXVzUGx1czEgLSBfaTQ7XG5cbiAgICAgIF9yU3VtICs9IChzdGFjay5yID0gX3ByID0gcGl4ZWxzW3lpXSkgKiBfcmJzO1xuICAgICAgX2dTdW0gKz0gKHN0YWNrLmcgPSBfcGcgPSBwaXhlbHNbeWkgKyAxXSkgKiBfcmJzO1xuICAgICAgX2JTdW0gKz0gKHN0YWNrLmIgPSBfcGIgPSBwaXhlbHNbeWkgKyAyXSkgKiBfcmJzO1xuICAgICAgX2FTdW0gKz0gKHN0YWNrLmEgPSBfcGEgPSBwaXhlbHNbeWkgKyAzXSkgKiBfcmJzO1xuICAgICAgX3JJblN1bSArPSBfcHI7XG4gICAgICBfZ0luU3VtICs9IF9wZztcbiAgICAgIF9iSW5TdW0gKz0gX3BiO1xuICAgICAgX2FJblN1bSArPSBfcGE7XG4gICAgICBzdGFjayA9IHN0YWNrLm5leHQ7XG5cbiAgICAgIGlmIChfaTQgPCBoZWlnaHRNaW51czEpIHtcbiAgICAgICAgeXAgKz0gd2lkdGg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgeWkgPSBfeDtcbiAgICBzdGFja0luID0gc3RhY2tTdGFydDtcbiAgICBzdGFja091dCA9IHN0YWNrRW5kO1xuXG4gICAgZm9yICh2YXIgX3kgPSAwOyBfeSA8IGhlaWdodDsgX3krKykge1xuICAgICAgdmFyIF9wMiA9IHlpIDw8IDI7XG5cbiAgICAgIHBpeGVsc1tfcDIgKyAzXSA9IF9wYSA9IF9hU3VtICogbXVsU3VtID4+PiBzaGdTdW07XG5cbiAgICAgIGlmIChfcGEgPiAwKSB7XG4gICAgICAgIF9wYSA9IDI1NSAvIF9wYTtcbiAgICAgICAgcGl4ZWxzW19wMl0gPSAoX3JTdW0gKiBtdWxTdW0gPj4+IHNoZ1N1bSkgKiBfcGE7XG4gICAgICAgIHBpeGVsc1tfcDIgKyAxXSA9IChfZ1N1bSAqIG11bFN1bSA+Pj4gc2hnU3VtKSAqIF9wYTtcbiAgICAgICAgcGl4ZWxzW19wMiArIDJdID0gKF9iU3VtICogbXVsU3VtID4+PiBzaGdTdW0pICogX3BhO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGl4ZWxzW19wMl0gPSBwaXhlbHNbX3AyICsgMV0gPSBwaXhlbHNbX3AyICsgMl0gPSAwO1xuICAgICAgfVxuXG4gICAgICBfclN1bSAtPSBfck91dFN1bTtcbiAgICAgIF9nU3VtIC09IF9nT3V0U3VtO1xuICAgICAgX2JTdW0gLT0gX2JPdXRTdW07XG4gICAgICBfYVN1bSAtPSBfYU91dFN1bTtcbiAgICAgIF9yT3V0U3VtIC09IHN0YWNrSW4ucjtcbiAgICAgIF9nT3V0U3VtIC09IHN0YWNrSW4uZztcbiAgICAgIF9iT3V0U3VtIC09IHN0YWNrSW4uYjtcbiAgICAgIF9hT3V0U3VtIC09IHN0YWNrSW4uYTtcbiAgICAgIF9wMiA9IF94ICsgKChfcDIgPSBfeSArIHJhZGl1c1BsdXMxKSA8IGhlaWdodE1pbnVzMSA/IF9wMiA6IGhlaWdodE1pbnVzMSkgKiB3aWR0aCA8PCAyO1xuICAgICAgX3JTdW0gKz0gX3JJblN1bSArPSBzdGFja0luLnIgPSBwaXhlbHNbX3AyXTtcbiAgICAgIF9nU3VtICs9IF9nSW5TdW0gKz0gc3RhY2tJbi5nID0gcGl4ZWxzW19wMiArIDFdO1xuICAgICAgX2JTdW0gKz0gX2JJblN1bSArPSBzdGFja0luLmIgPSBwaXhlbHNbX3AyICsgMl07XG4gICAgICBfYVN1bSArPSBfYUluU3VtICs9IHN0YWNrSW4uYSA9IHBpeGVsc1tfcDIgKyAzXTtcbiAgICAgIHN0YWNrSW4gPSBzdGFja0luLm5leHQ7XG4gICAgICBfck91dFN1bSArPSBfcHIgPSBzdGFja091dC5yO1xuICAgICAgX2dPdXRTdW0gKz0gX3BnID0gc3RhY2tPdXQuZztcbiAgICAgIF9iT3V0U3VtICs9IF9wYiA9IHN0YWNrT3V0LmI7XG4gICAgICBfYU91dFN1bSArPSBfcGEgPSBzdGFja091dC5hO1xuICAgICAgX3JJblN1bSAtPSBfcHI7XG4gICAgICBfZ0luU3VtIC09IF9wZztcbiAgICAgIF9iSW5TdW0gLT0gX3BiO1xuICAgICAgX2FJblN1bSAtPSBfcGE7XG4gICAgICBzdGFja091dCA9IHN0YWNrT3V0Lm5leHQ7XG4gICAgICB5aSArPSB3aWR0aDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaW1hZ2VEYXRhO1xufVxuLyoqXG4gKiBAcGFyYW0ge0hUTUxDYW52YXNFbGVtZW50fSBjYW52YXNcbiAqIEBwYXJhbSB7SW50ZWdlcn0gdG9wWFxuICogQHBhcmFtIHtJbnRlZ2VyfSB0b3BZXG4gKiBAcGFyYW0ge0ludGVnZXJ9IHdpZHRoXG4gKiBAcGFyYW0ge0ludGVnZXJ9IGhlaWdodFxuICogQHBhcmFtIHtGbG9hdH0gcmFkaXVzXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICovXG5cblxuZnVuY3Rpb24gcHJvY2Vzc0NhbnZhc1JHQihjYW52YXMsIHRvcFgsIHRvcFksIHdpZHRoLCBoZWlnaHQsIHJhZGl1cykge1xuICBpZiAoaXNOYU4ocmFkaXVzKSB8fCByYWRpdXMgPCAxKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcmFkaXVzIHw9IDA7XG4gIHZhciBpbWFnZURhdGEgPSBnZXRJbWFnZURhdGFGcm9tQ2FudmFzKGNhbnZhcywgdG9wWCwgdG9wWSwgd2lkdGgsIGhlaWdodCk7XG4gIGltYWdlRGF0YSA9IHByb2Nlc3NJbWFnZURhdGFSR0IoaW1hZ2VEYXRhLCB0b3BYLCB0b3BZLCB3aWR0aCwgaGVpZ2h0LCByYWRpdXMpO1xuICBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKS5wdXRJbWFnZURhdGEoaW1hZ2VEYXRhLCB0b3BYLCB0b3BZKTtcbn1cbi8qKlxuICogQHBhcmFtIHtJbWFnZURhdGF9IGltYWdlRGF0YVxuICogQHBhcmFtIHtJbnRlZ2VyfSB0b3BYXG4gKiBAcGFyYW0ge0ludGVnZXJ9IHRvcFlcbiAqIEBwYXJhbSB7SW50ZWdlcn0gd2lkdGhcbiAqIEBwYXJhbSB7SW50ZWdlcn0gaGVpZ2h0XG4gKiBAcGFyYW0ge0Zsb2F0fSByYWRpdXNcbiAqIEByZXR1cm5zIHtJbWFnZURhdGF9XG4gKi9cblxuXG5mdW5jdGlvbiBwcm9jZXNzSW1hZ2VEYXRhUkdCKGltYWdlRGF0YSwgdG9wWCwgdG9wWSwgd2lkdGgsIGhlaWdodCwgcmFkaXVzKSB7XG4gIHZhciBwaXhlbHMgPSBpbWFnZURhdGEuZGF0YTtcbiAgdmFyIGRpdiA9IDIgKiByYWRpdXMgKyAxOyAvLyBjb25zdCB3NCA9IHdpZHRoIDw8IDI7XG5cbiAgdmFyIHdpZHRoTWludXMxID0gd2lkdGggLSAxO1xuICB2YXIgaGVpZ2h0TWludXMxID0gaGVpZ2h0IC0gMTtcbiAgdmFyIHJhZGl1c1BsdXMxID0gcmFkaXVzICsgMTtcbiAgdmFyIHN1bUZhY3RvciA9IHJhZGl1c1BsdXMxICogKHJhZGl1c1BsdXMxICsgMSkgLyAyO1xuICB2YXIgc3RhY2tTdGFydCA9IG5ldyBCbHVyU3RhY2soKTtcbiAgdmFyIHN0YWNrID0gc3RhY2tTdGFydDtcbiAgdmFyIHN0YWNrRW5kO1xuXG4gIGZvciAodmFyIGkgPSAxOyBpIDwgZGl2OyBpKyspIHtcbiAgICBzdGFjayA9IHN0YWNrLm5leHQgPSBuZXcgQmx1clN0YWNrKCk7XG5cbiAgICBpZiAoaSA9PT0gcmFkaXVzUGx1czEpIHtcbiAgICAgIHN0YWNrRW5kID0gc3RhY2s7XG4gICAgfVxuICB9XG5cbiAgc3RhY2submV4dCA9IHN0YWNrU3RhcnQ7XG4gIHZhciBzdGFja0luID0gbnVsbDtcbiAgdmFyIHN0YWNrT3V0ID0gbnVsbDtcbiAgdmFyIG11bFN1bSA9IG11bFRhYmxlW3JhZGl1c107XG4gIHZhciBzaGdTdW0gPSBzaGdUYWJsZVtyYWRpdXNdO1xuICB2YXIgcCwgcmJzO1xuICB2YXIgeXcgPSAwLFxuICAgICAgeWkgPSAwO1xuXG4gIGZvciAodmFyIHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHtcbiAgICB2YXIgcHIgPSBwaXhlbHNbeWldLFxuICAgICAgICBwZyA9IHBpeGVsc1t5aSArIDFdLFxuICAgICAgICBwYiA9IHBpeGVsc1t5aSArIDJdLFxuICAgICAgICByT3V0U3VtID0gcmFkaXVzUGx1czEgKiBwcixcbiAgICAgICAgZ091dFN1bSA9IHJhZGl1c1BsdXMxICogcGcsXG4gICAgICAgIGJPdXRTdW0gPSByYWRpdXNQbHVzMSAqIHBiLFxuICAgICAgICByU3VtID0gc3VtRmFjdG9yICogcHIsXG4gICAgICAgIGdTdW0gPSBzdW1GYWN0b3IgKiBwZyxcbiAgICAgICAgYlN1bSA9IHN1bUZhY3RvciAqIHBiO1xuICAgIHN0YWNrID0gc3RhY2tTdGFydDtcblxuICAgIGZvciAodmFyIF9pNSA9IDA7IF9pNSA8IHJhZGl1c1BsdXMxOyBfaTUrKykge1xuICAgICAgc3RhY2suciA9IHByO1xuICAgICAgc3RhY2suZyA9IHBnO1xuICAgICAgc3RhY2suYiA9IHBiO1xuICAgICAgc3RhY2sgPSBzdGFjay5uZXh0O1xuICAgIH1cblxuICAgIHZhciBySW5TdW0gPSAwLFxuICAgICAgICBnSW5TdW0gPSAwLFxuICAgICAgICBiSW5TdW0gPSAwO1xuXG4gICAgZm9yICh2YXIgX2k2ID0gMTsgX2k2IDwgcmFkaXVzUGx1czE7IF9pNisrKSB7XG4gICAgICBwID0geWkgKyAoKHdpZHRoTWludXMxIDwgX2k2ID8gd2lkdGhNaW51czEgOiBfaTYpIDw8IDIpO1xuICAgICAgclN1bSArPSAoc3RhY2suciA9IHByID0gcGl4ZWxzW3BdKSAqIChyYnMgPSByYWRpdXNQbHVzMSAtIF9pNik7XG4gICAgICBnU3VtICs9IChzdGFjay5nID0gcGcgPSBwaXhlbHNbcCArIDFdKSAqIHJicztcbiAgICAgIGJTdW0gKz0gKHN0YWNrLmIgPSBwYiA9IHBpeGVsc1twICsgMl0pICogcmJzO1xuICAgICAgckluU3VtICs9IHByO1xuICAgICAgZ0luU3VtICs9IHBnO1xuICAgICAgYkluU3VtICs9IHBiO1xuICAgICAgc3RhY2sgPSBzdGFjay5uZXh0O1xuICAgIH1cblxuICAgIHN0YWNrSW4gPSBzdGFja1N0YXJ0O1xuICAgIHN0YWNrT3V0ID0gc3RhY2tFbmQ7XG5cbiAgICBmb3IgKHZhciB4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHtcbiAgICAgIHBpeGVsc1t5aV0gPSByU3VtICogbXVsU3VtID4+PiBzaGdTdW07XG4gICAgICBwaXhlbHNbeWkgKyAxXSA9IGdTdW0gKiBtdWxTdW0gPj4+IHNoZ1N1bTtcbiAgICAgIHBpeGVsc1t5aSArIDJdID0gYlN1bSAqIG11bFN1bSA+Pj4gc2hnU3VtO1xuICAgICAgclN1bSAtPSByT3V0U3VtO1xuICAgICAgZ1N1bSAtPSBnT3V0U3VtO1xuICAgICAgYlN1bSAtPSBiT3V0U3VtO1xuICAgICAgck91dFN1bSAtPSBzdGFja0luLnI7XG4gICAgICBnT3V0U3VtIC09IHN0YWNrSW4uZztcbiAgICAgIGJPdXRTdW0gLT0gc3RhY2tJbi5iO1xuICAgICAgcCA9IHl3ICsgKChwID0geCArIHJhZGl1cyArIDEpIDwgd2lkdGhNaW51czEgPyBwIDogd2lkdGhNaW51czEpIDw8IDI7XG4gICAgICBySW5TdW0gKz0gc3RhY2tJbi5yID0gcGl4ZWxzW3BdO1xuICAgICAgZ0luU3VtICs9IHN0YWNrSW4uZyA9IHBpeGVsc1twICsgMV07XG4gICAgICBiSW5TdW0gKz0gc3RhY2tJbi5iID0gcGl4ZWxzW3AgKyAyXTtcbiAgICAgIHJTdW0gKz0gckluU3VtO1xuICAgICAgZ1N1bSArPSBnSW5TdW07XG4gICAgICBiU3VtICs9IGJJblN1bTtcbiAgICAgIHN0YWNrSW4gPSBzdGFja0luLm5leHQ7XG4gICAgICByT3V0U3VtICs9IHByID0gc3RhY2tPdXQucjtcbiAgICAgIGdPdXRTdW0gKz0gcGcgPSBzdGFja091dC5nO1xuICAgICAgYk91dFN1bSArPSBwYiA9IHN0YWNrT3V0LmI7XG4gICAgICBySW5TdW0gLT0gcHI7XG4gICAgICBnSW5TdW0gLT0gcGc7XG4gICAgICBiSW5TdW0gLT0gcGI7XG4gICAgICBzdGFja091dCA9IHN0YWNrT3V0Lm5leHQ7XG4gICAgICB5aSArPSA0O1xuICAgIH1cblxuICAgIHl3ICs9IHdpZHRoO1xuICB9XG5cbiAgZm9yICh2YXIgX3gyID0gMDsgX3gyIDwgd2lkdGg7IF94MisrKSB7XG4gICAgeWkgPSBfeDIgPDwgMjtcblxuICAgIHZhciBfcHIyID0gcGl4ZWxzW3lpXSxcbiAgICAgICAgX3BnMiA9IHBpeGVsc1t5aSArIDFdLFxuICAgICAgICBfcGIyID0gcGl4ZWxzW3lpICsgMl0sXG4gICAgICAgIF9yT3V0U3VtMiA9IHJhZGl1c1BsdXMxICogX3ByMixcbiAgICAgICAgX2dPdXRTdW0yID0gcmFkaXVzUGx1czEgKiBfcGcyLFxuICAgICAgICBfYk91dFN1bTIgPSByYWRpdXNQbHVzMSAqIF9wYjIsXG4gICAgICAgIF9yU3VtMiA9IHN1bUZhY3RvciAqIF9wcjIsXG4gICAgICAgIF9nU3VtMiA9IHN1bUZhY3RvciAqIF9wZzIsXG4gICAgICAgIF9iU3VtMiA9IHN1bUZhY3RvciAqIF9wYjI7XG5cbiAgICBzdGFjayA9IHN0YWNrU3RhcnQ7XG5cbiAgICBmb3IgKHZhciBfaTcgPSAwOyBfaTcgPCByYWRpdXNQbHVzMTsgX2k3KyspIHtcbiAgICAgIHN0YWNrLnIgPSBfcHIyO1xuICAgICAgc3RhY2suZyA9IF9wZzI7XG4gICAgICBzdGFjay5iID0gX3BiMjtcbiAgICAgIHN0YWNrID0gc3RhY2submV4dDtcbiAgICB9XG5cbiAgICB2YXIgX3JJblN1bTIgPSAwLFxuICAgICAgICBfZ0luU3VtMiA9IDAsXG4gICAgICAgIF9iSW5TdW0yID0gMDtcblxuICAgIGZvciAodmFyIF9pOCA9IDEsIHlwID0gd2lkdGg7IF9pOCA8PSByYWRpdXM7IF9pOCsrKSB7XG4gICAgICB5aSA9IHlwICsgX3gyIDw8IDI7XG4gICAgICBfclN1bTIgKz0gKHN0YWNrLnIgPSBfcHIyID0gcGl4ZWxzW3lpXSkgKiAocmJzID0gcmFkaXVzUGx1czEgLSBfaTgpO1xuICAgICAgX2dTdW0yICs9IChzdGFjay5nID0gX3BnMiA9IHBpeGVsc1t5aSArIDFdKSAqIHJicztcbiAgICAgIF9iU3VtMiArPSAoc3RhY2suYiA9IF9wYjIgPSBwaXhlbHNbeWkgKyAyXSkgKiByYnM7XG4gICAgICBfckluU3VtMiArPSBfcHIyO1xuICAgICAgX2dJblN1bTIgKz0gX3BnMjtcbiAgICAgIF9iSW5TdW0yICs9IF9wYjI7XG4gICAgICBzdGFjayA9IHN0YWNrLm5leHQ7XG5cbiAgICAgIGlmIChfaTggPCBoZWlnaHRNaW51czEpIHtcbiAgICAgICAgeXAgKz0gd2lkdGg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgeWkgPSBfeDI7XG4gICAgc3RhY2tJbiA9IHN0YWNrU3RhcnQ7XG4gICAgc3RhY2tPdXQgPSBzdGFja0VuZDtcblxuICAgIGZvciAodmFyIF95MiA9IDA7IF95MiA8IGhlaWdodDsgX3kyKyspIHtcbiAgICAgIHAgPSB5aSA8PCAyO1xuICAgICAgcGl4ZWxzW3BdID0gX3JTdW0yICogbXVsU3VtID4+PiBzaGdTdW07XG4gICAgICBwaXhlbHNbcCArIDFdID0gX2dTdW0yICogbXVsU3VtID4+PiBzaGdTdW07XG4gICAgICBwaXhlbHNbcCArIDJdID0gX2JTdW0yICogbXVsU3VtID4+PiBzaGdTdW07XG4gICAgICBfclN1bTIgLT0gX3JPdXRTdW0yO1xuICAgICAgX2dTdW0yIC09IF9nT3V0U3VtMjtcbiAgICAgIF9iU3VtMiAtPSBfYk91dFN1bTI7XG4gICAgICBfck91dFN1bTIgLT0gc3RhY2tJbi5yO1xuICAgICAgX2dPdXRTdW0yIC09IHN0YWNrSW4uZztcbiAgICAgIF9iT3V0U3VtMiAtPSBzdGFja0luLmI7XG4gICAgICBwID0gX3gyICsgKChwID0gX3kyICsgcmFkaXVzUGx1czEpIDwgaGVpZ2h0TWludXMxID8gcCA6IGhlaWdodE1pbnVzMSkgKiB3aWR0aCA8PCAyO1xuICAgICAgX3JTdW0yICs9IF9ySW5TdW0yICs9IHN0YWNrSW4uciA9IHBpeGVsc1twXTtcbiAgICAgIF9nU3VtMiArPSBfZ0luU3VtMiArPSBzdGFja0luLmcgPSBwaXhlbHNbcCArIDFdO1xuICAgICAgX2JTdW0yICs9IF9iSW5TdW0yICs9IHN0YWNrSW4uYiA9IHBpeGVsc1twICsgMl07XG4gICAgICBzdGFja0luID0gc3RhY2tJbi5uZXh0O1xuICAgICAgX3JPdXRTdW0yICs9IF9wcjIgPSBzdGFja091dC5yO1xuICAgICAgX2dPdXRTdW0yICs9IF9wZzIgPSBzdGFja091dC5nO1xuICAgICAgX2JPdXRTdW0yICs9IF9wYjIgPSBzdGFja091dC5iO1xuICAgICAgX3JJblN1bTIgLT0gX3ByMjtcbiAgICAgIF9nSW5TdW0yIC09IF9wZzI7XG4gICAgICBfYkluU3VtMiAtPSBfcGIyO1xuICAgICAgc3RhY2tPdXQgPSBzdGFja091dC5uZXh0O1xuICAgICAgeWkgKz0gd2lkdGg7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGltYWdlRGF0YTtcbn1cbi8qKlxuICpcbiAqL1xuXG5cbnZhciBCbHVyU3RhY2sgPVxuLyoqXG4gKiBTZXQgcHJvcGVydGllcy5cbiAqL1xuZnVuY3Rpb24gQmx1clN0YWNrKCkge1xuICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQmx1clN0YWNrKTtcblxuICB0aGlzLnIgPSAwO1xuICB0aGlzLmcgPSAwO1xuICB0aGlzLmIgPSAwO1xuICB0aGlzLmEgPSAwO1xuICB0aGlzLm5leHQgPSBudWxsO1xufTtcblxuZXhwb3J0IHsgQmx1clN0YWNrLCBwcm9jZXNzQ2FudmFzUkdCIGFzIGNhbnZhc1JHQiwgcHJvY2Vzc0NhbnZhc1JHQkEgYXMgY2FudmFzUkdCQSwgcHJvY2Vzc0ltYWdlIGFzIGltYWdlLCBwcm9jZXNzSW1hZ2VEYXRhUkdCIGFzIGltYWdlRGF0YVJHQiwgcHJvY2Vzc0ltYWdlRGF0YVJHQkEgYXMgaW1hZ2VEYXRhUkdCQSB9O1xuIiwiaW1wb3J0IHJlcXVlc3RBbmltYXRpb25GcmFtZSBmcm9tICdyYWYnO1xuaW1wb3J0IFJHQkNvbG9yIGZyb20gJ3JnYmNvbG9yJztcbmltcG9ydCB7IFNWR1BhdGhEYXRhIH0gZnJvbSAnc3ZnLXBhdGhkYXRhJztcbmltcG9ydCB7IGNhbnZhc1JHQkEgfSBmcm9tICdzdGFja2JsdXItY2FudmFzJztcblxuLyoqXG4gKiBPcHRpb25zIHByZXNldCBmb3IgYE9mZnNjcmVlbkNhbnZhc2AuXG4gKiBAcGFyYW0gY29uZmlnIC0gUHJlc2V0IHJlcXVpcmVtZW50cy5cbiAqIEBwYXJhbSBjb25maWcuRE9NUGFyc2VyIC0gWE1ML0hUTUwgcGFyc2VyIGZyb20gc3RyaW5nIGludG8gRE9NIERvY3VtZW50LlxuICogQHJldHVybnMgUHJlc2V0IG9iamVjdC5cbiAqLyBmdW5jdGlvbiBvZmZzY3JlZW4oKSB7XG4gICAgbGV0IHsgRE9NUGFyc2VyOiBET01QYXJzZXJGYWxsYmFjayAgfSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzBdIDoge307XG4gICAgY29uc3QgcHJlc2V0ID0ge1xuICAgICAgICB3aW5kb3c6IG51bGwsXG4gICAgICAgIGlnbm9yZUFuaW1hdGlvbjogdHJ1ZSxcbiAgICAgICAgaWdub3JlTW91c2U6IHRydWUsXG4gICAgICAgIERPTVBhcnNlcjogRE9NUGFyc2VyRmFsbGJhY2ssXG4gICAgICAgIGNyZWF0ZUNhbnZhcyAod2lkdGgsIGhlaWdodCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBPZmZzY3JlZW5DYW52YXMod2lkdGgsIGhlaWdodCk7XG4gICAgICAgIH0sXG4gICAgICAgIGFzeW5jIGNyZWF0ZUltYWdlICh1cmwpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsKTtcbiAgICAgICAgICAgIGNvbnN0IGJsb2IgPSBhd2FpdCByZXNwb25zZS5ibG9iKCk7XG4gICAgICAgICAgICBjb25zdCBpbWcgPSBhd2FpdCBjcmVhdGVJbWFnZUJpdG1hcChibG9iKTtcbiAgICAgICAgICAgIHJldHVybiBpbWc7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGlmICh0eXBlb2YgZ2xvYmFsVGhpcy5ET01QYXJzZXIgIT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiBET01QYXJzZXJGYWxsYmFjayA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgUmVmbGVjdC5kZWxldGVQcm9wZXJ0eShwcmVzZXQsICdET01QYXJzZXInKTtcbiAgICB9XG4gICAgcmV0dXJuIHByZXNldDtcbn1cblxuLyoqXG4gKiBPcHRpb25zIHByZXNldCBmb3IgYG5vZGUtY2FudmFzYC5cbiAqIEBwYXJhbSBjb25maWcgLSBQcmVzZXQgcmVxdWlyZW1lbnRzLlxuICogQHBhcmFtIGNvbmZpZy5ET01QYXJzZXIgLSBYTUwvSFRNTCBwYXJzZXIgZnJvbSBzdHJpbmcgaW50byBET00gRG9jdW1lbnQuXG4gKiBAcGFyYW0gY29uZmlnLmNhbnZhcyAtIGBub2RlLWNhbnZhc2AgZXhwb3J0cy5cbiAqIEBwYXJhbSBjb25maWcuZmV0Y2ggLSBXSEFUV0ctY29tcGF0aWJsZSBgZmV0Y2hgIGZ1bmN0aW9uLlxuICogQHJldHVybnMgUHJlc2V0IG9iamVjdC5cbiAqLyBmdW5jdGlvbiBub2RlKHBhcmFtKSB7XG4gICAgbGV0IHsgRE9NUGFyc2VyICwgY2FudmFzICwgZmV0Y2ggIH0gPSBwYXJhbTtcbiAgICByZXR1cm4ge1xuICAgICAgICB3aW5kb3c6IG51bGwsXG4gICAgICAgIGlnbm9yZUFuaW1hdGlvbjogdHJ1ZSxcbiAgICAgICAgaWdub3JlTW91c2U6IHRydWUsXG4gICAgICAgIERPTVBhcnNlcixcbiAgICAgICAgZmV0Y2gsXG4gICAgICAgIGNyZWF0ZUNhbnZhczogY2FudmFzLmNyZWF0ZUNhbnZhcyxcbiAgICAgICAgY3JlYXRlSW1hZ2U6IGNhbnZhcy5sb2FkSW1hZ2VcbiAgICB9O1xufVxuXG52YXIgaW5kZXggPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gIF9fcHJvdG9fXzogbnVsbCxcbiAgb2Zmc2NyZWVuOiBvZmZzY3JlZW4sXG4gIG5vZGU6IG5vZGVcbn0pO1xuXG4vKipcbiAqIEhUTUwtc2FmZSBjb21wcmVzcyB3aGl0ZS1zcGFjZXMuXG4gKiBAcGFyYW0gc3RyIC0gU3RyaW5nIHRvIGNvbXByZXNzLlxuICogQHJldHVybnMgU3RyaW5nLlxuICovIGZ1bmN0aW9uIGNvbXByZXNzU3BhY2VzKHN0cikge1xuICAgIHJldHVybiBzdHIucmVwbGFjZSgvKD8hXFx1MzAwMClcXHMrL2dtLCAnICcpO1xufVxuLyoqXG4gKiBIVE1MLXNhZmUgbGVmdCB0cmltLlxuICogQHBhcmFtIHN0ciAtIFN0cmluZyB0byB0cmltLlxuICogQHJldHVybnMgU3RyaW5nLlxuICovIGZ1bmN0aW9uIHRyaW1MZWZ0KHN0cikge1xuICAgIHJldHVybiBzdHIucmVwbGFjZSgvXltcXG4gXFx0XSsvLCAnJyk7XG59XG4vKipcbiAqIEhUTUwtc2FmZSByaWdodCB0cmltLlxuICogQHBhcmFtIHN0ciAtIFN0cmluZyB0byB0cmltLlxuICogQHJldHVybnMgU3RyaW5nLlxuICovIGZ1bmN0aW9uIHRyaW1SaWdodChzdHIpIHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1tcXG4gXFx0XSskLywgJycpO1xufVxuLyoqXG4gKiBTdHJpbmcgdG8gbnVtYmVycyBhcnJheS5cbiAqIEBwYXJhbSBzdHIgLSBOdW1iZXJzIHN0cmluZy5cbiAqIEByZXR1cm5zIE51bWJlcnMgYXJyYXkuXG4gKi8gZnVuY3Rpb24gdG9OdW1iZXJzKHN0cikge1xuICAgIGNvbnN0IG1hdGNoZXMgPSBzdHIubWF0Y2goLy0/KFxcZCsoPzpcXC5cXGQqKD86W2VFXVsrLV0/XFxkKyk/KT98XFwuXFxkKykoPz1cXER8JCkvZ20pO1xuICAgIHJldHVybiBtYXRjaGVzID8gbWF0Y2hlcy5tYXAocGFyc2VGbG9hdCkgOiBbXTtcbn1cbi8qKlxuICogU3RyaW5nIHRvIG1hdHJpeCB2YWx1ZS5cbiAqIEBwYXJhbSBzdHIgLSBOdW1iZXJzIHN0cmluZy5cbiAqIEByZXR1cm5zIE1hdHJpeCB2YWx1ZS5cbiAqLyBmdW5jdGlvbiB0b01hdHJpeFZhbHVlKHN0cikge1xuICAgIGNvbnN0IG51bWJlcnMgPSB0b051bWJlcnMoc3RyKTtcbiAgICBjb25zdCBtYXRyaXggPSBbXG4gICAgICAgIG51bWJlcnNbMF0gfHwgMCxcbiAgICAgICAgbnVtYmVyc1sxXSB8fCAwLFxuICAgICAgICBudW1iZXJzWzJdIHx8IDAsXG4gICAgICAgIG51bWJlcnNbM10gfHwgMCxcbiAgICAgICAgbnVtYmVyc1s0XSB8fCAwLFxuICAgICAgICBudW1iZXJzWzVdIHx8IDBcbiAgICBdO1xuICAgIHJldHVybiBtYXRyaXg7XG59XG4vLyBNaWNyb3NvZnQgRWRnZSBmaXhcbmNvbnN0IGFsbFVwcGVyY2FzZSA9IC9eW0EtWi1dKyQvO1xuLyoqXG4gKiBOb3JtYWxpemUgYXR0cmlidXRlIG5hbWUuXG4gKiBAcGFyYW0gbmFtZSAtIEF0dHJpYnV0ZSBuYW1lLlxuICogQHJldHVybnMgTm9ybWFsaXplZCBhdHRyaWJ1dGUgbmFtZS5cbiAqLyBmdW5jdGlvbiBub3JtYWxpemVBdHRyaWJ1dGVOYW1lKG5hbWUpIHtcbiAgICBpZiAoYWxsVXBwZXJjYXNlLnRlc3QobmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB9XG4gICAgcmV0dXJuIG5hbWU7XG59XG4vKipcbiAqIFBhcnNlIGV4dGVybmFsIFVSTC5cbiAqIEBwYXJhbSB1cmwgLSBDU1MgdXJsIHN0cmluZy5cbiAqIEByZXR1cm5zIFBhcnNlZCBVUkwuXG4gKi8gZnVuY3Rpb24gcGFyc2VFeHRlcm5hbFVybCh1cmwpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICBzaW5nbGUgcXVvdGVzIFsyXVxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgIHYgICAgICAgICBkb3VibGUgcXVvdGVzIFszXVxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgIHYgICAgICAgICB2ICAgICAgICAgbm8gcXVvdGVzIFs0XVxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgIHYgICAgICAgICB2ICAgICAgICAgdlxuICAgIGNvbnN0IHVybE1hdGNoID0gL3VybFxcKCgnKFteJ10rKSd8XCIoW15cIl0rKVwifChbXidcIildKykpXFwpLy5leGVjKHVybCk7XG4gICAgaWYgKCF1cmxNYXRjaCkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIHJldHVybiB1cmxNYXRjaFsyXSB8fCB1cmxNYXRjaFszXSB8fCB1cmxNYXRjaFs0XSB8fCAnJztcbn1cbi8qKlxuICogVHJhbnNmb3JtIGZsb2F0cyB0byBpbnRlZ2VycyBpbiByZ2IgY29sb3JzLlxuICogQHBhcmFtIGNvbG9yIC0gQ29sb3IgdG8gbm9ybWFsaXplLlxuICogQHJldHVybnMgTm9ybWFsaXplZCBjb2xvci5cbiAqLyBmdW5jdGlvbiBub3JtYWxpemVDb2xvcihjb2xvcikge1xuICAgIGlmICghY29sb3Iuc3RhcnRzV2l0aCgncmdiJykpIHtcbiAgICAgICAgcmV0dXJuIGNvbG9yO1xuICAgIH1cbiAgICBsZXQgcmdiUGFydHMgPSAzO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRDb2xvciA9IGNvbG9yLnJlcGxhY2UoL1xcZCsoXFwuXFxkKyk/L2csIChudW0sIGlzRmxvYXQpPT4ocmdiUGFydHMtLSkgJiYgaXNGbG9hdCA/IFN0cmluZyhNYXRoLnJvdW5kKHBhcnNlRmxvYXQobnVtKSkpIDogbnVtXG4gICAgKTtcbiAgICByZXR1cm4gbm9ybWFsaXplZENvbG9yO1xufVxuXG4vLyBzbGlnaHRseSBtb2RpZmllZCB2ZXJzaW9uIG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9rZWVnYW5zdHJlZXQvc3BlY2lmaWNpdHkvYmxvYi9tYXN0ZXIvc3BlY2lmaWNpdHkuanNcbmNvbnN0IGF0dHJpYnV0ZVJlZ2V4ID0gLyhcXFtbXlxcXV0rXFxdKS9nO1xuY29uc3QgaWRSZWdleCA9IC8oI1teXFxzKz5+Lls6XSspL2c7XG5jb25zdCBjbGFzc1JlZ2V4ID0gLyhcXC5bXlxccys+fi5bOl0rKS9nO1xuY29uc3QgcHNldWRvRWxlbWVudFJlZ2V4ID0gLyg6OlteXFxzKz5+Lls6XSt8OmZpcnN0LWxpbmV8OmZpcnN0LWxldHRlcnw6YmVmb3JlfDphZnRlcikvZ2k7XG5jb25zdCBwc2V1ZG9DbGFzc1dpdGhCcmFja2V0c1JlZ2V4ID0gLyg6W1xcdy1dK1xcKFteKV0qXFwpKS9naTtcbmNvbnN0IHBzZXVkb0NsYXNzUmVnZXggPSAvKDpbXlxccys+fi5bOl0rKS9nO1xuY29uc3QgZWxlbWVudFJlZ2V4ID0gLyhbXlxccys+fi5bOl0rKS9nO1xuZnVuY3Rpb24gZmluZFNlbGVjdG9yTWF0Y2goc2VsZWN0b3IsIHJlZ2V4KSB7XG4gICAgY29uc3QgbWF0Y2hlcyA9IHJlZ2V4LmV4ZWMoc2VsZWN0b3IpO1xuICAgIGlmICghbWF0Y2hlcykge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgc2VsZWN0b3IsXG4gICAgICAgICAgICAwXG4gICAgICAgIF07XG4gICAgfVxuICAgIHJldHVybiBbXG4gICAgICAgIHNlbGVjdG9yLnJlcGxhY2UocmVnZXgsICcgJyksXG4gICAgICAgIG1hdGNoZXMubGVuZ3RoXG4gICAgXTtcbn1cbi8qKlxuICogTWVhc3VyZSBzZWxlY3RvciBzcGVjaWZpY2l0eS5cbiAqIEBwYXJhbSBzZWxlY3RvciAtIFNlbGVjdG9yIHRvIG1lYXN1cmUuXG4gKiBAcmV0dXJucyBTcGVjaWZpY2l0eS5cbiAqLyBmdW5jdGlvbiBnZXRTZWxlY3RvclNwZWNpZmljaXR5KHNlbGVjdG9yKSB7XG4gICAgY29uc3Qgc3BlY2lmaWNpdHkgPSBbXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIDBcbiAgICBdO1xuICAgIGxldCBjdXJyZW50U2VsZWN0b3IgPSBzZWxlY3Rvci5yZXBsYWNlKC86bm90XFwoKFteKV0qKVxcKS9nLCAnICAgICAkMSAnKS5yZXBsYWNlKC97W1xcc1xcU10qL2dtLCAnICcpO1xuICAgIGxldCBkZWx0YSA9IDA7XG4gICAgW2N1cnJlbnRTZWxlY3RvciwgZGVsdGFdID0gZmluZFNlbGVjdG9yTWF0Y2goY3VycmVudFNlbGVjdG9yLCBhdHRyaWJ1dGVSZWdleCk7XG4gICAgc3BlY2lmaWNpdHlbMV0gKz0gZGVsdGE7XG4gICAgW2N1cnJlbnRTZWxlY3RvciwgZGVsdGFdID0gZmluZFNlbGVjdG9yTWF0Y2goY3VycmVudFNlbGVjdG9yLCBpZFJlZ2V4KTtcbiAgICBzcGVjaWZpY2l0eVswXSArPSBkZWx0YTtcbiAgICBbY3VycmVudFNlbGVjdG9yLCBkZWx0YV0gPSBmaW5kU2VsZWN0b3JNYXRjaChjdXJyZW50U2VsZWN0b3IsIGNsYXNzUmVnZXgpO1xuICAgIHNwZWNpZmljaXR5WzFdICs9IGRlbHRhO1xuICAgIFtjdXJyZW50U2VsZWN0b3IsIGRlbHRhXSA9IGZpbmRTZWxlY3Rvck1hdGNoKGN1cnJlbnRTZWxlY3RvciwgcHNldWRvRWxlbWVudFJlZ2V4KTtcbiAgICBzcGVjaWZpY2l0eVsyXSArPSBkZWx0YTtcbiAgICBbY3VycmVudFNlbGVjdG9yLCBkZWx0YV0gPSBmaW5kU2VsZWN0b3JNYXRjaChjdXJyZW50U2VsZWN0b3IsIHBzZXVkb0NsYXNzV2l0aEJyYWNrZXRzUmVnZXgpO1xuICAgIHNwZWNpZmljaXR5WzFdICs9IGRlbHRhO1xuICAgIFtjdXJyZW50U2VsZWN0b3IsIGRlbHRhXSA9IGZpbmRTZWxlY3Rvck1hdGNoKGN1cnJlbnRTZWxlY3RvciwgcHNldWRvQ2xhc3NSZWdleCk7XG4gICAgc3BlY2lmaWNpdHlbMV0gKz0gZGVsdGE7XG4gICAgY3VycmVudFNlbGVjdG9yID0gY3VycmVudFNlbGVjdG9yLnJlcGxhY2UoL1sqXFxzKz5+XS9nLCAnICcpLnJlcGxhY2UoL1sjLl0vZywgJyAnKTtcbiAgICBbY3VycmVudFNlbGVjdG9yLCBkZWx0YV0gPSBmaW5kU2VsZWN0b3JNYXRjaChjdXJyZW50U2VsZWN0b3IsIGVsZW1lbnRSZWdleCkgLy8gbGd0bSBbanMvdXNlbGVzcy1hc3NpZ25tZW50LXRvLWxvY2FsXVxuICAgIDtcbiAgICBzcGVjaWZpY2l0eVsyXSArPSBkZWx0YTtcbiAgICByZXR1cm4gc3BlY2lmaWNpdHkuam9pbignJyk7XG59XG5cbmNvbnN0IFBTRVVET19aRVJPID0gMC4wMDAwMDAwMTtcbi8qKlxuICogVmVjdG9yIG1hZ25pdHVkZS5cbiAqIEBwYXJhbSB2XG4gKiBAcmV0dXJucyBOdW1iZXIgcmVzdWx0LlxuICovIGZ1bmN0aW9uIHZlY3Rvck1hZ25pdHVkZSh2KSB7XG4gICAgcmV0dXJuIE1hdGguc3FydChNYXRoLnBvdyh2WzBdLCAyKSArIE1hdGgucG93KHZbMV0sIDIpKTtcbn1cbi8qKlxuICogUmF0aW8gYmV0d2VlbiB0d28gdmVjdG9ycy5cbiAqIEBwYXJhbSB1XG4gKiBAcGFyYW0gdlxuICogQHJldHVybnMgTnVtYmVyIHJlc3VsdC5cbiAqLyBmdW5jdGlvbiB2ZWN0b3JzUmF0aW8odSwgdikge1xuICAgIHJldHVybiAodVswXSAqIHZbMF0gKyB1WzFdICogdlsxXSkgLyAodmVjdG9yTWFnbml0dWRlKHUpICogdmVjdG9yTWFnbml0dWRlKHYpKTtcbn1cbi8qKlxuICogQW5nbGUgYmV0d2VlbiB0d28gdmVjdG9ycy5cbiAqIEBwYXJhbSB1XG4gKiBAcGFyYW0gdlxuICogQHJldHVybnMgTnVtYmVyIHJlc3VsdC5cbiAqLyBmdW5jdGlvbiB2ZWN0b3JzQW5nbGUodSwgdikge1xuICAgIHJldHVybiAodVswXSAqIHZbMV0gPCB1WzFdICogdlswXSA/IC0xIDogMSkgKiBNYXRoLmFjb3ModmVjdG9yc1JhdGlvKHUsIHYpKTtcbn1cbmZ1bmN0aW9uIENCMSh0KSB7XG4gICAgcmV0dXJuIHQgKiB0ICogdDtcbn1cbmZ1bmN0aW9uIENCMih0KSB7XG4gICAgcmV0dXJuIDMgKiB0ICogdCAqICgxIC0gdCk7XG59XG5mdW5jdGlvbiBDQjModCkge1xuICAgIHJldHVybiAzICogdCAqICgxIC0gdCkgKiAoMSAtIHQpO1xufVxuZnVuY3Rpb24gQ0I0KHQpIHtcbiAgICByZXR1cm4gKDEgLSB0KSAqICgxIC0gdCkgKiAoMSAtIHQpO1xufVxuZnVuY3Rpb24gUUIxKHQpIHtcbiAgICByZXR1cm4gdCAqIHQ7XG59XG5mdW5jdGlvbiBRQjIodCkge1xuICAgIHJldHVybiAyICogdCAqICgxIC0gdCk7XG59XG5mdW5jdGlvbiBRQjModCkge1xuICAgIHJldHVybiAoMSAtIHQpICogKDEgLSB0KTtcbn1cblxuY2xhc3MgUHJvcGVydHkge1xuICAgIHN0YXRpYyBlbXB0eShkb2N1bWVudCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BlcnR5KGRvY3VtZW50LCAnRU1QVFknLCAnJyk7XG4gICAgfVxuICAgIHNwbGl0KCkge1xuICAgICAgICBsZXQgc2VwYXJhdG9yID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMF0gOiAnICc7XG4gICAgICAgIGNvbnN0IHsgZG9jdW1lbnQgLCBuYW1lICB9ID0gdGhpcztcbiAgICAgICAgcmV0dXJuIGNvbXByZXNzU3BhY2VzKHRoaXMuZ2V0U3RyaW5nKCkpLnRyaW0oKS5zcGxpdChzZXBhcmF0b3IpLm1hcCgodmFsdWUpPT5uZXcgUHJvcGVydHkoZG9jdW1lbnQsIG5hbWUsIHZhbHVlKVxuICAgICAgICApO1xuICAgIH1cbiAgICBoYXNWYWx1ZSh6ZXJvSXNWYWx1ZSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgICAgIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gJycgJiYgKHplcm9Jc1ZhbHVlIHx8IHZhbHVlICE9PSAwKSAmJiB0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnO1xuICAgIH1cbiAgICBpc1N0cmluZyhyZWdleHApIHtcbiAgICAgICAgY29uc3QgeyB2YWx1ZSAgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZyc7XG4gICAgICAgIGlmICghcmVzdWx0IHx8ICFyZWdleHApIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlZ2V4cC50ZXN0KHZhbHVlKTtcbiAgICB9XG4gICAgaXNVcmxEZWZpbml0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1N0cmluZygvXnVybFxcKC8pO1xuICAgIH1cbiAgICBpc1BpeGVscygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmhhc1ZhbHVlKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhc1N0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7XG4gICAgICAgIHN3aXRjaCh0cnVlKXtcbiAgICAgICAgICAgIGNhc2UgYXNTdHJpbmcuZW5kc1dpdGgoJ3B4Jyk6XG4gICAgICAgICAgICBjYXNlIC9eWzAtOV0rJC8udGVzdChhc1N0cmluZyk6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzZXRWYWx1ZSh2YWx1ZSkge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBnZXRWYWx1ZShkZWYpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBkZWYgPT09ICd1bmRlZmluZWQnIHx8IHRoaXMuaGFzVmFsdWUoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlZjtcbiAgICB9XG4gICAgZ2V0TnVtYmVyKGRlZikge1xuICAgICAgICBpZiAoIXRoaXMuaGFzVmFsdWUoKSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBkZWYgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIFBhcnNlIHVua25vd24gdmFsdWUuXG4gICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChkZWYpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgdmFsdWUgIH0gPSB0aGlzO1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIFBhcnNlIHVua25vd24gdmFsdWUuXG4gICAgICAgIGxldCBuID0gcGFyc2VGbG9hdCh2YWx1ZSk7XG4gICAgICAgIGlmICh0aGlzLmlzU3RyaW5nKC8lJC8pKSB7XG4gICAgICAgICAgICBuIC89IDEwMDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbjtcbiAgICB9XG4gICAgZ2V0U3RyaW5nKGRlZikge1xuICAgICAgICBpZiAodHlwZW9mIGRlZiA9PT0gJ3VuZGVmaW5lZCcgfHwgdGhpcy5oYXNWYWx1ZSgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIHRoaXMudmFsdWUgPT09ICd1bmRlZmluZWQnID8gJycgOiBTdHJpbmcodGhpcy52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFN0cmluZyhkZWYpO1xuICAgIH1cbiAgICBnZXRDb2xvcihkZWYpIHtcbiAgICAgICAgbGV0IGNvbG9yID0gdGhpcy5nZXRTdHJpbmcoZGVmKTtcbiAgICAgICAgaWYgKHRoaXMuaXNOb3JtYWxpemVkQ29sb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBjb2xvcjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzTm9ybWFsaXplZENvbG9yID0gdHJ1ZTtcbiAgICAgICAgY29sb3IgPSBub3JtYWxpemVDb2xvcihjb2xvcik7XG4gICAgICAgIHRoaXMudmFsdWUgPSBjb2xvcjtcbiAgICAgICAgcmV0dXJuIGNvbG9yO1xuICAgIH1cbiAgICBnZXREcGkoKSB7XG4gICAgICAgIHJldHVybiA5NiAvLyBUT0RPOiBjb21wdXRlP1xuICAgICAgICA7XG4gICAgfVxuICAgIGdldFJlbSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZG9jdW1lbnQucm9vdEVtU2l6ZTtcbiAgICB9XG4gICAgZ2V0RW0oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRvY3VtZW50LmVtU2l6ZTtcbiAgICB9XG4gICAgZ2V0VW5pdHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFN0cmluZygpLnJlcGxhY2UoL1swLTkuLV0vZywgJycpO1xuICAgIH1cbiAgICBnZXRQaXhlbHMoYXhpc09ySXNGb250U2l6ZSkge1xuICAgICAgICBsZXQgcHJvY2Vzc1BlcmNlbnQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHZvaWQgMCA/IGFyZ3VtZW50c1sxXSA6IGZhbHNlO1xuICAgICAgICBpZiAoIXRoaXMuaGFzVmFsdWUoKSkge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgW2F4aXMsIGlzRm9udFNpemVdID0gdHlwZW9mIGF4aXNPcklzRm9udFNpemUgPT09ICdib29sZWFuJyA/IFtcbiAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGF4aXNPcklzRm9udFNpemVcbiAgICAgICAgXSA6IFtcbiAgICAgICAgICAgIGF4aXNPcklzRm9udFNpemVcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgeyB2aWV3UG9ydCAgfSA9IHRoaXMuZG9jdW1lbnQuc2NyZWVuO1xuICAgICAgICBzd2l0Y2godHJ1ZSl7XG4gICAgICAgICAgICBjYXNlIHRoaXMuaXNTdHJpbmcoL3ZtaW4kLyk6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TnVtYmVyKCkgLyAxMDAgKiBNYXRoLm1pbih2aWV3UG9ydC5jb21wdXRlU2l6ZSgneCcpLCB2aWV3UG9ydC5jb21wdXRlU2l6ZSgneScpKTtcbiAgICAgICAgICAgIGNhc2UgdGhpcy5pc1N0cmluZygvdm1heCQvKTpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXROdW1iZXIoKSAvIDEwMCAqIE1hdGgubWF4KHZpZXdQb3J0LmNvbXB1dGVTaXplKCd4JyksIHZpZXdQb3J0LmNvbXB1dGVTaXplKCd5JykpO1xuICAgICAgICAgICAgY2FzZSB0aGlzLmlzU3RyaW5nKC92dyQvKTpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXROdW1iZXIoKSAvIDEwMCAqIHZpZXdQb3J0LmNvbXB1dGVTaXplKCd4Jyk7XG4gICAgICAgICAgICBjYXNlIHRoaXMuaXNTdHJpbmcoL3ZoJC8pOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldE51bWJlcigpIC8gMTAwICogdmlld1BvcnQuY29tcHV0ZVNpemUoJ3knKTtcbiAgICAgICAgICAgIGNhc2UgdGhpcy5pc1N0cmluZygvcmVtJC8pOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldE51bWJlcigpICogdGhpcy5nZXRSZW0oKTtcbiAgICAgICAgICAgIGNhc2UgdGhpcy5pc1N0cmluZygvZW0kLyk6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TnVtYmVyKCkgKiB0aGlzLmdldEVtKCk7XG4gICAgICAgICAgICBjYXNlIHRoaXMuaXNTdHJpbmcoL2V4JC8pOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldE51bWJlcigpICogdGhpcy5nZXRFbSgpIC8gMjtcbiAgICAgICAgICAgIGNhc2UgdGhpcy5pc1N0cmluZygvcHgkLyk6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TnVtYmVyKCk7XG4gICAgICAgICAgICBjYXNlIHRoaXMuaXNTdHJpbmcoL3B0JC8pOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldE51bWJlcigpICogdGhpcy5nZXREcGkoKSAqICgxIC8gNzIpO1xuICAgICAgICAgICAgY2FzZSB0aGlzLmlzU3RyaW5nKC9wYyQvKTpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXROdW1iZXIoKSAqIDE1O1xuICAgICAgICAgICAgY2FzZSB0aGlzLmlzU3RyaW5nKC9jbSQvKTpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXROdW1iZXIoKSAqIHRoaXMuZ2V0RHBpKCkgLyAyLjU0O1xuICAgICAgICAgICAgY2FzZSB0aGlzLmlzU3RyaW5nKC9tbSQvKTpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXROdW1iZXIoKSAqIHRoaXMuZ2V0RHBpKCkgLyAyNS40O1xuICAgICAgICAgICAgY2FzZSB0aGlzLmlzU3RyaW5nKC9pbiQvKTpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXROdW1iZXIoKSAqIHRoaXMuZ2V0RHBpKCk7XG4gICAgICAgICAgICBjYXNlIHRoaXMuaXNTdHJpbmcoLyUkLykgJiYgaXNGb250U2l6ZTpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXROdW1iZXIoKSAqIHRoaXMuZ2V0RW0oKTtcbiAgICAgICAgICAgIGNhc2UgdGhpcy5pc1N0cmluZygvJSQvKTpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXROdW1iZXIoKSAqIHZpZXdQb3J0LmNvbXB1dGVTaXplKGF4aXMpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG4gPSB0aGlzLmdldE51bWJlcigpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocHJvY2Vzc1BlcmNlbnQgJiYgbiA8IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuICogdmlld1BvcnQuY29tcHV0ZVNpemUoYXhpcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGdldE1pbGxpc2Vjb25kcygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmhhc1ZhbHVlKCkpIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzU3RyaW5nKC9tcyQvKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TnVtYmVyKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TnVtYmVyKCkgKiAxMDAwO1xuICAgIH1cbiAgICBnZXRSYWRpYW5zKCkge1xuICAgICAgICBpZiAoIXRoaXMuaGFzVmFsdWUoKSkge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoKHRydWUpe1xuICAgICAgICAgICAgY2FzZSB0aGlzLmlzU3RyaW5nKC9kZWckLyk6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TnVtYmVyKCkgKiAoTWF0aC5QSSAvIDE4MCk7XG4gICAgICAgICAgICBjYXNlIHRoaXMuaXNTdHJpbmcoL2dyYWQkLyk6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TnVtYmVyKCkgKiAoTWF0aC5QSSAvIDIwMCk7XG4gICAgICAgICAgICBjYXNlIHRoaXMuaXNTdHJpbmcoL3JhZCQvKTpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXROdW1iZXIoKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TnVtYmVyKCkgKiAoTWF0aC5QSSAvIDE4MCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0RGVmaW5pdGlvbigpIHtcbiAgICAgICAgY29uc3QgYXNTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuICAgICAgICBjb25zdCBtYXRjaCA9IC8jKFteKSdcIl0rKS8uZXhlYyhhc1N0cmluZyk7XG4gICAgICAgIGNvbnN0IG5hbWUgPSAobWF0Y2ggPT09IG51bGwgfHwgbWF0Y2ggPT09IHZvaWQgMCA/IHZvaWQgMCA6IG1hdGNoWzFdKSB8fCBhc1N0cmluZztcbiAgICAgICAgcmV0dXJuIHRoaXMuZG9jdW1lbnQuZGVmaW5pdGlvbnNbbmFtZV07XG4gICAgfVxuICAgIGdldEZpbGxTdHlsZURlZmluaXRpb24oZWxlbWVudCwgb3BhY2l0eSkge1xuICAgICAgICBsZXQgZGVmID0gdGhpcy5nZXREZWZpbml0aW9uKCk7XG4gICAgICAgIGlmICghZGVmKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICAvLyBncmFkaWVudFxuICAgICAgICBpZiAodHlwZW9mIGRlZi5jcmVhdGVHcmFkaWVudCA9PT0gJ2Z1bmN0aW9uJyAmJiAnZ2V0Qm91bmRpbmdCb3gnIGluIGVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBkZWYuY3JlYXRlR3JhZGllbnQodGhpcy5kb2N1bWVudC5jdHgsIGVsZW1lbnQsIG9wYWNpdHkpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHBhdHRlcm5cbiAgICAgICAgaWYgKHR5cGVvZiBkZWYuY3JlYXRlUGF0dGVybiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgaWYgKGRlZi5nZXRIcmVmQXR0cmlidXRlKCkuaGFzVmFsdWUoKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhdHRlcm5UcmFuc2Zvcm0gPSBkZWYuZ2V0QXR0cmlidXRlKCdwYXR0ZXJuVHJhbnNmb3JtJyk7XG4gICAgICAgICAgICAgICAgZGVmID0gZGVmLmdldEhyZWZBdHRyaWJ1dGUoKS5nZXREZWZpbml0aW9uKCk7XG4gICAgICAgICAgICAgICAgaWYgKGRlZiAmJiBwYXR0ZXJuVHJhbnNmb3JtLmhhc1ZhbHVlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVmLmdldEF0dHJpYnV0ZSgncGF0dGVyblRyYW5zZm9ybScsIHRydWUpLnNldFZhbHVlKHBhdHRlcm5UcmFuc2Zvcm0udmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkZWYpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGVmLmNyZWF0ZVBhdHRlcm4odGhpcy5kb2N1bWVudC5jdHgsIGVsZW1lbnQsIG9wYWNpdHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBnZXRUZXh0QmFzZWxpbmUoKSB7XG4gICAgICAgIGlmICghdGhpcy5oYXNWYWx1ZSgpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmdldFN0cmluZygpO1xuICAgICAgICByZXR1cm4gUHJvcGVydHkudGV4dEJhc2VsaW5lTWFwcGluZ1trZXldIHx8IG51bGw7XG4gICAgfVxuICAgIGFkZE9wYWNpdHkob3BhY2l0eSkge1xuICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLmdldENvbG9yKCk7XG4gICAgICAgIGNvbnN0IGxlbiA9IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgbGV0IGNvbW1hcyA9IDA7XG4gICAgICAgIC8vIFNpbXVsYXRlIG9sZCBSR0JDb2xvciB2ZXJzaW9uLCB3aGljaCBjYW4ndCBwYXJzZSByZ2JhLlxuICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspe1xuICAgICAgICAgICAgaWYgKHZhbHVlW2ldID09PSAnLCcpIHtcbiAgICAgICAgICAgICAgICBjb21tYXMrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb21tYXMgPT09IDMpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAob3BhY2l0eS5oYXNWYWx1ZSgpICYmIHRoaXMuaXNTdHJpbmcoKSAmJiBjb21tYXMgIT09IDMpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbG9yID0gbmV3IFJHQkNvbG9yKHZhbHVlKTtcbiAgICAgICAgICAgIGlmIChjb2xvci5vaykge1xuICAgICAgICAgICAgICAgIGNvbG9yLmFscGhhID0gb3BhY2l0eS5nZXROdW1iZXIoKTtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGNvbG9yLnRvUkdCQSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgUHJvcGVydHkodGhpcy5kb2N1bWVudCwgdGhpcy5uYW1lLCB2YWx1ZSk7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKGRvY3VtZW50LCBuYW1lLCB2YWx1ZSl7XG4gICAgICAgIHRoaXMuZG9jdW1lbnQgPSBkb2N1bWVudDtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLmlzTm9ybWFsaXplZENvbG9yID0gZmFsc2U7XG4gICAgfVxufVxuUHJvcGVydHkudGV4dEJhc2VsaW5lTWFwcGluZyA9IHtcbiAgICAnYmFzZWxpbmUnOiAnYWxwaGFiZXRpYycsXG4gICAgJ2JlZm9yZS1lZGdlJzogJ3RvcCcsXG4gICAgJ3RleHQtYmVmb3JlLWVkZ2UnOiAndG9wJyxcbiAgICAnbWlkZGxlJzogJ21pZGRsZScsXG4gICAgJ2NlbnRyYWwnOiAnbWlkZGxlJyxcbiAgICAnYWZ0ZXItZWRnZSc6ICdib3R0b20nLFxuICAgICd0ZXh0LWFmdGVyLWVkZ2UnOiAnYm90dG9tJyxcbiAgICAnaWRlb2dyYXBoaWMnOiAnaWRlb2dyYXBoaWMnLFxuICAgICdhbHBoYWJldGljJzogJ2FscGhhYmV0aWMnLFxuICAgICdoYW5naW5nJzogJ2hhbmdpbmcnLFxuICAgICdtYXRoZW1hdGljYWwnOiAnYWxwaGFiZXRpYydcbn07XG5cbmNsYXNzIFZpZXdQb3J0IHtcbiAgICBjbGVhcigpIHtcbiAgICAgICAgdGhpcy52aWV3UG9ydHMgPSBbXTtcbiAgICB9XG4gICAgc2V0Q3VycmVudCh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgICAgIHRoaXMudmlld1BvcnRzLnB1c2goe1xuICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICBoZWlnaHRcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJlbW92ZUN1cnJlbnQoKSB7XG4gICAgICAgIHRoaXMudmlld1BvcnRzLnBvcCgpO1xuICAgIH1cbiAgICBnZXRSb290KCkge1xuICAgICAgICBjb25zdCBbcm9vdF0gPSB0aGlzLnZpZXdQb3J0cztcbiAgICAgICAgaWYgKCFyb290KSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByb290O1xuICAgIH1cbiAgICBnZXRDdXJyZW50KCkge1xuICAgICAgICBjb25zdCB7IHZpZXdQb3J0cyAgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGN1cnJlbnQgPSB2aWV3UG9ydHNbdmlld1BvcnRzLmxlbmd0aCAtIDFdO1xuICAgICAgICBpZiAoIWN1cnJlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgfVxuICAgIGdldCB3aWR0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q3VycmVudCgpLndpZHRoO1xuICAgIH1cbiAgICBnZXQgaGVpZ2h0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRDdXJyZW50KCkuaGVpZ2h0O1xuICAgIH1cbiAgICBjb21wdXRlU2l6ZShkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHJldHVybiBkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkID09PSAneCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLndpZHRoO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkID09PSAneScpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmhlaWdodDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KHRoaXMud2lkdGgsIDIpICsgTWF0aC5wb3codGhpcy5oZWlnaHQsIDIpKSAvIE1hdGguc3FydCgyKTtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoKXtcbiAgICAgICAgdGhpcy52aWV3UG9ydHMgPSBbXTtcbiAgICB9XG59XG5WaWV3UG9ydC5ERUZBVUxUX1ZJRVdQT1JUX1dJRFRIID0gODAwO1xuVmlld1BvcnQuREVGQVVMVF9WSUVXUE9SVF9IRUlHSFQgPSA2MDA7XG5mdW5jdGlvbiBnZXREZWZhdWx0KCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIHdpZHRoOiBWaWV3UG9ydC5ERUZBVUxUX1ZJRVdQT1JUX1dJRFRILFxuICAgICAgICBoZWlnaHQ6IFZpZXdQb3J0LkRFRkFVTFRfVklFV1BPUlRfSEVJR0hUXG4gICAgfTtcbn1cblxuY2xhc3MgUG9pbnQge1xuICAgIHN0YXRpYyBwYXJzZShwb2ludCkge1xuICAgICAgICBsZXQgZGVmYXVsdFZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMV0gOiAwO1xuICAgICAgICBjb25zdCBbeCA9IGRlZmF1bHRWYWx1ZSwgeSA9IGRlZmF1bHRWYWx1ZV0gPSB0b051bWJlcnMocG9pbnQpO1xuICAgICAgICByZXR1cm4gbmV3IFBvaW50KHgsIHkpO1xuICAgIH1cbiAgICBzdGF0aWMgcGFyc2VTY2FsZShzY2FsZSkge1xuICAgICAgICBsZXQgZGVmYXVsdFZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMV0gOiAxO1xuICAgICAgICBjb25zdCBbeCA9IGRlZmF1bHRWYWx1ZSwgeSA9IHhdID0gdG9OdW1iZXJzKHNjYWxlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQb2ludCh4LCB5KTtcbiAgICB9XG4gICAgc3RhdGljIHBhcnNlUGF0aChwYXRoKSB7XG4gICAgICAgIGNvbnN0IHBvaW50cyA9IHRvTnVtYmVycyhwYXRoKTtcbiAgICAgICAgY29uc3QgbGVuID0gcG9pbnRzLmxlbmd0aDtcbiAgICAgICAgY29uc3QgcGF0aFBvaW50cyA9IFtdO1xuICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgbGVuOyBpICs9IDIpe1xuICAgICAgICAgICAgcGF0aFBvaW50cy5wdXNoKG5ldyBQb2ludChwb2ludHNbaV0sIHBvaW50c1tpICsgMV0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGF0aFBvaW50cztcbiAgICB9XG4gICAgYW5nbGVUbyhwb2ludCkge1xuICAgICAgICByZXR1cm4gTWF0aC5hdGFuMihwb2ludC55IC0gdGhpcy55LCBwb2ludC54IC0gdGhpcy54KTtcbiAgICB9XG4gICAgYXBwbHlUcmFuc2Zvcm0odHJhbnNmb3JtKSB7XG4gICAgICAgIGNvbnN0IHsgeCAsIHkgIH0gPSB0aGlzO1xuICAgICAgICBjb25zdCB4cCA9IHggKiB0cmFuc2Zvcm1bMF0gKyB5ICogdHJhbnNmb3JtWzJdICsgdHJhbnNmb3JtWzRdO1xuICAgICAgICBjb25zdCB5cCA9IHggKiB0cmFuc2Zvcm1bMV0gKyB5ICogdHJhbnNmb3JtWzNdICsgdHJhbnNmb3JtWzVdO1xuICAgICAgICB0aGlzLnggPSB4cDtcbiAgICAgICAgdGhpcy55ID0geXA7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKHgsIHkpe1xuICAgICAgICB0aGlzLnggPSB4O1xuICAgICAgICB0aGlzLnkgPSB5O1xuICAgIH1cbn1cblxuY2xhc3MgTW91c2Uge1xuICAgIGlzV29ya2luZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud29ya2luZztcbiAgICB9XG4gICAgc3RhcnQoKSB7XG4gICAgICAgIGlmICh0aGlzLndvcmtpbmcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHNjcmVlbiAsIG9uQ2xpY2sgLCBvbk1vdXNlTW92ZSAgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGNhbnZhcyA9IHNjcmVlbi5jdHguY2FudmFzO1xuICAgICAgICBjYW52YXMub25jbGljayA9IG9uQ2xpY2s7XG4gICAgICAgIGNhbnZhcy5vbm1vdXNlbW92ZSA9IG9uTW91c2VNb3ZlO1xuICAgICAgICB0aGlzLndvcmtpbmcgPSB0cnVlO1xuICAgIH1cbiAgICBzdG9wKCkge1xuICAgICAgICBpZiAoIXRoaXMud29ya2luZykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNhbnZhcyA9IHRoaXMuc2NyZWVuLmN0eC5jYW52YXM7XG4gICAgICAgIHRoaXMud29ya2luZyA9IGZhbHNlO1xuICAgICAgICBjYW52YXMub25jbGljayA9IG51bGw7XG4gICAgICAgIGNhbnZhcy5vbm1vdXNlbW92ZSA9IG51bGw7XG4gICAgfVxuICAgIGhhc0V2ZW50cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud29ya2luZyAmJiB0aGlzLmV2ZW50cy5sZW5ndGggPiAwO1xuICAgIH1cbiAgICBydW5FdmVudHMoKSB7XG4gICAgICAgIGlmICghdGhpcy53b3JraW5nKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBzY3JlZW46IGRvY3VtZW50ICwgZXZlbnRzICwgZXZlbnRFbGVtZW50cyAgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IHsgc3R5bGUgIH0gPSBkb2N1bWVudC5jdHguY2FudmFzO1xuICAgICAgICBsZXQgZWxlbWVudDtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS1jb25kaXRpb25cbiAgICAgICAgaWYgKHN0eWxlKSB7XG4gICAgICAgICAgICBzdHlsZS5jdXJzb3IgPSAnJztcbiAgICAgICAgfVxuICAgICAgICBldmVudHMuZm9yRWFjaCgocGFyYW0sIGkpPT57XG4gICAgICAgICAgICBsZXQgeyBydW4gIH0gPSBwYXJhbTtcbiAgICAgICAgICAgIGVsZW1lbnQgPSBldmVudEVsZW1lbnRzW2ldO1xuICAgICAgICAgICAgd2hpbGUoZWxlbWVudCl7XG4gICAgICAgICAgICAgICAgcnVuKGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIC8vIGRvbmUgcnVubmluZywgY2xlYXJcbiAgICAgICAgdGhpcy5ldmVudHMgPSBbXTtcbiAgICAgICAgdGhpcy5ldmVudEVsZW1lbnRzID0gW107XG4gICAgfVxuICAgIGNoZWNrUGF0aChlbGVtZW50LCBjdHgpIHtcbiAgICAgICAgaWYgKCF0aGlzLndvcmtpbmcgfHwgIWN0eCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgZXZlbnRzICwgZXZlbnRFbGVtZW50cyAgfSA9IHRoaXM7XG4gICAgICAgIGV2ZW50cy5mb3JFYWNoKChwYXJhbSwgaSk9PntcbiAgICAgICAgICAgIGxldCB7IHggLCB5ICB9ID0gcGFyYW07XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVubmVjZXNzYXJ5LWNvbmRpdGlvblxuICAgICAgICAgICAgaWYgKCFldmVudEVsZW1lbnRzW2ldICYmIGN0eC5pc1BvaW50SW5QYXRoICYmIGN0eC5pc1BvaW50SW5QYXRoKHgsIHkpKSB7XG4gICAgICAgICAgICAgICAgZXZlbnRFbGVtZW50c1tpXSA9IGVsZW1lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjaGVja0JvdW5kaW5nQm94KGVsZW1lbnQsIGJvdW5kaW5nQm94KSB7XG4gICAgICAgIGlmICghdGhpcy53b3JraW5nIHx8ICFib3VuZGluZ0JveCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgZXZlbnRzICwgZXZlbnRFbGVtZW50cyAgfSA9IHRoaXM7XG4gICAgICAgIGV2ZW50cy5mb3JFYWNoKChwYXJhbSwgaSk9PntcbiAgICAgICAgICAgIGxldCB7IHggLCB5ICB9ID0gcGFyYW07XG4gICAgICAgICAgICBpZiAoIWV2ZW50RWxlbWVudHNbaV0gJiYgYm91bmRpbmdCb3guaXNQb2ludEluQm94KHgsIHkpKSB7XG4gICAgICAgICAgICAgICAgZXZlbnRFbGVtZW50c1tpXSA9IGVsZW1lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBtYXBYWSh4LCB5KSB7XG4gICAgICAgIGNvbnN0IHsgd2luZG93ICwgY3R4ICB9ID0gdGhpcy5zY3JlZW47XG4gICAgICAgIGNvbnN0IHBvaW50ID0gbmV3IFBvaW50KHgsIHkpO1xuICAgICAgICBsZXQgZWxlbWVudCA9IGN0eC5jYW52YXM7XG4gICAgICAgIHdoaWxlKGVsZW1lbnQpe1xuICAgICAgICAgICAgcG9pbnQueCAtPSBlbGVtZW50Lm9mZnNldExlZnQ7XG4gICAgICAgICAgICBwb2ludC55IC09IGVsZW1lbnQub2Zmc2V0VG9wO1xuICAgICAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQub2Zmc2V0UGFyZW50O1xuICAgICAgICB9XG4gICAgICAgIGlmICh3aW5kb3cgPT09IG51bGwgfHwgd2luZG93ID09PSB2b2lkIDAgPyB2b2lkIDAgOiB3aW5kb3cuc2Nyb2xsWCkge1xuICAgICAgICAgICAgcG9pbnQueCArPSB3aW5kb3cuc2Nyb2xsWDtcbiAgICAgICAgfVxuICAgICAgICBpZiAod2luZG93ID09PSBudWxsIHx8IHdpbmRvdyA9PT0gdm9pZCAwID8gdm9pZCAwIDogd2luZG93LnNjcm9sbFkpIHtcbiAgICAgICAgICAgIHBvaW50LnkgKz0gd2luZG93LnNjcm9sbFk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBvaW50O1xuICAgIH1cbiAgICBvbkNsaWNrKGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHsgeCAsIHkgIH0gPSB0aGlzLm1hcFhZKGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuICAgICAgICB0aGlzLmV2ZW50cy5wdXNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdvbmNsaWNrJyxcbiAgICAgICAgICAgIHgsXG4gICAgICAgICAgICB5LFxuICAgICAgICAgICAgcnVuIChldmVudFRhcmdldCkge1xuICAgICAgICAgICAgICAgIGlmIChldmVudFRhcmdldC5vbkNsaWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50VGFyZ2V0Lm9uQ2xpY2soKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBvbk1vdXNlTW92ZShldmVudCkge1xuICAgICAgICBjb25zdCB7IHggLCB5ICB9ID0gdGhpcy5tYXBYWShldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTtcbiAgICAgICAgdGhpcy5ldmVudHMucHVzaCh7XG4gICAgICAgICAgICB0eXBlOiAnb25tb3VzZW1vdmUnLFxuICAgICAgICAgICAgeCxcbiAgICAgICAgICAgIHksXG4gICAgICAgICAgICBydW4gKGV2ZW50VGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50VGFyZ2V0Lm9uTW91c2VNb3ZlKSB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50VGFyZ2V0Lm9uTW91c2VNb3ZlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgY29uc3RydWN0b3Ioc2NyZWVuKXtcbiAgICAgICAgdGhpcy5zY3JlZW4gPSBzY3JlZW47XG4gICAgICAgIHRoaXMud29ya2luZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmV2ZW50cyA9IFtdO1xuICAgICAgICB0aGlzLmV2ZW50RWxlbWVudHMgPSBbXTtcbiAgICAgICAgdGhpcy5vbkNsaWNrID0gdGhpcy5vbkNsaWNrLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMub25Nb3VzZU1vdmUgPSB0aGlzLm9uTW91c2VNb3ZlLmJpbmQodGhpcyk7XG4gICAgfVxufVxuXG5jb25zdCBkZWZhdWx0V2luZG93ID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cgOiBudWxsO1xuY29uc3QgZGVmYXVsdEZldGNoJDEgPSB0eXBlb2YgZmV0Y2ggIT09ICd1bmRlZmluZWQnID8gZmV0Y2guYmluZCh1bmRlZmluZWQpIC8vIGBmZXRjaGAgZGVwZW5kcyBvbiBjb250ZXh0OiBgc29tZU9iamVjdC5mZXRjaCguLi4pYCB3aWxsIHRocm93IGVycm9yLlxuIDogdW5kZWZpbmVkO1xuY2xhc3MgU2NyZWVuIHtcbiAgICB3YWl0KGNoZWNrZXIpIHtcbiAgICAgICAgdGhpcy53YWl0cy5wdXNoKGNoZWNrZXIpO1xuICAgIH1cbiAgICByZWFkeSgpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1taXN1c2VkLXByb21pc2VzXG4gICAgICAgIGlmICghdGhpcy5yZWFkeVByb21pc2UpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5yZWFkeVByb21pc2U7XG4gICAgfVxuICAgIGlzUmVhZHkoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzUmVhZHlMb2NrKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpc1JlYWR5TG9jayA9IHRoaXMud2FpdHMuZXZlcnkoKF8pPT5fKClcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGlzUmVhZHlMb2NrKSB7XG4gICAgICAgICAgICB0aGlzLndhaXRzID0gW107XG4gICAgICAgICAgICBpZiAodGhpcy5yZXNvbHZlUmVhZHkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc29sdmVSZWFkeSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNSZWFkeUxvY2sgPSBpc1JlYWR5TG9jaztcbiAgICAgICAgcmV0dXJuIGlzUmVhZHlMb2NrO1xuICAgIH1cbiAgICBzZXREZWZhdWx0cyhjdHgpIHtcbiAgICAgICAgLy8gaW5pdGlhbCB2YWx1ZXMgYW5kIGRlZmF1bHRzXG4gICAgICAgIGN0eC5zdHJva2VTdHlsZSA9ICdyZ2JhKDAsMCwwLDApJztcbiAgICAgICAgY3R4LmxpbmVDYXAgPSAnYnV0dCc7XG4gICAgICAgIGN0eC5saW5lSm9pbiA9ICdtaXRlcic7XG4gICAgICAgIGN0eC5taXRlckxpbWl0ID0gNDtcbiAgICB9XG4gICAgc2V0Vmlld0JveChwYXJhbSkge1xuICAgICAgICBsZXQgeyBkb2N1bWVudCAsIGN0eCAsIGFzcGVjdFJhdGlvICwgd2lkdGggLCBkZXNpcmVkV2lkdGggLCBoZWlnaHQgLCBkZXNpcmVkSGVpZ2h0ICwgbWluWCA9MCAsIG1pblkgPTAgLCByZWZYICwgcmVmWSAsIGNsaXAgPWZhbHNlICwgY2xpcFggPTAgLCBjbGlwWSA9MCAgfSA9IHBhcmFtO1xuICAgICAgICAvLyBhc3BlY3QgcmF0aW8gLSBodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcvY29vcmRzLmh0bWwjUHJlc2VydmVBc3BlY3RSYXRpb0F0dHJpYnV0ZVxuICAgICAgICBjb25zdCBjbGVhbkFzcGVjdFJhdGlvID0gY29tcHJlc3NTcGFjZXMoYXNwZWN0UmF0aW8pLnJlcGxhY2UoL15kZWZlclxccy8sICcnKSAvLyBpZ25vcmUgZGVmZXJcbiAgICAgICAgO1xuICAgICAgICBjb25zdCBbYXNwZWN0UmF0aW9BbGlnbiwgYXNwZWN0UmF0aW9NZWV0T3JTbGljZV0gPSBjbGVhbkFzcGVjdFJhdGlvLnNwbGl0KCcgJyk7XG4gICAgICAgIGNvbnN0IGFsaWduID0gYXNwZWN0UmF0aW9BbGlnbiB8fCAneE1pZFlNaWQnO1xuICAgICAgICBjb25zdCBtZWV0T3JTbGljZSA9IGFzcGVjdFJhdGlvTWVldE9yU2xpY2UgfHwgJ21lZXQnO1xuICAgICAgICAvLyBjYWxjdWxhdGUgc2NhbGVcbiAgICAgICAgY29uc3Qgc2NhbGVYID0gd2lkdGggLyBkZXNpcmVkV2lkdGg7XG4gICAgICAgIGNvbnN0IHNjYWxlWSA9IGhlaWdodCAvIGRlc2lyZWRIZWlnaHQ7XG4gICAgICAgIGNvbnN0IHNjYWxlTWluID0gTWF0aC5taW4oc2NhbGVYLCBzY2FsZVkpO1xuICAgICAgICBjb25zdCBzY2FsZU1heCA9IE1hdGgubWF4KHNjYWxlWCwgc2NhbGVZKTtcbiAgICAgICAgbGV0IGZpbmFsRGVzaXJlZFdpZHRoID0gZGVzaXJlZFdpZHRoO1xuICAgICAgICBsZXQgZmluYWxEZXNpcmVkSGVpZ2h0ID0gZGVzaXJlZEhlaWdodDtcbiAgICAgICAgaWYgKG1lZXRPclNsaWNlID09PSAnbWVldCcpIHtcbiAgICAgICAgICAgIGZpbmFsRGVzaXJlZFdpZHRoICo9IHNjYWxlTWluO1xuICAgICAgICAgICAgZmluYWxEZXNpcmVkSGVpZ2h0ICo9IHNjYWxlTWluO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZWV0T3JTbGljZSA9PT0gJ3NsaWNlJykge1xuICAgICAgICAgICAgZmluYWxEZXNpcmVkV2lkdGggKj0gc2NhbGVNYXg7XG4gICAgICAgICAgICBmaW5hbERlc2lyZWRIZWlnaHQgKj0gc2NhbGVNYXg7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVmWFByb3AgPSBuZXcgUHJvcGVydHkoZG9jdW1lbnQsICdyZWZYJywgcmVmWCk7XG4gICAgICAgIGNvbnN0IHJlZllQcm9wID0gbmV3IFByb3BlcnR5KGRvY3VtZW50LCAncmVmWScsIHJlZlkpO1xuICAgICAgICBjb25zdCBoYXNSZWZzID0gcmVmWFByb3AuaGFzVmFsdWUoKSAmJiByZWZZUHJvcC5oYXNWYWx1ZSgpO1xuICAgICAgICBpZiAoaGFzUmVmcykge1xuICAgICAgICAgICAgY3R4LnRyYW5zbGF0ZSgtc2NhbGVNaW4gKiByZWZYUHJvcC5nZXRQaXhlbHMoJ3gnKSwgLXNjYWxlTWluICogcmVmWVByb3AuZ2V0UGl4ZWxzKCd5JykpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjbGlwKSB7XG4gICAgICAgICAgICBjb25zdCBzY2FsZWRDbGlwWCA9IHNjYWxlTWluICogY2xpcFg7XG4gICAgICAgICAgICBjb25zdCBzY2FsZWRDbGlwWSA9IHNjYWxlTWluICogY2xpcFk7XG4gICAgICAgICAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICBjdHgubW92ZVRvKHNjYWxlZENsaXBYLCBzY2FsZWRDbGlwWSk7XG4gICAgICAgICAgICBjdHgubGluZVRvKHdpZHRoLCBzY2FsZWRDbGlwWSk7XG4gICAgICAgICAgICBjdHgubGluZVRvKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICAgICAgY3R4LmxpbmVUbyhzY2FsZWRDbGlwWCwgaGVpZ2h0KTtcbiAgICAgICAgICAgIGN0eC5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgIGN0eC5jbGlwKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFoYXNSZWZzKSB7XG4gICAgICAgICAgICBjb25zdCBpc01lZXRNaW5ZID0gbWVldE9yU2xpY2UgPT09ICdtZWV0JyAmJiBzY2FsZU1pbiA9PT0gc2NhbGVZO1xuICAgICAgICAgICAgY29uc3QgaXNTbGljZU1heFkgPSBtZWV0T3JTbGljZSA9PT0gJ3NsaWNlJyAmJiBzY2FsZU1heCA9PT0gc2NhbGVZO1xuICAgICAgICAgICAgY29uc3QgaXNNZWV0TWluWCA9IG1lZXRPclNsaWNlID09PSAnbWVldCcgJiYgc2NhbGVNaW4gPT09IHNjYWxlWDtcbiAgICAgICAgICAgIGNvbnN0IGlzU2xpY2VNYXhYID0gbWVldE9yU2xpY2UgPT09ICdzbGljZScgJiYgc2NhbGVNYXggPT09IHNjYWxlWDtcbiAgICAgICAgICAgIGlmIChhbGlnbi5zdGFydHNXaXRoKCd4TWlkJykgJiYgKGlzTWVldE1pblkgfHwgaXNTbGljZU1heFkpKSB7XG4gICAgICAgICAgICAgICAgY3R4LnRyYW5zbGF0ZSh3aWR0aCAvIDIgLSBmaW5hbERlc2lyZWRXaWR0aCAvIDIsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFsaWduLmVuZHNXaXRoKCdZTWlkJykgJiYgKGlzTWVldE1pblggfHwgaXNTbGljZU1heFgpKSB7XG4gICAgICAgICAgICAgICAgY3R4LnRyYW5zbGF0ZSgwLCBoZWlnaHQgLyAyIC0gZmluYWxEZXNpcmVkSGVpZ2h0IC8gMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYWxpZ24uc3RhcnRzV2l0aCgneE1heCcpICYmIChpc01lZXRNaW5ZIHx8IGlzU2xpY2VNYXhZKSkge1xuICAgICAgICAgICAgICAgIGN0eC50cmFuc2xhdGUod2lkdGggLSBmaW5hbERlc2lyZWRXaWR0aCwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYWxpZ24uZW5kc1dpdGgoJ1lNYXgnKSAmJiAoaXNNZWV0TWluWCB8fCBpc1NsaWNlTWF4WCkpIHtcbiAgICAgICAgICAgICAgICBjdHgudHJhbnNsYXRlKDAsIGhlaWdodCAtIGZpbmFsRGVzaXJlZEhlaWdodCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gc2NhbGVcbiAgICAgICAgc3dpdGNoKHRydWUpe1xuICAgICAgICAgICAgY2FzZSBhbGlnbiA9PT0gJ25vbmUnOlxuICAgICAgICAgICAgICAgIGN0eC5zY2FsZShzY2FsZVgsIHNjYWxlWSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIG1lZXRPclNsaWNlID09PSAnbWVldCc6XG4gICAgICAgICAgICAgICAgY3R4LnNjYWxlKHNjYWxlTWluLCBzY2FsZU1pbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIG1lZXRPclNsaWNlID09PSAnc2xpY2UnOlxuICAgICAgICAgICAgICAgIGN0eC5zY2FsZShzY2FsZU1heCwgc2NhbGVNYXgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIC8vIHRyYW5zbGF0ZVxuICAgICAgICBjdHgudHJhbnNsYXRlKC1taW5YLCAtbWluWSk7XG4gICAgfVxuICAgIHN0YXJ0KGVsZW1lbnQpIHtcbiAgICAgICAgbGV0IHsgZW5hYmxlUmVkcmF3ID1mYWxzZSAsIGlnbm9yZU1vdXNlID1mYWxzZSAsIGlnbm9yZUFuaW1hdGlvbiA9ZmFsc2UgLCBpZ25vcmVEaW1lbnNpb25zID1mYWxzZSAsIGlnbm9yZUNsZWFyID1mYWxzZSAsIGZvcmNlUmVkcmF3ICwgc2NhbGVXaWR0aCAsIHNjYWxlSGVpZ2h0ICwgb2Zmc2V0WCAsIG9mZnNldFkgIH0gPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHZvaWQgMCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICAgICAgICBjb25zdCB7IG1vdXNlICB9ID0gdGhpcztcbiAgICAgICAgY29uc3QgZnJhbWVEdXJhdGlvbiA9IDEwMDAgLyBTY3JlZW4uRlJBTUVSQVRFO1xuICAgICAgICB0aGlzLmlzUmVhZHlMb2NrID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZnJhbWVEdXJhdGlvbiA9IGZyYW1lRHVyYXRpb247XG4gICAgICAgIHRoaXMucmVhZHlQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUpPT57XG4gICAgICAgICAgICB0aGlzLnJlc29sdmVSZWFkeSA9IHJlc29sdmU7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodGhpcy5pc1JlYWR5KCkpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyKGVsZW1lbnQsIGlnbm9yZURpbWVuc2lvbnMsIGlnbm9yZUNsZWFyLCBzY2FsZVdpZHRoLCBzY2FsZUhlaWdodCwgb2Zmc2V0WCwgb2Zmc2V0WSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFlbmFibGVSZWRyYXcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgbGV0IHRoZW4gPSBub3c7XG4gICAgICAgIGxldCBkZWx0YSA9IDA7XG4gICAgICAgIGNvbnN0IHRpY2sgPSAoKT0+e1xuICAgICAgICAgICAgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIGRlbHRhID0gbm93IC0gdGhlbjtcbiAgICAgICAgICAgIGlmIChkZWx0YSA+PSBmcmFtZUR1cmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhlbiA9IG5vdyAtIGRlbHRhICUgZnJhbWVEdXJhdGlvbjtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zaG91bGRVcGRhdGUoaWdub3JlQW5pbWF0aW9uLCBmb3JjZVJlZHJhdykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXIoZWxlbWVudCwgaWdub3JlRGltZW5zaW9ucywgaWdub3JlQ2xlYXIsIHNjYWxlV2lkdGgsIHNjYWxlSGVpZ2h0LCBvZmZzZXRYLCBvZmZzZXRZKTtcbiAgICAgICAgICAgICAgICAgICAgbW91c2UucnVuRXZlbnRzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5pbnRlcnZhbElkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spO1xuICAgICAgICB9O1xuICAgICAgICBpZiAoIWlnbm9yZU1vdXNlKSB7XG4gICAgICAgICAgICBtb3VzZS5zdGFydCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW50ZXJ2YWxJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKTtcbiAgICB9XG4gICAgc3RvcCgpIHtcbiAgICAgICAgaWYgKHRoaXMuaW50ZXJ2YWxJZCkge1xuICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lLmNhbmNlbCh0aGlzLmludGVydmFsSWQpO1xuICAgICAgICAgICAgdGhpcy5pbnRlcnZhbElkID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1vdXNlLnN0b3AoKTtcbiAgICB9XG4gICAgc2hvdWxkVXBkYXRlKGlnbm9yZUFuaW1hdGlvbiwgZm9yY2VSZWRyYXcpIHtcbiAgICAgICAgLy8gbmVlZCB1cGRhdGUgZnJvbSBhbmltYXRpb25zP1xuICAgICAgICBpZiAoIWlnbm9yZUFuaW1hdGlvbikge1xuICAgICAgICAgICAgY29uc3QgeyBmcmFtZUR1cmF0aW9uICB9ID0gdGhpcztcbiAgICAgICAgICAgIGNvbnN0IHNob3VsZFVwZGF0ZTEgPSB0aGlzLmFuaW1hdGlvbnMucmVkdWNlKChzaG91bGRVcGRhdGUsIGFuaW1hdGlvbik9PmFuaW1hdGlvbi51cGRhdGUoZnJhbWVEdXJhdGlvbikgfHwgc2hvdWxkVXBkYXRlXG4gICAgICAgICAgICAsIGZhbHNlKTtcbiAgICAgICAgICAgIGlmIChzaG91bGRVcGRhdGUxKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gbmVlZCB1cGRhdGUgZnJvbSByZWRyYXc/XG4gICAgICAgIGlmICh0eXBlb2YgZm9yY2VSZWRyYXcgPT09ICdmdW5jdGlvbicgJiYgZm9yY2VSZWRyYXcoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmlzUmVhZHlMb2NrICYmIHRoaXMuaXNSZWFkeSgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBuZWVkIHVwZGF0ZSBmcm9tIG1vdXNlIGV2ZW50cz9cbiAgICAgICAgaWYgKHRoaXMubW91c2UuaGFzRXZlbnRzKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmVuZGVyKGVsZW1lbnQsIGlnbm9yZURpbWVuc2lvbnMsIGlnbm9yZUNsZWFyLCBzY2FsZVdpZHRoLCBzY2FsZUhlaWdodCwgb2Zmc2V0WCwgb2Zmc2V0WSkge1xuICAgICAgICBjb25zdCB7IHZpZXdQb3J0ICwgY3R4ICwgaXNGaXJzdFJlbmRlciAgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGNhbnZhcyA9IGN0eC5jYW52YXM7XG4gICAgICAgIHZpZXdQb3J0LmNsZWFyKCk7XG4gICAgICAgIGlmIChjYW52YXMud2lkdGggJiYgY2FudmFzLmhlaWdodCkge1xuICAgICAgICAgICAgdmlld1BvcnQuc2V0Q3VycmVudChjYW52YXMud2lkdGgsIGNhbnZhcy5oZWlnaHQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHdpZHRoU3R5bGUgPSBlbGVtZW50LmdldFN0eWxlKCd3aWR0aCcpO1xuICAgICAgICBjb25zdCBoZWlnaHRTdHlsZSA9IGVsZW1lbnQuZ2V0U3R5bGUoJ2hlaWdodCcpO1xuICAgICAgICBpZiAoIWlnbm9yZURpbWVuc2lvbnMgJiYgKGlzRmlyc3RSZW5kZXIgfHwgdHlwZW9mIHNjYWxlV2lkdGggIT09ICdudW1iZXInICYmIHR5cGVvZiBzY2FsZUhlaWdodCAhPT0gJ251bWJlcicpKSB7XG4gICAgICAgICAgICAvLyBzZXQgY2FudmFzIHNpemVcbiAgICAgICAgICAgIGlmICh3aWR0aFN0eWxlLmhhc1ZhbHVlKCkpIHtcbiAgICAgICAgICAgICAgICBjYW52YXMud2lkdGggPSB3aWR0aFN0eWxlLmdldFBpeGVscygneCcpO1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktY29uZGl0aW9uXG4gICAgICAgICAgICAgICAgaWYgKGNhbnZhcy5zdHlsZSkge1xuICAgICAgICAgICAgICAgICAgICBjYW52YXMuc3R5bGUud2lkdGggPSBcIlwiLmNvbmNhdChjYW52YXMud2lkdGgsIFwicHhcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGhlaWdodFN0eWxlLmhhc1ZhbHVlKCkpIHtcbiAgICAgICAgICAgICAgICBjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0U3R5bGUuZ2V0UGl4ZWxzKCd5Jyk7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS1jb25kaXRpb25cbiAgICAgICAgICAgICAgICBpZiAoY2FudmFzLnN0eWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbnZhcy5zdHlsZS5oZWlnaHQgPSBcIlwiLmNvbmNhdChjYW52YXMuaGVpZ2h0LCBcInB4XCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgY1dpZHRoID0gY2FudmFzLmNsaWVudFdpZHRoIHx8IGNhbnZhcy53aWR0aDtcbiAgICAgICAgbGV0IGNIZWlnaHQgPSBjYW52YXMuY2xpZW50SGVpZ2h0IHx8IGNhbnZhcy5oZWlnaHQ7XG4gICAgICAgIGlmIChpZ25vcmVEaW1lbnNpb25zICYmIHdpZHRoU3R5bGUuaGFzVmFsdWUoKSAmJiBoZWlnaHRTdHlsZS5oYXNWYWx1ZSgpKSB7XG4gICAgICAgICAgICBjV2lkdGggPSB3aWR0aFN0eWxlLmdldFBpeGVscygneCcpO1xuICAgICAgICAgICAgY0hlaWdodCA9IGhlaWdodFN0eWxlLmdldFBpeGVscygneScpO1xuICAgICAgICB9XG4gICAgICAgIHZpZXdQb3J0LnNldEN1cnJlbnQoY1dpZHRoLCBjSGVpZ2h0KTtcbiAgICAgICAgaWYgKHR5cGVvZiBvZmZzZXRYID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3gnLCB0cnVlKS5zZXRWYWx1ZShvZmZzZXRYKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIG9mZnNldFkgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBlbGVtZW50LmdldEF0dHJpYnV0ZSgneScsIHRydWUpLnNldFZhbHVlKG9mZnNldFkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Ygc2NhbGVXaWR0aCA9PT0gJ251bWJlcicgfHwgdHlwZW9mIHNjYWxlSGVpZ2h0ID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgY29uc3Qgdmlld0JveCA9IHRvTnVtYmVycyhlbGVtZW50LmdldEF0dHJpYnV0ZSgndmlld0JveCcpLmdldFN0cmluZygpKTtcbiAgICAgICAgICAgIGxldCB4UmF0aW8gPSAwO1xuICAgICAgICAgICAgbGV0IHlSYXRpbyA9IDA7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHNjYWxlV2lkdGggPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgd2lkdGhTdHlsZSA9IGVsZW1lbnQuZ2V0U3R5bGUoJ3dpZHRoJyk7XG4gICAgICAgICAgICAgICAgaWYgKHdpZHRoU3R5bGUuaGFzVmFsdWUoKSkge1xuICAgICAgICAgICAgICAgICAgICB4UmF0aW8gPSB3aWR0aFN0eWxlLmdldFBpeGVscygneCcpIC8gc2NhbGVXaWR0aDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZpZXdCb3hbMl0gJiYgIWlzTmFOKHZpZXdCb3hbMl0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHhSYXRpbyA9IHZpZXdCb3hbMl0gLyBzY2FsZVdpZHRoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc2NhbGVIZWlnaHQgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaGVpZ2h0U3R5bGUgPSBlbGVtZW50LmdldFN0eWxlKCdoZWlnaHQnKTtcbiAgICAgICAgICAgICAgICBpZiAoaGVpZ2h0U3R5bGUuaGFzVmFsdWUoKSkge1xuICAgICAgICAgICAgICAgICAgICB5UmF0aW8gPSBoZWlnaHRTdHlsZS5nZXRQaXhlbHMoJ3knKSAvIHNjYWxlSGVpZ2h0O1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmlld0JveFszXSAmJiAhaXNOYU4odmlld0JveFszXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgeVJhdGlvID0gdmlld0JveFszXSAvIHNjYWxlSGVpZ2h0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgheFJhdGlvKSB7XG4gICAgICAgICAgICAgICAgeFJhdGlvID0geVJhdGlvO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF5UmF0aW8pIHtcbiAgICAgICAgICAgICAgICB5UmF0aW8gPSB4UmF0aW87XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbGVtZW50LmdldEF0dHJpYnV0ZSgnd2lkdGgnLCB0cnVlKS5zZXRWYWx1ZShzY2FsZVdpZHRoKTtcbiAgICAgICAgICAgIGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdoZWlnaHQnLCB0cnVlKS5zZXRWYWx1ZShzY2FsZUhlaWdodCk7XG4gICAgICAgICAgICBjb25zdCB0cmFuc2Zvcm1TdHlsZSA9IGVsZW1lbnQuZ2V0U3R5bGUoJ3RyYW5zZm9ybScsIHRydWUsIHRydWUpO1xuICAgICAgICAgICAgdHJhbnNmb3JtU3R5bGUuc2V0VmFsdWUoXCJcIi5jb25jYXQodHJhbnNmb3JtU3R5bGUuZ2V0U3RyaW5nKCksIFwiIHNjYWxlKFwiKS5jb25jYXQoMSAvIHhSYXRpbywgXCIsIFwiKS5jb25jYXQoMSAvIHlSYXRpbywgXCIpXCIpKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjbGVhciBhbmQgcmVuZGVyXG4gICAgICAgIGlmICghaWdub3JlQ2xlYXIpIHtcbiAgICAgICAgICAgIGN0eC5jbGVhclJlY3QoMCwgMCwgY1dpZHRoLCBjSGVpZ2h0KTtcbiAgICAgICAgfVxuICAgICAgICBlbGVtZW50LnJlbmRlcihjdHgpO1xuICAgICAgICBpZiAoaXNGaXJzdFJlbmRlcikge1xuICAgICAgICAgICAgdGhpcy5pc0ZpcnN0UmVuZGVyID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3RydWN0b3IoY3R4LCB7IGZldGNoID1kZWZhdWx0RmV0Y2gkMSAsIHdpbmRvdyA9ZGVmYXVsdFdpbmRvdyAgfSA9IHt9KXtcbiAgICAgICAgdGhpcy5jdHggPSBjdHg7XG4gICAgICAgIHRoaXMudmlld1BvcnQgPSBuZXcgVmlld1BvcnQoKTtcbiAgICAgICAgdGhpcy5tb3VzZSA9IG5ldyBNb3VzZSh0aGlzKTtcbiAgICAgICAgdGhpcy5hbmltYXRpb25zID0gW107XG4gICAgICAgIHRoaXMud2FpdHMgPSBbXTtcbiAgICAgICAgdGhpcy5mcmFtZUR1cmF0aW9uID0gMDtcbiAgICAgICAgdGhpcy5pc1JlYWR5TG9jayA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzRmlyc3RSZW5kZXIgPSB0cnVlO1xuICAgICAgICB0aGlzLmludGVydmFsSWQgPSBudWxsO1xuICAgICAgICB0aGlzLndpbmRvdyA9IHdpbmRvdztcbiAgICAgICAgaWYgKCFmZXRjaCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgZmluZCAnZmV0Y2gnIGluICdnbG9iYWxUaGlzJywgcGxlYXNlIHByb3ZpZGUgaXQgdmlhIG9wdGlvbnNcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mZXRjaCA9IGZldGNoO1xuICAgIH1cbn1cblNjcmVlbi5kZWZhdWx0V2luZG93ID0gZGVmYXVsdFdpbmRvdztcblNjcmVlbi5kZWZhdWx0RmV0Y2ggPSBkZWZhdWx0RmV0Y2gkMTtcblNjcmVlbi5GUkFNRVJBVEUgPSAzMDtcblNjcmVlbi5NQVhfVklSVFVBTF9QSVhFTFMgPSAzMDAwMDtcblxuY29uc3QgeyBkZWZhdWx0RmV0Y2ggIH0gPSBTY3JlZW47XG5jb25zdCBEZWZhdWx0RE9NUGFyc2VyID0gdHlwZW9mIERPTVBhcnNlciAhPT0gJ3VuZGVmaW5lZCcgPyBET01QYXJzZXIgOiB1bmRlZmluZWQ7XG5jbGFzcyBQYXJzZXIge1xuICAgIGFzeW5jIHBhcnNlKHJlc291cmNlKSB7XG4gICAgICAgIGlmIChyZXNvdXJjZS5zdGFydHNXaXRoKCc8JykpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlRnJvbVN0cmluZyhyZXNvdXJjZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMubG9hZChyZXNvdXJjZSk7XG4gICAgfVxuICAgIHBhcnNlRnJvbVN0cmluZyh4bWwpIHtcbiAgICAgICAgY29uc3QgcGFyc2VyID0gbmV3IHRoaXMuRE9NUGFyc2VyKCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jaGVja0RvY3VtZW50KHBhcnNlci5wYXJzZUZyb21TdHJpbmcoeG1sLCAnaW1hZ2Uvc3ZnK3htbCcpKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jaGVja0RvY3VtZW50KHBhcnNlci5wYXJzZUZyb21TdHJpbmcoeG1sLCAndGV4dC94bWwnKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2hlY2tEb2N1bWVudChkb2N1bWVudCkge1xuICAgICAgICBjb25zdCBwYXJzZXJFcnJvciA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdwYXJzZXJlcnJvcicpWzBdO1xuICAgICAgICBpZiAocGFyc2VyRXJyb3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihwYXJzZXJFcnJvci50ZXh0Q29udGVudCB8fCAnVW5rbm93biBwYXJzZSBlcnJvcicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkb2N1bWVudDtcbiAgICB9XG4gICAgYXN5bmMgbG9hZCh1cmwpIHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoKHVybCk7XG4gICAgICAgIGNvbnN0IHhtbCA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VGcm9tU3RyaW5nKHhtbCk7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKHsgZmV0Y2ggPWRlZmF1bHRGZXRjaCAsIERPTVBhcnNlciA9RGVmYXVsdERPTVBhcnNlciAgfSA9IHt9KXtcbiAgICAgICAgaWYgKCFmZXRjaCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgZmluZCAnZmV0Y2gnIGluICdnbG9iYWxUaGlzJywgcGxlYXNlIHByb3ZpZGUgaXQgdmlhIG9wdGlvbnNcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFET01QYXJzZXIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbid0IGZpbmQgJ0RPTVBhcnNlcicgaW4gJ2dsb2JhbFRoaXMnLCBwbGVhc2UgcHJvdmlkZSBpdCB2aWEgb3B0aW9uc1wiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZldGNoID0gZmV0Y2g7XG4gICAgICAgIHRoaXMuRE9NUGFyc2VyID0gRE9NUGFyc2VyO1xuICAgIH1cbn1cblxuY2xhc3MgVHJhbnNsYXRlIHtcbiAgICBhcHBseShjdHgpIHtcbiAgICAgICAgY29uc3QgeyB4ICwgeSAgfSA9IHRoaXMucG9pbnQ7XG4gICAgICAgIGN0eC50cmFuc2xhdGUoeCB8fCAwLCB5IHx8IDApO1xuICAgIH1cbiAgICB1bmFwcGx5KGN0eCkge1xuICAgICAgICBjb25zdCB7IHggLCB5ICB9ID0gdGhpcy5wb2ludDtcbiAgICAgICAgY3R4LnRyYW5zbGF0ZSgtMSAqIHggfHwgMCwgLTEgKiB5IHx8IDApO1xuICAgIH1cbiAgICBhcHBseVRvUG9pbnQocG9pbnQpIHtcbiAgICAgICAgY29uc3QgeyB4ICwgeSAgfSA9IHRoaXMucG9pbnQ7XG4gICAgICAgIHBvaW50LmFwcGx5VHJhbnNmb3JtKFtcbiAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIDEsXG4gICAgICAgICAgICB4IHx8IDAsXG4gICAgICAgICAgICB5IHx8IDBcbiAgICAgICAgXSk7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKF8sIHBvaW50KXtcbiAgICAgICAgdGhpcy50eXBlID0gJ3RyYW5zbGF0ZSc7XG4gICAgICAgIHRoaXMucG9pbnQgPSBQb2ludC5wYXJzZShwb2ludCk7XG4gICAgfVxufVxuXG5jbGFzcyBSb3RhdGUge1xuICAgIGFwcGx5KGN0eCkge1xuICAgICAgICBjb25zdCB7IGN4ICwgY3kgLCBvcmlnaW5YICwgb3JpZ2luWSAsIGFuZ2xlICB9ID0gdGhpcztcbiAgICAgICAgY29uc3QgdHggPSBjeCArIG9yaWdpblguZ2V0UGl4ZWxzKCd4Jyk7XG4gICAgICAgIGNvbnN0IHR5ID0gY3kgKyBvcmlnaW5ZLmdldFBpeGVscygneScpO1xuICAgICAgICBjdHgudHJhbnNsYXRlKHR4LCB0eSk7XG4gICAgICAgIGN0eC5yb3RhdGUoYW5nbGUuZ2V0UmFkaWFucygpKTtcbiAgICAgICAgY3R4LnRyYW5zbGF0ZSgtdHgsIC10eSk7XG4gICAgfVxuICAgIHVuYXBwbHkoY3R4KSB7XG4gICAgICAgIGNvbnN0IHsgY3ggLCBjeSAsIG9yaWdpblggLCBvcmlnaW5ZICwgYW5nbGUgIH0gPSB0aGlzO1xuICAgICAgICBjb25zdCB0eCA9IGN4ICsgb3JpZ2luWC5nZXRQaXhlbHMoJ3gnKTtcbiAgICAgICAgY29uc3QgdHkgPSBjeSArIG9yaWdpblkuZ2V0UGl4ZWxzKCd5Jyk7XG4gICAgICAgIGN0eC50cmFuc2xhdGUodHgsIHR5KTtcbiAgICAgICAgY3R4LnJvdGF0ZSgtMSAqIGFuZ2xlLmdldFJhZGlhbnMoKSk7XG4gICAgICAgIGN0eC50cmFuc2xhdGUoLXR4LCAtdHkpO1xuICAgIH1cbiAgICBhcHBseVRvUG9pbnQocG9pbnQpIHtcbiAgICAgICAgY29uc3QgeyBjeCAsIGN5ICwgYW5nbGUgIH0gPSB0aGlzO1xuICAgICAgICBjb25zdCByYWQgPSBhbmdsZS5nZXRSYWRpYW5zKCk7XG4gICAgICAgIHBvaW50LmFwcGx5VHJhbnNmb3JtKFtcbiAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIDEsXG4gICAgICAgICAgICBjeCB8fCAwLFxuICAgICAgICAgICAgY3kgfHwgMCAvLyB0aGlzLnAueVxuICAgICAgICBdKTtcbiAgICAgICAgcG9pbnQuYXBwbHlUcmFuc2Zvcm0oW1xuICAgICAgICAgICAgTWF0aC5jb3MocmFkKSxcbiAgICAgICAgICAgIE1hdGguc2luKHJhZCksXG4gICAgICAgICAgICAtTWF0aC5zaW4ocmFkKSxcbiAgICAgICAgICAgIE1hdGguY29zKHJhZCksXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgMFxuICAgICAgICBdKTtcbiAgICAgICAgcG9pbnQuYXBwbHlUcmFuc2Zvcm0oW1xuICAgICAgICAgICAgMSxcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgMSxcbiAgICAgICAgICAgIC1jeCB8fCAwLFxuICAgICAgICAgICAgLWN5IHx8IDAgLy8gLXRoaXMucC55XG4gICAgICAgIF0pO1xuICAgIH1cbiAgICBjb25zdHJ1Y3Rvcihkb2N1bWVudCwgcm90YXRlLCB0cmFuc2Zvcm1PcmlnaW4pe1xuICAgICAgICB0aGlzLnR5cGUgPSAncm90YXRlJztcbiAgICAgICAgY29uc3QgbnVtYmVycyA9IHRvTnVtYmVycyhyb3RhdGUpO1xuICAgICAgICB0aGlzLmFuZ2xlID0gbmV3IFByb3BlcnR5KGRvY3VtZW50LCAnYW5nbGUnLCBudW1iZXJzWzBdKTtcbiAgICAgICAgdGhpcy5vcmlnaW5YID0gdHJhbnNmb3JtT3JpZ2luWzBdO1xuICAgICAgICB0aGlzLm9yaWdpblkgPSB0cmFuc2Zvcm1PcmlnaW5bMV07XG4gICAgICAgIHRoaXMuY3ggPSBudW1iZXJzWzFdIHx8IDA7XG4gICAgICAgIHRoaXMuY3kgPSBudW1iZXJzWzJdIHx8IDA7XG4gICAgfVxufVxuXG5jbGFzcyBTY2FsZSB7XG4gICAgYXBwbHkoY3R4KSB7XG4gICAgICAgIGNvbnN0IHsgc2NhbGU6IHsgeCAsIHkgIH0gLCBvcmlnaW5YICwgb3JpZ2luWSAgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IHR4ID0gb3JpZ2luWC5nZXRQaXhlbHMoJ3gnKTtcbiAgICAgICAgY29uc3QgdHkgPSBvcmlnaW5ZLmdldFBpeGVscygneScpO1xuICAgICAgICBjdHgudHJhbnNsYXRlKHR4LCB0eSk7XG4gICAgICAgIGN0eC5zY2FsZSh4LCB5IHx8IHgpO1xuICAgICAgICBjdHgudHJhbnNsYXRlKC10eCwgLXR5KTtcbiAgICB9XG4gICAgdW5hcHBseShjdHgpIHtcbiAgICAgICAgY29uc3QgeyBzY2FsZTogeyB4ICwgeSAgfSAsIG9yaWdpblggLCBvcmlnaW5ZICB9ID0gdGhpcztcbiAgICAgICAgY29uc3QgdHggPSBvcmlnaW5YLmdldFBpeGVscygneCcpO1xuICAgICAgICBjb25zdCB0eSA9IG9yaWdpblkuZ2V0UGl4ZWxzKCd5Jyk7XG4gICAgICAgIGN0eC50cmFuc2xhdGUodHgsIHR5KTtcbiAgICAgICAgY3R4LnNjYWxlKDEgLyB4LCAxIC8geSB8fCB4KTtcbiAgICAgICAgY3R4LnRyYW5zbGF0ZSgtdHgsIC10eSk7XG4gICAgfVxuICAgIGFwcGx5VG9Qb2ludChwb2ludCkge1xuICAgICAgICBjb25zdCB7IHggLCB5ICB9ID0gdGhpcy5zY2FsZTtcbiAgICAgICAgcG9pbnQuYXBwbHlUcmFuc2Zvcm0oW1xuICAgICAgICAgICAgeCB8fCAwLFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICB5IHx8IDAsXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgMFxuICAgICAgICBdKTtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoXywgc2NhbGUsIHRyYW5zZm9ybU9yaWdpbil7XG4gICAgICAgIHRoaXMudHlwZSA9ICdzY2FsZSc7XG4gICAgICAgIGNvbnN0IHNjYWxlU2l6ZSA9IFBvaW50LnBhcnNlU2NhbGUoc2NhbGUpO1xuICAgICAgICAvLyBXb3JrYXJvdW5kIGZvciBub2RlLWNhbnZhc1xuICAgICAgICBpZiAoc2NhbGVTaXplLnggPT09IDAgfHwgc2NhbGVTaXplLnkgPT09IDApIHtcbiAgICAgICAgICAgIHNjYWxlU2l6ZS54ID0gUFNFVURPX1pFUk87XG4gICAgICAgICAgICBzY2FsZVNpemUueSA9IFBTRVVET19aRVJPO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2NhbGUgPSBzY2FsZVNpemU7XG4gICAgICAgIHRoaXMub3JpZ2luWCA9IHRyYW5zZm9ybU9yaWdpblswXTtcbiAgICAgICAgdGhpcy5vcmlnaW5ZID0gdHJhbnNmb3JtT3JpZ2luWzFdO1xuICAgIH1cbn1cblxuY2xhc3MgTWF0cml4IHtcbiAgICBhcHBseShjdHgpIHtcbiAgICAgICAgY29uc3QgeyBvcmlnaW5YICwgb3JpZ2luWSAsIG1hdHJpeCAgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IHR4ID0gb3JpZ2luWC5nZXRQaXhlbHMoJ3gnKTtcbiAgICAgICAgY29uc3QgdHkgPSBvcmlnaW5ZLmdldFBpeGVscygneScpO1xuICAgICAgICBjdHgudHJhbnNsYXRlKHR4LCB0eSk7XG4gICAgICAgIGN0eC50cmFuc2Zvcm0obWF0cml4WzBdLCBtYXRyaXhbMV0sIG1hdHJpeFsyXSwgbWF0cml4WzNdLCBtYXRyaXhbNF0sIG1hdHJpeFs1XSk7XG4gICAgICAgIGN0eC50cmFuc2xhdGUoLXR4LCAtdHkpO1xuICAgIH1cbiAgICB1bmFwcGx5KGN0eCkge1xuICAgICAgICBjb25zdCB7IG9yaWdpblggLCBvcmlnaW5ZICwgbWF0cml4ICB9ID0gdGhpcztcbiAgICAgICAgY29uc3QgYSA9IG1hdHJpeFswXTtcbiAgICAgICAgY29uc3QgYiA9IG1hdHJpeFsyXTtcbiAgICAgICAgY29uc3QgYyA9IG1hdHJpeFs0XTtcbiAgICAgICAgY29uc3QgZCA9IG1hdHJpeFsxXTtcbiAgICAgICAgY29uc3QgZSA9IG1hdHJpeFszXTtcbiAgICAgICAgY29uc3QgZiA9IG1hdHJpeFs1XTtcbiAgICAgICAgY29uc3QgZyA9IDA7XG4gICAgICAgIGNvbnN0IGggPSAwO1xuICAgICAgICBjb25zdCBpID0gMTtcbiAgICAgICAgY29uc3QgZGV0ID0gMSAvIChhICogKGUgKiBpIC0gZiAqIGgpIC0gYiAqIChkICogaSAtIGYgKiBnKSArIGMgKiAoZCAqIGggLSBlICogZykpO1xuICAgICAgICBjb25zdCB0eCA9IG9yaWdpblguZ2V0UGl4ZWxzKCd4Jyk7XG4gICAgICAgIGNvbnN0IHR5ID0gb3JpZ2luWS5nZXRQaXhlbHMoJ3knKTtcbiAgICAgICAgY3R4LnRyYW5zbGF0ZSh0eCwgdHkpO1xuICAgICAgICBjdHgudHJhbnNmb3JtKGRldCAqIChlICogaSAtIGYgKiBoKSwgZGV0ICogKGYgKiBnIC0gZCAqIGkpLCBkZXQgKiAoYyAqIGggLSBiICogaSksIGRldCAqIChhICogaSAtIGMgKiBnKSwgZGV0ICogKGIgKiBmIC0gYyAqIGUpLCBkZXQgKiAoYyAqIGQgLSBhICogZikpO1xuICAgICAgICBjdHgudHJhbnNsYXRlKC10eCwgLXR5KTtcbiAgICB9XG4gICAgYXBwbHlUb1BvaW50KHBvaW50KSB7XG4gICAgICAgIHBvaW50LmFwcGx5VHJhbnNmb3JtKHRoaXMubWF0cml4KTtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoXywgbWF0cml4LCB0cmFuc2Zvcm1PcmlnaW4pe1xuICAgICAgICB0aGlzLnR5cGUgPSAnbWF0cml4JztcbiAgICAgICAgdGhpcy5tYXRyaXggPSB0b01hdHJpeFZhbHVlKG1hdHJpeCk7XG4gICAgICAgIHRoaXMub3JpZ2luWCA9IHRyYW5zZm9ybU9yaWdpblswXTtcbiAgICAgICAgdGhpcy5vcmlnaW5ZID0gdHJhbnNmb3JtT3JpZ2luWzFdO1xuICAgIH1cbn1cblxuY2xhc3MgU2tldyBleHRlbmRzIE1hdHJpeCB7XG4gICAgY29uc3RydWN0b3IoZG9jdW1lbnQsIHNrZXcsIHRyYW5zZm9ybU9yaWdpbil7XG4gICAgICAgIHN1cGVyKGRvY3VtZW50LCBza2V3LCB0cmFuc2Zvcm1PcmlnaW4pO1xuICAgICAgICB0aGlzLnR5cGUgPSAnc2tldyc7XG4gICAgICAgIHRoaXMuYW5nbGUgPSBuZXcgUHJvcGVydHkoZG9jdW1lbnQsICdhbmdsZScsIHNrZXcpO1xuICAgIH1cbn1cblxuY2xhc3MgU2tld1ggZXh0ZW5kcyBTa2V3IHtcbiAgICBjb25zdHJ1Y3Rvcihkb2N1bWVudCwgc2tldywgdHJhbnNmb3JtT3JpZ2luKXtcbiAgICAgICAgc3VwZXIoZG9jdW1lbnQsIHNrZXcsIHRyYW5zZm9ybU9yaWdpbik7XG4gICAgICAgIHRoaXMudHlwZSA9ICdza2V3WCc7XG4gICAgICAgIHRoaXMubWF0cml4ID0gW1xuICAgICAgICAgICAgMSxcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICBNYXRoLnRhbih0aGlzLmFuZ2xlLmdldFJhZGlhbnMoKSksXG4gICAgICAgICAgICAxLFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIDBcbiAgICAgICAgXTtcbiAgICB9XG59XG5cbmNsYXNzIFNrZXdZIGV4dGVuZHMgU2tldyB7XG4gICAgY29uc3RydWN0b3IoZG9jdW1lbnQsIHNrZXcsIHRyYW5zZm9ybU9yaWdpbil7XG4gICAgICAgIHN1cGVyKGRvY3VtZW50LCBza2V3LCB0cmFuc2Zvcm1PcmlnaW4pO1xuICAgICAgICB0aGlzLnR5cGUgPSAnc2tld1knO1xuICAgICAgICB0aGlzLm1hdHJpeCA9IFtcbiAgICAgICAgICAgIDEsXG4gICAgICAgICAgICBNYXRoLnRhbih0aGlzLmFuZ2xlLmdldFJhZGlhbnMoKSksXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgMSxcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAwXG4gICAgICAgIF07XG4gICAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZVRyYW5zZm9ybXModHJhbnNmb3JtKSB7XG4gICAgcmV0dXJuIGNvbXByZXNzU3BhY2VzKHRyYW5zZm9ybSkudHJpbSgpLnJlcGxhY2UoL1xcKShbYS16QS1aXSkvZywgJykgJDEnKS5yZXBsYWNlKC9cXCkoXFxzPyxcXHM/KS9nLCAnKSAnKS5zcGxpdCgvXFxzKD89W2Etel0pLyk7XG59XG5mdW5jdGlvbiBwYXJzZVRyYW5zZm9ybSh0cmFuc2Zvcm0pIHtcbiAgICBjb25zdCBbdHlwZSA9ICcnLCB2YWx1ZSA9ICcnXSA9IHRyYW5zZm9ybS5zcGxpdCgnKCcpO1xuICAgIHJldHVybiBbXG4gICAgICAgIHR5cGUudHJpbSgpLFxuICAgICAgICB2YWx1ZS50cmltKCkucmVwbGFjZSgnKScsICcnKVxuICAgIF07XG59XG5jbGFzcyBUcmFuc2Zvcm0ge1xuICAgIHN0YXRpYyBmcm9tRWxlbWVudChkb2N1bWVudCwgZWxlbWVudCkge1xuICAgICAgICBjb25zdCB0cmFuc2Zvcm1TdHlsZSA9IGVsZW1lbnQuZ2V0U3R5bGUoJ3RyYW5zZm9ybScsIGZhbHNlLCB0cnVlKTtcbiAgICAgICAgaWYgKHRyYW5zZm9ybVN0eWxlLmhhc1ZhbHVlKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IFt0cmFuc2Zvcm1PcmlnaW5YUHJvcGVydHksIHRyYW5zZm9ybU9yaWdpbllQcm9wZXJ0eSA9IHRyYW5zZm9ybU9yaWdpblhQcm9wZXJ0eV0gPSBlbGVtZW50LmdldFN0eWxlKCd0cmFuc2Zvcm0tb3JpZ2luJywgZmFsc2UsIHRydWUpLnNwbGl0KCk7XG4gICAgICAgICAgICBpZiAodHJhbnNmb3JtT3JpZ2luWFByb3BlcnR5ICYmIHRyYW5zZm9ybU9yaWdpbllQcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zZm9ybU9yaWdpbiA9IFtcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtT3JpZ2luWFByb3BlcnR5LFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1PcmlnaW5ZUHJvcGVydHlcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVHJhbnNmb3JtKGRvY3VtZW50LCB0cmFuc2Zvcm1TdHlsZS5nZXRTdHJpbmcoKSwgdHJhbnNmb3JtT3JpZ2luKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgYXBwbHkoY3R4KSB7XG4gICAgICAgIHRoaXMudHJhbnNmb3Jtcy5mb3JFYWNoKCh0cmFuc2Zvcm0pPT50cmFuc2Zvcm0uYXBwbHkoY3R4KVxuICAgICAgICApO1xuICAgIH1cbiAgICB1bmFwcGx5KGN0eCkge1xuICAgICAgICB0aGlzLnRyYW5zZm9ybXMuZm9yRWFjaCgodHJhbnNmb3JtKT0+dHJhbnNmb3JtLnVuYXBwbHkoY3R4KVxuICAgICAgICApO1xuICAgIH1cbiAgICAvLyBUT0RPOiBhcHBseVRvUG9pbnQgdW51c2VkIC4uLiByZW1vdmU/XG4gICAgYXBwbHlUb1BvaW50KHBvaW50KSB7XG4gICAgICAgIHRoaXMudHJhbnNmb3Jtcy5mb3JFYWNoKCh0cmFuc2Zvcm0pPT50cmFuc2Zvcm0uYXBwbHlUb1BvaW50KHBvaW50KVxuICAgICAgICApO1xuICAgIH1cbiAgICBjb25zdHJ1Y3Rvcihkb2N1bWVudCwgdHJhbnNmb3JtMSwgdHJhbnNmb3JtT3JpZ2luKXtcbiAgICAgICAgdGhpcy5kb2N1bWVudCA9IGRvY3VtZW50O1xuICAgICAgICB0aGlzLnRyYW5zZm9ybXMgPSBbXTtcbiAgICAgICAgY29uc3QgZGF0YSA9IHBhcnNlVHJhbnNmb3Jtcyh0cmFuc2Zvcm0xKTtcbiAgICAgICAgZGF0YS5mb3JFYWNoKCh0cmFuc2Zvcm0pPT57XG4gICAgICAgICAgICBpZiAodHJhbnNmb3JtID09PSAnbm9uZScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBbdHlwZSwgdmFsdWVdID0gcGFyc2VUcmFuc2Zvcm0odHJhbnNmb3JtKTtcbiAgICAgICAgICAgIGNvbnN0IFRyYW5zZm9ybVR5cGUgPSBUcmFuc2Zvcm0udHJhbnNmb3JtVHlwZXNbdHlwZV07XG4gICAgICAgICAgICBpZiAoVHJhbnNmb3JtVHlwZSkge1xuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNmb3Jtcy5wdXNoKG5ldyBUcmFuc2Zvcm1UeXBlKHRoaXMuZG9jdW1lbnQsIHZhbHVlLCB0cmFuc2Zvcm1PcmlnaW4pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufVxuVHJhbnNmb3JtLnRyYW5zZm9ybVR5cGVzID0ge1xuICAgIHRyYW5zbGF0ZTogVHJhbnNsYXRlLFxuICAgIHJvdGF0ZTogUm90YXRlLFxuICAgIHNjYWxlOiBTY2FsZSxcbiAgICBtYXRyaXg6IE1hdHJpeCxcbiAgICBza2V3WDogU2tld1gsXG4gICAgc2tld1k6IFNrZXdZXG59O1xuXG5jbGFzcyBFbGVtZW50IHtcbiAgICBnZXRBdHRyaWJ1dGUobmFtZSkge1xuICAgICAgICBsZXQgY3JlYXRlSWZOb3RFeGlzdHMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHZvaWQgMCA/IGFyZ3VtZW50c1sxXSA6IGZhbHNlO1xuICAgICAgICBjb25zdCBhdHRyID0gdGhpcy5hdHRyaWJ1dGVzW25hbWVdO1xuICAgICAgICBpZiAoIWF0dHIgJiYgY3JlYXRlSWZOb3RFeGlzdHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGF0dHIgPSBuZXcgUHJvcGVydHkodGhpcy5kb2N1bWVudCwgbmFtZSwgJycpO1xuICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzW25hbWVdID0gYXR0cjtcbiAgICAgICAgICAgIHJldHVybiBhdHRyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhdHRyIHx8IFByb3BlcnR5LmVtcHR5KHRoaXMuZG9jdW1lbnQpO1xuICAgIH1cbiAgICBnZXRIcmVmQXR0cmlidXRlKCkge1xuICAgICAgICBsZXQgaHJlZjtcbiAgICAgICAgZm9yKGNvbnN0IGtleSBpbiB0aGlzLmF0dHJpYnV0ZXMpe1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gJ2hyZWYnIHx8IGtleS5lbmRzV2l0aCgnOmhyZWYnKSkge1xuICAgICAgICAgICAgICAgIGhyZWYgPSB0aGlzLmF0dHJpYnV0ZXNba2V5XTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaHJlZiB8fCBQcm9wZXJ0eS5lbXB0eSh0aGlzLmRvY3VtZW50KTtcbiAgICB9XG4gICAgZ2V0U3R5bGUobmFtZSkge1xuICAgICAgICBsZXQgY3JlYXRlSWZOb3RFeGlzdHMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHZvaWQgMCA/IGFyZ3VtZW50c1sxXSA6IGZhbHNlLCBza2lwQW5jZXN0b3JzID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMl0gOiBmYWxzZTtcbiAgICAgICAgY29uc3Qgc3R5bGUgPSB0aGlzLnN0eWxlc1tuYW1lXTtcbiAgICAgICAgaWYgKHN0eWxlKSB7XG4gICAgICAgICAgICByZXR1cm4gc3R5bGU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYXR0ciA9IHRoaXMuZ2V0QXR0cmlidXRlKG5hbWUpO1xuICAgICAgICBpZiAoYXR0ci5oYXNWYWx1ZSgpKSB7XG4gICAgICAgICAgICB0aGlzLnN0eWxlc1tuYW1lXSA9IGF0dHIgLy8gbW92ZSB1cCB0byBtZSB0byBjYWNoZVxuICAgICAgICAgICAgO1xuICAgICAgICAgICAgcmV0dXJuIGF0dHI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFza2lwQW5jZXN0b3JzKSB7XG4gICAgICAgICAgICBjb25zdCB7IHBhcmVudCAgfSA9IHRoaXM7XG4gICAgICAgICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50U3R5bGUgPSBwYXJlbnQuZ2V0U3R5bGUobmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudFN0eWxlLmhhc1ZhbHVlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcmVudFN0eWxlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoY3JlYXRlSWZOb3RFeGlzdHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0eWxlID0gbmV3IFByb3BlcnR5KHRoaXMuZG9jdW1lbnQsIG5hbWUsICcnKTtcbiAgICAgICAgICAgIHRoaXMuc3R5bGVzW25hbWVdID0gc3R5bGU7XG4gICAgICAgICAgICByZXR1cm4gc3R5bGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFByb3BlcnR5LmVtcHR5KHRoaXMuZG9jdW1lbnQpO1xuICAgIH1cbiAgICByZW5kZXIoY3R4KSB7XG4gICAgICAgIC8vIGRvbid0IHJlbmRlciBkaXNwbGF5PW5vbmVcbiAgICAgICAgLy8gZG9uJ3QgcmVuZGVyIHZpc2liaWxpdHk9aGlkZGVuXG4gICAgICAgIGlmICh0aGlzLmdldFN0eWxlKCdkaXNwbGF5JykuZ2V0U3RyaW5nKCkgPT09ICdub25lJyB8fCB0aGlzLmdldFN0eWxlKCd2aXNpYmlsaXR5JykuZ2V0U3RyaW5nKCkgPT09ICdoaWRkZW4nKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY3R4LnNhdmUoKTtcbiAgICAgICAgaWYgKHRoaXMuZ2V0U3R5bGUoJ21hc2snKS5oYXNWYWx1ZSgpKSB7XG4gICAgICAgICAgICBjb25zdCBtYXNrID0gdGhpcy5nZXRTdHlsZSgnbWFzaycpLmdldERlZmluaXRpb24oKTtcbiAgICAgICAgICAgIGlmIChtYXNrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBseUVmZmVjdHMoY3R4KTtcbiAgICAgICAgICAgICAgICBtYXNrLmFwcGx5KGN0eCwgdGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5nZXRTdHlsZSgnZmlsdGVyJykuZ2V0VmFsdWUoJ25vbmUnKSAhPT0gJ25vbmUnKSB7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLmdldFN0eWxlKCdmaWx0ZXInKS5nZXREZWZpbml0aW9uKCk7XG4gICAgICAgICAgICBpZiAoZmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBseUVmZmVjdHMoY3R4KTtcbiAgICAgICAgICAgICAgICBmaWx0ZXIuYXBwbHkoY3R4LCB0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0Q29udGV4dChjdHgpO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJDaGlsZHJlbihjdHgpO1xuICAgICAgICAgICAgdGhpcy5jbGVhckNvbnRleHQoY3R4KTtcbiAgICAgICAgfVxuICAgICAgICBjdHgucmVzdG9yZSgpO1xuICAgIH1cbiAgICBzZXRDb250ZXh0KF8pIHtcbiAgICAvLyBOTyBSRU5ERVJcbiAgICB9XG4gICAgYXBwbHlFZmZlY3RzKGN0eCkge1xuICAgICAgICAvLyB0cmFuc2Zvcm1cbiAgICAgICAgY29uc3QgdHJhbnNmb3JtID0gVHJhbnNmb3JtLmZyb21FbGVtZW50KHRoaXMuZG9jdW1lbnQsIHRoaXMpO1xuICAgICAgICBpZiAodHJhbnNmb3JtKSB7XG4gICAgICAgICAgICB0cmFuc2Zvcm0uYXBwbHkoY3R4KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjbGlwXG4gICAgICAgIGNvbnN0IGNsaXBQYXRoU3R5bGVQcm9wID0gdGhpcy5nZXRTdHlsZSgnY2xpcC1wYXRoJywgZmFsc2UsIHRydWUpO1xuICAgICAgICBpZiAoY2xpcFBhdGhTdHlsZVByb3AuaGFzVmFsdWUoKSkge1xuICAgICAgICAgICAgY29uc3QgY2xpcCA9IGNsaXBQYXRoU3R5bGVQcm9wLmdldERlZmluaXRpb24oKTtcbiAgICAgICAgICAgIGlmIChjbGlwKSB7XG4gICAgICAgICAgICAgICAgY2xpcC5hcHBseShjdHgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGNsZWFyQ29udGV4dChfKSB7XG4gICAgLy8gTk8gUkVOREVSXG4gICAgfVxuICAgIHJlbmRlckNoaWxkcmVuKGN0eCkge1xuICAgICAgICB0aGlzLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkKT0+e1xuICAgICAgICAgICAgY2hpbGQucmVuZGVyKGN0eCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhZGRDaGlsZChjaGlsZE5vZGUpIHtcbiAgICAgICAgY29uc3QgY2hpbGQgPSBjaGlsZE5vZGUgaW5zdGFuY2VvZiBFbGVtZW50ID8gY2hpbGROb2RlIDogdGhpcy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KGNoaWxkTm9kZSk7XG4gICAgICAgIGNoaWxkLnBhcmVudCA9IHRoaXM7XG4gICAgICAgIGlmICghRWxlbWVudC5pZ25vcmVDaGlsZFR5cGVzLmluY2x1ZGVzKGNoaWxkLnR5cGUpKSB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuLnB1c2goY2hpbGQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIG1hdGNoZXNTZWxlY3RvcihzZWxlY3Rvcikge1xuICAgICAgICB2YXIgcmVmO1xuICAgICAgICBjb25zdCB7IG5vZGUgIH0gPSB0aGlzO1xuICAgICAgICBpZiAodHlwZW9mIG5vZGUubWF0Y2hlcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuIG5vZGUubWF0Y2hlcyhzZWxlY3Rvcik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3R5bGVDbGFzc2VzID0gKHJlZiA9IG5vZGUuZ2V0QXR0cmlidXRlKSA9PT0gbnVsbCB8fCByZWYgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlZi5jYWxsKG5vZGUsICdjbGFzcycpO1xuICAgICAgICBpZiAoIXN0eWxlQ2xhc3NlcyB8fCBzdHlsZUNsYXNzZXMgPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0eWxlQ2xhc3Nlcy5zcGxpdCgnICcpLnNvbWUoKHN0eWxlQ2xhc3MpPT5cIi5cIi5jb25jYXQoc3R5bGVDbGFzcykgPT09IHNlbGVjdG9yXG4gICAgICAgICk7XG4gICAgfVxuICAgIGFkZFN0eWxlc0Zyb21TdHlsZURlZmluaXRpb24oKSB7XG4gICAgICAgIGNvbnN0IHsgc3R5bGVzICwgc3R5bGVzU3BlY2lmaWNpdHkgIH0gPSB0aGlzLmRvY3VtZW50O1xuICAgICAgICBsZXQgc3R5bGVQcm9wO1xuICAgICAgICBmb3IoY29uc3Qgc2VsZWN0b3IgaW4gc3R5bGVzKXtcbiAgICAgICAgICAgIGlmICghc2VsZWN0b3Iuc3RhcnRzV2l0aCgnQCcpICYmIHRoaXMubWF0Y2hlc1NlbGVjdG9yKHNlbGVjdG9yKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0eWxlID0gc3R5bGVzW3NlbGVjdG9yXTtcbiAgICAgICAgICAgICAgICBjb25zdCBzcGVjaWZpY2l0eSA9IHN0eWxlc1NwZWNpZmljaXR5W3NlbGVjdG9yXTtcbiAgICAgICAgICAgICAgICBpZiAoc3R5bGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yKGNvbnN0IG5hbWUgaW4gc3R5bGUpe1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGV4aXN0aW5nU3BlY2lmaWNpdHkgPSB0aGlzLnN0eWxlc1NwZWNpZmljaXR5W25hbWVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBleGlzdGluZ1NwZWNpZmljaXR5ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nU3BlY2lmaWNpdHkgPSAnMDAwJztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzcGVjaWZpY2l0eSAmJiBzcGVjaWZpY2l0eSA+PSBleGlzdGluZ1NwZWNpZmljaXR5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVQcm9wID0gc3R5bGVbbmFtZV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0eWxlUHJvcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0eWxlc1tuYW1lXSA9IHN0eWxlUHJvcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHlsZXNTcGVjaWZpY2l0eVtuYW1lXSA9IHNwZWNpZmljaXR5O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJlbW92ZVN0eWxlcyhlbGVtZW50LCBpZ25vcmVTdHlsZXMpIHtcbiAgICAgICAgY29uc3QgdG9SZXN0b3JlMSA9IGlnbm9yZVN0eWxlcy5yZWR1Y2UoKHRvUmVzdG9yZSwgbmFtZSk9PntcbiAgICAgICAgICAgIGNvbnN0IHN0eWxlUHJvcCA9IGVsZW1lbnQuZ2V0U3R5bGUobmFtZSk7XG4gICAgICAgICAgICBpZiAoIXN0eWxlUHJvcC5oYXNWYWx1ZSgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRvUmVzdG9yZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gc3R5bGVQcm9wLmdldFN0cmluZygpO1xuICAgICAgICAgICAgc3R5bGVQcm9wLnNldFZhbHVlKCcnKTtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgLi4udG9SZXN0b3JlLFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICBdO1xuICAgICAgICB9LCBbXSk7XG4gICAgICAgIHJldHVybiB0b1Jlc3RvcmUxO1xuICAgIH1cbiAgICByZXN0b3JlU3R5bGVzKGVsZW1lbnQsIHN0eWxlcykge1xuICAgICAgICBzdHlsZXMuZm9yRWFjaCgocGFyYW0pPT57XG4gICAgICAgICAgICBsZXQgW25hbWUsIHZhbHVlXSA9IHBhcmFtO1xuICAgICAgICAgICAgZWxlbWVudC5nZXRTdHlsZShuYW1lLCB0cnVlKS5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBpc0ZpcnN0Q2hpbGQoKSB7XG4gICAgICAgIHZhciByZWY7XG4gICAgICAgIHJldHVybiAoKHJlZiA9IHRoaXMucGFyZW50KSA9PT0gbnVsbCB8fCByZWYgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlZi5jaGlsZHJlbi5pbmRleE9mKHRoaXMpKSA9PT0gMDtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoZG9jdW1lbnQsIG5vZGUsIGNhcHR1cmVUZXh0Tm9kZXMgPSBmYWxzZSl7XG4gICAgICAgIHRoaXMuZG9jdW1lbnQgPSBkb2N1bWVudDtcbiAgICAgICAgdGhpcy5ub2RlID0gbm9kZTtcbiAgICAgICAgdGhpcy5jYXB0dXJlVGV4dE5vZGVzID0gY2FwdHVyZVRleHROb2RlcztcbiAgICAgICAgdGhpcy50eXBlID0gJyc7XG4gICAgICAgIHRoaXMuYXR0cmlidXRlcyA9IHt9O1xuICAgICAgICB0aGlzLnN0eWxlcyA9IHt9O1xuICAgICAgICB0aGlzLnN0eWxlc1NwZWNpZmljaXR5ID0ge307XG4gICAgICAgIHRoaXMuYW5pbWF0aW9uRnJvemVuID0gZmFsc2U7XG4gICAgICAgIHRoaXMuYW5pbWF0aW9uRnJvemVuVmFsdWUgPSAnJztcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBudWxsO1xuICAgICAgICB0aGlzLmNoaWxkcmVuID0gW107XG4gICAgICAgIGlmICghbm9kZSB8fCBub2RlLm5vZGVUeXBlICE9PSAxKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gYWRkIGF0dHJpYnV0ZXNcbiAgICAgICAgQXJyYXkuZnJvbShub2RlLmF0dHJpYnV0ZXMpLmZvckVhY2goKGF0dHJpYnV0ZSk9PntcbiAgICAgICAgICAgIGNvbnN0IG5vZGVOYW1lID0gbm9ybWFsaXplQXR0cmlidXRlTmFtZShhdHRyaWJ1dGUubm9kZU5hbWUpO1xuICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzW25vZGVOYW1lXSA9IG5ldyBQcm9wZXJ0eShkb2N1bWVudCwgbm9kZU5hbWUsIGF0dHJpYnV0ZS52YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFkZFN0eWxlc0Zyb21TdHlsZURlZmluaXRpb24oKTtcbiAgICAgICAgLy8gYWRkIGlubGluZSBzdHlsZXNcbiAgICAgICAgaWYgKHRoaXMuZ2V0QXR0cmlidXRlKCdzdHlsZScpLmhhc1ZhbHVlKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0eWxlcyA9IHRoaXMuZ2V0QXR0cmlidXRlKCdzdHlsZScpLmdldFN0cmluZygpLnNwbGl0KCc7JykubWFwKChfKT0+Xy50cmltKClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBzdHlsZXMuZm9yRWFjaCgoc3R5bGUpPT57XG4gICAgICAgICAgICAgICAgaWYgKCFzdHlsZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IFtuYW1lLCB2YWx1ZV0gPSBzdHlsZS5zcGxpdCgnOicpLm1hcCgoXyk9Pl8udHJpbSgpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpZiAobmFtZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0eWxlc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eShkb2N1bWVudCwgbmFtZSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgZGVmaW5pdGlvbnMgIH0gPSBkb2N1bWVudDtcbiAgICAgICAgY29uc3QgaWQgPSB0aGlzLmdldEF0dHJpYnV0ZSgnaWQnKTtcbiAgICAgICAgLy8gYWRkIGlkXG4gICAgICAgIGlmIChpZC5oYXNWYWx1ZSgpKSB7XG4gICAgICAgICAgICBpZiAoIWRlZmluaXRpb25zW2lkLmdldFN0cmluZygpXSkge1xuICAgICAgICAgICAgICAgIGRlZmluaXRpb25zW2lkLmdldFN0cmluZygpXSA9IHRoaXM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgQXJyYXkuZnJvbShub2RlLmNoaWxkTm9kZXMpLmZvckVhY2goKGNoaWxkTm9kZSk9PntcbiAgICAgICAgICAgIGlmIChjaGlsZE5vZGUubm9kZVR5cGUgPT09IDEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZENoaWxkKGNoaWxkTm9kZSkgLy8gRUxFTUVOVF9OT0RFXG4gICAgICAgICAgICAgICAgO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjYXB0dXJlVGV4dE5vZGVzICYmIChjaGlsZE5vZGUubm9kZVR5cGUgPT09IDMgfHwgY2hpbGROb2RlLm5vZGVUeXBlID09PSA0KSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRleHROb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY2hpbGROb2RlKTtcbiAgICAgICAgICAgICAgICBpZiAodGV4dE5vZGUuZ2V0VGV4dCgpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRDaGlsZCh0ZXh0Tm9kZSkgLy8gVEVYVF9OT0RFXG4gICAgICAgICAgICAgICAgICAgIDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbkVsZW1lbnQuaWdub3JlQ2hpbGRUeXBlcyA9IFtcbiAgICAndGl0bGUnXG5dO1xuXG5jbGFzcyBVbmtub3duRWxlbWVudCBleHRlbmRzIEVsZW1lbnQge1xuICAgIGNvbnN0cnVjdG9yKGRvY3VtZW50LCBub2RlLCBjYXB0dXJlVGV4dE5vZGVzKXtcbiAgICAgICAgc3VwZXIoZG9jdW1lbnQsIG5vZGUsIGNhcHR1cmVUZXh0Tm9kZXMpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gd3JhcEZvbnRGYW1pbHkoZm9udEZhbWlseSkge1xuICAgIGNvbnN0IHRyaW1tZWQgPSBmb250RmFtaWx5LnRyaW0oKTtcbiAgICByZXR1cm4gL14oJ3xcIikvLnRlc3QodHJpbW1lZCkgPyB0cmltbWVkIDogXCJcXFwiXCIuY29uY2F0KHRyaW1tZWQsIFwiXFxcIlwiKTtcbn1cbmZ1bmN0aW9uIHByZXBhcmVGb250RmFtaWx5KGZvbnRGYW1pbHkpIHtcbiAgICByZXR1cm4gdHlwZW9mIHByb2Nlc3MgPT09ICd1bmRlZmluZWQnID8gZm9udEZhbWlseSA6IGZvbnRGYW1pbHkudHJpbSgpLnNwbGl0KCcsJykubWFwKHdyYXBGb250RmFtaWx5KS5qb2luKCcsJyk7XG59XG4vKipcbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9mb250LXN0eWxlXG4gKiBAcGFyYW0gZm9udFN0eWxlXG4gKiBAcmV0dXJucyBDU1MgZm9udCBzdHlsZS5cbiAqLyBmdW5jdGlvbiBwcmVwYXJlRm9udFN0eWxlKGZvbnRTdHlsZSkge1xuICAgIGlmICghZm9udFN0eWxlKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgY29uc3QgdGFyZ2V0Rm9udFN0eWxlID0gZm9udFN0eWxlLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgIHN3aXRjaCh0YXJnZXRGb250U3R5bGUpe1xuICAgICAgICBjYXNlICdub3JtYWwnOlxuICAgICAgICBjYXNlICdpdGFsaWMnOlxuICAgICAgICBjYXNlICdvYmxpcXVlJzpcbiAgICAgICAgY2FzZSAnaW5oZXJpdCc6XG4gICAgICAgIGNhc2UgJ2luaXRpYWwnOlxuICAgICAgICBjYXNlICd1bnNldCc6XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0Rm9udFN0eWxlO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgaWYgKC9eb2JsaXF1ZVxccysoLXwpXFxkK2RlZyQvLnRlc3QodGFyZ2V0Rm9udFN0eWxlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXRGb250U3R5bGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxufVxuLyoqXG4gKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvZm9udC13ZWlnaHRcbiAqIEBwYXJhbSBmb250V2VpZ2h0XG4gKiBAcmV0dXJucyBDU1MgZm9udCB3ZWlnaHQuXG4gKi8gZnVuY3Rpb24gcHJlcGFyZUZvbnRXZWlnaHQoZm9udFdlaWdodCkge1xuICAgIGlmICghZm9udFdlaWdodCkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGNvbnN0IHRhcmdldEZvbnRXZWlnaHQgPSBmb250V2VpZ2h0LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgIHN3aXRjaCh0YXJnZXRGb250V2VpZ2h0KXtcbiAgICAgICAgY2FzZSAnbm9ybWFsJzpcbiAgICAgICAgY2FzZSAnYm9sZCc6XG4gICAgICAgIGNhc2UgJ2xpZ2h0ZXInOlxuICAgICAgICBjYXNlICdib2xkZXInOlxuICAgICAgICBjYXNlICdpbmhlcml0JzpcbiAgICAgICAgY2FzZSAnaW5pdGlhbCc6XG4gICAgICAgIGNhc2UgJ3Vuc2V0JzpcbiAgICAgICAgICAgIHJldHVybiB0YXJnZXRGb250V2VpZ2h0O1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgaWYgKC9eW1xcZC5dKyQvLnRlc3QodGFyZ2V0Rm9udFdlaWdodCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0Rm9udFdlaWdodDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICB9XG59XG5jbGFzcyBGb250IHtcbiAgICBzdGF0aWMgcGFyc2UoKSB7XG4gICAgICAgIGxldCBmb250ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMF0gOiAnJywgaW5oZXJpdCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdm9pZCAwO1xuICAgICAgICBsZXQgZm9udFN0eWxlID0gJyc7XG4gICAgICAgIGxldCBmb250VmFyaWFudCA9ICcnO1xuICAgICAgICBsZXQgZm9udFdlaWdodCA9ICcnO1xuICAgICAgICBsZXQgZm9udFNpemUgPSAnJztcbiAgICAgICAgbGV0IGZvbnRGYW1pbHkgPSAnJztcbiAgICAgICAgY29uc3QgcGFydHMgPSBjb21wcmVzc1NwYWNlcyhmb250KS50cmltKCkuc3BsaXQoJyAnKTtcbiAgICAgICAgY29uc3Qgc2V0ID0ge1xuICAgICAgICAgICAgZm9udFNpemU6IGZhbHNlLFxuICAgICAgICAgICAgZm9udFN0eWxlOiBmYWxzZSxcbiAgICAgICAgICAgIGZvbnRXZWlnaHQ6IGZhbHNlLFxuICAgICAgICAgICAgZm9udFZhcmlhbnQ6IGZhbHNlXG4gICAgICAgIH07XG4gICAgICAgIHBhcnRzLmZvckVhY2goKHBhcnQpPT57XG4gICAgICAgICAgICBzd2l0Y2godHJ1ZSl7XG4gICAgICAgICAgICAgICAgY2FzZSAhc2V0LmZvbnRTdHlsZSAmJiBGb250LnN0eWxlcy5pbmNsdWRlcyhwYXJ0KTpcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnQgIT09ICdpbmhlcml0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9udFN0eWxlID0gcGFydDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzZXQuZm9udFN0eWxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAhc2V0LmZvbnRWYXJpYW50ICYmIEZvbnQudmFyaWFudHMuaW5jbHVkZXMocGFydCk6XG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJ0ICE9PSAnaW5oZXJpdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRWYXJpYW50ID0gcGFydDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzZXQuZm9udFN0eWxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgc2V0LmZvbnRWYXJpYW50ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAhc2V0LmZvbnRXZWlnaHQgJiYgRm9udC53ZWlnaHRzLmluY2x1ZGVzKHBhcnQpOlxuICAgICAgICAgICAgICAgICAgICBpZiAocGFydCAhPT0gJ2luaGVyaXQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb250V2VpZ2h0ID0gcGFydDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzZXQuZm9udFN0eWxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgc2V0LmZvbnRWYXJpYW50ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgc2V0LmZvbnRXZWlnaHQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICFzZXQuZm9udFNpemU6XG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJ0ICE9PSAnaW5oZXJpdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplID0gcGFydC5zcGxpdCgnLycpWzBdIHx8ICcnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHNldC5mb250U3R5bGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBzZXQuZm9udFZhcmlhbnQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBzZXQuZm9udFdlaWdodCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHNldC5mb250U2l6ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJ0ICE9PSAnaW5oZXJpdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRGYW1pbHkgKz0gcGFydDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG5ldyBGb250KGZvbnRTdHlsZSwgZm9udFZhcmlhbnQsIGZvbnRXZWlnaHQsIGZvbnRTaXplLCBmb250RmFtaWx5LCBpbmhlcml0KTtcbiAgICB9XG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBwcmVwYXJlRm9udFN0eWxlKHRoaXMuZm9udFN0eWxlKSxcbiAgICAgICAgICAgIHRoaXMuZm9udFZhcmlhbnQsXG4gICAgICAgICAgICBwcmVwYXJlRm9udFdlaWdodCh0aGlzLmZvbnRXZWlnaHQpLFxuICAgICAgICAgICAgdGhpcy5mb250U2l6ZSxcbiAgICAgICAgICAgIC8vIFdyYXAgZm9udEZhbWlseSBvbmx5IG9uIG5vZGVqcyBhbmQgb25seSBmb3IgY2FudmFzLmN0eFxuICAgICAgICAgICAgcHJlcGFyZUZvbnRGYW1pbHkodGhpcy5mb250RmFtaWx5KVxuICAgICAgICBdLmpvaW4oJyAnKS50cmltKCk7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKGZvbnRTdHlsZSwgZm9udFZhcmlhbnQsIGZvbnRXZWlnaHQsIGZvbnRTaXplLCBmb250RmFtaWx5LCBpbmhlcml0KXtcbiAgICAgICAgY29uc3QgaW5oZXJpdEZvbnQgPSBpbmhlcml0ID8gdHlwZW9mIGluaGVyaXQgPT09ICdzdHJpbmcnID8gRm9udC5wYXJzZShpbmhlcml0KSA6IGluaGVyaXQgOiB7fTtcbiAgICAgICAgdGhpcy5mb250RmFtaWx5ID0gZm9udEZhbWlseSB8fCBpbmhlcml0Rm9udC5mb250RmFtaWx5O1xuICAgICAgICB0aGlzLmZvbnRTaXplID0gZm9udFNpemUgfHwgaW5oZXJpdEZvbnQuZm9udFNpemU7XG4gICAgICAgIHRoaXMuZm9udFN0eWxlID0gZm9udFN0eWxlIHx8IGluaGVyaXRGb250LmZvbnRTdHlsZTtcbiAgICAgICAgdGhpcy5mb250V2VpZ2h0ID0gZm9udFdlaWdodCB8fCBpbmhlcml0Rm9udC5mb250V2VpZ2h0O1xuICAgICAgICB0aGlzLmZvbnRWYXJpYW50ID0gZm9udFZhcmlhbnQgfHwgaW5oZXJpdEZvbnQuZm9udFZhcmlhbnQ7XG4gICAgfVxufVxuRm9udC5zdHlsZXMgPSAnbm9ybWFsfGl0YWxpY3xvYmxpcXVlfGluaGVyaXQnO1xuRm9udC52YXJpYW50cyA9ICdub3JtYWx8c21hbGwtY2Fwc3xpbmhlcml0JztcbkZvbnQud2VpZ2h0cyA9ICdub3JtYWx8Ym9sZHxib2xkZXJ8bGlnaHRlcnwxMDB8MjAwfDMwMHw0MDB8NTAwfDYwMHw3MDB8ODAwfDkwMHxpbmhlcml0JztcblxuY2xhc3MgQm91bmRpbmdCb3gge1xuICAgIGdldCB4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy54MTtcbiAgICB9XG4gICAgZ2V0IHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnkxO1xuICAgIH1cbiAgICBnZXQgd2lkdGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLngyIC0gdGhpcy54MTtcbiAgICB9XG4gICAgZ2V0IGhlaWdodCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMueTIgLSB0aGlzLnkxO1xuICAgIH1cbiAgICBhZGRQb2ludCh4LCB5KSB7XG4gICAgICAgIGlmICh0eXBlb2YgeCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGlmIChpc05hTih0aGlzLngxKSB8fCBpc05hTih0aGlzLngyKSkge1xuICAgICAgICAgICAgICAgIHRoaXMueDEgPSB4O1xuICAgICAgICAgICAgICAgIHRoaXMueDIgPSB4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHggPCB0aGlzLngxKSB7XG4gICAgICAgICAgICAgICAgdGhpcy54MSA9IHg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoeCA+IHRoaXMueDIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLngyID0geDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHkgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBpZiAoaXNOYU4odGhpcy55MSkgfHwgaXNOYU4odGhpcy55MikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnkxID0geTtcbiAgICAgICAgICAgICAgICB0aGlzLnkyID0geTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh5IDwgdGhpcy55MSkge1xuICAgICAgICAgICAgICAgIHRoaXMueTEgPSB5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHkgPiB0aGlzLnkyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy55MiA9IHk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgYWRkWCh4KSB7XG4gICAgICAgIHRoaXMuYWRkUG9pbnQoeCwgMCk7XG4gICAgfVxuICAgIGFkZFkoeSkge1xuICAgICAgICB0aGlzLmFkZFBvaW50KDAsIHkpO1xuICAgIH1cbiAgICBhZGRCb3VuZGluZ0JveChib3VuZGluZ0JveCkge1xuICAgICAgICBpZiAoIWJvdW5kaW5nQm94KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyB4MSAsIHkxICwgeDIgLCB5MiAgfSA9IGJvdW5kaW5nQm94O1xuICAgICAgICB0aGlzLmFkZFBvaW50KHgxLCB5MSk7XG4gICAgICAgIHRoaXMuYWRkUG9pbnQoeDIsIHkyKTtcbiAgICB9XG4gICAgc3VtQ3ViaWModCwgcDAsIHAxLCBwMiwgcDMpIHtcbiAgICAgICAgcmV0dXJuIE1hdGgucG93KDEgLSB0LCAzKSAqIHAwICsgMyAqIE1hdGgucG93KDEgLSB0LCAyKSAqIHQgKiBwMSArIDMgKiAoMSAtIHQpICogTWF0aC5wb3codCwgMikgKiBwMiArIE1hdGgucG93KHQsIDMpICogcDM7XG4gICAgfVxuICAgIGJlemllckN1cnZlQWRkKGZvclgsIHAwLCBwMSwgcDIsIHAzKSB7XG4gICAgICAgIGNvbnN0IGIgPSA2ICogcDAgLSAxMiAqIHAxICsgNiAqIHAyO1xuICAgICAgICBjb25zdCBhID0gLTMgKiBwMCArIDkgKiBwMSAtIDkgKiBwMiArIDMgKiBwMztcbiAgICAgICAgY29uc3QgYyA9IDMgKiBwMSAtIDMgKiBwMDtcbiAgICAgICAgaWYgKGEgPT09IDApIHtcbiAgICAgICAgICAgIGlmIChiID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdCA9IC1jIC8gYjtcbiAgICAgICAgICAgIGlmICgwIDwgdCAmJiB0IDwgMSkge1xuICAgICAgICAgICAgICAgIGlmIChmb3JYKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkWCh0aGlzLnN1bUN1YmljKHQsIHAwLCBwMSwgcDIsIHAzKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRZKHRoaXMuc3VtQ3ViaWModCwgcDAsIHAxLCBwMiwgcDMpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYjJhYyA9IE1hdGgucG93KGIsIDIpIC0gNCAqIGMgKiBhO1xuICAgICAgICBpZiAoYjJhYyA8IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0MSA9ICgtYiArIE1hdGguc3FydChiMmFjKSkgLyAoMiAqIGEpO1xuICAgICAgICBpZiAoMCA8IHQxICYmIHQxIDwgMSkge1xuICAgICAgICAgICAgaWYgKGZvclgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZFgodGhpcy5zdW1DdWJpYyh0MSwgcDAsIHAxLCBwMiwgcDMpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRZKHRoaXMuc3VtQ3ViaWModDEsIHAwLCBwMSwgcDIsIHAzKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdDIgPSAoLWIgLSBNYXRoLnNxcnQoYjJhYykpIC8gKDIgKiBhKTtcbiAgICAgICAgaWYgKDAgPCB0MiAmJiB0MiA8IDEpIHtcbiAgICAgICAgICAgIGlmIChmb3JYKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRYKHRoaXMuc3VtQ3ViaWModDIsIHAwLCBwMSwgcDIsIHAzKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkWSh0aGlzLnN1bUN1YmljKHQyLCBwMCwgcDEsIHAyLCBwMykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIGZyb20gaHR0cDovL2Jsb2cuaGFja2Vycy1jYWZlLm5ldC8yMDA5LzA2L2hvdy10by1jYWxjdWxhdGUtYmV6aWVyLWN1cnZlcy1ib3VuZGluZy5odG1sXG4gICAgYWRkQmV6aWVyQ3VydmUocDB4LCBwMHksIHAxeCwgcDF5LCBwMngsIHAyeSwgcDN4LCBwM3kpIHtcbiAgICAgICAgdGhpcy5hZGRQb2ludChwMHgsIHAweSk7XG4gICAgICAgIHRoaXMuYWRkUG9pbnQocDN4LCBwM3kpO1xuICAgICAgICB0aGlzLmJlemllckN1cnZlQWRkKHRydWUsIHAweCwgcDF4LCBwMngsIHAzeCk7XG4gICAgICAgIHRoaXMuYmV6aWVyQ3VydmVBZGQoZmFsc2UsIHAweSwgcDF5LCBwMnksIHAzeSk7XG4gICAgfVxuICAgIGFkZFF1YWRyYXRpY0N1cnZlKHAweCwgcDB5LCBwMXgsIHAxeSwgcDJ4LCBwMnkpIHtcbiAgICAgICAgY29uc3QgY3AxeCA9IHAweCArIDIgLyAzICogKHAxeCAtIHAweCkgLy8gQ1AxID0gUVAwICsgMi8zICooUVAxLVFQMClcbiAgICAgICAgO1xuICAgICAgICBjb25zdCBjcDF5ID0gcDB5ICsgMiAvIDMgKiAocDF5IC0gcDB5KSAvLyBDUDEgPSBRUDAgKyAyLzMgKihRUDEtUVAwKVxuICAgICAgICA7XG4gICAgICAgIGNvbnN0IGNwMnggPSBjcDF4ICsgMSAvIDMgKiAocDJ4IC0gcDB4KSAvLyBDUDIgPSBDUDEgKyAxLzMgKihRUDItUVAwKVxuICAgICAgICA7XG4gICAgICAgIGNvbnN0IGNwMnkgPSBjcDF5ICsgMSAvIDMgKiAocDJ5IC0gcDB5KSAvLyBDUDIgPSBDUDEgKyAxLzMgKihRUDItUVAwKVxuICAgICAgICA7XG4gICAgICAgIHRoaXMuYWRkQmV6aWVyQ3VydmUocDB4LCBwMHksIGNwMXgsIGNwMngsIGNwMXksIGNwMnksIHAyeCwgcDJ5KTtcbiAgICB9XG4gICAgaXNQb2ludEluQm94KHgsIHkpIHtcbiAgICAgICAgY29uc3QgeyB4MSAsIHkxICwgeDIgLCB5MiAgfSA9IHRoaXM7XG4gICAgICAgIHJldHVybiB4MSA8PSB4ICYmIHggPD0geDIgJiYgeTEgPD0geSAmJiB5IDw9IHkyO1xuICAgIH1cbiAgICBjb25zdHJ1Y3Rvcih4MSA9IE51bWJlci5OYU4sIHkxID0gTnVtYmVyLk5hTiwgeDIgPSBOdW1iZXIuTmFOLCB5MiA9IE51bWJlci5OYU4pe1xuICAgICAgICB0aGlzLngxID0geDE7XG4gICAgICAgIHRoaXMueTEgPSB5MTtcbiAgICAgICAgdGhpcy54MiA9IHgyO1xuICAgICAgICB0aGlzLnkyID0geTI7XG4gICAgICAgIHRoaXMuYWRkUG9pbnQoeDEsIHkxKTtcbiAgICAgICAgdGhpcy5hZGRQb2ludCh4MiwgeTIpO1xuICAgIH1cbn1cblxuY2xhc3MgUmVuZGVyZWRFbGVtZW50IGV4dGVuZHMgRWxlbWVudCB7XG4gICAgY2FsY3VsYXRlT3BhY2l0eSgpIHtcbiAgICAgICAgbGV0IG9wYWNpdHkgPSAxO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXMsIGNvbnNpc3RlbnQtdGhpc1xuICAgICAgICBsZXQgZWxlbWVudCA9IHRoaXM7XG4gICAgICAgIHdoaWxlKGVsZW1lbnQpe1xuICAgICAgICAgICAgY29uc3Qgb3BhY2l0eVN0eWxlID0gZWxlbWVudC5nZXRTdHlsZSgnb3BhY2l0eScsIGZhbHNlLCB0cnVlKSAvLyBubyBhbmNlc3RvcnMgb24gc3R5bGUgY2FsbFxuICAgICAgICAgICAgO1xuICAgICAgICAgICAgaWYgKG9wYWNpdHlTdHlsZS5oYXNWYWx1ZSh0cnVlKSkge1xuICAgICAgICAgICAgICAgIG9wYWNpdHkgKj0gb3BhY2l0eVN0eWxlLmdldE51bWJlcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQucGFyZW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvcGFjaXR5O1xuICAgIH1cbiAgICBzZXRDb250ZXh0KGN0eCkge1xuICAgICAgICBsZXQgZnJvbU1lYXN1cmUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHZvaWQgMCA/IGFyZ3VtZW50c1sxXSA6IGZhbHNlO1xuICAgICAgICBpZiAoIWZyb21NZWFzdXJlKSB7XG4gICAgICAgICAgICAvLyBmaWxsXG4gICAgICAgICAgICBjb25zdCBmaWxsU3R5bGVQcm9wID0gdGhpcy5nZXRTdHlsZSgnZmlsbCcpO1xuICAgICAgICAgICAgY29uc3QgZmlsbE9wYWNpdHlTdHlsZVByb3AgPSB0aGlzLmdldFN0eWxlKCdmaWxsLW9wYWNpdHknKTtcbiAgICAgICAgICAgIGNvbnN0IHN0cm9rZVN0eWxlUHJvcCA9IHRoaXMuZ2V0U3R5bGUoJ3N0cm9rZScpO1xuICAgICAgICAgICAgY29uc3Qgc3Ryb2tlT3BhY2l0eVByb3AgPSB0aGlzLmdldFN0eWxlKCdzdHJva2Utb3BhY2l0eScpO1xuICAgICAgICAgICAgaWYgKGZpbGxTdHlsZVByb3AuaXNVcmxEZWZpbml0aW9uKCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxsU3R5bGUgPSBmaWxsU3R5bGVQcm9wLmdldEZpbGxTdHlsZURlZmluaXRpb24odGhpcywgZmlsbE9wYWNpdHlTdHlsZVByb3ApO1xuICAgICAgICAgICAgICAgIGlmIChmaWxsU3R5bGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IGZpbGxTdHlsZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZpbGxTdHlsZVByb3AuaGFzVmFsdWUoKSkge1xuICAgICAgICAgICAgICAgIGlmIChmaWxsU3R5bGVQcm9wLmdldFN0cmluZygpID09PSAnY3VycmVudENvbG9yJykge1xuICAgICAgICAgICAgICAgICAgICBmaWxsU3R5bGVQcm9wLnNldFZhbHVlKHRoaXMuZ2V0U3R5bGUoJ2NvbG9yJykuZ2V0Q29sb3IoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGxTdHlsZSA9IGZpbGxTdHlsZVByb3AuZ2V0Q29sb3IoKTtcbiAgICAgICAgICAgICAgICBpZiAoZmlsbFN0eWxlICE9PSAnaW5oZXJpdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IGZpbGxTdHlsZSA9PT0gJ25vbmUnID8gJ3JnYmEoMCwwLDAsMCknIDogZmlsbFN0eWxlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmaWxsT3BhY2l0eVN0eWxlUHJvcC5oYXNWYWx1ZSgpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsbFN0eWxlID0gbmV3IFByb3BlcnR5KHRoaXMuZG9jdW1lbnQsICdmaWxsJywgY3R4LmZpbGxTdHlsZSkuYWRkT3BhY2l0eShmaWxsT3BhY2l0eVN0eWxlUHJvcCkuZ2V0Q29sb3IoKTtcbiAgICAgICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gZmlsbFN0eWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gc3Ryb2tlXG4gICAgICAgICAgICBpZiAoc3Ryb2tlU3R5bGVQcm9wLmlzVXJsRGVmaW5pdGlvbigpKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3Ryb2tlU3R5bGUgPSBzdHJva2VTdHlsZVByb3AuZ2V0RmlsbFN0eWxlRGVmaW5pdGlvbih0aGlzLCBzdHJva2VPcGFjaXR5UHJvcCk7XG4gICAgICAgICAgICAgICAgaWYgKHN0cm9rZVN0eWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eC5zdHJva2VTdHlsZSA9IHN0cm9rZVN0eWxlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc3Ryb2tlU3R5bGVQcm9wLmhhc1ZhbHVlKCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoc3Ryb2tlU3R5bGVQcm9wLmdldFN0cmluZygpID09PSAnY3VycmVudENvbG9yJykge1xuICAgICAgICAgICAgICAgICAgICBzdHJva2VTdHlsZVByb3Auc2V0VmFsdWUodGhpcy5nZXRTdHlsZSgnY29sb3InKS5nZXRDb2xvcigpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3Qgc3Ryb2tlU3R5bGUgPSBzdHJva2VTdHlsZVByb3AuZ2V0U3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgaWYgKHN0cm9rZVN0eWxlICE9PSAnaW5oZXJpdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4LnN0cm9rZVN0eWxlID0gc3Ryb2tlU3R5bGUgPT09ICdub25lJyA/ICdyZ2JhKDAsMCwwLDApJyA6IHN0cm9rZVN0eWxlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzdHJva2VPcGFjaXR5UHJvcC5oYXNWYWx1ZSgpKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3Ryb2tlU3R5bGUgPSBuZXcgUHJvcGVydHkodGhpcy5kb2N1bWVudCwgJ3N0cm9rZScsIGN0eC5zdHJva2VTdHlsZSkuYWRkT3BhY2l0eShzdHJva2VPcGFjaXR5UHJvcCkuZ2V0U3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgY3R4LnN0cm9rZVN0eWxlID0gc3Ryb2tlU3R5bGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzdHJva2VXaWR0aFN0eWxlUHJvcCA9IHRoaXMuZ2V0U3R5bGUoJ3N0cm9rZS13aWR0aCcpO1xuICAgICAgICAgICAgaWYgKHN0cm9rZVdpZHRoU3R5bGVQcm9wLmhhc1ZhbHVlKCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdMaW5lV2lkdGggPSBzdHJva2VXaWR0aFN0eWxlUHJvcC5nZXRQaXhlbHMoKTtcbiAgICAgICAgICAgICAgICBjdHgubGluZVdpZHRoID0gIW5ld0xpbmVXaWR0aCA/IFBTRVVET19aRVJPIC8vIGJyb3dzZXJzIGRvbid0IHJlc3BlY3QgMCAob3Igbm9kZS1jYW52YXM/IDotKVxuICAgICAgICAgICAgICAgICA6IG5ld0xpbmVXaWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHN0cm9rZUxpbmVjYXBTdHlsZVByb3AgPSB0aGlzLmdldFN0eWxlKCdzdHJva2UtbGluZWNhcCcpO1xuICAgICAgICAgICAgY29uc3Qgc3Ryb2tlTGluZWpvaW5TdHlsZVByb3AgPSB0aGlzLmdldFN0eWxlKCdzdHJva2UtbGluZWpvaW4nKTtcbiAgICAgICAgICAgIGNvbnN0IHN0cm9rZU1pdGVybGltaXRQcm9wID0gdGhpcy5nZXRTdHlsZSgnc3Ryb2tlLW1pdGVybGltaXQnKTtcbiAgICAgICAgICAgIC8vIE5FRUQgVEVTVFxuICAgICAgICAgICAgLy8gY29uc3QgcG9pbnRPcmRlclN0eWxlUHJvcCA9IHRoaXMuZ2V0U3R5bGUoJ3BhaW50LW9yZGVyJyk7XG4gICAgICAgICAgICBjb25zdCBzdHJva2VEYXNoYXJyYXlTdHlsZVByb3AgPSB0aGlzLmdldFN0eWxlKCdzdHJva2UtZGFzaGFycmF5Jyk7XG4gICAgICAgICAgICBjb25zdCBzdHJva2VEYXNob2Zmc2V0UHJvcCA9IHRoaXMuZ2V0U3R5bGUoJ3N0cm9rZS1kYXNob2Zmc2V0Jyk7XG4gICAgICAgICAgICBpZiAoc3Ryb2tlTGluZWNhcFN0eWxlUHJvcC5oYXNWYWx1ZSgpKSB7XG4gICAgICAgICAgICAgICAgY3R4LmxpbmVDYXAgPSBzdHJva2VMaW5lY2FwU3R5bGVQcm9wLmdldFN0cmluZygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHN0cm9rZUxpbmVqb2luU3R5bGVQcm9wLmhhc1ZhbHVlKCkpIHtcbiAgICAgICAgICAgICAgICBjdHgubGluZUpvaW4gPSBzdHJva2VMaW5lam9pblN0eWxlUHJvcC5nZXRTdHJpbmcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzdHJva2VNaXRlcmxpbWl0UHJvcC5oYXNWYWx1ZSgpKSB7XG4gICAgICAgICAgICAgICAgY3R4Lm1pdGVyTGltaXQgPSBzdHJva2VNaXRlcmxpbWl0UHJvcC5nZXROdW1iZXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIE5FRUQgVEVTVFxuICAgICAgICAgICAgLy8gaWYgKHBvaW50T3JkZXJTdHlsZVByb3AuaGFzVmFsdWUoKSkge1xuICAgICAgICAgICAgLy8gICAvLyA/XG4gICAgICAgICAgICAvLyAgIGN0eC5wYWludE9yZGVyID0gcG9pbnRPcmRlclN0eWxlUHJvcC5nZXRWYWx1ZSgpO1xuICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgaWYgKHN0cm9rZURhc2hhcnJheVN0eWxlUHJvcC5oYXNWYWx1ZSgpICYmIHN0cm9rZURhc2hhcnJheVN0eWxlUHJvcC5nZXRTdHJpbmcoKSAhPT0gJ25vbmUnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ2FwcyA9IHRvTnVtYmVycyhzdHJva2VEYXNoYXJyYXlTdHlsZVByb3AuZ2V0U3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY3R4LnNldExpbmVEYXNoICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBjdHguc2V0TGluZURhc2goZ2Fwcyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIC8vIEB0cy1leHBlY3QtZXJyb3IgSGFuZGxlIGJyb3dzZXIgcHJlZml4LlxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY3R4LndlYmtpdExpbmVEYXNoICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIEhhbmRsZSBicm93c2VyIHByZWZpeC5cbiAgICAgICAgICAgICAgICAgICAgY3R4LndlYmtpdExpbmVEYXNoID0gZ2FwcztcbiAgICAgICAgICAgICAgICB9IGVsc2UgLy8gQHRzLWV4cGVjdC1lcnJvciBIYW5kbGUgYnJvd3NlciBwcmVmaXguXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjdHgubW96RGFzaCAhPT0gJ3VuZGVmaW5lZCcgJiYgIShnYXBzLmxlbmd0aCA9PT0gMSAmJiBnYXBzWzBdID09PSAwKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIEhhbmRsZSBicm93c2VyIHByZWZpeC5cbiAgICAgICAgICAgICAgICAgICAgY3R4Lm1vekRhc2ggPSBnYXBzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBvZmZzZXQgPSBzdHJva2VEYXNob2Zmc2V0UHJvcC5nZXRQaXhlbHMoKTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGN0eC5saW5lRGFzaE9mZnNldCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4LmxpbmVEYXNoT2Zmc2V0ID0gb2Zmc2V0O1xuICAgICAgICAgICAgICAgIH0gZWxzZSAvLyBAdHMtZXhwZWN0LWVycm9yIEhhbmRsZSBicm93c2VyIHByZWZpeC5cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGN0eC53ZWJraXRMaW5lRGFzaE9mZnNldCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBIYW5kbGUgYnJvd3NlciBwcmVmaXguXG4gICAgICAgICAgICAgICAgICAgIGN0eC53ZWJraXRMaW5lRGFzaE9mZnNldCA9IG9mZnNldDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgLy8gQHRzLWV4cGVjdC1lcnJvciBIYW5kbGUgYnJvd3NlciBwcmVmaXguXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjdHgubW96RGFzaE9mZnNldCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBIYW5kbGUgYnJvd3NlciBwcmVmaXguXG4gICAgICAgICAgICAgICAgICAgIGN0eC5tb3pEYXNoT2Zmc2V0ID0gb2Zmc2V0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBmb250XG4gICAgICAgIHRoaXMubW9kaWZpZWRFbVNpemVTdGFjayA9IGZhbHNlO1xuICAgICAgICBpZiAodHlwZW9mIGN0eC5mb250ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY29uc3QgZm9udFN0eWxlUHJvcCA9IHRoaXMuZ2V0U3R5bGUoJ2ZvbnQnKTtcbiAgICAgICAgICAgIGNvbnN0IGZvbnRTdHlsZVN0eWxlUHJvcCA9IHRoaXMuZ2V0U3R5bGUoJ2ZvbnQtc3R5bGUnKTtcbiAgICAgICAgICAgIGNvbnN0IGZvbnRWYXJpYW50U3R5bGVQcm9wID0gdGhpcy5nZXRTdHlsZSgnZm9udC12YXJpYW50Jyk7XG4gICAgICAgICAgICBjb25zdCBmb250V2VpZ2h0U3R5bGVQcm9wID0gdGhpcy5nZXRTdHlsZSgnZm9udC13ZWlnaHQnKTtcbiAgICAgICAgICAgIGNvbnN0IGZvbnRTaXplU3R5bGVQcm9wID0gdGhpcy5nZXRTdHlsZSgnZm9udC1zaXplJyk7XG4gICAgICAgICAgICBjb25zdCBmb250RmFtaWx5U3R5bGVQcm9wID0gdGhpcy5nZXRTdHlsZSgnZm9udC1mYW1pbHknKTtcbiAgICAgICAgICAgIGNvbnN0IGZvbnQgPSBuZXcgRm9udChmb250U3R5bGVTdHlsZVByb3AuZ2V0U3RyaW5nKCksIGZvbnRWYXJpYW50U3R5bGVQcm9wLmdldFN0cmluZygpLCBmb250V2VpZ2h0U3R5bGVQcm9wLmdldFN0cmluZygpLCBmb250U2l6ZVN0eWxlUHJvcC5oYXNWYWx1ZSgpID8gXCJcIi5jb25jYXQoZm9udFNpemVTdHlsZVByb3AuZ2V0UGl4ZWxzKHRydWUpLCBcInB4XCIpIDogJycsIGZvbnRGYW1pbHlTdHlsZVByb3AuZ2V0U3RyaW5nKCksIEZvbnQucGFyc2UoZm9udFN0eWxlUHJvcC5nZXRTdHJpbmcoKSwgY3R4LmZvbnQpKTtcbiAgICAgICAgICAgIGZvbnRTdHlsZVN0eWxlUHJvcC5zZXRWYWx1ZShmb250LmZvbnRTdHlsZSk7XG4gICAgICAgICAgICBmb250VmFyaWFudFN0eWxlUHJvcC5zZXRWYWx1ZShmb250LmZvbnRWYXJpYW50KTtcbiAgICAgICAgICAgIGZvbnRXZWlnaHRTdHlsZVByb3Auc2V0VmFsdWUoZm9udC5mb250V2VpZ2h0KTtcbiAgICAgICAgICAgIGZvbnRTaXplU3R5bGVQcm9wLnNldFZhbHVlKGZvbnQuZm9udFNpemUpO1xuICAgICAgICAgICAgZm9udEZhbWlseVN0eWxlUHJvcC5zZXRWYWx1ZShmb250LmZvbnRGYW1pbHkpO1xuICAgICAgICAgICAgY3R4LmZvbnQgPSBmb250LnRvU3RyaW5nKCk7XG4gICAgICAgICAgICBpZiAoZm9udFNpemVTdHlsZVByb3AuaXNQaXhlbHMoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZG9jdW1lbnQuZW1TaXplID0gZm9udFNpemVTdHlsZVByb3AuZ2V0UGl4ZWxzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5tb2RpZmllZEVtU2l6ZVN0YWNrID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWZyb21NZWFzdXJlKSB7XG4gICAgICAgICAgICAvLyBlZmZlY3RzXG4gICAgICAgICAgICB0aGlzLmFwcGx5RWZmZWN0cyhjdHgpO1xuICAgICAgICAgICAgLy8gb3BhY2l0eVxuICAgICAgICAgICAgY3R4Lmdsb2JhbEFscGhhID0gdGhpcy5jYWxjdWxhdGVPcGFjaXR5KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2xlYXJDb250ZXh0KGN0eCkge1xuICAgICAgICBzdXBlci5jbGVhckNvbnRleHQoY3R4KTtcbiAgICAgICAgaWYgKHRoaXMubW9kaWZpZWRFbVNpemVTdGFjaykge1xuICAgICAgICAgICAgdGhpcy5kb2N1bWVudC5wb3BFbVNpemUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdHJ1Y3RvciguLi5hcmdzKXtcbiAgICAgICAgc3VwZXIoLi4uYXJncyk7XG4gICAgICAgIHRoaXMubW9kaWZpZWRFbVNpemVTdGFjayA9IGZhbHNlO1xuICAgIH1cbn1cblxuY2xhc3MgVGV4dEVsZW1lbnQgZXh0ZW5kcyBSZW5kZXJlZEVsZW1lbnQge1xuICAgIHNldENvbnRleHQoY3R4KSB7XG4gICAgICAgIGxldCBmcm9tTWVhc3VyZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzFdIDogZmFsc2U7XG4gICAgICAgIHN1cGVyLnNldENvbnRleHQoY3R4LCBmcm9tTWVhc3VyZSk7XG4gICAgICAgIGNvbnN0IHRleHRCYXNlbGluZSA9IHRoaXMuZ2V0U3R5bGUoJ2RvbWluYW50LWJhc2VsaW5lJykuZ2V0VGV4dEJhc2VsaW5lKCkgfHwgdGhpcy5nZXRTdHlsZSgnYWxpZ25tZW50LWJhc2VsaW5lJykuZ2V0VGV4dEJhc2VsaW5lKCk7XG4gICAgICAgIGlmICh0ZXh0QmFzZWxpbmUpIHtcbiAgICAgICAgICAgIGN0eC50ZXh0QmFzZWxpbmUgPSB0ZXh0QmFzZWxpbmU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaW5pdGlhbGl6ZUNvb3JkaW5hdGVzKCkge1xuICAgICAgICB0aGlzLnggPSAwO1xuICAgICAgICB0aGlzLnkgPSAwO1xuICAgICAgICB0aGlzLmxlYWZUZXh0cyA9IFtdO1xuICAgICAgICB0aGlzLnRleHRDaHVua1N0YXJ0ID0gMDtcbiAgICAgICAgdGhpcy5taW5YID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuICAgICAgICB0aGlzLm1heFggPSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7XG4gICAgfVxuICAgIGdldEJvdW5kaW5nQm94KGN0eCkge1xuICAgICAgICBpZiAodGhpcy50eXBlICE9PSAndGV4dCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFRFbGVtZW50Qm91bmRpbmdCb3goY3R4KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBmaXJzdCwgY2FsY3VsYXRlIGNoaWxkIHBvc2l0aW9uc1xuICAgICAgICB0aGlzLmluaXRpYWxpemVDb29yZGluYXRlcygpO1xuICAgICAgICB0aGlzLmFkanVzdENoaWxkQ29vcmRpbmF0ZXNSZWN1cnNpdmUoY3R4KTtcbiAgICAgICAgbGV0IGJvdW5kaW5nQm94ID0gbnVsbDtcbiAgICAgICAgLy8gdGhlbiBjYWxjdWxhdGUgYm91bmRpbmcgYm94XG4gICAgICAgIHRoaXMuY2hpbGRyZW4uZm9yRWFjaCgoXywgaSk9PntcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkQm91bmRpbmdCb3ggPSB0aGlzLmdldENoaWxkQm91bmRpbmdCb3goY3R4LCB0aGlzLCB0aGlzLCBpKTtcbiAgICAgICAgICAgIGlmICghYm91bmRpbmdCb3gpIHtcbiAgICAgICAgICAgICAgICBib3VuZGluZ0JveCA9IGNoaWxkQm91bmRpbmdCb3g7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGJvdW5kaW5nQm94LmFkZEJvdW5kaW5nQm94KGNoaWxkQm91bmRpbmdCb3gpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGJvdW5kaW5nQm94O1xuICAgIH1cbiAgICBnZXRGb250U2l6ZSgpIHtcbiAgICAgICAgY29uc3QgeyBkb2N1bWVudCAsIHBhcmVudCAgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGluaGVyaXRGb250U2l6ZSA9IEZvbnQucGFyc2UoZG9jdW1lbnQuY3R4LmZvbnQpLmZvbnRTaXplO1xuICAgICAgICBjb25zdCBmb250U2l6ZSA9IHBhcmVudC5nZXRTdHlsZSgnZm9udC1zaXplJykuZ2V0TnVtYmVyKGluaGVyaXRGb250U2l6ZSk7XG4gICAgICAgIHJldHVybiBmb250U2l6ZTtcbiAgICB9XG4gICAgZ2V0VEVsZW1lbnRCb3VuZGluZ0JveChjdHgpIHtcbiAgICAgICAgY29uc3QgZm9udFNpemUgPSB0aGlzLmdldEZvbnRTaXplKCk7XG4gICAgICAgIHJldHVybiBuZXcgQm91bmRpbmdCb3godGhpcy54LCB0aGlzLnkgLSBmb250U2l6ZSwgdGhpcy54ICsgdGhpcy5tZWFzdXJlVGV4dChjdHgpLCB0aGlzLnkpO1xuICAgIH1cbiAgICBnZXRHbHlwaChmb250LCB0ZXh0LCBpKSB7XG4gICAgICAgIGNvbnN0IGNoYXIgPSB0ZXh0W2ldO1xuICAgICAgICBsZXQgZ2x5cGg7XG4gICAgICAgIGlmIChmb250LmlzQXJhYmljKSB7XG4gICAgICAgICAgICB2YXIgcmVmO1xuICAgICAgICAgICAgY29uc3QgbGVuID0gdGV4dC5sZW5ndGg7XG4gICAgICAgICAgICBjb25zdCBwcmV2Q2hhciA9IHRleHRbaSAtIDFdO1xuICAgICAgICAgICAgY29uc3QgbmV4dENoYXIgPSB0ZXh0W2kgKyAxXTtcbiAgICAgICAgICAgIGxldCBhcmFiaWNGb3JtID0gJ2lzb2xhdGVkJztcbiAgICAgICAgICAgIGlmICgoaSA9PT0gMCB8fCBwcmV2Q2hhciA9PT0gJyAnKSAmJiBpIDwgbGVuIC0gMSAmJiBuZXh0Q2hhciAhPT0gJyAnKSB7XG4gICAgICAgICAgICAgICAgYXJhYmljRm9ybSA9ICd0ZXJtaW5hbCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaSA+IDAgJiYgcHJldkNoYXIgIT09ICcgJyAmJiBpIDwgbGVuIC0gMSAmJiBuZXh0Q2hhciAhPT0gJyAnKSB7XG4gICAgICAgICAgICAgICAgYXJhYmljRm9ybSA9ICdtZWRpYWwnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGkgPiAwICYmIHByZXZDaGFyICE9PSAnICcgJiYgKGkgPT09IGxlbiAtIDEgfHwgbmV4dENoYXIgPT09ICcgJykpIHtcbiAgICAgICAgICAgICAgICBhcmFiaWNGb3JtID0gJ2luaXRpYWwnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZ2x5cGggPSAoKHJlZiA9IGZvbnQuYXJhYmljR2x5cGhzW2NoYXJdKSA9PT0gbnVsbCB8fCByZWYgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlZlthcmFiaWNGb3JtXSkgfHwgZm9udC5nbHlwaHNbY2hhcl07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnbHlwaCA9IGZvbnQuZ2x5cGhzW2NoYXJdO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZ2x5cGgpIHtcbiAgICAgICAgICAgIGdseXBoID0gZm9udC5taXNzaW5nR2x5cGg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdseXBoO1xuICAgIH1cbiAgICBnZXRUZXh0KCkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGdldFRleHRGcm9tTm9kZShub2RlKSB7XG4gICAgICAgIGNvbnN0IHRleHROb2RlID0gbm9kZSB8fCB0aGlzLm5vZGU7XG4gICAgICAgIGNvbnN0IGNoaWxkTm9kZXMgPSBBcnJheS5mcm9tKHRleHROb2RlLnBhcmVudE5vZGUuY2hpbGROb2Rlcyk7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gY2hpbGROb2Rlcy5pbmRleE9mKHRleHROb2RlKTtcbiAgICAgICAgY29uc3QgbGFzdEluZGV4ID0gY2hpbGROb2Rlcy5sZW5ndGggLSAxO1xuICAgICAgICBsZXQgdGV4dCA9IGNvbXByZXNzU3BhY2VzKC8vIHRleHROb2RlLnZhbHVlXG4gICAgICAgIC8vIHx8IHRleHROb2RlLnRleHRcbiAgICAgICAgdGV4dE5vZGUudGV4dENvbnRlbnQgfHwgJycpO1xuICAgICAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgICAgICAgIHRleHQgPSB0cmltTGVmdCh0ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5kZXggPT09IGxhc3RJbmRleCkge1xuICAgICAgICAgICAgdGV4dCA9IHRyaW1SaWdodCh0ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGV4dDtcbiAgICB9XG4gICAgcmVuZGVyQ2hpbGRyZW4oY3R4KSB7XG4gICAgICAgIGlmICh0aGlzLnR5cGUgIT09ICd0ZXh0Jykge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJURWxlbWVudENoaWxkcmVuKGN0eCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gZmlyc3QsIGNhbGN1bGF0ZSBjaGlsZCBwb3NpdGlvbnNcbiAgICAgICAgdGhpcy5pbml0aWFsaXplQ29vcmRpbmF0ZXMoKTtcbiAgICAgICAgdGhpcy5hZGp1c3RDaGlsZENvb3JkaW5hdGVzUmVjdXJzaXZlKGN0eCk7XG4gICAgICAgIC8vIHRoZW4gcmVuZGVyXG4gICAgICAgIHRoaXMuY2hpbGRyZW4uZm9yRWFjaCgoXywgaSk9PntcbiAgICAgICAgICAgIHRoaXMucmVuZGVyQ2hpbGQoY3R4LCB0aGlzLCB0aGlzLCBpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHsgbW91c2UgIH0gPSB0aGlzLmRvY3VtZW50LnNjcmVlbjtcbiAgICAgICAgLy8gRG8gbm90IGNhbGMgYm91bmRpbmcgYm94IGlmIG1vdXNlIGlzIG5vdCB3b3JraW5nLlxuICAgICAgICBpZiAobW91c2UuaXNXb3JraW5nKCkpIHtcbiAgICAgICAgICAgIG1vdXNlLmNoZWNrQm91bmRpbmdCb3godGhpcywgdGhpcy5nZXRCb3VuZGluZ0JveChjdHgpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZW5kZXJURWxlbWVudENoaWxkcmVuKGN0eCkge1xuICAgICAgICBjb25zdCB7IGRvY3VtZW50ICwgcGFyZW50ICB9ID0gdGhpcztcbiAgICAgICAgY29uc3QgcmVuZGVyVGV4dCA9IHRoaXMuZ2V0VGV4dCgpO1xuICAgICAgICBjb25zdCBjdXN0b21Gb250ID0gcGFyZW50LmdldFN0eWxlKCdmb250LWZhbWlseScpLmdldERlZmluaXRpb24oKTtcbiAgICAgICAgaWYgKGN1c3RvbUZvbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgdW5pdHNQZXJFbSAgfSA9IGN1c3RvbUZvbnQuZm9udEZhY2U7XG4gICAgICAgICAgICBjb25zdCBjdHhGb250ID0gRm9udC5wYXJzZShkb2N1bWVudC5jdHguZm9udCk7XG4gICAgICAgICAgICBjb25zdCBmb250U2l6ZSA9IHBhcmVudC5nZXRTdHlsZSgnZm9udC1zaXplJykuZ2V0TnVtYmVyKGN0eEZvbnQuZm9udFNpemUpO1xuICAgICAgICAgICAgY29uc3QgZm9udFN0eWxlID0gcGFyZW50LmdldFN0eWxlKCdmb250LXN0eWxlJykuZ2V0U3RyaW5nKGN0eEZvbnQuZm9udFN0eWxlKTtcbiAgICAgICAgICAgIGNvbnN0IHNjYWxlID0gZm9udFNpemUgLyB1bml0c1BlckVtO1xuICAgICAgICAgICAgY29uc3QgdGV4dCA9IGN1c3RvbUZvbnQuaXNSVEwgPyByZW5kZXJUZXh0LnNwbGl0KCcnKS5yZXZlcnNlKCkuam9pbignJykgOiByZW5kZXJUZXh0O1xuICAgICAgICAgICAgY29uc3QgZHggPSB0b051bWJlcnMocGFyZW50LmdldEF0dHJpYnV0ZSgnZHgnKS5nZXRTdHJpbmcoKSk7XG4gICAgICAgICAgICBjb25zdCBsZW4gPSB0ZXh0Lmxlbmd0aDtcbiAgICAgICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCBsZW47IGkrKyl7XG4gICAgICAgICAgICAgICAgY29uc3QgZ2x5cGggPSB0aGlzLmdldEdseXBoKGN1c3RvbUZvbnQsIHRleHQsIGkpO1xuICAgICAgICAgICAgICAgIGN0eC50cmFuc2xhdGUodGhpcy54LCB0aGlzLnkpO1xuICAgICAgICAgICAgICAgIGN0eC5zY2FsZShzY2FsZSwgLXNjYWxlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBsdyA9IGN0eC5saW5lV2lkdGg7XG4gICAgICAgICAgICAgICAgY3R4LmxpbmVXaWR0aCA9IGN0eC5saW5lV2lkdGggKiB1bml0c1BlckVtIC8gZm9udFNpemU7XG4gICAgICAgICAgICAgICAgaWYgKGZvbnRTdHlsZSA9PT0gJ2l0YWxpYycpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4LnRyYW5zZm9ybSgxLCAwLCAwLjQsIDEsIDAsIDApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBnbHlwaC5yZW5kZXIoY3R4KTtcbiAgICAgICAgICAgICAgICBpZiAoZm9udFN0eWxlID09PSAnaXRhbGljJykge1xuICAgICAgICAgICAgICAgICAgICBjdHgudHJhbnNmb3JtKDEsIDAsIC0wLjQsIDEsIDAsIDApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjdHgubGluZVdpZHRoID0gbHc7XG4gICAgICAgICAgICAgICAgY3R4LnNjYWxlKDEgLyBzY2FsZSwgLTEgLyBzY2FsZSk7XG4gICAgICAgICAgICAgICAgY3R4LnRyYW5zbGF0ZSgtdGhpcy54LCAtdGhpcy55KTtcbiAgICAgICAgICAgICAgICB0aGlzLnggKz0gZm9udFNpemUgKiAoZ2x5cGguaG9yaXpBZHZYIHx8IGN1c3RvbUZvbnQuaG9yaXpBZHZYKSAvIHVuaXRzUGVyRW07XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkeFtpXSAhPT0gJ3VuZGVmaW5lZCcgJiYgIWlzTmFOKGR4W2ldKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnggKz0gZHhbaV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgeCAsIHkgIH0gPSB0aGlzO1xuICAgICAgICAvLyBORUVEIFRFU1RcbiAgICAgICAgLy8gaWYgKGN0eC5wYWludE9yZGVyID09PSAnc3Ryb2tlJykge1xuICAgICAgICAvLyAgIGlmIChjdHguc3Ryb2tlU3R5bGUpIHtcbiAgICAgICAgLy8gICAgIGN0eC5zdHJva2VUZXh0KHJlbmRlclRleHQsIHgsIHkpO1xuICAgICAgICAvLyAgIH1cbiAgICAgICAgLy8gICBpZiAoY3R4LmZpbGxTdHlsZSkge1xuICAgICAgICAvLyAgICAgY3R4LmZpbGxUZXh0KHJlbmRlclRleHQsIHgsIHkpO1xuICAgICAgICAvLyAgIH1cbiAgICAgICAgLy8gfSBlbHNlIHtcbiAgICAgICAgaWYgKGN0eC5maWxsU3R5bGUpIHtcbiAgICAgICAgICAgIGN0eC5maWxsVGV4dChyZW5kZXJUZXh0LCB4LCB5KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY3R4LnN0cm9rZVN0eWxlKSB7XG4gICAgICAgICAgICBjdHguc3Ryb2tlVGV4dChyZW5kZXJUZXh0LCB4LCB5KTtcbiAgICAgICAgfVxuICAgIC8vIH1cbiAgICB9XG4gICAgYXBwbHlBbmNob3JpbmcoKSB7XG4gICAgICAgIGlmICh0aGlzLnRleHRDaHVua1N0YXJ0ID49IHRoaXMubGVhZlRleHRzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRoaXMgaXMgYmFzaWNhbGx5IHRoZSBcIkFwcGx5IGFuY2hvcmluZ1wiIHBhcnQgb2YgaHR0cHM6Ly93d3cudzMub3JnL1RSL1NWRzIvdGV4dC5odG1sI1RleHRMYXlvdXRBbGdvcml0aG0uXG4gICAgICAgIC8vIFRoZSBkaWZmZXJlbmNlIGlzIHRoYXQgd2UgYXBwbHkgdGhlIGFuY2hvcmluZyBhcyBzb29uIGFzIGEgY2h1bmsgaXMgZmluaXNoZWQuIFRoaXMgc2F2ZXMgc29tZSBleHRyYSBsb29waW5nLlxuICAgICAgICAvLyBWZXJ0aWNhbCB0ZXh0IGlzIG5vdCBzdXBwb3J0ZWQuXG4gICAgICAgIGNvbnN0IGZpcnN0RWxlbWVudCA9IHRoaXMubGVhZlRleHRzW3RoaXMudGV4dENodW5rU3RhcnRdO1xuICAgICAgICBjb25zdCB0ZXh0QW5jaG9yID0gZmlyc3RFbGVtZW50LmdldFN0eWxlKCd0ZXh0LWFuY2hvcicpLmdldFN0cmluZygnc3RhcnQnKTtcbiAgICAgICAgY29uc3QgaXNSVEwgPSBmYWxzZSAvLyB3ZSB0cmVhdCBSVEwgbGlrZSBMVFJcbiAgICAgICAgO1xuICAgICAgICBsZXQgc2hpZnQgPSAwO1xuICAgICAgICBpZiAodGV4dEFuY2hvciA9PT0gJ3N0YXJ0JyAmJiAhaXNSVEwgfHwgdGV4dEFuY2hvciA9PT0gJ2VuZCcgJiYgaXNSVEwpIHtcbiAgICAgICAgICAgIHNoaWZ0ID0gZmlyc3RFbGVtZW50LnggLSB0aGlzLm1pblg7XG4gICAgICAgIH0gZWxzZSBpZiAodGV4dEFuY2hvciA9PT0gJ2VuZCcgJiYgIWlzUlRMIHx8IHRleHRBbmNob3IgPT09ICdzdGFydCcgJiYgaXNSVEwpIHtcbiAgICAgICAgICAgIHNoaWZ0ID0gZmlyc3RFbGVtZW50LnggLSB0aGlzLm1heFg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzaGlmdCA9IGZpcnN0RWxlbWVudC54IC0gKHRoaXMubWluWCArIHRoaXMubWF4WCkgLyAyO1xuICAgICAgICB9XG4gICAgICAgIGZvcihsZXQgaSA9IHRoaXMudGV4dENodW5rU3RhcnQ7IGkgPCB0aGlzLmxlYWZUZXh0cy5sZW5ndGg7IGkrKyl7XG4gICAgICAgICAgICB0aGlzLmxlYWZUZXh0c1tpXS54ICs9IHNoaWZ0O1xuICAgICAgICB9XG4gICAgICAgIC8vIHN0YXJ0IG5ldyBjaHVua1xuICAgICAgICB0aGlzLm1pblggPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gICAgICAgIHRoaXMubWF4WCA9IE51bWJlci5ORUdBVElWRV9JTkZJTklUWTtcbiAgICAgICAgdGhpcy50ZXh0Q2h1bmtTdGFydCA9IHRoaXMubGVhZlRleHRzLmxlbmd0aDtcbiAgICB9XG4gICAgYWRqdXN0Q2hpbGRDb29yZGluYXRlc1JlY3Vyc2l2ZShjdHgpIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbi5mb3JFYWNoKChfLCBpKT0+e1xuICAgICAgICAgICAgdGhpcy5hZGp1c3RDaGlsZENvb3JkaW5hdGVzUmVjdXJzaXZlQ29yZShjdHgsIHRoaXMsIHRoaXMsIGkpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hcHBseUFuY2hvcmluZygpO1xuICAgIH1cbiAgICBhZGp1c3RDaGlsZENvb3JkaW5hdGVzUmVjdXJzaXZlQ29yZShjdHgsIHRleHRQYXJlbnQsIHBhcmVudCwgaTEpIHtcbiAgICAgICAgY29uc3QgY2hpbGQgPSBwYXJlbnQuY2hpbGRyZW5baTFdO1xuICAgICAgICBpZiAoY2hpbGQuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY2hpbGQuY2hpbGRyZW4uZm9yRWFjaCgoXywgaSk9PntcbiAgICAgICAgICAgICAgICB0ZXh0UGFyZW50LmFkanVzdENoaWxkQ29vcmRpbmF0ZXNSZWN1cnNpdmVDb3JlKGN0eCwgdGV4dFBhcmVudCwgY2hpbGQsIGkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBvbmx5IGxlYWZzIGFyZSByZWxldmFudFxuICAgICAgICAgICAgdGhpcy5hZGp1c3RDaGlsZENvb3JkaW5hdGVzKGN0eCwgdGV4dFBhcmVudCwgcGFyZW50LCBpMSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYWRqdXN0Q2hpbGRDb29yZGluYXRlcyhjdHgsIHRleHRQYXJlbnQsIHBhcmVudCwgaSkge1xuICAgICAgICBjb25zdCBjaGlsZCA9IHBhcmVudC5jaGlsZHJlbltpXTtcbiAgICAgICAgaWYgKHR5cGVvZiBjaGlsZC5tZWFzdXJlVGV4dCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgICB9XG4gICAgICAgIGN0eC5zYXZlKCk7XG4gICAgICAgIGNoaWxkLnNldENvbnRleHQoY3R4LCB0cnVlKTtcbiAgICAgICAgY29uc3QgeEF0dHIgPSBjaGlsZC5nZXRBdHRyaWJ1dGUoJ3gnKTtcbiAgICAgICAgY29uc3QgeUF0dHIgPSBjaGlsZC5nZXRBdHRyaWJ1dGUoJ3knKTtcbiAgICAgICAgY29uc3QgZHhBdHRyID0gY2hpbGQuZ2V0QXR0cmlidXRlKCdkeCcpO1xuICAgICAgICBjb25zdCBkeUF0dHIgPSBjaGlsZC5nZXRBdHRyaWJ1dGUoJ2R5Jyk7XG4gICAgICAgIGNvbnN0IGN1c3RvbUZvbnQgPSBjaGlsZC5nZXRTdHlsZSgnZm9udC1mYW1pbHknKS5nZXREZWZpbml0aW9uKCk7XG4gICAgICAgIGNvbnN0IGlzUlRMID0gQm9vbGVhbihjdXN0b21Gb250ID09PSBudWxsIHx8IGN1c3RvbUZvbnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGN1c3RvbUZvbnQuaXNSVEwpO1xuICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgICAgLy8gRmlyc3QgY2hpbGRyZW4gaW5oZXJpdCBhdHRyaWJ1dGVzIGZyb20gcGFyZW50KHMpLiBQb3NpdGlvbmFsIGF0dHJpYnV0ZXNcbiAgICAgICAgICAgIC8vIGFyZSBvbmx5IGluaGVyaXRlZCBmcm9tIGEgcGFyZW50IHRvIGl0J3MgZmlyc3QgY2hpbGQuXG4gICAgICAgICAgICBpZiAoIXhBdHRyLmhhc1ZhbHVlKCkpIHtcbiAgICAgICAgICAgICAgICB4QXR0ci5zZXRWYWx1ZShjaGlsZC5nZXRJbmhlcml0ZWRBdHRyaWJ1dGUoJ3gnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXlBdHRyLmhhc1ZhbHVlKCkpIHtcbiAgICAgICAgICAgICAgICB5QXR0ci5zZXRWYWx1ZShjaGlsZC5nZXRJbmhlcml0ZWRBdHRyaWJ1dGUoJ3knKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWR4QXR0ci5oYXNWYWx1ZSgpKSB7XG4gICAgICAgICAgICAgICAgZHhBdHRyLnNldFZhbHVlKGNoaWxkLmdldEluaGVyaXRlZEF0dHJpYnV0ZSgnZHgnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWR5QXR0ci5oYXNWYWx1ZSgpKSB7XG4gICAgICAgICAgICAgICAgZHlBdHRyLnNldFZhbHVlKGNoaWxkLmdldEluaGVyaXRlZEF0dHJpYnV0ZSgnZHknKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgd2lkdGggPSBjaGlsZC5tZWFzdXJlVGV4dChjdHgpO1xuICAgICAgICBpZiAoaXNSVEwpIHtcbiAgICAgICAgICAgIHRleHRQYXJlbnQueCAtPSB3aWR0aDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoeEF0dHIuaGFzVmFsdWUoKSkge1xuICAgICAgICAgICAgLy8gYW4gXCJ4XCIgYXR0cmlidXRlIG1hcmtzIHRoZSBzdGFydCBvZiBhIG5ldyBjaHVua1xuICAgICAgICAgICAgdGV4dFBhcmVudC5hcHBseUFuY2hvcmluZygpO1xuICAgICAgICAgICAgY2hpbGQueCA9IHhBdHRyLmdldFBpeGVscygneCcpO1xuICAgICAgICAgICAgaWYgKGR4QXR0ci5oYXNWYWx1ZSgpKSB7XG4gICAgICAgICAgICAgICAgY2hpbGQueCArPSBkeEF0dHIuZ2V0UGl4ZWxzKCd4Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoZHhBdHRyLmhhc1ZhbHVlKCkpIHtcbiAgICAgICAgICAgICAgICB0ZXh0UGFyZW50LnggKz0gZHhBdHRyLmdldFBpeGVscygneCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2hpbGQueCA9IHRleHRQYXJlbnQueDtcbiAgICAgICAgfVxuICAgICAgICB0ZXh0UGFyZW50LnggPSBjaGlsZC54O1xuICAgICAgICBpZiAoIWlzUlRMKSB7XG4gICAgICAgICAgICB0ZXh0UGFyZW50LnggKz0gd2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHlBdHRyLmhhc1ZhbHVlKCkpIHtcbiAgICAgICAgICAgIGNoaWxkLnkgPSB5QXR0ci5nZXRQaXhlbHMoJ3knKTtcbiAgICAgICAgICAgIGlmIChkeUF0dHIuaGFzVmFsdWUoKSkge1xuICAgICAgICAgICAgICAgIGNoaWxkLnkgKz0gZHlBdHRyLmdldFBpeGVscygneScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGR5QXR0ci5oYXNWYWx1ZSgpKSB7XG4gICAgICAgICAgICAgICAgdGV4dFBhcmVudC55ICs9IGR5QXR0ci5nZXRQaXhlbHMoJ3knKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNoaWxkLnkgPSB0ZXh0UGFyZW50Lnk7XG4gICAgICAgIH1cbiAgICAgICAgdGV4dFBhcmVudC55ID0gY2hpbGQueTtcbiAgICAgICAgLy8gdXBkYXRlIHRoZSBjdXJyZW50IGNodW5rIGFuZCBpdCdzIGJvdW5kc1xuICAgICAgICB0ZXh0UGFyZW50LmxlYWZUZXh0cy5wdXNoKGNoaWxkKTtcbiAgICAgICAgdGV4dFBhcmVudC5taW5YID0gTWF0aC5taW4odGV4dFBhcmVudC5taW5YLCBjaGlsZC54LCBjaGlsZC54ICsgd2lkdGgpO1xuICAgICAgICB0ZXh0UGFyZW50Lm1heFggPSBNYXRoLm1heCh0ZXh0UGFyZW50Lm1heFgsIGNoaWxkLngsIGNoaWxkLnggKyB3aWR0aCk7XG4gICAgICAgIGNoaWxkLmNsZWFyQ29udGV4dChjdHgpO1xuICAgICAgICBjdHgucmVzdG9yZSgpO1xuICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgfVxuICAgIGdldENoaWxkQm91bmRpbmdCb3goY3R4LCB0ZXh0UGFyZW50LCBwYXJlbnQsIGkyKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkID0gcGFyZW50LmNoaWxkcmVuW2kyXTtcbiAgICAgICAgLy8gbm90IGEgdGV4dCBub2RlP1xuICAgICAgICBpZiAodHlwZW9mIGNoaWxkLmdldEJvdW5kaW5nQm94ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBib3VuZGluZ0JveCA9IGNoaWxkLmdldEJvdW5kaW5nQm94KGN0eCk7XG4gICAgICAgIGlmIChib3VuZGluZ0JveCkge1xuICAgICAgICAgICAgY2hpbGQuY2hpbGRyZW4uZm9yRWFjaCgoXywgaSk9PntcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZEJvdW5kaW5nQm94ID0gdGV4dFBhcmVudC5nZXRDaGlsZEJvdW5kaW5nQm94KGN0eCwgdGV4dFBhcmVudCwgY2hpbGQsIGkpO1xuICAgICAgICAgICAgICAgIGJvdW5kaW5nQm94LmFkZEJvdW5kaW5nQm94KGNoaWxkQm91bmRpbmdCb3gpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGJvdW5kaW5nQm94O1xuICAgIH1cbiAgICByZW5kZXJDaGlsZChjdHgsIHRleHRQYXJlbnQsIHBhcmVudCwgaTMpIHtcbiAgICAgICAgY29uc3QgY2hpbGQgPSBwYXJlbnQuY2hpbGRyZW5baTNdO1xuICAgICAgICBjaGlsZC5yZW5kZXIoY3R4KTtcbiAgICAgICAgY2hpbGQuY2hpbGRyZW4uZm9yRWFjaCgoXywgaSk9PntcbiAgICAgICAgICAgIHRleHRQYXJlbnQucmVuZGVyQ2hpbGQoY3R4LCB0ZXh0UGFyZW50LCBjaGlsZCwgaSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBtZWFzdXJlVGV4dChjdHgpIHtcbiAgICAgICAgY29uc3QgeyBtZWFzdXJlQ2FjaGUgIH0gPSB0aGlzO1xuICAgICAgICBpZiAofm1lYXN1cmVDYWNoZSkge1xuICAgICAgICAgICAgcmV0dXJuIG1lYXN1cmVDYWNoZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZW5kZXJUZXh0ID0gdGhpcy5nZXRUZXh0KCk7XG4gICAgICAgIGNvbnN0IG1lYXN1cmUgPSB0aGlzLm1lYXN1cmVUYXJnZXRUZXh0KGN0eCwgcmVuZGVyVGV4dCk7XG4gICAgICAgIHRoaXMubWVhc3VyZUNhY2hlID0gbWVhc3VyZTtcbiAgICAgICAgcmV0dXJuIG1lYXN1cmU7XG4gICAgfVxuICAgIG1lYXN1cmVUYXJnZXRUZXh0KGN0eCwgdGFyZ2V0VGV4dCkge1xuICAgICAgICBpZiAoIXRhcmdldFRleHQubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHBhcmVudCAgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGN1c3RvbUZvbnQgPSBwYXJlbnQuZ2V0U3R5bGUoJ2ZvbnQtZmFtaWx5JykuZ2V0RGVmaW5pdGlvbigpO1xuICAgICAgICBpZiAoY3VzdG9tRm9udCkge1xuICAgICAgICAgICAgY29uc3QgZm9udFNpemUgPSB0aGlzLmdldEZvbnRTaXplKCk7XG4gICAgICAgICAgICBjb25zdCB0ZXh0ID0gY3VzdG9tRm9udC5pc1JUTCA/IHRhcmdldFRleHQuc3BsaXQoJycpLnJldmVyc2UoKS5qb2luKCcnKSA6IHRhcmdldFRleHQ7XG4gICAgICAgICAgICBjb25zdCBkeCA9IHRvTnVtYmVycyhwYXJlbnQuZ2V0QXR0cmlidXRlKCdkeCcpLmdldFN0cmluZygpKTtcbiAgICAgICAgICAgIGNvbnN0IGxlbiA9IHRleHQubGVuZ3RoO1xuICAgICAgICAgICAgbGV0IG1lYXN1cmUgPSAwO1xuICAgICAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKXtcbiAgICAgICAgICAgICAgICBjb25zdCBnbHlwaCA9IHRoaXMuZ2V0R2x5cGgoY3VzdG9tRm9udCwgdGV4dCwgaSk7XG4gICAgICAgICAgICAgICAgbWVhc3VyZSArPSAoZ2x5cGguaG9yaXpBZHZYIHx8IGN1c3RvbUZvbnQuaG9yaXpBZHZYKSAqIGZvbnRTaXplIC8gY3VzdG9tRm9udC5mb250RmFjZS51bml0c1BlckVtO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZHhbaV0gIT09ICd1bmRlZmluZWQnICYmICFpc05hTihkeFtpXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgbWVhc3VyZSArPSBkeFtpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbWVhc3VyZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVubmVjZXNzYXJ5LWNvbmRpdGlvblxuICAgICAgICBpZiAoIWN0eC5tZWFzdXJlVGV4dCkge1xuICAgICAgICAgICAgcmV0dXJuIHRhcmdldFRleHQubGVuZ3RoICogMTA7XG4gICAgICAgIH1cbiAgICAgICAgY3R4LnNhdmUoKTtcbiAgICAgICAgdGhpcy5zZXRDb250ZXh0KGN0eCwgdHJ1ZSk7XG4gICAgICAgIGNvbnN0IHsgd2lkdGg6IG1lYXN1cmUgIH0gPSBjdHgubWVhc3VyZVRleHQodGFyZ2V0VGV4dCk7XG4gICAgICAgIHRoaXMuY2xlYXJDb250ZXh0KGN0eCk7XG4gICAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgICAgIHJldHVybiBtZWFzdXJlO1xuICAgIH1cbiAgICAvKipcbiAgICogSW5oZXJpdHMgcG9zaXRpb25hbCBhdHRyaWJ1dGVzIGZyb20ge0BsaW5rIFRleHRFbGVtZW50fSBwYXJlbnQocykuIEF0dHJpYnV0ZXNcbiAgICogYXJlIG9ubHkgaW5oZXJpdGVkIGZyb20gYSBwYXJlbnQgdG8gaXRzIGZpcnN0IGNoaWxkLlxuICAgKiBAcGFyYW0gbmFtZSAtIFRoZSBhdHRyaWJ1dGUgbmFtZS5cbiAgICogQHJldHVybnMgVGhlIGF0dHJpYnV0ZSB2YWx1ZSBvciBudWxsLlxuICAgKi8gZ2V0SW5oZXJpdGVkQXR0cmlidXRlKG5hbWUpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzLGNvbnNpc3RlbnQtdGhpc1xuICAgICAgICBsZXQgY3VycmVudCA9IHRoaXM7XG4gICAgICAgIHdoaWxlKGN1cnJlbnQgaW5zdGFuY2VvZiBUZXh0RWxlbWVudCAmJiBjdXJyZW50LmlzRmlyc3RDaGlsZCgpICYmIGN1cnJlbnQucGFyZW50KXtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudEF0dHIgPSBjdXJyZW50LnBhcmVudC5nZXRBdHRyaWJ1dGUobmFtZSk7XG4gICAgICAgICAgICBpZiAocGFyZW50QXR0ci5oYXNWYWx1ZSh0cnVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXJlbnRBdHRyLmdldFN0cmluZygnMCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQucGFyZW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdHJ1Y3Rvcihkb2N1bWVudCwgbm9kZSwgY2FwdHVyZVRleHROb2Rlcyl7XG4gICAgICAgIHN1cGVyKGRvY3VtZW50LCBub2RlLCBuZXcudGFyZ2V0ID09PSBUZXh0RWxlbWVudCA/IHRydWUgOiBjYXB0dXJlVGV4dE5vZGVzKTtcbiAgICAgICAgdGhpcy50eXBlID0gJ3RleHQnO1xuICAgICAgICB0aGlzLnggPSAwO1xuICAgICAgICB0aGlzLnkgPSAwO1xuICAgICAgICB0aGlzLmxlYWZUZXh0cyA9IFtdO1xuICAgICAgICB0aGlzLnRleHRDaHVua1N0YXJ0ID0gMDtcbiAgICAgICAgdGhpcy5taW5YID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuICAgICAgICB0aGlzLm1heFggPSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7XG4gICAgICAgIHRoaXMubWVhc3VyZUNhY2hlID0gLTE7XG4gICAgfVxufVxuXG5jbGFzcyBUU3BhbkVsZW1lbnQgZXh0ZW5kcyBUZXh0RWxlbWVudCB7XG4gICAgZ2V0VGV4dCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGV4dDtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoZG9jdW1lbnQsIG5vZGUsIGNhcHR1cmVUZXh0Tm9kZXMpe1xuICAgICAgICBzdXBlcihkb2N1bWVudCwgbm9kZSwgbmV3LnRhcmdldCA9PT0gVFNwYW5FbGVtZW50ID8gdHJ1ZSA6IGNhcHR1cmVUZXh0Tm9kZXMpO1xuICAgICAgICB0aGlzLnR5cGUgPSAndHNwYW4nO1xuICAgICAgICAvLyBpZiB0aGlzIG5vZGUgaGFzIGNoaWxkcmVuLCB0aGVuIHRoZXkgb3duIHRoZSB0ZXh0XG4gICAgICAgIHRoaXMudGV4dCA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoID4gMCA/ICcnIDogdGhpcy5nZXRUZXh0RnJvbU5vZGUoKTtcbiAgICB9XG59XG5cbmNsYXNzIFRleHROb2RlIGV4dGVuZHMgVFNwYW5FbGVtZW50IHtcbiAgICBjb25zdHJ1Y3RvciguLi5hcmdzKXtcbiAgICAgICAgc3VwZXIoLi4uYXJncyk7XG4gICAgICAgIHRoaXMudHlwZSA9ICd0ZXh0Tm9kZSc7XG4gICAgfVxufVxuXG5jbGFzcyBQYXRoUGFyc2VyIGV4dGVuZHMgU1ZHUGF0aERhdGEge1xuICAgIHJlc2V0KCkge1xuICAgICAgICB0aGlzLmkgPSAtMTtcbiAgICAgICAgdGhpcy5jb21tYW5kID0gbnVsbDtcbiAgICAgICAgdGhpcy5wcmV2aW91c0NvbW1hbmQgPSBudWxsO1xuICAgICAgICB0aGlzLnN0YXJ0ID0gbmV3IFBvaW50KDAsIDApO1xuICAgICAgICB0aGlzLmNvbnRyb2wgPSBuZXcgUG9pbnQoMCwgMCk7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IG5ldyBQb2ludCgwLCAwKTtcbiAgICAgICAgdGhpcy5wb2ludHMgPSBbXTtcbiAgICAgICAgdGhpcy5hbmdsZXMgPSBbXTtcbiAgICB9XG4gICAgaXNFbmQoKSB7XG4gICAgICAgIGNvbnN0IHsgaSAsIGNvbW1hbmRzICB9ID0gdGhpcztcbiAgICAgICAgcmV0dXJuIGkgPj0gY29tbWFuZHMubGVuZ3RoIC0gMTtcbiAgICB9XG4gICAgbmV4dCgpIHtcbiAgICAgICAgY29uc3QgY29tbWFuZCA9IHRoaXMuY29tbWFuZHNbKyt0aGlzLmldO1xuICAgICAgICB0aGlzLnByZXZpb3VzQ29tbWFuZCA9IHRoaXMuY29tbWFuZDtcbiAgICAgICAgdGhpcy5jb21tYW5kID0gY29tbWFuZDtcbiAgICAgICAgcmV0dXJuIGNvbW1hbmQ7XG4gICAgfVxuICAgIGdldFBvaW50KCkge1xuICAgICAgICBsZXQgeFByb3AgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHZvaWQgMCA/IGFyZ3VtZW50c1swXSA6ICd4JywgeVByb3AgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHZvaWQgMCA/IGFyZ3VtZW50c1sxXSA6ICd5JztcbiAgICAgICAgY29uc3QgcG9pbnQgPSBuZXcgUG9pbnQodGhpcy5jb21tYW5kW3hQcm9wXSwgdGhpcy5jb21tYW5kW3lQcm9wXSk7XG4gICAgICAgIHJldHVybiB0aGlzLm1ha2VBYnNvbHV0ZShwb2ludCk7XG4gICAgfVxuICAgIGdldEFzQ29udHJvbFBvaW50KHhQcm9wLCB5UHJvcCkge1xuICAgICAgICBjb25zdCBwb2ludCA9IHRoaXMuZ2V0UG9pbnQoeFByb3AsIHlQcm9wKTtcbiAgICAgICAgdGhpcy5jb250cm9sID0gcG9pbnQ7XG4gICAgICAgIHJldHVybiBwb2ludDtcbiAgICB9XG4gICAgZ2V0QXNDdXJyZW50UG9pbnQoeFByb3AsIHlQcm9wKSB7XG4gICAgICAgIGNvbnN0IHBvaW50ID0gdGhpcy5nZXRQb2ludCh4UHJvcCwgeVByb3ApO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSBwb2ludDtcbiAgICAgICAgcmV0dXJuIHBvaW50O1xuICAgIH1cbiAgICBnZXRSZWZsZWN0ZWRDb250cm9sUG9pbnQoKSB7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzQ29tbWFuZCA9IHRoaXMucHJldmlvdXNDb21tYW5kLnR5cGU7XG4gICAgICAgIGlmIChwcmV2aW91c0NvbW1hbmQgIT09IFNWR1BhdGhEYXRhLkNVUlZFX1RPICYmIHByZXZpb3VzQ29tbWFuZCAhPT0gU1ZHUGF0aERhdGEuU01PT1RIX0NVUlZFX1RPICYmIHByZXZpb3VzQ29tbWFuZCAhPT0gU1ZHUGF0aERhdGEuUVVBRF9UTyAmJiBwcmV2aW91c0NvbW1hbmQgIT09IFNWR1BhdGhEYXRhLlNNT09USF9RVUFEX1RPKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50O1xuICAgICAgICB9XG4gICAgICAgIC8vIHJlZmxlY3QgcG9pbnRcbiAgICAgICAgY29uc3QgeyBjdXJyZW50OiB7IHg6IGN4ICwgeTogY3kgIH0gLCBjb250cm9sOiB7IHg6IG94ICwgeTogb3kgIH0gIH0gPSB0aGlzO1xuICAgICAgICBjb25zdCBwb2ludCA9IG5ldyBQb2ludCgyICogY3ggLSBveCwgMiAqIGN5IC0gb3kpO1xuICAgICAgICByZXR1cm4gcG9pbnQ7XG4gICAgfVxuICAgIG1ha2VBYnNvbHV0ZShwb2ludCkge1xuICAgICAgICBpZiAodGhpcy5jb21tYW5kLnJlbGF0aXZlKSB7XG4gICAgICAgICAgICBjb25zdCB7IHggLCB5ICB9ID0gdGhpcy5jdXJyZW50O1xuICAgICAgICAgICAgcG9pbnQueCArPSB4O1xuICAgICAgICAgICAgcG9pbnQueSArPSB5O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwb2ludDtcbiAgICB9XG4gICAgYWRkTWFya2VyKHBvaW50LCBmcm9tLCBwcmlvclRvKSB7XG4gICAgICAgIGNvbnN0IHsgcG9pbnRzICwgYW5nbGVzICB9ID0gdGhpcztcbiAgICAgICAgLy8gaWYgdGhlIGxhc3QgYW5nbGUgaXNuJ3QgZmlsbGVkIGluIGJlY2F1c2Ugd2UgZGlkbid0IGhhdmUgdGhpcyBwb2ludCB5ZXQgLi4uXG4gICAgICAgIGlmIChwcmlvclRvICYmIGFuZ2xlcy5sZW5ndGggPiAwICYmICFhbmdsZXNbYW5nbGVzLmxlbmd0aCAtIDFdKSB7XG4gICAgICAgICAgICBhbmdsZXNbYW5nbGVzLmxlbmd0aCAtIDFdID0gcG9pbnRzW3BvaW50cy5sZW5ndGggLSAxXS5hbmdsZVRvKHByaW9yVG8pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWRkTWFya2VyQW5nbGUocG9pbnQsIGZyb20gPyBmcm9tLmFuZ2xlVG8ocG9pbnQpIDogbnVsbCk7XG4gICAgfVxuICAgIGFkZE1hcmtlckFuZ2xlKHBvaW50LCBhbmdsZSkge1xuICAgICAgICB0aGlzLnBvaW50cy5wdXNoKHBvaW50KTtcbiAgICAgICAgdGhpcy5hbmdsZXMucHVzaChhbmdsZSk7XG4gICAgfVxuICAgIGdldE1hcmtlclBvaW50cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucG9pbnRzO1xuICAgIH1cbiAgICBnZXRNYXJrZXJBbmdsZXMoKSB7XG4gICAgICAgIGNvbnN0IHsgYW5nbGVzICB9ID0gdGhpcztcbiAgICAgICAgY29uc3QgbGVuID0gYW5nbGVzLmxlbmd0aDtcbiAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKXtcbiAgICAgICAgICAgIGlmICghYW5nbGVzW2ldKSB7XG4gICAgICAgICAgICAgICAgZm9yKGxldCBqID0gaSArIDE7IGogPCBsZW47IGorKyl7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhbmdsZXNbal0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFuZ2xlc1tpXSA9IGFuZ2xlc1tqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhbmdsZXM7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKHBhdGgpe1xuICAgICAgICBzdXBlcihwYXRoLy8gRml4IHNwYWNlcyBhZnRlciBzaWducy5cbiAgICAgICAgLnJlcGxhY2UoLyhbK1xcLS5dKVxccysvZ20sICckMScpLy8gUmVtb3ZlIGludmFsaWQgcGFydC5cbiAgICAgICAgLnJlcGxhY2UoL1teTW1aekxsSGhWdkNjU3NRcVR0QWFlXFxkXFxzLiwrLV0uKi9nLCAnJykpO1xuICAgICAgICB0aGlzLmNvbnRyb2wgPSBuZXcgUG9pbnQoMCwgMCk7XG4gICAgICAgIHRoaXMuc3RhcnQgPSBuZXcgUG9pbnQoMCwgMCk7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IG5ldyBQb2ludCgwLCAwKTtcbiAgICAgICAgdGhpcy5jb21tYW5kID0gbnVsbDtcbiAgICAgICAgdGhpcy5jb21tYW5kcyA9IHRoaXMuY29tbWFuZHM7XG4gICAgICAgIHRoaXMuaSA9IC0xO1xuICAgICAgICB0aGlzLnByZXZpb3VzQ29tbWFuZCA9IG51bGw7XG4gICAgICAgIHRoaXMucG9pbnRzID0gW107XG4gICAgICAgIHRoaXMuYW5nbGVzID0gW107XG4gICAgfVxufVxuXG5jbGFzcyBQYXRoRWxlbWVudCBleHRlbmRzIFJlbmRlcmVkRWxlbWVudCB7XG4gICAgcGF0aChjdHgpIHtcbiAgICAgICAgY29uc3QgeyBwYXRoUGFyc2VyICB9ID0gdGhpcztcbiAgICAgICAgY29uc3QgYm91bmRpbmdCb3ggPSBuZXcgQm91bmRpbmdCb3goKTtcbiAgICAgICAgcGF0aFBhcnNlci5yZXNldCgpO1xuICAgICAgICBpZiAoY3R4KSB7XG4gICAgICAgICAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUoIXBhdGhQYXJzZXIuaXNFbmQoKSl7XG4gICAgICAgICAgICBzd2l0Y2gocGF0aFBhcnNlci5uZXh0KCkudHlwZSl7XG4gICAgICAgICAgICAgICAgY2FzZSBQYXRoUGFyc2VyLk1PVkVfVE86XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGF0aE0oY3R4LCBib3VuZGluZ0JveCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgUGF0aFBhcnNlci5MSU5FX1RPOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhdGhMKGN0eCwgYm91bmRpbmdCb3gpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFBhdGhQYXJzZXIuSE9SSVpfTElORV9UTzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXRoSChjdHgsIGJvdW5kaW5nQm94KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBQYXRoUGFyc2VyLlZFUlRfTElORV9UTzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXRoVihjdHgsIGJvdW5kaW5nQm94KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBQYXRoUGFyc2VyLkNVUlZFX1RPOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhdGhDKGN0eCwgYm91bmRpbmdCb3gpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFBhdGhQYXJzZXIuU01PT1RIX0NVUlZFX1RPOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhdGhTKGN0eCwgYm91bmRpbmdCb3gpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFBhdGhQYXJzZXIuUVVBRF9UTzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXRoUShjdHgsIGJvdW5kaW5nQm94KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBQYXRoUGFyc2VyLlNNT09USF9RVUFEX1RPOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhdGhUKGN0eCwgYm91bmRpbmdCb3gpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFBhdGhQYXJzZXIuQVJDOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhdGhBKGN0eCwgYm91bmRpbmdCb3gpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFBhdGhQYXJzZXIuQ0xPU0VfUEFUSDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXRoWihjdHgsIGJvdW5kaW5nQm94KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGJvdW5kaW5nQm94O1xuICAgIH1cbiAgICBnZXRCb3VuZGluZ0JveChfY3R4KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhdGgoKTtcbiAgICB9XG4gICAgZ2V0TWFya2VycygpIHtcbiAgICAgICAgY29uc3QgeyBwYXRoUGFyc2VyICB9ID0gdGhpcztcbiAgICAgICAgY29uc3QgcG9pbnRzID0gcGF0aFBhcnNlci5nZXRNYXJrZXJQb2ludHMoKTtcbiAgICAgICAgY29uc3QgYW5nbGVzID0gcGF0aFBhcnNlci5nZXRNYXJrZXJBbmdsZXMoKTtcbiAgICAgICAgY29uc3QgbWFya2VycyA9IHBvaW50cy5tYXAoKHBvaW50LCBpKT0+W1xuICAgICAgICAgICAgICAgIHBvaW50LFxuICAgICAgICAgICAgICAgIGFuZ2xlc1tpXVxuICAgICAgICAgICAgXVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gbWFya2VycztcbiAgICB9XG4gICAgcmVuZGVyQ2hpbGRyZW4oY3R4KSB7XG4gICAgICAgIHRoaXMucGF0aChjdHgpO1xuICAgICAgICB0aGlzLmRvY3VtZW50LnNjcmVlbi5tb3VzZS5jaGVja1BhdGgodGhpcywgY3R4KTtcbiAgICAgICAgY29uc3QgZmlsbFJ1bGVTdHlsZVByb3AgPSB0aGlzLmdldFN0eWxlKCdmaWxsLXJ1bGUnKTtcbiAgICAgICAgaWYgKGN0eC5maWxsU3R5bGUgIT09ICcnKSB7XG4gICAgICAgICAgICBpZiAoZmlsbFJ1bGVTdHlsZVByb3AuZ2V0U3RyaW5nKCdpbmhlcml0JykgIT09ICdpbmhlcml0Jykge1xuICAgICAgICAgICAgICAgIGN0eC5maWxsKGZpbGxSdWxlU3R5bGVQcm9wLmdldFN0cmluZygpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY3R4LmZpbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoY3R4LnN0cm9rZVN0eWxlICE9PSAnJykge1xuICAgICAgICAgICAgaWYgKHRoaXMuZ2V0QXR0cmlidXRlKCd2ZWN0b3ItZWZmZWN0JykuZ2V0U3RyaW5nKCkgPT09ICdub24tc2NhbGluZy1zdHJva2UnKSB7XG4gICAgICAgICAgICAgICAgY3R4LnNhdmUoKTtcbiAgICAgICAgICAgICAgICBjdHguc2V0VHJhbnNmb3JtKDEsIDAsIDAsIDEsIDAsIDApO1xuICAgICAgICAgICAgICAgIGN0eC5zdHJva2UoKTtcbiAgICAgICAgICAgICAgICBjdHgucmVzdG9yZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjdHguc3Ryb2tlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWFya2VycyA9IHRoaXMuZ2V0TWFya2VycygpO1xuICAgICAgICBpZiAobWFya2Vycykge1xuICAgICAgICAgICAgY29uc3QgbWFya2Vyc0xhc3RJbmRleCA9IG1hcmtlcnMubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIGNvbnN0IG1hcmtlclN0YXJ0U3R5bGVQcm9wID0gdGhpcy5nZXRTdHlsZSgnbWFya2VyLXN0YXJ0Jyk7XG4gICAgICAgICAgICBjb25zdCBtYXJrZXJNaWRTdHlsZVByb3AgPSB0aGlzLmdldFN0eWxlKCdtYXJrZXItbWlkJyk7XG4gICAgICAgICAgICBjb25zdCBtYXJrZXJFbmRTdHlsZVByb3AgPSB0aGlzLmdldFN0eWxlKCdtYXJrZXItZW5kJyk7XG4gICAgICAgICAgICBpZiAobWFya2VyU3RhcnRTdHlsZVByb3AuaXNVcmxEZWZpbml0aW9uKCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtYXJrZXIgPSBtYXJrZXJTdGFydFN0eWxlUHJvcC5nZXREZWZpbml0aW9uKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgW3BvaW50LCBhbmdsZV0gPSBtYXJrZXJzWzBdO1xuICAgICAgICAgICAgICAgIG1hcmtlci5yZW5kZXIoY3R4LCBwb2ludCwgYW5nbGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1hcmtlck1pZFN0eWxlUHJvcC5pc1VybERlZmluaXRpb24oKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hcmtlciA9IG1hcmtlck1pZFN0eWxlUHJvcC5nZXREZWZpbml0aW9uKCk7XG4gICAgICAgICAgICAgICAgZm9yKGxldCBpID0gMTsgaSA8IG1hcmtlcnNMYXN0SW5kZXg7IGkrKyl7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IFtwb2ludCwgYW5nbGVdID0gbWFya2Vyc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgbWFya2VyLnJlbmRlcihjdHgsIHBvaW50LCBhbmdsZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1hcmtlckVuZFN0eWxlUHJvcC5pc1VybERlZmluaXRpb24oKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hcmtlciA9IG1hcmtlckVuZFN0eWxlUHJvcC5nZXREZWZpbml0aW9uKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgW3BvaW50LCBhbmdsZV0gPSBtYXJrZXJzW21hcmtlcnNMYXN0SW5kZXhdO1xuICAgICAgICAgICAgICAgIG1hcmtlci5yZW5kZXIoY3R4LCBwb2ludCwgYW5nbGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBwYXRoTShwYXRoUGFyc2VyKSB7XG4gICAgICAgIGNvbnN0IHBvaW50ID0gcGF0aFBhcnNlci5nZXRBc0N1cnJlbnRQb2ludCgpO1xuICAgICAgICBwYXRoUGFyc2VyLnN0YXJ0ID0gcGF0aFBhcnNlci5jdXJyZW50O1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcG9pbnRcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcGF0aE0oY3R4LCBib3VuZGluZ0JveCkge1xuICAgICAgICBjb25zdCB7IHBhdGhQYXJzZXIgIH0gPSB0aGlzO1xuICAgICAgICBjb25zdCB7IHBvaW50ICB9ID0gUGF0aEVsZW1lbnQucGF0aE0ocGF0aFBhcnNlcik7XG4gICAgICAgIGNvbnN0IHsgeCAsIHkgIH0gPSBwb2ludDtcbiAgICAgICAgcGF0aFBhcnNlci5hZGRNYXJrZXIocG9pbnQpO1xuICAgICAgICBib3VuZGluZ0JveC5hZGRQb2ludCh4LCB5KTtcbiAgICAgICAgaWYgKGN0eCkge1xuICAgICAgICAgICAgY3R4Lm1vdmVUbyh4LCB5KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgcGF0aEwocGF0aFBhcnNlcikge1xuICAgICAgICBjb25zdCB7IGN1cnJlbnQgIH0gPSBwYXRoUGFyc2VyO1xuICAgICAgICBjb25zdCBwb2ludCA9IHBhdGhQYXJzZXIuZ2V0QXNDdXJyZW50UG9pbnQoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICBwb2ludFxuICAgICAgICB9O1xuICAgIH1cbiAgICBwYXRoTChjdHgsIGJvdW5kaW5nQm94KSB7XG4gICAgICAgIGNvbnN0IHsgcGF0aFBhcnNlciAgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IHsgY3VycmVudCAsIHBvaW50ICB9ID0gUGF0aEVsZW1lbnQucGF0aEwocGF0aFBhcnNlcik7XG4gICAgICAgIGNvbnN0IHsgeCAsIHkgIH0gPSBwb2ludDtcbiAgICAgICAgcGF0aFBhcnNlci5hZGRNYXJrZXIocG9pbnQsIGN1cnJlbnQpO1xuICAgICAgICBib3VuZGluZ0JveC5hZGRQb2ludCh4LCB5KTtcbiAgICAgICAgaWYgKGN0eCkge1xuICAgICAgICAgICAgY3R4LmxpbmVUbyh4LCB5KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgcGF0aEgocGF0aFBhcnNlcikge1xuICAgICAgICBjb25zdCB7IGN1cnJlbnQgLCBjb21tYW5kICB9ID0gcGF0aFBhcnNlcjtcbiAgICAgICAgY29uc3QgcG9pbnQgPSBuZXcgUG9pbnQoKGNvbW1hbmQucmVsYXRpdmUgPyBjdXJyZW50LnggOiAwKSArIGNvbW1hbmQueCwgY3VycmVudC55KTtcbiAgICAgICAgcGF0aFBhcnNlci5jdXJyZW50ID0gcG9pbnQ7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgcG9pbnRcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcGF0aEgoY3R4LCBib3VuZGluZ0JveCkge1xuICAgICAgICBjb25zdCB7IHBhdGhQYXJzZXIgIH0gPSB0aGlzO1xuICAgICAgICBjb25zdCB7IGN1cnJlbnQgLCBwb2ludCAgfSA9IFBhdGhFbGVtZW50LnBhdGhIKHBhdGhQYXJzZXIpO1xuICAgICAgICBjb25zdCB7IHggLCB5ICB9ID0gcG9pbnQ7XG4gICAgICAgIHBhdGhQYXJzZXIuYWRkTWFya2VyKHBvaW50LCBjdXJyZW50KTtcbiAgICAgICAgYm91bmRpbmdCb3guYWRkUG9pbnQoeCwgeSk7XG4gICAgICAgIGlmIChjdHgpIHtcbiAgICAgICAgICAgIGN0eC5saW5lVG8oeCwgeSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIHBhdGhWKHBhdGhQYXJzZXIpIHtcbiAgICAgICAgY29uc3QgeyBjdXJyZW50ICwgY29tbWFuZCAgfSA9IHBhdGhQYXJzZXI7XG4gICAgICAgIGNvbnN0IHBvaW50ID0gbmV3IFBvaW50KGN1cnJlbnQueCwgKGNvbW1hbmQucmVsYXRpdmUgPyBjdXJyZW50LnkgOiAwKSArIGNvbW1hbmQueSk7XG4gICAgICAgIHBhdGhQYXJzZXIuY3VycmVudCA9IHBvaW50O1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgIHBvaW50XG4gICAgICAgIH07XG4gICAgfVxuICAgIHBhdGhWKGN0eCwgYm91bmRpbmdCb3gpIHtcbiAgICAgICAgY29uc3QgeyBwYXRoUGFyc2VyICB9ID0gdGhpcztcbiAgICAgICAgY29uc3QgeyBjdXJyZW50ICwgcG9pbnQgIH0gPSBQYXRoRWxlbWVudC5wYXRoVihwYXRoUGFyc2VyKTtcbiAgICAgICAgY29uc3QgeyB4ICwgeSAgfSA9IHBvaW50O1xuICAgICAgICBwYXRoUGFyc2VyLmFkZE1hcmtlcihwb2ludCwgY3VycmVudCk7XG4gICAgICAgIGJvdW5kaW5nQm94LmFkZFBvaW50KHgsIHkpO1xuICAgICAgICBpZiAoY3R4KSB7XG4gICAgICAgICAgICBjdHgubGluZVRvKHgsIHkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBwYXRoQyhwYXRoUGFyc2VyKSB7XG4gICAgICAgIGNvbnN0IHsgY3VycmVudCAgfSA9IHBhdGhQYXJzZXI7XG4gICAgICAgIGNvbnN0IHBvaW50ID0gcGF0aFBhcnNlci5nZXRQb2ludCgneDEnLCAneTEnKTtcbiAgICAgICAgY29uc3QgY29udHJvbFBvaW50ID0gcGF0aFBhcnNlci5nZXRBc0NvbnRyb2xQb2ludCgneDInLCAneTInKTtcbiAgICAgICAgY29uc3QgY3VycmVudFBvaW50ID0gcGF0aFBhcnNlci5nZXRBc0N1cnJlbnRQb2ludCgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgIHBvaW50LFxuICAgICAgICAgICAgY29udHJvbFBvaW50LFxuICAgICAgICAgICAgY3VycmVudFBvaW50XG4gICAgICAgIH07XG4gICAgfVxuICAgIHBhdGhDKGN0eCwgYm91bmRpbmdCb3gpIHtcbiAgICAgICAgY29uc3QgeyBwYXRoUGFyc2VyICB9ID0gdGhpcztcbiAgICAgICAgY29uc3QgeyBjdXJyZW50ICwgcG9pbnQgLCBjb250cm9sUG9pbnQgLCBjdXJyZW50UG9pbnQgIH0gPSBQYXRoRWxlbWVudC5wYXRoQyhwYXRoUGFyc2VyKTtcbiAgICAgICAgcGF0aFBhcnNlci5hZGRNYXJrZXIoY3VycmVudFBvaW50LCBjb250cm9sUG9pbnQsIHBvaW50KTtcbiAgICAgICAgYm91bmRpbmdCb3guYWRkQmV6aWVyQ3VydmUoY3VycmVudC54LCBjdXJyZW50LnksIHBvaW50LngsIHBvaW50LnksIGNvbnRyb2xQb2ludC54LCBjb250cm9sUG9pbnQueSwgY3VycmVudFBvaW50LngsIGN1cnJlbnRQb2ludC55KTtcbiAgICAgICAgaWYgKGN0eCkge1xuICAgICAgICAgICAgY3R4LmJlemllckN1cnZlVG8ocG9pbnQueCwgcG9pbnQueSwgY29udHJvbFBvaW50LngsIGNvbnRyb2xQb2ludC55LCBjdXJyZW50UG9pbnQueCwgY3VycmVudFBvaW50LnkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBwYXRoUyhwYXRoUGFyc2VyKSB7XG4gICAgICAgIGNvbnN0IHsgY3VycmVudCAgfSA9IHBhdGhQYXJzZXI7XG4gICAgICAgIGNvbnN0IHBvaW50ID0gcGF0aFBhcnNlci5nZXRSZWZsZWN0ZWRDb250cm9sUG9pbnQoKTtcbiAgICAgICAgY29uc3QgY29udHJvbFBvaW50ID0gcGF0aFBhcnNlci5nZXRBc0NvbnRyb2xQb2ludCgneDInLCAneTInKTtcbiAgICAgICAgY29uc3QgY3VycmVudFBvaW50ID0gcGF0aFBhcnNlci5nZXRBc0N1cnJlbnRQb2ludCgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgIHBvaW50LFxuICAgICAgICAgICAgY29udHJvbFBvaW50LFxuICAgICAgICAgICAgY3VycmVudFBvaW50XG4gICAgICAgIH07XG4gICAgfVxuICAgIHBhdGhTKGN0eCwgYm91bmRpbmdCb3gpIHtcbiAgICAgICAgY29uc3QgeyBwYXRoUGFyc2VyICB9ID0gdGhpcztcbiAgICAgICAgY29uc3QgeyBjdXJyZW50ICwgcG9pbnQgLCBjb250cm9sUG9pbnQgLCBjdXJyZW50UG9pbnQgIH0gPSBQYXRoRWxlbWVudC5wYXRoUyhwYXRoUGFyc2VyKTtcbiAgICAgICAgcGF0aFBhcnNlci5hZGRNYXJrZXIoY3VycmVudFBvaW50LCBjb250cm9sUG9pbnQsIHBvaW50KTtcbiAgICAgICAgYm91bmRpbmdCb3guYWRkQmV6aWVyQ3VydmUoY3VycmVudC54LCBjdXJyZW50LnksIHBvaW50LngsIHBvaW50LnksIGNvbnRyb2xQb2ludC54LCBjb250cm9sUG9pbnQueSwgY3VycmVudFBvaW50LngsIGN1cnJlbnRQb2ludC55KTtcbiAgICAgICAgaWYgKGN0eCkge1xuICAgICAgICAgICAgY3R4LmJlemllckN1cnZlVG8ocG9pbnQueCwgcG9pbnQueSwgY29udHJvbFBvaW50LngsIGNvbnRyb2xQb2ludC55LCBjdXJyZW50UG9pbnQueCwgY3VycmVudFBvaW50LnkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBwYXRoUShwYXRoUGFyc2VyKSB7XG4gICAgICAgIGNvbnN0IHsgY3VycmVudCAgfSA9IHBhdGhQYXJzZXI7XG4gICAgICAgIGNvbnN0IGNvbnRyb2xQb2ludCA9IHBhdGhQYXJzZXIuZ2V0QXNDb250cm9sUG9pbnQoJ3gxJywgJ3kxJyk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRQb2ludCA9IHBhdGhQYXJzZXIuZ2V0QXNDdXJyZW50UG9pbnQoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICBjb250cm9sUG9pbnQsXG4gICAgICAgICAgICBjdXJyZW50UG9pbnRcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcGF0aFEoY3R4LCBib3VuZGluZ0JveCkge1xuICAgICAgICBjb25zdCB7IHBhdGhQYXJzZXIgIH0gPSB0aGlzO1xuICAgICAgICBjb25zdCB7IGN1cnJlbnQgLCBjb250cm9sUG9pbnQgLCBjdXJyZW50UG9pbnQgIH0gPSBQYXRoRWxlbWVudC5wYXRoUShwYXRoUGFyc2VyKTtcbiAgICAgICAgcGF0aFBhcnNlci5hZGRNYXJrZXIoY3VycmVudFBvaW50LCBjb250cm9sUG9pbnQsIGNvbnRyb2xQb2ludCk7XG4gICAgICAgIGJvdW5kaW5nQm94LmFkZFF1YWRyYXRpY0N1cnZlKGN1cnJlbnQueCwgY3VycmVudC55LCBjb250cm9sUG9pbnQueCwgY29udHJvbFBvaW50LnksIGN1cnJlbnRQb2ludC54LCBjdXJyZW50UG9pbnQueSk7XG4gICAgICAgIGlmIChjdHgpIHtcbiAgICAgICAgICAgIGN0eC5xdWFkcmF0aWNDdXJ2ZVRvKGNvbnRyb2xQb2ludC54LCBjb250cm9sUG9pbnQueSwgY3VycmVudFBvaW50LngsIGN1cnJlbnRQb2ludC55KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgcGF0aFQocGF0aFBhcnNlcikge1xuICAgICAgICBjb25zdCB7IGN1cnJlbnQgIH0gPSBwYXRoUGFyc2VyO1xuICAgICAgICBjb25zdCBjb250cm9sUG9pbnQgPSBwYXRoUGFyc2VyLmdldFJlZmxlY3RlZENvbnRyb2xQb2ludCgpO1xuICAgICAgICBwYXRoUGFyc2VyLmNvbnRyb2wgPSBjb250cm9sUG9pbnQ7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRQb2ludCA9IHBhdGhQYXJzZXIuZ2V0QXNDdXJyZW50UG9pbnQoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICBjb250cm9sUG9pbnQsXG4gICAgICAgICAgICBjdXJyZW50UG9pbnRcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcGF0aFQoY3R4LCBib3VuZGluZ0JveCkge1xuICAgICAgICBjb25zdCB7IHBhdGhQYXJzZXIgIH0gPSB0aGlzO1xuICAgICAgICBjb25zdCB7IGN1cnJlbnQgLCBjb250cm9sUG9pbnQgLCBjdXJyZW50UG9pbnQgIH0gPSBQYXRoRWxlbWVudC5wYXRoVChwYXRoUGFyc2VyKTtcbiAgICAgICAgcGF0aFBhcnNlci5hZGRNYXJrZXIoY3VycmVudFBvaW50LCBjb250cm9sUG9pbnQsIGNvbnRyb2xQb2ludCk7XG4gICAgICAgIGJvdW5kaW5nQm94LmFkZFF1YWRyYXRpY0N1cnZlKGN1cnJlbnQueCwgY3VycmVudC55LCBjb250cm9sUG9pbnQueCwgY29udHJvbFBvaW50LnksIGN1cnJlbnRQb2ludC54LCBjdXJyZW50UG9pbnQueSk7XG4gICAgICAgIGlmIChjdHgpIHtcbiAgICAgICAgICAgIGN0eC5xdWFkcmF0aWNDdXJ2ZVRvKGNvbnRyb2xQb2ludC54LCBjb250cm9sUG9pbnQueSwgY3VycmVudFBvaW50LngsIGN1cnJlbnRQb2ludC55KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgcGF0aEEocGF0aFBhcnNlcikge1xuICAgICAgICBjb25zdCB7IGN1cnJlbnQgLCBjb21tYW5kICB9ID0gcGF0aFBhcnNlcjtcbiAgICAgICAgbGV0IHsgclggLCByWSAsIHhSb3QgLCBsQXJjRmxhZyAsIHN3ZWVwRmxhZyAgfSA9IGNvbW1hbmQ7XG4gICAgICAgIGNvbnN0IHhBeGlzUm90YXRpb24gPSB4Um90ICogKE1hdGguUEkgLyAxODApO1xuICAgICAgICBjb25zdCBjdXJyZW50UG9pbnQgPSBwYXRoUGFyc2VyLmdldEFzQ3VycmVudFBvaW50KCk7XG4gICAgICAgIC8vIENvbnZlcnNpb24gZnJvbSBlbmRwb2ludCB0byBjZW50ZXIgcGFyYW1ldGVyaXphdGlvblxuICAgICAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcxMS9pbXBsbm90ZS5odG1sI0FyY0ltcGxlbWVudGF0aW9uTm90ZXNcbiAgICAgICAgLy8geDEnLCB5MSdcbiAgICAgICAgY29uc3QgY3VycnAgPSBuZXcgUG9pbnQoTWF0aC5jb3MoeEF4aXNSb3RhdGlvbikgKiAoY3VycmVudC54IC0gY3VycmVudFBvaW50LngpIC8gMiArIE1hdGguc2luKHhBeGlzUm90YXRpb24pICogKGN1cnJlbnQueSAtIGN1cnJlbnRQb2ludC55KSAvIDIsIC1NYXRoLnNpbih4QXhpc1JvdGF0aW9uKSAqIChjdXJyZW50LnggLSBjdXJyZW50UG9pbnQueCkgLyAyICsgTWF0aC5jb3MoeEF4aXNSb3RhdGlvbikgKiAoY3VycmVudC55IC0gY3VycmVudFBvaW50LnkpIC8gMik7XG4gICAgICAgIC8vIGFkanVzdCByYWRpaVxuICAgICAgICBjb25zdCBsID0gTWF0aC5wb3coY3VycnAueCwgMikgLyBNYXRoLnBvdyhyWCwgMikgKyBNYXRoLnBvdyhjdXJycC55LCAyKSAvIE1hdGgucG93KHJZLCAyKTtcbiAgICAgICAgaWYgKGwgPiAxKSB7XG4gICAgICAgICAgICByWCAqPSBNYXRoLnNxcnQobCk7XG4gICAgICAgICAgICByWSAqPSBNYXRoLnNxcnQobCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY3gnLCBjeSdcbiAgICAgICAgbGV0IHMgPSAobEFyY0ZsYWcgPT09IHN3ZWVwRmxhZyA/IC0xIDogMSkgKiBNYXRoLnNxcnQoKE1hdGgucG93KHJYLCAyKSAqIE1hdGgucG93KHJZLCAyKSAtIE1hdGgucG93KHJYLCAyKSAqIE1hdGgucG93KGN1cnJwLnksIDIpIC0gTWF0aC5wb3coclksIDIpICogTWF0aC5wb3coY3VycnAueCwgMikpIC8gKE1hdGgucG93KHJYLCAyKSAqIE1hdGgucG93KGN1cnJwLnksIDIpICsgTWF0aC5wb3coclksIDIpICogTWF0aC5wb3coY3VycnAueCwgMikpKTtcbiAgICAgICAgaWYgKGlzTmFOKHMpKSB7XG4gICAgICAgICAgICBzID0gMDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjcHAgPSBuZXcgUG9pbnQocyAqIHJYICogY3VycnAueSAvIHJZLCBzICogLXJZICogY3VycnAueCAvIHJYKTtcbiAgICAgICAgLy8gY3gsIGN5XG4gICAgICAgIGNvbnN0IGNlbnRwID0gbmV3IFBvaW50KChjdXJyZW50LnggKyBjdXJyZW50UG9pbnQueCkgLyAyICsgTWF0aC5jb3MoeEF4aXNSb3RhdGlvbikgKiBjcHAueCAtIE1hdGguc2luKHhBeGlzUm90YXRpb24pICogY3BwLnksIChjdXJyZW50LnkgKyBjdXJyZW50UG9pbnQueSkgLyAyICsgTWF0aC5zaW4oeEF4aXNSb3RhdGlvbikgKiBjcHAueCArIE1hdGguY29zKHhBeGlzUm90YXRpb24pICogY3BwLnkpO1xuICAgICAgICAvLyBpbml0aWFsIGFuZ2xlXG4gICAgICAgIGNvbnN0IGExID0gdmVjdG9yc0FuZ2xlKFtcbiAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAwXG4gICAgICAgIF0sIFtcbiAgICAgICAgICAgIChjdXJycC54IC0gY3BwLngpIC8gclgsXG4gICAgICAgICAgICAoY3VycnAueSAtIGNwcC55KSAvIHJZXG4gICAgICAgIF0pIC8vIM64MVxuICAgICAgICA7XG4gICAgICAgIC8vIGFuZ2xlIGRlbHRhXG4gICAgICAgIGNvbnN0IHUgPSBbXG4gICAgICAgICAgICAoY3VycnAueCAtIGNwcC54KSAvIHJYLFxuICAgICAgICAgICAgKGN1cnJwLnkgLSBjcHAueSkgLyByWVxuICAgICAgICBdO1xuICAgICAgICBjb25zdCB2ID0gW1xuICAgICAgICAgICAgKC1jdXJycC54IC0gY3BwLngpIC8gclgsXG4gICAgICAgICAgICAoLWN1cnJwLnkgLSBjcHAueSkgLyByWVxuICAgICAgICBdO1xuICAgICAgICBsZXQgYWQgPSB2ZWN0b3JzQW5nbGUodSwgdikgLy8gzpTOuFxuICAgICAgICA7XG4gICAgICAgIGlmICh2ZWN0b3JzUmF0aW8odSwgdikgPD0gLTEpIHtcbiAgICAgICAgICAgIGFkID0gTWF0aC5QSTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmVjdG9yc1JhdGlvKHUsIHYpID49IDEpIHtcbiAgICAgICAgICAgIGFkID0gMDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY3VycmVudFBvaW50LFxuICAgICAgICAgICAgclgsXG4gICAgICAgICAgICByWSxcbiAgICAgICAgICAgIHN3ZWVwRmxhZyxcbiAgICAgICAgICAgIHhBeGlzUm90YXRpb24sXG4gICAgICAgICAgICBjZW50cCxcbiAgICAgICAgICAgIGExLFxuICAgICAgICAgICAgYWRcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcGF0aEEoY3R4LCBib3VuZGluZ0JveCkge1xuICAgICAgICBjb25zdCB7IHBhdGhQYXJzZXIgIH0gPSB0aGlzO1xuICAgICAgICBjb25zdCB7IGN1cnJlbnRQb2ludCAsIHJYICwgclkgLCBzd2VlcEZsYWcgLCB4QXhpc1JvdGF0aW9uICwgY2VudHAgLCBhMSAsIGFkICB9ID0gUGF0aEVsZW1lbnQucGF0aEEocGF0aFBhcnNlcik7XG4gICAgICAgIC8vIGZvciBtYXJrZXJzXG4gICAgICAgIGNvbnN0IGRpciA9IDEgLSBzd2VlcEZsYWcgPyAxIDogLTE7XG4gICAgICAgIGNvbnN0IGFoID0gYTEgKyBkaXIgKiAoYWQgLyAyKTtcbiAgICAgICAgY29uc3QgaGFsZldheSA9IG5ldyBQb2ludChjZW50cC54ICsgclggKiBNYXRoLmNvcyhhaCksIGNlbnRwLnkgKyByWSAqIE1hdGguc2luKGFoKSk7XG4gICAgICAgIHBhdGhQYXJzZXIuYWRkTWFya2VyQW5nbGUoaGFsZldheSwgYWggLSBkaXIgKiBNYXRoLlBJIC8gMik7XG4gICAgICAgIHBhdGhQYXJzZXIuYWRkTWFya2VyQW5nbGUoY3VycmVudFBvaW50LCBhaCAtIGRpciAqIE1hdGguUEkpO1xuICAgICAgICBib3VuZGluZ0JveC5hZGRQb2ludChjdXJyZW50UG9pbnQueCwgY3VycmVudFBvaW50LnkpIC8vIFRPRE86IHRoaXMgaXMgdG9vIG5haXZlLCBtYWtlIGl0IGJldHRlclxuICAgICAgICA7XG4gICAgICAgIGlmIChjdHggJiYgIWlzTmFOKGExKSAmJiAhaXNOYU4oYWQpKSB7XG4gICAgICAgICAgICBjb25zdCByID0gclggPiByWSA/IHJYIDogclk7XG4gICAgICAgICAgICBjb25zdCBzeCA9IHJYID4gclkgPyAxIDogclggLyByWTtcbiAgICAgICAgICAgIGNvbnN0IHN5ID0gclggPiByWSA/IHJZIC8gclggOiAxO1xuICAgICAgICAgICAgY3R4LnRyYW5zbGF0ZShjZW50cC54LCBjZW50cC55KTtcbiAgICAgICAgICAgIGN0eC5yb3RhdGUoeEF4aXNSb3RhdGlvbik7XG4gICAgICAgICAgICBjdHguc2NhbGUoc3gsIHN5KTtcbiAgICAgICAgICAgIGN0eC5hcmMoMCwgMCwgciwgYTEsIGExICsgYWQsIEJvb2xlYW4oMSAtIHN3ZWVwRmxhZykpO1xuICAgICAgICAgICAgY3R4LnNjYWxlKDEgLyBzeCwgMSAvIHN5KTtcbiAgICAgICAgICAgIGN0eC5yb3RhdGUoLXhBeGlzUm90YXRpb24pO1xuICAgICAgICAgICAgY3R4LnRyYW5zbGF0ZSgtY2VudHAueCwgLWNlbnRwLnkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBwYXRoWihwYXRoUGFyc2VyKSB7XG4gICAgICAgIHBhdGhQYXJzZXIuY3VycmVudCA9IHBhdGhQYXJzZXIuc3RhcnQ7XG4gICAgfVxuICAgIHBhdGhaKGN0eCwgYm91bmRpbmdCb3gpIHtcbiAgICAgICAgUGF0aEVsZW1lbnQucGF0aFoodGhpcy5wYXRoUGFyc2VyKTtcbiAgICAgICAgaWYgKGN0eCkge1xuICAgICAgICAgICAgLy8gb25seSBjbG9zZSBwYXRoIGlmIGl0IGlzIG5vdCBhIHN0cmFpZ2h0IGxpbmVcbiAgICAgICAgICAgIGlmIChib3VuZGluZ0JveC54MSAhPT0gYm91bmRpbmdCb3gueDIgJiYgYm91bmRpbmdCb3gueTEgIT09IGJvdW5kaW5nQm94LnkyKSB7XG4gICAgICAgICAgICAgICAgY3R4LmNsb3NlUGF0aCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKGRvY3VtZW50LCBub2RlLCBjYXB0dXJlVGV4dE5vZGVzKXtcbiAgICAgICAgc3VwZXIoZG9jdW1lbnQsIG5vZGUsIGNhcHR1cmVUZXh0Tm9kZXMpO1xuICAgICAgICB0aGlzLnR5cGUgPSAncGF0aCc7XG4gICAgICAgIHRoaXMucGF0aFBhcnNlciA9IG5ldyBQYXRoUGFyc2VyKHRoaXMuZ2V0QXR0cmlidXRlKCdkJykuZ2V0U3RyaW5nKCkpO1xuICAgIH1cbn1cblxuY2xhc3MgU1ZHRWxlbWVudCBleHRlbmRzIFJlbmRlcmVkRWxlbWVudCB7XG4gICAgc2V0Q29udGV4dChjdHgpIHtcbiAgICAgICAgdmFyIHJlZjtcbiAgICAgICAgY29uc3QgeyBkb2N1bWVudCAgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IHsgc2NyZWVuICwgd2luZG93ICB9ID0gZG9jdW1lbnQ7XG4gICAgICAgIGNvbnN0IGNhbnZhcyA9IGN0eC5jYW52YXM7XG4gICAgICAgIHNjcmVlbi5zZXREZWZhdWx0cyhjdHgpO1xuICAgICAgICBpZiAoJ3N0eWxlJyBpbiBjYW52YXMgJiYgdHlwZW9mIGN0eC5mb250ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cgJiYgdHlwZW9mIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY3R4LmZvbnQgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShjYW52YXMpLmdldFByb3BlcnR5VmFsdWUoJ2ZvbnQnKTtcbiAgICAgICAgICAgIGNvbnN0IGZvbnRTaXplUHJvcCA9IG5ldyBQcm9wZXJ0eShkb2N1bWVudCwgJ2ZvbnRTaXplJywgRm9udC5wYXJzZShjdHguZm9udCkuZm9udFNpemUpO1xuICAgICAgICAgICAgaWYgKGZvbnRTaXplUHJvcC5oYXNWYWx1ZSgpKSB7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQucm9vdEVtU2l6ZSA9IGZvbnRTaXplUHJvcC5nZXRQaXhlbHMoJ3knKTtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5lbVNpemUgPSBkb2N1bWVudC5yb290RW1TaXplO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGNyZWF0ZSBuZXcgdmlldyBwb3J0XG4gICAgICAgIGlmICghdGhpcy5nZXRBdHRyaWJ1dGUoJ3gnKS5oYXNWYWx1ZSgpKSB7XG4gICAgICAgICAgICB0aGlzLmdldEF0dHJpYnV0ZSgneCcsIHRydWUpLnNldFZhbHVlKDApO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5nZXRBdHRyaWJ1dGUoJ3knKS5oYXNWYWx1ZSgpKSB7XG4gICAgICAgICAgICB0aGlzLmdldEF0dHJpYnV0ZSgneScsIHRydWUpLnNldFZhbHVlKDApO1xuICAgICAgICB9XG4gICAgICAgIGxldCB7IHdpZHRoICwgaGVpZ2h0ICB9ID0gc2NyZWVuLnZpZXdQb3J0O1xuICAgICAgICBpZiAoIXRoaXMuZ2V0U3R5bGUoJ3dpZHRoJykuaGFzVmFsdWUoKSkge1xuICAgICAgICAgICAgdGhpcy5nZXRTdHlsZSgnd2lkdGgnLCB0cnVlKS5zZXRWYWx1ZSgnMTAwJScpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5nZXRTdHlsZSgnaGVpZ2h0JykuaGFzVmFsdWUoKSkge1xuICAgICAgICAgICAgdGhpcy5nZXRTdHlsZSgnaGVpZ2h0JywgdHJ1ZSkuc2V0VmFsdWUoJzEwMCUnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuZ2V0U3R5bGUoJ2NvbG9yJykuaGFzVmFsdWUoKSkge1xuICAgICAgICAgICAgdGhpcy5nZXRTdHlsZSgnY29sb3InLCB0cnVlKS5zZXRWYWx1ZSgnYmxhY2snKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZWZYQXR0ciA9IHRoaXMuZ2V0QXR0cmlidXRlKCdyZWZYJyk7XG4gICAgICAgIGNvbnN0IHJlZllBdHRyID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ3JlZlknKTtcbiAgICAgICAgY29uc3Qgdmlld0JveEF0dHIgPSB0aGlzLmdldEF0dHJpYnV0ZSgndmlld0JveCcpO1xuICAgICAgICBjb25zdCB2aWV3Qm94ID0gdmlld0JveEF0dHIuaGFzVmFsdWUoKSA/IHRvTnVtYmVycyh2aWV3Qm94QXR0ci5nZXRTdHJpbmcoKSkgOiBudWxsO1xuICAgICAgICBjb25zdCBjbGlwID0gIXRoaXMucm9vdCAmJiB0aGlzLmdldFN0eWxlKCdvdmVyZmxvdycpLmdldFZhbHVlKCdoaWRkZW4nKSAhPT0gJ3Zpc2libGUnO1xuICAgICAgICBsZXQgbWluWCA9IDA7XG4gICAgICAgIGxldCBtaW5ZID0gMDtcbiAgICAgICAgbGV0IGNsaXBYID0gMDtcbiAgICAgICAgbGV0IGNsaXBZID0gMDtcbiAgICAgICAgaWYgKHZpZXdCb3gpIHtcbiAgICAgICAgICAgIG1pblggPSB2aWV3Qm94WzBdO1xuICAgICAgICAgICAgbWluWSA9IHZpZXdCb3hbMV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLnJvb3QpIHtcbiAgICAgICAgICAgIHdpZHRoID0gdGhpcy5nZXRTdHlsZSgnd2lkdGgnKS5nZXRQaXhlbHMoJ3gnKTtcbiAgICAgICAgICAgIGhlaWdodCA9IHRoaXMuZ2V0U3R5bGUoJ2hlaWdodCcpLmdldFBpeGVscygneScpO1xuICAgICAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ21hcmtlcicpIHtcbiAgICAgICAgICAgICAgICBjbGlwWCA9IG1pblg7XG4gICAgICAgICAgICAgICAgY2xpcFkgPSBtaW5ZO1xuICAgICAgICAgICAgICAgIG1pblggPSAwO1xuICAgICAgICAgICAgICAgIG1pblkgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHNjcmVlbi52aWV3UG9ydC5zZXRDdXJyZW50KHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICAvLyBEZWZhdWx0IHZhbHVlIG9mIHRyYW5zZm9ybS1vcmlnaW4gaXMgY2VudGVyIG9ubHkgZm9yIHJvb3QgU1ZHIGVsZW1lbnRzXG4gICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL1NWRy9BdHRyaWJ1dGUvdHJhbnNmb3JtLW9yaWdpblxuICAgICAgICBpZiAodGhpcy5ub2RlIC8vIGlzIG5vdCB0ZW1wb3JhcnkgU1ZHRWxlbWVudFxuICAgICAgICAgJiYgKCF0aGlzLnBhcmVudCB8fCAoKHJlZiA9IHRoaXMubm9kZS5wYXJlbnROb2RlKSA9PT0gbnVsbCB8fCByZWYgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlZi5ub2RlTmFtZSkgPT09ICdmb3JlaWduT2JqZWN0JykgJiYgdGhpcy5nZXRTdHlsZSgndHJhbnNmb3JtJywgZmFsc2UsIHRydWUpLmhhc1ZhbHVlKCkgJiYgIXRoaXMuZ2V0U3R5bGUoJ3RyYW5zZm9ybS1vcmlnaW4nLCBmYWxzZSwgdHJ1ZSkuaGFzVmFsdWUoKSkge1xuICAgICAgICAgICAgdGhpcy5nZXRTdHlsZSgndHJhbnNmb3JtLW9yaWdpbicsIHRydWUsIHRydWUpLnNldFZhbHVlKCc1MCUgNTAlJyk7XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIuc2V0Q29udGV4dChjdHgpO1xuICAgICAgICBjdHgudHJhbnNsYXRlKHRoaXMuZ2V0QXR0cmlidXRlKCd4JykuZ2V0UGl4ZWxzKCd4JyksIHRoaXMuZ2V0QXR0cmlidXRlKCd5JykuZ2V0UGl4ZWxzKCd5JykpO1xuICAgICAgICBpZiAodmlld0JveCkge1xuICAgICAgICAgICAgd2lkdGggPSB2aWV3Qm94WzJdO1xuICAgICAgICAgICAgaGVpZ2h0ID0gdmlld0JveFszXTtcbiAgICAgICAgfVxuICAgICAgICBkb2N1bWVudC5zZXRWaWV3Qm94KHtcbiAgICAgICAgICAgIGN0eCxcbiAgICAgICAgICAgIGFzcGVjdFJhdGlvOiB0aGlzLmdldEF0dHJpYnV0ZSgncHJlc2VydmVBc3BlY3RSYXRpbycpLmdldFN0cmluZygpLFxuICAgICAgICAgICAgd2lkdGg6IHNjcmVlbi52aWV3UG9ydC53aWR0aCxcbiAgICAgICAgICAgIGRlc2lyZWRXaWR0aDogd2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ6IHNjcmVlbi52aWV3UG9ydC5oZWlnaHQsXG4gICAgICAgICAgICBkZXNpcmVkSGVpZ2h0OiBoZWlnaHQsXG4gICAgICAgICAgICBtaW5YLFxuICAgICAgICAgICAgbWluWSxcbiAgICAgICAgICAgIHJlZlg6IHJlZlhBdHRyLmdldFZhbHVlKCksXG4gICAgICAgICAgICByZWZZOiByZWZZQXR0ci5nZXRWYWx1ZSgpLFxuICAgICAgICAgICAgY2xpcCxcbiAgICAgICAgICAgIGNsaXBYLFxuICAgICAgICAgICAgY2xpcFlcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh2aWV3Qm94KSB7XG4gICAgICAgICAgICBzY3JlZW4udmlld1BvcnQucmVtb3ZlQ3VycmVudCgpO1xuICAgICAgICAgICAgc2NyZWVuLnZpZXdQb3J0LnNldEN1cnJlbnQod2lkdGgsIGhlaWdodCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2xlYXJDb250ZXh0KGN0eCkge1xuICAgICAgICBzdXBlci5jbGVhckNvbnRleHQoY3R4KTtcbiAgICAgICAgdGhpcy5kb2N1bWVudC5zY3JlZW4udmlld1BvcnQucmVtb3ZlQ3VycmVudCgpO1xuICAgIH1cbiAgICAvKipcbiAgICogUmVzaXplIFNWRyB0byBmaXQgaW4gZ2l2ZW4gc2l6ZS5cbiAgICogQHBhcmFtIHdpZHRoXG4gICAqIEBwYXJhbSBoZWlnaHRcbiAgICogQHBhcmFtIHByZXNlcnZlQXNwZWN0UmF0aW9cbiAgICovIHJlc2l6ZSh3aWR0aCkge1xuICAgICAgICBsZXQgaGVpZ2h0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMV0gOiB3aWR0aCwgcHJlc2VydmVBc3BlY3RSYXRpbyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzJdIDogZmFsc2U7XG4gICAgICAgIGNvbnN0IHdpZHRoQXR0ciA9IHRoaXMuZ2V0QXR0cmlidXRlKCd3aWR0aCcsIHRydWUpO1xuICAgICAgICBjb25zdCBoZWlnaHRBdHRyID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ2hlaWdodCcsIHRydWUpO1xuICAgICAgICBjb25zdCB2aWV3Qm94QXR0ciA9IHRoaXMuZ2V0QXR0cmlidXRlKCd2aWV3Qm94Jyk7XG4gICAgICAgIGNvbnN0IHN0eWxlQXR0ciA9IHRoaXMuZ2V0QXR0cmlidXRlKCdzdHlsZScpO1xuICAgICAgICBjb25zdCBvcmlnaW5XaWR0aCA9IHdpZHRoQXR0ci5nZXROdW1iZXIoMCk7XG4gICAgICAgIGNvbnN0IG9yaWdpbkhlaWdodCA9IGhlaWdodEF0dHIuZ2V0TnVtYmVyKDApO1xuICAgICAgICBpZiAocHJlc2VydmVBc3BlY3RSYXRpbykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBwcmVzZXJ2ZUFzcGVjdFJhdGlvID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0QXR0cmlidXRlKCdwcmVzZXJ2ZUFzcGVjdFJhdGlvJywgdHJ1ZSkuc2V0VmFsdWUocHJlc2VydmVBc3BlY3RSYXRpbyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHByZXNlcnZlQXNwZWN0UmF0aW9BdHRyID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ3ByZXNlcnZlQXNwZWN0UmF0aW8nKTtcbiAgICAgICAgICAgICAgICBpZiAocHJlc2VydmVBc3BlY3RSYXRpb0F0dHIuaGFzVmFsdWUoKSkge1xuICAgICAgICAgICAgICAgICAgICBwcmVzZXJ2ZUFzcGVjdFJhdGlvQXR0ci5zZXRWYWx1ZShwcmVzZXJ2ZUFzcGVjdFJhdGlvQXR0ci5nZXRTdHJpbmcoKS5yZXBsYWNlKC9eXFxzKihcXFMuKlxcUylcXHMqJC8sICckMScpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgd2lkdGhBdHRyLnNldFZhbHVlKHdpZHRoKTtcbiAgICAgICAgaGVpZ2h0QXR0ci5zZXRWYWx1ZShoZWlnaHQpO1xuICAgICAgICBpZiAoIXZpZXdCb3hBdHRyLmhhc1ZhbHVlKCkpIHtcbiAgICAgICAgICAgIHZpZXdCb3hBdHRyLnNldFZhbHVlKFwiMCAwIFwiLmNvbmNhdChvcmlnaW5XaWR0aCB8fCB3aWR0aCwgXCIgXCIpLmNvbmNhdChvcmlnaW5IZWlnaHQgfHwgaGVpZ2h0KSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0eWxlQXR0ci5oYXNWYWx1ZSgpKSB7XG4gICAgICAgICAgICBjb25zdCB3aWR0aFN0eWxlID0gdGhpcy5nZXRTdHlsZSgnd2lkdGgnKTtcbiAgICAgICAgICAgIGNvbnN0IGhlaWdodFN0eWxlID0gdGhpcy5nZXRTdHlsZSgnaGVpZ2h0Jyk7XG4gICAgICAgICAgICBpZiAod2lkdGhTdHlsZS5oYXNWYWx1ZSgpKSB7XG4gICAgICAgICAgICAgICAgd2lkdGhTdHlsZS5zZXRWYWx1ZShcIlwiLmNvbmNhdCh3aWR0aCwgXCJweFwiKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaGVpZ2h0U3R5bGUuaGFzVmFsdWUoKSkge1xuICAgICAgICAgICAgICAgIGhlaWdodFN0eWxlLnNldFZhbHVlKFwiXCIuY29uY2F0KGhlaWdodCwgXCJweFwiKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3RydWN0b3IoLi4uYXJncyl7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3MpO1xuICAgICAgICB0aGlzLnR5cGUgPSAnc3ZnJztcbiAgICAgICAgdGhpcy5yb290ID0gZmFsc2U7XG4gICAgfVxufVxuXG5jbGFzcyBSZWN0RWxlbWVudCBleHRlbmRzIFBhdGhFbGVtZW50IHtcbiAgICBwYXRoKGN0eCkge1xuICAgICAgICBjb25zdCB4ID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ3gnKS5nZXRQaXhlbHMoJ3gnKTtcbiAgICAgICAgY29uc3QgeSA9IHRoaXMuZ2V0QXR0cmlidXRlKCd5JykuZ2V0UGl4ZWxzKCd5Jyk7XG4gICAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy5nZXRTdHlsZSgnd2lkdGgnLCBmYWxzZSwgdHJ1ZSkuZ2V0UGl4ZWxzKCd4Jyk7XG4gICAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMuZ2V0U3R5bGUoJ2hlaWdodCcsIGZhbHNlLCB0cnVlKS5nZXRQaXhlbHMoJ3knKTtcbiAgICAgICAgY29uc3QgcnhBdHRyID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ3J4Jyk7XG4gICAgICAgIGNvbnN0IHJ5QXR0ciA9IHRoaXMuZ2V0QXR0cmlidXRlKCdyeScpO1xuICAgICAgICBsZXQgcnggPSByeEF0dHIuZ2V0UGl4ZWxzKCd4Jyk7XG4gICAgICAgIGxldCByeSA9IHJ5QXR0ci5nZXRQaXhlbHMoJ3knKTtcbiAgICAgICAgaWYgKHJ4QXR0ci5oYXNWYWx1ZSgpICYmICFyeUF0dHIuaGFzVmFsdWUoKSkge1xuICAgICAgICAgICAgcnkgPSByeDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocnlBdHRyLmhhc1ZhbHVlKCkgJiYgIXJ4QXR0ci5oYXNWYWx1ZSgpKSB7XG4gICAgICAgICAgICByeCA9IHJ5O1xuICAgICAgICB9XG4gICAgICAgIHJ4ID0gTWF0aC5taW4ocngsIHdpZHRoIC8gMik7XG4gICAgICAgIHJ5ID0gTWF0aC5taW4ocnksIGhlaWdodCAvIDIpO1xuICAgICAgICBpZiAoY3R4KSB7XG4gICAgICAgICAgICBjb25zdCBLQVBQQSA9IDQgKiAoKE1hdGguc3FydCgyKSAtIDEpIC8gMyk7XG4gICAgICAgICAgICBjdHguYmVnaW5QYXRoKCkgLy8gYWx3YXlzIHN0YXJ0IHRoZSBwYXRoIHNvIHdlIGRvbid0IGZpbGwgcHJpb3IgcGF0aHNcbiAgICAgICAgICAgIDtcbiAgICAgICAgICAgIGlmIChoZWlnaHQgPiAwICYmIHdpZHRoID4gMCkge1xuICAgICAgICAgICAgICAgIGN0eC5tb3ZlVG8oeCArIHJ4LCB5KTtcbiAgICAgICAgICAgICAgICBjdHgubGluZVRvKHggKyB3aWR0aCAtIHJ4LCB5KTtcbiAgICAgICAgICAgICAgICBjdHguYmV6aWVyQ3VydmVUbyh4ICsgd2lkdGggLSByeCArIEtBUFBBICogcngsIHksIHggKyB3aWR0aCwgeSArIHJ5IC0gS0FQUEEgKiByeSwgeCArIHdpZHRoLCB5ICsgcnkpO1xuICAgICAgICAgICAgICAgIGN0eC5saW5lVG8oeCArIHdpZHRoLCB5ICsgaGVpZ2h0IC0gcnkpO1xuICAgICAgICAgICAgICAgIGN0eC5iZXppZXJDdXJ2ZVRvKHggKyB3aWR0aCwgeSArIGhlaWdodCAtIHJ5ICsgS0FQUEEgKiByeSwgeCArIHdpZHRoIC0gcnggKyBLQVBQQSAqIHJ4LCB5ICsgaGVpZ2h0LCB4ICsgd2lkdGggLSByeCwgeSArIGhlaWdodCk7XG4gICAgICAgICAgICAgICAgY3R4LmxpbmVUbyh4ICsgcngsIHkgKyBoZWlnaHQpO1xuICAgICAgICAgICAgICAgIGN0eC5iZXppZXJDdXJ2ZVRvKHggKyByeCAtIEtBUFBBICogcngsIHkgKyBoZWlnaHQsIHgsIHkgKyBoZWlnaHQgLSByeSArIEtBUFBBICogcnksIHgsIHkgKyBoZWlnaHQgLSByeSk7XG4gICAgICAgICAgICAgICAgY3R4LmxpbmVUbyh4LCB5ICsgcnkpO1xuICAgICAgICAgICAgICAgIGN0eC5iZXppZXJDdXJ2ZVRvKHgsIHkgKyByeSAtIEtBUFBBICogcnksIHggKyByeCAtIEtBUFBBICogcngsIHksIHggKyByeCwgeSk7XG4gICAgICAgICAgICAgICAgY3R4LmNsb3NlUGF0aCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgQm91bmRpbmdCb3goeCwgeSwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0KTtcbiAgICB9XG4gICAgZ2V0TWFya2VycygpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKC4uLmFyZ3Mpe1xuICAgICAgICBzdXBlciguLi5hcmdzKTtcbiAgICAgICAgdGhpcy50eXBlID0gJ3JlY3QnO1xuICAgIH1cbn1cblxuY2xhc3MgQ2lyY2xlRWxlbWVudCBleHRlbmRzIFBhdGhFbGVtZW50IHtcbiAgICBwYXRoKGN0eCkge1xuICAgICAgICBjb25zdCBjeCA9IHRoaXMuZ2V0QXR0cmlidXRlKCdjeCcpLmdldFBpeGVscygneCcpO1xuICAgICAgICBjb25zdCBjeSA9IHRoaXMuZ2V0QXR0cmlidXRlKCdjeScpLmdldFBpeGVscygneScpO1xuICAgICAgICBjb25zdCByID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ3InKS5nZXRQaXhlbHMoKTtcbiAgICAgICAgaWYgKGN0eCAmJiByID4gMCkge1xuICAgICAgICAgICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgICAgICAgY3R4LmFyYyhjeCwgY3ksIHIsIDAsIE1hdGguUEkgKiAyLCBmYWxzZSk7XG4gICAgICAgICAgICBjdHguY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBCb3VuZGluZ0JveChjeCAtIHIsIGN5IC0gciwgY3ggKyByLCBjeSArIHIpO1xuICAgIH1cbiAgICBnZXRNYXJrZXJzKCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoLi4uYXJncyl7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3MpO1xuICAgICAgICB0aGlzLnR5cGUgPSAnY2lyY2xlJztcbiAgICB9XG59XG5cbmNsYXNzIEVsbGlwc2VFbGVtZW50IGV4dGVuZHMgUGF0aEVsZW1lbnQge1xuICAgIHBhdGgoY3R4KSB7XG4gICAgICAgIGNvbnN0IEtBUFBBID0gNCAqICgoTWF0aC5zcXJ0KDIpIC0gMSkgLyAzKTtcbiAgICAgICAgY29uc3QgcnggPSB0aGlzLmdldEF0dHJpYnV0ZSgncngnKS5nZXRQaXhlbHMoJ3gnKTtcbiAgICAgICAgY29uc3QgcnkgPSB0aGlzLmdldEF0dHJpYnV0ZSgncnknKS5nZXRQaXhlbHMoJ3knKTtcbiAgICAgICAgY29uc3QgY3ggPSB0aGlzLmdldEF0dHJpYnV0ZSgnY3gnKS5nZXRQaXhlbHMoJ3gnKTtcbiAgICAgICAgY29uc3QgY3kgPSB0aGlzLmdldEF0dHJpYnV0ZSgnY3knKS5nZXRQaXhlbHMoJ3knKTtcbiAgICAgICAgaWYgKGN0eCAmJiByeCA+IDAgJiYgcnkgPiAwKSB7XG4gICAgICAgICAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICBjdHgubW92ZVRvKGN4ICsgcngsIGN5KTtcbiAgICAgICAgICAgIGN0eC5iZXppZXJDdXJ2ZVRvKGN4ICsgcngsIGN5ICsgS0FQUEEgKiByeSwgY3ggKyBLQVBQQSAqIHJ4LCBjeSArIHJ5LCBjeCwgY3kgKyByeSk7XG4gICAgICAgICAgICBjdHguYmV6aWVyQ3VydmVUbyhjeCAtIEtBUFBBICogcngsIGN5ICsgcnksIGN4IC0gcngsIGN5ICsgS0FQUEEgKiByeSwgY3ggLSByeCwgY3kpO1xuICAgICAgICAgICAgY3R4LmJlemllckN1cnZlVG8oY3ggLSByeCwgY3kgLSBLQVBQQSAqIHJ5LCBjeCAtIEtBUFBBICogcngsIGN5IC0gcnksIGN4LCBjeSAtIHJ5KTtcbiAgICAgICAgICAgIGN0eC5iZXppZXJDdXJ2ZVRvKGN4ICsgS0FQUEEgKiByeCwgY3kgLSByeSwgY3ggKyByeCwgY3kgLSBLQVBQQSAqIHJ5LCBjeCArIHJ4LCBjeSk7XG4gICAgICAgICAgICBjdHguY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBCb3VuZGluZ0JveChjeCAtIHJ4LCBjeSAtIHJ5LCBjeCArIHJ4LCBjeSArIHJ5KTtcbiAgICB9XG4gICAgZ2V0TWFya2VycygpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKC4uLmFyZ3Mpe1xuICAgICAgICBzdXBlciguLi5hcmdzKTtcbiAgICAgICAgdGhpcy50eXBlID0gJ2VsbGlwc2UnO1xuICAgIH1cbn1cblxuY2xhc3MgTGluZUVsZW1lbnQgZXh0ZW5kcyBQYXRoRWxlbWVudCB7XG4gICAgZ2V0UG9pbnRzKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbmV3IFBvaW50KHRoaXMuZ2V0QXR0cmlidXRlKCd4MScpLmdldFBpeGVscygneCcpLCB0aGlzLmdldEF0dHJpYnV0ZSgneTEnKS5nZXRQaXhlbHMoJ3knKSksXG4gICAgICAgICAgICBuZXcgUG9pbnQodGhpcy5nZXRBdHRyaWJ1dGUoJ3gyJykuZ2V0UGl4ZWxzKCd4JyksIHRoaXMuZ2V0QXR0cmlidXRlKCd5MicpLmdldFBpeGVscygneScpKVxuICAgICAgICBdO1xuICAgIH1cbiAgICBwYXRoKGN0eCkge1xuICAgICAgICBjb25zdCBbeyB4OiB4MCAsIHk6IHkwICB9LCB7IHg6IHgxICwgeTogeTEgIH1dID0gdGhpcy5nZXRQb2ludHMoKTtcbiAgICAgICAgaWYgKGN0eCkge1xuICAgICAgICAgICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgICAgICAgY3R4Lm1vdmVUbyh4MCwgeTApO1xuICAgICAgICAgICAgY3R4LmxpbmVUbyh4MSwgeTEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgQm91bmRpbmdCb3goeDAsIHkwLCB4MSwgeTEpO1xuICAgIH1cbiAgICBnZXRNYXJrZXJzKCkge1xuICAgICAgICBjb25zdCBbcDAsIHAxXSA9IHRoaXMuZ2V0UG9pbnRzKCk7XG4gICAgICAgIGNvbnN0IGEgPSBwMC5hbmdsZVRvKHAxKTtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBwMCxcbiAgICAgICAgICAgICAgICBhXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIHAxLFxuICAgICAgICAgICAgICAgIGFcbiAgICAgICAgICAgIF1cbiAgICAgICAgXTtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoLi4uYXJncyl7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3MpO1xuICAgICAgICB0aGlzLnR5cGUgPSAnbGluZSc7XG4gICAgfVxufVxuXG5jbGFzcyBQb2x5bGluZUVsZW1lbnQgZXh0ZW5kcyBQYXRoRWxlbWVudCB7XG4gICAgcGF0aChjdHgpIHtcbiAgICAgICAgY29uc3QgeyBwb2ludHMgIH0gPSB0aGlzO1xuICAgICAgICBjb25zdCBbeyB4OiB4MCAsIHk6IHkwICB9XSA9IHBvaW50cztcbiAgICAgICAgY29uc3QgYm91bmRpbmdCb3ggPSBuZXcgQm91bmRpbmdCb3goeDAsIHkwKTtcbiAgICAgICAgaWYgKGN0eCkge1xuICAgICAgICAgICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgICAgICAgY3R4Lm1vdmVUbyh4MCwgeTApO1xuICAgICAgICB9XG4gICAgICAgIHBvaW50cy5mb3JFYWNoKChwYXJhbSk9PntcbiAgICAgICAgICAgIGxldCB7IHggLCB5ICB9ID0gcGFyYW07XG4gICAgICAgICAgICBib3VuZGluZ0JveC5hZGRQb2ludCh4LCB5KTtcbiAgICAgICAgICAgIGlmIChjdHgpIHtcbiAgICAgICAgICAgICAgICBjdHgubGluZVRvKHgsIHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGJvdW5kaW5nQm94O1xuICAgIH1cbiAgICBnZXRNYXJrZXJzKCkge1xuICAgICAgICBjb25zdCB7IHBvaW50cyAgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGxhc3RJbmRleCA9IHBvaW50cy5sZW5ndGggLSAxO1xuICAgICAgICBjb25zdCBtYXJrZXJzID0gW107XG4gICAgICAgIHBvaW50cy5mb3JFYWNoKChwb2ludCwgaSk9PntcbiAgICAgICAgICAgIGlmIChpID09PSBsYXN0SW5kZXgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBtYXJrZXJzLnB1c2goW1xuICAgICAgICAgICAgICAgIHBvaW50LFxuICAgICAgICAgICAgICAgIHBvaW50LmFuZ2xlVG8ocG9pbnRzW2kgKyAxXSlcbiAgICAgICAgICAgIF0pO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKG1hcmtlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgbWFya2Vycy5wdXNoKFtcbiAgICAgICAgICAgICAgICBwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDFdLFxuICAgICAgICAgICAgICAgIG1hcmtlcnNbbWFya2Vycy5sZW5ndGggLSAxXVsxXVxuICAgICAgICAgICAgXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1hcmtlcnM7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKGRvY3VtZW50LCBub2RlLCBjYXB0dXJlVGV4dE5vZGVzKXtcbiAgICAgICAgc3VwZXIoZG9jdW1lbnQsIG5vZGUsIGNhcHR1cmVUZXh0Tm9kZXMpO1xuICAgICAgICB0aGlzLnR5cGUgPSAncG9seWxpbmUnO1xuICAgICAgICB0aGlzLnBvaW50cyA9IFtdO1xuICAgICAgICB0aGlzLnBvaW50cyA9IFBvaW50LnBhcnNlUGF0aCh0aGlzLmdldEF0dHJpYnV0ZSgncG9pbnRzJykuZ2V0U3RyaW5nKCkpO1xuICAgIH1cbn1cblxuY2xhc3MgUG9seWdvbkVsZW1lbnQgZXh0ZW5kcyBQb2x5bGluZUVsZW1lbnQge1xuICAgIHBhdGgoY3R4KSB7XG4gICAgICAgIGNvbnN0IGJvdW5kaW5nQm94ID0gc3VwZXIucGF0aChjdHgpO1xuICAgICAgICBjb25zdCBbeyB4ICwgeSAgfV0gPSB0aGlzLnBvaW50cztcbiAgICAgICAgaWYgKGN0eCkge1xuICAgICAgICAgICAgY3R4LmxpbmVUbyh4LCB5KTtcbiAgICAgICAgICAgIGN0eC5jbG9zZVBhdGgoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYm91bmRpbmdCb3g7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKC4uLmFyZ3Mpe1xuICAgICAgICBzdXBlciguLi5hcmdzKTtcbiAgICAgICAgdGhpcy50eXBlID0gJ3BvbHlnb24nO1xuICAgIH1cbn1cblxuY2xhc3MgUGF0dGVybkVsZW1lbnQgZXh0ZW5kcyBFbGVtZW50IHtcbiAgICBjcmVhdGVQYXR0ZXJuKGN0eCwgXywgcGFyZW50T3BhY2l0eVByb3ApIHtcbiAgICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLmdldFN0eWxlKCd3aWR0aCcpLmdldFBpeGVscygneCcsIHRydWUpO1xuICAgICAgICBjb25zdCBoZWlnaHQgPSB0aGlzLmdldFN0eWxlKCdoZWlnaHQnKS5nZXRQaXhlbHMoJ3knLCB0cnVlKTtcbiAgICAgICAgLy8gcmVuZGVyIG1lIHVzaW5nIGEgdGVtcG9yYXJ5IHN2ZyBlbGVtZW50XG4gICAgICAgIGNvbnN0IHBhdHRlcm5TdmcgPSBuZXcgU1ZHRWxlbWVudCh0aGlzLmRvY3VtZW50LCBudWxsKTtcbiAgICAgICAgcGF0dGVyblN2Zy5hdHRyaWJ1dGVzLnZpZXdCb3ggPSBuZXcgUHJvcGVydHkodGhpcy5kb2N1bWVudCwgJ3ZpZXdCb3gnLCB0aGlzLmdldEF0dHJpYnV0ZSgndmlld0JveCcpLmdldFZhbHVlKCkpO1xuICAgICAgICBwYXR0ZXJuU3ZnLmF0dHJpYnV0ZXMud2lkdGggPSBuZXcgUHJvcGVydHkodGhpcy5kb2N1bWVudCwgJ3dpZHRoJywgXCJcIi5jb25jYXQod2lkdGgsIFwicHhcIikpO1xuICAgICAgICBwYXR0ZXJuU3ZnLmF0dHJpYnV0ZXMuaGVpZ2h0ID0gbmV3IFByb3BlcnR5KHRoaXMuZG9jdW1lbnQsICdoZWlnaHQnLCBcIlwiLmNvbmNhdChoZWlnaHQsIFwicHhcIikpO1xuICAgICAgICBwYXR0ZXJuU3ZnLmF0dHJpYnV0ZXMudHJhbnNmb3JtID0gbmV3IFByb3BlcnR5KHRoaXMuZG9jdW1lbnQsICd0cmFuc2Zvcm0nLCB0aGlzLmdldEF0dHJpYnV0ZSgncGF0dGVyblRyYW5zZm9ybScpLmdldFZhbHVlKCkpO1xuICAgICAgICBwYXR0ZXJuU3ZnLmNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbjtcbiAgICAgICAgY29uc3QgcGF0dGVybkNhbnZhcyA9IHRoaXMuZG9jdW1lbnQuY3JlYXRlQ2FudmFzKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICBjb25zdCBwYXR0ZXJuQ3R4ID0gcGF0dGVybkNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICBjb25zdCB4QXR0ciA9IHRoaXMuZ2V0QXR0cmlidXRlKCd4Jyk7XG4gICAgICAgIGNvbnN0IHlBdHRyID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ3knKTtcbiAgICAgICAgaWYgKHhBdHRyLmhhc1ZhbHVlKCkgJiYgeUF0dHIuaGFzVmFsdWUoKSkge1xuICAgICAgICAgICAgcGF0dGVybkN0eC50cmFuc2xhdGUoeEF0dHIuZ2V0UGl4ZWxzKCd4JywgdHJ1ZSksIHlBdHRyLmdldFBpeGVscygneScsIHRydWUpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyZW50T3BhY2l0eVByb3AuaGFzVmFsdWUoKSkge1xuICAgICAgICAgICAgdGhpcy5zdHlsZXNbJ2ZpbGwtb3BhY2l0eSddID0gcGFyZW50T3BhY2l0eVByb3A7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBSZWZsZWN0LmRlbGV0ZVByb3BlcnR5KHRoaXMuc3R5bGVzLCAnZmlsbC1vcGFjaXR5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmVuZGVyIDN4MyBncmlkIHNvIHdoZW4gd2UgdHJhbnNmb3JtIHRoZXJlJ3Mgbm8gd2hpdGUgc3BhY2Ugb24gZWRnZXNcbiAgICAgICAgZm9yKGxldCB4ID0gLTE7IHggPD0gMTsgeCsrKXtcbiAgICAgICAgICAgIGZvcihsZXQgeSA9IC0xOyB5IDw9IDE7IHkrKyl7XG4gICAgICAgICAgICAgICAgcGF0dGVybkN0eC5zYXZlKCk7XG4gICAgICAgICAgICAgICAgcGF0dGVyblN2Zy5hdHRyaWJ1dGVzLnggPSBuZXcgUHJvcGVydHkodGhpcy5kb2N1bWVudCwgJ3gnLCB4ICogcGF0dGVybkNhbnZhcy53aWR0aCk7XG4gICAgICAgICAgICAgICAgcGF0dGVyblN2Zy5hdHRyaWJ1dGVzLnkgPSBuZXcgUHJvcGVydHkodGhpcy5kb2N1bWVudCwgJ3knLCB5ICogcGF0dGVybkNhbnZhcy5oZWlnaHQpO1xuICAgICAgICAgICAgICAgIHBhdHRlcm5TdmcucmVuZGVyKHBhdHRlcm5DdHgpO1xuICAgICAgICAgICAgICAgIHBhdHRlcm5DdHgucmVzdG9yZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhdHRlcm4gPSBjdHguY3JlYXRlUGF0dGVybihwYXR0ZXJuQ2FudmFzLCAncmVwZWF0Jyk7XG4gICAgICAgIHJldHVybiBwYXR0ZXJuO1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvciguLi5hcmdzKXtcbiAgICAgICAgc3VwZXIoLi4uYXJncyk7XG4gICAgICAgIHRoaXMudHlwZSA9ICdwYXR0ZXJuJztcbiAgICB9XG59XG5cbmNsYXNzIE1hcmtlckVsZW1lbnQgZXh0ZW5kcyBFbGVtZW50IHtcbiAgICByZW5kZXIoY3R4LCBwb2ludCwgYW5nbGUpIHtcbiAgICAgICAgaWYgKCFwb2ludCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgeCAsIHkgIH0gPSBwb2ludDtcbiAgICAgICAgY29uc3Qgb3JpZW50ID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ29yaWVudCcpLmdldFN0cmluZygnYXV0bycpO1xuICAgICAgICBjb25zdCBtYXJrZXJVbml0cyA9IHRoaXMuZ2V0QXR0cmlidXRlKCdtYXJrZXJVbml0cycpLmdldFN0cmluZygnc3Ryb2tlV2lkdGgnKTtcbiAgICAgICAgY3R4LnRyYW5zbGF0ZSh4LCB5KTtcbiAgICAgICAgaWYgKG9yaWVudCA9PT0gJ2F1dG8nKSB7XG4gICAgICAgICAgICBjdHgucm90YXRlKGFuZ2xlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWFya2VyVW5pdHMgPT09ICdzdHJva2VXaWR0aCcpIHtcbiAgICAgICAgICAgIGN0eC5zY2FsZShjdHgubGluZVdpZHRoLCBjdHgubGluZVdpZHRoKTtcbiAgICAgICAgfVxuICAgICAgICBjdHguc2F2ZSgpO1xuICAgICAgICAvLyByZW5kZXIgbWUgdXNpbmcgYSB0ZW1wb3Jhcnkgc3ZnIGVsZW1lbnRcbiAgICAgICAgY29uc3QgbWFya2VyU3ZnID0gbmV3IFNWR0VsZW1lbnQodGhpcy5kb2N1bWVudCk7XG4gICAgICAgIG1hcmtlclN2Zy50eXBlID0gdGhpcy50eXBlO1xuICAgICAgICBtYXJrZXJTdmcuYXR0cmlidXRlcy52aWV3Qm94ID0gbmV3IFByb3BlcnR5KHRoaXMuZG9jdW1lbnQsICd2aWV3Qm94JywgdGhpcy5nZXRBdHRyaWJ1dGUoJ3ZpZXdCb3gnKS5nZXRWYWx1ZSgpKTtcbiAgICAgICAgbWFya2VyU3ZnLmF0dHJpYnV0ZXMucmVmWCA9IG5ldyBQcm9wZXJ0eSh0aGlzLmRvY3VtZW50LCAncmVmWCcsIHRoaXMuZ2V0QXR0cmlidXRlKCdyZWZYJykuZ2V0VmFsdWUoKSk7XG4gICAgICAgIG1hcmtlclN2Zy5hdHRyaWJ1dGVzLnJlZlkgPSBuZXcgUHJvcGVydHkodGhpcy5kb2N1bWVudCwgJ3JlZlknLCB0aGlzLmdldEF0dHJpYnV0ZSgncmVmWScpLmdldFZhbHVlKCkpO1xuICAgICAgICBtYXJrZXJTdmcuYXR0cmlidXRlcy53aWR0aCA9IG5ldyBQcm9wZXJ0eSh0aGlzLmRvY3VtZW50LCAnd2lkdGgnLCB0aGlzLmdldEF0dHJpYnV0ZSgnbWFya2VyV2lkdGgnKS5nZXRWYWx1ZSgpKTtcbiAgICAgICAgbWFya2VyU3ZnLmF0dHJpYnV0ZXMuaGVpZ2h0ID0gbmV3IFByb3BlcnR5KHRoaXMuZG9jdW1lbnQsICdoZWlnaHQnLCB0aGlzLmdldEF0dHJpYnV0ZSgnbWFya2VySGVpZ2h0JykuZ2V0VmFsdWUoKSk7XG4gICAgICAgIG1hcmtlclN2Zy5hdHRyaWJ1dGVzLm92ZXJmbG93ID0gbmV3IFByb3BlcnR5KHRoaXMuZG9jdW1lbnQsICdvdmVyZmxvdycsIHRoaXMuZ2V0QXR0cmlidXRlKCdvdmVyZmxvdycpLmdldFZhbHVlKCkpO1xuICAgICAgICBtYXJrZXJTdmcuYXR0cmlidXRlcy5maWxsID0gbmV3IFByb3BlcnR5KHRoaXMuZG9jdW1lbnQsICdmaWxsJywgdGhpcy5nZXRBdHRyaWJ1dGUoJ2ZpbGwnKS5nZXRDb2xvcignYmxhY2snKSk7XG4gICAgICAgIG1hcmtlclN2Zy5hdHRyaWJ1dGVzLnN0cm9rZSA9IG5ldyBQcm9wZXJ0eSh0aGlzLmRvY3VtZW50LCAnc3Ryb2tlJywgdGhpcy5nZXRBdHRyaWJ1dGUoJ3N0cm9rZScpLmdldFZhbHVlKCdub25lJykpO1xuICAgICAgICBtYXJrZXJTdmcuY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuO1xuICAgICAgICBtYXJrZXJTdmcucmVuZGVyKGN0eCk7XG4gICAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgICAgIGlmIChtYXJrZXJVbml0cyA9PT0gJ3N0cm9rZVdpZHRoJykge1xuICAgICAgICAgICAgY3R4LnNjYWxlKDEgLyBjdHgubGluZVdpZHRoLCAxIC8gY3R4LmxpbmVXaWR0aCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9yaWVudCA9PT0gJ2F1dG8nKSB7XG4gICAgICAgICAgICBjdHgucm90YXRlKC1hbmdsZSk7XG4gICAgICAgIH1cbiAgICAgICAgY3R4LnRyYW5zbGF0ZSgteCwgLXkpO1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvciguLi5hcmdzKXtcbiAgICAgICAgc3VwZXIoLi4uYXJncyk7XG4gICAgICAgIHRoaXMudHlwZSA9ICdtYXJrZXInO1xuICAgIH1cbn1cblxuY2xhc3MgRGVmc0VsZW1lbnQgZXh0ZW5kcyBFbGVtZW50IHtcbiAgICByZW5kZXIoKSB7XG4gICAgLy8gTk9PUFxuICAgIH1cbiAgICBjb25zdHJ1Y3RvciguLi5hcmdzKXtcbiAgICAgICAgc3VwZXIoLi4uYXJncyk7XG4gICAgICAgIHRoaXMudHlwZSA9ICdkZWZzJztcbiAgICB9XG59XG5cbmNsYXNzIEdFbGVtZW50IGV4dGVuZHMgUmVuZGVyZWRFbGVtZW50IHtcbiAgICBnZXRCb3VuZGluZ0JveChjdHgpIHtcbiAgICAgICAgY29uc3QgYm91bmRpbmdCb3ggPSBuZXcgQm91bmRpbmdCb3goKTtcbiAgICAgICAgdGhpcy5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCk9PntcbiAgICAgICAgICAgIGJvdW5kaW5nQm94LmFkZEJvdW5kaW5nQm94KGNoaWxkLmdldEJvdW5kaW5nQm94KGN0eCkpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGJvdW5kaW5nQm94O1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvciguLi5hcmdzKXtcbiAgICAgICAgc3VwZXIoLi4uYXJncyk7XG4gICAgICAgIHRoaXMudHlwZSA9ICdnJztcbiAgICB9XG59XG5cbmNsYXNzIEdyYWRpZW50RWxlbWVudCBleHRlbmRzIEVsZW1lbnQge1xuICAgIGdldEdyYWRpZW50VW5pdHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZSgnZ3JhZGllbnRVbml0cycpLmdldFN0cmluZygnb2JqZWN0Qm91bmRpbmdCb3gnKTtcbiAgICB9XG4gICAgY3JlYXRlR3JhZGllbnQoY3R4LCBlbGVtZW50LCBwYXJlbnRPcGFjaXR5UHJvcCkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXMsIGNvbnNpc3RlbnQtdGhpc1xuICAgICAgICBsZXQgc3RvcHNDb250YWluZXIgPSB0aGlzO1xuICAgICAgICBpZiAodGhpcy5nZXRIcmVmQXR0cmlidXRlKCkuaGFzVmFsdWUoKSkge1xuICAgICAgICAgICAgc3RvcHNDb250YWluZXIgPSB0aGlzLmdldEhyZWZBdHRyaWJ1dGUoKS5nZXREZWZpbml0aW9uKCk7XG4gICAgICAgICAgICB0aGlzLmluaGVyaXRTdG9wQ29udGFpbmVyKHN0b3BzQ29udGFpbmVyKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHN0b3BzICB9ID0gc3RvcHNDb250YWluZXI7XG4gICAgICAgIGNvbnN0IGdyYWRpZW50ID0gdGhpcy5nZXRHcmFkaWVudChjdHgsIGVsZW1lbnQpO1xuICAgICAgICBpZiAoIWdyYWRpZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hZGRQYXJlbnRPcGFjaXR5KHBhcmVudE9wYWNpdHlQcm9wLCBzdG9wc1tzdG9wcy5sZW5ndGggLSAxXS5jb2xvcik7XG4gICAgICAgIH1cbiAgICAgICAgc3RvcHMuZm9yRWFjaCgoc3RvcCk9PntcbiAgICAgICAgICAgIGdyYWRpZW50LmFkZENvbG9yU3RvcChzdG9wLm9mZnNldCwgdGhpcy5hZGRQYXJlbnRPcGFjaXR5KHBhcmVudE9wYWNpdHlQcm9wLCBzdG9wLmNvbG9yKSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodGhpcy5nZXRBdHRyaWJ1dGUoJ2dyYWRpZW50VHJhbnNmb3JtJykuaGFzVmFsdWUoKSkge1xuICAgICAgICAgICAgLy8gcmVuZGVyIGFzIHRyYW5zZm9ybWVkIHBhdHRlcm4gb24gdGVtcG9yYXJ5IGNhbnZhc1xuICAgICAgICAgICAgY29uc3QgeyBkb2N1bWVudCAgfSA9IHRoaXM7XG4gICAgICAgICAgICBjb25zdCB7IE1BWF9WSVJUVUFMX1BJWEVMUyAgfSA9IFNjcmVlbjtcbiAgICAgICAgICAgIGNvbnN0IHsgdmlld1BvcnQgIH0gPSBkb2N1bWVudC5zY3JlZW47XG4gICAgICAgICAgICBjb25zdCByb290VmlldyA9IHZpZXdQb3J0LmdldFJvb3QoKTtcbiAgICAgICAgICAgIGNvbnN0IHJlY3QgPSBuZXcgUmVjdEVsZW1lbnQoZG9jdW1lbnQpO1xuICAgICAgICAgICAgcmVjdC5hdHRyaWJ1dGVzLnggPSBuZXcgUHJvcGVydHkoZG9jdW1lbnQsICd4JywgLU1BWF9WSVJUVUFMX1BJWEVMUyAvIDMpO1xuICAgICAgICAgICAgcmVjdC5hdHRyaWJ1dGVzLnkgPSBuZXcgUHJvcGVydHkoZG9jdW1lbnQsICd5JywgLU1BWF9WSVJUVUFMX1BJWEVMUyAvIDMpO1xuICAgICAgICAgICAgcmVjdC5hdHRyaWJ1dGVzLndpZHRoID0gbmV3IFByb3BlcnR5KGRvY3VtZW50LCAnd2lkdGgnLCBNQVhfVklSVFVBTF9QSVhFTFMpO1xuICAgICAgICAgICAgcmVjdC5hdHRyaWJ1dGVzLmhlaWdodCA9IG5ldyBQcm9wZXJ0eShkb2N1bWVudCwgJ2hlaWdodCcsIE1BWF9WSVJUVUFMX1BJWEVMUyk7XG4gICAgICAgICAgICBjb25zdCBncm91cCA9IG5ldyBHRWxlbWVudChkb2N1bWVudCk7XG4gICAgICAgICAgICBncm91cC5hdHRyaWJ1dGVzLnRyYW5zZm9ybSA9IG5ldyBQcm9wZXJ0eShkb2N1bWVudCwgJ3RyYW5zZm9ybScsIHRoaXMuZ2V0QXR0cmlidXRlKCdncmFkaWVudFRyYW5zZm9ybScpLmdldFZhbHVlKCkpO1xuICAgICAgICAgICAgZ3JvdXAuY2hpbGRyZW4gPSBbXG4gICAgICAgICAgICAgICAgcmVjdFxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGNvbnN0IHBhdHRlcm5TdmcgPSBuZXcgU1ZHRWxlbWVudChkb2N1bWVudCk7XG4gICAgICAgICAgICBwYXR0ZXJuU3ZnLmF0dHJpYnV0ZXMueCA9IG5ldyBQcm9wZXJ0eShkb2N1bWVudCwgJ3gnLCAwKTtcbiAgICAgICAgICAgIHBhdHRlcm5TdmcuYXR0cmlidXRlcy55ID0gbmV3IFByb3BlcnR5KGRvY3VtZW50LCAneScsIDApO1xuICAgICAgICAgICAgcGF0dGVyblN2Zy5hdHRyaWJ1dGVzLndpZHRoID0gbmV3IFByb3BlcnR5KGRvY3VtZW50LCAnd2lkdGgnLCByb290Vmlldy53aWR0aCk7XG4gICAgICAgICAgICBwYXR0ZXJuU3ZnLmF0dHJpYnV0ZXMuaGVpZ2h0ID0gbmV3IFByb3BlcnR5KGRvY3VtZW50LCAnaGVpZ2h0Jywgcm9vdFZpZXcuaGVpZ2h0KTtcbiAgICAgICAgICAgIHBhdHRlcm5TdmcuY2hpbGRyZW4gPSBbXG4gICAgICAgICAgICAgICAgZ3JvdXBcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBjb25zdCBwYXR0ZXJuQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlQ2FudmFzKHJvb3RWaWV3LndpZHRoLCByb290Vmlldy5oZWlnaHQpO1xuICAgICAgICAgICAgY29uc3QgcGF0dGVybkN0eCA9IHBhdHRlcm5DYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICAgICAgICAgIHBhdHRlcm5DdHguZmlsbFN0eWxlID0gZ3JhZGllbnQ7XG4gICAgICAgICAgICBwYXR0ZXJuU3ZnLnJlbmRlcihwYXR0ZXJuQ3R4KTtcbiAgICAgICAgICAgIHJldHVybiBwYXR0ZXJuQ3R4LmNyZWF0ZVBhdHRlcm4ocGF0dGVybkNhbnZhcywgJ25vLXJlcGVhdCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBncmFkaWVudDtcbiAgICB9XG4gICAgaW5oZXJpdFN0b3BDb250YWluZXIoc3RvcHNDb250YWluZXIpIHtcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzVG9Jbmhlcml0LmZvckVhY2goKGF0dHJpYnV0ZVRvSW5oZXJpdCk9PntcbiAgICAgICAgICAgIGlmICghdGhpcy5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlVG9Jbmhlcml0KS5oYXNWYWx1ZSgpICYmIHN0b3BzQ29udGFpbmVyLmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVUb0luaGVyaXQpLmhhc1ZhbHVlKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVUb0luaGVyaXQsIHRydWUpLnNldFZhbHVlKHN0b3BzQ29udGFpbmVyLmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVUb0luaGVyaXQpLmdldFZhbHVlKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgYWRkUGFyZW50T3BhY2l0eShwYXJlbnRPcGFjaXR5UHJvcCwgY29sb3IpIHtcbiAgICAgICAgaWYgKHBhcmVudE9wYWNpdHlQcm9wLmhhc1ZhbHVlKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbG9yUHJvcCA9IG5ldyBQcm9wZXJ0eSh0aGlzLmRvY3VtZW50LCAnY29sb3InLCBjb2xvcik7XG4gICAgICAgICAgICByZXR1cm4gY29sb3JQcm9wLmFkZE9wYWNpdHkocGFyZW50T3BhY2l0eVByb3ApLmdldENvbG9yKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbG9yO1xuICAgIH1cbiAgICBjb25zdHJ1Y3Rvcihkb2N1bWVudCwgbm9kZSwgY2FwdHVyZVRleHROb2Rlcyl7XG4gICAgICAgIHN1cGVyKGRvY3VtZW50LCBub2RlLCBjYXB0dXJlVGV4dE5vZGVzKTtcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzVG9Jbmhlcml0ID0gW1xuICAgICAgICAgICAgJ2dyYWRpZW50VW5pdHMnXG4gICAgICAgIF07XG4gICAgICAgIHRoaXMuc3RvcHMgPSBbXTtcbiAgICAgICAgY29uc3QgeyBzdG9wcyAsIGNoaWxkcmVuICB9ID0gdGhpcztcbiAgICAgICAgY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpPT57XG4gICAgICAgICAgICBpZiAoY2hpbGQudHlwZSA9PT0gJ3N0b3AnKSB7XG4gICAgICAgICAgICAgICAgc3RvcHMucHVzaChjaGlsZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuY2xhc3MgTGluZWFyR3JhZGllbnRFbGVtZW50IGV4dGVuZHMgR3JhZGllbnRFbGVtZW50IHtcbiAgICBnZXRHcmFkaWVudChjdHgsIGVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgaXNCb3VuZGluZ0JveFVuaXRzID0gdGhpcy5nZXRHcmFkaWVudFVuaXRzKCkgPT09ICdvYmplY3RCb3VuZGluZ0JveCc7XG4gICAgICAgIGNvbnN0IGJvdW5kaW5nQm94ID0gaXNCb3VuZGluZ0JveFVuaXRzID8gZWxlbWVudC5nZXRCb3VuZGluZ0JveChjdHgpIDogbnVsbDtcbiAgICAgICAgaWYgKGlzQm91bmRpbmdCb3hVbml0cyAmJiAhYm91bmRpbmdCb3gpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5nZXRBdHRyaWJ1dGUoJ3gxJykuaGFzVmFsdWUoKSAmJiAhdGhpcy5nZXRBdHRyaWJ1dGUoJ3kxJykuaGFzVmFsdWUoKSAmJiAhdGhpcy5nZXRBdHRyaWJ1dGUoJ3gyJykuaGFzVmFsdWUoKSAmJiAhdGhpcy5nZXRBdHRyaWJ1dGUoJ3kyJykuaGFzVmFsdWUoKSkge1xuICAgICAgICAgICAgdGhpcy5nZXRBdHRyaWJ1dGUoJ3gxJywgdHJ1ZSkuc2V0VmFsdWUoMCk7XG4gICAgICAgICAgICB0aGlzLmdldEF0dHJpYnV0ZSgneTEnLCB0cnVlKS5zZXRWYWx1ZSgwKTtcbiAgICAgICAgICAgIHRoaXMuZ2V0QXR0cmlidXRlKCd4MicsIHRydWUpLnNldFZhbHVlKDEpO1xuICAgICAgICAgICAgdGhpcy5nZXRBdHRyaWJ1dGUoJ3kyJywgdHJ1ZSkuc2V0VmFsdWUoMCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeDEgPSBpc0JvdW5kaW5nQm94VW5pdHMgPyBib3VuZGluZ0JveC54ICsgYm91bmRpbmdCb3gud2lkdGggKiB0aGlzLmdldEF0dHJpYnV0ZSgneDEnKS5nZXROdW1iZXIoKSA6IHRoaXMuZ2V0QXR0cmlidXRlKCd4MScpLmdldFBpeGVscygneCcpO1xuICAgICAgICBjb25zdCB5MSA9IGlzQm91bmRpbmdCb3hVbml0cyA/IGJvdW5kaW5nQm94LnkgKyBib3VuZGluZ0JveC5oZWlnaHQgKiB0aGlzLmdldEF0dHJpYnV0ZSgneTEnKS5nZXROdW1iZXIoKSA6IHRoaXMuZ2V0QXR0cmlidXRlKCd5MScpLmdldFBpeGVscygneScpO1xuICAgICAgICBjb25zdCB4MiA9IGlzQm91bmRpbmdCb3hVbml0cyA/IGJvdW5kaW5nQm94LnggKyBib3VuZGluZ0JveC53aWR0aCAqIHRoaXMuZ2V0QXR0cmlidXRlKCd4MicpLmdldE51bWJlcigpIDogdGhpcy5nZXRBdHRyaWJ1dGUoJ3gyJykuZ2V0UGl4ZWxzKCd4Jyk7XG4gICAgICAgIGNvbnN0IHkyID0gaXNCb3VuZGluZ0JveFVuaXRzID8gYm91bmRpbmdCb3gueSArIGJvdW5kaW5nQm94LmhlaWdodCAqIHRoaXMuZ2V0QXR0cmlidXRlKCd5MicpLmdldE51bWJlcigpIDogdGhpcy5nZXRBdHRyaWJ1dGUoJ3kyJykuZ2V0UGl4ZWxzKCd5Jyk7XG4gICAgICAgIGlmICh4MSA9PT0geDIgJiYgeTEgPT09IHkyKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3R4LmNyZWF0ZUxpbmVhckdyYWRpZW50KHgxLCB5MSwgeDIsIHkyKTtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoZG9jdW1lbnQsIG5vZGUsIGNhcHR1cmVUZXh0Tm9kZXMpe1xuICAgICAgICBzdXBlcihkb2N1bWVudCwgbm9kZSwgY2FwdHVyZVRleHROb2Rlcyk7XG4gICAgICAgIHRoaXMudHlwZSA9ICdsaW5lYXJHcmFkaWVudCc7XG4gICAgICAgIHRoaXMuYXR0cmlidXRlc1RvSW5oZXJpdC5wdXNoKCd4MScsICd5MScsICd4MicsICd5MicpO1xuICAgIH1cbn1cblxuY2xhc3MgUmFkaWFsR3JhZGllbnRFbGVtZW50IGV4dGVuZHMgR3JhZGllbnRFbGVtZW50IHtcbiAgICBnZXRHcmFkaWVudChjdHgsIGVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgaXNCb3VuZGluZ0JveFVuaXRzID0gdGhpcy5nZXRHcmFkaWVudFVuaXRzKCkgPT09ICdvYmplY3RCb3VuZGluZ0JveCc7XG4gICAgICAgIGNvbnN0IGJvdW5kaW5nQm94ID0gZWxlbWVudC5nZXRCb3VuZGluZ0JveChjdHgpO1xuICAgICAgICBpZiAoaXNCb3VuZGluZ0JveFVuaXRzICYmICFib3VuZGluZ0JveCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmdldEF0dHJpYnV0ZSgnY3gnKS5oYXNWYWx1ZSgpKSB7XG4gICAgICAgICAgICB0aGlzLmdldEF0dHJpYnV0ZSgnY3gnLCB0cnVlKS5zZXRWYWx1ZSgnNTAlJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmdldEF0dHJpYnV0ZSgnY3knKS5oYXNWYWx1ZSgpKSB7XG4gICAgICAgICAgICB0aGlzLmdldEF0dHJpYnV0ZSgnY3knLCB0cnVlKS5zZXRWYWx1ZSgnNTAlJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmdldEF0dHJpYnV0ZSgncicpLmhhc1ZhbHVlKCkpIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0QXR0cmlidXRlKCdyJywgdHJ1ZSkuc2V0VmFsdWUoJzUwJScpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN4ID0gaXNCb3VuZGluZ0JveFVuaXRzID8gYm91bmRpbmdCb3gueCArIGJvdW5kaW5nQm94LndpZHRoICogdGhpcy5nZXRBdHRyaWJ1dGUoJ2N4JykuZ2V0TnVtYmVyKCkgOiB0aGlzLmdldEF0dHJpYnV0ZSgnY3gnKS5nZXRQaXhlbHMoJ3gnKTtcbiAgICAgICAgY29uc3QgY3kgPSBpc0JvdW5kaW5nQm94VW5pdHMgPyBib3VuZGluZ0JveC55ICsgYm91bmRpbmdCb3guaGVpZ2h0ICogdGhpcy5nZXRBdHRyaWJ1dGUoJ2N5JykuZ2V0TnVtYmVyKCkgOiB0aGlzLmdldEF0dHJpYnV0ZSgnY3knKS5nZXRQaXhlbHMoJ3knKTtcbiAgICAgICAgbGV0IGZ4ID0gY3g7XG4gICAgICAgIGxldCBmeSA9IGN5O1xuICAgICAgICBpZiAodGhpcy5nZXRBdHRyaWJ1dGUoJ2Z4JykuaGFzVmFsdWUoKSkge1xuICAgICAgICAgICAgZnggPSBpc0JvdW5kaW5nQm94VW5pdHMgPyBib3VuZGluZ0JveC54ICsgYm91bmRpbmdCb3gud2lkdGggKiB0aGlzLmdldEF0dHJpYnV0ZSgnZngnKS5nZXROdW1iZXIoKSA6IHRoaXMuZ2V0QXR0cmlidXRlKCdmeCcpLmdldFBpeGVscygneCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmdldEF0dHJpYnV0ZSgnZnknKS5oYXNWYWx1ZSgpKSB7XG4gICAgICAgICAgICBmeSA9IGlzQm91bmRpbmdCb3hVbml0cyA/IGJvdW5kaW5nQm94LnkgKyBib3VuZGluZ0JveC5oZWlnaHQgKiB0aGlzLmdldEF0dHJpYnV0ZSgnZnknKS5nZXROdW1iZXIoKSA6IHRoaXMuZ2V0QXR0cmlidXRlKCdmeScpLmdldFBpeGVscygneScpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHIgPSBpc0JvdW5kaW5nQm94VW5pdHMgPyAoYm91bmRpbmdCb3gud2lkdGggKyBib3VuZGluZ0JveC5oZWlnaHQpIC8gMiAqIHRoaXMuZ2V0QXR0cmlidXRlKCdyJykuZ2V0TnVtYmVyKCkgOiB0aGlzLmdldEF0dHJpYnV0ZSgncicpLmdldFBpeGVscygpO1xuICAgICAgICBjb25zdCBmciA9IHRoaXMuZ2V0QXR0cmlidXRlKCdmcicpLmdldFBpeGVscygpO1xuICAgICAgICByZXR1cm4gY3R4LmNyZWF0ZVJhZGlhbEdyYWRpZW50KGZ4LCBmeSwgZnIsIGN4LCBjeSwgcik7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKGRvY3VtZW50LCBub2RlLCBjYXB0dXJlVGV4dE5vZGVzKXtcbiAgICAgICAgc3VwZXIoZG9jdW1lbnQsIG5vZGUsIGNhcHR1cmVUZXh0Tm9kZXMpO1xuICAgICAgICB0aGlzLnR5cGUgPSAncmFkaWFsR3JhZGllbnQnO1xuICAgICAgICB0aGlzLmF0dHJpYnV0ZXNUb0luaGVyaXQucHVzaCgnY3gnLCAnY3knLCAncicsICdmeCcsICdmeScsICdmcicpO1xuICAgIH1cbn1cblxuY2xhc3MgU3RvcEVsZW1lbnQgZXh0ZW5kcyBFbGVtZW50IHtcbiAgICBjb25zdHJ1Y3Rvcihkb2N1bWVudCwgbm9kZSwgY2FwdHVyZVRleHROb2Rlcyl7XG4gICAgICAgIHN1cGVyKGRvY3VtZW50LCBub2RlLCBjYXB0dXJlVGV4dE5vZGVzKTtcbiAgICAgICAgdGhpcy50eXBlID0gJ3N0b3AnO1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCB0aGlzLmdldEF0dHJpYnV0ZSgnb2Zmc2V0JykuZ2V0TnVtYmVyKCkpKTtcbiAgICAgICAgY29uc3Qgc3RvcE9wYWNpdHkgPSB0aGlzLmdldFN0eWxlKCdzdG9wLW9wYWNpdHknKTtcbiAgICAgICAgbGV0IHN0b3BDb2xvciA9IHRoaXMuZ2V0U3R5bGUoJ3N0b3AtY29sb3InLCB0cnVlKTtcbiAgICAgICAgaWYgKHN0b3BDb2xvci5nZXRTdHJpbmcoKSA9PT0gJycpIHtcbiAgICAgICAgICAgIHN0b3BDb2xvci5zZXRWYWx1ZSgnIzAwMCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdG9wT3BhY2l0eS5oYXNWYWx1ZSgpKSB7XG4gICAgICAgICAgICBzdG9wQ29sb3IgPSBzdG9wQ29sb3IuYWRkT3BhY2l0eShzdG9wT3BhY2l0eSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vZmZzZXQgPSBvZmZzZXQ7XG4gICAgICAgIHRoaXMuY29sb3IgPSBzdG9wQ29sb3IuZ2V0Q29sb3IoKTtcbiAgICB9XG59XG5cbmNsYXNzIEFuaW1hdGVFbGVtZW50IGV4dGVuZHMgRWxlbWVudCB7XG4gICAgZ2V0UHJvcGVydHkoKSB7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZVR5cGUgPSB0aGlzLmdldEF0dHJpYnV0ZSgnYXR0cmlidXRlVHlwZScpLmdldFN0cmluZygpO1xuICAgICAgICBjb25zdCBhdHRyaWJ1dGVOYW1lID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ2F0dHJpYnV0ZU5hbWUnKS5nZXRTdHJpbmcoKTtcbiAgICAgICAgaWYgKGF0dHJpYnV0ZVR5cGUgPT09ICdDU1MnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQuZ2V0U3R5bGUoYXR0cmlidXRlTmFtZSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lLCB0cnVlKTtcbiAgICB9XG4gICAgY2FsY1ZhbHVlKCkge1xuICAgICAgICBjb25zdCB7IGluaXRpYWxVbml0cyAgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IHsgcHJvZ3Jlc3MgLCBmcm9tICwgdG8gIH0gPSB0aGlzLmdldFByb2dyZXNzKCk7XG4gICAgICAgIC8vIHR3ZWVuIHZhbHVlIGxpbmVhcmx5XG4gICAgICAgIGxldCBuZXdWYWx1ZSA9IGZyb20uZ2V0TnVtYmVyKCkgKyAodG8uZ2V0TnVtYmVyKCkgLSBmcm9tLmdldE51bWJlcigpKSAqIHByb2dyZXNzO1xuICAgICAgICBpZiAoaW5pdGlhbFVuaXRzID09PSAnJScpIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlICo9IDEwMCAvLyBudW1WYWx1ZSgpIHJldHVybnMgMC0xIHdoZXJlYXMgcHJvcGVydGllcyBhcmUgMC0xMDBcbiAgICAgICAgICAgIDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gXCJcIi5jb25jYXQobmV3VmFsdWUpLmNvbmNhdChpbml0aWFsVW5pdHMpO1xuICAgIH1cbiAgICB1cGRhdGUoZGVsdGEpIHtcbiAgICAgICAgY29uc3QgeyBwYXJlbnQgIH0gPSB0aGlzO1xuICAgICAgICBjb25zdCBwcm9wID0gdGhpcy5nZXRQcm9wZXJ0eSgpO1xuICAgICAgICAvLyBzZXQgaW5pdGlhbCB2YWx1ZVxuICAgICAgICBpZiAoIXRoaXMuaW5pdGlhbFZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmluaXRpYWxWYWx1ZSA9IHByb3AuZ2V0U3RyaW5nKCk7XG4gICAgICAgICAgICB0aGlzLmluaXRpYWxVbml0cyA9IHByb3AuZ2V0VW5pdHMoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiB3ZSdyZSBwYXN0IHRoZSBlbmQgdGltZVxuICAgICAgICBpZiAodGhpcy5kdXJhdGlvbiA+IHRoaXMubWF4RHVyYXRpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGwgPSB0aGlzLmdldEF0dHJpYnV0ZSgnZmlsbCcpLmdldFN0cmluZygncmVtb3ZlJyk7XG4gICAgICAgICAgICAvLyBsb29wIGZvciBpbmRlZmluaXRlbHkgcmVwZWF0aW5nIGFuaW1hdGlvbnNcbiAgICAgICAgICAgIGlmICh0aGlzLmdldEF0dHJpYnV0ZSgncmVwZWF0Q291bnQnKS5nZXRTdHJpbmcoKSA9PT0gJ2luZGVmaW5pdGUnIHx8IHRoaXMuZ2V0QXR0cmlidXRlKCdyZXBlYXREdXInKS5nZXRTdHJpbmcoKSA9PT0gJ2luZGVmaW5pdGUnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kdXJhdGlvbiA9IDA7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZpbGwgPT09ICdmcmVlemUnICYmICF0aGlzLmZyb3plbikge1xuICAgICAgICAgICAgICAgIHRoaXMuZnJvemVuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50ICYmIHByb3ApIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50LmFuaW1hdGlvbkZyb3plbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudC5hbmltYXRpb25Gcm96ZW5WYWx1ZSA9IHByb3AuZ2V0U3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChmaWxsID09PSAncmVtb3ZlJyAmJiAhdGhpcy5yZW1vdmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50ICYmIHByb3ApIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcC5zZXRWYWx1ZShwYXJlbnQuYW5pbWF0aW9uRnJvemVuID8gcGFyZW50LmFuaW1hdGlvbkZyb3plblZhbHVlIDogdGhpcy5pbml0aWFsVmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmR1cmF0aW9uICs9IGRlbHRhO1xuICAgICAgICAvLyBpZiB3ZSdyZSBwYXN0IHRoZSBiZWdpbiB0aW1lXG4gICAgICAgIGxldCB1cGRhdGVkID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLmJlZ2luIDwgdGhpcy5kdXJhdGlvbikge1xuICAgICAgICAgICAgbGV0IG5ld1ZhbHVlID0gdGhpcy5jYWxjVmFsdWUoKSAvLyB0d2VlblxuICAgICAgICAgICAgO1xuICAgICAgICAgICAgY29uc3QgdHlwZUF0dHIgPSB0aGlzLmdldEF0dHJpYnV0ZSgndHlwZScpO1xuICAgICAgICAgICAgaWYgKHR5cGVBdHRyLmhhc1ZhbHVlKCkpIHtcbiAgICAgICAgICAgICAgICAvLyBmb3IgdHJhbnNmb3JtLCBldGMuXG4gICAgICAgICAgICAgICAgY29uc3QgdHlwZSA9IHR5cGVBdHRyLmdldFN0cmluZygpO1xuICAgICAgICAgICAgICAgIG5ld1ZhbHVlID0gXCJcIi5jb25jYXQodHlwZSwgXCIoXCIpLmNvbmNhdChuZXdWYWx1ZSwgXCIpXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcHJvcC5zZXRWYWx1ZShuZXdWYWx1ZSk7XG4gICAgICAgICAgICB1cGRhdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdXBkYXRlZDtcbiAgICB9XG4gICAgZ2V0UHJvZ3Jlc3MoKSB7XG4gICAgICAgIGNvbnN0IHsgZG9jdW1lbnQgLCB2YWx1ZXMgIH0gPSB0aGlzO1xuICAgICAgICBsZXQgcHJvZ3Jlc3MgPSAodGhpcy5kdXJhdGlvbiAtIHRoaXMuYmVnaW4pIC8gKHRoaXMubWF4RHVyYXRpb24gLSB0aGlzLmJlZ2luKTtcbiAgICAgICAgbGV0IGZyb207XG4gICAgICAgIGxldCB0bztcbiAgICAgICAgaWYgKHZhbHVlcy5oYXNWYWx1ZSgpKSB7XG4gICAgICAgICAgICBjb25zdCBwID0gcHJvZ3Jlc3MgKiAodmFsdWVzLmdldFZhbHVlKCkubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICBjb25zdCBsYiA9IE1hdGguZmxvb3IocCk7XG4gICAgICAgICAgICBjb25zdCB1YiA9IE1hdGguY2VpbChwKTtcbiAgICAgICAgICAgIGxldCB2YWx1ZTtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWVzLmdldFZhbHVlKClbbGJdO1xuICAgICAgICAgICAgZnJvbSA9IG5ldyBQcm9wZXJ0eShkb2N1bWVudCwgJ2Zyb20nLCB2YWx1ZSA/IHBhcnNlRmxvYXQodmFsdWUpIDogMCk7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlcy5nZXRWYWx1ZSgpW3ViXTtcbiAgICAgICAgICAgIHRvID0gbmV3IFByb3BlcnR5KGRvY3VtZW50LCAndG8nLCB2YWx1ZSA/IHBhcnNlRmxvYXQodmFsdWUpIDogMCk7XG4gICAgICAgICAgICBwcm9ncmVzcyA9IChwIC0gbGIpIC8gKHViIC0gbGIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZnJvbSA9IHRoaXMuZnJvbTtcbiAgICAgICAgICAgIHRvID0gdGhpcy50bztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJvZ3Jlc3MsXG4gICAgICAgICAgICBmcm9tLFxuICAgICAgICAgICAgdG9cbiAgICAgICAgfTtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoZG9jdW1lbnQsIG5vZGUsIGNhcHR1cmVUZXh0Tm9kZXMpe1xuICAgICAgICBzdXBlcihkb2N1bWVudCwgbm9kZSwgY2FwdHVyZVRleHROb2Rlcyk7XG4gICAgICAgIHRoaXMudHlwZSA9ICdhbmltYXRlJztcbiAgICAgICAgdGhpcy5kdXJhdGlvbiA9IDA7XG4gICAgICAgIHRoaXMuaW5pdGlhbFVuaXRzID0gJyc7XG4gICAgICAgIHRoaXMucmVtb3ZlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmZyb3plbiA9IGZhbHNlO1xuICAgICAgICBkb2N1bWVudC5zY3JlZW4uYW5pbWF0aW9ucy5wdXNoKHRoaXMpO1xuICAgICAgICB0aGlzLmJlZ2luID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ2JlZ2luJykuZ2V0TWlsbGlzZWNvbmRzKCk7XG4gICAgICAgIHRoaXMubWF4RHVyYXRpb24gPSB0aGlzLmJlZ2luICsgdGhpcy5nZXRBdHRyaWJ1dGUoJ2R1cicpLmdldE1pbGxpc2Vjb25kcygpO1xuICAgICAgICB0aGlzLmZyb20gPSB0aGlzLmdldEF0dHJpYnV0ZSgnZnJvbScpO1xuICAgICAgICB0aGlzLnRvID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ3RvJyk7XG4gICAgICAgIHRoaXMudmFsdWVzID0gbmV3IFByb3BlcnR5KGRvY3VtZW50LCAndmFsdWVzJywgbnVsbCk7XG4gICAgICAgIGNvbnN0IHZhbHVlc0F0dHIgPSB0aGlzLmdldEF0dHJpYnV0ZSgndmFsdWVzJyk7XG4gICAgICAgIGlmICh2YWx1ZXNBdHRyLmhhc1ZhbHVlKCkpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWVzLnNldFZhbHVlKHZhbHVlc0F0dHIuZ2V0U3RyaW5nKCkuc3BsaXQoJzsnKSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIEFuaW1hdGVDb2xvckVsZW1lbnQgZXh0ZW5kcyBBbmltYXRlRWxlbWVudCB7XG4gICAgY2FsY1ZhbHVlKCkge1xuICAgICAgICBjb25zdCB7IHByb2dyZXNzICwgZnJvbSAsIHRvICB9ID0gdGhpcy5nZXRQcm9ncmVzcygpO1xuICAgICAgICBjb25zdCBjb2xvckZyb20gPSBuZXcgUkdCQ29sb3IoZnJvbS5nZXRDb2xvcigpKTtcbiAgICAgICAgY29uc3QgY29sb3JUbyA9IG5ldyBSR0JDb2xvcih0by5nZXRDb2xvcigpKTtcbiAgICAgICAgaWYgKGNvbG9yRnJvbS5vayAmJiBjb2xvclRvLm9rKSB7XG4gICAgICAgICAgICAvLyB0d2VlbiBjb2xvciBsaW5lYXJseVxuICAgICAgICAgICAgY29uc3QgciA9IGNvbG9yRnJvbS5yICsgKGNvbG9yVG8uciAtIGNvbG9yRnJvbS5yKSAqIHByb2dyZXNzO1xuICAgICAgICAgICAgY29uc3QgZyA9IGNvbG9yRnJvbS5nICsgKGNvbG9yVG8uZyAtIGNvbG9yRnJvbS5nKSAqIHByb2dyZXNzO1xuICAgICAgICAgICAgY29uc3QgYiA9IGNvbG9yRnJvbS5iICsgKGNvbG9yVG8uYiAtIGNvbG9yRnJvbS5iKSAqIHByb2dyZXNzO1xuICAgICAgICAgICAgLy8gPyBhbHBoYVxuICAgICAgICAgICAgcmV0dXJuIFwicmdiKFwiLmNvbmNhdChNYXRoLmZsb29yKHIpLCBcIiwgXCIpLmNvbmNhdChNYXRoLmZsb29yKGcpLCBcIiwgXCIpLmNvbmNhdChNYXRoLmZsb29yKGIpLCBcIilcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QXR0cmlidXRlKCdmcm9tJykuZ2V0Q29sb3IoKTtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoLi4uYXJncyl7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3MpO1xuICAgICAgICB0aGlzLnR5cGUgPSAnYW5pbWF0ZUNvbG9yJztcbiAgICB9XG59XG5cbmNsYXNzIEFuaW1hdGVUcmFuc2Zvcm1FbGVtZW50IGV4dGVuZHMgQW5pbWF0ZUVsZW1lbnQge1xuICAgIGNhbGNWYWx1ZSgpIHtcbiAgICAgICAgY29uc3QgeyBwcm9ncmVzcyAsIGZyb206IGZyb20xICwgdG86IHRvMSAgfSA9IHRoaXMuZ2V0UHJvZ3Jlc3MoKTtcbiAgICAgICAgLy8gdHdlZW4gdmFsdWUgbGluZWFybHlcbiAgICAgICAgY29uc3QgdHJhbnNmb3JtRnJvbSA9IHRvTnVtYmVycyhmcm9tMS5nZXRTdHJpbmcoKSk7XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybVRvID0gdG9OdW1iZXJzKHRvMS5nZXRTdHJpbmcoKSk7XG4gICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gdHJhbnNmb3JtRnJvbS5tYXAoKGZyb20sIGkpPT57XG4gICAgICAgICAgICBjb25zdCB0byA9IHRyYW5zZm9ybVRvW2ldO1xuICAgICAgICAgICAgcmV0dXJuIGZyb20gKyAodG8gLSBmcm9tKSAqIHByb2dyZXNzO1xuICAgICAgICB9KS5qb2luKCcgJyk7XG4gICAgICAgIHJldHVybiBuZXdWYWx1ZTtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoLi4uYXJncyl7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3MpO1xuICAgICAgICB0aGlzLnR5cGUgPSAnYW5pbWF0ZVRyYW5zZm9ybSc7XG4gICAgfVxufVxuXG5jbGFzcyBGb250RmFjZUVsZW1lbnQgZXh0ZW5kcyBFbGVtZW50IHtcbiAgICBjb25zdHJ1Y3Rvcihkb2N1bWVudCwgbm9kZSwgY2FwdHVyZVRleHROb2Rlcyl7XG4gICAgICAgIHN1cGVyKGRvY3VtZW50LCBub2RlLCBjYXB0dXJlVGV4dE5vZGVzKTtcbiAgICAgICAgdGhpcy50eXBlID0gJ2ZvbnQtZmFjZSc7XG4gICAgICAgIHRoaXMuYXNjZW50ID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ2FzY2VudCcpLmdldE51bWJlcigpO1xuICAgICAgICB0aGlzLmRlc2NlbnQgPSB0aGlzLmdldEF0dHJpYnV0ZSgnZGVzY2VudCcpLmdldE51bWJlcigpO1xuICAgICAgICB0aGlzLnVuaXRzUGVyRW0gPSB0aGlzLmdldEF0dHJpYnV0ZSgndW5pdHMtcGVyLWVtJykuZ2V0TnVtYmVyKCk7XG4gICAgfVxufVxuXG5jbGFzcyBHbHlwaEVsZW1lbnQgZXh0ZW5kcyBQYXRoRWxlbWVudCB7XG4gICAgY29uc3RydWN0b3IoZG9jdW1lbnQsIG5vZGUsIGNhcHR1cmVUZXh0Tm9kZXMpe1xuICAgICAgICBzdXBlcihkb2N1bWVudCwgbm9kZSwgY2FwdHVyZVRleHROb2Rlcyk7XG4gICAgICAgIHRoaXMudHlwZSA9ICdnbHlwaCc7XG4gICAgICAgIHRoaXMuaG9yaXpBZHZYID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ2hvcml6LWFkdi14JykuZ2V0TnVtYmVyKCk7XG4gICAgICAgIHRoaXMudW5pY29kZSA9IHRoaXMuZ2V0QXR0cmlidXRlKCd1bmljb2RlJykuZ2V0U3RyaW5nKCk7XG4gICAgICAgIHRoaXMuYXJhYmljRm9ybSA9IHRoaXMuZ2V0QXR0cmlidXRlKCdhcmFiaWMtZm9ybScpLmdldFN0cmluZygpO1xuICAgIH1cbn1cblxuY2xhc3MgTWlzc2luZ0dseXBoRWxlbWVudCBleHRlbmRzIEdseXBoRWxlbWVudCB7XG4gICAgY29uc3RydWN0b3IoLi4uYXJncyl7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3MpO1xuICAgICAgICB0aGlzLnR5cGUgPSAnbWlzc2luZy1nbHlwaCc7XG4gICAgICAgIHRoaXMuaG9yaXpBZHZYID0gMDtcbiAgICB9XG59XG5cbmNsYXNzIEZvbnRFbGVtZW50IGV4dGVuZHMgRWxlbWVudCB7XG4gICAgcmVuZGVyKCkge1xuICAgIC8vIE5PIFJFTkRFUlxuICAgIH1cbiAgICBjb25zdHJ1Y3Rvcihkb2N1bWVudCwgbm9kZSwgY2FwdHVyZVRleHROb2Rlcyl7XG4gICAgICAgIHN1cGVyKGRvY3VtZW50LCBub2RlLCBjYXB0dXJlVGV4dE5vZGVzKTtcbiAgICAgICAgdGhpcy50eXBlID0gJ2ZvbnQnO1xuICAgICAgICB0aGlzLmlzQXJhYmljID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZ2x5cGhzID0ge307XG4gICAgICAgIHRoaXMuYXJhYmljR2x5cGhzID0ge307XG4gICAgICAgIHRoaXMuaXNSVEwgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5ob3JpekFkdlggPSB0aGlzLmdldEF0dHJpYnV0ZSgnaG9yaXotYWR2LXgnKS5nZXROdW1iZXIoKTtcbiAgICAgICAgY29uc3QgeyBkZWZpbml0aW9ucyAgfSA9IGRvY3VtZW50O1xuICAgICAgICBjb25zdCB7IGNoaWxkcmVuICB9ID0gdGhpcztcbiAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbil7XG4gICAgICAgICAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBGb250RmFjZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvbnRGYWNlID0gY2hpbGQ7XG4gICAgICAgICAgICAgICAgY29uc3QgZm9udEZhbWlseVN0eWxlID0gY2hpbGQuZ2V0U3R5bGUoJ2ZvbnQtZmFtaWx5Jyk7XG4gICAgICAgICAgICAgICAgaWYgKGZvbnRGYW1pbHlTdHlsZS5oYXNWYWx1ZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlZmluaXRpb25zW2ZvbnRGYW1pbHlTdHlsZS5nZXRTdHJpbmcoKV0gPSB0aGlzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hpbGQgaW5zdGFuY2VvZiBNaXNzaW5nR2x5cGhFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5taXNzaW5nR2x5cGggPSBjaGlsZDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hpbGQgaW5zdGFuY2VvZiBHbHlwaEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGQuYXJhYmljRm9ybSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzUlRMID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0FyYWJpYyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFyYWJpY0dseXBoID0gdGhpcy5hcmFiaWNHbHlwaHNbY2hpbGQudW5pY29kZV07XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYXJhYmljR2x5cGggPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFyYWJpY0dseXBoc1tjaGlsZC51bmljb2RlXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hpbGQuYXJhYmljRm9ybV06IGNoaWxkXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJhYmljR2x5cGhbY2hpbGQuYXJhYmljRm9ybV0gPSBjaGlsZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2x5cGhzW2NoaWxkLnVuaWNvZGVdID0gY2hpbGQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBUUmVmRWxlbWVudCBleHRlbmRzIFRleHRFbGVtZW50IHtcbiAgICBnZXRUZXh0KCkge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5nZXRIcmVmQXR0cmlidXRlKCkuZ2V0RGVmaW5pdGlvbigpO1xuICAgICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICAgICAgY29uc3QgZmlyc3RDaGlsZCA9IGVsZW1lbnQuY2hpbGRyZW5bMF07XG4gICAgICAgICAgICBpZiAoZmlyc3RDaGlsZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdENoaWxkLmdldFRleHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKC4uLmFyZ3Mpe1xuICAgICAgICBzdXBlciguLi5hcmdzKTtcbiAgICAgICAgdGhpcy50eXBlID0gJ3RyZWYnO1xuICAgIH1cbn1cblxuY2xhc3MgQUVsZW1lbnQgZXh0ZW5kcyBUZXh0RWxlbWVudCB7XG4gICAgZ2V0VGV4dCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGV4dDtcbiAgICB9XG4gICAgcmVuZGVyQ2hpbGRyZW4oY3R4KSB7XG4gICAgICAgIGlmICh0aGlzLmhhc1RleHQpIHtcbiAgICAgICAgICAgIC8vIHJlbmRlciBhcyB0ZXh0IGVsZW1lbnRcbiAgICAgICAgICAgIHN1cGVyLnJlbmRlckNoaWxkcmVuKGN0eCk7XG4gICAgICAgICAgICBjb25zdCB7IGRvY3VtZW50ICwgeCAsIHkgIH0gPSB0aGlzO1xuICAgICAgICAgICAgY29uc3QgeyBtb3VzZSAgfSA9IGRvY3VtZW50LnNjcmVlbjtcbiAgICAgICAgICAgIGNvbnN0IGZvbnRTaXplID0gbmV3IFByb3BlcnR5KGRvY3VtZW50LCAnZm9udFNpemUnLCBGb250LnBhcnNlKGRvY3VtZW50LmN0eC5mb250KS5mb250U2l6ZSk7XG4gICAgICAgICAgICAvLyBEbyBub3QgY2FsYyBib3VuZGluZyBib3ggaWYgbW91c2UgaXMgbm90IHdvcmtpbmcuXG4gICAgICAgICAgICBpZiAobW91c2UuaXNXb3JraW5nKCkpIHtcbiAgICAgICAgICAgICAgICBtb3VzZS5jaGVja0JvdW5kaW5nQm94KHRoaXMsIG5ldyBCb3VuZGluZ0JveCh4LCB5IC0gZm9udFNpemUuZ2V0UGl4ZWxzKCd5JyksIHggKyB0aGlzLm1lYXN1cmVUZXh0KGN0eCksIHkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIC8vIHJlbmRlciBhcyB0ZW1wb3JhcnkgZ3JvdXBcbiAgICAgICAgICAgIGNvbnN0IGcgPSBuZXcgR0VsZW1lbnQodGhpcy5kb2N1bWVudCk7XG4gICAgICAgICAgICBnLmNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbjtcbiAgICAgICAgICAgIGcucGFyZW50ID0gdGhpcztcbiAgICAgICAgICAgIGcucmVuZGVyKGN0eCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgb25DbGljaygpIHtcbiAgICAgICAgY29uc3QgeyB3aW5kb3cgIH0gPSB0aGlzLmRvY3VtZW50O1xuICAgICAgICBpZiAod2luZG93KSB7XG4gICAgICAgICAgICB3aW5kb3cub3Blbih0aGlzLmdldEhyZWZBdHRyaWJ1dGUoKS5nZXRTdHJpbmcoKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgb25Nb3VzZU1vdmUoKSB7XG4gICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuZG9jdW1lbnQuY3R4O1xuICAgICAgICBjdHguY2FudmFzLnN0eWxlLmN1cnNvciA9ICdwb2ludGVyJztcbiAgICB9XG4gICAgY29uc3RydWN0b3IoZG9jdW1lbnQsIG5vZGUxLCBjYXB0dXJlVGV4dE5vZGVzKXtcbiAgICAgICAgc3VwZXIoZG9jdW1lbnQsIG5vZGUxLCBjYXB0dXJlVGV4dE5vZGVzKTtcbiAgICAgICAgdGhpcy50eXBlID0gJ2EnO1xuICAgICAgICBjb25zdCB7IGNoaWxkTm9kZXMgIH0gPSBub2RlMTtcbiAgICAgICAgY29uc3QgZmlyc3RDaGlsZCA9IGNoaWxkTm9kZXNbMF07XG4gICAgICAgIGNvbnN0IGhhc1RleHQgPSBjaGlsZE5vZGVzLmxlbmd0aCA+IDAgJiYgQXJyYXkuZnJvbShjaGlsZE5vZGVzKS5ldmVyeSgobm9kZSk9Pm5vZGUubm9kZVR5cGUgPT09IDNcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5oYXNUZXh0ID0gaGFzVGV4dDtcbiAgICAgICAgdGhpcy50ZXh0ID0gaGFzVGV4dCA/IHRoaXMuZ2V0VGV4dEZyb21Ob2RlKGZpcnN0Q2hpbGQpIDogJyc7XG4gICAgfVxufVxuXG5jbGFzcyBUZXh0UGF0aEVsZW1lbnQgZXh0ZW5kcyBUZXh0RWxlbWVudCB7XG4gICAgZ2V0VGV4dCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGV4dDtcbiAgICB9XG4gICAgcGF0aChjdHgpIHtcbiAgICAgICAgY29uc3QgeyBkYXRhQXJyYXkgIH0gPSB0aGlzO1xuICAgICAgICBpZiAoY3R4KSB7XG4gICAgICAgICAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZGF0YUFycmF5LmZvckVhY2goKHBhcmFtKT0+e1xuICAgICAgICAgICAgbGV0IHsgdHlwZSAsIHBvaW50cyAgfSA9IHBhcmFtO1xuICAgICAgICAgICAgc3dpdGNoKHR5cGUpe1xuICAgICAgICAgICAgICAgIGNhc2UgUGF0aFBhcnNlci5MSU5FX1RPOlxuICAgICAgICAgICAgICAgICAgICBpZiAoY3R4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdHgubGluZVRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFBhdGhQYXJzZXIuTU9WRV9UTzpcbiAgICAgICAgICAgICAgICAgICAgaWYgKGN0eCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3R4Lm1vdmVUbyhwb2ludHNbMF0sIHBvaW50c1sxXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBQYXRoUGFyc2VyLkNVUlZFX1RPOlxuICAgICAgICAgICAgICAgICAgICBpZiAoY3R4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdHguYmV6aWVyQ3VydmVUbyhwb2ludHNbMF0sIHBvaW50c1sxXSwgcG9pbnRzWzJdLCBwb2ludHNbM10sIHBvaW50c1s0XSwgcG9pbnRzWzVdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFBhdGhQYXJzZXIuUVVBRF9UTzpcbiAgICAgICAgICAgICAgICAgICAgaWYgKGN0eCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnF1YWRyYXRpY0N1cnZlVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0sIHBvaW50c1syXSwgcG9pbnRzWzNdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFBhdGhQYXJzZXIuQVJDOlxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBbY3gsIGN5LCByeCwgcnksIHRoZXRhLCBkVGhldGEsIHBzaSwgZnNdID0gcG9pbnRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgciA9IHJ4ID4gcnkgPyByeCA6IHJ5O1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2NhbGVYID0gcnggPiByeSA/IDEgOiByeCAvIHJ5O1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2NhbGVZID0gcnggPiByeSA/IHJ5IC8gcnggOiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN0eCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC50cmFuc2xhdGUoY3gsIGN5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgucm90YXRlKHBzaSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnNjYWxlKHNjYWxlWCwgc2NhbGVZKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguYXJjKDAsIDAsIHIsIHRoZXRhLCB0aGV0YSArIGRUaGV0YSwgQm9vbGVhbigxIC0gZnMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguc2NhbGUoMSAvIHNjYWxlWCwgMSAvIHNjYWxlWSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnJvdGF0ZSgtcHNpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgudHJhbnNsYXRlKC1jeCwgLWN5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSBQYXRoUGFyc2VyLkNMT1NFX1BBVEg6XG4gICAgICAgICAgICAgICAgICAgIGlmIChjdHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJlbmRlckNoaWxkcmVuKGN0eCkge1xuICAgICAgICB0aGlzLnNldFRleHREYXRhKGN0eCk7XG4gICAgICAgIGN0eC5zYXZlKCk7XG4gICAgICAgIGNvbnN0IHRleHREZWNvcmF0aW9uID0gdGhpcy5wYXJlbnQuZ2V0U3R5bGUoJ3RleHQtZGVjb3JhdGlvbicpLmdldFN0cmluZygpO1xuICAgICAgICBjb25zdCBmb250U2l6ZSA9IHRoaXMuZ2V0Rm9udFNpemUoKTtcbiAgICAgICAgY29uc3QgeyBnbHlwaEluZm8gIH0gPSB0aGlzO1xuICAgICAgICBjb25zdCBmaWxsID0gY3R4LmZpbGxTdHlsZTtcbiAgICAgICAgaWYgKHRleHREZWNvcmF0aW9uID09PSAndW5kZXJsaW5lJykge1xuICAgICAgICAgICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgICB9XG4gICAgICAgIGdseXBoSW5mby5mb3JFYWNoKChnbHlwaCwgaSk9PntcbiAgICAgICAgICAgIGNvbnN0IHsgcDAgLCBwMSAsIHJvdGF0aW9uICwgdGV4dDogcGFydGlhbFRleHQgIH0gPSBnbHlwaDtcbiAgICAgICAgICAgIGN0eC5zYXZlKCk7XG4gICAgICAgICAgICBjdHgudHJhbnNsYXRlKHAwLngsIHAwLnkpO1xuICAgICAgICAgICAgY3R4LnJvdGF0ZShyb3RhdGlvbik7XG4gICAgICAgICAgICBpZiAoY3R4LmZpbGxTdHlsZSkge1xuICAgICAgICAgICAgICAgIGN0eC5maWxsVGV4dChwYXJ0aWFsVGV4dCwgMCwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY3R4LnN0cm9rZVN0eWxlKSB7XG4gICAgICAgICAgICAgICAgY3R4LnN0cm9rZVRleHQocGFydGlhbFRleHQsIDAsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY3R4LnJlc3RvcmUoKTtcbiAgICAgICAgICAgIGlmICh0ZXh0RGVjb3JhdGlvbiA9PT0gJ3VuZGVybGluZScpIHtcbiAgICAgICAgICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBjdHgubW92ZVRvKHAwLngsIHAwLnkgKyBmb250U2l6ZSAvIDgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjdHgubGluZVRvKHAxLngsIHAxLnkgKyBmb250U2l6ZSAvIDUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAvLyAvLyBUbyBhc3Npc3Qgd2l0aCBkZWJ1Z2dpbmcgdmlzdWFsbHksIHVuY29tbWVudCBmb2xsb3dpbmdcbiAgICAgICAgLy9cbiAgICAgICAgLy8gY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgICAvLyBpZiAoaSAlIDIpXG4gICAgICAgIC8vICAgY3R4LnN0cm9rZVN0eWxlID0gJ3JlZCc7XG4gICAgICAgIC8vIGVsc2VcbiAgICAgICAgLy8gICBjdHguc3Ryb2tlU3R5bGUgPSAnZ3JlZW4nO1xuICAgICAgICAvLyBjdHgubW92ZVRvKHAwLngsIHAwLnkpO1xuICAgICAgICAvLyBjdHgubGluZVRvKHAxLngsIHAxLnkpO1xuICAgICAgICAvLyBjdHguc3Ryb2tlKCk7XG4gICAgICAgIC8vIGN0eC5jbG9zZVBhdGgoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh0ZXh0RGVjb3JhdGlvbiA9PT0gJ3VuZGVybGluZScpIHtcbiAgICAgICAgICAgIGN0eC5saW5lV2lkdGggPSBmb250U2l6ZSAvIDIwO1xuICAgICAgICAgICAgY3R4LnN0cm9rZVN0eWxlID0gZmlsbDtcbiAgICAgICAgICAgIGN0eC5zdHJva2UoKTtcbiAgICAgICAgICAgIGN0eC5jbG9zZVBhdGgoKTtcbiAgICAgICAgfVxuICAgICAgICBjdHgucmVzdG9yZSgpO1xuICAgIH1cbiAgICBnZXRMZXR0ZXJTcGFjaW5nQXQoKSB7XG4gICAgICAgIGxldCBpZHggPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHZvaWQgMCA/IGFyZ3VtZW50c1swXSA6IDA7XG4gICAgICAgIHJldHVybiB0aGlzLmxldHRlclNwYWNpbmdDYWNoZVtpZHhdIHx8IDA7XG4gICAgfVxuICAgIGZpbmRTZWdtZW50VG9GaXRDaGFyKGN0eCwgYW5jaG9yLCB0ZXh0RnVsbFdpZHRoLCBmdWxsUGF0aFdpZHRoLCBzcGFjZXNOdW1iZXIsIGlucHV0T2Zmc2V0LCBkeSwgYywgY2hhckkpIHtcbiAgICAgICAgbGV0IG9mZnNldCA9IGlucHV0T2Zmc2V0O1xuICAgICAgICBsZXQgZ2x5cGhXaWR0aCA9IHRoaXMubWVhc3VyZVRleHQoY3R4LCBjKTtcbiAgICAgICAgaWYgKGMgPT09ICcgJyAmJiBhbmNob3IgPT09ICdqdXN0aWZ5JyAmJiB0ZXh0RnVsbFdpZHRoIDwgZnVsbFBhdGhXaWR0aCkge1xuICAgICAgICAgICAgZ2x5cGhXaWR0aCArPSAoZnVsbFBhdGhXaWR0aCAtIHRleHRGdWxsV2lkdGgpIC8gc3BhY2VzTnVtYmVyO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFySSA+IC0xKSB7XG4gICAgICAgICAgICBvZmZzZXQgKz0gdGhpcy5nZXRMZXR0ZXJTcGFjaW5nQXQoY2hhckkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNwbGluZVN0ZXAgPSB0aGlzLnRleHRIZWlnaHQgLyAyMDtcbiAgICAgICAgY29uc3QgcDAgPSB0aGlzLmdldEVxdWlkaXN0YW50UG9pbnRPblBhdGgob2Zmc2V0LCBzcGxpbmVTdGVwLCAwKTtcbiAgICAgICAgY29uc3QgcDEgPSB0aGlzLmdldEVxdWlkaXN0YW50UG9pbnRPblBhdGgob2Zmc2V0ICsgZ2x5cGhXaWR0aCwgc3BsaW5lU3RlcCwgMCk7XG4gICAgICAgIGNvbnN0IHNlZ21lbnQgPSB7XG4gICAgICAgICAgICBwMCxcbiAgICAgICAgICAgIHAxXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHJvdGF0aW9uID0gcDAgJiYgcDEgPyBNYXRoLmF0YW4yKHAxLnkgLSBwMC55LCBwMS54IC0gcDAueCkgOiAwO1xuICAgICAgICBpZiAoZHkpIHtcbiAgICAgICAgICAgIGNvbnN0IGR5WCA9IE1hdGguY29zKE1hdGguUEkgLyAyICsgcm90YXRpb24pICogZHk7XG4gICAgICAgICAgICBjb25zdCBkeVkgPSBNYXRoLmNvcygtcm90YXRpb24pICogZHk7XG4gICAgICAgICAgICBzZWdtZW50LnAwID0ge1xuICAgICAgICAgICAgICAgIC4uLnAwLFxuICAgICAgICAgICAgICAgIHg6IHAwLnggKyBkeVgsXG4gICAgICAgICAgICAgICAgeTogcDAueSArIGR5WVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHNlZ21lbnQucDEgPSB7XG4gICAgICAgICAgICAgICAgLi4ucDEsXG4gICAgICAgICAgICAgICAgeDogcDEueCArIGR5WCxcbiAgICAgICAgICAgICAgICB5OiBwMS55ICsgZHlZXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIG9mZnNldCArPSBnbHlwaFdpZHRoO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgb2Zmc2V0LFxuICAgICAgICAgICAgc2VnbWVudCxcbiAgICAgICAgICAgIHJvdGF0aW9uXG4gICAgICAgIH07XG4gICAgfVxuICAgIG1lYXN1cmVUZXh0KGN0eCwgdGV4dCkge1xuICAgICAgICBjb25zdCB7IG1lYXN1cmVzQ2FjaGUgIH0gPSB0aGlzO1xuICAgICAgICBjb25zdCB0YXJnZXRUZXh0ID0gdGV4dCB8fCB0aGlzLmdldFRleHQoKTtcbiAgICAgICAgaWYgKG1lYXN1cmVzQ2FjaGUuaGFzKHRhcmdldFRleHQpKSB7XG4gICAgICAgICAgICByZXR1cm4gbWVhc3VyZXNDYWNoZS5nZXQodGFyZ2V0VGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWVhc3VyZSA9IHRoaXMubWVhc3VyZVRhcmdldFRleHQoY3R4LCB0YXJnZXRUZXh0KTtcbiAgICAgICAgbWVhc3VyZXNDYWNoZS5zZXQodGFyZ2V0VGV4dCwgbWVhc3VyZSk7XG4gICAgICAgIHJldHVybiBtZWFzdXJlO1xuICAgIH1cbiAgICAvLyBUaGlzIG1ldGhvZCBzdXBwb3NlcyB3aGF0IGFsbCBjdXN0b20gZm9udHMgYWxyZWFkeSBsb2FkZWQuXG4gICAgLy8gSWYgc29tZSBmb250IHdpbGwgYmUgbG9hZGVkIGFmdGVyIHRoaXMgbWV0aG9kIGNhbGwsIDx0ZXh0UGF0aD4gd2lsbCBub3QgYmUgcmVuZGVyZWQgY29ycmVjdGx5LlxuICAgIC8vIFlvdSBuZWVkIHRvIGNhbGwgdGhpcyBtZXRob2QgbWFudWFsbHkgdG8gdXBkYXRlIGdseXBocyBjYWNoZS5cbiAgICBzZXRUZXh0RGF0YShjdHgpIHtcbiAgICAgICAgaWYgKHRoaXMuZ2x5cGhJbmZvKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVuZGVyVGV4dCA9IHRoaXMuZ2V0VGV4dCgpO1xuICAgICAgICBjb25zdCBjaGFycyA9IHJlbmRlclRleHQuc3BsaXQoJycpO1xuICAgICAgICBjb25zdCBzcGFjZXNOdW1iZXIgPSByZW5kZXJUZXh0LnNwbGl0KCcgJykubGVuZ3RoIC0gMTtcbiAgICAgICAgY29uc3QgZHggPSB0aGlzLnBhcmVudC5nZXRBdHRyaWJ1dGUoJ2R4Jykuc3BsaXQoKS5tYXAoKF8pPT5fLmdldFBpeGVscygneCcpXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGR5ID0gdGhpcy5wYXJlbnQuZ2V0QXR0cmlidXRlKCdkeScpLmdldFBpeGVscygneScpO1xuICAgICAgICBjb25zdCBhbmNob3IgPSB0aGlzLnBhcmVudC5nZXRTdHlsZSgndGV4dC1hbmNob3InKS5nZXRTdHJpbmcoJ3N0YXJ0Jyk7XG4gICAgICAgIGNvbnN0IHRoaXNTcGFjaW5nID0gdGhpcy5nZXRTdHlsZSgnbGV0dGVyLXNwYWNpbmcnKTtcbiAgICAgICAgY29uc3QgcGFyZW50U3BhY2luZyA9IHRoaXMucGFyZW50LmdldFN0eWxlKCdsZXR0ZXItc3BhY2luZycpO1xuICAgICAgICBsZXQgbGV0dGVyU3BhY2luZyA9IDA7XG4gICAgICAgIGlmICghdGhpc1NwYWNpbmcuaGFzVmFsdWUoKSB8fCB0aGlzU3BhY2luZy5nZXRWYWx1ZSgpID09PSAnaW5oZXJpdCcpIHtcbiAgICAgICAgICAgIGxldHRlclNwYWNpbmcgPSBwYXJlbnRTcGFjaW5nLmdldFBpeGVscygpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXNTcGFjaW5nLmhhc1ZhbHVlKCkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzU3BhY2luZy5nZXRWYWx1ZSgpICE9PSAnaW5pdGlhbCcgJiYgdGhpc1NwYWNpbmcuZ2V0VmFsdWUoKSAhPT0gJ3Vuc2V0Jykge1xuICAgICAgICAgICAgICAgIGxldHRlclNwYWNpbmcgPSB0aGlzU3BhY2luZy5nZXRQaXhlbHMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBmaWxsIGxldHRlci1zcGFjaW5nIGNhY2hlXG4gICAgICAgIGNvbnN0IGxldHRlclNwYWNpbmdDYWNoZSA9IFtdO1xuICAgICAgICBjb25zdCB0ZXh0TGVuID0gcmVuZGVyVGV4dC5sZW5ndGg7XG4gICAgICAgIHRoaXMubGV0dGVyU3BhY2luZ0NhY2hlID0gbGV0dGVyU3BhY2luZ0NhY2hlO1xuICAgICAgICBmb3IobGV0IGkxID0gMDsgaTEgPCB0ZXh0TGVuOyBpMSsrKXtcbiAgICAgICAgICAgIGxldHRlclNwYWNpbmdDYWNoZS5wdXNoKHR5cGVvZiBkeFtpMV0gIT09ICd1bmRlZmluZWQnID8gZHhbaTFdIDogbGV0dGVyU3BhY2luZyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZHhTdW0gPSBsZXR0ZXJTcGFjaW5nQ2FjaGUucmVkdWNlKChhY2MsIGN1ciwgaSk9PmkgPT09IDAgPyAwIDogYWNjICsgY3VyIHx8IDBcbiAgICAgICAgLCAwKTtcbiAgICAgICAgY29uc3QgdGV4dFdpZHRoID0gdGhpcy5tZWFzdXJlVGV4dChjdHgpO1xuICAgICAgICBjb25zdCB0ZXh0RnVsbFdpZHRoID0gTWF0aC5tYXgodGV4dFdpZHRoICsgZHhTdW0sIDApO1xuICAgICAgICB0aGlzLnRleHRXaWR0aCA9IHRleHRXaWR0aDtcbiAgICAgICAgdGhpcy50ZXh0SGVpZ2h0ID0gdGhpcy5nZXRGb250U2l6ZSgpO1xuICAgICAgICB0aGlzLmdseXBoSW5mbyA9IFtdO1xuICAgICAgICBjb25zdCBmdWxsUGF0aFdpZHRoID0gdGhpcy5nZXRQYXRoTGVuZ3RoKCk7XG4gICAgICAgIGNvbnN0IHN0YXJ0T2Zmc2V0ID0gdGhpcy5nZXRTdHlsZSgnc3RhcnRPZmZzZXQnKS5nZXROdW1iZXIoMCkgKiBmdWxsUGF0aFdpZHRoO1xuICAgICAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICAgICAgaWYgKGFuY2hvciA9PT0gJ21pZGRsZScgfHwgYW5jaG9yID09PSAnY2VudGVyJykge1xuICAgICAgICAgICAgb2Zmc2V0ID0gLXRleHRGdWxsV2lkdGggLyAyO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhbmNob3IgPT09ICdlbmQnIHx8IGFuY2hvciA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgICAgb2Zmc2V0ID0gLXRleHRGdWxsV2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgb2Zmc2V0ICs9IHN0YXJ0T2Zmc2V0O1xuICAgICAgICBjaGFycy5mb3JFYWNoKChjaGFyLCBpKT0+e1xuICAgICAgICAgICAgLy8gRmluZCBzdWNoIHNlZ21lbnQgd2hhdCBkaXN0YW5jZSBiZXR3ZWVuIHAwIGFuZCBwMSBpcyBhcHByb3guIHdpZHRoIG9mIGdseXBoXG4gICAgICAgICAgICBjb25zdCB7IG9mZnNldDogbmV4dE9mZnNldCAsIHNlZ21lbnQgLCByb3RhdGlvbiAgfSA9IHRoaXMuZmluZFNlZ21lbnRUb0ZpdENoYXIoY3R4LCBhbmNob3IsIHRleHRGdWxsV2lkdGgsIGZ1bGxQYXRoV2lkdGgsIHNwYWNlc051bWJlciwgb2Zmc2V0LCBkeSwgY2hhciwgaSk7XG4gICAgICAgICAgICBvZmZzZXQgPSBuZXh0T2Zmc2V0O1xuICAgICAgICAgICAgaWYgKCFzZWdtZW50LnAwIHx8ICFzZWdtZW50LnAxKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gY29uc3Qgd2lkdGggPSB0aGlzLmdldExpbmVMZW5ndGgoXG4gICAgICAgICAgICAvLyAgIHNlZ21lbnQucDAueCxcbiAgICAgICAgICAgIC8vICAgc2VnbWVudC5wMC55LFxuICAgICAgICAgICAgLy8gICBzZWdtZW50LnAxLngsXG4gICAgICAgICAgICAvLyAgIHNlZ21lbnQucDEueVxuICAgICAgICAgICAgLy8gKTtcbiAgICAgICAgICAgIC8vIE5vdGU6IFNpbmNlIGdseXBocyBhcmUgcmVuZGVyZWQgb25lIGF0IGEgdGltZSwgYW55IGtlcm5pbmcgcGFpciBkYXRhIGJ1aWx0IGludG8gdGhlIGZvbnQgd2lsbCBub3QgYmUgdXNlZC5cbiAgICAgICAgICAgIC8vIENhbiBmb3Jlc2VlIGhhdmluZyBhIHJvdWdoIHBhaXIgdGFibGUgYnVpbHQgaW4gdGhhdCB0aGUgZGV2ZWxvcGVyIGNhbiBvdmVycmlkZSBhcyBuZWVkZWQuXG4gICAgICAgICAgICAvLyBPciB1c2UgXCJkeFwiIGF0dHJpYnV0ZSBvZiB0aGUgPHRleHQ+IG5vZGUgYXMgYSBuYWl2ZSByZXBsYWNlbWVudFxuICAgICAgICAgICAgLy8gY29uc3Qga2VybiA9IDA7XG4gICAgICAgICAgICAvLyBwbGFjZWhvbGRlciBmb3IgZnV0dXJlIGltcGxlbWVudGF0aW9uXG4gICAgICAgICAgICAvLyBjb25zdCBtaWRwb2ludCA9IHRoaXMuZ2V0UG9pbnRPbkxpbmUoXG4gICAgICAgICAgICAvLyAgIGtlcm4gKyB3aWR0aCAvIDIuMCxcbiAgICAgICAgICAgIC8vICAgc2VnbWVudC5wMC54LCBzZWdtZW50LnAwLnksIHNlZ21lbnQucDEueCwgc2VnbWVudC5wMS55XG4gICAgICAgICAgICAvLyApO1xuICAgICAgICAgICAgdGhpcy5nbHlwaEluZm8ucHVzaCh7XG4gICAgICAgICAgICAgICAgLy8gdHJhbnNwb3NlWDogbWlkcG9pbnQueCxcbiAgICAgICAgICAgICAgICAvLyB0cmFuc3Bvc2VZOiBtaWRwb2ludC55LFxuICAgICAgICAgICAgICAgIHRleHQ6IGNoYXJzW2ldLFxuICAgICAgICAgICAgICAgIHAwOiBzZWdtZW50LnAwLFxuICAgICAgICAgICAgICAgIHAxOiBzZWdtZW50LnAxLFxuICAgICAgICAgICAgICAgIHJvdGF0aW9uXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHBhcnNlUGF0aERhdGEocGF0aCkge1xuICAgICAgICB0aGlzLnBhdGhMZW5ndGggPSAtMSAvLyByZXNldCBwYXRoIGxlbmd0aFxuICAgICAgICA7XG4gICAgICAgIGlmICghcGF0aCkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhdGhDb21tYW5kcyA9IFtdO1xuICAgICAgICBjb25zdCB7IHBhdGhQYXJzZXIgIH0gPSBwYXRoO1xuICAgICAgICBwYXRoUGFyc2VyLnJlc2V0KCk7XG4gICAgICAgIC8vIGNvbnZlcnQgbCwgSCwgaCwgViwgYW5kIHYgdG8gTFxuICAgICAgICB3aGlsZSghcGF0aFBhcnNlci5pc0VuZCgpKXtcbiAgICAgICAgICAgIGNvbnN0IHsgY3VycmVudCAgfSA9IHBhdGhQYXJzZXI7XG4gICAgICAgICAgICBjb25zdCBzdGFydFggPSBjdXJyZW50ID8gY3VycmVudC54IDogMDtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0WSA9IGN1cnJlbnQgPyBjdXJyZW50LnkgOiAwO1xuICAgICAgICAgICAgY29uc3QgY29tbWFuZCA9IHBhdGhQYXJzZXIubmV4dCgpO1xuICAgICAgICAgICAgbGV0IG5leHRDb21tYW5kVHlwZSA9IGNvbW1hbmQudHlwZTtcbiAgICAgICAgICAgIGxldCBwb2ludHMgPSBbXTtcbiAgICAgICAgICAgIHN3aXRjaChjb21tYW5kLnR5cGUpe1xuICAgICAgICAgICAgICAgIGNhc2UgUGF0aFBhcnNlci5NT1ZFX1RPOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhdGhNKHBhdGhQYXJzZXIsIHBvaW50cyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgUGF0aFBhcnNlci5MSU5FX1RPOlxuICAgICAgICAgICAgICAgICAgICBuZXh0Q29tbWFuZFR5cGUgPSB0aGlzLnBhdGhMKHBhdGhQYXJzZXIsIHBvaW50cyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgUGF0aFBhcnNlci5IT1JJWl9MSU5FX1RPOlxuICAgICAgICAgICAgICAgICAgICBuZXh0Q29tbWFuZFR5cGUgPSB0aGlzLnBhdGhIKHBhdGhQYXJzZXIsIHBvaW50cyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgUGF0aFBhcnNlci5WRVJUX0xJTkVfVE86XG4gICAgICAgICAgICAgICAgICAgIG5leHRDb21tYW5kVHlwZSA9IHRoaXMucGF0aFYocGF0aFBhcnNlciwgcG9pbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBQYXRoUGFyc2VyLkNVUlZFX1RPOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhdGhDKHBhdGhQYXJzZXIsIHBvaW50cyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgUGF0aFBhcnNlci5TTU9PVEhfQ1VSVkVfVE86XG4gICAgICAgICAgICAgICAgICAgIG5leHRDb21tYW5kVHlwZSA9IHRoaXMucGF0aFMocGF0aFBhcnNlciwgcG9pbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBQYXRoUGFyc2VyLlFVQURfVE86XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGF0aFEocGF0aFBhcnNlciwgcG9pbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBQYXRoUGFyc2VyLlNNT09USF9RVUFEX1RPOlxuICAgICAgICAgICAgICAgICAgICBuZXh0Q29tbWFuZFR5cGUgPSB0aGlzLnBhdGhUKHBhdGhQYXJzZXIsIHBvaW50cyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgUGF0aFBhcnNlci5BUkM6XG4gICAgICAgICAgICAgICAgICAgIHBvaW50cyA9IHRoaXMucGF0aEEocGF0aFBhcnNlcik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgUGF0aFBhcnNlci5DTE9TRV9QQVRIOlxuICAgICAgICAgICAgICAgICAgICBQYXRoRWxlbWVudC5wYXRoWihwYXRoUGFyc2VyKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY29tbWFuZC50eXBlICE9PSBQYXRoUGFyc2VyLkNMT1NFX1BBVEgpIHtcbiAgICAgICAgICAgICAgICBwYXRoQ29tbWFuZHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IG5leHRDb21tYW5kVHlwZSxcbiAgICAgICAgICAgICAgICAgICAgcG9pbnRzLFxuICAgICAgICAgICAgICAgICAgICBzdGFydDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogc3RhcnRYLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogc3RhcnRZXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHBhdGhMZW5ndGg6IHRoaXMuY2FsY0xlbmd0aChzdGFydFgsIHN0YXJ0WSwgbmV4dENvbW1hbmRUeXBlLCBwb2ludHMpXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHBhdGhDb21tYW5kcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogUGF0aFBhcnNlci5DTE9TRV9QQVRILFxuICAgICAgICAgICAgICAgICAgICBwb2ludHM6IFtdLFxuICAgICAgICAgICAgICAgICAgICBwYXRoTGVuZ3RoOiAwXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhdGhDb21tYW5kcztcbiAgICB9XG4gICAgcGF0aE0ocGF0aFBhcnNlciwgcG9pbnRzKSB7XG4gICAgICAgIGNvbnN0IHsgeCAsIHkgIH0gPSBQYXRoRWxlbWVudC5wYXRoTShwYXRoUGFyc2VyKS5wb2ludDtcbiAgICAgICAgcG9pbnRzLnB1c2goeCwgeSk7XG4gICAgfVxuICAgIHBhdGhMKHBhdGhQYXJzZXIsIHBvaW50cykge1xuICAgICAgICBjb25zdCB7IHggLCB5ICB9ID0gUGF0aEVsZW1lbnQucGF0aEwocGF0aFBhcnNlcikucG9pbnQ7XG4gICAgICAgIHBvaW50cy5wdXNoKHgsIHkpO1xuICAgICAgICByZXR1cm4gUGF0aFBhcnNlci5MSU5FX1RPO1xuICAgIH1cbiAgICBwYXRoSChwYXRoUGFyc2VyLCBwb2ludHMpIHtcbiAgICAgICAgY29uc3QgeyB4ICwgeSAgfSA9IFBhdGhFbGVtZW50LnBhdGhIKHBhdGhQYXJzZXIpLnBvaW50O1xuICAgICAgICBwb2ludHMucHVzaCh4LCB5KTtcbiAgICAgICAgcmV0dXJuIFBhdGhQYXJzZXIuTElORV9UTztcbiAgICB9XG4gICAgcGF0aFYocGF0aFBhcnNlciwgcG9pbnRzKSB7XG4gICAgICAgIGNvbnN0IHsgeCAsIHkgIH0gPSBQYXRoRWxlbWVudC5wYXRoVihwYXRoUGFyc2VyKS5wb2ludDtcbiAgICAgICAgcG9pbnRzLnB1c2goeCwgeSk7XG4gICAgICAgIHJldHVybiBQYXRoUGFyc2VyLkxJTkVfVE87XG4gICAgfVxuICAgIHBhdGhDKHBhdGhQYXJzZXIsIHBvaW50cykge1xuICAgICAgICBjb25zdCB7IHBvaW50ICwgY29udHJvbFBvaW50ICwgY3VycmVudFBvaW50ICB9ID0gUGF0aEVsZW1lbnQucGF0aEMocGF0aFBhcnNlcik7XG4gICAgICAgIHBvaW50cy5wdXNoKHBvaW50LngsIHBvaW50LnksIGNvbnRyb2xQb2ludC54LCBjb250cm9sUG9pbnQueSwgY3VycmVudFBvaW50LngsIGN1cnJlbnRQb2ludC55KTtcbiAgICB9XG4gICAgcGF0aFMocGF0aFBhcnNlciwgcG9pbnRzKSB7XG4gICAgICAgIGNvbnN0IHsgcG9pbnQgLCBjb250cm9sUG9pbnQgLCBjdXJyZW50UG9pbnQgIH0gPSBQYXRoRWxlbWVudC5wYXRoUyhwYXRoUGFyc2VyKTtcbiAgICAgICAgcG9pbnRzLnB1c2gocG9pbnQueCwgcG9pbnQueSwgY29udHJvbFBvaW50LngsIGNvbnRyb2xQb2ludC55LCBjdXJyZW50UG9pbnQueCwgY3VycmVudFBvaW50LnkpO1xuICAgICAgICByZXR1cm4gUGF0aFBhcnNlci5DVVJWRV9UTztcbiAgICB9XG4gICAgcGF0aFEocGF0aFBhcnNlciwgcG9pbnRzKSB7XG4gICAgICAgIGNvbnN0IHsgY29udHJvbFBvaW50ICwgY3VycmVudFBvaW50ICB9ID0gUGF0aEVsZW1lbnQucGF0aFEocGF0aFBhcnNlcik7XG4gICAgICAgIHBvaW50cy5wdXNoKGNvbnRyb2xQb2ludC54LCBjb250cm9sUG9pbnQueSwgY3VycmVudFBvaW50LngsIGN1cnJlbnRQb2ludC55KTtcbiAgICB9XG4gICAgcGF0aFQocGF0aFBhcnNlciwgcG9pbnRzKSB7XG4gICAgICAgIGNvbnN0IHsgY29udHJvbFBvaW50ICwgY3VycmVudFBvaW50ICB9ID0gUGF0aEVsZW1lbnQucGF0aFQocGF0aFBhcnNlcik7XG4gICAgICAgIHBvaW50cy5wdXNoKGNvbnRyb2xQb2ludC54LCBjb250cm9sUG9pbnQueSwgY3VycmVudFBvaW50LngsIGN1cnJlbnRQb2ludC55KTtcbiAgICAgICAgcmV0dXJuIFBhdGhQYXJzZXIuUVVBRF9UTztcbiAgICB9XG4gICAgcGF0aEEocGF0aFBhcnNlcikge1xuICAgICAgICBsZXQgeyByWCAsIHJZICwgc3dlZXBGbGFnICwgeEF4aXNSb3RhdGlvbiAsIGNlbnRwICwgYTEgLCBhZCAgfSA9IFBhdGhFbGVtZW50LnBhdGhBKHBhdGhQYXJzZXIpO1xuICAgICAgICBpZiAoc3dlZXBGbGFnID09PSAwICYmIGFkID4gMCkge1xuICAgICAgICAgICAgYWQgLT0gMiAqIE1hdGguUEk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN3ZWVwRmxhZyA9PT0gMSAmJiBhZCA8IDApIHtcbiAgICAgICAgICAgIGFkICs9IDIgKiBNYXRoLlBJO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBjZW50cC54LFxuICAgICAgICAgICAgY2VudHAueSxcbiAgICAgICAgICAgIHJYLFxuICAgICAgICAgICAgclksXG4gICAgICAgICAgICBhMSxcbiAgICAgICAgICAgIGFkLFxuICAgICAgICAgICAgeEF4aXNSb3RhdGlvbixcbiAgICAgICAgICAgIHN3ZWVwRmxhZ1xuICAgICAgICBdO1xuICAgIH1cbiAgICBjYWxjTGVuZ3RoKHgsIHksIGNvbW1hbmRUeXBlLCBwb2ludHMpIHtcbiAgICAgICAgbGV0IGxlbiA9IDA7XG4gICAgICAgIGxldCBwMSA9IG51bGw7XG4gICAgICAgIGxldCBwMiA9IG51bGw7XG4gICAgICAgIGxldCB0ID0gMDtcbiAgICAgICAgc3dpdGNoKGNvbW1hbmRUeXBlKXtcbiAgICAgICAgICAgIGNhc2UgUGF0aFBhcnNlci5MSU5FX1RPOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldExpbmVMZW5ndGgoeCwgeSwgcG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuICAgICAgICAgICAgY2FzZSBQYXRoUGFyc2VyLkNVUlZFX1RPOlxuICAgICAgICAgICAgICAgIC8vIEFwcHJveGltYXRlcyBieSBicmVha2luZyBjdXJ2ZSBpbnRvIDEwMCBsaW5lIHNlZ21lbnRzXG4gICAgICAgICAgICAgICAgbGVuID0gMDtcbiAgICAgICAgICAgICAgICBwMSA9IHRoaXMuZ2V0UG9pbnRPbkN1YmljQmV6aWVyKDAsIHgsIHksIHBvaW50c1swXSwgcG9pbnRzWzFdLCBwb2ludHNbMl0sIHBvaW50c1szXSwgcG9pbnRzWzRdLCBwb2ludHNbNV0pO1xuICAgICAgICAgICAgICAgIGZvcih0ID0gMC4wMTsgdCA8PSAxOyB0ICs9IDAuMDEpe1xuICAgICAgICAgICAgICAgICAgICBwMiA9IHRoaXMuZ2V0UG9pbnRPbkN1YmljQmV6aWVyKHQsIHgsIHksIHBvaW50c1swXSwgcG9pbnRzWzFdLCBwb2ludHNbMl0sIHBvaW50c1szXSwgcG9pbnRzWzRdLCBwb2ludHNbNV0pO1xuICAgICAgICAgICAgICAgICAgICBsZW4gKz0gdGhpcy5nZXRMaW5lTGVuZ3RoKHAxLngsIHAxLnksIHAyLngsIHAyLnkpO1xuICAgICAgICAgICAgICAgICAgICBwMSA9IHAyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbGVuO1xuICAgICAgICAgICAgY2FzZSBQYXRoUGFyc2VyLlFVQURfVE86XG4gICAgICAgICAgICAgICAgLy8gQXBwcm94aW1hdGVzIGJ5IGJyZWFraW5nIGN1cnZlIGludG8gMTAwIGxpbmUgc2VnbWVudHNcbiAgICAgICAgICAgICAgICBsZW4gPSAwO1xuICAgICAgICAgICAgICAgIHAxID0gdGhpcy5nZXRQb2ludE9uUXVhZHJhdGljQmV6aWVyKDAsIHgsIHksIHBvaW50c1swXSwgcG9pbnRzWzFdLCBwb2ludHNbMl0sIHBvaW50c1szXSk7XG4gICAgICAgICAgICAgICAgZm9yKHQgPSAwLjAxOyB0IDw9IDE7IHQgKz0gMC4wMSl7XG4gICAgICAgICAgICAgICAgICAgIHAyID0gdGhpcy5nZXRQb2ludE9uUXVhZHJhdGljQmV6aWVyKHQsIHgsIHksIHBvaW50c1swXSwgcG9pbnRzWzFdLCBwb2ludHNbMl0sIHBvaW50c1szXSk7XG4gICAgICAgICAgICAgICAgICAgIGxlbiArPSB0aGlzLmdldExpbmVMZW5ndGgocDEueCwgcDEueSwgcDIueCwgcDIueSk7XG4gICAgICAgICAgICAgICAgICAgIHAxID0gcDI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBsZW47XG4gICAgICAgICAgICBjYXNlIFBhdGhQYXJzZXIuQVJDOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQXBwcm94aW1hdGVzIGJ5IGJyZWFraW5nIGN1cnZlIGludG8gbGluZSBzZWdtZW50c1xuICAgICAgICAgICAgICAgICAgICBsZW4gPSAwO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFydCA9IHBvaW50c1s0XTtcbiAgICAgICAgICAgICAgICAgICAgLy8gNCA9IHRoZXRhXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRUaGV0YSA9IHBvaW50c1s1XTtcbiAgICAgICAgICAgICAgICAgICAgLy8gNSA9IGRUaGV0YVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSBwb2ludHNbNF0gKyBkVGhldGE7XG4gICAgICAgICAgICAgICAgICAgIGxldCBpbmMgPSBNYXRoLlBJIC8gMTgwO1xuICAgICAgICAgICAgICAgICAgICAvLyAxIGRlZ3JlZSByZXNvbHV0aW9uXG4gICAgICAgICAgICAgICAgICAgIGlmIChNYXRoLmFicyhzdGFydCAtIGVuZCkgPCBpbmMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluYyA9IE1hdGguYWJzKHN0YXJ0IC0gZW5kKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBOb3RlOiBmb3IgcHVycG9zZSBvZiBjYWxjdWxhdGluZyBhcmMgbGVuZ3RoLCBub3QgZ29pbmcgdG8gd29ycnkgYWJvdXQgcm90YXRpbmcgWC1heGlzIGJ5IGFuZ2xlIHBzaVxuICAgICAgICAgICAgICAgICAgICBwMSA9IHRoaXMuZ2V0UG9pbnRPbkVsbGlwdGljYWxBcmMocG9pbnRzWzBdLCBwb2ludHNbMV0sIHBvaW50c1syXSwgcG9pbnRzWzNdLCBzdGFydCwgMCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkVGhldGEgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IodCA9IHN0YXJ0IC0gaW5jOyB0ID4gZW5kOyB0IC09IGluYyl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcDIgPSB0aGlzLmdldFBvaW50T25FbGxpcHRpY2FsQXJjKHBvaW50c1swXSwgcG9pbnRzWzFdLCBwb2ludHNbMl0sIHBvaW50c1szXSwgdCwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuICs9IHRoaXMuZ2V0TGluZUxlbmd0aChwMS54LCBwMS55LCBwMi54LCBwMi55KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwMSA9IHAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yKHQgPSBzdGFydCArIGluYzsgdCA8IGVuZDsgdCArPSBpbmMpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAyID0gdGhpcy5nZXRQb2ludE9uRWxsaXB0aWNhbEFyYyhwb2ludHNbMF0sIHBvaW50c1sxXSwgcG9pbnRzWzJdLCBwb2ludHNbM10sIHQsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbiArPSB0aGlzLmdldExpbmVMZW5ndGgocDEueCwgcDEueSwgcDIueCwgcDIueSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcDEgPSBwMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBwMiA9IHRoaXMuZ2V0UG9pbnRPbkVsbGlwdGljYWxBcmMocG9pbnRzWzBdLCBwb2ludHNbMV0sIHBvaW50c1syXSwgcG9pbnRzWzNdLCBlbmQsIDApO1xuICAgICAgICAgICAgICAgICAgICBsZW4gKz0gdGhpcy5nZXRMaW5lTGVuZ3RoKHAxLngsIHAxLnksIHAyLngsIHAyLnkpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGVuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgZ2V0UG9pbnRPbkxpbmUoZGlzdCwgcDF4LCBwMXksIHAyeCwgcDJ5KSB7XG4gICAgICAgIGxldCBmcm9tWCA9IGFyZ3VtZW50cy5sZW5ndGggPiA1ICYmIGFyZ3VtZW50c1s1XSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzVdIDogcDF4LCBmcm9tWSA9IGFyZ3VtZW50cy5sZW5ndGggPiA2ICYmIGFyZ3VtZW50c1s2XSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzZdIDogcDF5O1xuICAgICAgICBjb25zdCBtID0gKHAyeSAtIHAxeSkgLyAocDJ4IC0gcDF4ICsgUFNFVURPX1pFUk8pO1xuICAgICAgICBsZXQgcnVuID0gTWF0aC5zcXJ0KGRpc3QgKiBkaXN0IC8gKDEgKyBtICogbSkpO1xuICAgICAgICBpZiAocDJ4IDwgcDF4KSB7XG4gICAgICAgICAgICBydW4gKj0gLTE7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJpc2UgPSBtICogcnVuO1xuICAgICAgICBsZXQgcHQgPSBudWxsO1xuICAgICAgICBpZiAocDJ4ID09PSBwMXgpIHtcbiAgICAgICAgICAgIHB0ID0ge1xuICAgICAgICAgICAgICAgIHg6IGZyb21YLFxuICAgICAgICAgICAgICAgIHk6IGZyb21ZICsgcmlzZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmICgoZnJvbVkgLSBwMXkpIC8gKGZyb21YIC0gcDF4ICsgUFNFVURPX1pFUk8pID09PSBtKSB7XG4gICAgICAgICAgICBwdCA9IHtcbiAgICAgICAgICAgICAgICB4OiBmcm9tWCArIHJ1bixcbiAgICAgICAgICAgICAgICB5OiBmcm9tWSArIHJpc2VcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgaXggPSAwO1xuICAgICAgICAgICAgbGV0IGl5ID0gMDtcbiAgICAgICAgICAgIGNvbnN0IGxlbiA9IHRoaXMuZ2V0TGluZUxlbmd0aChwMXgsIHAxeSwgcDJ4LCBwMnkpO1xuICAgICAgICAgICAgaWYgKGxlbiA8IFBTRVVET19aRVJPKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgdSA9IChmcm9tWCAtIHAxeCkgKiAocDJ4IC0gcDF4KSArIChmcm9tWSAtIHAxeSkgKiAocDJ5IC0gcDF5KTtcbiAgICAgICAgICAgIHUgLz0gbGVuICogbGVuO1xuICAgICAgICAgICAgaXggPSBwMXggKyB1ICogKHAyeCAtIHAxeCk7XG4gICAgICAgICAgICBpeSA9IHAxeSArIHUgKiAocDJ5IC0gcDF5KTtcbiAgICAgICAgICAgIGNvbnN0IHBSaXNlID0gdGhpcy5nZXRMaW5lTGVuZ3RoKGZyb21YLCBmcm9tWSwgaXgsIGl5KTtcbiAgICAgICAgICAgIGNvbnN0IHBSdW4gPSBNYXRoLnNxcnQoZGlzdCAqIGRpc3QgLSBwUmlzZSAqIHBSaXNlKTtcbiAgICAgICAgICAgIHJ1biA9IE1hdGguc3FydChwUnVuICogcFJ1biAvICgxICsgbSAqIG0pKTtcbiAgICAgICAgICAgIGlmIChwMnggPCBwMXgpIHtcbiAgICAgICAgICAgICAgICBydW4gKj0gLTE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByaXNlID0gbSAqIHJ1bjtcbiAgICAgICAgICAgIHB0ID0ge1xuICAgICAgICAgICAgICAgIHg6IGl4ICsgcnVuLFxuICAgICAgICAgICAgICAgIHk6IGl5ICsgcmlzZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHQ7XG4gICAgfVxuICAgIGdldFBvaW50T25QYXRoKGRpc3RhbmNlKSB7XG4gICAgICAgIGNvbnN0IGZ1bGxMZW4gPSB0aGlzLmdldFBhdGhMZW5ndGgoKTtcbiAgICAgICAgbGV0IGN1bXVsYXRpdmVQYXRoTGVuZ3RoID0gMDtcbiAgICAgICAgbGV0IHAgPSBudWxsO1xuICAgICAgICBpZiAoZGlzdGFuY2UgPCAtMC4wMDAwNSB8fCBkaXN0YW5jZSAtIDAuMDAwMDUgPiBmdWxsTGVuKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IGRhdGFBcnJheSAgfSA9IHRoaXM7XG4gICAgICAgIGZvciAoY29uc3QgY29tbWFuZCBvZiBkYXRhQXJyYXkpe1xuICAgICAgICAgICAgaWYgKGNvbW1hbmQgJiYgKGNvbW1hbmQucGF0aExlbmd0aCA8IDAuMDAwMDUgfHwgY3VtdWxhdGl2ZVBhdGhMZW5ndGggKyBjb21tYW5kLnBhdGhMZW5ndGggKyAwLjAwMDA1IDwgZGlzdGFuY2UpKSB7XG4gICAgICAgICAgICAgICAgY3VtdWxhdGl2ZVBhdGhMZW5ndGggKz0gY29tbWFuZC5wYXRoTGVuZ3RoO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZGVsdGEgPSBkaXN0YW5jZSAtIGN1bXVsYXRpdmVQYXRoTGVuZ3RoO1xuICAgICAgICAgICAgbGV0IGN1cnJlbnRUID0gMDtcbiAgICAgICAgICAgIHN3aXRjaChjb21tYW5kLnR5cGUpe1xuICAgICAgICAgICAgICAgIGNhc2UgUGF0aFBhcnNlci5MSU5FX1RPOlxuICAgICAgICAgICAgICAgICAgICBwID0gdGhpcy5nZXRQb2ludE9uTGluZShkZWx0YSwgY29tbWFuZC5zdGFydC54LCBjb21tYW5kLnN0YXJ0LnksIGNvbW1hbmQucG9pbnRzWzBdLCBjb21tYW5kLnBvaW50c1sxXSwgY29tbWFuZC5zdGFydC54LCBjb21tYW5kLnN0YXJ0LnkpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFBhdGhQYXJzZXIuQVJDOlxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFydCA9IGNvbW1hbmQucG9pbnRzWzRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gNCA9IHRoZXRhXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkVGhldGEgPSBjb21tYW5kLnBvaW50c1s1XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIDUgPSBkVGhldGFcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVuZCA9IGNvbW1hbmQucG9pbnRzWzRdICsgZFRoZXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFQgPSBzdGFydCArIGRlbHRhIC8gY29tbWFuZC5wYXRoTGVuZ3RoICogZFRoZXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRUaGV0YSA8IDAgJiYgY3VycmVudFQgPCBlbmQgfHwgZFRoZXRhID49IDAgJiYgY3VycmVudFQgPiBlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHAgPSB0aGlzLmdldFBvaW50T25FbGxpcHRpY2FsQXJjKGNvbW1hbmQucG9pbnRzWzBdLCBjb21tYW5kLnBvaW50c1sxXSwgY29tbWFuZC5wb2ludHNbMl0sIGNvbW1hbmQucG9pbnRzWzNdLCBjdXJyZW50VCwgY29tbWFuZC5wb2ludHNbNl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIFBhdGhQYXJzZXIuQ1VSVkVfVE86XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUID0gZGVsdGEgLyBjb21tYW5kLnBhdGhMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50VCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUID0gMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBwID0gdGhpcy5nZXRQb2ludE9uQ3ViaWNCZXppZXIoY3VycmVudFQsIGNvbW1hbmQuc3RhcnQueCwgY29tbWFuZC5zdGFydC55LCBjb21tYW5kLnBvaW50c1swXSwgY29tbWFuZC5wb2ludHNbMV0sIGNvbW1hbmQucG9pbnRzWzJdLCBjb21tYW5kLnBvaW50c1szXSwgY29tbWFuZC5wb2ludHNbNF0sIGNvbW1hbmQucG9pbnRzWzVdKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBQYXRoUGFyc2VyLlFVQURfVE86XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUID0gZGVsdGEgLyBjb21tYW5kLnBhdGhMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50VCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUID0gMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBwID0gdGhpcy5nZXRQb2ludE9uUXVhZHJhdGljQmV6aWVyKGN1cnJlbnRULCBjb21tYW5kLnN0YXJ0LngsIGNvbW1hbmQuc3RhcnQueSwgY29tbWFuZC5wb2ludHNbMF0sIGNvbW1hbmQucG9pbnRzWzFdLCBjb21tYW5kLnBvaW50c1syXSwgY29tbWFuZC5wb2ludHNbM10pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZ2V0TGluZUxlbmd0aCh4MSwgeTEsIHgyLCB5Mikge1xuICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KCh4MiAtIHgxKSAqICh4MiAtIHgxKSArICh5MiAtIHkxKSAqICh5MiAtIHkxKSk7XG4gICAgfVxuICAgIGdldFBhdGhMZW5ndGgoKSB7XG4gICAgICAgIGlmICh0aGlzLnBhdGhMZW5ndGggPT09IC0xKSB7XG4gICAgICAgICAgICB0aGlzLnBhdGhMZW5ndGggPSB0aGlzLmRhdGFBcnJheS5yZWR1Y2UoKGxlbmd0aCwgY29tbWFuZCk9PmNvbW1hbmQucGF0aExlbmd0aCA+IDAgPyBsZW5ndGggKyBjb21tYW5kLnBhdGhMZW5ndGggOiBsZW5ndGhcbiAgICAgICAgICAgICwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMucGF0aExlbmd0aDtcbiAgICB9XG4gICAgZ2V0UG9pbnRPbkN1YmljQmV6aWVyKHBjdCwgcDF4LCBwMXksIHAyeCwgcDJ5LCBwM3gsIHAzeSwgcDR4LCBwNHkpIHtcbiAgICAgICAgY29uc3QgeCA9IHA0eCAqIENCMShwY3QpICsgcDN4ICogQ0IyKHBjdCkgKyBwMnggKiBDQjMocGN0KSArIHAxeCAqIENCNChwY3QpO1xuICAgICAgICBjb25zdCB5ID0gcDR5ICogQ0IxKHBjdCkgKyBwM3kgKiBDQjIocGN0KSArIHAyeSAqIENCMyhwY3QpICsgcDF5ICogQ0I0KHBjdCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB4LFxuICAgICAgICAgICAgeVxuICAgICAgICB9O1xuICAgIH1cbiAgICBnZXRQb2ludE9uUXVhZHJhdGljQmV6aWVyKHBjdCwgcDF4LCBwMXksIHAyeCwgcDJ5LCBwM3gsIHAzeSkge1xuICAgICAgICBjb25zdCB4ID0gcDN4ICogUUIxKHBjdCkgKyBwMnggKiBRQjIocGN0KSArIHAxeCAqIFFCMyhwY3QpO1xuICAgICAgICBjb25zdCB5ID0gcDN5ICogUUIxKHBjdCkgKyBwMnkgKiBRQjIocGN0KSArIHAxeSAqIFFCMyhwY3QpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeCxcbiAgICAgICAgICAgIHlcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZ2V0UG9pbnRPbkVsbGlwdGljYWxBcmMoY3gsIGN5LCByeCwgcnksIHRoZXRhLCBwc2kpIHtcbiAgICAgICAgY29uc3QgY29zUHNpID0gTWF0aC5jb3MocHNpKTtcbiAgICAgICAgY29uc3Qgc2luUHNpID0gTWF0aC5zaW4ocHNpKTtcbiAgICAgICAgY29uc3QgcHQgPSB7XG4gICAgICAgICAgICB4OiByeCAqIE1hdGguY29zKHRoZXRhKSxcbiAgICAgICAgICAgIHk6IHJ5ICogTWF0aC5zaW4odGhldGEpXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB4OiBjeCArIChwdC54ICogY29zUHNpIC0gcHQueSAqIHNpblBzaSksXG4gICAgICAgICAgICB5OiBjeSArIChwdC54ICogc2luUHNpICsgcHQueSAqIGNvc1BzaSlcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLy8gVE9ETyBuZWVkIHNvbWUgb3B0aW1pc2F0aW9ucy4gcG9zc2libHkgYnVpbGQgY2FjaGUgb25seSBmb3IgY3VydmVkIHNlZ21lbnRzP1xuICAgIGJ1aWxkRXF1aWRpc3RhbnRDYWNoZShpbnB1dFN0ZXAsIGlucHV0UHJlY2lzaW9uKSB7XG4gICAgICAgIGNvbnN0IGZ1bGxMZW4gPSB0aGlzLmdldFBhdGhMZW5ndGgoKTtcbiAgICAgICAgY29uc3QgcHJlY2lzaW9uID0gaW5wdXRQcmVjaXNpb24gfHwgMC4yNSAvLyBhY2N1cmFjeSB2cyBwZXJmb3JtYW5jZVxuICAgICAgICA7XG4gICAgICAgIGNvbnN0IHN0ZXAgPSBpbnB1dFN0ZXAgfHwgZnVsbExlbiAvIDEwMDtcbiAgICAgICAgaWYgKCF0aGlzLmVxdWlkaXN0YW50Q2FjaGUgfHwgdGhpcy5lcXVpZGlzdGFudENhY2hlLnN0ZXAgIT09IHN0ZXAgfHwgdGhpcy5lcXVpZGlzdGFudENhY2hlLnByZWNpc2lvbiAhPT0gcHJlY2lzaW9uKSB7XG4gICAgICAgICAgICAvLyBQcmVwYXJlIGNhY2hlXG4gICAgICAgICAgICB0aGlzLmVxdWlkaXN0YW50Q2FjaGUgPSB7XG4gICAgICAgICAgICAgICAgc3RlcCxcbiAgICAgICAgICAgICAgICBwcmVjaXNpb24sXG4gICAgICAgICAgICAgICAgcG9pbnRzOiBbXVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIC8vIENhbGN1bGF0ZSBwb2ludHNcbiAgICAgICAgICAgIGxldCBzID0gMDtcbiAgICAgICAgICAgIGZvcihsZXQgbCA9IDA7IGwgPD0gZnVsbExlbjsgbCArPSBwcmVjaXNpb24pe1xuICAgICAgICAgICAgICAgIGNvbnN0IHAwID0gdGhpcy5nZXRQb2ludE9uUGF0aChsKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwMSA9IHRoaXMuZ2V0UG9pbnRPblBhdGgobCArIHByZWNpc2lvbik7XG4gICAgICAgICAgICAgICAgaWYgKCFwMCB8fCAhcDEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHMgKz0gdGhpcy5nZXRMaW5lTGVuZ3RoKHAwLngsIHAwLnksIHAxLngsIHAxLnkpO1xuICAgICAgICAgICAgICAgIGlmIChzID49IHN0ZXApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lcXVpZGlzdGFudENhY2hlLnBvaW50cy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IHAwLngsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiBwMC55LFxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzdGFuY2U6IGxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHMgLT0gc3RlcDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0RXF1aWRpc3RhbnRQb2ludE9uUGF0aCh0YXJnZXREaXN0YW5jZSwgc3RlcCwgcHJlY2lzaW9uKSB7XG4gICAgICAgIHRoaXMuYnVpbGRFcXVpZGlzdGFudENhY2hlKHN0ZXAsIHByZWNpc2lvbik7XG4gICAgICAgIGlmICh0YXJnZXREaXN0YW5jZSA8IDAgfHwgdGFyZ2V0RGlzdGFuY2UgLSB0aGlzLmdldFBhdGhMZW5ndGgoKSA+IDAuMDAwMDUpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlkeCA9IE1hdGgucm91bmQodGFyZ2V0RGlzdGFuY2UgLyB0aGlzLmdldFBhdGhMZW5ndGgoKSAqICh0aGlzLmVxdWlkaXN0YW50Q2FjaGUucG9pbnRzLmxlbmd0aCAtIDEpKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXF1aWRpc3RhbnRDYWNoZS5wb2ludHNbaWR4XSB8fCBudWxsO1xuICAgIH1cbiAgICBjb25zdHJ1Y3Rvcihkb2N1bWVudCwgbm9kZSwgY2FwdHVyZVRleHROb2Rlcyl7XG4gICAgICAgIHN1cGVyKGRvY3VtZW50LCBub2RlLCBjYXB0dXJlVGV4dE5vZGVzKTtcbiAgICAgICAgdGhpcy50eXBlID0gJ3RleHRQYXRoJztcbiAgICAgICAgdGhpcy50ZXh0V2lkdGggPSAwO1xuICAgICAgICB0aGlzLnRleHRIZWlnaHQgPSAwO1xuICAgICAgICB0aGlzLnBhdGhMZW5ndGggPSAtMTtcbiAgICAgICAgdGhpcy5nbHlwaEluZm8gPSBudWxsO1xuICAgICAgICB0aGlzLmxldHRlclNwYWNpbmdDYWNoZSA9IFtdO1xuICAgICAgICB0aGlzLm1lYXN1cmVzQ2FjaGUgPSBuZXcgTWFwKFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAnJyxcbiAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICBdXG4gICAgICAgIF0pO1xuICAgICAgICBjb25zdCBwYXRoRWxlbWVudCA9IHRoaXMuZ2V0SHJlZkF0dHJpYnV0ZSgpLmdldERlZmluaXRpb24oKTtcbiAgICAgICAgdGhpcy50ZXh0ID0gdGhpcy5nZXRUZXh0RnJvbU5vZGUoKTtcbiAgICAgICAgdGhpcy5kYXRhQXJyYXkgPSB0aGlzLnBhcnNlUGF0aERhdGEocGF0aEVsZW1lbnQpO1xuICAgIH1cbn1cblxuLy8gZ3JvdXBzOiAxOiBtaW1lLXR5cGUgKCsgY2hhcnNldCksIDI6IG1pbWUtdHlwZSAody9vIGNoYXJzZXQpLCAzOiBjaGFyc2V0LCA0OiBiYXNlNjQ/LCA1OiBib2R5XG5jb25zdCBkYXRhVXJpUmVnZXggPSAvXlxccypkYXRhOigoW14vLDtdK1xcL1teLyw7XSspKD86OyhbXiw7PV0rPVteLDs9XSspKT8pPyg/OjsoYmFzZTY0KSk/LCguKikkL2k7XG5jbGFzcyBJbWFnZUVsZW1lbnQgZXh0ZW5kcyBSZW5kZXJlZEVsZW1lbnQge1xuICAgIGFzeW5jIGxvYWRJbWFnZShocmVmKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBpbWFnZSA9IGF3YWl0IHRoaXMuZG9jdW1lbnQuY3JlYXRlSW1hZ2UoaHJlZik7XG4gICAgICAgICAgICB0aGlzLmltYWdlID0gaW1hZ2U7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIHdoaWxlIGxvYWRpbmcgaW1hZ2UgXFxcIlwiLmNvbmNhdChocmVmLCBcIlxcXCI6XCIpLCBlcnIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubG9hZGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgYXN5bmMgbG9hZFN2ZyhocmVmKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoID0gZGF0YVVyaVJlZ2V4LmV4ZWMoaHJlZik7XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IG1hdGNoWzVdO1xuICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2hbNF0gPT09ICdiYXNlNjQnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW1hZ2UgPSBhdG9iKGRhdGEpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW1hZ2UgPSBkZWNvZGVVUklDb21wb25lbnQoZGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZG9jdW1lbnQuZmV0Y2goaHJlZik7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3ZnID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuaW1hZ2UgPSBzdmc7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3Igd2hpbGUgbG9hZGluZyBpbWFnZSBcXFwiXCIuY29uY2F0KGhyZWYsIFwiXFxcIjpcIiksIGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sb2FkZWQgPSB0cnVlO1xuICAgIH1cbiAgICByZW5kZXJDaGlsZHJlbihjdHgpIHtcbiAgICAgICAgY29uc3QgeyBkb2N1bWVudCAsIGltYWdlICwgbG9hZGVkICB9ID0gdGhpcztcbiAgICAgICAgY29uc3QgeCA9IHRoaXMuZ2V0QXR0cmlidXRlKCd4JykuZ2V0UGl4ZWxzKCd4Jyk7XG4gICAgICAgIGNvbnN0IHkgPSB0aGlzLmdldEF0dHJpYnV0ZSgneScpLmdldFBpeGVscygneScpO1xuICAgICAgICBjb25zdCB3aWR0aCA9IHRoaXMuZ2V0U3R5bGUoJ3dpZHRoJykuZ2V0UGl4ZWxzKCd4Jyk7XG4gICAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMuZ2V0U3R5bGUoJ2hlaWdodCcpLmdldFBpeGVscygneScpO1xuICAgICAgICBpZiAoIWxvYWRlZCB8fCAhaW1hZ2UgfHwgIXdpZHRoIHx8ICFoZWlnaHQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjdHguc2F2ZSgpO1xuICAgICAgICBjdHgudHJhbnNsYXRlKHgsIHkpO1xuICAgICAgICBpZiAodHlwZW9mIGltYWdlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgY29uc3Qgc3ViRG9jdW1lbnQgPSBkb2N1bWVudC5jYW52Zy5mb3JrU3RyaW5nKGN0eCwgaW1hZ2UsIHtcbiAgICAgICAgICAgICAgICBpZ25vcmVNb3VzZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpZ25vcmVBbmltYXRpb246IHRydWUsXG4gICAgICAgICAgICAgICAgaWdub3JlRGltZW5zaW9uczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpZ25vcmVDbGVhcjogdHJ1ZSxcbiAgICAgICAgICAgICAgICBvZmZzZXRYOiAwLFxuICAgICAgICAgICAgICAgIG9mZnNldFk6IDAsXG4gICAgICAgICAgICAgICAgc2NhbGVXaWR0aDogd2lkdGgsXG4gICAgICAgICAgICAgICAgc2NhbGVIZWlnaHQ6IGhlaWdodFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCB7IGRvY3VtZW50RWxlbWVudCAgfSA9IHN1YkRvY3VtZW50LmRvY3VtZW50O1xuICAgICAgICAgICAgaWYgKGRvY3VtZW50RWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGRvY3VtZW50RWxlbWVudC5wYXJlbnQgPSB0aGlzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdm9pZCBzdWJEb2N1bWVudC5yZW5kZXIoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRvY3VtZW50LnNldFZpZXdCb3goe1xuICAgICAgICAgICAgICAgIGN0eCxcbiAgICAgICAgICAgICAgICBhc3BlY3RSYXRpbzogdGhpcy5nZXRBdHRyaWJ1dGUoJ3ByZXNlcnZlQXNwZWN0UmF0aW8nKS5nZXRTdHJpbmcoKSxcbiAgICAgICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgICAgICBkZXNpcmVkV2lkdGg6IGltYWdlLndpZHRoLFxuICAgICAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAgICAgICBkZXNpcmVkSGVpZ2h0OiBpbWFnZS5oZWlnaHRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKHRoaXMubG9hZGVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKCEoJ2NvbXBsZXRlJyBpbiBpbWFnZSkgfHwgaW1hZ2UuY29tcGxldGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4LmRyYXdJbWFnZShpbWFnZSwgMCwgMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgfVxuICAgIGdldEJvdW5kaW5nQm94KCkge1xuICAgICAgICBjb25zdCB4ID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ3gnKS5nZXRQaXhlbHMoJ3gnKTtcbiAgICAgICAgY29uc3QgeSA9IHRoaXMuZ2V0QXR0cmlidXRlKCd5JykuZ2V0UGl4ZWxzKCd5Jyk7XG4gICAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy5nZXRTdHlsZSgnd2lkdGgnKS5nZXRQaXhlbHMoJ3gnKTtcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gdGhpcy5nZXRTdHlsZSgnaGVpZ2h0JykuZ2V0UGl4ZWxzKCd5Jyk7XG4gICAgICAgIHJldHVybiBuZXcgQm91bmRpbmdCb3goeCwgeSwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0KTtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoZG9jdW1lbnQsIG5vZGUsIGNhcHR1cmVUZXh0Tm9kZXMpe1xuICAgICAgICBzdXBlcihkb2N1bWVudCwgbm9kZSwgY2FwdHVyZVRleHROb2Rlcyk7XG4gICAgICAgIHRoaXMudHlwZSA9ICdpbWFnZSc7XG4gICAgICAgIHRoaXMubG9hZGVkID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGhyZWYgPSB0aGlzLmdldEhyZWZBdHRyaWJ1dGUoKS5nZXRTdHJpbmcoKTtcbiAgICAgICAgaWYgKCFocmVmKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXNTdmcgPSBocmVmLmVuZHNXaXRoKCcuc3ZnJykgfHwgL15cXHMqZGF0YTppbWFnZVxcL3N2Z1xcK3htbC9pLnRlc3QoaHJlZik7XG4gICAgICAgIGRvY3VtZW50LmltYWdlcy5wdXNoKHRoaXMpO1xuICAgICAgICBpZiAoIWlzU3ZnKSB7XG4gICAgICAgICAgICB2b2lkIHRoaXMubG9hZEltYWdlKGhyZWYpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdm9pZCB0aGlzLmxvYWRTdmcoaHJlZik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIFN5bWJvbEVsZW1lbnQgZXh0ZW5kcyBSZW5kZXJlZEVsZW1lbnQge1xuICAgIHJlbmRlcihfKSB7XG4gICAgLy8gTk8gUkVOREVSXG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKC4uLmFyZ3Mpe1xuICAgICAgICBzdXBlciguLi5hcmdzKTtcbiAgICAgICAgdGhpcy50eXBlID0gJ3N5bWJvbCc7XG4gICAgfVxufVxuXG5jbGFzcyBTVkdGb250TG9hZGVyIHtcbiAgICBhc3luYyBsb2FkKGZvbnRGYW1pbHksIHVybCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgeyBkb2N1bWVudCAgfSA9IHRoaXM7XG4gICAgICAgICAgICBjb25zdCBzdmdEb2N1bWVudCA9IGF3YWl0IGRvY3VtZW50LmNhbnZnLnBhcnNlci5sb2FkKHVybCk7XG4gICAgICAgICAgICBjb25zdCBmb250cyA9IHN2Z0RvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdmb250Jyk7XG4gICAgICAgICAgICBBcnJheS5mcm9tKGZvbnRzKS5mb3JFYWNoKChmb250Tm9kZSk9PntcbiAgICAgICAgICAgICAgICBjb25zdCBmb250ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChmb250Tm9kZSk7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZGVmaW5pdGlvbnNbZm9udEZhbWlseV0gPSBmb250O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIHdoaWxlIGxvYWRpbmcgZm9udCBcXFwiXCIuY29uY2F0KHVybCwgXCJcXFwiOlwiKSwgZXJyKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxvYWRlZCA9IHRydWU7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKGRvY3VtZW50KXtcbiAgICAgICAgdGhpcy5kb2N1bWVudCA9IGRvY3VtZW50O1xuICAgICAgICB0aGlzLmxvYWRlZCA9IGZhbHNlO1xuICAgICAgICBkb2N1bWVudC5mb250cy5wdXNoKHRoaXMpO1xuICAgIH1cbn1cblxuY2xhc3MgU3R5bGVFbGVtZW50IGV4dGVuZHMgRWxlbWVudCB7XG4gICAgY29uc3RydWN0b3IoZG9jdW1lbnQsIG5vZGUsIGNhcHR1cmVUZXh0Tm9kZXMpe1xuICAgICAgICBzdXBlcihkb2N1bWVudCwgbm9kZSwgY2FwdHVyZVRleHROb2Rlcyk7XG4gICAgICAgIHRoaXMudHlwZSA9ICdzdHlsZSc7XG4gICAgICAgIGNvbnN0IGNzcyA9IGNvbXByZXNzU3BhY2VzKEFycmF5LmZyb20obm9kZS5jaGlsZE5vZGVzKS8vIE5FRUQgVEVTVFxuICAgICAgICAubWFwKChfKT0+Xy50ZXh0Q29udGVudFxuICAgICAgICApLmpvaW4oJycpLnJlcGxhY2UoLyhcXC9cXCooW14qXXxbXFxyXFxuXXwoXFwqKyhbXiovXXxbXFxyXFxuXSkpKSpcXCorXFwvKXwoXltcXHNdKlxcL1xcLy4qKS9nbSwgJycpIC8vIHJlbW92ZSBjb21tZW50c1xuICAgICAgICAucmVwbGFjZSgvQGltcG9ydC4qOy9nLCAnJykgLy8gcmVtb3ZlIGltcG9ydHNcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgY3NzRGVmcyA9IGNzcy5zcGxpdCgnfScpO1xuICAgICAgICBjc3NEZWZzLmZvckVhY2goKF8xKT0+e1xuICAgICAgICAgICAgY29uc3QgZGVmID0gXzEudHJpbSgpO1xuICAgICAgICAgICAgaWYgKCFkZWYpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjc3NQYXJ0cyA9IGRlZi5zcGxpdCgneycpO1xuICAgICAgICAgICAgY29uc3QgY3NzQ2xhc3NlcyA9IGNzc1BhcnRzWzBdLnNwbGl0KCcsJyk7XG4gICAgICAgICAgICBjb25zdCBjc3NQcm9wcyA9IGNzc1BhcnRzWzFdLnNwbGl0KCc7Jyk7XG4gICAgICAgICAgICBjc3NDbGFzc2VzLmZvckVhY2goKF8pPT57XG4gICAgICAgICAgICAgICAgY29uc3QgY3NzQ2xhc3MgPSBfLnRyaW0oKTtcbiAgICAgICAgICAgICAgICBpZiAoIWNzc0NsYXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvcHMgPSBkb2N1bWVudC5zdHlsZXNbY3NzQ2xhc3NdIHx8IHt9O1xuICAgICAgICAgICAgICAgIGNzc1Byb3BzLmZvckVhY2goKGNzc1Byb3ApPT57XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb3AgPSBjc3NQcm9wLmluZGV4T2YoJzonKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IGNzc1Byb3Auc3Vic3RyKDAsIHByb3ApLnRyaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjc3NQcm9wLnN1YnN0cihwcm9wICsgMSwgY3NzUHJvcC5sZW5ndGggLSBwcm9wKS50cmltKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuYW1lICYmIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eShkb2N1bWVudCwgbmFtZSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuc3R5bGVzW2Nzc0NsYXNzXSA9IHByb3BzO1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LnN0eWxlc1NwZWNpZmljaXR5W2Nzc0NsYXNzXSA9IGdldFNlbGVjdG9yU3BlY2lmaWNpdHkoY3NzQ2xhc3MpO1xuICAgICAgICAgICAgICAgIGlmIChjc3NDbGFzcyA9PT0gJ0Bmb250LWZhY2UnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvbnRGYW1pbHkgPSBwcm9wc1snZm9udC1mYW1pbHknXS5nZXRTdHJpbmcoKS5yZXBsYWNlKC9cInwnL2csICcnKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3JjcyA9IHByb3BzLnNyYy5nZXRTdHJpbmcoKS5zcGxpdCgnLCcpO1xuICAgICAgICAgICAgICAgICAgICBzcmNzLmZvckVhY2goKHNyYyk9PntcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzcmMuaW5kZXhPZignZm9ybWF0KFwic3ZnXCIpJykgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXJsID0gcGFyc2VFeHRlcm5hbFVybChzcmMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1cmwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCBuZXcgU1ZHRm9udExvYWRlcihkb2N1bWVudCkubG9hZChmb250RmFtaWx5LCB1cmwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cblN0eWxlRWxlbWVudC5wYXJzZUV4dGVybmFsVXJsID0gcGFyc2VFeHRlcm5hbFVybDtcblxuY2xhc3MgVXNlRWxlbWVudCBleHRlbmRzIFJlbmRlcmVkRWxlbWVudCB7XG4gICAgc2V0Q29udGV4dChjdHgpIHtcbiAgICAgICAgc3VwZXIuc2V0Q29udGV4dChjdHgpO1xuICAgICAgICBjb25zdCB4QXR0ciA9IHRoaXMuZ2V0QXR0cmlidXRlKCd4Jyk7XG4gICAgICAgIGNvbnN0IHlBdHRyID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ3knKTtcbiAgICAgICAgaWYgKHhBdHRyLmhhc1ZhbHVlKCkpIHtcbiAgICAgICAgICAgIGN0eC50cmFuc2xhdGUoeEF0dHIuZ2V0UGl4ZWxzKCd4JyksIDApO1xuICAgICAgICB9XG4gICAgICAgIGlmICh5QXR0ci5oYXNWYWx1ZSgpKSB7XG4gICAgICAgICAgICBjdHgudHJhbnNsYXRlKDAsIHlBdHRyLmdldFBpeGVscygneScpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwYXRoKGN0eCkge1xuICAgICAgICBjb25zdCB7IGVsZW1lbnQgIH0gPSB0aGlzO1xuICAgICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICAgICAgZWxlbWVudC5wYXRoKGN0eCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVuZGVyQ2hpbGRyZW4oY3R4KSB7XG4gICAgICAgIGNvbnN0IHsgZG9jdW1lbnQgLCBlbGVtZW50ICB9ID0gdGhpcztcbiAgICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgICAgIGxldCB0ZW1wU3ZnID0gZWxlbWVudDtcbiAgICAgICAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09ICdzeW1ib2wnKSB7XG4gICAgICAgICAgICAgICAgLy8gcmVuZGVyIG1lIHVzaW5nIGEgdGVtcG9yYXJ5IHN2ZyBlbGVtZW50IGluIHN5bWJvbCBjYXNlcyAoaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHL3N0cnVjdC5odG1sI1VzZUVsZW1lbnQpXG4gICAgICAgICAgICAgICAgdGVtcFN2ZyA9IG5ldyBTVkdFbGVtZW50KGRvY3VtZW50KTtcbiAgICAgICAgICAgICAgICB0ZW1wU3ZnLmF0dHJpYnV0ZXMudmlld0JveCA9IG5ldyBQcm9wZXJ0eShkb2N1bWVudCwgJ3ZpZXdCb3gnLCBlbGVtZW50LmdldEF0dHJpYnV0ZSgndmlld0JveCcpLmdldFN0cmluZygpKTtcbiAgICAgICAgICAgICAgICB0ZW1wU3ZnLmF0dHJpYnV0ZXMucHJlc2VydmVBc3BlY3RSYXRpbyA9IG5ldyBQcm9wZXJ0eShkb2N1bWVudCwgJ3ByZXNlcnZlQXNwZWN0UmF0aW8nLCBlbGVtZW50LmdldEF0dHJpYnV0ZSgncHJlc2VydmVBc3BlY3RSYXRpbycpLmdldFN0cmluZygpKTtcbiAgICAgICAgICAgICAgICB0ZW1wU3ZnLmF0dHJpYnV0ZXMub3ZlcmZsb3cgPSBuZXcgUHJvcGVydHkoZG9jdW1lbnQsICdvdmVyZmxvdycsIGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdvdmVyZmxvdycpLmdldFN0cmluZygpKTtcbiAgICAgICAgICAgICAgICB0ZW1wU3ZnLmNoaWxkcmVuID0gZWxlbWVudC5jaGlsZHJlbjtcbiAgICAgICAgICAgICAgICAvLyBlbGVtZW50IGlzIHN0aWxsIHRoZSBwYXJlbnQgb2YgdGhlIGNoaWxkcmVuXG4gICAgICAgICAgICAgICAgZWxlbWVudC5zdHlsZXMub3BhY2l0eSA9IG5ldyBQcm9wZXJ0eShkb2N1bWVudCwgJ29wYWNpdHknLCB0aGlzLmNhbGN1bGF0ZU9wYWNpdHkoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGVtcFN2Zy50eXBlID09PSAnc3ZnJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHdpZHRoU3R5bGUgPSB0aGlzLmdldFN0eWxlKCd3aWR0aCcsIGZhbHNlLCB0cnVlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBoZWlnaHRTdHlsZSA9IHRoaXMuZ2V0U3R5bGUoJ2hlaWdodCcsIGZhbHNlLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAvLyBpZiBzeW1ib2wgb3Igc3ZnLCBpbmhlcml0IHdpZHRoL2hlaWdodCBmcm9tIG1lXG4gICAgICAgICAgICAgICAgaWYgKHdpZHRoU3R5bGUuaGFzVmFsdWUoKSkge1xuICAgICAgICAgICAgICAgICAgICB0ZW1wU3ZnLmF0dHJpYnV0ZXMud2lkdGggPSBuZXcgUHJvcGVydHkoZG9jdW1lbnQsICd3aWR0aCcsIHdpZHRoU3R5bGUuZ2V0U3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaGVpZ2h0U3R5bGUuaGFzVmFsdWUoKSkge1xuICAgICAgICAgICAgICAgICAgICB0ZW1wU3ZnLmF0dHJpYnV0ZXMuaGVpZ2h0ID0gbmV3IFByb3BlcnR5KGRvY3VtZW50LCAnaGVpZ2h0JywgaGVpZ2h0U3R5bGUuZ2V0U3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG9sZFBhcmVudCA9IHRlbXBTdmcucGFyZW50O1xuICAgICAgICAgICAgdGVtcFN2Zy5wYXJlbnQgPSB0aGlzO1xuICAgICAgICAgICAgdGVtcFN2Zy5yZW5kZXIoY3R4KTtcbiAgICAgICAgICAgIHRlbXBTdmcucGFyZW50ID0gb2xkUGFyZW50O1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldEJvdW5kaW5nQm94KGN0eCkge1xuICAgICAgICBjb25zdCB7IGVsZW1lbnQgIH0gPSB0aGlzO1xuICAgICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQuZ2V0Qm91bmRpbmdCb3goY3R4KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZWxlbWVudFRyYW5zZm9ybSgpIHtcbiAgICAgICAgY29uc3QgeyBkb2N1bWVudCAsIGVsZW1lbnQgIH0gPSB0aGlzO1xuICAgICAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBUcmFuc2Zvcm0uZnJvbUVsZW1lbnQoZG9jdW1lbnQsIGVsZW1lbnQpO1xuICAgIH1cbiAgICBnZXQgZWxlbWVudCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNhY2hlZEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVkRWxlbWVudCA9IHRoaXMuZ2V0SHJlZkF0dHJpYnV0ZSgpLmdldERlZmluaXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5jYWNoZWRFbGVtZW50O1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvciguLi5hcmdzKXtcbiAgICAgICAgc3VwZXIoLi4uYXJncyk7XG4gICAgICAgIHRoaXMudHlwZSA9ICd1c2UnO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gaW1HZXQoaW1nLCB4LCB5LCB3aWR0aCwgX2hlaWdodCwgcmdiYSkge1xuICAgIHJldHVybiBpbWdbeSAqIHdpZHRoICogNCArIHggKiA0ICsgcmdiYV07XG59XG5mdW5jdGlvbiBpbVNldChpbWcsIHgsIHksIHdpZHRoLCBfaGVpZ2h0LCByZ2JhLCB2YWwpIHtcbiAgICBpbWdbeSAqIHdpZHRoICogNCArIHggKiA0ICsgcmdiYV0gPSB2YWw7XG59XG5mdW5jdGlvbiBtKG1hdHJpeCwgaSwgdikge1xuICAgIGNvbnN0IG1pID0gbWF0cml4W2ldO1xuICAgIHJldHVybiBtaSAqIHY7XG59XG5mdW5jdGlvbiBjKGEsIG0xLCBtMiwgbTMpIHtcbiAgICByZXR1cm4gbTEgKyBNYXRoLmNvcyhhKSAqIG0yICsgTWF0aC5zaW4oYSkgKiBtMztcbn1cbmNsYXNzIEZlQ29sb3JNYXRyaXhFbGVtZW50IGV4dGVuZHMgRWxlbWVudCB7XG4gICAgYXBwbHkoY3R4LCBfeCwgX3ksIHdpZHRoLCBoZWlnaHQpIHtcbiAgICAgICAgLy8gYXNzdW1pbmcgeD09MCAmJiB5PT0wIGZvciBub3dcbiAgICAgICAgY29uc3QgeyBpbmNsdWRlT3BhY2l0eSAsIG1hdHJpeCAgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IHNyY0RhdGEgPSBjdHguZ2V0SW1hZ2VEYXRhKDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICBmb3IobGV0IHkgPSAwOyB5IDwgaGVpZ2h0OyB5Kyspe1xuICAgICAgICAgICAgZm9yKGxldCB4ID0gMDsgeCA8IHdpZHRoOyB4Kyspe1xuICAgICAgICAgICAgICAgIGNvbnN0IHIgPSBpbUdldChzcmNEYXRhLmRhdGEsIHgsIHksIHdpZHRoLCBoZWlnaHQsIDApO1xuICAgICAgICAgICAgICAgIGNvbnN0IGcgPSBpbUdldChzcmNEYXRhLmRhdGEsIHgsIHksIHdpZHRoLCBoZWlnaHQsIDEpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGIgPSBpbUdldChzcmNEYXRhLmRhdGEsIHgsIHksIHdpZHRoLCBoZWlnaHQsIDIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGEgPSBpbUdldChzcmNEYXRhLmRhdGEsIHgsIHksIHdpZHRoLCBoZWlnaHQsIDMpO1xuICAgICAgICAgICAgICAgIGxldCBuciA9IG0obWF0cml4LCAwLCByKSArIG0obWF0cml4LCAxLCBnKSArIG0obWF0cml4LCAyLCBiKSArIG0obWF0cml4LCAzLCBhKSArIG0obWF0cml4LCA0LCAxKTtcbiAgICAgICAgICAgICAgICBsZXQgbmcgPSBtKG1hdHJpeCwgNSwgcikgKyBtKG1hdHJpeCwgNiwgZykgKyBtKG1hdHJpeCwgNywgYikgKyBtKG1hdHJpeCwgOCwgYSkgKyBtKG1hdHJpeCwgOSwgMSk7XG4gICAgICAgICAgICAgICAgbGV0IG5iID0gbShtYXRyaXgsIDEwLCByKSArIG0obWF0cml4LCAxMSwgZykgKyBtKG1hdHJpeCwgMTIsIGIpICsgbShtYXRyaXgsIDEzLCBhKSArIG0obWF0cml4LCAxNCwgMSk7XG4gICAgICAgICAgICAgICAgbGV0IG5hID0gbShtYXRyaXgsIDE1LCByKSArIG0obWF0cml4LCAxNiwgZykgKyBtKG1hdHJpeCwgMTcsIGIpICsgbShtYXRyaXgsIDE4LCBhKSArIG0obWF0cml4LCAxOSwgMSk7XG4gICAgICAgICAgICAgICAgaWYgKGluY2x1ZGVPcGFjaXR5KSB7XG4gICAgICAgICAgICAgICAgICAgIG5yID0gMDtcbiAgICAgICAgICAgICAgICAgICAgbmcgPSAwO1xuICAgICAgICAgICAgICAgICAgICBuYiA9IDA7XG4gICAgICAgICAgICAgICAgICAgIG5hICo9IGEgLyAyNTU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGltU2V0KHNyY0RhdGEuZGF0YSwgeCwgeSwgd2lkdGgsIGhlaWdodCwgMCwgbnIpO1xuICAgICAgICAgICAgICAgIGltU2V0KHNyY0RhdGEuZGF0YSwgeCwgeSwgd2lkdGgsIGhlaWdodCwgMSwgbmcpO1xuICAgICAgICAgICAgICAgIGltU2V0KHNyY0RhdGEuZGF0YSwgeCwgeSwgd2lkdGgsIGhlaWdodCwgMiwgbmIpO1xuICAgICAgICAgICAgICAgIGltU2V0KHNyY0RhdGEuZGF0YSwgeCwgeSwgd2lkdGgsIGhlaWdodCwgMywgbmEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGN0eC5jbGVhclJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgIGN0eC5wdXRJbWFnZURhdGEoc3JjRGF0YSwgMCwgMCk7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKGRvY3VtZW50LCBub2RlLCBjYXB0dXJlVGV4dE5vZGVzKXtcbiAgICAgICAgc3VwZXIoZG9jdW1lbnQsIG5vZGUsIGNhcHR1cmVUZXh0Tm9kZXMpO1xuICAgICAgICB0aGlzLnR5cGUgPSAnZmVDb2xvck1hdHJpeCc7XG4gICAgICAgIGxldCBtYXRyaXggPSB0b051bWJlcnModGhpcy5nZXRBdHRyaWJ1dGUoJ3ZhbHVlcycpLmdldFN0cmluZygpKTtcbiAgICAgICAgc3dpdGNoKHRoaXMuZ2V0QXR0cmlidXRlKCd0eXBlJykuZ2V0U3RyaW5nKCdtYXRyaXgnKSl7XG4gICAgICAgICAgICBjYXNlICdzYXR1cmF0ZSc6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzID0gbWF0cml4WzBdO1xuICAgICAgICAgICAgICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBhcnJheS1lbGVtZW50LW5ld2xpbmUgKi8gbWF0cml4ID0gW1xuICAgICAgICAgICAgICAgICAgICAgICAgMC4yMTMgKyAwLjc4NyAqIHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAwLjcxNSAtIDAuNzE1ICogcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIDAuMDcyIC0gMC4wNzIgKiBzLFxuICAgICAgICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAwLjIxMyAtIDAuMjEzICogcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIDAuNzE1ICsgMC4yODUgKiBzLFxuICAgICAgICAgICAgICAgICAgICAgICAgMC4wNzIgLSAwLjA3MiAqIHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIDAuMjEzIC0gMC4yMTMgKiBzLFxuICAgICAgICAgICAgICAgICAgICAgICAgMC43MTUgLSAwLjcxNSAqIHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAwLjA3MiArIDAuOTI4ICogcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdodWVSb3RhdGUnOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYSA9IG1hdHJpeFswXSAqIE1hdGguUEkgLyAxODA7XG4gICAgICAgICAgICAgICAgICAgIC8qIGVzbGludC1kaXNhYmxlIGFycmF5LWVsZW1lbnQtbmV3bGluZSAqLyBtYXRyaXggPSBbXG4gICAgICAgICAgICAgICAgICAgICAgICBjKGEsIDAuMjEzLCAwLjc4NywgLTAuMjEzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMoYSwgMC43MTUsIC0wLjcxNSwgLTAuNzE1KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMoYSwgMC4wNzIsIC0wLjA3MiwgMC45MjgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBjKGEsIDAuMjEzLCAtMC4yMTMsIDAuMTQzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMoYSwgMC43MTUsIDAuMjg1LCAwLjE0KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMoYSwgMC4wNzIsIC0wLjA3MiwgLTAuMjgzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgYyhhLCAwLjIxMywgLTAuMjEzLCAtMC43ODcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYyhhLCAwLjcxNSwgLTAuNzE1LCAwLjcxNSksXG4gICAgICAgICAgICAgICAgICAgICAgICBjKGEsIDAuMDcyLCAwLjkyOCwgMC4wNzIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ2x1bWluYW5jZVRvQWxwaGEnOlxuICAgICAgICAgICAgICAgIC8qIGVzbGludC1kaXNhYmxlIGFycmF5LWVsZW1lbnQtbmV3bGluZSAqLyBtYXRyaXggPSBbXG4gICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgIDAuMjEyNSxcbiAgICAgICAgICAgICAgICAgICAgMC43MTU0LFxuICAgICAgICAgICAgICAgICAgICAwLjA3MjEsXG4gICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubWF0cml4ID0gbWF0cml4O1xuICAgICAgICB0aGlzLmluY2x1ZGVPcGFjaXR5ID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ2luY2x1ZGVPcGFjaXR5JykuaGFzVmFsdWUoKTtcbiAgICB9XG59XG5cbmNsYXNzIE1hc2tFbGVtZW50IGV4dGVuZHMgRWxlbWVudCB7XG4gICAgYXBwbHkoY3R4LCBlbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IHsgZG9jdW1lbnQgIH0gPSB0aGlzO1xuICAgICAgICAvLyByZW5kZXIgYXMgdGVtcCBzdmdcbiAgICAgICAgbGV0IHggPSB0aGlzLmdldEF0dHJpYnV0ZSgneCcpLmdldFBpeGVscygneCcpO1xuICAgICAgICBsZXQgeSA9IHRoaXMuZ2V0QXR0cmlidXRlKCd5JykuZ2V0UGl4ZWxzKCd5Jyk7XG4gICAgICAgIGxldCB3aWR0aCA9IHRoaXMuZ2V0U3R5bGUoJ3dpZHRoJykuZ2V0UGl4ZWxzKCd4Jyk7XG4gICAgICAgIGxldCBoZWlnaHQgPSB0aGlzLmdldFN0eWxlKCdoZWlnaHQnKS5nZXRQaXhlbHMoJ3knKTtcbiAgICAgICAgaWYgKCF3aWR0aCAmJiAhaGVpZ2h0KSB7XG4gICAgICAgICAgICBjb25zdCBib3VuZGluZ0JveCA9IG5ldyBCb3VuZGluZ0JveCgpO1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCk9PntcbiAgICAgICAgICAgICAgICBib3VuZGluZ0JveC5hZGRCb3VuZGluZ0JveChjaGlsZC5nZXRCb3VuZGluZ0JveChjdHgpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgeCA9IE1hdGguZmxvb3IoYm91bmRpbmdCb3gueDEpO1xuICAgICAgICAgICAgeSA9IE1hdGguZmxvb3IoYm91bmRpbmdCb3gueTEpO1xuICAgICAgICAgICAgd2lkdGggPSBNYXRoLmZsb29yKGJvdW5kaW5nQm94LndpZHRoKTtcbiAgICAgICAgICAgIGhlaWdodCA9IE1hdGguZmxvb3IoYm91bmRpbmdCb3guaGVpZ2h0KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpZ25vcmVkU3R5bGVzID0gdGhpcy5yZW1vdmVTdHlsZXMoZWxlbWVudCwgTWFza0VsZW1lbnQuaWdub3JlU3R5bGVzKTtcbiAgICAgICAgY29uc3QgbWFza0NhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUNhbnZhcyh4ICsgd2lkdGgsIHkgKyBoZWlnaHQpO1xuICAgICAgICBjb25zdCBtYXNrQ3R4ID0gbWFza0NhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICBkb2N1bWVudC5zY3JlZW4uc2V0RGVmYXVsdHMobWFza0N0eCk7XG4gICAgICAgIHRoaXMucmVuZGVyQ2hpbGRyZW4obWFza0N0eCk7XG4gICAgICAgIC8vIGNvbnZlcnQgbWFzayB0byBhbHBoYSB3aXRoIGEgZmFrZSBub2RlXG4gICAgICAgIC8vIFRPRE86IHJlZmFjdG9yIG91dCBhcHBseSBmcm9tIGZlQ29sb3JNYXRyaXhcbiAgICAgICAgbmV3IEZlQ29sb3JNYXRyaXhFbGVtZW50KGRvY3VtZW50LCB7XG4gICAgICAgICAgICBub2RlVHlwZTogMSxcbiAgICAgICAgICAgIGNoaWxkTm9kZXM6IFtdLFxuICAgICAgICAgICAgYXR0cmlidXRlczogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZU5hbWU6ICd0eXBlJyxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICdsdW1pbmFuY2VUb0FscGhhJ1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBub2RlTmFtZTogJ2luY2x1ZGVPcGFjaXR5JyxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICd0cnVlJ1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgfSkuYXBwbHkobWFza0N0eCwgMCwgMCwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0KTtcbiAgICAgICAgY29uc3QgdG1wQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlQ2FudmFzKHggKyB3aWR0aCwgeSArIGhlaWdodCk7XG4gICAgICAgIGNvbnN0IHRtcEN0eCA9IHRtcENhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICBkb2N1bWVudC5zY3JlZW4uc2V0RGVmYXVsdHModG1wQ3R4KTtcbiAgICAgICAgZWxlbWVudC5yZW5kZXIodG1wQ3R4KTtcbiAgICAgICAgdG1wQ3R4Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdkZXN0aW5hdGlvbi1pbic7XG4gICAgICAgIHRtcEN0eC5maWxsU3R5bGUgPSBtYXNrQ3R4LmNyZWF0ZVBhdHRlcm4obWFza0NhbnZhcywgJ25vLXJlcGVhdCcpO1xuICAgICAgICB0bXBDdHguZmlsbFJlY3QoMCwgMCwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0KTtcbiAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHRtcEN0eC5jcmVhdGVQYXR0ZXJuKHRtcENhbnZhcywgJ25vLXJlcGVhdCcpO1xuICAgICAgICBjdHguZmlsbFJlY3QoMCwgMCwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0KTtcbiAgICAgICAgLy8gcmVhc3NpZ24gbWFza1xuICAgICAgICB0aGlzLnJlc3RvcmVTdHlsZXMoZWxlbWVudCwgaWdub3JlZFN0eWxlcyk7XG4gICAgfVxuICAgIHJlbmRlcihfKSB7XG4gICAgLy8gTk8gUkVOREVSXG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKC4uLmFyZ3Mpe1xuICAgICAgICBzdXBlciguLi5hcmdzKTtcbiAgICAgICAgdGhpcy50eXBlID0gJ21hc2snO1xuICAgIH1cbn1cbk1hc2tFbGVtZW50Lmlnbm9yZVN0eWxlcyA9IFtcbiAgICAnbWFzaycsXG4gICAgJ3RyYW5zZm9ybScsXG4gICAgJ2NsaXAtcGF0aCdcbl07XG5cbmNvbnN0IG5vb3AgPSAoKT0+e1xuLy8gTk9PUFxufTtcbmNsYXNzIENsaXBQYXRoRWxlbWVudCBleHRlbmRzIEVsZW1lbnQge1xuICAgIGFwcGx5KGN0eCkge1xuICAgICAgICBjb25zdCB7IGRvY3VtZW50ICB9ID0gdGhpcztcbiAgICAgICAgY29uc3QgY29udGV4dFByb3RvID0gUmVmbGVjdC5nZXRQcm90b3R5cGVPZihjdHgpO1xuICAgICAgICBjb25zdCB7IGJlZ2luUGF0aCAsIGNsb3NlUGF0aCAgfSA9IGN0eDtcbiAgICAgICAgaWYgKGNvbnRleHRQcm90bykge1xuICAgICAgICAgICAgY29udGV4dFByb3RvLmJlZ2luUGF0aCA9IG5vb3A7XG4gICAgICAgICAgICBjb250ZXh0UHJvdG8uY2xvc2VQYXRoID0gbm9vcDtcbiAgICAgICAgfVxuICAgICAgICBSZWZsZWN0LmFwcGx5KGJlZ2luUGF0aCwgY3R4LCBbXSk7XG4gICAgICAgIHRoaXMuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpPT57XG4gICAgICAgICAgICBpZiAoISgncGF0aCcgaW4gY2hpbGQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHRyYW5zZm9ybSA9ICdlbGVtZW50VHJhbnNmb3JtJyBpbiBjaGlsZCA/IGNoaWxkLmVsZW1lbnRUcmFuc2Zvcm0oKSA6IG51bGwgLy8gaGFuZGxlIDx1c2UgLz5cbiAgICAgICAgICAgIDtcbiAgICAgICAgICAgIGlmICghdHJhbnNmb3JtKSB7XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtID0gVHJhbnNmb3JtLmZyb21FbGVtZW50KGRvY3VtZW50LCBjaGlsZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHJhbnNmb3JtKSB7XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtLmFwcGx5KGN0eCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjaGlsZC5wYXRoKGN0eCk7XG4gICAgICAgICAgICBpZiAoY29udGV4dFByb3RvKSB7XG4gICAgICAgICAgICAgICAgY29udGV4dFByb3RvLmNsb3NlUGF0aCA9IGNsb3NlUGF0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0cmFuc2Zvcm0pIHtcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm0udW5hcHBseShjdHgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgUmVmbGVjdC5hcHBseShjbG9zZVBhdGgsIGN0eCwgW10pO1xuICAgICAgICBjdHguY2xpcCgpO1xuICAgICAgICBpZiAoY29udGV4dFByb3RvKSB7XG4gICAgICAgICAgICBjb250ZXh0UHJvdG8uYmVnaW5QYXRoID0gYmVnaW5QYXRoO1xuICAgICAgICAgICAgY29udGV4dFByb3RvLmNsb3NlUGF0aCA9IGNsb3NlUGF0aDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZW5kZXIoXykge1xuICAgIC8vIE5PIFJFTkRFUlxuICAgIH1cbiAgICBjb25zdHJ1Y3RvciguLi5hcmdzKXtcbiAgICAgICAgc3VwZXIoLi4uYXJncyk7XG4gICAgICAgIHRoaXMudHlwZSA9ICdjbGlwUGF0aCc7XG4gICAgfVxufVxuXG5jbGFzcyBGaWx0ZXJFbGVtZW50IGV4dGVuZHMgRWxlbWVudCB7XG4gICAgYXBwbHkoY3R4LCBlbGVtZW50KSB7XG4gICAgICAgIC8vIHJlbmRlciBhcyB0ZW1wIHN2Z1xuICAgICAgICBjb25zdCB7IGRvY3VtZW50ICwgY2hpbGRyZW4gIH0gPSB0aGlzO1xuICAgICAgICBjb25zdCBib3VuZGluZ0JveCA9ICdnZXRCb3VuZGluZ0JveCcgaW4gZWxlbWVudCA/IGVsZW1lbnQuZ2V0Qm91bmRpbmdCb3goY3R4KSA6IG51bGw7XG4gICAgICAgIGlmICghYm91bmRpbmdCb3gpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcHggPSAwO1xuICAgICAgICBsZXQgcHkgPSAwO1xuICAgICAgICBjaGlsZHJlbi5mb3JFYWNoKChjaGlsZCk9PntcbiAgICAgICAgICAgIGNvbnN0IGVmZCA9IGNoaWxkLmV4dHJhRmlsdGVyRGlzdGFuY2UgfHwgMDtcbiAgICAgICAgICAgIHB4ID0gTWF0aC5tYXgocHgsIGVmZCk7XG4gICAgICAgICAgICBweSA9IE1hdGgubWF4KHB5LCBlZmQpO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3Qgd2lkdGggPSBNYXRoLmZsb29yKGJvdW5kaW5nQm94LndpZHRoKTtcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gTWF0aC5mbG9vcihib3VuZGluZ0JveC5oZWlnaHQpO1xuICAgICAgICBjb25zdCB0bXBDYW52YXNXaWR0aCA9IHdpZHRoICsgMiAqIHB4O1xuICAgICAgICBjb25zdCB0bXBDYW52YXNIZWlnaHQgPSBoZWlnaHQgKyAyICogcHk7XG4gICAgICAgIGlmICh0bXBDYW52YXNXaWR0aCA8IDEgfHwgdG1wQ2FudmFzSGVpZ2h0IDwgMSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHggPSBNYXRoLmZsb29yKGJvdW5kaW5nQm94LngpO1xuICAgICAgICBjb25zdCB5ID0gTWF0aC5mbG9vcihib3VuZGluZ0JveC55KTtcbiAgICAgICAgY29uc3QgaWdub3JlZFN0eWxlcyA9IHRoaXMucmVtb3ZlU3R5bGVzKGVsZW1lbnQsIEZpbHRlckVsZW1lbnQuaWdub3JlU3R5bGVzKTtcbiAgICAgICAgY29uc3QgdG1wQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlQ2FudmFzKHRtcENhbnZhc1dpZHRoLCB0bXBDYW52YXNIZWlnaHQpO1xuICAgICAgICBjb25zdCB0bXBDdHggPSB0bXBDYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICAgICAgZG9jdW1lbnQuc2NyZWVuLnNldERlZmF1bHRzKHRtcEN0eCk7XG4gICAgICAgIHRtcEN0eC50cmFuc2xhdGUoLXggKyBweCwgLXkgKyBweSk7XG4gICAgICAgIGVsZW1lbnQucmVuZGVyKHRtcEN0eCk7XG4gICAgICAgIC8vIGFwcGx5IGZpbHRlcnNcbiAgICAgICAgY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpPT57XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNoaWxkLmFwcGx5ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgY2hpbGQuYXBwbHkodG1wQ3R4LCAwLCAwLCB0bXBDYW52YXNXaWR0aCwgdG1wQ2FudmFzSGVpZ2h0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIC8vIHJlbmRlciBvbiBtZVxuICAgICAgICBjdHguZHJhd0ltYWdlKHRtcENhbnZhcywgMCwgMCwgdG1wQ2FudmFzV2lkdGgsIHRtcENhbnZhc0hlaWdodCwgeCAtIHB4LCB5IC0gcHksIHRtcENhbnZhc1dpZHRoLCB0bXBDYW52YXNIZWlnaHQpO1xuICAgICAgICB0aGlzLnJlc3RvcmVTdHlsZXMoZWxlbWVudCwgaWdub3JlZFN0eWxlcyk7XG4gICAgfVxuICAgIHJlbmRlcihfKSB7XG4gICAgLy8gTk8gUkVOREVSXG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKC4uLmFyZ3Mpe1xuICAgICAgICBzdXBlciguLi5hcmdzKTtcbiAgICAgICAgdGhpcy50eXBlID0gJ2ZpbHRlcic7XG4gICAgfVxufVxuRmlsdGVyRWxlbWVudC5pZ25vcmVTdHlsZXMgPSBbXG4gICAgJ2ZpbHRlcicsXG4gICAgJ3RyYW5zZm9ybScsXG4gICAgJ2NsaXAtcGF0aCdcbl07XG5cbmNsYXNzIEZlRHJvcFNoYWRvd0VsZW1lbnQgZXh0ZW5kcyBFbGVtZW50IHtcbiAgICBhcHBseShfLCBfeCwgX3ksIF93aWR0aCwgX2hlaWdodCkge1xuICAgIC8vIFRPRE86IGltcGxlbWVudFxuICAgIH1cbiAgICBjb25zdHJ1Y3Rvcihkb2N1bWVudCwgbm9kZSwgY2FwdHVyZVRleHROb2Rlcyl7XG4gICAgICAgIHN1cGVyKGRvY3VtZW50LCBub2RlLCBjYXB0dXJlVGV4dE5vZGVzKTtcbiAgICAgICAgdGhpcy50eXBlID0gJ2ZlRHJvcFNoYWRvdyc7XG4gICAgICAgIHRoaXMuYWRkU3R5bGVzRnJvbVN0eWxlRGVmaW5pdGlvbigpO1xuICAgIH1cbn1cblxuY2xhc3MgRmVNb3JwaG9sb2d5RWxlbWVudCBleHRlbmRzIEVsZW1lbnQge1xuICAgIGFwcGx5KF8sIF94LCBfeSwgX3dpZHRoLCBfaGVpZ2h0KSB7XG4gICAgLy8gVE9ETzogaW1wbGVtZW50XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKC4uLmFyZ3Mpe1xuICAgICAgICBzdXBlciguLi5hcmdzKTtcbiAgICAgICAgdGhpcy50eXBlID0gJ2ZlTW9ycGhvbG9neSc7XG4gICAgfVxufVxuXG5jbGFzcyBGZUNvbXBvc2l0ZUVsZW1lbnQgZXh0ZW5kcyBFbGVtZW50IHtcbiAgICBhcHBseShfLCBfeCwgX3ksIF93aWR0aCwgX2hlaWdodCkge1xuICAgIC8vIFRPRE86IGltcGxlbWVudFxuICAgIH1cbiAgICBjb25zdHJ1Y3RvciguLi5hcmdzKXtcbiAgICAgICAgc3VwZXIoLi4uYXJncyk7XG4gICAgICAgIHRoaXMudHlwZSA9ICdmZUNvbXBvc2l0ZSc7XG4gICAgfVxufVxuXG5jbGFzcyBGZUdhdXNzaWFuQmx1ckVsZW1lbnQgZXh0ZW5kcyBFbGVtZW50IHtcbiAgICBhcHBseShjdHgsIHgsIHksIHdpZHRoLCBoZWlnaHQpIHtcbiAgICAgICAgY29uc3QgeyBkb2N1bWVudCAsIGJsdXJSYWRpdXMgIH0gPSB0aGlzO1xuICAgICAgICBjb25zdCBib2R5ID0gZG9jdW1lbnQud2luZG93ID8gZG9jdW1lbnQud2luZG93LmRvY3VtZW50LmJvZHkgOiBudWxsO1xuICAgICAgICBjb25zdCBjYW52YXMgPSBjdHguY2FudmFzO1xuICAgICAgICAvLyBTdGFja0JsdXIgcmVxdWlyZXMgY2FudmFzIGJlIG9uIGRvY3VtZW50XG4gICAgICAgIGNhbnZhcy5pZCA9IGRvY3VtZW50LmdldFVuaXF1ZUlkKCk7XG4gICAgICAgIGlmIChib2R5KSB7XG4gICAgICAgICAgICBjYW52YXMuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgICAgIGJvZHkuYXBwZW5kQ2hpbGQoY2FudmFzKTtcbiAgICAgICAgfVxuICAgICAgICBjYW52YXNSR0JBKGNhbnZhcywgeCwgeSwgd2lkdGgsIGhlaWdodCwgYmx1clJhZGl1cyk7XG4gICAgICAgIGlmIChib2R5KSB7XG4gICAgICAgICAgICBib2R5LnJlbW92ZUNoaWxkKGNhbnZhcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3RydWN0b3IoZG9jdW1lbnQsIG5vZGUsIGNhcHR1cmVUZXh0Tm9kZXMpe1xuICAgICAgICBzdXBlcihkb2N1bWVudCwgbm9kZSwgY2FwdHVyZVRleHROb2Rlcyk7XG4gICAgICAgIHRoaXMudHlwZSA9ICdmZUdhdXNzaWFuQmx1cic7XG4gICAgICAgIHRoaXMuYmx1clJhZGl1cyA9IE1hdGguZmxvb3IodGhpcy5nZXRBdHRyaWJ1dGUoJ3N0ZERldmlhdGlvbicpLmdldE51bWJlcigpKTtcbiAgICAgICAgdGhpcy5leHRyYUZpbHRlckRpc3RhbmNlID0gdGhpcy5ibHVyUmFkaXVzO1xuICAgIH1cbn1cblxuY2xhc3MgVGl0bGVFbGVtZW50IGV4dGVuZHMgRWxlbWVudCB7XG4gICAgY29uc3RydWN0b3IoLi4uYXJncyl7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3MpO1xuICAgICAgICB0aGlzLnR5cGUgPSAndGl0bGUnO1xuICAgIH1cbn1cblxuY2xhc3MgRGVzY0VsZW1lbnQgZXh0ZW5kcyBFbGVtZW50IHtcbiAgICBjb25zdHJ1Y3RvciguLi5hcmdzKXtcbiAgICAgICAgc3VwZXIoLi4uYXJncyk7XG4gICAgICAgIHRoaXMudHlwZSA9ICdkZXNjJztcbiAgICB9XG59XG5cbmNvbnN0IGVsZW1lbnRzID0ge1xuICAgICdzdmcnOiBTVkdFbGVtZW50LFxuICAgICdyZWN0JzogUmVjdEVsZW1lbnQsXG4gICAgJ2NpcmNsZSc6IENpcmNsZUVsZW1lbnQsXG4gICAgJ2VsbGlwc2UnOiBFbGxpcHNlRWxlbWVudCxcbiAgICAnbGluZSc6IExpbmVFbGVtZW50LFxuICAgICdwb2x5bGluZSc6IFBvbHlsaW5lRWxlbWVudCxcbiAgICAncG9seWdvbic6IFBvbHlnb25FbGVtZW50LFxuICAgICdwYXRoJzogUGF0aEVsZW1lbnQsXG4gICAgJ3BhdHRlcm4nOiBQYXR0ZXJuRWxlbWVudCxcbiAgICAnbWFya2VyJzogTWFya2VyRWxlbWVudCxcbiAgICAnZGVmcyc6IERlZnNFbGVtZW50LFxuICAgICdsaW5lYXJHcmFkaWVudCc6IExpbmVhckdyYWRpZW50RWxlbWVudCxcbiAgICAncmFkaWFsR3JhZGllbnQnOiBSYWRpYWxHcmFkaWVudEVsZW1lbnQsXG4gICAgJ3N0b3AnOiBTdG9wRWxlbWVudCxcbiAgICAnYW5pbWF0ZSc6IEFuaW1hdGVFbGVtZW50LFxuICAgICdhbmltYXRlQ29sb3InOiBBbmltYXRlQ29sb3JFbGVtZW50LFxuICAgICdhbmltYXRlVHJhbnNmb3JtJzogQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQsXG4gICAgJ2ZvbnQnOiBGb250RWxlbWVudCxcbiAgICAnZm9udC1mYWNlJzogRm9udEZhY2VFbGVtZW50LFxuICAgICdtaXNzaW5nLWdseXBoJzogTWlzc2luZ0dseXBoRWxlbWVudCxcbiAgICAnZ2x5cGgnOiBHbHlwaEVsZW1lbnQsXG4gICAgJ3RleHQnOiBUZXh0RWxlbWVudCxcbiAgICAndHNwYW4nOiBUU3BhbkVsZW1lbnQsXG4gICAgJ3RyZWYnOiBUUmVmRWxlbWVudCxcbiAgICAnYSc6IEFFbGVtZW50LFxuICAgICd0ZXh0UGF0aCc6IFRleHRQYXRoRWxlbWVudCxcbiAgICAnaW1hZ2UnOiBJbWFnZUVsZW1lbnQsXG4gICAgJ2cnOiBHRWxlbWVudCxcbiAgICAnc3ltYm9sJzogU3ltYm9sRWxlbWVudCxcbiAgICAnc3R5bGUnOiBTdHlsZUVsZW1lbnQsXG4gICAgJ3VzZSc6IFVzZUVsZW1lbnQsXG4gICAgJ21hc2snOiBNYXNrRWxlbWVudCxcbiAgICAnY2xpcFBhdGgnOiBDbGlwUGF0aEVsZW1lbnQsXG4gICAgJ2ZpbHRlcic6IEZpbHRlckVsZW1lbnQsXG4gICAgJ2ZlRHJvcFNoYWRvdyc6IEZlRHJvcFNoYWRvd0VsZW1lbnQsXG4gICAgJ2ZlTW9ycGhvbG9neSc6IEZlTW9ycGhvbG9neUVsZW1lbnQsXG4gICAgJ2ZlQ29tcG9zaXRlJzogRmVDb21wb3NpdGVFbGVtZW50LFxuICAgICdmZUNvbG9yTWF0cml4JzogRmVDb2xvck1hdHJpeEVsZW1lbnQsXG4gICAgJ2ZlR2F1c3NpYW5CbHVyJzogRmVHYXVzc2lhbkJsdXJFbGVtZW50LFxuICAgICd0aXRsZSc6IFRpdGxlRWxlbWVudCxcbiAgICAnZGVzYyc6IERlc2NFbGVtZW50XG59O1xuXG5mdW5jdGlvbiBjcmVhdGVDYW52YXMod2lkdGgsIGhlaWdodCkge1xuICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgIGNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgcmV0dXJuIGNhbnZhcztcbn1cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUltYWdlKHNyYykge1xuICAgIGxldCBhbm9ueW1vdXNDcm9zc09yaWdpbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzFdIDogZmFsc2U7XG4gICAgY29uc3QgaW1hZ2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtcbiAgICBpZiAoYW5vbnltb3VzQ3Jvc3NPcmlnaW4pIHtcbiAgICAgICAgaW1hZ2UuY3Jvc3NPcmlnaW4gPSAnQW5vbnltb3VzJztcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpPT57XG4gICAgICAgIGltYWdlLm9ubG9hZCA9ICgpPT57XG4gICAgICAgICAgICByZXNvbHZlKGltYWdlKTtcbiAgICAgICAgfTtcbiAgICAgICAgaW1hZ2Uub25lcnJvciA9IChfZXZlbnQsIF9zb3VyY2UsIF9saW5lbm8sIF9jb2xubywgZXJyb3IpPT57XG4gICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9O1xuICAgICAgICBpbWFnZS5zcmMgPSBzcmM7XG4gICAgfSk7XG59XG5jb25zdCBERUZBVUxUX0VNX1NJWkUgPSAxMjtcbmNsYXNzIERvY3VtZW50IHtcbiAgICBiaW5kQ3JlYXRlSW1hZ2UoY3JlYXRlSW1hZ2UxLCBhbm9ueW1vdXNDcm9zc09yaWdpbikge1xuICAgICAgICBpZiAodHlwZW9mIGFub255bW91c0Nyb3NzT3JpZ2luID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIHJldHVybiAoc291cmNlLCBmb3JjZUFub255bW91c0Nyb3NzT3JpZ2luKT0+Y3JlYXRlSW1hZ2UxKHNvdXJjZSwgdHlwZW9mIGZvcmNlQW5vbnltb3VzQ3Jvc3NPcmlnaW4gPT09ICdib29sZWFuJyA/IGZvcmNlQW5vbnltb3VzQ3Jvc3NPcmlnaW4gOiBhbm9ueW1vdXNDcm9zc09yaWdpbilcbiAgICAgICAgICAgIDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3JlYXRlSW1hZ2UxO1xuICAgIH1cbiAgICBnZXQgd2luZG93KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zY3JlZW4ud2luZG93O1xuICAgIH1cbiAgICBnZXQgZmV0Y2goKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNjcmVlbi5mZXRjaDtcbiAgICB9XG4gICAgZ2V0IGN0eCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2NyZWVuLmN0eDtcbiAgICB9XG4gICAgZ2V0IGVtU2l6ZSgpIHtcbiAgICAgICAgY29uc3QgeyBlbVNpemVTdGFjayAgfSA9IHRoaXM7XG4gICAgICAgIHJldHVybiBlbVNpemVTdGFja1tlbVNpemVTdGFjay5sZW5ndGggLSAxXSB8fCBERUZBVUxUX0VNX1NJWkU7XG4gICAgfVxuICAgIHNldCBlbVNpemUodmFsdWUpIHtcbiAgICAgICAgY29uc3QgeyBlbVNpemVTdGFjayAgfSA9IHRoaXM7XG4gICAgICAgIGVtU2l6ZVN0YWNrLnB1c2godmFsdWUpO1xuICAgIH1cbiAgICBwb3BFbVNpemUoKSB7XG4gICAgICAgIGNvbnN0IHsgZW1TaXplU3RhY2sgIH0gPSB0aGlzO1xuICAgICAgICBlbVNpemVTdGFjay5wb3AoKTtcbiAgICB9XG4gICAgZ2V0VW5pcXVlSWQoKSB7XG4gICAgICAgIHJldHVybiBcImNhbnZnXCIuY29uY2F0KCsrdGhpcy51bmlxdWVJZCk7XG4gICAgfVxuICAgIGlzSW1hZ2VzTG9hZGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pbWFnZXMuZXZlcnkoKF8pPT5fLmxvYWRlZFxuICAgICAgICApO1xuICAgIH1cbiAgICBpc0ZvbnRzTG9hZGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mb250cy5ldmVyeSgoXyk9Pl8ubG9hZGVkXG4gICAgICAgICk7XG4gICAgfVxuICAgIGNyZWF0ZURvY3VtZW50RWxlbWVudChkb2N1bWVudCkge1xuICAgICAgICBjb25zdCBkb2N1bWVudEVsZW1lbnQgPSB0aGlzLmNyZWF0ZUVsZW1lbnQoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KTtcbiAgICAgICAgZG9jdW1lbnRFbGVtZW50LnJvb3QgPSB0cnVlO1xuICAgICAgICBkb2N1bWVudEVsZW1lbnQuYWRkU3R5bGVzRnJvbVN0eWxlRGVmaW5pdGlvbigpO1xuICAgICAgICB0aGlzLmRvY3VtZW50RWxlbWVudCA9IGRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgcmV0dXJuIGRvY3VtZW50RWxlbWVudDtcbiAgICB9XG4gICAgY3JlYXRlRWxlbWVudChub2RlKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRUeXBlID0gbm9kZS5ub2RlTmFtZS5yZXBsYWNlKC9eW146XSs6LywgJycpO1xuICAgICAgICBjb25zdCBFbGVtZW50VHlwZSA9IERvY3VtZW50LmVsZW1lbnRUeXBlc1tlbGVtZW50VHlwZV07XG4gICAgICAgIGlmIChFbGVtZW50VHlwZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBFbGVtZW50VHlwZSh0aGlzLCBub2RlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFVua25vd25FbGVtZW50KHRoaXMsIG5vZGUpO1xuICAgIH1cbiAgICBjcmVhdGVUZXh0Tm9kZShub2RlKSB7XG4gICAgICAgIHJldHVybiBuZXcgVGV4dE5vZGUodGhpcywgbm9kZSk7XG4gICAgfVxuICAgIHNldFZpZXdCb3goY29uZmlnKSB7XG4gICAgICAgIHRoaXMuc2NyZWVuLnNldFZpZXdCb3goe1xuICAgICAgICAgICAgZG9jdW1lbnQ6IHRoaXMsXG4gICAgICAgICAgICAuLi5jb25maWdcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKGNhbnZnLCB7IHJvb3RFbVNpemUgPURFRkFVTFRfRU1fU0laRSAsIGVtU2l6ZSA9REVGQVVMVF9FTV9TSVpFICwgY3JlYXRlQ2FudmFzOiBjcmVhdGVDYW52YXMxID0gRG9jdW1lbnQuY3JlYXRlQ2FudmFzICwgY3JlYXRlSW1hZ2U6IGNyZWF0ZUltYWdlMiA9IERvY3VtZW50LmNyZWF0ZUltYWdlICwgYW5vbnltb3VzQ3Jvc3NPcmlnaW4gIH0gPSB7fSl7XG4gICAgICAgIHRoaXMuY2FudmcgPSBjYW52ZztcbiAgICAgICAgdGhpcy5kZWZpbml0aW9ucyA9IHt9O1xuICAgICAgICB0aGlzLnN0eWxlcyA9IHt9O1xuICAgICAgICB0aGlzLnN0eWxlc1NwZWNpZmljaXR5ID0ge307XG4gICAgICAgIHRoaXMuaW1hZ2VzID0gW107XG4gICAgICAgIHRoaXMuZm9udHMgPSBbXTtcbiAgICAgICAgdGhpcy5lbVNpemVTdGFjayA9IFtdO1xuICAgICAgICB0aGlzLnVuaXF1ZUlkID0gMDtcbiAgICAgICAgdGhpcy5zY3JlZW4gPSBjYW52Zy5zY3JlZW47XG4gICAgICAgIHRoaXMucm9vdEVtU2l6ZSA9IHJvb3RFbVNpemU7XG4gICAgICAgIHRoaXMuZW1TaXplID0gZW1TaXplO1xuICAgICAgICB0aGlzLmNyZWF0ZUNhbnZhcyA9IGNyZWF0ZUNhbnZhczE7XG4gICAgICAgIHRoaXMuY3JlYXRlSW1hZ2UgPSB0aGlzLmJpbmRDcmVhdGVJbWFnZShjcmVhdGVJbWFnZTIsIGFub255bW91c0Nyb3NzT3JpZ2luKTtcbiAgICAgICAgdGhpcy5zY3JlZW4ud2FpdCgoKT0+dGhpcy5pc0ltYWdlc0xvYWRlZCgpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc2NyZWVuLndhaXQoKCk9PnRoaXMuaXNGb250c0xvYWRlZCgpXG4gICAgICAgICk7XG4gICAgfVxufVxuRG9jdW1lbnQuY3JlYXRlQ2FudmFzID0gY3JlYXRlQ2FudmFzO1xuRG9jdW1lbnQuY3JlYXRlSW1hZ2UgPSBjcmVhdGVJbWFnZTtcbkRvY3VtZW50LmVsZW1lbnRUeXBlcyA9IGVsZW1lbnRzO1xuXG4vKipcbiAqIFNWRyByZW5kZXJlciBvbiBjYW52YXMuXG4gKi8gY2xhc3MgQ2Fudmcge1xuICAgIC8qKlxuICAgKiBDcmVhdGUgQ2FudmcgaW5zdGFuY2UgZnJvbSBTVkcgc291cmNlIHN0cmluZyBvciBVUkwuXG4gICAqIEBwYXJhbSBjdHggLSBSZW5kZXJpbmcgY29udGV4dC5cbiAgICogQHBhcmFtIHN2ZyAtIFNWRyBzb3VyY2Ugc3RyaW5nIG9yIFVSTC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBSZW5kZXJpbmcgb3B0aW9ucy5cbiAgICogQHJldHVybnMgQ2FudmcgaW5zdGFuY2UuXG4gICAqLyBzdGF0aWMgYXN5bmMgZnJvbShjdHgsIHN2Zykge1xuICAgICAgICBsZXQgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzJdIDoge307XG4gICAgICAgIGNvbnN0IHBhcnNlciA9IG5ldyBQYXJzZXIob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHN2Z0RvY3VtZW50ID0gYXdhaXQgcGFyc2VyLnBhcnNlKHN2Zyk7XG4gICAgICAgIHJldHVybiBuZXcgQ2FudmcoY3R4LCBzdmdEb2N1bWVudCwgb3B0aW9ucyk7XG4gICAgfVxuICAgIC8qKlxuICAgKiBDcmVhdGUgQ2FudmcgaW5zdGFuY2UgZnJvbSBTVkcgc291cmNlIHN0cmluZy5cbiAgICogQHBhcmFtIGN0eCAtIFJlbmRlcmluZyBjb250ZXh0LlxuICAgKiBAcGFyYW0gc3ZnIC0gU1ZHIHNvdXJjZSBzdHJpbmcuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gUmVuZGVyaW5nIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIENhbnZnIGluc3RhbmNlLlxuICAgKi8gc3RhdGljIGZyb21TdHJpbmcoY3R4LCBzdmcpIHtcbiAgICAgICAgbGV0IG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHZvaWQgMCA/IGFyZ3VtZW50c1syXSA6IHt9O1xuICAgICAgICBjb25zdCBwYXJzZXIgPSBuZXcgUGFyc2VyKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBzdmdEb2N1bWVudCA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcoc3ZnKTtcbiAgICAgICAgcmV0dXJuIG5ldyBDYW52ZyhjdHgsIHN2Z0RvY3VtZW50LCBvcHRpb25zKTtcbiAgICB9XG4gICAgLyoqXG4gICAqIENyZWF0ZSBuZXcgQ2FudmcgaW5zdGFuY2Ugd2l0aCBpbmhlcml0ZWQgb3B0aW9ucy5cbiAgICogQHBhcmFtIGN0eCAtIFJlbmRlcmluZyBjb250ZXh0LlxuICAgKiBAcGFyYW0gc3ZnIC0gU1ZHIHNvdXJjZSBzdHJpbmcgb3IgVVJMLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFJlbmRlcmluZyBvcHRpb25zLlxuICAgKiBAcmV0dXJucyBDYW52ZyBpbnN0YW5jZS5cbiAgICovIGZvcmsoY3R4LCBzdmcpIHtcbiAgICAgICAgbGV0IG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHZvaWQgMCA/IGFyZ3VtZW50c1syXSA6IHt9O1xuICAgICAgICByZXR1cm4gQ2FudmcuZnJvbShjdHgsIHN2Zywge1xuICAgICAgICAgICAgLi4udGhpcy5vcHRpb25zLFxuICAgICAgICAgICAgLi4ub3B0aW9uc1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAqIENyZWF0ZSBuZXcgQ2FudmcgaW5zdGFuY2Ugd2l0aCBpbmhlcml0ZWQgb3B0aW9ucy5cbiAgICogQHBhcmFtIGN0eCAtIFJlbmRlcmluZyBjb250ZXh0LlxuICAgKiBAcGFyYW0gc3ZnIC0gU1ZHIHNvdXJjZSBzdHJpbmcuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gUmVuZGVyaW5nIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIENhbnZnIGluc3RhbmNlLlxuICAgKi8gZm9ya1N0cmluZyhjdHgsIHN2Zykge1xuICAgICAgICBsZXQgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzJdIDoge307XG4gICAgICAgIHJldHVybiBDYW52Zy5mcm9tU3RyaW5nKGN0eCwgc3ZnLCB7XG4gICAgICAgICAgICAuLi50aGlzLm9wdGlvbnMsXG4gICAgICAgICAgICAuLi5vcHRpb25zXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICogRG9jdW1lbnQgaXMgcmVhZHkgcHJvbWlzZS5cbiAgICogQHJldHVybnMgUmVhZHkgcHJvbWlzZS5cbiAgICovIHJlYWR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zY3JlZW4ucmVhZHkoKTtcbiAgICB9XG4gICAgLyoqXG4gICAqIERvY3VtZW50IGlzIHJlYWR5IHZhbHVlLlxuICAgKiBAcmV0dXJucyBJcyByZWFkeSBvciBub3QuXG4gICAqLyBpc1JlYWR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zY3JlZW4uaXNSZWFkeSgpO1xuICAgIH1cbiAgICAvKipcbiAgICogUmVuZGVyIG9ubHkgZmlyc3QgZnJhbWUsIGlnbm9yaW5nIGFuaW1hdGlvbnMgYW5kIG1vdXNlLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFJlbmRlcmluZyBvcHRpb25zLlxuICAgKi8gYXN5bmMgcmVuZGVyKCkge1xuICAgICAgICBsZXQgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzBdIDoge307XG4gICAgICAgIHRoaXMuc3RhcnQoe1xuICAgICAgICAgICAgZW5hYmxlUmVkcmF3OiB0cnVlLFxuICAgICAgICAgICAgaWdub3JlQW5pbWF0aW9uOiB0cnVlLFxuICAgICAgICAgICAgaWdub3JlTW91c2U6IHRydWUsXG4gICAgICAgICAgICAuLi5vcHRpb25zXG4gICAgICAgIH0pO1xuICAgICAgICBhd2FpdCB0aGlzLnJlYWR5KCk7XG4gICAgICAgIHRoaXMuc3RvcCgpO1xuICAgIH1cbiAgICAvKipcbiAgICogU3RhcnQgcmVuZGVyaW5nLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFJlbmRlciBvcHRpb25zLlxuICAgKi8gc3RhcnQoKSB7XG4gICAgICAgIGxldCBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgICAgICAgY29uc3QgeyBkb2N1bWVudEVsZW1lbnQgLCBzY3JlZW4gLCBvcHRpb25zOiBiYXNlT3B0aW9ucyAgfSA9IHRoaXM7XG4gICAgICAgIHNjcmVlbi5zdGFydChkb2N1bWVudEVsZW1lbnQsIHtcbiAgICAgICAgICAgIGVuYWJsZVJlZHJhdzogdHJ1ZSxcbiAgICAgICAgICAgIC4uLmJhc2VPcHRpb25zLFxuICAgICAgICAgICAgLi4ub3B0aW9uc1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAqIFN0b3AgcmVuZGVyaW5nLlxuICAgKi8gc3RvcCgpIHtcbiAgICAgICAgdGhpcy5zY3JlZW4uc3RvcCgpO1xuICAgIH1cbiAgICAvKipcbiAgICogUmVzaXplIFNWRyB0byBmaXQgaW4gZ2l2ZW4gc2l6ZS5cbiAgICogQHBhcmFtIHdpZHRoXG4gICAqIEBwYXJhbSBoZWlnaHRcbiAgICogQHBhcmFtIHByZXNlcnZlQXNwZWN0UmF0aW9cbiAgICovIHJlc2l6ZSh3aWR0aCkge1xuICAgICAgICBsZXQgaGVpZ2h0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMV0gOiB3aWR0aCwgcHJlc2VydmVBc3BlY3RSYXRpbyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzJdIDogZmFsc2U7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRFbGVtZW50LnJlc2l6ZSh3aWR0aCwgaGVpZ2h0LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvKTtcbiAgICB9XG4gICAgLyoqXG4gICAqIE1haW4gY29uc3RydWN0b3IuXG4gICAqIEBwYXJhbSBjdHggLSBSZW5kZXJpbmcgY29udGV4dC5cbiAgICogQHBhcmFtIHN2ZyAtIFNWRyBEb2N1bWVudC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBSZW5kZXJpbmcgb3B0aW9ucy5cbiAgICovIGNvbnN0cnVjdG9yKGN0eCwgc3ZnLCBvcHRpb25zID0ge30pe1xuICAgICAgICB0aGlzLnBhcnNlciA9IG5ldyBQYXJzZXIob3B0aW9ucyk7XG4gICAgICAgIHRoaXMuc2NyZWVuID0gbmV3IFNjcmVlbihjdHgsIG9wdGlvbnMpO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICBjb25zdCBkb2N1bWVudCA9IG5ldyBEb2N1bWVudCh0aGlzLCBvcHRpb25zKTtcbiAgICAgICAgY29uc3QgZG9jdW1lbnRFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRFbGVtZW50KHN2Zyk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnQgPSBkb2N1bWVudDtcbiAgICAgICAgdGhpcy5kb2N1bWVudEVsZW1lbnQgPSBkb2N1bWVudEVsZW1lbnQ7XG4gICAgfVxufVxuXG5leHBvcnQgeyBBRWxlbWVudCwgQW5pbWF0ZUNvbG9yRWxlbWVudCwgQW5pbWF0ZUVsZW1lbnQsIEFuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LCBCb3VuZGluZ0JveCwgQ0IxLCBDQjIsIENCMywgQ0I0LCBDYW52ZywgQ2lyY2xlRWxlbWVudCwgQ2xpcFBhdGhFbGVtZW50LCBEZWZzRWxlbWVudCwgRGVzY0VsZW1lbnQsIERvY3VtZW50LCBFbGVtZW50LCBFbGxpcHNlRWxlbWVudCwgRmVDb2xvck1hdHJpeEVsZW1lbnQsIEZlQ29tcG9zaXRlRWxlbWVudCwgRmVEcm9wU2hhZG93RWxlbWVudCwgRmVHYXVzc2lhbkJsdXJFbGVtZW50LCBGZU1vcnBob2xvZ3lFbGVtZW50LCBGaWx0ZXJFbGVtZW50LCBGb250LCBGb250RWxlbWVudCwgRm9udEZhY2VFbGVtZW50LCBHRWxlbWVudCwgR2x5cGhFbGVtZW50LCBHcmFkaWVudEVsZW1lbnQsIEltYWdlRWxlbWVudCwgTGluZUVsZW1lbnQsIExpbmVhckdyYWRpZW50RWxlbWVudCwgTWFya2VyRWxlbWVudCwgTWFza0VsZW1lbnQsIE1hdHJpeCwgTWlzc2luZ0dseXBoRWxlbWVudCwgTW91c2UsIFBTRVVET19aRVJPLCBQYXJzZXIsIFBhdGhFbGVtZW50LCBQYXRoUGFyc2VyLCBQYXR0ZXJuRWxlbWVudCwgUG9pbnQsIFBvbHlnb25FbGVtZW50LCBQb2x5bGluZUVsZW1lbnQsIFByb3BlcnR5LCBRQjEsIFFCMiwgUUIzLCBSYWRpYWxHcmFkaWVudEVsZW1lbnQsIFJlY3RFbGVtZW50LCBSZW5kZXJlZEVsZW1lbnQsIFJvdGF0ZSwgU1ZHRWxlbWVudCwgU1ZHRm9udExvYWRlciwgU2NhbGUsIFNjcmVlbiwgU2tldywgU2tld1gsIFNrZXdZLCBTdG9wRWxlbWVudCwgU3R5bGVFbGVtZW50LCBTeW1ib2xFbGVtZW50LCBUUmVmRWxlbWVudCwgVFNwYW5FbGVtZW50LCBUZXh0RWxlbWVudCwgVGV4dFBhdGhFbGVtZW50LCBUaXRsZUVsZW1lbnQsIFRyYW5zZm9ybSwgVHJhbnNsYXRlLCBVbmtub3duRWxlbWVudCwgVXNlRWxlbWVudCwgVmlld1BvcnQsIGNvbXByZXNzU3BhY2VzLCBlbGVtZW50cywgZ2V0U2VsZWN0b3JTcGVjaWZpY2l0eSwgbm9ybWFsaXplQXR0cmlidXRlTmFtZSwgbm9ybWFsaXplQ29sb3IsIHBhcnNlRXh0ZXJuYWxVcmwsIGluZGV4IGFzIHByZXNldHMsIHRvTWF0cml4VmFsdWUsIHRvTnVtYmVycywgdHJpbUxlZnQsIHRyaW1SaWdodCwgdmVjdG9yTWFnbml0dWRlLCB2ZWN0b3JzQW5nbGUsIHZlY3RvcnNSYXRpbyB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwXG4iLCJpbXBvcnQgeyBnZXQgYXMgaWRiR2V0LCBzZXQgYXMgaWRiU2V0IH0gZnJvbSBcImlkYi1rZXl2YWxcIjtcbmltcG9ydCAnLi9zdHlsZXMuc2Nzcyc7XG5pbXBvcnQgY29udmVydFNWRywgeyBJbWFnZVR5cGUgfSBmcm9tIFwiLi9saWIvc3ZnLWNvbnZlcnRcIjtcblxuY29uc3QgZ2V0VHlwZTogKCkgPT4gSW1hZ2VUeXBlID0gKCkgPT4ge1xuICAgIGxldCB0eXBlOiBJbWFnZVR5cGU7XG5cbiAgICBpZiAoKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjdG9nZ2xlLXN2Z1wiKSBhcyBIVE1MSW5wdXRFbGVtZW50KS5jaGVja2VkKSB0eXBlID0gXCJzdmdcIjtcbiAgICBlbHNlIGlmICgoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiN0b2dnbGUtcG5nXCIpIGFzIEhUTUxJbnB1dEVsZW1lbnQpLmNoZWNrZWQpIHR5cGUgPSBcInBuZ1wiO1xuICAgIGVsc2UgdHlwZSA9IFwianBlZ1wiO1xuXG4gICAgcmV0dXJuIHR5cGU7XG59XG5cbmNvbnN0IGdldEZpbGU6ICgpID0+IFByb21pc2U8QmxvYj4gPSBhc3luYyAoKSA9PiB7XG4gICAgbGV0IHR5cGUgPSBnZXRUeXBlKCk7XG4gICAgbGV0IGZpbGU6IEJsb2I7XG4gICAgaWYgKHR5cGUgPT0gXCJzdmdcIikge1xuICAgICAgICBmaWxlID0gbmV3IEJsb2IoWyhkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI3FyXCIpIGFzIFNWR0VsZW1lbnQpLm91dGVySFRNTF0sIHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImltYWdlL3N2Zyt4bWxcIlxuICAgICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGZpbGUgPSBhd2FpdCBjb252ZXJ0U1ZHKChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI3FyXCIpIGFzIFNWR0VsZW1lbnQpLCB0eXBlLCBhd2FpdCBpZGJHZXQoXCJzaXplXCIpID8/IDIwMDAsIGF3YWl0IGlkYkdldChcInNpemVcIikgPz8gMjAwMCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbGU7XG59O1xuY29uc3QgZG93bmxvYWQgPSBhc3luYyAoKSA9PiB7XG4gICAgbGV0IHR5cGUgPSBnZXRUeXBlKCk7XG4gICAgbGV0IGZpbGUgPSBhd2FpdCBnZXRGaWxlKCk7XG4gICAgbGV0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoZmlsZSk7XG5cbiAgICBsZXQgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xuICAgIGEuaHJlZiA9IHVybDtcbiAgICBhLmRvd25sb2FkID0gXCJxci5cIiArICgodHlwZSA9PSBcImpwZWdcIikgPyBcImpwZ1wiIDogdHlwZSk7XG4gICAgYS5jbGljaygpO1xuXG4gICAgVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpO1xufTtcbmNvbnN0IGNvcHkgPSBhc3luYyAoKSA9PiB7XG4gICAgbGV0IHsgc3RhdGU6IHBlcm1pc3Npb24gfSA9IGF3YWl0IG5hdmlnYXRvci5wZXJtaXNzaW9ucy5xdWVyeSh7XG4gICAgICAgIFwibmFtZVwiOiBcImNsaXBib2FyZC13cml0ZVwiIGFzIHVua25vd24gYXMgUGVybWlzc2lvbk5hbWVcbiAgICB9KTtcbiAgICBpZiAocGVybWlzc2lvbiAhPSBcImdyYW50ZWRcIikge1xuICAgICAgICAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNjb3B5XCIpIGFzIEhUTUxCdXR0b25FbGVtZW50KS5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IGZpbGUgPSBhd2FpdCBnZXRGaWxlKCk7XG4gICAgbGV0IGNsaXBib2FyZE9wdHM6IFBhcnRpYWw8UmVjb3JkPHN0cmluZywgQmxvYj4+ID0ge307XG4gICAgY2xpcGJvYXJkT3B0c1tmaWxlLnR5cGVdID0gZmlsZTtcbiAgICBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlKFtuZXcgQ2xpcGJvYXJkSXRlbShjbGlwYm9hcmRPcHRzIGFzIFJlY29yZDxzdHJpbmcsIEJsb2I+KV0pO1xufTtcbmNvbnN0IHVwZGF0ZVFSID0gKCkgPT4ge1xuICAgIGlkYlNldChcImNvbnRlbnRcIiwgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjY29udGVudFwiKSBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSk7XG4gICAgLy8gQHRzLWlnbm9yZSBub3QgYW4gbnBtIHBhY2thZ2VcbiAgICBsZXQgZWxlbSA9IFFSQ29kZSgoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNjb250ZW50XCIpIGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlKSBhcyBTVkdFbGVtZW50O1xuICAgIGVsZW0uaWQgPSBcInFyXCI7XG4gICAgZWxlbS5yZW1vdmVBdHRyaWJ1dGUoXCJ3aWR0aFwiKTtcbiAgICBlbGVtLnJlbW92ZUF0dHJpYnV0ZShcImhlaWdodFwiKTtcbiAgICAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNxclwiKSBhcyBTVkdFbGVtZW50KS5vdXRlckhUTUwgPSBlbGVtLm91dGVySFRNTDtcbn07XG53aW5kb3cub25sb2FkID0gYXN5bmMgKCkgPT4ge1xuICAgIHdpbmRvdy5vbmtleWRvd24gPSAoZTogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICBpZiAoIWUuY3RybEtleSAmJiAhZS5tZXRhS2V5KSByZXR1cm47XG4gICAgICAgIHN3aXRjaCAoZS5rZXkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJzXCI6IHtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjdG9nZ2xlLXN2Z1wiKSBhcyBIVE1MSW5wdXRFbGVtZW50KS5jaGVja2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJwXCI6IHtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjdG9nZ2xlLXBuZ1wiKSBhcyBIVE1MSW5wdXRFbGVtZW50KS5jaGVja2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJqXCI6IHtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjdG9nZ2xlLWpwZ1wiKSBhcyBIVE1MSW5wdXRFbGVtZW50KS5jaGVja2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJkXCI6IHtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgZG93bmxvYWQoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJjXCI6IHtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgY29weSgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBsZXQgY29udGVudCA9IGF3YWl0IGlkYkdldChcImNvbnRlbnRcIik7XG4gICAgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjY29udGVudFwiKSBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSA9IGNvbnRlbnQgPz8gd2luZG93LmxvY2F0aW9uLm9yaWdpbjtcbiAgICB1cGRhdGVRUigpO1xuICAgIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI2NvbnRlbnRcIikgYXMgSFRNTElucHV0RWxlbWVudCkub25rZXl1cCA9IChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI2NvbnRlbnRcIikgYXMgSFRNTElucHV0RWxlbWVudCkub25wYXN0ZSA9ICgpID0+IHVwZGF0ZVFSKCk7XG4gICAgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjY29udGVudFwiKSBhcyBIVE1MSW5wdXRFbGVtZW50KS5kaXNhYmxlZCA9IGZhbHNlO1xuICAgIGxldCB0eXBlID0gYXdhaXQgaWRiR2V0KFwiZXhwb3J0LXR5cGVcIikgYXMgSW1hZ2VUeXBlID8/IFwicG5nXCI7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgXCJqcGVnXCI6IHtcbiAgICAgICAgICAgIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI3RvZ2dsZS1qcGdcIikgYXMgSFRNTElucHV0RWxlbWVudCkuY2hlY2tlZCA9IHRydWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwic3ZnXCI6IHtcbiAgICAgICAgICAgIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI3RvZ2dsZS1zdmdcIikgYXMgSFRNTElucHV0RWxlbWVudCkuY2hlY2tlZCA9IHRydWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwicG5nXCI6IHtcbiAgICAgICAgICAgIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI3RvZ2dsZS1wbmdcIikgYXMgSFRNTElucHV0RWxlbWVudCkuY2hlY2tlZCA9IHRydWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiN0b2dnbGVcIikgYXMgSFRNTERpdkVsZW1lbnQpLm9uY2xpY2sgPSAoKSA9PiBpZGJTZXQoXCJleHBvcnQtdHlwZVwiLCBnZXRUeXBlKCkpO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBmb3IgKGxldCBpIG9mIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJpbnB1dFtuYW1lPXRvZ2dsZS1zdGF0ZV1cIikpIHtcbiAgICAgICAgKGkgYXMgSFRNTElucHV0RWxlbWVudCkuZGlzYWJsZWQgPSBmYWxzZTtcbiAgICB9XG4gICAgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjY29weVwiKSBhcyBIVE1MQnV0dG9uRWxlbWVudCkub25jbGljayA9IGNvcHk7XG4gICAgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjZG93bmxvYWRcIikgYXMgSFRNTEJ1dHRvbkVsZW1lbnQpLm9uY2xpY2sgPSBkb3dubG9hZDtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgZm9yIChsZXQgaSBvZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNleHBvcnRcIikgYXMgSFRNTERpdkVsZW1lbnQpLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiYnV0dG9uXCIpKSB7XG4gICAgICAgIGkuZGlzYWJsZWQgPSBmYWxzZTtcbiAgICB9XG59OyIsImltcG9ydCB7IENhbnZnLCBwcmVzZXRzLCBJT3B0aW9ucyB9IGZyb20gXCJjYW52Z1wiO1xuXG5leHBvcnQgdHlwZSBDb252ZXJ0YWJsZSA9IFwicG5nXCIgfCBcImpwZWdcIjtcblxuZXhwb3J0IHR5cGUgSW1hZ2VUeXBlID0gXCJzdmdcIiB8IENvbnZlcnRhYmxlO1xuXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiBjb252ZXJ0KHN2ZzogU1ZHRWxlbWVudCwgdHlwZTogQ29udmVydGFibGUsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogUHJvbWlzZTxCbG9iPiB7XG4gICAgbGV0IGNhbnZhcyA9IG5ldyBPZmZzY3JlZW5DYW52YXMod2lkdGgsIGhlaWdodCk7XG4gICAgYXdhaXQgKGF3YWl0IENhbnZnLmZyb20oXG4gICAgICAgIChjYW52YXMpLmdldENvbnRleHQoJzJkJykgYXMgT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgICAgICBzdmcub3V0ZXJIVE1MLFxuICAgICAgICBwcmVzZXRzLm9mZnNjcmVlbigpIGFzIElPcHRpb25zXG4gICAgKSkucmVuZGVyKCk7XG4gICAgcmV0dXJuIGF3YWl0IGNhbnZhcy5jb252ZXJ0VG9CbG9iKHtcbiAgICAgICAgXCJ0eXBlXCI6IFwiaW1hZ2UvXCIgKyB0eXBlXG4gICAgfSk7XG59Il0sIm5hbWVzIjpbImdldE5hbm9TZWNvbmRzIiwiaHJ0aW1lIiwibG9hZFRpbWUiLCJtb2R1bGVMb2FkVGltZSIsIm5vZGVMb2FkVGltZSIsInVwVGltZSIsInBlcmZvcm1hbmNlIiwibm93IiwibW9kdWxlIiwiZXhwb3J0cyIsInByb2Nlc3MiLCJociIsInVwdGltZSIsIkRhdGUiLCJnZXRUaW1lIiwiY2FsbCIsInRoaXMiLCJyb290Iiwid2luZG93IiwiZyIsInZlbmRvcnMiLCJzdWZmaXgiLCJyYWYiLCJjYWYiLCJpIiwibGVuZ3RoIiwibGFzdCIsImlkIiwicXVldWUiLCJmcmFtZUR1cmF0aW9uIiwiY2FsbGJhY2siLCJfbm93IiwibmV4dCIsIk1hdGgiLCJtYXgiLCJzZXRUaW1lb3V0IiwiY3AiLCJzbGljZSIsImNhbmNlbGxlZCIsImUiLCJyb3VuZCIsInB1c2giLCJoYW5kbGUiLCJmbiIsImNhbmNlbCIsImFwcGx5IiwiYXJndW1lbnRzIiwicG9seWZpbGwiLCJvYmplY3QiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJjYW5jZWxBbmltYXRpb25GcmFtZSIsImNvbG9yX3N0cmluZyIsIm9rIiwiYWxwaGEiLCJjaGFyQXQiLCJzdWJzdHIiLCJyZXBsYWNlIiwidG9Mb3dlckNhc2UiLCJzaW1wbGVfY29sb3JzIiwiYWxpY2VibHVlIiwiYW50aXF1ZXdoaXRlIiwiYXF1YSIsImFxdWFtYXJpbmUiLCJhenVyZSIsImJlaWdlIiwiYmlzcXVlIiwiYmxhY2siLCJibGFuY2hlZGFsbW9uZCIsImJsdWUiLCJibHVldmlvbGV0IiwiYnJvd24iLCJidXJseXdvb2QiLCJjYWRldGJsdWUiLCJjaGFydHJldXNlIiwiY2hvY29sYXRlIiwiY29yYWwiLCJjb3JuZmxvd2VyYmx1ZSIsImNvcm5zaWxrIiwiY3JpbXNvbiIsImN5YW4iLCJkYXJrYmx1ZSIsImRhcmtjeWFuIiwiZGFya2dvbGRlbnJvZCIsImRhcmtncmF5IiwiZGFya2dyZWVuIiwiZGFya2toYWtpIiwiZGFya21hZ2VudGEiLCJkYXJrb2xpdmVncmVlbiIsImRhcmtvcmFuZ2UiLCJkYXJrb3JjaGlkIiwiZGFya3JlZCIsImRhcmtzYWxtb24iLCJkYXJrc2VhZ3JlZW4iLCJkYXJrc2xhdGVibHVlIiwiZGFya3NsYXRlZ3JheSIsImRhcmt0dXJxdW9pc2UiLCJkYXJrdmlvbGV0IiwiZGVlcHBpbmsiLCJkZWVwc2t5Ymx1ZSIsImRpbWdyYXkiLCJkb2RnZXJibHVlIiwiZmVsZHNwYXIiLCJmaXJlYnJpY2siLCJmbG9yYWx3aGl0ZSIsImZvcmVzdGdyZWVuIiwiZnVjaHNpYSIsImdhaW5zYm9ybyIsImdob3N0d2hpdGUiLCJnb2xkIiwiZ29sZGVucm9kIiwiZ3JheSIsImdyZWVuIiwiZ3JlZW55ZWxsb3ciLCJob25leWRldyIsImhvdHBpbmsiLCJpbmRpYW5yZWQiLCJpbmRpZ28iLCJpdm9yeSIsImtoYWtpIiwibGF2ZW5kZXIiLCJsYXZlbmRlcmJsdXNoIiwibGF3bmdyZWVuIiwibGVtb25jaGlmZm9uIiwibGlnaHRibHVlIiwibGlnaHRjb3JhbCIsImxpZ2h0Y3lhbiIsImxpZ2h0Z29sZGVucm9keWVsbG93IiwibGlnaHRncmV5IiwibGlnaHRncmVlbiIsImxpZ2h0cGluayIsImxpZ2h0c2FsbW9uIiwibGlnaHRzZWFncmVlbiIsImxpZ2h0c2t5Ymx1ZSIsImxpZ2h0c2xhdGVibHVlIiwibGlnaHRzbGF0ZWdyYXkiLCJsaWdodHN0ZWVsYmx1ZSIsImxpZ2h0eWVsbG93IiwibGltZSIsImxpbWVncmVlbiIsImxpbmVuIiwibWFnZW50YSIsIm1hcm9vbiIsIm1lZGl1bWFxdWFtYXJpbmUiLCJtZWRpdW1ibHVlIiwibWVkaXVtb3JjaGlkIiwibWVkaXVtcHVycGxlIiwibWVkaXVtc2VhZ3JlZW4iLCJtZWRpdW1zbGF0ZWJsdWUiLCJtZWRpdW1zcHJpbmdncmVlbiIsIm1lZGl1bXR1cnF1b2lzZSIsIm1lZGl1bXZpb2xldHJlZCIsIm1pZG5pZ2h0Ymx1ZSIsIm1pbnRjcmVhbSIsIm1pc3R5cm9zZSIsIm1vY2Nhc2luIiwibmF2YWpvd2hpdGUiLCJuYXZ5Iiwib2xkbGFjZSIsIm9saXZlIiwib2xpdmVkcmFiIiwib3JhbmdlIiwib3JhbmdlcmVkIiwib3JjaGlkIiwicGFsZWdvbGRlbnJvZCIsInBhbGVncmVlbiIsInBhbGV0dXJxdW9pc2UiLCJwYWxldmlvbGV0cmVkIiwicGFwYXlhd2hpcCIsInBlYWNocHVmZiIsInBlcnUiLCJwaW5rIiwicGx1bSIsInBvd2RlcmJsdWUiLCJwdXJwbGUiLCJyZWJlY2NhcHVycGxlIiwicmVkIiwicm9zeWJyb3duIiwicm95YWxibHVlIiwic2FkZGxlYnJvd24iLCJzYWxtb24iLCJzYW5keWJyb3duIiwic2VhZ3JlZW4iLCJzZWFzaGVsbCIsInNpZW5uYSIsInNpbHZlciIsInNreWJsdWUiLCJzbGF0ZWJsdWUiLCJzbGF0ZWdyYXkiLCJzbm93Iiwic3ByaW5nZ3JlZW4iLCJzdGVlbGJsdWUiLCJ0YW4iLCJ0ZWFsIiwidGhpc3RsZSIsInRvbWF0byIsInR1cnF1b2lzZSIsInZpb2xldCIsInZpb2xldHJlZCIsIndoZWF0Iiwid2hpdGUiLCJ3aGl0ZXNtb2tlIiwieWVsbG93IiwieWVsbG93Z3JlZW4iLCJjb2xvcl9kZWZzIiwicmUiLCJleGFtcGxlIiwiYml0cyIsInBhcnNlSW50IiwicGFyc2VGbG9hdCIsInByb2Nlc3NvciIsImV4ZWMiLCJjaGFubmVscyIsInIiLCJiIiwiaXNOYU4iLCJ0b1JHQiIsInRvUkdCQSIsInRvSGV4IiwidG9TdHJpbmciLCJnZXRIZWxwWE1MIiwiZXhhbXBsZXMiLCJBcnJheSIsImoiLCJzYyIsInhtbCIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsInNldEF0dHJpYnV0ZSIsImxpc3RfaXRlbSIsImxpc3RfY29sb3IiLCJSR0JDb2xvciIsImV4YW1wbGVfZGl2Iiwic3R5bGUiLCJjc3NUZXh0IiwiYXBwZW5kQ2hpbGQiLCJjcmVhdGVUZXh0Tm9kZSIsImxpc3RfaXRlbV92YWx1ZSIsIl9fd2VicGFja19tb2R1bGVfY2FjaGVfXyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImNhY2hlZE1vZHVsZSIsInVuZGVmaW5lZCIsIl9fd2VicGFja19tb2R1bGVzX18iLCJnbG9iYWxUaGlzIiwiRnVuY3Rpb24iLCJwcm9taXNpZnlSZXF1ZXN0IiwicmVxdWVzdCIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0Iiwib25jb21wbGV0ZSIsIm9uc3VjY2VzcyIsInJlc3VsdCIsIm9uYWJvcnQiLCJvbmVycm9yIiwiZXJyb3IiLCJkZWZhdWx0R2V0U3RvcmVGdW5jIiwiZGVmYXVsdEdldFN0b3JlIiwiZGJOYW1lIiwic3RvcmVOYW1lIiwiaW5kZXhlZERCIiwib3BlbiIsIm9udXBncmFkZW5lZWRlZCIsImNyZWF0ZU9iamVjdFN0b3JlIiwiZGJwIiwidHhNb2RlIiwidGhlbiIsImRiIiwidHJhbnNhY3Rpb24iLCJvYmplY3RTdG9yZSIsImNyZWF0ZVN0b3JlIiwiZ2V0Iiwia2V5IiwiY3VzdG9tU3RvcmUiLCJzdG9yZSIsInNldCIsInZhbHVlIiwicHV0IiwidCIsIk9iamVjdCIsInNldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJUeXBlRXJyb3IiLCJTdHJpbmciLCJjb25zdHJ1Y3RvciIsImNyZWF0ZSIsImNvcyIsInNpbiIsImEiLCJFcnJvciIsIm4iLCJQSSIsIm8iLCJsQXJjRmxhZyIsInN3ZWVwRmxhZyIsInJYIiwiclkiLCJzIiwieCIsInUiLCJ5IiwiYWJzIiwiaCIsInhSb3QiLCJjIiwicCIsInBvdyIsInNxcnQiLCJtIiwiTyIsImwiLCJUIiwidiIsImNYIiwiY1kiLCJwaGkxIiwiYXRhbjIiLCJwaGkyIiwicmVsYXRpdmUiLCJ4MSIsInkxIiwieDIiLCJ5MiIsIk5hTiIsInR5cGUiLCJfIiwiU01PT1RIX0NVUlZFX1RPIiwiQ1VSVkVfVE8iLCJTTU9PVEhfUVVBRF9UTyIsIlFVQURfVE8iLCJNT1ZFX1RPIiwiQ0xPU0VfUEFUSCIsIkhPUklaX0xJTkVfVE8iLCJMSU5FX1RPIiwiVkVSVF9MSU5FX1RPIiwiZiIsIk4iLCJkIiwiRSIsIkEiLCJDIiwiTSIsIlIiLCJJIiwiUyIsIkwiLCJST1VORCIsIlRPX0FCUyIsIlRPX1JFTCIsIk5PUk1BTElaRV9IVloiLCJBUkMiLCJOT1JNQUxJWkVfU1QiLCJRVF9UT19DIiwiSU5GTyIsIlNBTklUSVpFIiwiTElORV9DT01NQU5EUyIsIk1BVFJJWCIsIlJPVEFURSIsIlRSQU5TTEFURSIsIlNDQUxFIiwiU0tFV19YIiwiYXRhbiIsIlNLRVdfWSIsIlhfQVhJU19TWU1NRVRSWSIsIllfQVhJU19TWU1NRVRSWSIsIkFfVE9fQyIsIm1pbiIsImNlaWwiLCJIIiwiQU5OT1RBVEVfQVJDUyIsIkNMT05FIiwiQ0FMQ1VMQVRFX0JPVU5EUyIsIm1heFgiLCJtaW5YIiwibWF4WSIsIm1pblkiLCJEUkFXSU5HX0NPTU1BTkRTIiwidyIsIm1hcCIsIlUiLCJ0cmFuc2Zvcm0iLCJ0b0FicyIsInRvUmVsIiwibm9ybWFsaXplSFZaIiwibm9ybWFsaXplU1QiLCJxdFRvQyIsImFUb0MiLCJzYW5pdGl6ZSIsInRyYW5zbGF0ZSIsInNjYWxlIiwicm90YXRlIiwibWF0cml4Iiwic2tld1giLCJza2V3WSIsInhTeW1tZXRyeSIsInlTeW1tZXRyeSIsImFubm90YXRlQXJjcyIsImNoYXJDb2RlQXQiLCJjdXJOdW1iZXIiLCJjdXJDb21tYW5kVHlwZSIsImN1ckNvbW1hbmRSZWxhdGl2ZSIsImNhblBhcnNlQ29tbWFuZE9yQ29tbWEiLCJjdXJOdW1iZXJIYXNFeHAiLCJjdXJOdW1iZXJIYXNFeHBEaWdpdHMiLCJjdXJOdW1iZXJIYXNEZWNpbWFsIiwiY3VyQXJncyIsImZpbmlzaCIsInBhcnNlIiwiU3ludGF4RXJyb3IiLCJOdW1iZXIiLCJnZXRQcm90b3R5cGVPZiIsImlzQXJyYXkiLCJjb21tYW5kcyIsImVuY29kZSIsImdldEJvdW5kcyIsIl90eXBlb2YiLCJvYmoiLCJTeW1ib2wiLCJpdGVyYXRvciIsIm11bFRhYmxlIiwic2hnVGFibGUiLCJwcm9jZXNzQ2FudmFzUkdCQSIsImNhbnZhcyIsInRvcFgiLCJ0b3BZIiwid2lkdGgiLCJoZWlnaHQiLCJyYWRpdXMiLCJpbWFnZURhdGEiLCJnZXRFbGVtZW50QnlJZCIsImNvbnRleHQiLCJnZXRDb250ZXh0IiwiZ2V0SW1hZ2VEYXRhIiwiZ2V0SW1hZ2VEYXRhRnJvbUNhbnZhcyIsInN0YWNrRW5kIiwicGl4ZWxzIiwiZGF0YSIsImRpdiIsIndpZHRoTWludXMxIiwiaGVpZ2h0TWludXMxIiwicmFkaXVzUGx1czEiLCJzdW1GYWN0b3IiLCJzdGFja1N0YXJ0IiwiQmx1clN0YWNrIiwic3RhY2siLCJzdGFja0luIiwic3RhY2tPdXQiLCJ5dyIsInlpIiwibXVsU3VtIiwic2hnU3VtIiwicHIiLCJwZyIsInBiIiwicGEiLCJfaSIsInJJblN1bSIsImdJblN1bSIsImJJblN1bSIsImFJblN1bSIsInJPdXRTdW0iLCJnT3V0U3VtIiwiYk91dFN1bSIsImFPdXRTdW0iLCJyU3VtIiwiZ1N1bSIsImJTdW0iLCJhU3VtIiwiX2kyIiwicmJzIiwicGFJbml0aWFsIiwiX2EyIiwiX3AiLCJfc3RhY2tPdXQiLCJfciIsIl9nIiwiX2IiLCJfYSIsIl94IiwiX3ByIiwiX3BnIiwiX3BiIiwiX3BhIiwiX3JPdXRTdW0iLCJfZ091dFN1bSIsIl9iT3V0U3VtIiwiX2FPdXRTdW0iLCJfclN1bSIsIl9nU3VtIiwiX2JTdW0iLCJfYVN1bSIsIl9pMyIsInlwIiwiX2dJblN1bSIsIl9iSW5TdW0iLCJfYUluU3VtIiwiX3JJblN1bSIsIl9pNCIsIl9yYnMiLCJfeSIsIl9wMiIsInByb2Nlc3NJbWFnZURhdGFSR0JBIiwicHV0SW1hZ2VEYXRhIiwiaW5zdGFuY2UiLCJDb25zdHJ1Y3RvciIsIl9jbGFzc0NhbGxDaGVjayIsImluZGV4IiwiZnJlZXplIiwib2Zmc2NyZWVuIiwiRE9NUGFyc2VyIiwiRE9NUGFyc2VyRmFsbGJhY2siLCJwcmVzZXQiLCJpZ25vcmVBbmltYXRpb24iLCJpZ25vcmVNb3VzZSIsImNyZWF0ZUNhbnZhcyIsIk9mZnNjcmVlbkNhbnZhcyIsImNyZWF0ZUltYWdlIiwidXJsIiwicmVzcG9uc2UiLCJmZXRjaCIsImJsb2IiLCJjcmVhdGVJbWFnZUJpdG1hcCIsIlJlZmxlY3QiLCJkZWxldGVQcm9wZXJ0eSIsIm5vZGUiLCJwYXJhbSIsImxvYWRJbWFnZSIsImNvbXByZXNzU3BhY2VzIiwic3RyIiwidG9OdW1iZXJzIiwibWF0Y2hlcyIsIm1hdGNoIiwiYWxsVXBwZXJjYXNlIiwicGFyc2VFeHRlcm5hbFVybCIsInVybE1hdGNoIiwiYXR0cmlidXRlUmVnZXgiLCJpZFJlZ2V4IiwiY2xhc3NSZWdleCIsInBzZXVkb0VsZW1lbnRSZWdleCIsInBzZXVkb0NsYXNzV2l0aEJyYWNrZXRzUmVnZXgiLCJwc2V1ZG9DbGFzc1JlZ2V4IiwiZWxlbWVudFJlZ2V4IiwiZmluZFNlbGVjdG9yTWF0Y2giLCJzZWxlY3RvciIsInJlZ2V4IiwiUFNFVURPX1pFUk8iLCJ2ZWN0b3JNYWduaXR1ZGUiLCJ2ZWN0b3JzUmF0aW8iLCJ2ZWN0b3JzQW5nbGUiLCJhY29zIiwiQ0IxIiwiQ0IyIiwiQ0IzIiwiQ0I0IiwiUUIxIiwiUUIyIiwiUUIzIiwiUHJvcGVydHkiLCJlbXB0eSIsInNwbGl0Iiwic2VwYXJhdG9yIiwibmFtZSIsImdldFN0cmluZyIsInRyaW0iLCJoYXNWYWx1ZSIsInplcm9Jc1ZhbHVlIiwiaXNTdHJpbmciLCJyZWdleHAiLCJ0ZXN0IiwiaXNVcmxEZWZpbml0aW9uIiwiaXNQaXhlbHMiLCJhc1N0cmluZyIsImVuZHNXaXRoIiwic2V0VmFsdWUiLCJnZXRWYWx1ZSIsImRlZiIsImdldE51bWJlciIsImdldENvbG9yIiwiY29sb3IiLCJpc05vcm1hbGl6ZWRDb2xvciIsInN0YXJ0c1dpdGgiLCJyZ2JQYXJ0cyIsIm51bSIsImlzRmxvYXQiLCJub3JtYWxpemVDb2xvciIsImdldERwaSIsImdldFJlbSIsInJvb3RFbVNpemUiLCJnZXRFbSIsImVtU2l6ZSIsImdldFVuaXRzIiwiZ2V0UGl4ZWxzIiwiYXhpc09ySXNGb250U2l6ZSIsInByb2Nlc3NQZXJjZW50IiwiYXhpcyIsImlzRm9udFNpemUiLCJ2aWV3UG9ydCIsInNjcmVlbiIsImNvbXB1dGVTaXplIiwiZ2V0TWlsbGlzZWNvbmRzIiwiZ2V0UmFkaWFucyIsImdldERlZmluaXRpb24iLCJkZWZpbml0aW9ucyIsImdldEZpbGxTdHlsZURlZmluaXRpb24iLCJlbGVtZW50Iiwib3BhY2l0eSIsImNyZWF0ZUdyYWRpZW50IiwiY3R4IiwiY3JlYXRlUGF0dGVybiIsImdldEhyZWZBdHRyaWJ1dGUiLCJwYXR0ZXJuVHJhbnNmb3JtIiwiZ2V0QXR0cmlidXRlIiwiZ2V0VGV4dEJhc2VsaW5lIiwidGV4dEJhc2VsaW5lTWFwcGluZyIsImFkZE9wYWNpdHkiLCJsZW4iLCJjb21tYXMiLCJWaWV3UG9ydCIsImNsZWFyIiwidmlld1BvcnRzIiwic2V0Q3VycmVudCIsInJlbW92ZUN1cnJlbnQiLCJwb3AiLCJnZXRSb290IiwiZ2V0RGVmYXVsdCIsImdldEN1cnJlbnQiLCJERUZBVUxUX1ZJRVdQT1JUX1dJRFRIIiwiREVGQVVMVF9WSUVXUE9SVF9IRUlHSFQiLCJQb2ludCIsInBvaW50IiwiZGVmYXVsdFZhbHVlIiwicGFyc2VTY2FsZSIsInBhcnNlUGF0aCIsInBhdGgiLCJwb2ludHMiLCJwYXRoUG9pbnRzIiwiYW5nbGVUbyIsImFwcGx5VHJhbnNmb3JtIiwieHAiLCJNb3VzZSIsImlzV29ya2luZyIsIndvcmtpbmciLCJzdGFydCIsIm9uQ2xpY2siLCJvbk1vdXNlTW92ZSIsIm9uY2xpY2siLCJvbm1vdXNlbW92ZSIsInN0b3AiLCJoYXNFdmVudHMiLCJldmVudHMiLCJydW5FdmVudHMiLCJldmVudEVsZW1lbnRzIiwiY3Vyc29yIiwiZm9yRWFjaCIsInJ1biIsInBhcmVudCIsImNoZWNrUGF0aCIsImlzUG9pbnRJblBhdGgiLCJjaGVja0JvdW5kaW5nQm94IiwiYm91bmRpbmdCb3giLCJpc1BvaW50SW5Cb3giLCJtYXBYWSIsIm9mZnNldExlZnQiLCJvZmZzZXRUb3AiLCJvZmZzZXRQYXJlbnQiLCJzY3JvbGxYIiwic2Nyb2xsWSIsImV2ZW50IiwiY2xpZW50WCIsImNsaWVudFkiLCJldmVudFRhcmdldCIsImJpbmQiLCJkZWZhdWx0V2luZG93IiwiZGVmYXVsdEZldGNoJDEiLCJTY3JlZW4iLCJ3YWl0IiwiY2hlY2tlciIsIndhaXRzIiwicmVhZHkiLCJyZWFkeVByb21pc2UiLCJpc1JlYWR5IiwiaXNSZWFkeUxvY2siLCJldmVyeSIsInJlc29sdmVSZWFkeSIsInNldERlZmF1bHRzIiwic3Ryb2tlU3R5bGUiLCJsaW5lQ2FwIiwibGluZUpvaW4iLCJtaXRlckxpbWl0Iiwic2V0Vmlld0JveCIsImFzcGVjdFJhdGlvIiwiZGVzaXJlZFdpZHRoIiwiZGVzaXJlZEhlaWdodCIsInJlZlgiLCJyZWZZIiwiY2xpcCIsImNsaXBYIiwiY2xpcFkiLCJjbGVhbkFzcGVjdFJhdGlvIiwiYXNwZWN0UmF0aW9BbGlnbiIsImFzcGVjdFJhdGlvTWVldE9yU2xpY2UiLCJhbGlnbiIsIm1lZXRPclNsaWNlIiwic2NhbGVYIiwic2NhbGVZIiwic2NhbGVNaW4iLCJzY2FsZU1heCIsImZpbmFsRGVzaXJlZFdpZHRoIiwiZmluYWxEZXNpcmVkSGVpZ2h0IiwicmVmWFByb3AiLCJyZWZZUHJvcCIsImhhc1JlZnMiLCJzY2FsZWRDbGlwWCIsInNjYWxlZENsaXBZIiwiYmVnaW5QYXRoIiwibW92ZVRvIiwibGluZVRvIiwiY2xvc2VQYXRoIiwiaXNNZWV0TWluWSIsImlzU2xpY2VNYXhZIiwiaXNNZWV0TWluWCIsImlzU2xpY2VNYXhYIiwiZW5hYmxlUmVkcmF3IiwiaWdub3JlRGltZW5zaW9ucyIsImlnbm9yZUNsZWFyIiwiZm9yY2VSZWRyYXciLCJzY2FsZVdpZHRoIiwic2NhbGVIZWlnaHQiLCJvZmZzZXRYIiwib2Zmc2V0WSIsIm1vdXNlIiwiRlJBTUVSQVRFIiwicmVuZGVyIiwiZGVsdGEiLCJ0aWNrIiwic2hvdWxkVXBkYXRlIiwiaW50ZXJ2YWxJZCIsImFuaW1hdGlvbnMiLCJyZWR1Y2UiLCJhbmltYXRpb24iLCJ1cGRhdGUiLCJpc0ZpcnN0UmVuZGVyIiwid2lkdGhTdHlsZSIsImdldFN0eWxlIiwiaGVpZ2h0U3R5bGUiLCJjb25jYXQiLCJjV2lkdGgiLCJjbGllbnRXaWR0aCIsImNIZWlnaHQiLCJjbGllbnRIZWlnaHQiLCJ2aWV3Qm94IiwieFJhdGlvIiwieVJhdGlvIiwidHJhbnNmb3JtU3R5bGUiLCJjbGVhclJlY3QiLCJkZWZhdWx0RmV0Y2giLCJNQVhfVklSVFVBTF9QSVhFTFMiLCJEZWZhdWx0RE9NUGFyc2VyIiwiUGFyc2VyIiwicmVzb3VyY2UiLCJwYXJzZUZyb21TdHJpbmciLCJsb2FkIiwicGFyc2VyIiwiY2hlY2tEb2N1bWVudCIsImVyciIsInBhcnNlckVycm9yIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJ0ZXh0Q29udGVudCIsInRleHQiLCJNYXRyaXgiLCJvcmlnaW5YIiwib3JpZ2luWSIsInR4IiwidHkiLCJ1bmFwcGx5IiwiZGV0IiwiYXBwbHlUb1BvaW50IiwidHJhbnNmb3JtT3JpZ2luIiwibnVtYmVycyIsInRvTWF0cml4VmFsdWUiLCJTa2V3Iiwic2tldyIsInN1cGVyIiwiYW5nbGUiLCJUcmFuc2Zvcm0iLCJmcm9tRWxlbWVudCIsInRyYW5zZm9ybU9yaWdpblhQcm9wZXJ0eSIsInRyYW5zZm9ybU9yaWdpbllQcm9wZXJ0eSIsInRyYW5zZm9ybXMiLCJ0cmFuc2Zvcm0xIiwicGFyc2VUcmFuc2Zvcm0iLCJUcmFuc2Zvcm1UeXBlIiwidHJhbnNmb3JtVHlwZXMiLCJjeCIsImN5IiwicmFkIiwic2NhbGVTaXplIiwiRWxlbWVudCIsImNyZWF0ZUlmTm90RXhpc3RzIiwiYXR0ciIsImF0dHJpYnV0ZXMiLCJocmVmIiwic2tpcEFuY2VzdG9ycyIsInN0eWxlcyIsInBhcmVudFN0eWxlIiwic2F2ZSIsIm1hc2siLCJhcHBseUVmZmVjdHMiLCJmaWx0ZXIiLCJzZXRDb250ZXh0IiwicmVuZGVyQ2hpbGRyZW4iLCJjbGVhckNvbnRleHQiLCJyZXN0b3JlIiwiY2xpcFBhdGhTdHlsZVByb3AiLCJjaGlsZHJlbiIsImNoaWxkIiwiYWRkQ2hpbGQiLCJjaGlsZE5vZGUiLCJpZ25vcmVDaGlsZFR5cGVzIiwiaW5jbHVkZXMiLCJtYXRjaGVzU2VsZWN0b3IiLCJyZWYiLCJzdHlsZUNsYXNzZXMiLCJzb21lIiwic3R5bGVDbGFzcyIsImFkZFN0eWxlc0Zyb21TdHlsZURlZmluaXRpb24iLCJzdHlsZXNTcGVjaWZpY2l0eSIsInN0eWxlUHJvcCIsInNwZWNpZmljaXR5IiwiZXhpc3RpbmdTcGVjaWZpY2l0eSIsInJlbW92ZVN0eWxlcyIsImlnbm9yZVN0eWxlcyIsInRvUmVzdG9yZSIsInJlc3RvcmVTdHlsZXMiLCJpc0ZpcnN0Q2hpbGQiLCJpbmRleE9mIiwiY2FwdHVyZVRleHROb2RlcyIsImFuaW1hdGlvbkZyb3plbiIsImFuaW1hdGlvbkZyb3plblZhbHVlIiwibm9kZVR5cGUiLCJmcm9tIiwiYXR0cmlidXRlIiwibm9kZU5hbWUiLCJjaGlsZE5vZGVzIiwidGV4dE5vZGUiLCJnZXRUZXh0IiwiVW5rbm93bkVsZW1lbnQiLCJ3cmFwRm9udEZhbWlseSIsImZvbnRGYW1pbHkiLCJ0cmltbWVkIiwicHJlcGFyZUZvbnRTdHlsZSIsImZvbnRTdHlsZSIsInRhcmdldEZvbnRTdHlsZSIsInByZXBhcmVGb250V2VpZ2h0IiwiZm9udFdlaWdodCIsInRhcmdldEZvbnRXZWlnaHQiLCJGb250IiwiaW5oZXJpdCIsImZvbnRWYXJpYW50IiwiZm9udFNpemUiLCJwYXJ0cyIsInBhcnQiLCJ2YXJpYW50cyIsIndlaWdodHMiLCJqb2luIiwiaW5oZXJpdEZvbnQiLCJCb3VuZGluZ0JveCIsImFkZFBvaW50IiwiYWRkWCIsImFkZFkiLCJhZGRCb3VuZGluZ0JveCIsInN1bUN1YmljIiwicDAiLCJwMSIsInAyIiwicDMiLCJiZXppZXJDdXJ2ZUFkZCIsImZvclgiLCJiMmFjIiwidDEiLCJ0MiIsImFkZEJlemllckN1cnZlIiwicDB4IiwicDB5IiwicDF4IiwicDF5IiwicDJ4IiwicDJ5IiwicDN4IiwicDN5IiwiYWRkUXVhZHJhdGljQ3VydmUiLCJjcDF4IiwiY3AxeSIsImNwMngiLCJjcDJ5IiwiUmVuZGVyZWRFbGVtZW50IiwiY2FsY3VsYXRlT3BhY2l0eSIsIm9wYWNpdHlTdHlsZSIsImZyb21NZWFzdXJlIiwiZmlsbFN0eWxlUHJvcCIsImZpbGxPcGFjaXR5U3R5bGVQcm9wIiwic3Ryb2tlU3R5bGVQcm9wIiwic3Ryb2tlT3BhY2l0eVByb3AiLCJmaWxsU3R5bGUiLCJzdHJva2VXaWR0aFN0eWxlUHJvcCIsIm5ld0xpbmVXaWR0aCIsImxpbmVXaWR0aCIsInN0cm9rZUxpbmVjYXBTdHlsZVByb3AiLCJzdHJva2VMaW5lam9pblN0eWxlUHJvcCIsInN0cm9rZU1pdGVybGltaXRQcm9wIiwic3Ryb2tlRGFzaGFycmF5U3R5bGVQcm9wIiwic3Ryb2tlRGFzaG9mZnNldFByb3AiLCJnYXBzIiwic2V0TGluZURhc2giLCJ3ZWJraXRMaW5lRGFzaCIsIm1vekRhc2giLCJvZmZzZXQiLCJsaW5lRGFzaE9mZnNldCIsIndlYmtpdExpbmVEYXNoT2Zmc2V0IiwibW96RGFzaE9mZnNldCIsIm1vZGlmaWVkRW1TaXplU3RhY2siLCJmb250IiwiZm9udFN0eWxlUHJvcCIsImZvbnRTdHlsZVN0eWxlUHJvcCIsImZvbnRWYXJpYW50U3R5bGVQcm9wIiwiZm9udFdlaWdodFN0eWxlUHJvcCIsImZvbnRTaXplU3R5bGVQcm9wIiwiZm9udEZhbWlseVN0eWxlUHJvcCIsImdsb2JhbEFscGhhIiwicG9wRW1TaXplIiwiYXJncyIsIlRleHRFbGVtZW50IiwidGV4dEJhc2VsaW5lIiwiaW5pdGlhbGl6ZUNvb3JkaW5hdGVzIiwibGVhZlRleHRzIiwidGV4dENodW5rU3RhcnQiLCJQT1NJVElWRV9JTkZJTklUWSIsIk5FR0FUSVZFX0lORklOSVRZIiwiZ2V0Qm91bmRpbmdCb3giLCJnZXRURWxlbWVudEJvdW5kaW5nQm94IiwiYWRqdXN0Q2hpbGRDb29yZGluYXRlc1JlY3Vyc2l2ZSIsImNoaWxkQm91bmRpbmdCb3giLCJnZXRDaGlsZEJvdW5kaW5nQm94IiwiZ2V0Rm9udFNpemUiLCJpbmhlcml0Rm9udFNpemUiLCJtZWFzdXJlVGV4dCIsImdldEdseXBoIiwiY2hhciIsImdseXBoIiwiaXNBcmFiaWMiLCJwcmV2Q2hhciIsIm5leHRDaGFyIiwiYXJhYmljRm9ybSIsImFyYWJpY0dseXBocyIsImdseXBocyIsIm1pc3NpbmdHbHlwaCIsImdldFRleHRGcm9tTm9kZSIsInBhcmVudE5vZGUiLCJsYXN0SW5kZXgiLCJyZW5kZXJURWxlbWVudENoaWxkcmVuIiwicmVuZGVyQ2hpbGQiLCJyZW5kZXJUZXh0IiwiY3VzdG9tRm9udCIsInVuaXRzUGVyRW0iLCJmb250RmFjZSIsImN0eEZvbnQiLCJpc1JUTCIsInJldmVyc2UiLCJkeCIsImx3IiwiaG9yaXpBZHZYIiwiZmlsbFRleHQiLCJzdHJva2VUZXh0IiwiYXBwbHlBbmNob3JpbmciLCJmaXJzdEVsZW1lbnQiLCJ0ZXh0QW5jaG9yIiwic2hpZnQiLCJhZGp1c3RDaGlsZENvb3JkaW5hdGVzUmVjdXJzaXZlQ29yZSIsInRleHRQYXJlbnQiLCJpMSIsImFkanVzdENoaWxkQ29vcmRpbmF0ZXMiLCJ4QXR0ciIsInlBdHRyIiwiZHhBdHRyIiwiZHlBdHRyIiwiQm9vbGVhbiIsImdldEluaGVyaXRlZEF0dHJpYnV0ZSIsImkyIiwiaTMiLCJtZWFzdXJlQ2FjaGUiLCJtZWFzdXJlIiwibWVhc3VyZVRhcmdldFRleHQiLCJ0YXJnZXRUZXh0IiwiY3VycmVudCIsInBhcmVudEF0dHIiLCJUU3BhbkVsZW1lbnQiLCJUZXh0Tm9kZSIsIlBhdGhQYXJzZXIiLCJyZXNldCIsImNvbW1hbmQiLCJwcmV2aW91c0NvbW1hbmQiLCJjb250cm9sIiwiYW5nbGVzIiwiaXNFbmQiLCJnZXRQb2ludCIsInhQcm9wIiwieVByb3AiLCJtYWtlQWJzb2x1dGUiLCJnZXRBc0NvbnRyb2xQb2ludCIsImdldEFzQ3VycmVudFBvaW50IiwiZ2V0UmVmbGVjdGVkQ29udHJvbFBvaW50Iiwib3giLCJveSIsImFkZE1hcmtlciIsInByaW9yVG8iLCJhZGRNYXJrZXJBbmdsZSIsImdldE1hcmtlclBvaW50cyIsImdldE1hcmtlckFuZ2xlcyIsIlBhdGhFbGVtZW50IiwicGF0aFBhcnNlciIsInBhdGhNIiwicGF0aEwiLCJwYXRoSCIsInBhdGhWIiwicGF0aEMiLCJwYXRoUyIsInBhdGhRIiwicGF0aFQiLCJwYXRoQSIsInBhdGhaIiwiX2N0eCIsImdldE1hcmtlcnMiLCJtYXJrZXJzIiwiZmlsbFJ1bGVTdHlsZVByb3AiLCJmaWxsIiwic2V0VHJhbnNmb3JtIiwic3Ryb2tlIiwibWFya2Vyc0xhc3RJbmRleCIsIm1hcmtlclN0YXJ0U3R5bGVQcm9wIiwibWFya2VyTWlkU3R5bGVQcm9wIiwibWFya2VyRW5kU3R5bGVQcm9wIiwibWFya2VyIiwiY29udHJvbFBvaW50IiwiY3VycmVudFBvaW50IiwiYmV6aWVyQ3VydmVUbyIsInF1YWRyYXRpY0N1cnZlVG8iLCJ4QXhpc1JvdGF0aW9uIiwiY3VycnAiLCJjcHAiLCJjZW50cCIsImExIiwiYWQiLCJkaXIiLCJhaCIsImhhbGZXYXkiLCJzeCIsInN5IiwiYXJjIiwiU1ZHRWxlbWVudCIsImdldENvbXB1dGVkU3R5bGUiLCJnZXRQcm9wZXJ0eVZhbHVlIiwiZm9udFNpemVQcm9wIiwicmVmWEF0dHIiLCJyZWZZQXR0ciIsInZpZXdCb3hBdHRyIiwicmVzaXplIiwicHJlc2VydmVBc3BlY3RSYXRpbyIsIndpZHRoQXR0ciIsImhlaWdodEF0dHIiLCJzdHlsZUF0dHIiLCJvcmlnaW5XaWR0aCIsIm9yaWdpbkhlaWdodCIsInByZXNlcnZlQXNwZWN0UmF0aW9BdHRyIiwiUmVjdEVsZW1lbnQiLCJyeEF0dHIiLCJyeUF0dHIiLCJyeCIsInJ5IiwiS0FQUEEiLCJQb2x5bGluZUVsZW1lbnQiLCJ4MCIsInkwIiwiR0VsZW1lbnQiLCJHcmFkaWVudEVsZW1lbnQiLCJnZXRHcmFkaWVudFVuaXRzIiwicGFyZW50T3BhY2l0eVByb3AiLCJzdG9wc0NvbnRhaW5lciIsImluaGVyaXRTdG9wQ29udGFpbmVyIiwic3RvcHMiLCJncmFkaWVudCIsImdldEdyYWRpZW50IiwiYWRkUGFyZW50T3BhY2l0eSIsImFkZENvbG9yU3RvcCIsInJvb3RWaWV3IiwicmVjdCIsImdyb3VwIiwicGF0dGVyblN2ZyIsInBhdHRlcm5DYW52YXMiLCJwYXR0ZXJuQ3R4IiwiYXR0cmlidXRlc1RvSW5oZXJpdCIsImF0dHJpYnV0ZVRvSW5oZXJpdCIsIkFuaW1hdGVFbGVtZW50IiwiZ2V0UHJvcGVydHkiLCJhdHRyaWJ1dGVUeXBlIiwiYXR0cmlidXRlTmFtZSIsImNhbGNWYWx1ZSIsImluaXRpYWxVbml0cyIsInByb2dyZXNzIiwidG8iLCJnZXRQcm9ncmVzcyIsIm5ld1ZhbHVlIiwicHJvcCIsImluaXRpYWxWYWx1ZSIsImR1cmF0aW9uIiwibWF4RHVyYXRpb24iLCJmcm96ZW4iLCJyZW1vdmVkIiwidXBkYXRlZCIsImJlZ2luIiwidHlwZUF0dHIiLCJ2YWx1ZXMiLCJsYiIsImZsb29yIiwidWIiLCJ2YWx1ZXNBdHRyIiwiRm9udEZhY2VFbGVtZW50IiwiYXNjZW50IiwiZGVzY2VudCIsIkdseXBoRWxlbWVudCIsInVuaWNvZGUiLCJNaXNzaW5nR2x5cGhFbGVtZW50IiwiZGF0YVVyaVJlZ2V4IiwiU1ZHRm9udExvYWRlciIsImZvbnRzIiwiY2FudmciLCJmb250Tm9kZSIsImNvbnNvbGUiLCJsb2FkZWQiLCJTdHlsZUVsZW1lbnQiLCJjc3MiLCJfMSIsImNzc1BhcnRzIiwiY3NzQ2xhc3NlcyIsImNzc1Byb3BzIiwiY3NzQ2xhc3MiLCJwcm9wcyIsImNzc1Byb3AiLCJjdXJyZW50U2VsZWN0b3IiLCJnZXRTZWxlY3RvclNwZWNpZmljaXR5Iiwic3JjIiwiaW1HZXQiLCJpbWciLCJfaGVpZ2h0IiwicmdiYSIsImltU2V0IiwidmFsIiwibTEiLCJtMiIsIm0zIiwiRmVDb2xvck1hdHJpeEVsZW1lbnQiLCJpbmNsdWRlT3BhY2l0eSIsInNyY0RhdGEiLCJuciIsIm5nIiwibmIiLCJuYSIsIk1hc2tFbGVtZW50IiwiaWdub3JlZFN0eWxlcyIsIm1hc2tDYW52YXMiLCJtYXNrQ3R4IiwidG1wQ2FudmFzIiwidG1wQ3R4IiwiZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uIiwiZmlsbFJlY3QiLCJub29wIiwiRmlsdGVyRWxlbWVudCIsInB4IiwicHkiLCJlZmQiLCJleHRyYUZpbHRlckRpc3RhbmNlIiwidG1wQ2FudmFzV2lkdGgiLCJ0bXBDYW52YXNIZWlnaHQiLCJkcmF3SW1hZ2UiLCJnZXRQb2ludHMiLCJvcmllbnQiLCJtYXJrZXJVbml0cyIsIm1hcmtlclN2ZyIsIm92ZXJmbG93IiwiaXNCb3VuZGluZ0JveFVuaXRzIiwiY3JlYXRlTGluZWFyR3JhZGllbnQiLCJmeCIsImZ5IiwiZnIiLCJjcmVhdGVSYWRpYWxHcmFkaWVudCIsInN0b3BPcGFjaXR5Iiwic3RvcENvbG9yIiwiY29sb3JGcm9tIiwiY29sb3JUbyIsImZyb20xIiwidG8xIiwidHJhbnNmb3JtRnJvbSIsInRyYW5zZm9ybVRvIiwiZm9udEZhbWlseVN0eWxlIiwiYXJhYmljR2x5cGgiLCJmaXJzdENoaWxkIiwiaGFzVGV4dCIsIm5vZGUxIiwiZGF0YUFycmF5IiwidGhldGEiLCJkVGhldGEiLCJwc2kiLCJmcyIsInNldFRleHREYXRhIiwidGV4dERlY29yYXRpb24iLCJnbHlwaEluZm8iLCJyb3RhdGlvbiIsInBhcnRpYWxUZXh0IiwiZ2V0TGV0dGVyU3BhY2luZ0F0IiwiaWR4IiwibGV0dGVyU3BhY2luZ0NhY2hlIiwiZmluZFNlZ21lbnRUb0ZpdENoYXIiLCJhbmNob3IiLCJ0ZXh0RnVsbFdpZHRoIiwiZnVsbFBhdGhXaWR0aCIsInNwYWNlc051bWJlciIsImlucHV0T2Zmc2V0IiwiZHkiLCJjaGFySSIsImdseXBoV2lkdGgiLCJzcGxpbmVTdGVwIiwidGV4dEhlaWdodCIsImdldEVxdWlkaXN0YW50UG9pbnRPblBhdGgiLCJzZWdtZW50IiwiZHlYIiwiZHlZIiwibWVhc3VyZXNDYWNoZSIsImhhcyIsImNoYXJzIiwidGhpc1NwYWNpbmciLCJwYXJlbnRTcGFjaW5nIiwibGV0dGVyU3BhY2luZyIsInRleHRMZW4iLCJkeFN1bSIsImFjYyIsImN1ciIsInRleHRXaWR0aCIsImdldFBhdGhMZW5ndGgiLCJzdGFydE9mZnNldCIsIm5leHRPZmZzZXQiLCJwYXJzZVBhdGhEYXRhIiwicGF0aExlbmd0aCIsInBhdGhDb21tYW5kcyIsInN0YXJ0WCIsInN0YXJ0WSIsIm5leHRDb21tYW5kVHlwZSIsImNhbGNMZW5ndGgiLCJjb21tYW5kVHlwZSIsImdldExpbmVMZW5ndGgiLCJnZXRQb2ludE9uQ3ViaWNCZXppZXIiLCJnZXRQb2ludE9uUXVhZHJhdGljQmV6aWVyIiwiZW5kIiwiaW5jIiwiZ2V0UG9pbnRPbkVsbGlwdGljYWxBcmMiLCJnZXRQb2ludE9uTGluZSIsImRpc3QiLCJmcm9tWCIsImZyb21ZIiwicmlzZSIsInB0IiwiaXgiLCJpeSIsInBSaXNlIiwicFJ1biIsImdldFBvaW50T25QYXRoIiwiZGlzdGFuY2UiLCJmdWxsTGVuIiwiY3VtdWxhdGl2ZVBhdGhMZW5ndGgiLCJjdXJyZW50VCIsInBjdCIsInA0eCIsInA0eSIsImNvc1BzaSIsInNpblBzaSIsImJ1aWxkRXF1aWRpc3RhbnRDYWNoZSIsImlucHV0U3RlcCIsImlucHV0UHJlY2lzaW9uIiwicHJlY2lzaW9uIiwic3RlcCIsImVxdWlkaXN0YW50Q2FjaGUiLCJ0YXJnZXREaXN0YW5jZSIsIk1hcCIsInBhdGhFbGVtZW50IiwiaW1hZ2UiLCJsb2FkU3ZnIiwiYXRvYiIsImRlY29kZVVSSUNvbXBvbmVudCIsInN2ZyIsInN1YkRvY3VtZW50IiwiZm9ya1N0cmluZyIsImRvY3VtZW50RWxlbWVudCIsImNvbXBsZXRlIiwiaXNTdmciLCJpbWFnZXMiLCJ0ZW1wU3ZnIiwib2xkUGFyZW50IiwiZWxlbWVudFRyYW5zZm9ybSIsImNhY2hlZEVsZW1lbnQiLCJjb250ZXh0UHJvdG8iLCJfd2lkdGgiLCJibHVyUmFkaXVzIiwiYm9keSIsImdldFVuaXF1ZUlkIiwiZGlzcGxheSIsInJlbW92ZUNoaWxkIiwiRG9jdW1lbnQiLCJiaW5kQ3JlYXRlSW1hZ2UiLCJjcmVhdGVJbWFnZTEiLCJhbm9ueW1vdXNDcm9zc09yaWdpbiIsInNvdXJjZSIsImZvcmNlQW5vbnltb3VzQ3Jvc3NPcmlnaW4iLCJlbVNpemVTdGFjayIsInVuaXF1ZUlkIiwiaXNJbWFnZXNMb2FkZWQiLCJpc0ZvbnRzTG9hZGVkIiwiY3JlYXRlRG9jdW1lbnRFbGVtZW50IiwiZWxlbWVudFR5cGUiLCJFbGVtZW50VHlwZSIsImVsZW1lbnRUeXBlcyIsImNvbmZpZyIsImNyZWF0ZUNhbnZhczEiLCJjcmVhdGVJbWFnZTIiLCJhc3luYyIsImNyb3NzT3JpZ2luIiwib25sb2FkIiwiX2V2ZW50IiwiX3NvdXJjZSIsIl9saW5lbm8iLCJfY29sbm8iLCJDYW52ZyIsIm9wdGlvbnMiLCJzdmdEb2N1bWVudCIsImZyb21TdHJpbmciLCJmb3JrIiwiYmFzZU9wdGlvbnMiLCJnZXRUeXBlIiwicXVlcnlTZWxlY3RvciIsImNoZWNrZWQiLCJnZXRGaWxlIiwiZmlsZSIsIkJsb2IiLCJvdXRlckhUTUwiLCJjb252ZXJ0VG9CbG9iIiwiY29udmVydCIsImRvd25sb2FkIiwiVVJMIiwiY3JlYXRlT2JqZWN0VVJMIiwiY2xpY2siLCJyZXZva2VPYmplY3RVUkwiLCJjb3B5Iiwic3RhdGUiLCJwZXJtaXNzaW9uIiwibmF2aWdhdG9yIiwicGVybWlzc2lvbnMiLCJxdWVyeSIsImRpc2FibGVkIiwiY2xpcGJvYXJkT3B0cyIsImNsaXBib2FyZCIsIndyaXRlIiwiQ2xpcGJvYXJkSXRlbSIsInVwZGF0ZVFSIiwiZWxlbSIsIlFSQ29kZSIsInJlbW92ZUF0dHJpYnV0ZSIsIm9ua2V5ZG93biIsImN0cmxLZXkiLCJtZXRhS2V5IiwicHJldmVudERlZmF1bHQiLCJjb250ZW50IiwibG9jYXRpb24iLCJvcmlnaW4iLCJvbmtleXVwIiwib25wYXN0ZSIsInF1ZXJ5U2VsZWN0b3JBbGwiXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file +(()=>{var t={491:function(t){(function(){var e,i,r,s,n,a;"undefined"!=typeof performance&&null!==performance&&performance.now?t.exports=function(){return performance.now()}:"undefined"!=typeof process&&null!==process&&process.hrtime?(t.exports=function(){return(e()-n)/1e6},i=process.hrtime,s=(e=function(){var t;return 1e9*(t=i())[0]+t[1]})(),a=1e9*process.uptime(),n=s-a):Date.now?(t.exports=function(){return Date.now()-r},r=Date.now()):(t.exports=function(){return(new Date).getTime()-r},r=(new Date).getTime())}).call(this)},146:(t,e,i)=>{for(var r=i(491),s="undefined"==typeof window?i.g:window,n=["moz","webkit"],a="AnimationFrame",o=s["request"+a],h=s["cancel"+a]||s["cancelRequest"+a],l=0;!o&&l{t.exports=function(t){this.ok=!1,this.alpha=1,"#"==t.charAt(0)&&(t=t.substr(1,6)),t=(t=t.replace(/ /g,"")).toLowerCase();var e={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"00ffff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000000",blanchedalmond:"ffebcd",blue:"0000ff",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"00ffff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dodgerblue:"1e90ff",feldspar:"d19275",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"ff00ff",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgrey:"d3d3d3",lightgreen:"90ee90",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslateblue:"8470ff",lightslategray:"778899",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"00ff00",limegreen:"32cd32",linen:"faf0e6",magenta:"ff00ff",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370d8",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"d87093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",rebeccapurple:"663399",red:"ff0000",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",violetred:"d02090",wheat:"f5deb3",white:"ffffff",whitesmoke:"f5f5f5",yellow:"ffff00",yellowgreen:"9acd32"};t=e[t]||t;for(var i=[{re:/^rgba\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3}),\s*((?:\d?\.)?\d)\)$/,example:["rgba(123, 234, 45, 0.8)","rgba(255,234,245,1.0)"],process:function(t){return[parseInt(t[1]),parseInt(t[2]),parseInt(t[3]),parseFloat(t[4])]}},{re:/^rgb\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)$/,example:["rgb(123, 234, 45)","rgb(255,234,245)"],process:function(t){return[parseInt(t[1]),parseInt(t[2]),parseInt(t[3])]}},{re:/^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,example:["#00ff00","336699"],process:function(t){return[parseInt(t[1],16),parseInt(t[2],16),parseInt(t[3],16)]}},{re:/^([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,example:["#fb0","f0f"],process:function(t){return[parseInt(t[1]+t[1],16),parseInt(t[2]+t[2],16),parseInt(t[3]+t[3],16)]}}],r=0;r3&&(this.alpha=o[3]),this.ok=!0}}this.r=this.r<0||isNaN(this.r)?0:this.r>255?255:this.r,this.g=this.g<0||isNaN(this.g)?0:this.g>255?255:this.g,this.b=this.b<0||isNaN(this.b)?0:this.b>255?255:this.b,this.alpha=this.alpha<0?0:this.alpha>1||isNaN(this.alpha)?1:this.alpha,this.toRGB=function(){return"rgb("+this.r+", "+this.g+", "+this.b+")"},this.toRGBA=function(){return"rgba("+this.r+", "+this.g+", "+this.b+", "+this.alpha+")"},this.toHex=function(){var t=this.r.toString(16),e=this.g.toString(16),i=this.b.toString(16);return 1==t.length&&(t="0"+t),1==e.length&&(e="0"+e),1==i.length&&(i="0"+i),"#"+t+e+i},this.getHelpXML=function(){for(var t=new Array,r=0;r "+l.toRGB()+" -> "+l.toHex());h.appendChild(c),h.appendChild(u),o.appendChild(h)}catch(t){}return o}}}},e={};function i(r){var s=e[r];if(void 0!==s)return s.exports;var n=e[r]={exports:{}};return t[r].call(n.exports,n,n.exports,i),n.exports}i.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),(()=>{"use strict";function t(t){return new Promise(((e,i)=>{t.oncomplete=t.onsuccess=()=>e(t.result),t.onabort=t.onerror=()=>i(t.error)}))}let e;function r(){return e||(e=function(e,i){const r=indexedDB.open("keyval-store");r.onupgradeneeded=()=>r.result.createObjectStore(i);const s=t(r);return(t,e)=>s.then((r=>e(r.transaction(i,t).objectStore(i))))}(0,"keyval")),e}function s(e,i=r()){return i("readonly",(i=>t(i.get(e))))}function n(e,i,s=r()){return s("readwrite",(r=>(r.put(i,e),t(r.transaction))))}var a=i(146),o=i(855),h=function(t,e){return(h=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i])})(t,e)};function l(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function i(){this.constructor=t}h(t,e),t.prototype=null===e?Object.create(e):(i.prototype=e.prototype,new i)}function c(t,e){var i=t[0],r=t[1];return[i*Math.cos(e)-r*Math.sin(e),i*Math.sin(e)+r*Math.cos(e)]}function u(){for(var t=[],e=0;et.phi1&&(t.phi2-=2*g),1===t.sweepFlag&&t.phi2r)return[];if(0===r)return[[t*i/(t*t+e*e),e*i/(t*t+e*e)]];var s=Math.sqrt(r);return[[(t*i+e*s)/(t*t+e*e),(e*i-t*s)/(t*t+e*e)],[(t*i-e*s)/(t*t+e*e),(e*i+t*s)/(t*t+e*e)]]}var f,y=Math.PI/180;function m(t,e,i){return(1-i)*t+i*e}function x(t,e,i,r){return t+Math.cos(r/180*g)*e+Math.sin(r/180*g)*i}function b(t,e,i,r){var s=1e-6,n=e-t,a=i-e,o=3*n+3*(r-i)-6*a,h=6*(a-n),l=3*n;return Math.abs(o)y&&(s.sweepFlag=+!s.sweepFlag),s}))}t.ROUND=function(t){function e(e){return Math.round(e*t)/t}return void 0===t&&(t=1e13),u(t),function(t){return void 0!==t.x1&&(t.x1=e(t.x1)),void 0!==t.y1&&(t.y1=e(t.y1)),void 0!==t.x2&&(t.x2=e(t.x2)),void 0!==t.y2&&(t.y2=e(t.y2)),void 0!==t.x&&(t.x=e(t.x)),void 0!==t.y&&(t.y=e(t.y)),void 0!==t.rX&&(t.rX=e(t.rX)),void 0!==t.rY&&(t.rY=e(t.rY)),t}},t.TO_ABS=e,t.TO_REL=function(){return s((function(t,e,i){return t.relative||(void 0!==t.x1&&(t.x1-=e),void 0!==t.y1&&(t.y1-=i),void 0!==t.x2&&(t.x2-=e),void 0!==t.y2&&(t.y2-=i),void 0!==t.x&&(t.x-=e),void 0!==t.y&&(t.y-=i),t.relative=!0),t}))},t.NORMALIZE_HVZ=function(t,e,i){return void 0===t&&(t=!0),void 0===e&&(e=!0),void 0===i&&(i=!0),s((function(r,s,n,a,o){if(isNaN(a)&&!(r.type&P.MOVE_TO))throw new Error("path must start with moveto");return e&&r.type&P.HORIZ_LINE_TO&&(r.type=P.LINE_TO,r.y=r.relative?0:n),i&&r.type&P.VERT_LINE_TO&&(r.type=P.LINE_TO,r.x=r.relative?0:s),t&&r.type&P.CLOSE_PATH&&(r.type=P.LINE_TO,r.x=r.relative?a-s:a,r.y=r.relative?o-n:o),r.type&P.ARC&&(0===r.rX||0===r.rY)&&(r.type=P.LINE_TO,delete r.rX,delete r.rY,delete r.xRot,delete r.lArcFlag,delete r.sweepFlag),r}))},t.NORMALIZE_ST=i,t.QT_TO_C=r,t.INFO=s,t.SANITIZE=function(t){void 0===t&&(t=0),u(t);var e=NaN,i=NaN,r=NaN,n=NaN;return s((function(s,a,o,h,l){var c=Math.abs,u=!1,g=0,d=0;if(s.type&P.SMOOTH_CURVE_TO&&(g=isNaN(e)?0:a-e,d=isNaN(i)?0:o-i),s.type&(P.CURVE_TO|P.SMOOTH_CURVE_TO)?(e=s.relative?a+s.x2:s.x2,i=s.relative?o+s.y2:s.y2):(e=NaN,i=NaN),s.type&P.SMOOTH_QUAD_TO?(r=isNaN(r)?a:2*a-r,n=isNaN(n)?o:2*o-n):s.type&P.QUAD_TO?(r=s.relative?a+s.x1:s.x1,n=s.relative?o+s.y1:s.y2):(r=NaN,n=NaN),s.type&P.LINE_COMMANDS||s.type&P.ARC&&(0===s.rX||0===s.rY||!s.lArcFlag)||s.type&P.CURVE_TO||s.type&P.SMOOTH_CURVE_TO||s.type&P.QUAD_TO||s.type&P.SMOOTH_QUAD_TO){var p=void 0===s.x?0:s.relative?s.x:s.x-a,f=void 0===s.y?0:s.relative?s.y:s.y-o;g=isNaN(r)?void 0===s.x1?g:s.relative?s.x:s.x1-a:r-a,d=isNaN(n)?void 0===s.y1?d:s.relative?s.y:s.y1-o:n-o;var y=void 0===s.x2?0:s.relative?s.x:s.x2-a,m=void 0===s.y2?0:s.relative?s.y:s.y2-o;c(p)<=t&&c(f)<=t&&c(g)<=t&&c(d)<=t&&c(y)<=t&&c(m)<=t&&(u=!0)}return s.type&P.CLOSE_PATH&&c(a-h)<=t&&c(o-l)<=t&&(u=!0),u?[]:s}))},t.MATRIX=n,t.ROTATE=function(t,e,i){void 0===e&&(e=0),void 0===i&&(i=0),u(t,e,i);var r=Math.sin(t),s=Math.cos(t);return n(s,r,-r,s,e-e*s+i*r,i-e*r-i*s)},t.TRANSLATE=function(t,e){return void 0===e&&(e=0),u(t,e),n(1,0,0,1,t,e)},t.SCALE=function(t,e){return void 0===e&&(e=t),u(t,e),n(t,0,0,e,0,0)},t.SKEW_X=function(t){return u(t),n(1,0,Math.atan(t),1,0,0)},t.SKEW_Y=function(t){return u(t),n(1,Math.atan(t),0,1,0,0)},t.X_AXIS_SYMMETRY=function(t){return void 0===t&&(t=0),u(t),n(-1,0,0,1,t,0)},t.Y_AXIS_SYMMETRY=function(t){return void 0===t&&(t=0),u(t),n(1,0,0,-1,0,t)},t.A_TO_C=function(){return s((function(t,e,i){return P.ARC===t.type?function(t,e,i){var r,s,n,a;t.cX||d(t,e,i);for(var o=Math.min(t.phi1,t.phi2),h=Math.max(t.phi1,t.phi2)-o,l=Math.ceil(h/90),u=new Array(l),g=e,p=i,f=0;fo.maxX&&(o.maxX=t),to.maxY&&(o.maxY=t),tk&&h(v(i,s.x1,s.x2,s.x,k));for(var g=0,f=b(r,s.y1,s.y2,s.y);gk&&l(v(r,s.y1,s.y2,s.y,k))}if(s.type&P.ARC){h(s.x),l(s.y),d(s,i,r);for(var y=s.xRot/180*Math.PI,m=Math.cos(y)*s.rX,w=Math.sin(y)*s.rX,T=-Math.sin(y)*s.rY,S=Math.cos(y)*s.rY,A=s.phi1s.phi2?[s.phi2+360,s.phi1+360]:[s.phi2,s.phi1],C=A[0],O=A[1],N=function(t){var e=t[0],i=t[1],r=180*Math.atan2(i,e)/Math.PI;return rC&&kC&&kh)throw new SyntaxError('Expected positive number, got "'+h+'" at index "'+s+'"')}else if((3===this.curArgs.length||4===this.curArgs.length)&&"0"!==this.curNumber&&"1"!==this.curNumber)throw new SyntaxError('Expected a flag, got "'+this.curNumber+'" at index "'+s+'"');this.curArgs.push(h),this.curArgs.length===O[this.curCommandType]&&(P.HORIZ_LINE_TO===this.curCommandType?r({type:P.HORIZ_LINE_TO,relative:this.curCommandRelative,x:h}):P.VERT_LINE_TO===this.curCommandType?r({type:P.VERT_LINE_TO,relative:this.curCommandRelative,y:h}):this.curCommandType===P.MOVE_TO||this.curCommandType===P.LINE_TO||this.curCommandType===P.SMOOTH_QUAD_TO?(r({type:this.curCommandType,relative:this.curCommandRelative,x:this.curArgs[0],y:this.curArgs[1]}),P.MOVE_TO===this.curCommandType&&(this.curCommandType=P.LINE_TO)):this.curCommandType===P.CURVE_TO?r({type:P.CURVE_TO,relative:this.curCommandRelative,x1:this.curArgs[0],y1:this.curArgs[1],x2:this.curArgs[2],y2:this.curArgs[3],x:this.curArgs[4],y:this.curArgs[5]}):this.curCommandType===P.SMOOTH_CURVE_TO?r({type:P.SMOOTH_CURVE_TO,relative:this.curCommandRelative,x2:this.curArgs[0],y2:this.curArgs[1],x:this.curArgs[2],y:this.curArgs[3]}):this.curCommandType===P.QUAD_TO?r({type:P.QUAD_TO,relative:this.curCommandRelative,x1:this.curArgs[0],y1:this.curArgs[1],x:this.curArgs[2],y:this.curArgs[3]}):this.curCommandType===P.ARC&&r({type:P.ARC,relative:this.curCommandRelative,rX:this.curArgs[0],rY:this.curArgs[1],xRot:this.curArgs[2],lArcFlag:this.curArgs[3],sweepFlag:this.curArgs[4],x:this.curArgs[5],y:this.curArgs[6]})),this.curNumber="",this.curNumberHasExpDigits=!1,this.curNumberHasExp=!1,this.curNumberHasDecimal=!1,this.canParseCommandOrComma=!0}if(!S(n))if(","===n&&this.canParseCommandOrComma)this.canParseCommandOrComma=!1;else if("+"!==n&&"-"!==n&&"."!==n)if(o)this.curNumber=n,this.curNumberHasDecimal=!1;else{if(0!==this.curArgs.length)throw new SyntaxError("Unterminated command at index "+s+".");if(!this.canParseCommandOrComma)throw new SyntaxError('Unexpected character "'+n+'" at index '+s+". Command cannot follow comma");if(this.canParseCommandOrComma=!1,"z"!==n&&"Z"!==n)if("h"===n||"H"===n)this.curCommandType=P.HORIZ_LINE_TO,this.curCommandRelative="h"===n;else if("v"===n||"V"===n)this.curCommandType=P.VERT_LINE_TO,this.curCommandRelative="v"===n;else if("m"===n||"M"===n)this.curCommandType=P.MOVE_TO,this.curCommandRelative="m"===n;else if("l"===n||"L"===n)this.curCommandType=P.LINE_TO,this.curCommandRelative="l"===n;else if("c"===n||"C"===n)this.curCommandType=P.CURVE_TO,this.curCommandRelative="c"===n;else if("s"===n||"S"===n)this.curCommandType=P.SMOOTH_CURVE_TO,this.curCommandRelative="s"===n;else if("q"===n||"Q"===n)this.curCommandType=P.QUAD_TO,this.curCommandRelative="q"===n;else if("t"===n||"T"===n)this.curCommandType=P.SMOOTH_QUAD_TO,this.curCommandRelative="t"===n;else{if("a"!==n&&"A"!==n)throw new SyntaxError('Unexpected character "'+n+'" at index '+s+".");this.curCommandType=P.ARC,this.curCommandRelative="a"===n}else e.push({type:P.CLOSE_PATH}),this.canParseCommandOrComma=!0,this.curCommandType=-1}else this.curNumber=n,this.curNumberHasDecimal="."===n}else this.curNumber+=n,this.curNumberHasDecimal=!0;else this.curNumber+=n;else this.curNumber+=n,this.curNumberHasExp=!0;else this.curNumber+=n,this.curNumberHasExpDigits=this.curNumberHasExp}return e},e.prototype.transform=function(t){return Object.create(this,{parse:{value:function(e,i){void 0===i&&(i=[]);for(var r=0,s=Object.getPrototypeOf(this).parse.call(this,e);r>>w;if(o[b+3]=Z,0!==Z){var K=255/Z;o[b]=(z*v>>>w)*K,o[b+1]=(H*v>>>w)*K,o[b+2]=(U*v>>>w)*K}else o[b]=o[b+1]=o[b+2]=0;z-=I,H-=L,U-=D,F-=B,I-=y.r,L-=y.g,D-=y.b,B-=y.a;var J=$+n+1;J=x+(J>>w,lt>0?(lt=255/lt,o[Ot]=(pt*v>>>w)*lt,o[Ot+1]=(ft*v>>>w)*lt,o[Ot+2]=(yt*v>>>w)*lt):o[Ot]=o[Ot+1]=o[Ot+2]=0,pt-=ct,ft-=ut,yt-=gt,mt-=dt,ct-=y.r,ut-=y.g,gt-=y.b,dt-=y.a,Ot=nt+((Ot=Pt+u)0&&void 0!==arguments[0]?arguments[0]:{};const e={window:null,ignoreAnimation:!0,ignoreMouse:!0,DOMParser:t,createCanvas:(t,e)=>new OffscreenCanvas(t,e),async createImage(t){const e=await fetch(t),i=await e.blob();return await createImageBitmap(i)}};return void 0===globalThis.DOMParser&&void 0!==t||Reflect.deleteProperty(e,"DOMParser"),e},node:function(t){let{DOMParser:e,canvas:i,fetch:r}=t;return{window:null,ignoreAnimation:!0,ignoreMouse:!0,DOMParser:e,fetch:r,createCanvas:i.createCanvas,createImage:i.loadImage}}});function R(t){return t.replace(/(?!\u3000)\s+/gm," ")}function I(t){const e=t.match(/-?(\d+(?:\.\d*(?:[eE][+-]?\d+)?)?|\.\d+)(?=\D|$)/gm);return e?e.map(parseFloat):[]}const L=/^[A-Z-]+$/;function D(t){const e=/url\(('([^']+)'|"([^"]+)"|([^'")]+))\)/.exec(t);return e&&(e[2]||e[3]||e[4])||""}const B=/(\[[^\]]+\])/g,z=/(#[^\s+>~.[:]+)/g,H=/(\.[^\s+>~.[:]+)/g,U=/(::[^\s+>~.[:]+|:first-line|:first-letter|:before|:after)/gi,F=/(:[\w-]+\([^)]*\))/gi,X=/(:[^\s+>~.[:]+)/g,Y=/([^\s+>~.[:]+)/g;function q(t,e){const i=e.exec(t);return i?[t.replace(e," "),i.length]:[t,0]}const W=1e-8;function Q(t){return Math.sqrt(Math.pow(t[0],2)+Math.pow(t[1],2))}function j(t,e){return(t[0]*e[0]+t[1]*e[1])/(Q(t)*Q(e))}function G(t,e){return(t[0]*e[1]0&&void 0!==arguments[0]?arguments[0]:" ";const{document:e,name:i}=this;return R(this.getString()).trim().split(t).map((t=>new rt(e,i,t)))}hasValue(t){const e=this.value;return null!==e&&""!==e&&(t||0!==e)&&void 0!==e}isString(t){const{value:e}=this,i="string"==typeof e;return i&&t?t.test(e):i}isUrlDefinition(){return this.isString(/^url\(/)}isPixels(){if(!this.hasValue())return!1;const t=this.getString();switch(!0){case t.endsWith("px"):case/^[0-9]+$/.test(t):return!0;default:return!1}}setValue(t){return this.value=t,this}getValue(t){return void 0===t||this.hasValue()?this.value:t}getNumber(t){if(!this.hasValue())return void 0===t?0:parseFloat(t);const{value:e}=this;let i=parseFloat(e);return this.isString(/%$/)&&(i/=100),i}getString(t){return void 0===t||this.hasValue()?void 0===this.value?"":String(this.value):String(t)}getColor(t){let e=this.getString(t);return this.isNormalizedColor||(this.isNormalizedColor=!0,e=function(t){if(!t.startsWith("rgb"))return t;let e=3;return t.replace(/\d+(\.\d+)?/g,((t,i)=>e--&&i?String(Math.round(parseFloat(t))):t))}(e),this.value=e),e}getDpi(){return 96}getRem(){return this.document.rootEmSize}getEm(){return this.document.emSize}getUnits(){return this.getString().replace(/[0-9.-]/g,"")}getPixels(t){let e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(!this.hasValue())return 0;const[i,r]="boolean"==typeof t?[void 0,t]:[t],{viewPort:s}=this.document.screen;switch(!0){case this.isString(/vmin$/):return this.getNumber()/100*Math.min(s.computeSize("x"),s.computeSize("y"));case this.isString(/vmax$/):return this.getNumber()/100*Math.max(s.computeSize("x"),s.computeSize("y"));case this.isString(/vw$/):return this.getNumber()/100*s.computeSize("x");case this.isString(/vh$/):return this.getNumber()/100*s.computeSize("y");case this.isString(/rem$/):return this.getNumber()*this.getRem();case this.isString(/em$/):return this.getNumber()*this.getEm();case this.isString(/ex$/):return this.getNumber()*this.getEm()/2;case this.isString(/px$/):return this.getNumber();case this.isString(/pt$/):return this.getNumber()*this.getDpi()*(1/72);case this.isString(/pc$/):return 15*this.getNumber();case this.isString(/cm$/):return this.getNumber()*this.getDpi()/2.54;case this.isString(/mm$/):return this.getNumber()*this.getDpi()/25.4;case this.isString(/in$/):return this.getNumber()*this.getDpi();case this.isString(/%$/)&&r:return this.getNumber()*this.getEm();case this.isString(/%$/):return this.getNumber()*s.computeSize(i);default:{const t=this.getNumber();return e&&t<1?t*s.computeSize(i):t}}}getMilliseconds(){return this.hasValue()?this.isString(/ms$/)?this.getNumber():1e3*this.getNumber():0}getRadians(){if(!this.hasValue())return 0;switch(!0){case this.isString(/deg$/):return this.getNumber()*(Math.PI/180);case this.isString(/grad$/):return this.getNumber()*(Math.PI/200);case this.isString(/rad$/):return this.getNumber();default:return this.getNumber()*(Math.PI/180)}}getDefinition(){const t=this.getString(),e=/#([^)'"]+)/.exec(t),i=(null==e?void 0:e[1])||t;return this.document.definitions[i]}getFillStyleDefinition(t,e){let i=this.getDefinition();if(!i)return null;if("function"==typeof i.createGradient&&"getBoundingBox"in t)return i.createGradient(this.document.ctx,t,e);if("function"==typeof i.createPattern){if(i.getHrefAttribute().hasValue()){const t=i.getAttribute("patternTransform");i=i.getHrefAttribute().getDefinition(),i&&t.hasValue()&&i.getAttribute("patternTransform",!0).setValue(t.value)}if(i)return i.createPattern(this.document.ctx,t,e)}return null}getTextBaseline(){if(!this.hasValue())return null;const t=this.getString();return rt.textBaselineMapping[t]||null}addOpacity(t){let e=this.getColor();const i=e.length;let r=0;for(let t=0;t1&&void 0!==arguments[1]?arguments[1]:0;const[i=e,r=e]=I(t);return new at(i,r)}static parseScale(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;const[i=e,r=i]=I(t);return new at(i,r)}static parsePath(t){const e=I(t),i=e.length,r=[];for(let t=0;t0}runEvents(){if(!this.working)return;const{screen:t,events:e,eventElements:i}=this,{style:r}=t.ctx.canvas;let s;r&&(r.cursor=""),e.forEach(((t,e)=>{let{run:r}=t;for(s=i[e];s;)r(s),s=s.parent})),this.events=[],this.eventElements=[]}checkPath(t,e){if(!this.working||!e)return;const{events:i,eventElements:r}=this;i.forEach(((i,s)=>{let{x:n,y:a}=i;!r[s]&&e.isPointInPath&&e.isPointInPath(n,a)&&(r[s]=t)}))}checkBoundingBox(t,e){if(!this.working||!e)return;const{events:i,eventElements:r}=this;i.forEach(((i,s)=>{let{x:n,y:a}=i;!r[s]&&e.isPointInBox(n,a)&&(r[s]=t)}))}mapXY(t,e){const{window:i,ctx:r}=this.screen,s=new at(t,e);let n=r.canvas;for(;n;)s.x-=n.offsetLeft,s.y-=n.offsetTop,n=n.offsetParent;return(null==i?void 0:i.scrollX)&&(s.x+=i.scrollX),(null==i?void 0:i.scrollY)&&(s.y+=i.scrollY),s}onClick(t){const{x:e,y:i}=this.mapXY(t.clientX,t.clientY);this.events.push({type:"onclick",x:e,y:i,run(t){t.onClick&&t.onClick()}})}onMouseMove(t){const{x:e,y:i}=this.mapXY(t.clientX,t.clientY);this.events.push({type:"onmousemove",x:e,y:i,run(t){t.onMouseMove&&t.onMouseMove()}})}constructor(t){this.screen=t,this.working=!1,this.events=[],this.eventElements=[],this.onClick=this.onClick.bind(this),this.onMouseMove=this.onMouseMove.bind(this)}}const ht="undefined"!=typeof window?window:null,lt="undefined"!=typeof fetch?fetch.bind(void 0):void 0;class ct{wait(t){this.waits.push(t)}ready(){return this.readyPromise?this.readyPromise:Promise.resolve()}isReady(){if(this.isReadyLock)return!0;const t=this.waits.every((t=>t()));return t&&(this.waits=[],this.resolveReady&&this.resolveReady()),this.isReadyLock=t,t}setDefaults(t){t.strokeStyle="rgba(0,0,0,0)",t.lineCap="butt",t.lineJoin="miter",t.miterLimit=4}setViewBox(t){let{document:e,ctx:i,aspectRatio:r,width:s,desiredWidth:n,height:a,desiredHeight:o,minX:h=0,minY:l=0,refX:c,refY:u,clip:g=!1,clipX:d=0,clipY:p=0}=t;const f=R(r).replace(/^defer\s/,""),[y,m]=f.split(" "),x=y||"xMidYMid",b=m||"meet",v=s/n,w=a/o,T=Math.min(v,w),S=Math.max(v,w);let A=n,C=o;"meet"===b&&(A*=T,C*=T),"slice"===b&&(A*=S,C*=S);const P=new rt(e,"refX",c),O=new rt(e,"refY",u),N=P.hasValue()&&O.hasValue();if(N&&i.translate(-T*P.getPixels("x"),-T*O.getPixels("y")),g){const t=T*d,e=T*p;i.beginPath(),i.moveTo(t,e),i.lineTo(s,e),i.lineTo(s,a),i.lineTo(t,a),i.closePath(),i.clip()}if(!N){const t="meet"===b&&T===w,e="slice"===b&&S===w,r="meet"===b&&T===v,n="slice"===b&&S===v;x.startsWith("xMid")&&(t||e)&&i.translate(s/2-A/2,0),x.endsWith("YMid")&&(r||n)&&i.translate(0,a/2-C/2),x.startsWith("xMax")&&(t||e)&&i.translate(s-A,0),x.endsWith("YMax")&&(r||n)&&i.translate(0,a-C)}switch(!0){case"none"===x:i.scale(v,w);break;case"meet"===b:i.scale(T,T);break;case"slice"===b:i.scale(S,S)}i.translate(-h,-l)}start(t){let{enableRedraw:e=!1,ignoreMouse:i=!1,ignoreAnimation:r=!1,ignoreDimensions:s=!1,ignoreClear:n=!1,forceRedraw:o,scaleWidth:h,scaleHeight:l,offsetX:c,offsetY:u}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{mouse:g}=this,d=1e3/ct.FRAMERATE;if(this.isReadyLock=!1,this.frameDuration=d,this.readyPromise=new Promise((t=>{this.resolveReady=t})),this.isReady()&&this.render(t,s,n,h,l,c,u),!e)return;let p=Date.now(),f=p,y=0;const m=()=>{p=Date.now(),y=p-f,y>=d&&(f=p-y%d,this.shouldUpdate(r,o)&&(this.render(t,s,n,h,l,c,u),g.runEvents())),this.intervalId=a(m)};i||g.start(),this.intervalId=a(m)}stop(){this.intervalId&&(a.cancel(this.intervalId),this.intervalId=null),this.mouse.stop()}shouldUpdate(t,e){if(!t){const{frameDuration:t}=this;if(this.animations.reduce(((e,i)=>i.update(t)||e),!1))return!0}return!("function"!=typeof e||!e())||!(this.isReadyLock||!this.isReady())||!!this.mouse.hasEvents()}render(t,e,i,r,s,n,a){const{viewPort:o,ctx:h,isFirstRender:l}=this,c=h.canvas;o.clear(),c.width&&c.height&&o.setCurrent(c.width,c.height);const u=t.getStyle("width"),g=t.getStyle("height");!e&&(l||"number"!=typeof r&&"number"!=typeof s)&&(u.hasValue()&&(c.width=u.getPixels("x"),c.style&&(c.style.width="".concat(c.width,"px"))),g.hasValue()&&(c.height=g.getPixels("y"),c.style&&(c.style.height="".concat(c.height,"px"))));let d=c.clientWidth||c.width,p=c.clientHeight||c.height;if(e&&u.hasValue()&&g.hasValue()&&(d=u.getPixels("x"),p=g.getPixels("y")),o.setCurrent(d,p),"number"==typeof n&&t.getAttribute("x",!0).setValue(n),"number"==typeof a&&t.getAttribute("y",!0).setValue(a),"number"==typeof r||"number"==typeof s){const e=I(t.getAttribute("viewBox").getString());let i=0,n=0;if("number"==typeof r){const s=t.getStyle("width");s.hasValue()?i=s.getPixels("x")/r:e[2]&&!isNaN(e[2])&&(i=e[2]/r)}if("number"==typeof s){const i=t.getStyle("height");i.hasValue()?n=i.getPixels("y")/s:e[3]&&!isNaN(e[3])&&(n=e[3]/s)}i||(i=n),n||(n=i),t.getAttribute("width",!0).setValue(r),t.getAttribute("height",!0).setValue(s);const a=t.getStyle("transform",!0,!0);a.setValue("".concat(a.getString()," scale(").concat(1/i,", ").concat(1/n,")"))}i||h.clearRect(0,0,d,p),t.render(h),l&&(this.isFirstRender=!1)}constructor(t,{fetch:e=lt,window:i=ht}={}){if(this.ctx=t,this.viewPort=new st,this.mouse=new ot(this),this.animations=[],this.waits=[],this.frameDuration=0,this.isReadyLock=!1,this.isFirstRender=!0,this.intervalId=null,this.window=i,!e)throw new Error("Can't find 'fetch' in 'globalThis', please provide it via options");this.fetch=e}}ct.defaultWindow=ht,ct.defaultFetch=lt,ct.FRAMERATE=30,ct.MAX_VIRTUAL_PIXELS=3e4;const{defaultFetch:ut}=ct,gt="undefined"!=typeof DOMParser?DOMParser:void 0;class dt{async parse(t){return t.startsWith("<")?this.parseFromString(t):this.load(t)}parseFromString(t){const e=new this.DOMParser;try{return this.checkDocument(e.parseFromString(t,"image/svg+xml"))}catch(i){return this.checkDocument(e.parseFromString(t,"text/xml"))}}checkDocument(t){const e=t.getElementsByTagName("parsererror")[0];if(e)throw new Error(e.textContent||"Unknown parse error");return t}async load(t){const e=await this.fetch(t),i=await e.text();return this.parseFromString(i)}constructor({fetch:t=ut,DOMParser:e=gt}={}){if(!t)throw new Error("Can't find 'fetch' in 'globalThis', please provide it via options");if(!e)throw new Error("Can't find 'DOMParser' in 'globalThis', please provide it via options");this.fetch=t,this.DOMParser=e}}class pt{apply(t){const{originX:e,originY:i,matrix:r}=this,s=e.getPixels("x"),n=i.getPixels("y");t.translate(s,n),t.transform(r[0],r[1],r[2],r[3],r[4],r[5]),t.translate(-s,-n)}unapply(t){const{originX:e,originY:i,matrix:r}=this,s=r[0],n=r[2],a=r[4],o=r[1],h=r[3],l=r[5],c=1/(s*(1*h-0*l)-n*(1*o-0*l)+a*(0*o-0*h)),u=e.getPixels("x"),g=i.getPixels("y");t.translate(u,g),t.transform(c*(1*h-0*l),c*(0*l-1*o),c*(0*a-1*n),c*(1*s-0*a),c*(n*l-a*h),c*(a*o-s*l)),t.translate(-u,-g)}applyToPoint(t){t.applyTransform(this.matrix)}constructor(t,e,i){this.type="matrix",this.matrix=function(t){const e=I(t);return[e[0]||0,e[1]||0,e[2]||0,e[3]||0,e[4]||0,e[5]||0]}(e),this.originX=i[0],this.originY=i[1]}}class ft extends pt{constructor(t,e,i){super(t,e,i),this.type="skew",this.angle=new rt(t,"angle",e)}}class yt{static fromElement(t,e){const i=e.getStyle("transform",!1,!0);if(i.hasValue()){const[r,s=r]=e.getStyle("transform-origin",!1,!0).split();if(r&&s){const e=[r,s];return new yt(t,i.getString(),e)}}return null}apply(t){this.transforms.forEach((e=>e.apply(t)))}unapply(t){this.transforms.forEach((e=>e.unapply(t)))}applyToPoint(t){this.transforms.forEach((e=>e.applyToPoint(t)))}constructor(t,e,i){this.document=t,this.transforms=[],R(e).trim().replace(/\)([a-zA-Z])/g,") $1").replace(/\)(\s?,\s?)/g,") ").split(/\s(?=[a-z])/).forEach((t=>{if("none"===t)return;const[e,r]=function(t){const[e="",i=""]=t.split("(");return[e.trim(),i.trim().replace(")","")]}(t),s=yt.transformTypes[e];s&&this.transforms.push(new s(this.document,r,i))}))}}yt.transformTypes={translate:class{apply(t){const{x:e,y:i}=this.point;t.translate(e||0,i||0)}unapply(t){const{x:e,y:i}=this.point;t.translate(-1*e||0,-1*i||0)}applyToPoint(t){const{x:e,y:i}=this.point;t.applyTransform([1,0,0,1,e||0,i||0])}constructor(t,e){this.type="translate",this.point=at.parse(e)}},rotate:class{apply(t){const{cx:e,cy:i,originX:r,originY:s,angle:n}=this,a=e+r.getPixels("x"),o=i+s.getPixels("y");t.translate(a,o),t.rotate(n.getRadians()),t.translate(-a,-o)}unapply(t){const{cx:e,cy:i,originX:r,originY:s,angle:n}=this,a=e+r.getPixels("x"),o=i+s.getPixels("y");t.translate(a,o),t.rotate(-1*n.getRadians()),t.translate(-a,-o)}applyToPoint(t){const{cx:e,cy:i,angle:r}=this,s=r.getRadians();t.applyTransform([1,0,0,1,e||0,i||0]),t.applyTransform([Math.cos(s),Math.sin(s),-Math.sin(s),Math.cos(s),0,0]),t.applyTransform([1,0,0,1,-e||0,-i||0])}constructor(t,e,i){this.type="rotate";const r=I(e);this.angle=new rt(t,"angle",r[0]),this.originX=i[0],this.originY=i[1],this.cx=r[1]||0,this.cy=r[2]||0}},scale:class{apply(t){const{scale:{x:e,y:i},originX:r,originY:s}=this,n=r.getPixels("x"),a=s.getPixels("y");t.translate(n,a),t.scale(e,i||e),t.translate(-n,-a)}unapply(t){const{scale:{x:e,y:i},originX:r,originY:s}=this,n=r.getPixels("x"),a=s.getPixels("y");t.translate(n,a),t.scale(1/e,1/i||e),t.translate(-n,-a)}applyToPoint(t){const{x:e,y:i}=this.scale;t.applyTransform([e||0,0,0,i||0,0,0])}constructor(t,e,i){this.type="scale";const r=at.parseScale(e);0!==r.x&&0!==r.y||(r.x=W,r.y=W),this.scale=r,this.originX=i[0],this.originY=i[1]}},matrix:pt,skewX:class extends ft{constructor(t,e,i){super(t,e,i),this.type="skewX",this.matrix=[1,0,Math.tan(this.angle.getRadians()),1,0,0]}},skewY:class extends ft{constructor(t,e,i){super(t,e,i),this.type="skewY",this.matrix=[1,Math.tan(this.angle.getRadians()),0,1,0,0]}}};class mt{getAttribute(t){let e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const i=this.attributes[t];if(!i&&e){const e=new rt(this.document,t,"");return this.attributes[t]=e,e}return i||rt.empty(this.document)}getHrefAttribute(){let t;for(const e in this.attributes)if("href"===e||e.endsWith(":href")){t=this.attributes[e];break}return t||rt.empty(this.document)}getStyle(t){let e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const r=this.styles[t];if(r)return r;const s=this.getAttribute(t);if(s.hasValue())return this.styles[t]=s,s;if(!i){const{parent:e}=this;if(e){const i=e.getStyle(t);if(i.hasValue())return i}}if(e){const e=new rt(this.document,t,"");return this.styles[t]=e,e}return rt.empty(this.document)}render(t){if("none"!==this.getStyle("display").getString()&&"hidden"!==this.getStyle("visibility").getString()){if(t.save(),this.getStyle("mask").hasValue()){const e=this.getStyle("mask").getDefinition();e&&(this.applyEffects(t),e.apply(t,this))}else if("none"!==this.getStyle("filter").getValue("none")){const e=this.getStyle("filter").getDefinition();e&&(this.applyEffects(t),e.apply(t,this))}else this.setContext(t),this.renderChildren(t),this.clearContext(t);t.restore()}}setContext(t){}applyEffects(t){const e=yt.fromElement(this.document,this);e&&e.apply(t);const i=this.getStyle("clip-path",!1,!0);if(i.hasValue()){const e=i.getDefinition();e&&e.apply(t)}}clearContext(t){}renderChildren(t){this.children.forEach((e=>{e.render(t)}))}addChild(t){const e=t instanceof mt?t:this.document.createElement(t);e.parent=this,mt.ignoreChildTypes.includes(e.type)||this.children.push(e)}matchesSelector(t){var e;const{node:i}=this;if("function"==typeof i.matches)return i.matches(t);const r=null===(e=i.getAttribute)||void 0===e?void 0:e.call(i,"class");return!(!r||""===r)&&r.split(" ").some((e=>".".concat(e)===t))}addStylesFromStyleDefinition(){const{styles:t,stylesSpecificity:e}=this.document;let i;for(const r in t)if(!r.startsWith("@")&&this.matchesSelector(r)){const s=t[r],n=e[r];if(s)for(const t in s){let e=this.stylesSpecificity[t];void 0===e&&(e="000"),n&&n>=e&&(i=s[t],i&&(this.styles[t]=i),this.stylesSpecificity[t]=n)}}}removeStyles(t,e){return e.reduce(((e,i)=>{const r=t.getStyle(i);if(!r.hasValue())return e;const s=r.getString();return r.setValue(""),[...e,[i,s]]}),[])}restoreStyles(t,e){e.forEach((e=>{let[i,r]=e;t.getStyle(i,!0).setValue(r)}))}isFirstChild(){var t;return 0===(null===(t=this.parent)||void 0===t?void 0:t.children.indexOf(this))}constructor(t,e,i=!1){if(this.document=t,this.node=e,this.captureTextNodes=i,this.type="",this.attributes={},this.styles={},this.stylesSpecificity={},this.animationFrozen=!1,this.animationFrozenValue="",this.parent=null,this.children=[],!e||1!==e.nodeType)return;if(Array.from(e.attributes).forEach((e=>{const i=(r=e.nodeName,L.test(r)?r.toLowerCase():r);var r;this.attributes[i]=new rt(t,i,e.value)})),this.addStylesFromStyleDefinition(),this.getAttribute("style").hasValue()){const e=this.getAttribute("style").getString().split(";").map((t=>t.trim()));e.forEach((e=>{if(!e)return;const[i,r]=e.split(":").map((t=>t.trim()));i&&(this.styles[i]=new rt(t,i,r))}))}const{definitions:r}=t,s=this.getAttribute("id");s.hasValue()&&(r[s.getString()]||(r[s.getString()]=this)),Array.from(e.childNodes).forEach((e=>{if(1===e.nodeType)this.addChild(e);else if(i&&(3===e.nodeType||4===e.nodeType)){const i=t.createTextNode(e);i.getText().length>0&&this.addChild(i)}}))}}mt.ignoreChildTypes=["title"];class xt extends mt{constructor(t,e,i){super(t,e,i)}}function bt(t){const e=t.trim();return/^('|")/.test(e)?e:'"'.concat(e,'"')}function vt(t){if(!t)return"";const e=t.trim().toLowerCase();switch(e){case"normal":case"italic":case"oblique":case"inherit":case"initial":case"unset":return e;default:return/^oblique\s+(-|)\d+deg$/.test(e)?e:""}}function wt(t){if(!t)return"";const e=t.trim().toLowerCase();switch(e){case"normal":case"bold":case"lighter":case"bolder":case"inherit":case"initial":case"unset":return e;default:return/^[\d.]+$/.test(e)?e:""}}class Tt{static parse(){let t=arguments.length>1?arguments[1]:void 0,e="",i="",r="",s="",n="";const a=R(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").trim().split(" "),o={fontSize:!1,fontStyle:!1,fontWeight:!1,fontVariant:!1};return a.forEach((t=>{switch(!0){case!o.fontStyle&&Tt.styles.includes(t):"inherit"!==t&&(e=t),o.fontStyle=!0;break;case!o.fontVariant&&Tt.variants.includes(t):"inherit"!==t&&(i=t),o.fontStyle=!0,o.fontVariant=!0;break;case!o.fontWeight&&Tt.weights.includes(t):"inherit"!==t&&(r=t),o.fontStyle=!0,o.fontVariant=!0,o.fontWeight=!0;break;case!o.fontSize:"inherit"!==t&&(s=t.split("/")[0]||""),o.fontStyle=!0,o.fontVariant=!0,o.fontWeight=!0,o.fontSize=!0;break;default:"inherit"!==t&&(n+=t)}})),new Tt(e,i,r,s,n,t)}toString(){return[vt(this.fontStyle),this.fontVariant,wt(this.fontWeight),this.fontSize,(t=this.fontFamily,"undefined"==typeof process?t:t.trim().split(",").map(bt).join(","))].join(" ").trim();var t}constructor(t,e,i,r,s,n){const a=n?"string"==typeof n?Tt.parse(n):n:{};this.fontFamily=s||a.fontFamily,this.fontSize=r||a.fontSize,this.fontStyle=t||a.fontStyle,this.fontWeight=i||a.fontWeight,this.fontVariant=e||a.fontVariant}}Tt.styles="normal|italic|oblique|inherit",Tt.variants="normal|small-caps|inherit",Tt.weights="normal|bold|bolder|lighter|100|200|300|400|500|600|700|800|900|inherit";class St{get x(){return this.x1}get y(){return this.y1}get width(){return this.x2-this.x1}get height(){return this.y2-this.y1}addPoint(t,e){void 0!==t&&((isNaN(this.x1)||isNaN(this.x2))&&(this.x1=t,this.x2=t),tthis.x2&&(this.x2=t)),void 0!==e&&((isNaN(this.y1)||isNaN(this.y2))&&(this.y1=e,this.y2=e),ethis.y2&&(this.y2=e))}addX(t){this.addPoint(t,0)}addY(t){this.addPoint(0,t)}addBoundingBox(t){if(!t)return;const{x1:e,y1:i,x2:r,y2:s}=t;this.addPoint(e,i),this.addPoint(r,s)}sumCubic(t,e,i,r,s){return Math.pow(1-t,3)*e+3*Math.pow(1-t,2)*t*i+3*(1-t)*Math.pow(t,2)*r+Math.pow(t,3)*s}bezierCurveAdd(t,e,i,r,s){const n=6*e-12*i+6*r,a=-3*e+9*i-9*r+3*s,o=3*i-3*e;if(0===a){if(0===n)return;const a=-o/n;return void(01&&void 0!==arguments[1]&&arguments[1];if(!e){const e=this.getStyle("fill"),i=this.getStyle("fill-opacity"),r=this.getStyle("stroke"),s=this.getStyle("stroke-opacity");if(e.isUrlDefinition()){const r=e.getFillStyleDefinition(this,i);r&&(t.fillStyle=r)}else if(e.hasValue()){"currentColor"===e.getString()&&e.setValue(this.getStyle("color").getColor());const i=e.getColor();"inherit"!==i&&(t.fillStyle="none"===i?"rgba(0,0,0,0)":i)}if(i.hasValue()){const e=new rt(this.document,"fill",t.fillStyle).addOpacity(i).getColor();t.fillStyle=e}if(r.isUrlDefinition()){const e=r.getFillStyleDefinition(this,s);e&&(t.strokeStyle=e)}else if(r.hasValue()){"currentColor"===r.getString()&&r.setValue(this.getStyle("color").getColor());const e=r.getString();"inherit"!==e&&(t.strokeStyle="none"===e?"rgba(0,0,0,0)":e)}if(s.hasValue()){const e=new rt(this.document,"stroke",t.strokeStyle).addOpacity(s).getString();t.strokeStyle=e}const n=this.getStyle("stroke-width");if(n.hasValue()){const e=n.getPixels();t.lineWidth=e||W}const a=this.getStyle("stroke-linecap"),o=this.getStyle("stroke-linejoin"),h=this.getStyle("stroke-miterlimit"),l=this.getStyle("stroke-dasharray"),c=this.getStyle("stroke-dashoffset");if(a.hasValue()&&(t.lineCap=a.getString()),o.hasValue()&&(t.lineJoin=o.getString()),h.hasValue()&&(t.miterLimit=h.getNumber()),l.hasValue()&&"none"!==l.getString()){const e=I(l.getString());void 0!==t.setLineDash?t.setLineDash(e):void 0!==t.webkitLineDash?t.webkitLineDash=e:void 0===t.mozDash||1===e.length&&0===e[0]||(t.mozDash=e);const i=c.getPixels();void 0!==t.lineDashOffset?t.lineDashOffset=i:void 0!==t.webkitLineDashOffset?t.webkitLineDashOffset=i:void 0!==t.mozDashOffset&&(t.mozDashOffset=i)}}if(this.modifiedEmSizeStack=!1,void 0!==t.font){const e=this.getStyle("font"),i=this.getStyle("font-style"),r=this.getStyle("font-variant"),s=this.getStyle("font-weight"),n=this.getStyle("font-size"),a=this.getStyle("font-family"),o=new Tt(i.getString(),r.getString(),s.getString(),n.hasValue()?"".concat(n.getPixels(!0),"px"):"",a.getString(),Tt.parse(e.getString(),t.font));i.setValue(o.fontStyle),r.setValue(o.fontVariant),s.setValue(o.fontWeight),n.setValue(o.fontSize),a.setValue(o.fontFamily),t.font=o.toString(),n.isPixels()&&(this.document.emSize=n.getPixels(),this.modifiedEmSizeStack=!0)}e||(this.applyEffects(t),t.globalAlpha=this.calculateOpacity())}clearContext(t){super.clearContext(t),this.modifiedEmSizeStack&&this.document.popEmSize()}constructor(...t){super(...t),this.modifiedEmSizeStack=!1}}class Ct extends At{setContext(t){let e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];super.setContext(t,e);const i=this.getStyle("dominant-baseline").getTextBaseline()||this.getStyle("alignment-baseline").getTextBaseline();i&&(t.textBaseline=i)}initializeCoordinates(){this.x=0,this.y=0,this.leafTexts=[],this.textChunkStart=0,this.minX=Number.POSITIVE_INFINITY,this.maxX=Number.NEGATIVE_INFINITY}getBoundingBox(t){if("text"!==this.type)return this.getTElementBoundingBox(t);this.initializeCoordinates(),this.adjustChildCoordinatesRecursive(t);let e=null;return this.children.forEach(((i,r)=>{const s=this.getChildBoundingBox(t,this,this,r);e?e.addBoundingBox(s):e=s})),e}getFontSize(){const{document:t,parent:e}=this,i=Tt.parse(t.ctx.font).fontSize;return e.getStyle("font-size").getNumber(i)}getTElementBoundingBox(t){const e=this.getFontSize();return new St(this.x,this.y-e,this.x+this.measureText(t),this.y)}getGlyph(t,e,i){const r=e[i];let s;if(t.isArabic){var n;const a=e.length,o=e[i-1],h=e[i+1];let l="isolated";(0===i||" "===o)&&i0&&" "!==o&&i0&&" "!==o&&(i===a-1||" "===h)&&(l="initial"),s=(null===(n=t.arabicGlyphs[r])||void 0===n?void 0:n[l])||t.glyphs[r]}else s=t.glyphs[r];return s||(s=t.missingGlyph),s}getText(){return""}getTextFromNode(t){const e=t||this.node,i=Array.from(e.parentNode.childNodes),r=i.indexOf(e),s=i.length-1;let n=R(e.textContent||"");return 0===r&&(n=n.replace(/^[\n \t]+/,"")),r===s&&(n=n.replace(/[\n \t]+$/,"")),n}renderChildren(t){if("text"!==this.type)return void this.renderTElementChildren(t);this.initializeCoordinates(),this.adjustChildCoordinatesRecursive(t),this.children.forEach(((e,i)=>{this.renderChild(t,this,this,i)}));const{mouse:e}=this.document.screen;e.isWorking()&&e.checkBoundingBox(this,this.getBoundingBox(t))}renderTElementChildren(t){const{document:e,parent:i}=this,r=this.getText(),s=i.getStyle("font-family").getDefinition();if(s){const{unitsPerEm:n}=s.fontFace,a=Tt.parse(e.ctx.font),o=i.getStyle("font-size").getNumber(a.fontSize),h=i.getStyle("font-style").getString(a.fontStyle),l=o/n,c=s.isRTL?r.split("").reverse().join(""):r,u=I(i.getAttribute("dx").getString()),g=c.length;for(let e=0;e=this.leafTexts.length)return;const t=this.leafTexts[this.textChunkStart],e=t.getStyle("text-anchor").getString("start");let i=0;i="start"===e?t.x-this.minX:"end"===e?t.x-this.maxX:t.x-(this.minX+this.maxX)/2;for(let t=this.textChunkStart;t{this.adjustChildCoordinatesRecursiveCore(t,this,this,i)})),this.applyAnchoring()}adjustChildCoordinatesRecursiveCore(t,e,i,r){const s=i.children[r];s.children.length>0?s.children.forEach(((i,r)=>{e.adjustChildCoordinatesRecursiveCore(t,e,s,r)})):this.adjustChildCoordinates(t,e,i,r)}adjustChildCoordinates(t,e,i,r){const s=i.children[r];if("function"!=typeof s.measureText)return s;t.save(),s.setContext(t,!0);const n=s.getAttribute("x"),a=s.getAttribute("y"),o=s.getAttribute("dx"),h=s.getAttribute("dy"),l=s.getStyle("font-family").getDefinition(),c=Boolean(null==l?void 0:l.isRTL);0===r&&(n.hasValue()||n.setValue(s.getInheritedAttribute("x")),a.hasValue()||a.setValue(s.getInheritedAttribute("y")),o.hasValue()||o.setValue(s.getInheritedAttribute("dx")),h.hasValue()||h.setValue(s.getInheritedAttribute("dy")));const u=s.measureText(t);return c&&(e.x-=u),n.hasValue()?(e.applyAnchoring(),s.x=n.getPixels("x"),o.hasValue()&&(s.x+=o.getPixels("x"))):(o.hasValue()&&(e.x+=o.getPixels("x")),s.x=e.x),e.x=s.x,c||(e.x+=u),a.hasValue()?(s.y=a.getPixels("y"),h.hasValue()&&(s.y+=h.getPixels("y"))):(h.hasValue()&&(e.y+=h.getPixels("y")),s.y=e.y),e.y=s.y,e.leafTexts.push(s),e.minX=Math.min(e.minX,s.x,s.x+u),e.maxX=Math.max(e.maxX,s.x,s.x+u),s.clearContext(t),t.restore(),s}getChildBoundingBox(t,e,i,r){const s=i.children[r];if("function"!=typeof s.getBoundingBox)return null;const n=s.getBoundingBox(t);return n&&s.children.forEach(((i,r)=>{const a=e.getChildBoundingBox(t,e,s,r);n.addBoundingBox(a)})),n}renderChild(t,e,i,r){const s=i.children[r];s.render(t),s.children.forEach(((i,r)=>{e.renderChild(t,e,s,r)}))}measureText(t){const{measureCache:e}=this;if(~e)return e;const i=this.getText(),r=this.measureTargetText(t,i);return this.measureCache=r,r}measureTargetText(t,e){if(!e.length)return 0;const{parent:i}=this,r=i.getStyle("font-family").getDefinition();if(r){const t=this.getFontSize(),s=r.isRTL?e.split("").reverse().join(""):e,n=I(i.getAttribute("dx").getString()),a=s.length;let o=0;for(let e=0;e0?"":this.getTextFromNode()}}class Ot extends Pt{constructor(...t){super(...t),this.type="textNode"}}class Nt extends P{reset(){this.i=-1,this.command=null,this.previousCommand=null,this.start=new at(0,0),this.control=new at(0,0),this.current=new at(0,0),this.points=[],this.angles=[]}isEnd(){const{i:t,commands:e}=this;return t>=e.length-1}next(){const t=this.commands[++this.i];return this.previousCommand=this.command,this.command=t,t}getPoint(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"x",e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"y";const i=new at(this.command[t],this.command[e]);return this.makeAbsolute(i)}getAsControlPoint(t,e){const i=this.getPoint(t,e);return this.control=i,i}getAsCurrentPoint(t,e){const i=this.getPoint(t,e);return this.current=i,i}getReflectedControlPoint(){const t=this.previousCommand.type;if(t!==P.CURVE_TO&&t!==P.SMOOTH_CURVE_TO&&t!==P.QUAD_TO&&t!==P.SMOOTH_QUAD_TO)return this.current;const{current:{x:e,y:i},control:{x:r,y:s}}=this;return new at(2*e-r,2*i-s)}makeAbsolute(t){if(this.command.relative){const{x:e,y:i}=this.current;t.x+=e,t.y+=i}return t}addMarker(t,e,i){const{points:r,angles:s}=this;i&&s.length>0&&!s[s.length-1]&&(s[s.length-1]=r[r.length-1].angleTo(i)),this.addMarkerAngle(t,e?e.angleTo(t):null)}addMarkerAngle(t,e){this.points.push(t),this.angles.push(e)}getMarkerPoints(){return this.points}getMarkerAngles(){const{angles:t}=this,e=t.length;for(let i=0;i[t,i[e]]));return r}renderChildren(t){this.path(t),this.document.screen.mouse.checkPath(this,t);const e=this.getStyle("fill-rule");""!==t.fillStyle&&("inherit"!==e.getString("inherit")?t.fill(e.getString()):t.fill()),""!==t.strokeStyle&&("non-scaling-stroke"===this.getAttribute("vector-effect").getString()?(t.save(),t.setTransform(1,0,0,1,0,0),t.stroke(),t.restore()):t.stroke());const i=this.getMarkers();if(i){const e=i.length-1,r=this.getStyle("marker-start"),s=this.getStyle("marker-mid"),n=this.getStyle("marker-end");if(r.isUrlDefinition()){const e=r.getDefinition(),[s,n]=i[0];e.render(t,s,n)}if(s.isUrlDefinition()){const r=s.getDefinition();for(let s=1;s1&&(r*=Math.sqrt(u),s*=Math.sqrt(u));let g=(a===o?-1:1)*Math.sqrt((Math.pow(r,2)*Math.pow(s,2)-Math.pow(r,2)*Math.pow(c.y,2)-Math.pow(s,2)*Math.pow(c.x,2))/(Math.pow(r,2)*Math.pow(c.y,2)+Math.pow(s,2)*Math.pow(c.x,2)));isNaN(g)&&(g=0);const d=new at(g*r*c.y/s,g*-s*c.x/r),p=new at((e.x+l.x)/2+Math.cos(h)*d.x-Math.sin(h)*d.y,(e.y+l.y)/2+Math.sin(h)*d.x+Math.cos(h)*d.y),f=G([1,0],[(c.x-d.x)/r,(c.y-d.y)/s]),y=[(c.x-d.x)/r,(c.y-d.y)/s],m=[(-c.x-d.x)/r,(-c.y-d.y)/s];let x=G(y,m);return j(y,m)<=-1&&(x=Math.PI),j(y,m)>=1&&(x=0),{currentPoint:l,rX:r,rY:s,sweepFlag:o,xAxisRotation:h,centp:p,a1:f,ad:x}}pathA(t,e){const{pathParser:i}=this,{currentPoint:r,rX:s,rY:n,sweepFlag:a,xAxisRotation:o,centp:h,a1:l,ad:c}=Et.pathA(i),u=1-a?1:-1,g=l+u*(c/2),d=new at(h.x+s*Math.cos(g),h.y+n*Math.sin(g));if(i.addMarkerAngle(d,g-u*Math.PI/2),i.addMarkerAngle(r,g-u*Math.PI),e.addPoint(r.x,r.y),t&&!isNaN(l)&&!isNaN(c)){const e=s>n?s:n,i=s>n?1:s/n,r=s>n?n/s:1;t.translate(h.x,h.y),t.rotate(o),t.scale(i,r),t.arc(0,0,e,l,l+c,Boolean(1-a)),t.scale(1/i,1/r),t.rotate(-o),t.translate(-h.x,-h.y)}}static pathZ(t){t.current=t.start}pathZ(t,e){Et.pathZ(this.pathParser),t&&e.x1!==e.x2&&e.y1!==e.y2&&t.closePath()}constructor(t,e,i){super(t,e,i),this.type="path",this.pathParser=new Nt(this.getAttribute("d").getString())}}class Mt extends At{setContext(t){var e;const{document:i}=this,{screen:r,window:s}=i,n=t.canvas;if(r.setDefaults(t),"style"in n&&void 0!==t.font&&s&&void 0!==s.getComputedStyle){t.font=s.getComputedStyle(n).getPropertyValue("font");const e=new rt(i,"fontSize",Tt.parse(t.font).fontSize);e.hasValue()&&(i.rootEmSize=e.getPixels("y"),i.emSize=i.rootEmSize)}this.getAttribute("x").hasValue()||this.getAttribute("x",!0).setValue(0),this.getAttribute("y").hasValue()||this.getAttribute("y",!0).setValue(0);let{width:a,height:o}=r.viewPort;this.getStyle("width").hasValue()||this.getStyle("width",!0).setValue("100%"),this.getStyle("height").hasValue()||this.getStyle("height",!0).setValue("100%"),this.getStyle("color").hasValue()||this.getStyle("color",!0).setValue("black");const h=this.getAttribute("refX"),l=this.getAttribute("refY"),c=this.getAttribute("viewBox"),u=c.hasValue()?I(c.getString()):null,g=!this.root&&"visible"!==this.getStyle("overflow").getValue("hidden");let d=0,p=0,f=0,y=0;u&&(d=u[0],p=u[1]),this.root||(a=this.getStyle("width").getPixels("x"),o=this.getStyle("height").getPixels("y"),"marker"===this.type&&(f=d,y=p,d=0,p=0)),r.viewPort.setCurrent(a,o),!this.node||this.parent&&"foreignObject"!==(null===(e=this.node.parentNode)||void 0===e?void 0:e.nodeName)||!this.getStyle("transform",!1,!0).hasValue()||this.getStyle("transform-origin",!1,!0).hasValue()||this.getStyle("transform-origin",!0,!0).setValue("50% 50%"),super.setContext(t),t.translate(this.getAttribute("x").getPixels("x"),this.getAttribute("y").getPixels("y")),u&&(a=u[2],o=u[3]),i.setViewBox({ctx:t,aspectRatio:this.getAttribute("preserveAspectRatio").getString(),width:r.viewPort.width,desiredWidth:a,height:r.viewPort.height,desiredHeight:o,minX:d,minY:p,refX:h.getValue(),refY:l.getValue(),clip:g,clipX:f,clipY:y}),u&&(r.viewPort.removeCurrent(),r.viewPort.setCurrent(a,o))}clearContext(t){super.clearContext(t),this.document.screen.viewPort.removeCurrent()}resize(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t,i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const r=this.getAttribute("width",!0),s=this.getAttribute("height",!0),n=this.getAttribute("viewBox"),a=this.getAttribute("style"),o=r.getNumber(0),h=s.getNumber(0);if(i)if("string"==typeof i)this.getAttribute("preserveAspectRatio",!0).setValue(i);else{const t=this.getAttribute("preserveAspectRatio");t.hasValue()&&t.setValue(t.getString().replace(/^\s*(\S.*\S)\s*$/,"$1"))}if(r.setValue(t),s.setValue(e),n.hasValue()||n.setValue("0 0 ".concat(o||t," ").concat(h||e)),a.hasValue()){const i=this.getStyle("width"),r=this.getStyle("height");i.hasValue()&&i.setValue("".concat(t,"px")),r.hasValue()&&r.setValue("".concat(e,"px"))}}constructor(...t){super(...t),this.type="svg",this.root=!1}}class Vt extends Et{path(t){const e=this.getAttribute("x").getPixels("x"),i=this.getAttribute("y").getPixels("y"),r=this.getStyle("width",!1,!0).getPixels("x"),s=this.getStyle("height",!1,!0).getPixels("y"),n=this.getAttribute("rx"),a=this.getAttribute("ry");let o=n.getPixels("x"),h=a.getPixels("y");if(n.hasValue()&&!a.hasValue()&&(h=o),a.hasValue()&&!n.hasValue()&&(o=h),o=Math.min(o,r/2),h=Math.min(h,s/2),t){const n=(Math.sqrt(2)-1)/3*4;t.beginPath(),s>0&&r>0&&(t.moveTo(e+o,i),t.lineTo(e+r-o,i),t.bezierCurveTo(e+r-o+n*o,i,e+r,i+h-n*h,e+r,i+h),t.lineTo(e+r,i+s-h),t.bezierCurveTo(e+r,i+s-h+n*h,e+r-o+n*o,i+s,e+r-o,i+s),t.lineTo(e+o,i+s),t.bezierCurveTo(e+o-n*o,i+s,e,i+s-h+n*h,e,i+s-h),t.lineTo(e,i+h),t.bezierCurveTo(e,i+h-n*h,e+o-n*o,i,e+o,i),t.closePath())}return new St(e,i,e+r,i+s)}getMarkers(){return null}constructor(...t){super(...t),this.type="rect"}}class _t extends Et{path(t){const{points:e}=this,[{x:i,y:r}]=e,s=new St(i,r);return t&&(t.beginPath(),t.moveTo(i,r)),e.forEach((e=>{let{x:i,y:r}=e;s.addPoint(i,r),t&&t.lineTo(i,r)})),s}getMarkers(){const{points:t}=this,e=t.length-1,i=[];return t.forEach(((r,s)=>{s!==e&&i.push([r,r.angleTo(t[s+1])])})),i.length>0&&i.push([t[t.length-1],i[i.length-1][1]]),i}constructor(t,e,i){super(t,e,i),this.type="polyline",this.points=[],this.points=at.parsePath(this.getAttribute("points").getString())}}class kt extends At{getBoundingBox(t){const e=new St;return this.children.forEach((i=>{e.addBoundingBox(i.getBoundingBox(t))})),e}constructor(...t){super(...t),this.type="g"}}class Rt extends mt{getGradientUnits(){return this.getAttribute("gradientUnits").getString("objectBoundingBox")}createGradient(t,e,i){let r=this;this.getHrefAttribute().hasValue()&&(r=this.getHrefAttribute().getDefinition(),this.inheritStopContainer(r));const{stops:s}=r,n=this.getGradient(t,e);if(!n)return this.addParentOpacity(i,s[s.length-1].color);if(s.forEach((t=>{n.addColorStop(t.offset,this.addParentOpacity(i,t.color))})),this.getAttribute("gradientTransform").hasValue()){const{document:t}=this,{MAX_VIRTUAL_PIXELS:e}=ct,{viewPort:i}=t.screen,r=i.getRoot(),s=new Vt(t);s.attributes.x=new rt(t,"x",-e/3),s.attributes.y=new rt(t,"y",-e/3),s.attributes.width=new rt(t,"width",e),s.attributes.height=new rt(t,"height",e);const a=new kt(t);a.attributes.transform=new rt(t,"transform",this.getAttribute("gradientTransform").getValue()),a.children=[s];const o=new Mt(t);o.attributes.x=new rt(t,"x",0),o.attributes.y=new rt(t,"y",0),o.attributes.width=new rt(t,"width",r.width),o.attributes.height=new rt(t,"height",r.height),o.children=[a];const h=t.createCanvas(r.width,r.height),l=h.getContext("2d");return l.fillStyle=n,o.render(l),l.createPattern(h,"no-repeat")}return n}inheritStopContainer(t){this.attributesToInherit.forEach((e=>{!this.getAttribute(e).hasValue()&&t.getAttribute(e).hasValue()&&this.getAttribute(e,!0).setValue(t.getAttribute(e).getValue())}))}addParentOpacity(t,e){return t.hasValue()?new rt(this.document,"color",e).addOpacity(t).getColor():e}constructor(t,e,i){super(t,e,i),this.attributesToInherit=["gradientUnits"],this.stops=[];const{stops:r,children:s}=this;s.forEach((t=>{"stop"===t.type&&r.push(t)}))}}class It extends mt{getProperty(){const t=this.getAttribute("attributeType").getString(),e=this.getAttribute("attributeName").getString();return"CSS"===t?this.parent.getStyle(e,!0):this.parent.getAttribute(e,!0)}calcValue(){const{initialUnits:t}=this,{progress:e,from:i,to:r}=this.getProgress();let s=i.getNumber()+(r.getNumber()-i.getNumber())*e;return"%"===t&&(s*=100),"".concat(s).concat(t)}update(t){const{parent:e}=this,i=this.getProperty();if(this.initialValue||(this.initialValue=i.getString(),this.initialUnits=i.getUnits()),this.duration>this.maxDuration){const t=this.getAttribute("fill").getString("remove");if("indefinite"===this.getAttribute("repeatCount").getString()||"indefinite"===this.getAttribute("repeatDur").getString())this.duration=0;else if("freeze"!==t||this.frozen){if("remove"===t&&!this.removed)return this.removed=!0,e&&i&&i.setValue(e.animationFrozen?e.animationFrozenValue:this.initialValue),!0}else this.frozen=!0,e&&i&&(e.animationFrozen=!0,e.animationFrozenValue=i.getString());return!1}this.duration+=t;let r=!1;if(this.begin{const r=i.createElement(e);i.definitions[t]=r}))}catch(t){console.error('Error while loading font "'.concat(e,'":'),t)}this.loaded=!0}constructor(t){this.document=t,this.loaded=!1,t.fonts.push(this)}}class Ut extends mt{constructor(t,e,i){super(t,e,i),this.type="style";const r=R(Array.from(e.childNodes).map((t=>t.textContent)).join("").replace(/(\/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+\/)|(^[\s]*\/\/.*)/gm,"").replace(/@import.*;/g,""));r.split("}").forEach((e=>{const i=e.trim();if(!i)return;const r=i.split("{"),s=r[0].split(","),n=r[1].split(";");s.forEach((e=>{const i=e.trim();if(!i)return;const r=t.styles[i]||{};if(n.forEach((e=>{const i=e.indexOf(":"),s=e.substr(0,i).trim(),n=e.substr(i+1,e.length-i).trim();s&&n&&(r[s]=new rt(t,s,n))})),t.styles[i]=r,t.stylesSpecificity[i]=function(t){const e=[0,0,0];let i=t.replace(/:not\(([^)]*)\)/g," $1 ").replace(/{[\s\S]*/gm," "),r=0;return[i,r]=q(i,B),e[1]+=r,[i,r]=q(i,z),e[0]+=r,[i,r]=q(i,H),e[1]+=r,[i,r]=q(i,U),e[2]+=r,[i,r]=q(i,F),e[1]+=r,[i,r]=q(i,X),e[1]+=r,i=i.replace(/[*\s+>~]/g," ").replace(/[#.]/g," "),[i,r]=q(i,Y),e[2]+=r,e.join("")}(i),"@font-face"===i){const e=r["font-family"].getString().replace(/"|'/g,"");r.src.getString().split(",").forEach((i=>{if(i.indexOf('format("svg")')>0){const r=D(i);r&&new Ht(t).load(e,r)}}))}}))}))}}function Ft(t,e,i,r,s,n){return t[i*r*4+4*e+n]}function Xt(t,e,i,r,s,n,a){t[i*r*4+4*e+n]=a}function Yt(t,e,i){return t[e]*i}function qt(t,e,i,r){return e+Math.cos(t)*i+Math.sin(t)*r}Ut.parseExternalUrl=D;class Wt extends mt{apply(t,e,i,r,s){const{includeOpacity:n,matrix:a}=this,o=t.getImageData(0,0,r,s);for(let t=0;t{e.addBoundingBox(i.getBoundingBox(t))})),r=Math.floor(e.x1),s=Math.floor(e.y1),n=Math.floor(e.width),a=Math.floor(e.height)}const o=this.removeStyles(e,Qt.ignoreStyles),h=i.createCanvas(r+n,s+a),l=h.getContext("2d");i.screen.setDefaults(l),this.renderChildren(l),new Wt(i,{nodeType:1,childNodes:[],attributes:[{nodeName:"type",value:"luminanceToAlpha"},{nodeName:"includeOpacity",value:"true"}]}).apply(l,0,0,r+n,s+a);const c=i.createCanvas(r+n,s+a),u=c.getContext("2d");i.screen.setDefaults(u),e.render(u),u.globalCompositeOperation="destination-in",u.fillStyle=l.createPattern(h,"no-repeat"),u.fillRect(0,0,r+n,s+a),t.fillStyle=u.createPattern(c,"no-repeat"),t.fillRect(0,0,r+n,s+a),this.restoreStyles(e,o)}render(t){}constructor(...t){super(...t),this.type="mask"}}Qt.ignoreStyles=["mask","transform","clip-path"];const jt=()=>{};class Gt extends mt{apply(t,e){const{document:i,children:r}=this,s="getBoundingBox"in e?e.getBoundingBox(t):null;if(!s)return;let n=0,a=0;r.forEach((t=>{const e=t.extraFilterDistance||0;n=Math.max(n,e),a=Math.max(a,e)}));const o=Math.floor(s.width),h=Math.floor(s.height),l=o+2*n,c=h+2*a;if(l<1||c<1)return;const u=Math.floor(s.x),g=Math.floor(s.y),d=this.removeStyles(e,Gt.ignoreStyles),p=i.createCanvas(l,c),f=p.getContext("2d");i.screen.setDefaults(f),f.translate(-u+n,-g+a),e.render(f),r.forEach((t=>{"function"==typeof t.apply&&t.apply(f,0,0,l,c)})),t.drawImage(p,0,0,l,c,u-n,g-a,l,c),this.restoreStyles(e,d)}render(t){}constructor(...t){super(...t),this.type="filter"}}Gt.ignoreStyles=["filter","transform","clip-path"];const $t={svg:Mt,rect:Vt,circle:class extends Et{path(t){const e=this.getAttribute("cx").getPixels("x"),i=this.getAttribute("cy").getPixels("y"),r=this.getAttribute("r").getPixels();return t&&r>0&&(t.beginPath(),t.arc(e,i,r,0,2*Math.PI,!1),t.closePath()),new St(e-r,i-r,e+r,i+r)}getMarkers(){return null}constructor(...t){super(...t),this.type="circle"}},ellipse:class extends Et{path(t){const e=(Math.sqrt(2)-1)/3*4,i=this.getAttribute("rx").getPixels("x"),r=this.getAttribute("ry").getPixels("y"),s=this.getAttribute("cx").getPixels("x"),n=this.getAttribute("cy").getPixels("y");return t&&i>0&&r>0&&(t.beginPath(),t.moveTo(s+i,n),t.bezierCurveTo(s+i,n+e*r,s+e*i,n+r,s,n+r),t.bezierCurveTo(s-e*i,n+r,s-i,n+e*r,s-i,n),t.bezierCurveTo(s-i,n-e*r,s-e*i,n-r,s,n-r),t.bezierCurveTo(s+e*i,n-r,s+i,n-e*r,s+i,n),t.closePath()),new St(s-i,n-r,s+i,n+r)}getMarkers(){return null}constructor(...t){super(...t),this.type="ellipse"}},line:class extends Et{getPoints(){return[new at(this.getAttribute("x1").getPixels("x"),this.getAttribute("y1").getPixels("y")),new at(this.getAttribute("x2").getPixels("x"),this.getAttribute("y2").getPixels("y"))]}path(t){const[{x:e,y:i},{x:r,y:s}]=this.getPoints();return t&&(t.beginPath(),t.moveTo(e,i),t.lineTo(r,s)),new St(e,i,r,s)}getMarkers(){const[t,e]=this.getPoints(),i=t.angleTo(e);return[[t,i],[e,i]]}constructor(...t){super(...t),this.type="line"}},polyline:_t,polygon:class extends _t{path(t){const e=super.path(t),[{x:i,y:r}]=this.points;return t&&(t.lineTo(i,r),t.closePath()),e}constructor(...t){super(...t),this.type="polygon"}},path:Et,pattern:class extends mt{createPattern(t,e,i){const r=this.getStyle("width").getPixels("x",!0),s=this.getStyle("height").getPixels("y",!0),n=new Mt(this.document,null);n.attributes.viewBox=new rt(this.document,"viewBox",this.getAttribute("viewBox").getValue()),n.attributes.width=new rt(this.document,"width","".concat(r,"px")),n.attributes.height=new rt(this.document,"height","".concat(s,"px")),n.attributes.transform=new rt(this.document,"transform",this.getAttribute("patternTransform").getValue()),n.children=this.children;const a=this.document.createCanvas(r,s),o=a.getContext("2d"),h=this.getAttribute("x"),l=this.getAttribute("y");h.hasValue()&&l.hasValue()&&o.translate(h.getPixels("x",!0),l.getPixels("y",!0)),i.hasValue()?this.styles["fill-opacity"]=i:Reflect.deleteProperty(this.styles,"fill-opacity");for(let t=-1;t<=1;t++)for(let e=-1;e<=1;e++)o.save(),n.attributes.x=new rt(this.document,"x",t*a.width),n.attributes.y=new rt(this.document,"y",e*a.height),n.render(o),o.restore();return t.createPattern(a,"repeat")}constructor(...t){super(...t),this.type="pattern"}},marker:class extends mt{render(t,e,i){if(!e)return;const{x:r,y:s}=e,n=this.getAttribute("orient").getString("auto"),a=this.getAttribute("markerUnits").getString("strokeWidth");t.translate(r,s),"auto"===n&&t.rotate(i),"strokeWidth"===a&&t.scale(t.lineWidth,t.lineWidth),t.save();const o=new Mt(this.document);o.type=this.type,o.attributes.viewBox=new rt(this.document,"viewBox",this.getAttribute("viewBox").getValue()),o.attributes.refX=new rt(this.document,"refX",this.getAttribute("refX").getValue()),o.attributes.refY=new rt(this.document,"refY",this.getAttribute("refY").getValue()),o.attributes.width=new rt(this.document,"width",this.getAttribute("markerWidth").getValue()),o.attributes.height=new rt(this.document,"height",this.getAttribute("markerHeight").getValue()),o.attributes.overflow=new rt(this.document,"overflow",this.getAttribute("overflow").getValue()),o.attributes.fill=new rt(this.document,"fill",this.getAttribute("fill").getColor("black")),o.attributes.stroke=new rt(this.document,"stroke",this.getAttribute("stroke").getValue("none")),o.children=this.children,o.render(t),t.restore(),"strokeWidth"===a&&t.scale(1/t.lineWidth,1/t.lineWidth),"auto"===n&&t.rotate(-i),t.translate(-r,-s)}constructor(...t){super(...t),this.type="marker"}},defs:class extends mt{render(){}constructor(...t){super(...t),this.type="defs"}},linearGradient:class extends Rt{getGradient(t,e){const i="objectBoundingBox"===this.getGradientUnits(),r=i?e.getBoundingBox(t):null;if(i&&!r)return null;this.getAttribute("x1").hasValue()||this.getAttribute("y1").hasValue()||this.getAttribute("x2").hasValue()||this.getAttribute("y2").hasValue()||(this.getAttribute("x1",!0).setValue(0),this.getAttribute("y1",!0).setValue(0),this.getAttribute("x2",!0).setValue(1),this.getAttribute("y2",!0).setValue(0));const s=i?r.x+r.width*this.getAttribute("x1").getNumber():this.getAttribute("x1").getPixels("x"),n=i?r.y+r.height*this.getAttribute("y1").getNumber():this.getAttribute("y1").getPixels("y"),a=i?r.x+r.width*this.getAttribute("x2").getNumber():this.getAttribute("x2").getPixels("x"),o=i?r.y+r.height*this.getAttribute("y2").getNumber():this.getAttribute("y2").getPixels("y");return s===a&&n===o?null:t.createLinearGradient(s,n,a,o)}constructor(t,e,i){super(t,e,i),this.type="linearGradient",this.attributesToInherit.push("x1","y1","x2","y2")}},radialGradient:class extends Rt{getGradient(t,e){const i="objectBoundingBox"===this.getGradientUnits(),r=e.getBoundingBox(t);if(i&&!r)return null;this.getAttribute("cx").hasValue()||this.getAttribute("cx",!0).setValue("50%"),this.getAttribute("cy").hasValue()||this.getAttribute("cy",!0).setValue("50%"),this.getAttribute("r").hasValue()||this.getAttribute("r",!0).setValue("50%");const s=i?r.x+r.width*this.getAttribute("cx").getNumber():this.getAttribute("cx").getPixels("x"),n=i?r.y+r.height*this.getAttribute("cy").getNumber():this.getAttribute("cy").getPixels("y");let a=s,o=n;this.getAttribute("fx").hasValue()&&(a=i?r.x+r.width*this.getAttribute("fx").getNumber():this.getAttribute("fx").getPixels("x")),this.getAttribute("fy").hasValue()&&(o=i?r.y+r.height*this.getAttribute("fy").getNumber():this.getAttribute("fy").getPixels("y"));const h=i?(r.width+r.height)/2*this.getAttribute("r").getNumber():this.getAttribute("r").getPixels(),l=this.getAttribute("fr").getPixels();return t.createRadialGradient(a,o,l,s,n,h)}constructor(t,e,i){super(t,e,i),this.type="radialGradient",this.attributesToInherit.push("cx","cy","r","fx","fy","fr")}},stop:class extends mt{constructor(t,e,i){super(t,e,i),this.type="stop";const r=Math.max(0,Math.min(1,this.getAttribute("offset").getNumber())),s=this.getStyle("stop-opacity");let n=this.getStyle("stop-color",!0);""===n.getString()&&n.setValue("#000"),s.hasValue()&&(n=n.addOpacity(s)),this.offset=r,this.color=n.getColor()}},animate:It,animateColor:class extends It{calcValue(){const{progress:t,from:e,to:i}=this.getProgress(),r=new o(e.getColor()),s=new o(i.getColor());if(r.ok&&s.ok){const e=r.r+(s.r-r.r)*t,i=r.g+(s.g-r.g)*t,n=r.b+(s.b-r.b)*t;return"rgb(".concat(Math.floor(e),", ").concat(Math.floor(i),", ").concat(Math.floor(n),")")}return this.getAttribute("from").getColor()}constructor(...t){super(...t),this.type="animateColor"}},animateTransform:class extends It{calcValue(){const{progress:t,from:e,to:i}=this.getProgress(),r=I(e.getString()),s=I(i.getString()),n=r.map(((e,i)=>e+(s[i]-e)*t)).join(" ");return n}constructor(...t){super(...t),this.type="animateTransform"}},font:class extends mt{render(){}constructor(t,e,i){super(t,e,i),this.type="font",this.isArabic=!1,this.glyphs={},this.arabicGlyphs={},this.isRTL=!1,this.horizAdvX=this.getAttribute("horiz-adv-x").getNumber();const{definitions:r}=t,{children:s}=this;for(const t of s)if(t instanceof Lt){this.fontFace=t;const e=t.getStyle("font-family");e.hasValue()&&(r[e.getString()]=this)}else if(t instanceof Bt)this.missingGlyph=t;else if(t instanceof Dt)if(t.arabicForm){this.isRTL=!0,this.isArabic=!0;const e=this.arabicGlyphs[t.unicode];void 0===e?this.arabicGlyphs[t.unicode]={[t.arabicForm]:t}:e[t.arabicForm]=t}else this.glyphs[t.unicode]=t}},"font-face":Lt,"missing-glyph":Bt,glyph:Dt,text:Ct,tspan:Pt,tref:class extends Ct{getText(){const t=this.getHrefAttribute().getDefinition();if(t){const e=t.children[0];if(e)return e.getText()}return""}constructor(...t){super(...t),this.type="tref"}},a:class extends Ct{getText(){return this.text}renderChildren(t){if(this.hasText){super.renderChildren(t);const{document:e,x:i,y:r}=this,{mouse:s}=e.screen,n=new rt(e,"fontSize",Tt.parse(e.ctx.font).fontSize);s.isWorking()&&s.checkBoundingBox(this,new St(i,r-n.getPixels("y"),i+this.measureText(t),r))}else if(this.children.length>0){const e=new kt(this.document);e.children=this.children,e.parent=this,e.render(t)}}onClick(){const{window:t}=this.document;t&&t.open(this.getHrefAttribute().getString())}onMouseMove(){this.document.ctx.canvas.style.cursor="pointer"}constructor(t,e,i){super(t,e,i),this.type="a";const{childNodes:r}=e,s=r[0],n=r.length>0&&Array.from(r).every((t=>3===t.nodeType));this.hasText=n,this.text=n?this.getTextFromNode(s):""}},textPath:class extends Ct{getText(){return this.text}path(t){const{dataArray:e}=this;t&&t.beginPath(),e.forEach((e=>{let{type:i,points:r}=e;switch(i){case Nt.LINE_TO:t&&t.lineTo(r[0],r[1]);break;case Nt.MOVE_TO:t&&t.moveTo(r[0],r[1]);break;case Nt.CURVE_TO:t&&t.bezierCurveTo(r[0],r[1],r[2],r[3],r[4],r[5]);break;case Nt.QUAD_TO:t&&t.quadraticCurveTo(r[0],r[1],r[2],r[3]);break;case Nt.ARC:{const[e,i,s,n,a,o,h,l]=r,c=s>n?s:n,u=s>n?1:s/n,g=s>n?n/s:1;t&&(t.translate(e,i),t.rotate(h),t.scale(u,g),t.arc(0,0,c,a,a+o,Boolean(1-l)),t.scale(1/u,1/g),t.rotate(-h),t.translate(-e,-i));break}case Nt.CLOSE_PATH:t&&t.closePath()}}))}renderChildren(t){this.setTextData(t),t.save();const e=this.parent.getStyle("text-decoration").getString(),i=this.getFontSize(),{glyphInfo:r}=this,s=t.fillStyle;"underline"===e&&t.beginPath(),r.forEach(((r,s)=>{const{p0:n,p1:a,rotation:o,text:h}=r;t.save(),t.translate(n.x,n.y),t.rotate(o),t.fillStyle&&t.fillText(h,0,0),t.strokeStyle&&t.strokeText(h,0,0),t.restore(),"underline"===e&&(0===s&&t.moveTo(n.x,n.y+i/8),t.lineTo(a.x,a.y+i/5))})),"underline"===e&&(t.lineWidth=i/20,t.strokeStyle=s,t.stroke(),t.closePath()),t.restore()}getLetterSpacingAt(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return this.letterSpacingCache[t]||0}findSegmentToFitChar(t,e,i,r,s,n,a,o,h){let l=n,c=this.measureText(t,o);" "===o&&"justify"===e&&i-1&&(l+=this.getLetterSpacingAt(h));const u=this.textHeight/20,g=this.getEquidistantPointOnPath(l,u,0),d=this.getEquidistantPointOnPath(l+c,u,0),p={p0:g,p1:d},f=g&&d?Math.atan2(d.y-g.y,d.x-g.x):0;if(a){const t=Math.cos(Math.PI/2+f)*a,e=Math.cos(-f)*a;p.p0={...g,x:g.x+t,y:g.y+e},p.p1={...d,x:d.x+t,y:d.y+e}}return l+=c,{offset:l,segment:p,rotation:f}}measureText(t,e){const{measuresCache:i}=this,r=e||this.getText();if(i.has(r))return i.get(r);const s=this.measureTargetText(t,r);return i.set(r,s),s}setTextData(t){if(this.glyphInfo)return;const e=this.getText(),i=e.split(""),r=e.split(" ").length-1,s=this.parent.getAttribute("dx").split().map((t=>t.getPixels("x"))),n=this.parent.getAttribute("dy").getPixels("y"),a=this.parent.getStyle("text-anchor").getString("start"),o=this.getStyle("letter-spacing"),h=this.parent.getStyle("letter-spacing");let l=0;o.hasValue()&&"inherit"!==o.getValue()?o.hasValue()&&"initial"!==o.getValue()&&"unset"!==o.getValue()&&(l=o.getPixels()):l=h.getPixels();const c=[],u=e.length;this.letterSpacingCache=c;for(let t=0;t0===i?0:t+e||0),0),d=this.measureText(t),p=Math.max(d+g,0);this.textWidth=d,this.textHeight=this.getFontSize(),this.glyphInfo=[];const f=this.getPathLength(),y=this.getStyle("startOffset").getNumber(0)*f;let m=0;"middle"!==a&&"center"!==a||(m=-p/2),"end"!==a&&"right"!==a||(m=-p),m+=y,i.forEach(((e,s)=>{const{offset:o,segment:h,rotation:l}=this.findSegmentToFitChar(t,a,p,f,r,m,n,e,s);m=o,h.p0&&h.p1&&this.glyphInfo.push({text:i[s],p0:h.p0,p1:h.p1,rotation:l})}))}parsePathData(t){if(this.pathLength=-1,!t)return[];const e=[],{pathParser:i}=t;for(i.reset();!i.isEnd();){const{current:t}=i,r=t?t.x:0,s=t?t.y:0,n=i.next();let a=n.type,o=[];switch(n.type){case Nt.MOVE_TO:this.pathM(i,o);break;case Nt.LINE_TO:a=this.pathL(i,o);break;case Nt.HORIZ_LINE_TO:a=this.pathH(i,o);break;case Nt.VERT_LINE_TO:a=this.pathV(i,o);break;case Nt.CURVE_TO:this.pathC(i,o);break;case Nt.SMOOTH_CURVE_TO:a=this.pathS(i,o);break;case Nt.QUAD_TO:this.pathQ(i,o);break;case Nt.SMOOTH_QUAD_TO:a=this.pathT(i,o);break;case Nt.ARC:o=this.pathA(i);break;case Nt.CLOSE_PATH:Et.pathZ(i)}n.type!==Nt.CLOSE_PATH?e.push({type:a,points:o,start:{x:r,y:s},pathLength:this.calcLength(r,s,a,o)}):e.push({type:Nt.CLOSE_PATH,points:[],pathLength:0})}return e}pathM(t,e){const{x:i,y:r}=Et.pathM(t).point;e.push(i,r)}pathL(t,e){const{x:i,y:r}=Et.pathL(t).point;return e.push(i,r),Nt.LINE_TO}pathH(t,e){const{x:i,y:r}=Et.pathH(t).point;return e.push(i,r),Nt.LINE_TO}pathV(t,e){const{x:i,y:r}=Et.pathV(t).point;return e.push(i,r),Nt.LINE_TO}pathC(t,e){const{point:i,controlPoint:r,currentPoint:s}=Et.pathC(t);e.push(i.x,i.y,r.x,r.y,s.x,s.y)}pathS(t,e){const{point:i,controlPoint:r,currentPoint:s}=Et.pathS(t);return e.push(i.x,i.y,r.x,r.y,s.x,s.y),Nt.CURVE_TO}pathQ(t,e){const{controlPoint:i,currentPoint:r}=Et.pathQ(t);e.push(i.x,i.y,r.x,r.y)}pathT(t,e){const{controlPoint:i,currentPoint:r}=Et.pathT(t);return e.push(i.x,i.y,r.x,r.y),Nt.QUAD_TO}pathA(t){let{rX:e,rY:i,sweepFlag:r,xAxisRotation:s,centp:n,a1:a,ad:o}=Et.pathA(t);return 0===r&&o>0&&(o-=2*Math.PI),1===r&&o<0&&(o+=2*Math.PI),[n.x,n.y,e,i,a,o,s,r]}calcLength(t,e,i,r){let s=0,n=null,a=null,o=0;switch(i){case Nt.LINE_TO:return this.getLineLength(t,e,r[0],r[1]);case Nt.CURVE_TO:for(s=0,n=this.getPointOnCubicBezier(0,t,e,r[0],r[1],r[2],r[3],r[4],r[5]),o=.01;o<=1;o+=.01)a=this.getPointOnCubicBezier(o,t,e,r[0],r[1],r[2],r[3],r[4],r[5]),s+=this.getLineLength(n.x,n.y,a.x,a.y),n=a;return s;case Nt.QUAD_TO:for(s=0,n=this.getPointOnQuadraticBezier(0,t,e,r[0],r[1],r[2],r[3]),o=.01;o<=1;o+=.01)a=this.getPointOnQuadraticBezier(o,t,e,r[0],r[1],r[2],r[3]),s+=this.getLineLength(n.x,n.y,a.x,a.y),n=a;return s;case Nt.ARC:{s=0;const t=r[4],e=r[5],i=r[4]+e;let h=Math.PI/180;if(Math.abs(t-i)i;o-=h)a=this.getPointOnEllipticalArc(r[0],r[1],r[2],r[3],o,0),s+=this.getLineLength(n.x,n.y,a.x,a.y),n=a;else for(o=t+h;o5&&void 0!==arguments[5]?arguments[5]:e,a=arguments.length>6&&void 0!==arguments[6]?arguments[6]:i;const o=(s-i)/(r-e+W);let h=Math.sqrt(t*t/(1+o*o));re)return null;const{dataArray:s}=this;for(const e of s){if(e&&(e.pathLength<5e-5||i+e.pathLength+5e-5=0&&n>a)break;r=this.getPointOnEllipticalArc(e.points[0],e.points[1],e.points[2],e.points[3],n,e.points[6]);break}case Nt.CURVE_TO:n=s/e.pathLength,n>1&&(n=1),r=this.getPointOnCubicBezier(n,e.start.x,e.start.y,e.points[0],e.points[1],e.points[2],e.points[3],e.points[4],e.points[5]);break;case Nt.QUAD_TO:n=s/e.pathLength,n>1&&(n=1),r=this.getPointOnQuadraticBezier(n,e.start.x,e.start.y,e.points[0],e.points[1],e.points[2],e.points[3])}if(r)return r;break}return null}getLineLength(t,e,i,r){return Math.sqrt((i-t)*(i-t)+(r-e)*(r-e))}getPathLength(){return-1===this.pathLength&&(this.pathLength=this.dataArray.reduce(((t,e)=>e.pathLength>0?t+e.pathLength:t),0)),this.pathLength}getPointOnCubicBezier(t,e,i,r,s,n,a,o,h){return{x:o*$(t)+n*Z(t)+r*K(t)+e*J(t),y:h*$(t)+a*Z(t)+s*K(t)+i*J(t)}}getPointOnQuadraticBezier(t,e,i,r,s,n,a){return{x:n*tt(t)+r*et(t)+e*it(t),y:a*tt(t)+s*et(t)+i*it(t)}}getPointOnEllipticalArc(t,e,i,r,s,n){const a=Math.cos(n),o=Math.sin(n),h=i*Math.cos(s),l=r*Math.sin(s);return{x:t+(h*a-l*o),y:e+(h*o+l*a)}}buildEquidistantCache(t,e){const i=this.getPathLength(),r=e||.25,s=t||i/100;if(!this.equidistantCache||this.equidistantCache.step!==s||this.equidistantCache.precision!==r){this.equidistantCache={step:s,precision:r,points:[]};let t=0;for(let e=0;e<=i;e+=r){const i=this.getPointOnPath(e),n=this.getPointOnPath(e+r);i&&n&&(t+=this.getLineLength(i.x,i.y,n.x,n.y),t>=s&&(this.equidistantCache.points.push({x:i.x,y:i.y,distance:e}),t-=s))}}}getEquidistantPointOnPath(t,e,i){if(this.buildEquidistantCache(e,i),t<0||t-this.getPathLength()>5e-5)return null;const r=Math.round(t/this.getPathLength()*(this.equidistantCache.points.length-1));return this.equidistantCache.points[r]||null}constructor(t,e,i){super(t,e,i),this.type="textPath",this.textWidth=0,this.textHeight=0,this.pathLength=-1,this.glyphInfo=null,this.letterSpacingCache=[],this.measuresCache=new Map([["",0]]);const r=this.getHrefAttribute().getDefinition();this.text=this.getTextFromNode(),this.dataArray=this.parsePathData(r)}},image:class extends At{async loadImage(t){try{const e=await this.document.createImage(t);this.image=e}catch(e){console.error('Error while loading image "'.concat(t,'":'),e)}this.loaded=!0}async loadSvg(t){const e=zt.exec(t);if(e){const t=e[5];t&&("base64"===e[4]?this.image=atob(t):this.image=decodeURIComponent(t))}else try{const e=await this.document.fetch(t),i=await e.text();this.image=i}catch(e){console.error('Error while loading image "'.concat(t,'":'),e)}this.loaded=!0}renderChildren(t){const{document:e,image:i,loaded:r}=this,s=this.getAttribute("x").getPixels("x"),n=this.getAttribute("y").getPixels("y"),a=this.getStyle("width").getPixels("x"),o=this.getStyle("height").getPixels("y");if(r&&i&&a&&o){if(t.save(),t.translate(s,n),"string"==typeof i){const r=e.canvg.forkString(t,i,{ignoreMouse:!0,ignoreAnimation:!0,ignoreDimensions:!0,ignoreClear:!0,offsetX:0,offsetY:0,scaleWidth:a,scaleHeight:o}),{documentElement:s}=r.document;s&&(s.parent=this),r.render()}else e.setViewBox({ctx:t,aspectRatio:this.getAttribute("preserveAspectRatio").getString(),width:a,desiredWidth:i.width,height:o,desiredHeight:i.height}),this.loaded&&("complete"in i&&!i.complete||t.drawImage(i,0,0));t.restore()}}getBoundingBox(){const t=this.getAttribute("x").getPixels("x"),e=this.getAttribute("y").getPixels("y"),i=this.getStyle("width").getPixels("x"),r=this.getStyle("height").getPixels("y");return new St(t,e,t+i,e+r)}constructor(t,e,i){super(t,e,i),this.type="image",this.loaded=!1;const r=this.getHrefAttribute().getString();if(!r)return;const s=r.endsWith(".svg")||/^\s*data:image\/svg\+xml/i.test(r);t.images.push(this),s?this.loadSvg(r):this.loadImage(r)}},g:kt,symbol:class extends At{render(t){}constructor(...t){super(...t),this.type="symbol"}},style:Ut,use:class extends At{setContext(t){super.setContext(t);const e=this.getAttribute("x"),i=this.getAttribute("y");e.hasValue()&&t.translate(e.getPixels("x"),0),i.hasValue()&&t.translate(0,i.getPixels("y"))}path(t){const{element:e}=this;e&&e.path(t)}renderChildren(t){const{document:e,element:i}=this;if(i){let r=i;if("symbol"===i.type&&(r=new Mt(e),r.attributes.viewBox=new rt(e,"viewBox",i.getAttribute("viewBox").getString()),r.attributes.preserveAspectRatio=new rt(e,"preserveAspectRatio",i.getAttribute("preserveAspectRatio").getString()),r.attributes.overflow=new rt(e,"overflow",i.getAttribute("overflow").getString()),r.children=i.children,i.styles.opacity=new rt(e,"opacity",this.calculateOpacity())),"svg"===r.type){const t=this.getStyle("width",!1,!0),i=this.getStyle("height",!1,!0);t.hasValue()&&(r.attributes.width=new rt(e,"width",t.getString())),i.hasValue()&&(r.attributes.height=new rt(e,"height",i.getString()))}const s=r.parent;r.parent=this,r.render(t),r.parent=s}}getBoundingBox(t){const{element:e}=this;return e?e.getBoundingBox(t):null}elementTransform(){const{document:t,element:e}=this;return e?yt.fromElement(t,e):null}get element(){return this.cachedElement||(this.cachedElement=this.getHrefAttribute().getDefinition()),this.cachedElement}constructor(...t){super(...t),this.type="use"}},mask:Qt,clipPath:class extends mt{apply(t){const{document:e}=this,i=Reflect.getPrototypeOf(t),{beginPath:r,closePath:s}=t;i&&(i.beginPath=jt,i.closePath=jt),Reflect.apply(r,t,[]),this.children.forEach((r=>{if(!("path"in r))return;let n="elementTransform"in r?r.elementTransform():null;n||(n=yt.fromElement(e,r)),n&&n.apply(t),r.path(t),i&&(i.closePath=s),n&&n.unapply(t)})),Reflect.apply(s,t,[]),t.clip(),i&&(i.beginPath=r,i.closePath=s)}render(t){}constructor(...t){super(...t),this.type="clipPath"}},filter:Gt,feDropShadow:class extends mt{apply(t,e,i,r,s){}constructor(t,e,i){super(t,e,i),this.type="feDropShadow",this.addStylesFromStyleDefinition()}},feMorphology:class extends mt{apply(t,e,i,r,s){}constructor(...t){super(...t),this.type="feMorphology"}},feComposite:class extends mt{apply(t,e,i,r,s){}constructor(...t){super(...t),this.type="feComposite"}},feColorMatrix:Wt,feGaussianBlur:class extends mt{apply(t,e,i,r,s){const{document:n,blurRadius:a}=this,o=n.window?n.window.document.body:null,h=t.canvas;h.id=n.getUniqueId(),o&&(h.style.display="none",o.appendChild(h)),V(h,e,i,r,s,a),o&&o.removeChild(h)}constructor(t,e,i){super(t,e,i),this.type="feGaussianBlur",this.blurRadius=Math.floor(this.getAttribute("stdDeviation").getNumber()),this.extraFilterDistance=this.blurRadius}},title:class extends mt{constructor(...t){super(...t),this.type="title"}},desc:class extends mt{constructor(...t){super(...t),this.type="desc"}}};class Zt{bindCreateImage(t,e){return"boolean"==typeof e?(i,r)=>t(i,"boolean"==typeof r?r:e):t}get window(){return this.screen.window}get fetch(){return this.screen.fetch}get ctx(){return this.screen.ctx}get emSize(){const{emSizeStack:t}=this;return t[t.length-1]||12}set emSize(t){const{emSizeStack:e}=this;e.push(t)}popEmSize(){const{emSizeStack:t}=this;t.pop()}getUniqueId(){return"canvg".concat(++this.uniqueId)}isImagesLoaded(){return this.images.every((t=>t.loaded))}isFontsLoaded(){return this.fonts.every((t=>t.loaded))}createDocumentElement(t){const e=this.createElement(t.documentElement);return e.root=!0,e.addStylesFromStyleDefinition(),this.documentElement=e,e}createElement(t){const e=t.nodeName.replace(/^[^:]+:/,""),i=Zt.elementTypes[e];return i?new i(this,t):new xt(this,t)}createTextNode(t){return new Ot(this,t)}setViewBox(t){this.screen.setViewBox({document:this,...t})}constructor(t,{rootEmSize:e=12,emSize:i=12,createCanvas:r=Zt.createCanvas,createImage:s=Zt.createImage,anonymousCrossOrigin:n}={}){this.canvg=t,this.definitions={},this.styles={},this.stylesSpecificity={},this.images=[],this.fonts=[],this.emSizeStack=[],this.uniqueId=0,this.screen=t.screen,this.rootEmSize=e,this.emSize=i,this.createCanvas=r,this.createImage=this.bindCreateImage(s,n),this.screen.wait((()=>this.isImagesLoaded())),this.screen.wait((()=>this.isFontsLoaded()))}}Zt.createCanvas=function(t,e){const i=document.createElement("canvas");return i.width=t,i.height=e,i},Zt.createImage=async function(t){let e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const i=document.createElement("img");return e&&(i.crossOrigin="Anonymous"),new Promise(((e,r)=>{i.onload=()=>{e(i)},i.onerror=(t,e,i,s,n)=>{r(n)},i.src=t}))},Zt.elementTypes=$t;class Kt{static async from(t,e){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const r=new dt(i),s=await r.parse(e);return new Kt(t,s,i)}static fromString(t,e){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const r=new dt(i).parseFromString(e);return new Kt(t,r,i)}fork(t,e){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return Kt.from(t,e,{...this.options,...i})}forkString(t,e){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return Kt.fromString(t,e,{...this.options,...i})}ready(){return this.screen.ready()}isReady(){return this.screen.isReady()}async render(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.start({enableRedraw:!0,ignoreAnimation:!0,ignoreMouse:!0,...t}),await this.ready(),this.stop()}start(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{documentElement:e,screen:i,options:r}=this;i.start(e,{enableRedraw:!0,...r,...t})}stop(){this.screen.stop()}resize(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t,i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];this.documentElement.resize(t,e,i)}constructor(t,e,i={}){this.parser=new dt(i),this.screen=new ct(t,i),this.options=i;const r=new Zt(this,i),s=r.createDocumentElement(e);this.document=r,this.documentElement=s}}function Jt(t){if("png"==t)return!0;try{return ClipboardItem.supports("svg"==t?"image/svg+xml":"image/jpeg")}catch(t){return console.error(t," - error = no support for PNG"),!1}}var te=function(t,e,i,r){return new(i||(i=Promise))((function(s,n){function a(t){try{h(r.next(t))}catch(t){n(t)}}function o(t){try{h(r.throw(t))}catch(t){n(t)}}function h(t){var e;t.done?s(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(a,o)}h((r=r.apply(t,e||[])).next())}))};const ee={qr:document.querySelector("#qr"),content:document.querySelector("#content"),toggle:{div:document.querySelector("#toggle"),svg:document.querySelector("#toggle-svg"),png:document.querySelector("#toggle-png"),jpg:document.querySelector("#toggle-jpg")},export:{div:document.querySelector("#export"),copy:document.querySelector("#copy"),download:document.querySelector("#download")}},ie=()=>{let t;return t=ee.toggle.svg.checked?"svg":ee.toggle.png.checked?"png":"jpeg",t},re=()=>te(void 0,void 0,void 0,(function*(){var t,e;let i,r=ie();return i="svg"==r?new Blob([ee.qr.outerHTML],{type:"image/svg+xml"}):yield function(t,e,i,r){return s=this,n=void 0,o=function*(){let s=new OffscreenCanvas(i,r);return yield(yield Kt.from(s.getContext("2d"),t.outerHTML,k.offscreen())).render(),yield s.convertToBlob({type:"image/"+e})},new((a=void 0)||(a=Promise))((function(t,e){function i(t){try{h(o.next(t))}catch(t){e(t)}}function r(t){try{h(o.throw(t))}catch(t){e(t)}}function h(e){var s;e.done?t(e.value):(s=e.value,s instanceof a?s:new a((function(t){t(s)}))).then(i,r)}h((o=o.apply(s,n||[])).next())}));var s,n,a,o}(ee.qr,r,null!==(t=yield s("size"))&&void 0!==t?t:2e3,null!==(e=yield s("size"))&&void 0!==e?e:2e3),i})),se=()=>te(void 0,void 0,void 0,(function*(){let t=ie(),e=yield re(),i=URL.createObjectURL(e),r=document.createElement("a");r.href=i,r.download="qr."+("jpeg"==t?"jpg":t),r.click(),URL.revokeObjectURL(i)})),ne=()=>te(void 0,void 0,void 0,(function*(){let t=yield re(),e={};e[t.type]=t,yield navigator.clipboard.write([new ClipboardItem(e)])})),ae=()=>te(void 0,void 0,void 0,(function*(){let{state:t}=yield navigator.permissions.query({name:"clipboard-write"});if("granted"==t)switch(ie()){case"png":return yield ne();case"svg":{let t=yield s("copy-svg");return!Jt("svg")||t&&"svg"!=t?"png"==t?(ee.toggle.png.checked=!0,n("export-type","png"),yield ne()):yield navigator.clipboard.writeText(ee.qr.outerHTML):yield ne()}case"jpeg":{let t=yield s("copy-jpg");return!Jt("jpeg")||t&&"jpg"!=t?t&&"png"!=t?yield navigator.clipboard.writeText(yield(yield re()).text()):(ee.toggle.png.checked=!0,n("export-type","png"),yield ne()):yield ne()}default:throw new Error("Wrong type")}else ee.export.copy.disabled=!0})),oe=()=>{n("content",ee.content.value);let t=QRCode(ee.content.value);t.id="qr",t.removeAttribute("width"),t.removeAttribute("height"),document.querySelector("#qr").outerHTML=t.outerHTML};window.onload=()=>te(void 0,void 0,void 0,(function*(){var t;window.onkeydown=t=>{if(t.ctrlKey||t.metaKey)switch(t.key){case"v":t.preventDefault(),n("export-type","svg"),ee.toggle.svg.checked=!0;break;case"p":t.preventDefault(),n("export-type","png"),ee.toggle.png.checked=!0;break;case"j":t.preventDefault(),n("export-type","jpeg"),ee.toggle.jpg.checked=!0;break;case"s":case"d":t.preventDefault(),se();break;case"c":t.preventDefault(),ae();break;case",":t.preventDefault(),window.location.href="/settings.html"}};let e=yield s("content");switch(ee.content.value=null!=e?e:window.location.origin,oe(),ee.content.onkeyup=ee.content.onpaste=()=>oe(),ee.content.disabled=!1,null!==(t=yield s("export-type"))&&void 0!==t?t:"png"){case"jpeg":ee.toggle.jpg.checked=!0;break;case"svg":ee.toggle.svg.checked=!0;break;case"png":ee.toggle.png.checked=!0}ee.toggle.div.onclick=()=>n("export-type",ie());for(let t of document.querySelectorAll("input[name=toggle-state]"))t.disabled=!1;ee.export.copy.onclick=ae,ee.export.download.onclick=se;for(let t of ee.export.div.getElementsByTagName("button"))t.disabled=!1;window.onclick=t=>{"button"!=t.target.tagName.toLowerCase()&&"input"!=t.target.tagName.toLowerCase()&&ee.content.select()}}))})()})(); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,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SyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxLQUNsd0NDLEVBQVcsQ0FBQyxFQUFHLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUks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LE9BQU9QLEtBQUtydEIsUUFBVXF0QixHQUMxQnZCLEdBQUk4QixPQUFPakIsU0FBUzNzQixRQUFVMnNCLEdBRTlCLElBQUssSUFBSTF6QyxLQUFLNnlDLEdBQUk4QixPQUFPNTZCLElBQUl5VSxxQkFBcUIsVUFDOUN4dUIsRUFBRTQwQyxVQUFXLEVBR2pCbDFDLE9BQU9xbkIsUUFBV2htQixJQUN5QyxVQUFsREEsRUFBRTYwQyxPQUF1QkMsUUFBUTV6QyxlQUFnRixTQUFsRGxCLEVBQUU2MEMsT0FBdUJDLFFBQVE1ekMsZUFDakc0d0MsR0FBSWlDLFFBQVFnQixRQUNoQixDQUVSLEciLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9wZXJmb3JtYW5jZS1ub3cvbGliL3BlcmZvcm1hbmNlLW5vdy5qcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9yYWYvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9ub2RlX21vZHVsZXMvcmdiY29sb3IvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvd2VicGFjay9ydW50aW1lL2dsb2JhbCIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9pZGIta2V5dmFsL2Rpc3QvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9ub2RlX21vZHVsZXMvc3ZnLXBhdGhkYXRhL2xpYi9TVkdQYXRoRGF0YS5tb2R1bGUuanMiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9ub2RlX21vZHVsZXMvc3RhY2tibHVyLWNhbnZhcy9kaXN0L3N0YWNrYmx1ci1lcy5qcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9jYW52Zy9kaXN0L2luZGV4LmpzIiwid2VicGFjazovL21pa2V5bGFiLXFyLy4vc3JjL2xpYi9jaGVjay1zdXBwb3J0LnRzIiwid2VicGFjazovL21pa2V5bGFiLXFyLy4vc3JjL2FwcC50cyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL3NyYy9saWIvc3ZnLWNvbnZlcnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gR2VuZXJhdGVkIGJ5IENvZmZlZVNjcmlwdCAxLjEyLjJcbihmdW5jdGlvbigpIHtcbiAgdmFyIGdldE5hbm9TZWNvbmRzLCBocnRpbWUsIGxvYWRUaW1lLCBtb2R1bGVMb2FkVGltZSwgbm9kZUxvYWRUaW1lLCB1cFRpbWU7XG5cbiAgaWYgKCh0eXBlb2YgcGVyZm9ybWFuY2UgIT09IFwidW5kZWZpbmVkXCIgJiYgcGVyZm9ybWFuY2UgIT09IG51bGwpICYmIHBlcmZvcm1hbmNlLm5vdykge1xuICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgfTtcbiAgfSBlbHNlIGlmICgodHlwZW9mIHByb2Nlc3MgIT09IFwidW5kZWZpbmVkXCIgJiYgcHJvY2VzcyAhPT0gbnVsbCkgJiYgcHJvY2Vzcy5ocnRpbWUpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIChnZXROYW5vU2Vjb25kcygpIC0gbm9kZUxvYWRUaW1lKSAvIDFlNjtcbiAgICB9O1xuICAgIGhydGltZSA9IHByb2Nlc3MuaHJ0aW1lO1xuICAgIGdldE5hbm9TZWNvbmRzID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgaHI7XG4gICAgICBociA9IGhydGltZSgpO1xuICAgICAgcmV0dXJuIGhyWzBdICogMWU5ICsgaHJbMV07XG4gICAgfTtcbiAgICBtb2R1bGVMb2FkVGltZSA9IGdldE5hbm9TZWNvbmRzKCk7XG4gICAgdXBUaW1lID0gcHJvY2Vzcy51cHRpbWUoKSAqIDFlOTtcbiAgICBub2RlTG9hZFRpbWUgPSBtb2R1bGVMb2FkVGltZSAtIHVwVGltZTtcbiAgfSBlbHNlIGlmIChEYXRlLm5vdykge1xuICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gRGF0ZS5ub3coKSAtIGxvYWRUaW1lO1xuICAgIH07XG4gICAgbG9hZFRpbWUgPSBEYXRlLm5vdygpO1xuICB9IGVsc2Uge1xuICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCkgLSBsb2FkVGltZTtcbiAgICB9O1xuICAgIGxvYWRUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gIH1cblxufSkuY2FsbCh0aGlzKTtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGVyZm9ybWFuY2Utbm93LmpzLm1hcFxuIiwidmFyIG5vdyA9IHJlcXVpcmUoJ3BlcmZvcm1hbmNlLW5vdycpXG4gICwgcm9vdCA9IHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnID8gZ2xvYmFsIDogd2luZG93XG4gICwgdmVuZG9ycyA9IFsnbW96JywgJ3dlYmtpdCddXG4gICwgc3VmZml4ID0gJ0FuaW1hdGlvbkZyYW1lJ1xuICAsIHJhZiA9IHJvb3RbJ3JlcXVlc3QnICsgc3VmZml4XVxuICAsIGNhZiA9IHJvb3RbJ2NhbmNlbCcgKyBzdWZmaXhdIHx8IHJvb3RbJ2NhbmNlbFJlcXVlc3QnICsgc3VmZml4XVxuXG5mb3IodmFyIGkgPSAwOyAhcmFmICYmIGkgPCB2ZW5kb3JzLmxlbmd0aDsgaSsrKSB7XG4gIHJhZiA9IHJvb3RbdmVuZG9yc1tpXSArICdSZXF1ZXN0JyArIHN1ZmZpeF1cbiAgY2FmID0gcm9vdFt2ZW5kb3JzW2ldICsgJ0NhbmNlbCcgKyBzdWZmaXhdXG4gICAgICB8fCByb290W3ZlbmRvcnNbaV0gKyAnQ2FuY2VsUmVxdWVzdCcgKyBzdWZmaXhdXG59XG5cbi8vIFNvbWUgdmVyc2lvbnMgb2YgRkYgaGF2ZSByQUYgYnV0IG5vdCBjQUZcbmlmKCFyYWYgfHwgIWNhZikge1xuICB2YXIgbGFzdCA9IDBcbiAgICAsIGlkID0gMFxuICAgICwgcXVldWUgPSBbXVxuICAgICwgZnJhbWVEdXJhdGlvbiA9IDEwMDAgLyA2MFxuXG4gIHJhZiA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgaWYocXVldWUubGVuZ3RoID09PSAwKSB7XG4gICAgICB2YXIgX25vdyA9IG5vdygpXG4gICAgICAgICwgbmV4dCA9IE1hdGgubWF4KDAsIGZyYW1lRHVyYXRpb24gLSAoX25vdyAtIGxhc3QpKVxuICAgICAgbGFzdCA9IG5leHQgKyBfbm93XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgY3AgPSBxdWV1ZS5zbGljZSgwKVxuICAgICAgICAvLyBDbGVhciBxdWV1ZSBoZXJlIHRvIHByZXZlbnRcbiAgICAgICAgLy8gY2FsbGJhY2tzIGZyb20gYXBwZW5kaW5nIGxpc3RlbmVyc1xuICAgICAgICAvLyB0byB0aGUgY3VycmVudCBmcmFtZSdzIHF1ZXVlXG4gICAgICAgIHF1ZXVlLmxlbmd0aCA9IDBcbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGNwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYoIWNwW2ldLmNhbmNlbGxlZCkge1xuICAgICAgICAgICAgdHJ5e1xuICAgICAgICAgICAgICBjcFtpXS5jYWxsYmFjayhsYXN0KVxuICAgICAgICAgICAgfSBjYXRjaChlKSB7XG4gICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IHRocm93IGUgfSwgMClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sIE1hdGgucm91bmQobmV4dCkpXG4gICAgfVxuICAgIHF1ZXVlLnB1c2goe1xuICAgICAgaGFuZGxlOiArK2lkLFxuICAgICAgY2FsbGJhY2s6IGNhbGxiYWNrLFxuICAgICAgY2FuY2VsbGVkOiBmYWxzZVxuICAgIH0pXG4gICAgcmV0dXJuIGlkXG4gIH1cblxuICBjYWYgPSBmdW5jdGlvbihoYW5kbGUpIHtcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgcXVldWUubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmKHF1ZXVlW2ldLmhhbmRsZSA9PT0gaGFuZGxlKSB7XG4gICAgICAgIHF1ZXVlW2ldLmNhbmNlbGxlZCA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihmbikge1xuICAvLyBXcmFwIGluIGEgbmV3IGZ1bmN0aW9uIHRvIHByZXZlbnRcbiAgLy8gYGNhbmNlbGAgcG90ZW50aWFsbHkgYmVpbmcgYXNzaWduZWRcbiAgLy8gdG8gdGhlIG5hdGl2ZSByQUYgZnVuY3Rpb25cbiAgcmV0dXJuIHJhZi5jYWxsKHJvb3QsIGZuKVxufVxubW9kdWxlLmV4cG9ydHMuY2FuY2VsID0gZnVuY3Rpb24oKSB7XG4gIGNhZi5hcHBseShyb290LCBhcmd1bWVudHMpXG59XG5tb2R1bGUuZXhwb3J0cy5wb2x5ZmlsbCA9IGZ1bmN0aW9uKG9iamVjdCkge1xuICBpZiAoIW9iamVjdCkge1xuICAgIG9iamVjdCA9IHJvb3Q7XG4gIH1cbiAgb2JqZWN0LnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IHJhZlxuICBvYmplY3QuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSBjYWZcbn1cbiIsIi8qXG5cdEJhc2VkIG9uIHJnYmNvbG9yLmpzIGJ5IFN0b3lhbiBTdGVmYW5vdiA8c3N0b29AZ21haWwuY29tPlxuXHRodHRwOi8vd3d3LnBocGllZC5jb20vcmdiLWNvbG9yLXBhcnNlci1pbi1qYXZhc2NyaXB0L1xuKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb2xvcl9zdHJpbmcpIHtcbiAgICB0aGlzLm9rID0gZmFsc2U7XG4gICAgdGhpcy5hbHBoYSA9IDEuMDtcblxuICAgIC8vIHN0cmlwIGFueSBsZWFkaW5nICNcbiAgICBpZiAoY29sb3Jfc3RyaW5nLmNoYXJBdCgwKSA9PSAnIycpIHsgLy8gcmVtb3ZlICMgaWYgYW55XG4gICAgICAgIGNvbG9yX3N0cmluZyA9IGNvbG9yX3N0cmluZy5zdWJzdHIoMSw2KTtcbiAgICB9XG5cbiAgICBjb2xvcl9zdHJpbmcgPSBjb2xvcl9zdHJpbmcucmVwbGFjZSgvIC9nLCcnKTtcbiAgICBjb2xvcl9zdHJpbmcgPSBjb2xvcl9zdHJpbmcudG9Mb3dlckNhc2UoKTtcblxuICAgIC8vIGJlZm9yZSBnZXR0aW5nIGludG8gcmVnZXhwcywgdHJ5IHNpbXBsZSBtYXRjaGVzXG4gICAgLy8gYW5kIG92ZXJ3cml0ZSB0aGUgaW5wdXRcbiAgICB2YXIgc2ltcGxlX2NvbG9ycyA9IHtcbiAgICAgICAgYWxpY2VibHVlOiAnZjBmOGZmJyxcbiAgICAgICAgYW50aXF1ZXdoaXRlOiAnZmFlYmQ3JyxcbiAgICAgICAgYXF1YTogJzAwZmZmZicsXG4gICAgICAgIGFxdWFtYXJpbmU6ICc3ZmZmZDQnLFxuICAgICAgICBhenVyZTogJ2YwZmZmZicsXG4gICAgICAgIGJlaWdlOiAnZjVmNWRjJyxcbiAgICAgICAgYmlzcXVlOiAnZmZlNGM0JyxcbiAgICAgICAgYmxhY2s6ICcwMDAwMDAnLFxuICAgICAgICBibGFuY2hlZGFsbW9uZDogJ2ZmZWJjZCcsXG4gICAgICAgIGJsdWU6ICcwMDAwZmYnLFxuICAgICAgICBibHVldmlvbGV0OiAnOGEyYmUyJyxcbiAgICAgICAgYnJvd246ICdhNTJhMmEnLFxuICAgICAgICBidXJseXdvb2Q6ICdkZWI4ODcnLFxuICAgICAgICBjYWRldGJsdWU6ICc1ZjllYTAnLFxuICAgICAgICBjaGFydHJldXNlOiAnN2ZmZjAwJyxcbiAgICAgICAgY2hvY29sYXRlOiAnZDI2OTFlJyxcbiAgICAgICAgY29yYWw6ICdmZjdmNTAnLFxuICAgICAgICBjb3JuZmxvd2VyYmx1ZTogJzY0OTVlZCcsXG4gICAgICAgIGNvcm5zaWxrOiAnZmZmOGRjJyxcbiAgICAgICAgY3JpbXNvbjogJ2RjMTQzYycsXG4gICAgICAgIGN5YW46ICcwMGZmZmYnLFxuICAgICAgICBkYXJrYmx1ZTogJzAwMDA4YicsXG4gICAgICAgIGRhcmtjeWFuOiAnMDA4YjhiJyxcbiAgICAgICAgZGFya2dvbGRlbnJvZDogJ2I4ODYwYicsXG4gICAgICAgIGRhcmtncmF5OiAnYTlhOWE5JyxcbiAgICAgICAgZGFya2dyZWVuOiAnMDA2NDAwJyxcbiAgICAgICAgZGFya2toYWtpOiAnYmRiNzZiJyxcbiAgICAgICAgZGFya21hZ2VudGE6ICc4YjAwOGInLFxuICAgICAgICBkYXJrb2xpdmVncmVlbjogJzU1NmIyZicsXG4gICAgICAgIGRhcmtvcmFuZ2U6ICdmZjhjMDAnLFxuICAgICAgICBkYXJrb3JjaGlkOiAnOTkzMmNjJyxcbiAgICAgICAgZGFya3JlZDogJzhiMDAwMCcsXG4gICAgICAgIGRhcmtzYWxtb246ICdlOTk2N2EnLFxuICAgICAgICBkYXJrc2VhZ3JlZW46ICc4ZmJjOGYnLFxuICAgICAgICBkYXJrc2xhdGVibHVlOiAnNDgzZDhiJyxcbiAgICAgICAgZGFya3NsYXRlZ3JheTogJzJmNGY0ZicsXG4gICAgICAgIGRhcmt0dXJxdW9pc2U6ICcwMGNlZDEnLFxuICAgICAgICBkYXJrdmlvbGV0OiAnOTQwMGQzJyxcbiAgICAgICAgZGVlcHBpbms6ICdmZjE0OTMnLFxuICAgICAgICBkZWVwc2t5Ymx1ZTogJzAwYmZmZicsXG4gICAgICAgIGRpbWdyYXk6ICc2OTY5NjknLFxuICAgICAgICBkb2RnZXJibHVlOiAnMWU5MGZmJyxcbiAgICAgICAgZmVsZHNwYXI6ICdkMTkyNzUnLFxuICAgICAgICBmaXJlYnJpY2s6ICdiMjIyMjInLFxuICAgICAgICBmbG9yYWx3aGl0ZTogJ2ZmZmFmMCcsXG4gICAgICAgIGZvcmVzdGdyZWVuOiAnMjI4YjIyJyxcbiAgICAgICAgZnVjaHNpYTogJ2ZmMDBmZicsXG4gICAgICAgIGdhaW5zYm9ybzogJ2RjZGNkYycsXG4gICAgICAgIGdob3N0d2hpdGU6ICdmOGY4ZmYnLFxuICAgICAgICBnb2xkOiAnZmZkNzAwJyxcbiAgICAgICAgZ29sZGVucm9kOiAnZGFhNTIwJyxcbiAgICAgICAgZ3JheTogJzgwODA4MCcsXG4gICAgICAgIGdyZWVuOiAnMDA4MDAwJyxcbiAgICAgICAgZ3JlZW55ZWxsb3c6ICdhZGZmMmYnLFxuICAgICAgICBob25leWRldzogJ2YwZmZmMCcsXG4gICAgICAgIGhvdHBpbms6ICdmZjY5YjQnLFxuICAgICAgICBpbmRpYW5yZWQgOiAnY2Q1YzVjJyxcbiAgICAgICAgaW5kaWdvIDogJzRiMDA4MicsXG4gICAgICAgIGl2b3J5OiAnZmZmZmYwJyxcbiAgICAgICAga2hha2k6ICdmMGU2OGMnLFxuICAgICAgICBsYXZlbmRlcjogJ2U2ZTZmYScsXG4gICAgICAgIGxhdmVuZGVyYmx1c2g6ICdmZmYwZjUnLFxuICAgICAgICBsYXduZ3JlZW46ICc3Y2ZjMDAnLFxuICAgICAgICBsZW1vbmNoaWZmb246ICdmZmZhY2QnLFxuICAgICAgICBsaWdodGJsdWU6ICdhZGQ4ZTYnLFxuICAgICAgICBsaWdodGNvcmFsOiAnZjA4MDgwJyxcbiAgICAgICAgbGlnaHRjeWFuOiAnZTBmZmZmJyxcbiAgICAgICAgbGlnaHRnb2xkZW5yb2R5ZWxsb3c6ICdmYWZhZDInLFxuICAgICAgICBsaWdodGdyZXk6ICdkM2QzZDMnLFxuICAgICAgICBsaWdodGdyZWVuOiAnOTBlZTkwJyxcbiAgICAgICAgbGlnaHRwaW5rOiAnZmZiNmMxJyxcbiAgICAgICAgbGlnaHRzYWxtb246ICdmZmEwN2EnLFxuICAgICAgICBsaWdodHNlYWdyZWVuOiAnMjBiMmFhJyxcbiAgICAgICAgbGlnaHRza3libHVlOiAnODdjZWZhJyxcbiAgICAgICAgbGlnaHRzbGF0ZWJsdWU6ICc4NDcwZmYnLFxuICAgICAgICBsaWdodHNsYXRlZ3JheTogJzc3ODg5OScsXG4gICAgICAgIGxpZ2h0c3RlZWxibHVlOiAnYjBjNGRlJyxcbiAgICAgICAgbGlnaHR5ZWxsb3c6ICdmZmZmZTAnLFxuICAgICAgICBsaW1lOiAnMDBmZjAwJyxcbiAgICAgICAgbGltZWdyZWVuOiAnMzJjZDMyJyxcbiAgICAgICAgbGluZW46ICdmYWYwZTYnLFxuICAgICAgICBtYWdlbnRhOiAnZmYwMGZmJyxcbiAgICAgICAgbWFyb29uOiAnODAwMDAwJyxcbiAgICAgICAgbWVkaXVtYXF1YW1hcmluZTogJzY2Y2RhYScsXG4gICAgICAgIG1lZGl1bWJsdWU6ICcwMDAwY2QnLFxuICAgICAgICBtZWRpdW1vcmNoaWQ6ICdiYTU1ZDMnLFxuICAgICAgICBtZWRpdW1wdXJwbGU6ICc5MzcwZDgnLFxuICAgICAgICBtZWRpdW1zZWFncmVlbjogJzNjYjM3MScsXG4gICAgICAgIG1lZGl1bXNsYXRlYmx1ZTogJzdiNjhlZScsXG4gICAgICAgIG1lZGl1bXNwcmluZ2dyZWVuOiAnMDBmYTlhJyxcbiAgICAgICAgbWVkaXVtdHVycXVvaXNlOiAnNDhkMWNjJyxcbiAgICAgICAgbWVkaXVtdmlvbGV0cmVkOiAnYzcxNTg1JyxcbiAgICAgICAgbWlkbmlnaHRibHVlOiAnMTkxOTcwJyxcbiAgICAgICAgbWludGNyZWFtOiAnZjVmZmZhJyxcbiAgICAgICAgbWlzdHlyb3NlOiAnZmZlNGUxJyxcbiAgICAgICAgbW9jY2FzaW46ICdmZmU0YjUnLFxuICAgICAgICBuYXZham93aGl0ZTogJ2ZmZGVhZCcsXG4gICAgICAgIG5hdnk6ICcwMDAwODAnLFxuICAgICAgICBvbGRsYWNlOiAnZmRmNWU2JyxcbiAgICAgICAgb2xpdmU6ICc4MDgwMDAnLFxuICAgICAgICBvbGl2ZWRyYWI6ICc2YjhlMjMnLFxuICAgICAgICBvcmFuZ2U6ICdmZmE1MDAnLFxuICAgICAgICBvcmFuZ2VyZWQ6ICdmZjQ1MDAnLFxuICAgICAgICBvcmNoaWQ6ICdkYTcwZDYnLFxuICAgICAgICBwYWxlZ29sZGVucm9kOiAnZWVlOGFhJyxcbiAgICAgICAgcGFsZWdyZWVuOiAnOThmYjk4JyxcbiAgICAgICAgcGFsZXR1cnF1b2lzZTogJ2FmZWVlZScsXG4gICAgICAgIHBhbGV2aW9sZXRyZWQ6ICdkODcwOTMnLFxuICAgICAgICBwYXBheWF3aGlwOiAnZmZlZmQ1JyxcbiAgICAgICAgcGVhY2hwdWZmOiAnZmZkYWI5JyxcbiAgICAgICAgcGVydTogJ2NkODUzZicsXG4gICAgICAgIHBpbms6ICdmZmMwY2InLFxuICAgICAgICBwbHVtOiAnZGRhMGRkJyxcbiAgICAgICAgcG93ZGVyYmx1ZTogJ2IwZTBlNicsXG4gICAgICAgIHB1cnBsZTogJzgwMDA4MCcsXG4gICAgICAgIHJlYmVjY2FwdXJwbGU6ICc2NjMzOTknLFxuICAgICAgICByZWQ6ICdmZjAwMDAnLFxuICAgICAgICByb3N5YnJvd246ICdiYzhmOGYnLFxuICAgICAgICByb3lhbGJsdWU6ICc0MTY5ZTEnLFxuICAgICAgICBzYWRkbGVicm93bjogJzhiNDUxMycsXG4gICAgICAgIHNhbG1vbjogJ2ZhODA3MicsXG4gICAgICAgIHNhbmR5YnJvd246ICdmNGE0NjAnLFxuICAgICAgICBzZWFncmVlbjogJzJlOGI1NycsXG4gICAgICAgIHNlYXNoZWxsOiAnZmZmNWVlJyxcbiAgICAgICAgc2llbm5hOiAnYTA1MjJkJyxcbiAgICAgICAgc2lsdmVyOiAnYzBjMGMwJyxcbiAgICAgICAgc2t5Ymx1ZTogJzg3Y2VlYicsXG4gICAgICAgIHNsYXRlYmx1ZTogJzZhNWFjZCcsXG4gICAgICAgIHNsYXRlZ3JheTogJzcwODA5MCcsXG4gICAgICAgIHNub3c6ICdmZmZhZmEnLFxuICAgICAgICBzcHJpbmdncmVlbjogJzAwZmY3ZicsXG4gICAgICAgIHN0ZWVsYmx1ZTogJzQ2ODJiNCcsXG4gICAgICAgIHRhbjogJ2QyYjQ4YycsXG4gICAgICAgIHRlYWw6ICcwMDgwODAnLFxuICAgICAgICB0aGlzdGxlOiAnZDhiZmQ4JyxcbiAgICAgICAgdG9tYXRvOiAnZmY2MzQ3JyxcbiAgICAgICAgdHVycXVvaXNlOiAnNDBlMGQwJyxcbiAgICAgICAgdmlvbGV0OiAnZWU4MmVlJyxcbiAgICAgICAgdmlvbGV0cmVkOiAnZDAyMDkwJyxcbiAgICAgICAgd2hlYXQ6ICdmNWRlYjMnLFxuICAgICAgICB3aGl0ZTogJ2ZmZmZmZicsXG4gICAgICAgIHdoaXRlc21va2U6ICdmNWY1ZjUnLFxuICAgICAgICB5ZWxsb3c6ICdmZmZmMDAnLFxuICAgICAgICB5ZWxsb3dncmVlbjogJzlhY2QzMidcbiAgICB9O1xuICAgIGNvbG9yX3N0cmluZyA9IHNpbXBsZV9jb2xvcnNbY29sb3Jfc3RyaW5nXSB8fCBjb2xvcl9zdHJpbmc7XG4gICAgLy8gZW1kIG9mIHNpbXBsZSB0eXBlLWluIGNvbG9yc1xuXG4gICAgLy8gYXJyYXkgb2YgY29sb3IgZGVmaW5pdGlvbiBvYmplY3RzXG4gICAgdmFyIGNvbG9yX2RlZnMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlOiAvXnJnYmFcXCgoXFxkezEsM30pLFxccyooXFxkezEsM30pLFxccyooXFxkezEsM30pLFxccyooKD86XFxkP1xcLik/XFxkKVxcKSQvLFxuICAgICAgICAgICAgZXhhbXBsZTogWydyZ2JhKDEyMywgMjM0LCA0NSwgMC44KScsICdyZ2JhKDI1NSwyMzQsMjQ1LDEuMCknXSxcbiAgICAgICAgICAgIHByb2Nlc3M6IGZ1bmN0aW9uIChiaXRzKXtcbiAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICBwYXJzZUludChiaXRzWzFdKSxcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VJbnQoYml0c1syXSksXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KGJpdHNbM10pLFxuICAgICAgICAgICAgICAgICAgICBwYXJzZUZsb2F0KGJpdHNbNF0pXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcmU6IC9ecmdiXFwoKFxcZHsxLDN9KSxcXHMqKFxcZHsxLDN9KSxcXHMqKFxcZHsxLDN9KVxcKSQvLFxuICAgICAgICAgICAgZXhhbXBsZTogWydyZ2IoMTIzLCAyMzQsIDQ1KScsICdyZ2IoMjU1LDIzNCwyNDUpJ10sXG4gICAgICAgICAgICBwcm9jZXNzOiBmdW5jdGlvbiAoYml0cyl7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VJbnQoYml0c1sxXSksXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KGJpdHNbMl0pLFxuICAgICAgICAgICAgICAgICAgICBwYXJzZUludChiaXRzWzNdKVxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlOiAvXihbMC05YS1mQS1GXXsyfSkoWzAtOWEtZkEtRl17Mn0pKFswLTlhLWZBLUZdezJ9KSQvLFxuICAgICAgICAgICAgZXhhbXBsZTogWycjMDBmZjAwJywgJzMzNjY5OSddLFxuICAgICAgICAgICAgcHJvY2VzczogZnVuY3Rpb24gKGJpdHMpe1xuICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KGJpdHNbMV0sIDE2KSxcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VJbnQoYml0c1syXSwgMTYpLFxuICAgICAgICAgICAgICAgICAgICBwYXJzZUludChiaXRzWzNdLCAxNilcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICByZTogL14oWzAtOWEtZkEtRl17MX0pKFswLTlhLWZBLUZdezF9KShbMC05YS1mQS1GXXsxfSkkLyxcbiAgICAgICAgICAgIGV4YW1wbGU6IFsnI2ZiMCcsICdmMGYnXSxcbiAgICAgICAgICAgIHByb2Nlc3M6IGZ1bmN0aW9uIChiaXRzKXtcbiAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICBwYXJzZUludChiaXRzWzFdICsgYml0c1sxXSwgMTYpLFxuICAgICAgICAgICAgICAgICAgICBwYXJzZUludChiaXRzWzJdICsgYml0c1syXSwgMTYpLFxuICAgICAgICAgICAgICAgICAgICBwYXJzZUludChiaXRzWzNdICsgYml0c1szXSwgMTYpXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIF07XG5cbiAgICAvLyBzZWFyY2ggdGhyb3VnaCB0aGUgZGVmaW5pdGlvbnMgdG8gZmluZCBhIG1hdGNoXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2xvcl9kZWZzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciByZSA9IGNvbG9yX2RlZnNbaV0ucmU7XG4gICAgICAgIHZhciBwcm9jZXNzb3IgPSBjb2xvcl9kZWZzW2ldLnByb2Nlc3M7XG4gICAgICAgIHZhciBiaXRzID0gcmUuZXhlYyhjb2xvcl9zdHJpbmcpO1xuICAgICAgICBpZiAoYml0cykge1xuICAgICAgICAgICAgdmFyIGNoYW5uZWxzID0gcHJvY2Vzc29yKGJpdHMpO1xuICAgICAgICAgICAgdGhpcy5yID0gY2hhbm5lbHNbMF07XG4gICAgICAgICAgICB0aGlzLmcgPSBjaGFubmVsc1sxXTtcbiAgICAgICAgICAgIHRoaXMuYiA9IGNoYW5uZWxzWzJdO1xuICAgICAgICAgICAgaWYgKGNoYW5uZWxzLmxlbmd0aCA+IDMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFscGhhID0gY2hhbm5lbHNbM107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm9rID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgLy8gdmFsaWRhdGUvY2xlYW51cCB2YWx1ZXNcbiAgICB0aGlzLnIgPSAodGhpcy5yIDwgMCB8fCBpc05hTih0aGlzLnIpKSA/IDAgOiAoKHRoaXMuciA+IDI1NSkgPyAyNTUgOiB0aGlzLnIpO1xuICAgIHRoaXMuZyA9ICh0aGlzLmcgPCAwIHx8IGlzTmFOKHRoaXMuZykpID8gMCA6ICgodGhpcy5nID4gMjU1KSA/IDI1NSA6IHRoaXMuZyk7XG4gICAgdGhpcy5iID0gKHRoaXMuYiA8IDAgfHwgaXNOYU4odGhpcy5iKSkgPyAwIDogKCh0aGlzLmIgPiAyNTUpID8gMjU1IDogdGhpcy5iKTtcbiAgICB0aGlzLmFscGhhID0gKHRoaXMuYWxwaGEgPCAwKSA/IDAgOiAoKHRoaXMuYWxwaGEgPiAxLjAgfHwgaXNOYU4odGhpcy5hbHBoYSkpID8gMS4wIDogdGhpcy5hbHBoYSk7XG5cbiAgICAvLyBzb21lIGdldHRlcnNcbiAgICB0aGlzLnRvUkdCID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gJ3JnYignICsgdGhpcy5yICsgJywgJyArIHRoaXMuZyArICcsICcgKyB0aGlzLmIgKyAnKSc7XG4gICAgfVxuICAgIHRoaXMudG9SR0JBID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gJ3JnYmEoJyArIHRoaXMuciArICcsICcgKyB0aGlzLmcgKyAnLCAnICsgdGhpcy5iICsgJywgJyArIHRoaXMuYWxwaGEgKyAnKSc7XG4gICAgfVxuICAgIHRoaXMudG9IZXggPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciByID0gdGhpcy5yLnRvU3RyaW5nKDE2KTtcbiAgICAgICAgdmFyIGcgPSB0aGlzLmcudG9TdHJpbmcoMTYpO1xuICAgICAgICB2YXIgYiA9IHRoaXMuYi50b1N0cmluZygxNik7XG4gICAgICAgIGlmIChyLmxlbmd0aCA9PSAxKSByID0gJzAnICsgcjtcbiAgICAgICAgaWYgKGcubGVuZ3RoID09IDEpIGcgPSAnMCcgKyBnO1xuICAgICAgICBpZiAoYi5sZW5ndGggPT0gMSkgYiA9ICcwJyArIGI7XG4gICAgICAgIHJldHVybiAnIycgKyByICsgZyArIGI7XG4gICAgfVxuXG4gICAgLy8gaGVscFxuICAgIHRoaXMuZ2V0SGVscFhNTCA9IGZ1bmN0aW9uICgpIHtcblxuICAgICAgICB2YXIgZXhhbXBsZXMgPSBuZXcgQXJyYXkoKTtcbiAgICAgICAgLy8gYWRkIHJlZ2V4cHNcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2xvcl9kZWZzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgZXhhbXBsZSA9IGNvbG9yX2RlZnNbaV0uZXhhbXBsZTtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZXhhbXBsZS5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIGV4YW1wbGVzW2V4YW1wbGVzLmxlbmd0aF0gPSBleGFtcGxlW2pdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGFkZCB0eXBlLWluIGNvbG9yc1xuICAgICAgICBmb3IgKHZhciBzYyBpbiBzaW1wbGVfY29sb3JzKSB7XG4gICAgICAgICAgICBleGFtcGxlc1tleGFtcGxlcy5sZW5ndGhdID0gc2M7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgeG1sID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndWwnKTtcbiAgICAgICAgeG1sLnNldEF0dHJpYnV0ZSgnaWQnLCAncmdiY29sb3ItZXhhbXBsZXMnKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleGFtcGxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB2YXIgbGlzdF9pdGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGknKTtcbiAgICAgICAgICAgICAgICB2YXIgbGlzdF9jb2xvciA9IG5ldyBSR0JDb2xvcihleGFtcGxlc1tpXSk7XG4gICAgICAgICAgICAgICAgdmFyIGV4YW1wbGVfZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgZXhhbXBsZV9kaXYuc3R5bGUuY3NzVGV4dCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAnbWFyZ2luOiAzcHg7ICdcbiAgICAgICAgICAgICAgICAgICAgICAgICsgJ2JvcmRlcjogMXB4IHNvbGlkIGJsYWNrOyAnXG4gICAgICAgICAgICAgICAgICAgICAgICArICdiYWNrZ3JvdW5kOicgKyBsaXN0X2NvbG9yLnRvSGV4KCkgKyAnOyAnXG4gICAgICAgICAgICAgICAgICAgICAgICArICdjb2xvcjonICsgbGlzdF9jb2xvci50b0hleCgpXG4gICAgICAgICAgICAgICAgO1xuICAgICAgICAgICAgICAgIGV4YW1wbGVfZGl2LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCd0ZXN0JykpO1xuICAgICAgICAgICAgICAgIHZhciBsaXN0X2l0ZW1fdmFsdWUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShcbiAgICAgICAgICAgICAgICAgICAgJyAnICsgZXhhbXBsZXNbaV0gKyAnIC0+ICcgKyBsaXN0X2NvbG9yLnRvUkdCKCkgKyAnIC0+ICcgKyBsaXN0X2NvbG9yLnRvSGV4KClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGxpc3RfaXRlbS5hcHBlbmRDaGlsZChleGFtcGxlX2Rpdik7XG4gICAgICAgICAgICAgICAgbGlzdF9pdGVtLmFwcGVuZENoaWxkKGxpc3RfaXRlbV92YWx1ZSk7XG4gICAgICAgICAgICAgICAgeG1sLmFwcGVuZENoaWxkKGxpc3RfaXRlbSk7XG5cbiAgICAgICAgICAgIH0gY2F0Y2goZSl7fVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB4bWw7XG5cbiAgICB9XG5cbn1cbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmcgPSAoZnVuY3Rpb24oKSB7XG5cdGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCcpIHJldHVybiBnbG9iYWxUaGlzO1xuXHR0cnkge1xuXHRcdHJldHVybiB0aGlzIHx8IG5ldyBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnKSByZXR1cm4gd2luZG93O1xuXHR9XG59KSgpOyIsImZ1bmN0aW9uIHByb21pc2lmeVJlcXVlc3QocmVxdWVzdCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmUgLSBmaWxlIHNpemUgaGFja3NcbiAgICAgICAgcmVxdWVzdC5vbmNvbXBsZXRlID0gcmVxdWVzdC5vbnN1Y2Nlc3MgPSAoKSA9PiByZXNvbHZlKHJlcXVlc3QucmVzdWx0KTtcbiAgICAgICAgLy8gQHRzLWlnbm9yZSAtIGZpbGUgc2l6ZSBoYWNrc1xuICAgICAgICByZXF1ZXN0Lm9uYWJvcnQgPSByZXF1ZXN0Lm9uZXJyb3IgPSAoKSA9PiByZWplY3QocmVxdWVzdC5lcnJvcik7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBjcmVhdGVTdG9yZShkYk5hbWUsIHN0b3JlTmFtZSkge1xuICAgIGNvbnN0IHJlcXVlc3QgPSBpbmRleGVkREIub3BlbihkYk5hbWUpO1xuICAgIHJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gKCkgPT4gcmVxdWVzdC5yZXN1bHQuY3JlYXRlT2JqZWN0U3RvcmUoc3RvcmVOYW1lKTtcbiAgICBjb25zdCBkYnAgPSBwcm9taXNpZnlSZXF1ZXN0KHJlcXVlc3QpO1xuICAgIHJldHVybiAodHhNb2RlLCBjYWxsYmFjaykgPT4gZGJwLnRoZW4oKGRiKSA9PiBjYWxsYmFjayhkYi50cmFuc2FjdGlvbihzdG9yZU5hbWUsIHR4TW9kZSkub2JqZWN0U3RvcmUoc3RvcmVOYW1lKSkpO1xufVxubGV0IGRlZmF1bHRHZXRTdG9yZUZ1bmM7XG5mdW5jdGlvbiBkZWZhdWx0R2V0U3RvcmUoKSB7XG4gICAgaWYgKCFkZWZhdWx0R2V0U3RvcmVGdW5jKSB7XG4gICAgICAgIGRlZmF1bHRHZXRTdG9yZUZ1bmMgPSBjcmVhdGVTdG9yZSgna2V5dmFsLXN0b3JlJywgJ2tleXZhbCcpO1xuICAgIH1cbiAgICByZXR1cm4gZGVmYXVsdEdldFN0b3JlRnVuYztcbn1cbi8qKlxuICogR2V0IGEgdmFsdWUgYnkgaXRzIGtleS5cbiAqXG4gKiBAcGFyYW0ga2V5XG4gKiBAcGFyYW0gY3VzdG9tU3RvcmUgTWV0aG9kIHRvIGdldCBhIGN1c3RvbSBzdG9yZS4gVXNlIHdpdGggY2F1dGlvbiAoc2VlIHRoZSBkb2NzKS5cbiAqL1xuZnVuY3Rpb24gZ2V0KGtleSwgY3VzdG9tU3RvcmUgPSBkZWZhdWx0R2V0U3RvcmUoKSkge1xuICAgIHJldHVybiBjdXN0b21TdG9yZSgncmVhZG9ubHknLCAoc3RvcmUpID0+IHByb21pc2lmeVJlcXVlc3Qoc3RvcmUuZ2V0KGtleSkpKTtcbn1cbi8qKlxuICogU2V0IGEgdmFsdWUgd2l0aCBhIGtleS5cbiAqXG4gKiBAcGFyYW0ga2V5XG4gKiBAcGFyYW0gdmFsdWVcbiAqIEBwYXJhbSBjdXN0b21TdG9yZSBNZXRob2QgdG8gZ2V0IGEgY3VzdG9tIHN0b3JlLiBVc2Ugd2l0aCBjYXV0aW9uIChzZWUgdGhlIGRvY3MpLlxuICovXG5mdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSwgY3VzdG9tU3RvcmUgPSBkZWZhdWx0R2V0U3RvcmUoKSkge1xuICAgIHJldHVybiBjdXN0b21TdG9yZSgncmVhZHdyaXRlJywgKHN0b3JlKSA9PiB7XG4gICAgICAgIHN0b3JlLnB1dCh2YWx1ZSwga2V5KTtcbiAgICAgICAgcmV0dXJuIHByb21pc2lmeVJlcXVlc3Qoc3RvcmUudHJhbnNhY3Rpb24pO1xuICAgIH0pO1xufVxuLyoqXG4gKiBTZXQgbXVsdGlwbGUgdmFsdWVzIGF0IG9uY2UuIFRoaXMgaXMgZmFzdGVyIHRoYW4gY2FsbGluZyBzZXQoKSBtdWx0aXBsZSB0aW1lcy5cbiAqIEl0J3MgYWxzbyBhdG9taWMg4oCTIGlmIG9uZSBvZiB0aGUgcGFpcnMgY2FuJ3QgYmUgYWRkZWQsIG5vbmUgd2lsbCBiZSBhZGRlZC5cbiAqXG4gKiBAcGFyYW0gZW50cmllcyBBcnJheSBvZiBlbnRyaWVzLCB3aGVyZSBlYWNoIGVudHJ5IGlzIGFuIGFycmF5IG9mIGBba2V5LCB2YWx1ZV1gLlxuICogQHBhcmFtIGN1c3RvbVN0b3JlIE1ldGhvZCB0byBnZXQgYSBjdXN0b20gc3RvcmUuIFVzZSB3aXRoIGNhdXRpb24gKHNlZSB0aGUgZG9jcykuXG4gKi9cbmZ1bmN0aW9uIHNldE1hbnkoZW50cmllcywgY3VzdG9tU3RvcmUgPSBkZWZhdWx0R2V0U3RvcmUoKSkge1xuICAgIHJldHVybiBjdXN0b21TdG9yZSgncmVhZHdyaXRlJywgKHN0b3JlKSA9PiB7XG4gICAgICAgIGVudHJpZXMuZm9yRWFjaCgoZW50cnkpID0+IHN0b3JlLnB1dChlbnRyeVsxXSwgZW50cnlbMF0pKTtcbiAgICAgICAgcmV0dXJuIHByb21pc2lmeVJlcXVlc3Qoc3RvcmUudHJhbnNhY3Rpb24pO1xuICAgIH0pO1xufVxuLyoqXG4gKiBHZXQgbXVsdGlwbGUgdmFsdWVzIGJ5IHRoZWlyIGtleXNcbiAqXG4gKiBAcGFyYW0ga2V5c1xuICogQHBhcmFtIGN1c3RvbVN0b3JlIE1ldGhvZCB0byBnZXQgYSBjdXN0b20gc3RvcmUuIFVzZSB3aXRoIGNhdXRpb24gKHNlZSB0aGUgZG9jcykuXG4gKi9cbmZ1bmN0aW9uIGdldE1hbnkoa2V5cywgY3VzdG9tU3RvcmUgPSBkZWZhdWx0R2V0U3RvcmUoKSkge1xuICAgIHJldHVybiBjdXN0b21TdG9yZSgncmVhZG9ubHknLCAoc3RvcmUpID0+IFByb21pc2UuYWxsKGtleXMubWFwKChrZXkpID0+IHByb21pc2lmeVJlcXVlc3Qoc3RvcmUuZ2V0KGtleSkpKSkpO1xufVxuLyoqXG4gKiBVcGRhdGUgYSB2YWx1ZS4gVGhpcyBsZXRzIHlvdSBzZWUgdGhlIG9sZCB2YWx1ZSBhbmQgdXBkYXRlIGl0IGFzIGFuIGF0b21pYyBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIGtleVxuICogQHBhcmFtIHVwZGF0ZXIgQSBjYWxsYmFjayB0aGF0IHRha2VzIHRoZSBvbGQgdmFsdWUgYW5kIHJldHVybnMgYSBuZXcgdmFsdWUuXG4gKiBAcGFyYW0gY3VzdG9tU3RvcmUgTWV0aG9kIHRvIGdldCBhIGN1c3RvbSBzdG9yZS4gVXNlIHdpdGggY2F1dGlvbiAoc2VlIHRoZSBkb2NzKS5cbiAqL1xuZnVuY3Rpb24gdXBkYXRlKGtleSwgdXBkYXRlciwgY3VzdG9tU3RvcmUgPSBkZWZhdWx0R2V0U3RvcmUoKSkge1xuICAgIHJldHVybiBjdXN0b21TdG9yZSgncmVhZHdyaXRlJywgKHN0b3JlKSA9PiBcbiAgICAvLyBOZWVkIHRvIGNyZWF0ZSB0aGUgcHJvbWlzZSBtYW51YWxseS5cbiAgICAvLyBJZiBJIHRyeSB0byBjaGFpbiBwcm9taXNlcywgdGhlIHRyYW5zYWN0aW9uIGNsb3NlcyBpbiBicm93c2Vyc1xuICAgIC8vIHRoYXQgdXNlIGEgcHJvbWlzZSBwb2x5ZmlsbCAoSUUxMC8xMSkuXG4gICAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBzdG9yZS5nZXQoa2V5KS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHN0b3JlLnB1dCh1cGRhdGVyKHRoaXMucmVzdWx0KSwga2V5KTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHByb21pc2lmeVJlcXVlc3Qoc3RvcmUudHJhbnNhY3Rpb24pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9KSk7XG59XG4vKipcbiAqIERlbGV0ZSBhIHBhcnRpY3VsYXIga2V5IGZyb20gdGhlIHN0b3JlLlxuICpcbiAqIEBwYXJhbSBrZXlcbiAqIEBwYXJhbSBjdXN0b21TdG9yZSBNZXRob2QgdG8gZ2V0IGEgY3VzdG9tIHN0b3JlLiBVc2Ugd2l0aCBjYXV0aW9uIChzZWUgdGhlIGRvY3MpLlxuICovXG5mdW5jdGlvbiBkZWwoa2V5LCBjdXN0b21TdG9yZSA9IGRlZmF1bHRHZXRTdG9yZSgpKSB7XG4gICAgcmV0dXJuIGN1c3RvbVN0b3JlKCdyZWFkd3JpdGUnLCAoc3RvcmUpID0+IHtcbiAgICAgICAgc3RvcmUuZGVsZXRlKGtleSk7XG4gICAgICAgIHJldHVybiBwcm9taXNpZnlSZXF1ZXN0KHN0b3JlLnRyYW5zYWN0aW9uKTtcbiAgICB9KTtcbn1cbi8qKlxuICogRGVsZXRlIG11bHRpcGxlIGtleXMgYXQgb25jZS5cbiAqXG4gKiBAcGFyYW0ga2V5cyBMaXN0IG9mIGtleXMgdG8gZGVsZXRlLlxuICogQHBhcmFtIGN1c3RvbVN0b3JlIE1ldGhvZCB0byBnZXQgYSBjdXN0b20gc3RvcmUuIFVzZSB3aXRoIGNhdXRpb24gKHNlZSB0aGUgZG9jcykuXG4gKi9cbmZ1bmN0aW9uIGRlbE1hbnkoa2V5cywgY3VzdG9tU3RvcmUgPSBkZWZhdWx0R2V0U3RvcmUoKSkge1xuICAgIHJldHVybiBjdXN0b21TdG9yZSgncmVhZHdyaXRlJywgKHN0b3JlKSA9PiB7XG4gICAgICAgIGtleXMuZm9yRWFjaCgoa2V5KSA9PiBzdG9yZS5kZWxldGUoa2V5KSk7XG4gICAgICAgIHJldHVybiBwcm9taXNpZnlSZXF1ZXN0KHN0b3JlLnRyYW5zYWN0aW9uKTtcbiAgICB9KTtcbn1cbi8qKlxuICogQ2xlYXIgYWxsIHZhbHVlcyBpbiB0aGUgc3RvcmUuXG4gKlxuICogQHBhcmFtIGN1c3RvbVN0b3JlIE1ldGhvZCB0byBnZXQgYSBjdXN0b20gc3RvcmUuIFVzZSB3aXRoIGNhdXRpb24gKHNlZSB0aGUgZG9jcykuXG4gKi9cbmZ1bmN0aW9uIGNsZWFyKGN1c3RvbVN0b3JlID0gZGVmYXVsdEdldFN0b3JlKCkpIHtcbiAgICByZXR1cm4gY3VzdG9tU3RvcmUoJ3JlYWR3cml0ZScsIChzdG9yZSkgPT4ge1xuICAgICAgICBzdG9yZS5jbGVhcigpO1xuICAgICAgICByZXR1cm4gcHJvbWlzaWZ5UmVxdWVzdChzdG9yZS50cmFuc2FjdGlvbik7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBlYWNoQ3Vyc29yKHN0b3JlLCBjYWxsYmFjaykge1xuICAgIHN0b3JlLm9wZW5DdXJzb3IoKS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5yZXN1bHQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNhbGxiYWNrKHRoaXMucmVzdWx0KTtcbiAgICAgICAgdGhpcy5yZXN1bHQuY29udGludWUoKTtcbiAgICB9O1xuICAgIHJldHVybiBwcm9taXNpZnlSZXF1ZXN0KHN0b3JlLnRyYW5zYWN0aW9uKTtcbn1cbi8qKlxuICogR2V0IGFsbCBrZXlzIGluIHRoZSBzdG9yZS5cbiAqXG4gKiBAcGFyYW0gY3VzdG9tU3RvcmUgTWV0aG9kIHRvIGdldCBhIGN1c3RvbSBzdG9yZS4gVXNlIHdpdGggY2F1dGlvbiAoc2VlIHRoZSBkb2NzKS5cbiAqL1xuZnVuY3Rpb24ga2V5cyhjdXN0b21TdG9yZSA9IGRlZmF1bHRHZXRTdG9yZSgpKSB7XG4gICAgcmV0dXJuIGN1c3RvbVN0b3JlKCdyZWFkb25seScsIChzdG9yZSkgPT4ge1xuICAgICAgICAvLyBGYXN0IHBhdGggZm9yIG1vZGVybiBicm93c2Vyc1xuICAgICAgICBpZiAoc3RvcmUuZ2V0QWxsS2V5cykge1xuICAgICAgICAgICAgcmV0dXJuIHByb21pc2lmeVJlcXVlc3Qoc3RvcmUuZ2V0QWxsS2V5cygpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpdGVtcyA9IFtdO1xuICAgICAgICByZXR1cm4gZWFjaEN1cnNvcihzdG9yZSwgKGN1cnNvcikgPT4gaXRlbXMucHVzaChjdXJzb3Iua2V5KSkudGhlbigoKSA9PiBpdGVtcyk7XG4gICAgfSk7XG59XG4vKipcbiAqIEdldCBhbGwgdmFsdWVzIGluIHRoZSBzdG9yZS5cbiAqXG4gKiBAcGFyYW0gY3VzdG9tU3RvcmUgTWV0aG9kIHRvIGdldCBhIGN1c3RvbSBzdG9yZS4gVXNlIHdpdGggY2F1dGlvbiAoc2VlIHRoZSBkb2NzKS5cbiAqL1xuZnVuY3Rpb24gdmFsdWVzKGN1c3RvbVN0b3JlID0gZGVmYXVsdEdldFN0b3JlKCkpIHtcbiAgICByZXR1cm4gY3VzdG9tU3RvcmUoJ3JlYWRvbmx5JywgKHN0b3JlKSA9PiB7XG4gICAgICAgIC8vIEZhc3QgcGF0aCBmb3IgbW9kZXJuIGJyb3dzZXJzXG4gICAgICAgIGlmIChzdG9yZS5nZXRBbGwpIHtcbiAgICAgICAgICAgIHJldHVybiBwcm9taXNpZnlSZXF1ZXN0KHN0b3JlLmdldEFsbCgpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpdGVtcyA9IFtdO1xuICAgICAgICByZXR1cm4gZWFjaEN1cnNvcihzdG9yZSwgKGN1cnNvcikgPT4gaXRlbXMucHVzaChjdXJzb3IudmFsdWUpKS50aGVuKCgpID0+IGl0ZW1zKTtcbiAgICB9KTtcbn1cbi8qKlxuICogR2V0IGFsbCBlbnRyaWVzIGluIHRoZSBzdG9yZS4gRWFjaCBlbnRyeSBpcyBhbiBhcnJheSBvZiBgW2tleSwgdmFsdWVdYC5cbiAqXG4gKiBAcGFyYW0gY3VzdG9tU3RvcmUgTWV0aG9kIHRvIGdldCBhIGN1c3RvbSBzdG9yZS4gVXNlIHdpdGggY2F1dGlvbiAoc2VlIHRoZSBkb2NzKS5cbiAqL1xuZnVuY3Rpb24gZW50cmllcyhjdXN0b21TdG9yZSA9IGRlZmF1bHRHZXRTdG9yZSgpKSB7XG4gICAgcmV0dXJuIGN1c3RvbVN0b3JlKCdyZWFkb25seScsIChzdG9yZSkgPT4ge1xuICAgICAgICAvLyBGYXN0IHBhdGggZm9yIG1vZGVybiBicm93c2Vyc1xuICAgICAgICAvLyAoYWx0aG91Z2gsIGhvcGVmdWxseSB3ZSdsbCBnZXQgYSBzaW1wbGVyIHBhdGggc29tZSBkYXkpXG4gICAgICAgIGlmIChzdG9yZS5nZXRBbGwgJiYgc3RvcmUuZ2V0QWxsS2V5cykge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKFtcbiAgICAgICAgICAgICAgICBwcm9taXNpZnlSZXF1ZXN0KHN0b3JlLmdldEFsbEtleXMoKSksXG4gICAgICAgICAgICAgICAgcHJvbWlzaWZ5UmVxdWVzdChzdG9yZS5nZXRBbGwoKSksXG4gICAgICAgICAgICBdKS50aGVuKChba2V5cywgdmFsdWVzXSkgPT4ga2V5cy5tYXAoKGtleSwgaSkgPT4gW2tleSwgdmFsdWVzW2ldXSkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gW107XG4gICAgICAgIHJldHVybiBjdXN0b21TdG9yZSgncmVhZG9ubHknLCAoc3RvcmUpID0+IGVhY2hDdXJzb3Ioc3RvcmUsIChjdXJzb3IpID0+IGl0ZW1zLnB1c2goW2N1cnNvci5rZXksIGN1cnNvci52YWx1ZV0pKS50aGVuKCgpID0+IGl0ZW1zKSk7XG4gICAgfSk7XG59XG5cbmV4cG9ydCB7IGNsZWFyLCBjcmVhdGVTdG9yZSwgZGVsLCBkZWxNYW55LCBlbnRyaWVzLCBnZXQsIGdldE1hbnksIGtleXMsIHByb21pc2lmeVJlcXVlc3QsIHNldCwgc2V0TWFueSwgdXBkYXRlLCB2YWx1ZXMgfTtcbiIsIi8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG5cblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1Jcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xudmFyIHQ9ZnVuY3Rpb24ocixlKXtyZXR1cm4odD1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24odCxyKXt0Ll9fcHJvdG9fXz1yfXx8ZnVuY3Rpb24odCxyKXtmb3IodmFyIGUgaW4gcilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocixlKSYmKHRbZV09cltlXSl9KShyLGUpfTtmdW5jdGlvbiByKHIsZSl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSYmbnVsbCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIrU3RyaW5nKGUpK1wiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7ZnVuY3Rpb24gaSgpe3RoaXMuY29uc3RydWN0b3I9cn10KHIsZSksci5wcm90b3R5cGU9bnVsbD09PWU/T2JqZWN0LmNyZWF0ZShlKTooaS5wcm90b3R5cGU9ZS5wcm90b3R5cGUsbmV3IGkpfWZ1bmN0aW9uIGUodCl7dmFyIHI9XCJcIjtBcnJheS5pc0FycmF5KHQpfHwodD1bdF0pO2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXt2YXIgaT10W2VdO2lmKGkudHlwZT09PV8uQ0xPU0VfUEFUSClyKz1cInpcIjtlbHNlIGlmKGkudHlwZT09PV8uSE9SSVpfTElORV9UTylyKz0oaS5yZWxhdGl2ZT9cImhcIjpcIkhcIikraS54O2Vsc2UgaWYoaS50eXBlPT09Xy5WRVJUX0xJTkVfVE8pcis9KGkucmVsYXRpdmU/XCJ2XCI6XCJWXCIpK2kueTtlbHNlIGlmKGkudHlwZT09PV8uTU9WRV9UTylyKz0oaS5yZWxhdGl2ZT9cIm1cIjpcIk1cIikraS54K1wiIFwiK2kueTtlbHNlIGlmKGkudHlwZT09PV8uTElORV9UTylyKz0oaS5yZWxhdGl2ZT9cImxcIjpcIkxcIikraS54K1wiIFwiK2kueTtlbHNlIGlmKGkudHlwZT09PV8uQ1VSVkVfVE8pcis9KGkucmVsYXRpdmU/XCJjXCI6XCJDXCIpK2kueDErXCIgXCIraS55MStcIiBcIitpLngyK1wiIFwiK2kueTIrXCIgXCIraS54K1wiIFwiK2kueTtlbHNlIGlmKGkudHlwZT09PV8uU01PT1RIX0NVUlZFX1RPKXIrPShpLnJlbGF0aXZlP1wic1wiOlwiU1wiKStpLngyK1wiIFwiK2kueTIrXCIgXCIraS54K1wiIFwiK2kueTtlbHNlIGlmKGkudHlwZT09PV8uUVVBRF9UTylyKz0oaS5yZWxhdGl2ZT9cInFcIjpcIlFcIikraS54MStcIiBcIitpLnkxK1wiIFwiK2kueCtcIiBcIitpLnk7ZWxzZSBpZihpLnR5cGU9PT1fLlNNT09USF9RVUFEX1RPKXIrPShpLnJlbGF0aXZlP1widFwiOlwiVFwiKStpLngrXCIgXCIraS55O2Vsc2V7aWYoaS50eXBlIT09Xy5BUkMpdGhyb3cgbmV3IEVycm9yKCdVbmV4cGVjdGVkIGNvbW1hbmQgdHlwZSBcIicraS50eXBlKydcIiBhdCBpbmRleCAnK2UrXCIuXCIpO3IrPShpLnJlbGF0aXZlP1wiYVwiOlwiQVwiKStpLnJYK1wiIFwiK2kuclkrXCIgXCIraS54Um90K1wiIFwiKyAraS5sQXJjRmxhZytcIiBcIisgK2kuc3dlZXBGbGFnK1wiIFwiK2kueCtcIiBcIitpLnl9fXJldHVybiByfWZ1bmN0aW9uIGkodCxyKXt2YXIgZT10WzBdLGk9dFsxXTtyZXR1cm5bZSpNYXRoLmNvcyhyKS1pKk1hdGguc2luKHIpLGUqTWF0aC5zaW4ocikraSpNYXRoLmNvcyhyKV19ZnVuY3Rpb24gYSgpe2Zvcih2YXIgdD1bXSxyPTA7cjxhcmd1bWVudHMubGVuZ3RoO3IrKyl0W3JdPWFyZ3VtZW50c1tyXTtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKylpZihcIm51bWJlclwiIT10eXBlb2YgdFtlXSl0aHJvdyBuZXcgRXJyb3IoXCJhc3NlcnROdW1iZXJzIGFyZ3VtZW50c1tcIitlK1wiXSBpcyBub3QgYSBudW1iZXIuIFwiK3R5cGVvZiB0W2VdK1wiID09IHR5cGVvZiBcIit0W2VdKTtyZXR1cm4hMH12YXIgbj1NYXRoLlBJO2Z1bmN0aW9uIG8odCxyLGUpe3QubEFyY0ZsYWc9MD09PXQubEFyY0ZsYWc/MDoxLHQuc3dlZXBGbGFnPTA9PT10LnN3ZWVwRmxhZz8wOjE7dmFyIGE9dC5yWCxvPXQuclkscz10LngsdT10Lnk7YT1NYXRoLmFicyh0LnJYKSxvPU1hdGguYWJzKHQuclkpO3ZhciBoPWkoWyhyLXMpLzIsKGUtdSkvMl0sLXQueFJvdC8xODAqbiksYz1oWzBdLHk9aFsxXSxwPU1hdGgucG93KGMsMikvTWF0aC5wb3coYSwyKStNYXRoLnBvdyh5LDIpL01hdGgucG93KG8sMik7MTxwJiYoYSo9TWF0aC5zcXJ0KHApLG8qPU1hdGguc3FydChwKSksdC5yWD1hLHQuclk9bzt2YXIgbT1NYXRoLnBvdyhhLDIpKk1hdGgucG93KHksMikrTWF0aC5wb3cobywyKSpNYXRoLnBvdyhjLDIpLE89KHQubEFyY0ZsYWchPT10LnN3ZWVwRmxhZz8xOi0xKSpNYXRoLnNxcnQoTWF0aC5tYXgoMCwoTWF0aC5wb3coYSwyKSpNYXRoLnBvdyhvLDIpLW0pL20pKSxsPWEqeS9vKk8sVD0tbypjL2EqTyx2PWkoW2wsVF0sdC54Um90LzE4MCpuKTt0LmNYPXZbMF0rKHIrcykvMix0LmNZPXZbMV0rKGUrdSkvMix0LnBoaTE9TWF0aC5hdGFuMigoeS1UKS9vLChjLWwpL2EpLHQucGhpMj1NYXRoLmF0YW4yKCgteS1UKS9vLCgtYy1sKS9hKSwwPT09dC5zd2VlcEZsYWcmJnQucGhpMj50LnBoaTEmJih0LnBoaTItPTIqbiksMT09PXQuc3dlZXBGbGFnJiZ0LnBoaTI8dC5waGkxJiYodC5waGkyKz0yKm4pLHQucGhpMSo9MTgwL24sdC5waGkyKj0xODAvbn1mdW5jdGlvbiBzKHQscixlKXthKHQscixlKTt2YXIgaT10KnQrcipyLWUqZTtpZigwPmkpcmV0dXJuW107aWYoMD09PWkpcmV0dXJuW1t0KmUvKHQqdCtyKnIpLHIqZS8odCp0K3IqcildXTt2YXIgbj1NYXRoLnNxcnQoaSk7cmV0dXJuW1sodCplK3IqbikvKHQqdCtyKnIpLChyKmUtdCpuKS8odCp0K3IqcildLFsodCplLXIqbikvKHQqdCtyKnIpLChyKmUrdCpuKS8odCp0K3IqcildXX12YXIgdSxoPU1hdGguUEkvMTgwO2Z1bmN0aW9uIGModCxyLGUpe3JldHVybigxLWUpKnQrZSpyfWZ1bmN0aW9uIHkodCxyLGUsaSl7cmV0dXJuIHQrTWF0aC5jb3MoaS8xODAqbikqcitNYXRoLnNpbihpLzE4MCpuKSplfWZ1bmN0aW9uIHAodCxyLGUsaSl7dmFyIGE9MWUtNixuPXItdCxvPWUtcixzPTMqbiszKihpLWUpLTYqbyx1PTYqKG8tbiksaD0zKm47cmV0dXJuIE1hdGguYWJzKHMpPGE/Wy1oL3VdOmZ1bmN0aW9uKHQscixlKXt2b2lkIDA9PT1lJiYoZT0xZS02KTt2YXIgaT10KnQvNC1yO2lmKGk8LWUpcmV0dXJuW107aWYoaTw9ZSlyZXR1cm5bLXQvMl07dmFyIGE9TWF0aC5zcXJ0KGkpO3JldHVyblstdC8yLWEsLXQvMithXX0odS9zLGgvcyxhKX1mdW5jdGlvbiBtKHQscixlLGksYSl7dmFyIG49MS1hO3JldHVybiB0KihuKm4qbikrciooMypuKm4qYSkrZSooMypuKmEqYSkraSooYSphKmEpfSFmdW5jdGlvbih0KXtmdW5jdGlvbiByKCl7cmV0dXJuIHUoKGZ1bmN0aW9uKHQscixlKXtyZXR1cm4gdC5yZWxhdGl2ZSYmKHZvaWQgMCE9PXQueDEmJih0LngxKz1yKSx2b2lkIDAhPT10LnkxJiYodC55MSs9ZSksdm9pZCAwIT09dC54MiYmKHQueDIrPXIpLHZvaWQgMCE9PXQueTImJih0LnkyKz1lKSx2b2lkIDAhPT10LngmJih0LngrPXIpLHZvaWQgMCE9PXQueSYmKHQueSs9ZSksdC5yZWxhdGl2ZT0hMSksdH0pKX1mdW5jdGlvbiBlKCl7dmFyIHQ9TmFOLHI9TmFOLGU9TmFOLGk9TmFOO3JldHVybiB1KChmdW5jdGlvbihhLG4sbyl7cmV0dXJuIGEudHlwZSZfLlNNT09USF9DVVJWRV9UTyYmKGEudHlwZT1fLkNVUlZFX1RPLHQ9aXNOYU4odCk/bjp0LHI9aXNOYU4ocik/bzpyLGEueDE9YS5yZWxhdGl2ZT9uLXQ6MipuLXQsYS55MT1hLnJlbGF0aXZlP28tcjoyKm8tciksYS50eXBlJl8uQ1VSVkVfVE8/KHQ9YS5yZWxhdGl2ZT9uK2EueDI6YS54MixyPWEucmVsYXRpdmU/bythLnkyOmEueTIpOih0PU5hTixyPU5hTiksYS50eXBlJl8uU01PT1RIX1FVQURfVE8mJihhLnR5cGU9Xy5RVUFEX1RPLGU9aXNOYU4oZSk/bjplLGk9aXNOYU4oaSk/bzppLGEueDE9YS5yZWxhdGl2ZT9uLWU6MipuLWUsYS55MT1hLnJlbGF0aXZlP28taToyKm8taSksYS50eXBlJl8uUVVBRF9UTz8oZT1hLnJlbGF0aXZlP24rYS54MTphLngxLGk9YS5yZWxhdGl2ZT9vK2EueTE6YS55MSk6KGU9TmFOLGk9TmFOKSxhfSkpfWZ1bmN0aW9uIG4oKXt2YXIgdD1OYU4scj1OYU47cmV0dXJuIHUoKGZ1bmN0aW9uKGUsaSxhKXtpZihlLnR5cGUmXy5TTU9PVEhfUVVBRF9UTyYmKGUudHlwZT1fLlFVQURfVE8sdD1pc05hTih0KT9pOnQscj1pc05hTihyKT9hOnIsZS54MT1lLnJlbGF0aXZlP2ktdDoyKmktdCxlLnkxPWUucmVsYXRpdmU/YS1yOjIqYS1yKSxlLnR5cGUmXy5RVUFEX1RPKXt0PWUucmVsYXRpdmU/aStlLngxOmUueDEscj1lLnJlbGF0aXZlP2ErZS55MTplLnkxO3ZhciBuPWUueDEsbz1lLnkxO2UudHlwZT1fLkNVUlZFX1RPLGUueDE9KChlLnJlbGF0aXZlPzA6aSkrMipuKS8zLGUueTE9KChlLnJlbGF0aXZlPzA6YSkrMipvKS8zLGUueDI9KGUueCsyKm4pLzMsZS55Mj0oZS55KzIqbykvM31lbHNlIHQ9TmFOLHI9TmFOO3JldHVybiBlfSkpfWZ1bmN0aW9uIHUodCl7dmFyIHI9MCxlPTAsaT1OYU4sYT1OYU47cmV0dXJuIGZ1bmN0aW9uKG4pe2lmKGlzTmFOKGkpJiYhKG4udHlwZSZfLk1PVkVfVE8pKXRocm93IG5ldyBFcnJvcihcInBhdGggbXVzdCBzdGFydCB3aXRoIG1vdmV0b1wiKTt2YXIgbz10KG4scixlLGksYSk7cmV0dXJuIG4udHlwZSZfLkNMT1NFX1BBVEgmJihyPWksZT1hKSx2b2lkIDAhPT1uLngmJihyPW4ucmVsYXRpdmU/cituLng6bi54KSx2b2lkIDAhPT1uLnkmJihlPW4ucmVsYXRpdmU/ZStuLnk6bi55KSxuLnR5cGUmXy5NT1ZFX1RPJiYoaT1yLGE9ZSksb319ZnVuY3Rpb24gTyh0LHIsZSxpLG4sbyl7cmV0dXJuIGEodCxyLGUsaSxuLG8pLHUoKGZ1bmN0aW9uKGEscyx1LGgpe3ZhciBjPWEueDEseT1hLngyLHA9YS5yZWxhdGl2ZSYmIWlzTmFOKGgpLG09dm9pZCAwIT09YS54P2EueDpwPzA6cyxPPXZvaWQgMCE9PWEueT9hLnk6cD8wOnU7ZnVuY3Rpb24gbCh0KXtyZXR1cm4gdCp0fWEudHlwZSZfLkhPUklaX0xJTkVfVE8mJjAhPT1yJiYoYS50eXBlPV8uTElORV9UTyxhLnk9YS5yZWxhdGl2ZT8wOnUpLGEudHlwZSZfLlZFUlRfTElORV9UTyYmMCE9PWUmJihhLnR5cGU9Xy5MSU5FX1RPLGEueD1hLnJlbGF0aXZlPzA6cyksdm9pZCAwIT09YS54JiYoYS54PWEueCp0K08qZSsocD8wOm4pKSx2b2lkIDAhPT1hLnkmJihhLnk9bSpyK2EueSppKyhwPzA6bykpLHZvaWQgMCE9PWEueDEmJihhLngxPWEueDEqdCthLnkxKmUrKHA/MDpuKSksdm9pZCAwIT09YS55MSYmKGEueTE9YypyK2EueTEqaSsocD8wOm8pKSx2b2lkIDAhPT1hLngyJiYoYS54Mj1hLngyKnQrYS55MiplKyhwPzA6bikpLHZvaWQgMCE9PWEueTImJihhLnkyPXkqcithLnkyKmkrKHA/MDpvKSk7dmFyIFQ9dCppLXIqZTtpZih2b2lkIDAhPT1hLnhSb3QmJigxIT09dHx8MCE9PXJ8fDAhPT1lfHwxIT09aSkpaWYoMD09PVQpZGVsZXRlIGEuclgsZGVsZXRlIGEuclksZGVsZXRlIGEueFJvdCxkZWxldGUgYS5sQXJjRmxhZyxkZWxldGUgYS5zd2VlcEZsYWcsYS50eXBlPV8uTElORV9UTztlbHNle3ZhciB2PWEueFJvdCpNYXRoLlBJLzE4MCxmPU1hdGguc2luKHYpLE49TWF0aC5jb3ModikseD0xL2woYS5yWCksZD0xL2woYS5yWSksRT1sKE4pKngrbChmKSpkLEE9MipmKk4qKHgtZCksQz1sKGYpKngrbChOKSpkLE09RSppKmktQSpyKmkrQypyKnIsUj1BKih0KmkrciplKS0yKihFKmUqaStDKnQqciksZz1FKmUqZS1BKnQqZStDKnQqdCxJPShNYXRoLmF0YW4yKFIsTS1nKStNYXRoLlBJKSVNYXRoLlBJLzIsUz1NYXRoLnNpbihJKSxMPU1hdGguY29zKEkpO2Euclg9TWF0aC5hYnMoVCkvTWF0aC5zcXJ0KE0qbChMKStSKlMqTCtnKmwoUykpLGEuclk9TWF0aC5hYnMoVCkvTWF0aC5zcXJ0KE0qbChTKS1SKlMqTCtnKmwoTCkpLGEueFJvdD0xODAqSS9NYXRoLlBJfXJldHVybiB2b2lkIDAhPT1hLnN3ZWVwRmxhZyYmMD5UJiYoYS5zd2VlcEZsYWc9KyFhLnN3ZWVwRmxhZyksYX0pKX1mdW5jdGlvbiBsKCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPXt9O2Zvcih2YXIgZSBpbiB0KXJbZV09dFtlXTtyZXR1cm4gcn19dC5ST1VORD1mdW5jdGlvbih0KXtmdW5jdGlvbiByKHIpe3JldHVybiBNYXRoLnJvdW5kKHIqdCkvdH1yZXR1cm4gdm9pZCAwPT09dCYmKHQ9MWUxMyksYSh0KSxmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwIT09dC54MSYmKHQueDE9cih0LngxKSksdm9pZCAwIT09dC55MSYmKHQueTE9cih0LnkxKSksdm9pZCAwIT09dC54MiYmKHQueDI9cih0LngyKSksdm9pZCAwIT09dC55MiYmKHQueTI9cih0LnkyKSksdm9pZCAwIT09dC54JiYodC54PXIodC54KSksdm9pZCAwIT09dC55JiYodC55PXIodC55KSksdm9pZCAwIT09dC5yWCYmKHQuclg9cih0LnJYKSksdm9pZCAwIT09dC5yWSYmKHQuclk9cih0LnJZKSksdH19LHQuVE9fQUJTPXIsdC5UT19SRUw9ZnVuY3Rpb24oKXtyZXR1cm4gdSgoZnVuY3Rpb24odCxyLGUpe3JldHVybiB0LnJlbGF0aXZlfHwodm9pZCAwIT09dC54MSYmKHQueDEtPXIpLHZvaWQgMCE9PXQueTEmJih0LnkxLT1lKSx2b2lkIDAhPT10LngyJiYodC54Mi09ciksdm9pZCAwIT09dC55MiYmKHQueTItPWUpLHZvaWQgMCE9PXQueCYmKHQueC09ciksdm9pZCAwIT09dC55JiYodC55LT1lKSx0LnJlbGF0aXZlPSEwKSx0fSkpfSx0Lk5PUk1BTElaRV9IVlo9ZnVuY3Rpb24odCxyLGUpe3JldHVybiB2b2lkIDA9PT10JiYodD0hMCksdm9pZCAwPT09ciYmKHI9ITApLHZvaWQgMD09PWUmJihlPSEwKSx1KChmdW5jdGlvbihpLGEsbixvLHMpe2lmKGlzTmFOKG8pJiYhKGkudHlwZSZfLk1PVkVfVE8pKXRocm93IG5ldyBFcnJvcihcInBhdGggbXVzdCBzdGFydCB3aXRoIG1vdmV0b1wiKTtyZXR1cm4gciYmaS50eXBlJl8uSE9SSVpfTElORV9UTyYmKGkudHlwZT1fLkxJTkVfVE8saS55PWkucmVsYXRpdmU/MDpuKSxlJiZpLnR5cGUmXy5WRVJUX0xJTkVfVE8mJihpLnR5cGU9Xy5MSU5FX1RPLGkueD1pLnJlbGF0aXZlPzA6YSksdCYmaS50eXBlJl8uQ0xPU0VfUEFUSCYmKGkudHlwZT1fLkxJTkVfVE8saS54PWkucmVsYXRpdmU/by1hOm8saS55PWkucmVsYXRpdmU/cy1uOnMpLGkudHlwZSZfLkFSQyYmKDA9PT1pLnJYfHwwPT09aS5yWSkmJihpLnR5cGU9Xy5MSU5FX1RPLGRlbGV0ZSBpLnJYLGRlbGV0ZSBpLnJZLGRlbGV0ZSBpLnhSb3QsZGVsZXRlIGkubEFyY0ZsYWcsZGVsZXRlIGkuc3dlZXBGbGFnKSxpfSkpfSx0Lk5PUk1BTElaRV9TVD1lLHQuUVRfVE9fQz1uLHQuSU5GTz11LHQuU0FOSVRJWkU9ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9MCksYSh0KTt2YXIgcj1OYU4sZT1OYU4saT1OYU4sbj1OYU47cmV0dXJuIHUoKGZ1bmN0aW9uKGEsbyxzLHUsaCl7dmFyIGM9TWF0aC5hYnMseT0hMSxwPTAsbT0wO2lmKGEudHlwZSZfLlNNT09USF9DVVJWRV9UTyYmKHA9aXNOYU4ocik/MDpvLXIsbT1pc05hTihlKT8wOnMtZSksYS50eXBlJihfLkNVUlZFX1RPfF8uU01PT1RIX0NVUlZFX1RPKT8ocj1hLnJlbGF0aXZlP28rYS54MjphLngyLGU9YS5yZWxhdGl2ZT9zK2EueTI6YS55Mik6KHI9TmFOLGU9TmFOKSxhLnR5cGUmXy5TTU9PVEhfUVVBRF9UTz8oaT1pc05hTihpKT9vOjIqby1pLG49aXNOYU4obik/czoyKnMtbik6YS50eXBlJl8uUVVBRF9UTz8oaT1hLnJlbGF0aXZlP28rYS54MTphLngxLG49YS5yZWxhdGl2ZT9zK2EueTE6YS55Mik6KGk9TmFOLG49TmFOKSxhLnR5cGUmXy5MSU5FX0NPTU1BTkRTfHxhLnR5cGUmXy5BUkMmJigwPT09YS5yWHx8MD09PWEucll8fCFhLmxBcmNGbGFnKXx8YS50eXBlJl8uQ1VSVkVfVE98fGEudHlwZSZfLlNNT09USF9DVVJWRV9UT3x8YS50eXBlJl8uUVVBRF9UT3x8YS50eXBlJl8uU01PT1RIX1FVQURfVE8pe3ZhciBPPXZvaWQgMD09PWEueD8wOmEucmVsYXRpdmU/YS54OmEueC1vLGw9dm9pZCAwPT09YS55PzA6YS5yZWxhdGl2ZT9hLnk6YS55LXM7cD1pc05hTihpKT92b2lkIDA9PT1hLngxP3A6YS5yZWxhdGl2ZT9hLng6YS54MS1vOmktbyxtPWlzTmFOKG4pP3ZvaWQgMD09PWEueTE/bTphLnJlbGF0aXZlP2EueTphLnkxLXM6bi1zO3ZhciBUPXZvaWQgMD09PWEueDI/MDphLnJlbGF0aXZlP2EueDphLngyLW8sdj12b2lkIDA9PT1hLnkyPzA6YS5yZWxhdGl2ZT9hLnk6YS55Mi1zO2MoTyk8PXQmJmMobCk8PXQmJmMocCk8PXQmJmMobSk8PXQmJmMoVCk8PXQmJmModik8PXQmJih5PSEwKX1yZXR1cm4gYS50eXBlJl8uQ0xPU0VfUEFUSCYmYyhvLXUpPD10JiZjKHMtaCk8PXQmJih5PSEwKSx5P1tdOmF9KSl9LHQuTUFUUklYPU8sdC5ST1RBVEU9ZnVuY3Rpb24odCxyLGUpe3ZvaWQgMD09PXImJihyPTApLHZvaWQgMD09PWUmJihlPTApLGEodCxyLGUpO3ZhciBpPU1hdGguc2luKHQpLG49TWF0aC5jb3ModCk7cmV0dXJuIE8obixpLC1pLG4sci1yKm4rZSppLGUtcippLWUqbil9LHQuVFJBTlNMQVRFPWZ1bmN0aW9uKHQscil7cmV0dXJuIHZvaWQgMD09PXImJihyPTApLGEodCxyKSxPKDEsMCwwLDEsdCxyKX0sdC5TQ0FMRT1mdW5jdGlvbih0LHIpe3JldHVybiB2b2lkIDA9PT1yJiYocj10KSxhKHQsciksTyh0LDAsMCxyLDAsMCl9LHQuU0tFV19YPWZ1bmN0aW9uKHQpe3JldHVybiBhKHQpLE8oMSwwLE1hdGguYXRhbih0KSwxLDAsMCl9LHQuU0tFV19ZPWZ1bmN0aW9uKHQpe3JldHVybiBhKHQpLE8oMSxNYXRoLmF0YW4odCksMCwxLDAsMCl9LHQuWF9BWElTX1NZTU1FVFJZPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0wKSxhKHQpLE8oLTEsMCwwLDEsdCwwKX0sdC5ZX0FYSVNfU1lNTUVUUlk9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PTApLGEodCksTygxLDAsMCwtMSwwLHQpfSx0LkFfVE9fQz1mdW5jdGlvbigpe3JldHVybiB1KChmdW5jdGlvbih0LHIsZSl7cmV0dXJuIF8uQVJDPT09dC50eXBlP2Z1bmN0aW9uKHQscixlKXt2YXIgYSxuLHMsdTt0LmNYfHxvKHQscixlKTtmb3IodmFyIHk9TWF0aC5taW4odC5waGkxLHQucGhpMikscD1NYXRoLm1heCh0LnBoaTEsdC5waGkyKS15LG09TWF0aC5jZWlsKHAvOTApLE89bmV3IEFycmF5KG0pLGw9cixUPWUsdj0wO3Y8bTt2Kyspe3ZhciBmPWModC5waGkxLHQucGhpMix2L20pLE49Yyh0LnBoaTEsdC5waGkyLCh2KzEpL20pLHg9Ti1mLGQ9NC8zKk1hdGgudGFuKHgqaC80KSxFPVtNYXRoLmNvcyhmKmgpLWQqTWF0aC5zaW4oZipoKSxNYXRoLnNpbihmKmgpK2QqTWF0aC5jb3MoZipoKV0sQT1FWzBdLEM9RVsxXSxNPVtNYXRoLmNvcyhOKmgpLE1hdGguc2luKE4qaCldLFI9TVswXSxnPU1bMV0sST1bUitkKk1hdGguc2luKE4qaCksZy1kKk1hdGguY29zKE4qaCldLFM9SVswXSxMPUlbMV07T1t2XT17cmVsYXRpdmU6dC5yZWxhdGl2ZSx0eXBlOl8uQ1VSVkVfVE99O3ZhciBIPWZ1bmN0aW9uKHIsZSl7dmFyIGE9aShbcip0LnJYLGUqdC5yWV0sdC54Um90KSxuPWFbMF0sbz1hWzFdO3JldHVyblt0LmNYK24sdC5jWStvXX07YT1IKEEsQyksT1t2XS54MT1hWzBdLE9bdl0ueTE9YVsxXSxuPUgoUyxMKSxPW3ZdLngyPW5bMF0sT1t2XS55Mj1uWzFdLHM9SChSLGcpLE9bdl0ueD1zWzBdLE9bdl0ueT1zWzFdLHQucmVsYXRpdmUmJihPW3ZdLngxLT1sLE9bdl0ueTEtPVQsT1t2XS54Mi09bCxPW3ZdLnkyLT1ULE9bdl0ueC09bCxPW3ZdLnktPVQpLGw9KHU9W09bdl0ueCxPW3ZdLnldKVswXSxUPXVbMV19cmV0dXJuIE99KHQsdC5yZWxhdGl2ZT8wOnIsdC5yZWxhdGl2ZT8wOmUpOnR9KSl9LHQuQU5OT1RBVEVfQVJDUz1mdW5jdGlvbigpe3JldHVybiB1KChmdW5jdGlvbih0LHIsZSl7cmV0dXJuIHQucmVsYXRpdmUmJihyPTAsZT0wKSxfLkFSQz09PXQudHlwZSYmbyh0LHIsZSksdH0pKX0sdC5DTE9ORT1sLHQuQ0FMQ1VMQVRFX0JPVU5EUz1mdW5jdGlvbigpe3ZhciB0PWZ1bmN0aW9uKHQpe3ZhciByPXt9O2Zvcih2YXIgZSBpbiB0KXJbZV09dFtlXTtyZXR1cm4gcn0saT1yKCksYT1uKCksaD1lKCksYz11KChmdW5jdGlvbihyLGUsbil7dmFyIHU9aChhKGkodChyKSkpKTtmdW5jdGlvbiBPKHQpe3Q+Yy5tYXhYJiYoYy5tYXhYPXQpLHQ8Yy5taW5YJiYoYy5taW5YPXQpfWZ1bmN0aW9uIGwodCl7dD5jLm1heFkmJihjLm1heFk9dCksdDxjLm1pblkmJihjLm1pblk9dCl9aWYodS50eXBlJl8uRFJBV0lOR19DT01NQU5EUyYmKE8oZSksbChuKSksdS50eXBlJl8uSE9SSVpfTElORV9UTyYmTyh1LngpLHUudHlwZSZfLlZFUlRfTElORV9UTyYmbCh1LnkpLHUudHlwZSZfLkxJTkVfVE8mJihPKHUueCksbCh1LnkpKSx1LnR5cGUmXy5DVVJWRV9UTyl7Tyh1LngpLGwodS55KTtmb3IodmFyIFQ9MCx2PXAoZSx1LngxLHUueDIsdS54KTtUPHYubGVuZ3RoO1QrKyl7MDwodz12W1RdKSYmMT53JiZPKG0oZSx1LngxLHUueDIsdS54LHcpKX1mb3IodmFyIGY9MCxOPXAobix1LnkxLHUueTIsdS55KTtmPE4ubGVuZ3RoO2YrKyl7MDwodz1OW2ZdKSYmMT53JiZsKG0obix1LnkxLHUueTIsdS55LHcpKX19aWYodS50eXBlJl8uQVJDKXtPKHUueCksbCh1LnkpLG8odSxlLG4pO2Zvcih2YXIgeD11LnhSb3QvMTgwKk1hdGguUEksZD1NYXRoLmNvcyh4KSp1LnJYLEU9TWF0aC5zaW4oeCkqdS5yWCxBPS1NYXRoLnNpbih4KSp1LnJZLEM9TWF0aC5jb3MoeCkqdS5yWSxNPXUucGhpMTx1LnBoaTI/W3UucGhpMSx1LnBoaTJdOi0xODA+dS5waGkyP1t1LnBoaTIrMzYwLHUucGhpMSszNjBdOlt1LnBoaTIsdS5waGkxXSxSPU1bMF0sZz1NWzFdLEk9ZnVuY3Rpb24odCl7dmFyIHI9dFswXSxlPXRbMV0saT0xODAqTWF0aC5hdGFuMihlLHIpL01hdGguUEk7cmV0dXJuIGk8Uj9pKzM2MDppfSxTPTAsTD1zKEEsLWQsMCkubWFwKEkpO1M8TC5sZW5ndGg7UysrKXsodz1MW1NdKT5SJiZ3PGcmJk8oeSh1LmNYLGQsQSx3KSl9Zm9yKHZhciBIPTAsVT1zKEMsLUUsMCkubWFwKEkpO0g8VS5sZW5ndGg7SCsrKXt2YXIgdzsodz1VW0hdKT5SJiZ3PGcmJmwoeSh1LmNZLEUsQyx3KSl9fXJldHVybiByfSkpO3JldHVybiBjLm1pblg9MS8wLGMubWF4WD0tMS8wLGMubWluWT0xLzAsYy5tYXhZPS0xLzAsY319KHV8fCh1PXt9KSk7dmFyIE8sbD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLnJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnRyYW5zZm9ybSh1LlJPVU5EKHQpKX0sdC5wcm90b3R5cGUudG9BYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0odS5UT19BQlMoKSl9LHQucHJvdG90eXBlLnRvUmVsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtKHUuVE9fUkVMKCkpfSx0LnByb3RvdHlwZS5ub3JtYWxpemVIVlo9ZnVuY3Rpb24odCxyLGUpe3JldHVybiB0aGlzLnRyYW5zZm9ybSh1Lk5PUk1BTElaRV9IVloodCxyLGUpKX0sdC5wcm90b3R5cGUubm9ybWFsaXplU1Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0odS5OT1JNQUxJWkVfU1QoKSl9LHQucHJvdG90eXBlLnF0VG9DPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtKHUuUVRfVE9fQygpKX0sdC5wcm90b3R5cGUuYVRvQz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRyYW5zZm9ybSh1LkFfVE9fQygpKX0sdC5wcm90b3R5cGUuc2FuaXRpemU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtKHUuU0FOSVRJWkUodCkpfSx0LnByb3RvdHlwZS50cmFuc2xhdGU9ZnVuY3Rpb24odCxyKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0odS5UUkFOU0xBVEUodCxyKSl9LHQucHJvdG90eXBlLnNjYWxlPWZ1bmN0aW9uKHQscil7cmV0dXJuIHRoaXMudHJhbnNmb3JtKHUuU0NBTEUodCxyKSl9LHQucHJvdG90eXBlLnJvdGF0ZT1mdW5jdGlvbih0LHIsZSl7cmV0dXJuIHRoaXMudHJhbnNmb3JtKHUuUk9UQVRFKHQscixlKSl9LHQucHJvdG90eXBlLm1hdHJpeD1mdW5jdGlvbih0LHIsZSxpLGEsbil7cmV0dXJuIHRoaXMudHJhbnNmb3JtKHUuTUFUUklYKHQscixlLGksYSxuKSl9LHQucHJvdG90eXBlLnNrZXdYPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnRyYW5zZm9ybSh1LlNLRVdfWCh0KSl9LHQucHJvdG90eXBlLnNrZXdZPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnRyYW5zZm9ybSh1LlNLRVdfWSh0KSl9LHQucHJvdG90eXBlLnhTeW1tZXRyeT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0odS5YX0FYSVNfU1lNTUVUUlkodCkpfSx0LnByb3RvdHlwZS55U3ltbWV0cnk9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtKHUuWV9BWElTX1NZTU1FVFJZKHQpKX0sdC5wcm90b3R5cGUuYW5ub3RhdGVBcmNzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtKHUuQU5OT1RBVEVfQVJDUygpKX0sdH0oKSxUPWZ1bmN0aW9uKHQpe3JldHVyblwiIFwiPT09dHx8XCJcXHRcIj09PXR8fFwiXFxyXCI9PT10fHxcIlxcblwiPT09dH0sdj1mdW5jdGlvbih0KXtyZXR1cm5cIjBcIi5jaGFyQ29kZUF0KDApPD10LmNoYXJDb2RlQXQoMCkmJnQuY2hhckNvZGVBdCgwKTw9XCI5XCIuY2hhckNvZGVBdCgwKX0sZj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dmFyIHI9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLmN1ck51bWJlcj1cIlwiLHIuY3VyQ29tbWFuZFR5cGU9LTEsci5jdXJDb21tYW5kUmVsYXRpdmU9ITEsci5jYW5QYXJzZUNvbW1hbmRPckNvbW1hPSEwLHIuY3VyTnVtYmVySGFzRXhwPSExLHIuY3VyTnVtYmVySGFzRXhwRGlnaXRzPSExLHIuY3VyTnVtYmVySGFzRGVjaW1hbD0hMSxyLmN1ckFyZ3M9W10scn1yZXR1cm4gcihlLHQpLGUucHJvdG90eXBlLmZpbmlzaD1mdW5jdGlvbih0KXtpZih2b2lkIDA9PT10JiYodD1bXSksdGhpcy5wYXJzZShcIiBcIix0KSwwIT09dGhpcy5jdXJBcmdzLmxlbmd0aHx8IXRoaXMuY2FuUGFyc2VDb21tYW5kT3JDb21tYSl0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJVbnRlcm1pbmF0ZWQgY29tbWFuZCBhdCB0aGUgcGF0aCBlbmQuXCIpO3JldHVybiB0fSxlLnByb3RvdHlwZS5wYXJzZT1mdW5jdGlvbih0LHIpe3ZhciBlPXRoaXM7dm9pZCAwPT09ciYmKHI9W10pO2Zvcih2YXIgaT1mdW5jdGlvbih0KXtyLnB1c2godCksZS5jdXJBcmdzLmxlbmd0aD0wLGUuY2FuUGFyc2VDb21tYW5kT3JDb21tYT0hMH0sYT0wO2E8dC5sZW5ndGg7YSsrKXt2YXIgbj10W2FdLG89ISh0aGlzLmN1ckNvbW1hbmRUeXBlIT09Xy5BUkN8fDMhPT10aGlzLmN1ckFyZ3MubGVuZ3RoJiY0IT09dGhpcy5jdXJBcmdzLmxlbmd0aHx8MSE9PXRoaXMuY3VyTnVtYmVyLmxlbmd0aHx8XCIwXCIhPT10aGlzLmN1ck51bWJlciYmXCIxXCIhPT10aGlzLmN1ck51bWJlcikscz12KG4pJiYoXCIwXCI9PT10aGlzLmN1ck51bWJlciYmXCIwXCI9PT1ufHxvKTtpZighdihuKXx8cylpZihcImVcIiE9PW4mJlwiRVwiIT09bilpZihcIi1cIiE9PW4mJlwiK1wiIT09bnx8IXRoaXMuY3VyTnVtYmVySGFzRXhwfHx0aGlzLmN1ck51bWJlckhhc0V4cERpZ2l0cylpZihcIi5cIiE9PW58fHRoaXMuY3VyTnVtYmVySGFzRXhwfHx0aGlzLmN1ck51bWJlckhhc0RlY2ltYWx8fG8pe2lmKHRoaXMuY3VyTnVtYmVyJiYtMSE9PXRoaXMuY3VyQ29tbWFuZFR5cGUpe3ZhciB1PU51bWJlcih0aGlzLmN1ck51bWJlcik7aWYoaXNOYU4odSkpdGhyb3cgbmV3IFN5bnRheEVycm9yKFwiSW52YWxpZCBudW1iZXIgZW5kaW5nIGF0IFwiK2EpO2lmKHRoaXMuY3VyQ29tbWFuZFR5cGU9PT1fLkFSQylpZigwPT09dGhpcy5jdXJBcmdzLmxlbmd0aHx8MT09PXRoaXMuY3VyQXJncy5sZW5ndGgpe2lmKDA+dSl0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0V4cGVjdGVkIHBvc2l0aXZlIG51bWJlciwgZ290IFwiJyt1KydcIiBhdCBpbmRleCBcIicrYSsnXCInKX1lbHNlIGlmKCgzPT09dGhpcy5jdXJBcmdzLmxlbmd0aHx8ND09PXRoaXMuY3VyQXJncy5sZW5ndGgpJiZcIjBcIiE9PXRoaXMuY3VyTnVtYmVyJiZcIjFcIiE9PXRoaXMuY3VyTnVtYmVyKXRocm93IG5ldyBTeW50YXhFcnJvcignRXhwZWN0ZWQgYSBmbGFnLCBnb3QgXCInK3RoaXMuY3VyTnVtYmVyKydcIiBhdCBpbmRleCBcIicrYSsnXCInKTt0aGlzLmN1ckFyZ3MucHVzaCh1KSx0aGlzLmN1ckFyZ3MubGVuZ3RoPT09Tlt0aGlzLmN1ckNvbW1hbmRUeXBlXSYmKF8uSE9SSVpfTElORV9UTz09PXRoaXMuY3VyQ29tbWFuZFR5cGU/aSh7dHlwZTpfLkhPUklaX0xJTkVfVE8scmVsYXRpdmU6dGhpcy5jdXJDb21tYW5kUmVsYXRpdmUseDp1fSk6Xy5WRVJUX0xJTkVfVE89PT10aGlzLmN1ckNvbW1hbmRUeXBlP2koe3R5cGU6Xy5WRVJUX0xJTkVfVE8scmVsYXRpdmU6dGhpcy5jdXJDb21tYW5kUmVsYXRpdmUseTp1fSk6dGhpcy5jdXJDb21tYW5kVHlwZT09PV8uTU9WRV9UT3x8dGhpcy5jdXJDb21tYW5kVHlwZT09PV8uTElORV9UT3x8dGhpcy5jdXJDb21tYW5kVHlwZT09PV8uU01PT1RIX1FVQURfVE8/KGkoe3R5cGU6dGhpcy5jdXJDb21tYW5kVHlwZSxyZWxhdGl2ZTp0aGlzLmN1ckNvbW1hbmRSZWxhdGl2ZSx4OnRoaXMuY3VyQXJnc1swXSx5OnRoaXMuY3VyQXJnc1sxXX0pLF8uTU9WRV9UTz09PXRoaXMuY3VyQ29tbWFuZFR5cGUmJih0aGlzLmN1ckNvbW1hbmRUeXBlPV8uTElORV9UTykpOnRoaXMuY3VyQ29tbWFuZFR5cGU9PT1fLkNVUlZFX1RPP2koe3R5cGU6Xy5DVVJWRV9UTyxyZWxhdGl2ZTp0aGlzLmN1ckNvbW1hbmRSZWxhdGl2ZSx4MTp0aGlzLmN1ckFyZ3NbMF0seTE6dGhpcy5jdXJBcmdzWzFdLHgyOnRoaXMuY3VyQXJnc1syXSx5Mjp0aGlzLmN1ckFyZ3NbM10seDp0aGlzLmN1ckFyZ3NbNF0seTp0aGlzLmN1ckFyZ3NbNV19KTp0aGlzLmN1ckNvbW1hbmRUeXBlPT09Xy5TTU9PVEhfQ1VSVkVfVE8/aSh7dHlwZTpfLlNNT09USF9DVVJWRV9UTyxyZWxhdGl2ZTp0aGlzLmN1ckNvbW1hbmRSZWxhdGl2ZSx4Mjp0aGlzLmN1ckFyZ3NbMF0seTI6dGhpcy5jdXJBcmdzWzFdLHg6dGhpcy5jdXJBcmdzWzJdLHk6dGhpcy5jdXJBcmdzWzNdfSk6dGhpcy5jdXJDb21tYW5kVHlwZT09PV8uUVVBRF9UTz9pKHt0eXBlOl8uUVVBRF9UTyxyZWxhdGl2ZTp0aGlzLmN1ckNvbW1hbmRSZWxhdGl2ZSx4MTp0aGlzLmN1ckFyZ3NbMF0seTE6dGhpcy5jdXJBcmdzWzFdLHg6dGhpcy5jdXJBcmdzWzJdLHk6dGhpcy5jdXJBcmdzWzNdfSk6dGhpcy5jdXJDb21tYW5kVHlwZT09PV8uQVJDJiZpKHt0eXBlOl8uQVJDLHJlbGF0aXZlOnRoaXMuY3VyQ29tbWFuZFJlbGF0aXZlLHJYOnRoaXMuY3VyQXJnc1swXSxyWTp0aGlzLmN1ckFyZ3NbMV0seFJvdDp0aGlzLmN1ckFyZ3NbMl0sbEFyY0ZsYWc6dGhpcy5jdXJBcmdzWzNdLHN3ZWVwRmxhZzp0aGlzLmN1ckFyZ3NbNF0seDp0aGlzLmN1ckFyZ3NbNV0seTp0aGlzLmN1ckFyZ3NbNl19KSksdGhpcy5jdXJOdW1iZXI9XCJcIix0aGlzLmN1ck51bWJlckhhc0V4cERpZ2l0cz0hMSx0aGlzLmN1ck51bWJlckhhc0V4cD0hMSx0aGlzLmN1ck51bWJlckhhc0RlY2ltYWw9ITEsdGhpcy5jYW5QYXJzZUNvbW1hbmRPckNvbW1hPSEwfWlmKCFUKG4pKWlmKFwiLFwiPT09biYmdGhpcy5jYW5QYXJzZUNvbW1hbmRPckNvbW1hKXRoaXMuY2FuUGFyc2VDb21tYW5kT3JDb21tYT0hMTtlbHNlIGlmKFwiK1wiIT09biYmXCItXCIhPT1uJiZcIi5cIiE9PW4paWYocyl0aGlzLmN1ck51bWJlcj1uLHRoaXMuY3VyTnVtYmVySGFzRGVjaW1hbD0hMTtlbHNle2lmKDAhPT10aGlzLmN1ckFyZ3MubGVuZ3RoKXRocm93IG5ldyBTeW50YXhFcnJvcihcIlVudGVybWluYXRlZCBjb21tYW5kIGF0IGluZGV4IFwiK2ErXCIuXCIpO2lmKCF0aGlzLmNhblBhcnNlQ29tbWFuZE9yQ29tbWEpdGhyb3cgbmV3IFN5bnRheEVycm9yKCdVbmV4cGVjdGVkIGNoYXJhY3RlciBcIicrbisnXCIgYXQgaW5kZXggJythK1wiLiBDb21tYW5kIGNhbm5vdCBmb2xsb3cgY29tbWFcIik7aWYodGhpcy5jYW5QYXJzZUNvbW1hbmRPckNvbW1hPSExLFwielwiIT09biYmXCJaXCIhPT1uKWlmKFwiaFwiPT09bnx8XCJIXCI9PT1uKXRoaXMuY3VyQ29tbWFuZFR5cGU9Xy5IT1JJWl9MSU5FX1RPLHRoaXMuY3VyQ29tbWFuZFJlbGF0aXZlPVwiaFwiPT09bjtlbHNlIGlmKFwidlwiPT09bnx8XCJWXCI9PT1uKXRoaXMuY3VyQ29tbWFuZFR5cGU9Xy5WRVJUX0xJTkVfVE8sdGhpcy5jdXJDb21tYW5kUmVsYXRpdmU9XCJ2XCI9PT1uO2Vsc2UgaWYoXCJtXCI9PT1ufHxcIk1cIj09PW4pdGhpcy5jdXJDb21tYW5kVHlwZT1fLk1PVkVfVE8sdGhpcy5jdXJDb21tYW5kUmVsYXRpdmU9XCJtXCI9PT1uO2Vsc2UgaWYoXCJsXCI9PT1ufHxcIkxcIj09PW4pdGhpcy5jdXJDb21tYW5kVHlwZT1fLkxJTkVfVE8sdGhpcy5jdXJDb21tYW5kUmVsYXRpdmU9XCJsXCI9PT1uO2Vsc2UgaWYoXCJjXCI9PT1ufHxcIkNcIj09PW4pdGhpcy5jdXJDb21tYW5kVHlwZT1fLkNVUlZFX1RPLHRoaXMuY3VyQ29tbWFuZFJlbGF0aXZlPVwiY1wiPT09bjtlbHNlIGlmKFwic1wiPT09bnx8XCJTXCI9PT1uKXRoaXMuY3VyQ29tbWFuZFR5cGU9Xy5TTU9PVEhfQ1VSVkVfVE8sdGhpcy5jdXJDb21tYW5kUmVsYXRpdmU9XCJzXCI9PT1uO2Vsc2UgaWYoXCJxXCI9PT1ufHxcIlFcIj09PW4pdGhpcy5jdXJDb21tYW5kVHlwZT1fLlFVQURfVE8sdGhpcy5jdXJDb21tYW5kUmVsYXRpdmU9XCJxXCI9PT1uO2Vsc2UgaWYoXCJ0XCI9PT1ufHxcIlRcIj09PW4pdGhpcy5jdXJDb21tYW5kVHlwZT1fLlNNT09USF9RVUFEX1RPLHRoaXMuY3VyQ29tbWFuZFJlbGF0aXZlPVwidFwiPT09bjtlbHNle2lmKFwiYVwiIT09biYmXCJBXCIhPT1uKXRocm93IG5ldyBTeW50YXhFcnJvcignVW5leHBlY3RlZCBjaGFyYWN0ZXIgXCInK24rJ1wiIGF0IGluZGV4ICcrYStcIi5cIik7dGhpcy5jdXJDb21tYW5kVHlwZT1fLkFSQyx0aGlzLmN1ckNvbW1hbmRSZWxhdGl2ZT1cImFcIj09PW59ZWxzZSByLnB1c2goe3R5cGU6Xy5DTE9TRV9QQVRIfSksdGhpcy5jYW5QYXJzZUNvbW1hbmRPckNvbW1hPSEwLHRoaXMuY3VyQ29tbWFuZFR5cGU9LTF9ZWxzZSB0aGlzLmN1ck51bWJlcj1uLHRoaXMuY3VyTnVtYmVySGFzRGVjaW1hbD1cIi5cIj09PW59ZWxzZSB0aGlzLmN1ck51bWJlcis9bix0aGlzLmN1ck51bWJlckhhc0RlY2ltYWw9ITA7ZWxzZSB0aGlzLmN1ck51bWJlcis9bjtlbHNlIHRoaXMuY3VyTnVtYmVyKz1uLHRoaXMuY3VyTnVtYmVySGFzRXhwPSEwO2Vsc2UgdGhpcy5jdXJOdW1iZXIrPW4sdGhpcy5jdXJOdW1iZXJIYXNFeHBEaWdpdHM9dGhpcy5jdXJOdW1iZXJIYXNFeHB9cmV0dXJuIHJ9LGUucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmNyZWF0ZSh0aGlzLHtwYXJzZTp7dmFsdWU6ZnVuY3Rpb24ocixlKXt2b2lkIDA9PT1lJiYoZT1bXSk7Zm9yKHZhciBpPTAsYT1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2UuY2FsbCh0aGlzLHIpO2k8YS5sZW5ndGg7aSsrKXt2YXIgbj1hW2ldLG89dChuKTtBcnJheS5pc0FycmF5KG8pP2UucHVzaC5hcHBseShlLG8pOmUucHVzaChvKX1yZXR1cm4gZX19fSl9LGV9KGwpLF89ZnVuY3Rpb24odCl7ZnVuY3Rpb24gaShyKXt2YXIgZT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGUuY29tbWFuZHM9XCJzdHJpbmdcIj09dHlwZW9mIHI/aS5wYXJzZShyKTpyLGV9cmV0dXJuIHIoaSx0KSxpLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24oKXtyZXR1cm4gaS5lbmNvZGUodGhpcy5jb21tYW5kcyl9LGkucHJvdG90eXBlLmdldEJvdW5kcz1mdW5jdGlvbigpe3ZhciB0PXUuQ0FMQ1VMQVRFX0JPVU5EUygpO3JldHVybiB0aGlzLnRyYW5zZm9ybSh0KSx0fSxpLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24odCl7Zm9yKHZhciByPVtdLGU9MCxpPXRoaXMuY29tbWFuZHM7ZTxpLmxlbmd0aDtlKyspe3ZhciBhPXQoaVtlXSk7QXJyYXkuaXNBcnJheShhKT9yLnB1c2guYXBwbHkocixhKTpyLnB1c2goYSl9cmV0dXJuIHRoaXMuY29tbWFuZHM9cix0aGlzfSxpLmVuY29kZT1mdW5jdGlvbih0KXtyZXR1cm4gZSh0KX0saS5wYXJzZT1mdW5jdGlvbih0KXt2YXIgcj1uZXcgZixlPVtdO3JldHVybiByLnBhcnNlKHQsZSksci5maW5pc2goZSksZX0saS5DTE9TRV9QQVRIPTEsaS5NT1ZFX1RPPTIsaS5IT1JJWl9MSU5FX1RPPTQsaS5WRVJUX0xJTkVfVE89OCxpLkxJTkVfVE89MTYsaS5DVVJWRV9UTz0zMixpLlNNT09USF9DVVJWRV9UTz02NCxpLlFVQURfVE89MTI4LGkuU01PT1RIX1FVQURfVE89MjU2LGkuQVJDPTUxMixpLkxJTkVfQ09NTUFORFM9aS5MSU5FX1RPfGkuSE9SSVpfTElORV9UT3xpLlZFUlRfTElORV9UTyxpLkRSQVdJTkdfQ09NTUFORFM9aS5IT1JJWl9MSU5FX1RPfGkuVkVSVF9MSU5FX1RPfGkuTElORV9UT3xpLkNVUlZFX1RPfGkuU01PT1RIX0NVUlZFX1RPfGkuUVVBRF9UT3xpLlNNT09USF9RVUFEX1RPfGkuQVJDLGl9KGwpLE49KChPPXt9KVtfLk1PVkVfVE9dPTIsT1tfLkxJTkVfVE9dPTIsT1tfLkhPUklaX0xJTkVfVE9dPTEsT1tfLlZFUlRfTElORV9UT109MSxPW18uQ0xPU0VfUEFUSF09MCxPW18uUVVBRF9UT109NCxPW18uU01PT1RIX1FVQURfVE9dPTIsT1tfLkNVUlZFX1RPXT02LE9bXy5TTU9PVEhfQ1VSVkVfVE9dPTQsT1tfLkFSQ109NyxPKTtleHBvcnR7TiBhcyBDT01NQU5EX0FSR19DT1VOVFMsXyBhcyBTVkdQYXRoRGF0YSxmIGFzIFNWR1BhdGhEYXRhUGFyc2VyLHUgYXMgU1ZHUGF0aERhdGFUcmFuc2Zvcm1lcixlIGFzIGVuY29kZVNWR1BhdGh9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9U1ZHUGF0aERhdGEubW9kdWxlLmpzLm1hcFxuIiwiZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikge1xuICAgIF90eXBlb2YgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIG9iajtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIF90eXBlb2YgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIF90eXBlb2Yob2JqKTtcbn1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn1cblxuLyogZXNsaW50LWRpc2FibGUgbm8tYml0d2lzZSAtLSB1c2VkIGZvciBjYWxjdWxhdGlvbnMgKi9cblxuLyogZXNsaW50LWRpc2FibGUgdW5pY29ybi9wcmVmZXItcXVlcnktc2VsZWN0b3IgLS0gYWltaW5nIGF0XG4gIGJhY2t3YXJkLWNvbXBhdGliaWxpdHkgKi9cblxuLyoqXG4qIFN0YWNrQmx1ciAtIGEgZmFzdCBhbG1vc3QgR2F1c3NpYW4gQmx1ciBGb3IgQ2FudmFzXG4qXG4qIEluIGNhc2UgeW91IGZpbmQgdGhpcyBjbGFzcyB1c2VmdWwgLSBlc3BlY2lhbGx5IGluIGNvbW1lcmNpYWwgcHJvamVjdHMgLVxuKiBJIGFtIG5vdCB0b3RhbGx5IHVuaGFwcHkgZm9yIGEgc21hbGwgZG9uYXRpb24gdG8gbXkgUGF5UGFsIGFjY291bnRcbiogbWFyaW9AcXVhc2ltb25kby5kZVxuKlxuKiBPciBzdXBwb3J0IG1lIG9uIGZsYXR0cjpcbioge0BsaW5rIGh0dHBzOi8vZmxhdHRyLmNvbS90aGluZy83Mjc5MS9TdGFja0JsdXItYS1mYXN0LWFsbW9zdC1HYXVzc2lhbi1CbHVyLUVmZmVjdC1mb3ItQ2FudmFzSmF2YXNjcmlwdH0uXG4qXG4qIEBtb2R1bGUgU3RhY2tCbHVyXG4qIEBhdXRob3IgTWFyaW8gS2xpbmdlbWFublxuKiBDb250YWN0OiBtYXJpb0BxdWFzaW1vbmRvLmNvbVxuKiBXZWJzaXRlOiB7QGxpbmsgaHR0cDovL3d3dy5xdWFzaW1vbmRvLmNvbS9TdGFja0JsdXJGb3JDYW52YXMvU3RhY2tCbHVyRGVtby5odG1sfVxuKiBUd2l0dGVyOiBAcXVhc2ltb25kb1xuKlxuKiBAY29weXJpZ2h0IChjKSAyMDEwIE1hcmlvIEtsaW5nZW1hbm5cbipcbiogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb25cbiogb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb25cbiogZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0XG4qIHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLFxuKiBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGVcbiogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmdcbiogY29uZGl0aW9uczpcbipcbiogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmVcbiogaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4qXG4qIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsXG4qIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFU1xuKiBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORFxuKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVFxuKiBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSxcbiogV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HXG4qIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1JcbiogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbnZhciBtdWxUYWJsZSA9IFs1MTIsIDUxMiwgNDU2LCA1MTIsIDMyOCwgNDU2LCAzMzUsIDUxMiwgNDA1LCAzMjgsIDI3MSwgNDU2LCAzODgsIDMzNSwgMjkyLCA1MTIsIDQ1NCwgNDA1LCAzNjQsIDMyOCwgMjk4LCAyNzEsIDQ5NiwgNDU2LCA0MjAsIDM4OCwgMzYwLCAzMzUsIDMxMiwgMjkyLCAyNzMsIDUxMiwgNDgyLCA0NTQsIDQyOCwgNDA1LCAzODMsIDM2NCwgMzQ1LCAzMjgsIDMxMiwgMjk4LCAyODQsIDI3MSwgMjU5LCA0OTYsIDQ3NSwgNDU2LCA0MzcsIDQyMCwgNDA0LCAzODgsIDM3NCwgMzYwLCAzNDcsIDMzNSwgMzIzLCAzMTIsIDMwMiwgMjkyLCAyODIsIDI3MywgMjY1LCA1MTIsIDQ5NywgNDgyLCA0NjgsIDQ1NCwgNDQxLCA0MjgsIDQxNywgNDA1LCAzOTQsIDM4MywgMzczLCAzNjQsIDM1NCwgMzQ1LCAzMzcsIDMyOCwgMzIwLCAzMTIsIDMwNSwgMjk4LCAyOTEsIDI4NCwgMjc4LCAyNzEsIDI2NSwgMjU5LCA1MDcsIDQ5NiwgNDg1LCA0NzUsIDQ2NSwgNDU2LCA0NDYsIDQzNywgNDI4LCA0MjAsIDQxMiwgNDA0LCAzOTYsIDM4OCwgMzgxLCAzNzQsIDM2NywgMzYwLCAzNTQsIDM0NywgMzQxLCAzMzUsIDMyOSwgMzIzLCAzMTgsIDMxMiwgMzA3LCAzMDIsIDI5NywgMjkyLCAyODcsIDI4MiwgMjc4LCAyNzMsIDI2OSwgMjY1LCAyNjEsIDUxMiwgNTA1LCA0OTcsIDQ4OSwgNDgyLCA0NzUsIDQ2OCwgNDYxLCA0NTQsIDQ0NywgNDQxLCA0MzUsIDQyOCwgNDIyLCA0MTcsIDQxMSwgNDA1LCAzOTksIDM5NCwgMzg5LCAzODMsIDM3OCwgMzczLCAzNjgsIDM2NCwgMzU5LCAzNTQsIDM1MCwgMzQ1LCAzNDEsIDMzNywgMzMyLCAzMjgsIDMyNCwgMzIwLCAzMTYsIDMxMiwgMzA5LCAzMDUsIDMwMSwgMjk4LCAyOTQsIDI5MSwgMjg3LCAyODQsIDI4MSwgMjc4LCAyNzQsIDI3MSwgMjY4LCAyNjUsIDI2MiwgMjU5LCAyNTcsIDUwNywgNTAxLCA0OTYsIDQ5MSwgNDg1LCA0ODAsIDQ3NSwgNDcwLCA0NjUsIDQ2MCwgNDU2LCA0NTEsIDQ0NiwgNDQyLCA0MzcsIDQzMywgNDI4LCA0MjQsIDQyMCwgNDE2LCA0MTIsIDQwOCwgNDA0LCA0MDAsIDM5NiwgMzkyLCAzODgsIDM4NSwgMzgxLCAzNzcsIDM3NCwgMzcwLCAzNjcsIDM2MywgMzYwLCAzNTcsIDM1NCwgMzUwLCAzNDcsIDM0NCwgMzQxLCAzMzgsIDMzNSwgMzMyLCAzMjksIDMyNiwgMzIzLCAzMjAsIDMxOCwgMzE1LCAzMTIsIDMxMCwgMzA3LCAzMDQsIDMwMiwgMjk5LCAyOTcsIDI5NCwgMjkyLCAyODksIDI4NywgMjg1LCAyODIsIDI4MCwgMjc4LCAyNzUsIDI3MywgMjcxLCAyNjksIDI2NywgMjY1LCAyNjMsIDI2MSwgMjU5XTtcbnZhciBzaGdUYWJsZSA9IFs5LCAxMSwgMTIsIDEzLCAxMywgMTQsIDE0LCAxNSwgMTUsIDE1LCAxNSwgMTYsIDE2LCAxNiwgMTYsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIyLCAyMiwgMjIsIDIyLCAyMiwgMjIsIDIyLCAyMiwgMjIsIDIyLCAyMiwgMjIsIDIyLCAyMiwgMjIsIDIyLCAyMiwgMjIsIDIyLCAyMiwgMjIsIDIyLCAyMiwgMjIsIDIyLCAyMiwgMjIsIDIyLCAyMiwgMjIsIDIyLCAyMiwgMjIsIDIyLCAyMiwgMjIsIDIyLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjRdO1xuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ3xIVE1MSW1hZ2VFbGVtZW50fSBpbWdcbiAqIEBwYXJhbSB7c3RyaW5nfEhUTUxDYW52YXNFbGVtZW50fSBjYW52YXNcbiAqIEBwYXJhbSB7RmxvYXR9IHJhZGl1c1xuICogQHBhcmFtIHtib29sZWFufSBibHVyQWxwaGFDaGFubmVsXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHVzZU9mZnNldFxuICogQHBhcmFtIHtib29sZWFufSBza2lwU3R5bGVzXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICovXG5cbmZ1bmN0aW9uIHByb2Nlc3NJbWFnZShpbWcsIGNhbnZhcywgcmFkaXVzLCBibHVyQWxwaGFDaGFubmVsLCB1c2VPZmZzZXQsIHNraXBTdHlsZXMpIHtcbiAgaWYgKHR5cGVvZiBpbWcgPT09ICdzdHJpbmcnKSB7XG4gICAgaW1nID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaW1nKTtcbiAgfVxuXG4gIGlmICghaW1nIHx8IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbWcpLnNsaWNlKDgsIC0xKSA9PT0gJ0hUTUxJbWFnZUVsZW1lbnQnICYmICEoJ25hdHVyYWxXaWR0aCcgaW4gaW1nKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBkaW1lbnNpb25UeXBlID0gdXNlT2Zmc2V0ID8gJ29mZnNldCcgOiAnbmF0dXJhbCc7XG4gIHZhciB3ID0gaW1nW2RpbWVuc2lvblR5cGUgKyAnV2lkdGgnXTtcbiAgdmFyIGggPSBpbWdbZGltZW5zaW9uVHlwZSArICdIZWlnaHQnXTsgLy8gYWRkIEltYWdlQml0bWFwIHN1cHBvcnQsY2FuIGJsdXIgdGV4dHVyZSBzb3VyY2VcblxuICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGltZykuc2xpY2UoOCwgLTEpID09PSAnSW1hZ2VCaXRtYXAnKSB7XG4gICAgdyA9IGltZy53aWR0aDtcbiAgICBoID0gaW1nLmhlaWdodDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgY2FudmFzID09PSAnc3RyaW5nJykge1xuICAgIGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGNhbnZhcyk7XG4gIH1cblxuICBpZiAoIWNhbnZhcyB8fCAhKCdnZXRDb250ZXh0JyBpbiBjYW52YXMpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKCFza2lwU3R5bGVzKSB7XG4gICAgY2FudmFzLnN0eWxlLndpZHRoID0gdyArICdweCc7XG4gICAgY2FudmFzLnN0eWxlLmhlaWdodCA9IGggKyAncHgnO1xuICB9XG5cbiAgY2FudmFzLndpZHRoID0gdztcbiAgY2FudmFzLmhlaWdodCA9IGg7XG4gIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gIGNvbnRleHQuY2xlYXJSZWN0KDAsIDAsIHcsIGgpO1xuICBjb250ZXh0LmRyYXdJbWFnZShpbWcsIDAsIDAsIGltZy5uYXR1cmFsV2lkdGgsIGltZy5uYXR1cmFsSGVpZ2h0LCAwLCAwLCB3LCBoKTtcblxuICBpZiAoaXNOYU4ocmFkaXVzKSB8fCByYWRpdXMgPCAxKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGJsdXJBbHBoYUNoYW5uZWwpIHtcbiAgICBwcm9jZXNzQ2FudmFzUkdCQShjYW52YXMsIDAsIDAsIHcsIGgsIHJhZGl1cyk7XG4gIH0gZWxzZSB7XG4gICAgcHJvY2Vzc0NhbnZhc1JHQihjYW52YXMsIDAsIDAsIHcsIGgsIHJhZGl1cyk7XG4gIH1cbn1cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd8SFRNTENhbnZhc0VsZW1lbnR9IGNhbnZhc1xuICogQHBhcmFtIHtJbnRlZ2VyfSB0b3BYXG4gKiBAcGFyYW0ge0ludGVnZXJ9IHRvcFlcbiAqIEBwYXJhbSB7SW50ZWdlcn0gd2lkdGhcbiAqIEBwYXJhbSB7SW50ZWdlcn0gaGVpZ2h0XG4gKiBAdGhyb3dzIHtFcnJvcnxUeXBlRXJyb3J9XG4gKiBAcmV0dXJucyB7SW1hZ2VEYXRhfSBTZWUge0BsaW5rIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2NhbnZhcy5odG1sI2ltYWdlZGF0YX1cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldEltYWdlRGF0YUZyb21DYW52YXMoY2FudmFzLCB0b3BYLCB0b3BZLCB3aWR0aCwgaGVpZ2h0KSB7XG4gIGlmICh0eXBlb2YgY2FudmFzID09PSAnc3RyaW5nJykge1xuICAgIGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGNhbnZhcyk7XG4gIH1cblxuICBpZiAoIWNhbnZhcyB8fCBfdHlwZW9mKGNhbnZhcykgIT09ICdvYmplY3QnIHx8ICEoJ2dldENvbnRleHQnIGluIGNhbnZhcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RpbmcgY2FudmFzIHdpdGggYGdldENvbnRleHRgIG1ldGhvZCAnICsgJ2luIHByb2Nlc3NDYW52YXNSR0IoQSkgY2FsbHMhJyk7XG4gIH1cblxuICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGNvbnRleHQuZ2V0SW1hZ2VEYXRhKHRvcFgsIHRvcFksIHdpZHRoLCBoZWlnaHQpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1bmFibGUgdG8gYWNjZXNzIGltYWdlIGRhdGE6ICcgKyBlKTtcbiAgfVxufVxuLyoqXG4gKiBAcGFyYW0ge0hUTUxDYW52YXNFbGVtZW50fSBjYW52YXNcbiAqIEBwYXJhbSB7SW50ZWdlcn0gdG9wWFxuICogQHBhcmFtIHtJbnRlZ2VyfSB0b3BZXG4gKiBAcGFyYW0ge0ludGVnZXJ9IHdpZHRoXG4gKiBAcGFyYW0ge0ludGVnZXJ9IGhlaWdodFxuICogQHBhcmFtIHtGbG9hdH0gcmFkaXVzXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICovXG5cblxuZnVuY3Rpb24gcHJvY2Vzc0NhbnZhc1JHQkEoY2FudmFzLCB0b3BYLCB0b3BZLCB3aWR0aCwgaGVpZ2h0LCByYWRpdXMpIHtcbiAgaWYgKGlzTmFOKHJhZGl1cykgfHwgcmFkaXVzIDwgMSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHJhZGl1cyB8PSAwO1xuICB2YXIgaW1hZ2VEYXRhID0gZ2V0SW1hZ2VEYXRhRnJvbUNhbnZhcyhjYW52YXMsIHRvcFgsIHRvcFksIHdpZHRoLCBoZWlnaHQpO1xuICBpbWFnZURhdGEgPSBwcm9jZXNzSW1hZ2VEYXRhUkdCQShpbWFnZURhdGEsIHRvcFgsIHRvcFksIHdpZHRoLCBoZWlnaHQsIHJhZGl1cyk7XG4gIGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpLnB1dEltYWdlRGF0YShpbWFnZURhdGEsIHRvcFgsIHRvcFkpO1xufVxuLyoqXG4gKiBAcGFyYW0ge0ltYWdlRGF0YX0gaW1hZ2VEYXRhXG4gKiBAcGFyYW0ge0ludGVnZXJ9IHRvcFhcbiAqIEBwYXJhbSB7SW50ZWdlcn0gdG9wWVxuICogQHBhcmFtIHtJbnRlZ2VyfSB3aWR0aFxuICogQHBhcmFtIHtJbnRlZ2VyfSBoZWlnaHRcbiAqIEBwYXJhbSB7RmxvYXR9IHJhZGl1c1xuICogQHJldHVybnMge0ltYWdlRGF0YX1cbiAqL1xuXG5cbmZ1bmN0aW9uIHByb2Nlc3NJbWFnZURhdGFSR0JBKGltYWdlRGF0YSwgdG9wWCwgdG9wWSwgd2lkdGgsIGhlaWdodCwgcmFkaXVzKSB7XG4gIHZhciBwaXhlbHMgPSBpbWFnZURhdGEuZGF0YTtcbiAgdmFyIGRpdiA9IDIgKiByYWRpdXMgKyAxOyAvLyBjb25zdCB3NCA9IHdpZHRoIDw8IDI7XG5cbiAgdmFyIHdpZHRoTWludXMxID0gd2lkdGggLSAxO1xuICB2YXIgaGVpZ2h0TWludXMxID0gaGVpZ2h0IC0gMTtcbiAgdmFyIHJhZGl1c1BsdXMxID0gcmFkaXVzICsgMTtcbiAgdmFyIHN1bUZhY3RvciA9IHJhZGl1c1BsdXMxICogKHJhZGl1c1BsdXMxICsgMSkgLyAyO1xuICB2YXIgc3RhY2tTdGFydCA9IG5ldyBCbHVyU3RhY2soKTtcbiAgdmFyIHN0YWNrID0gc3RhY2tTdGFydDtcbiAgdmFyIHN0YWNrRW5kO1xuXG4gIGZvciAodmFyIGkgPSAxOyBpIDwgZGl2OyBpKyspIHtcbiAgICBzdGFjayA9IHN0YWNrLm5leHQgPSBuZXcgQmx1clN0YWNrKCk7XG5cbiAgICBpZiAoaSA9PT0gcmFkaXVzUGx1czEpIHtcbiAgICAgIHN0YWNrRW5kID0gc3RhY2s7XG4gICAgfVxuICB9XG5cbiAgc3RhY2submV4dCA9IHN0YWNrU3RhcnQ7XG4gIHZhciBzdGFja0luID0gbnVsbCxcbiAgICAgIHN0YWNrT3V0ID0gbnVsbCxcbiAgICAgIHl3ID0gMCxcbiAgICAgIHlpID0gMDtcbiAgdmFyIG11bFN1bSA9IG11bFRhYmxlW3JhZGl1c107XG4gIHZhciBzaGdTdW0gPSBzaGdUYWJsZVtyYWRpdXNdO1xuXG4gIGZvciAodmFyIHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHtcbiAgICBzdGFjayA9IHN0YWNrU3RhcnQ7XG4gICAgdmFyIHByID0gcGl4ZWxzW3lpXSxcbiAgICAgICAgcGcgPSBwaXhlbHNbeWkgKyAxXSxcbiAgICAgICAgcGIgPSBwaXhlbHNbeWkgKyAyXSxcbiAgICAgICAgcGEgPSBwaXhlbHNbeWkgKyAzXTtcblxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCByYWRpdXNQbHVzMTsgX2krKykge1xuICAgICAgc3RhY2suciA9IHByO1xuICAgICAgc3RhY2suZyA9IHBnO1xuICAgICAgc3RhY2suYiA9IHBiO1xuICAgICAgc3RhY2suYSA9IHBhO1xuICAgICAgc3RhY2sgPSBzdGFjay5uZXh0O1xuICAgIH1cblxuICAgIHZhciBySW5TdW0gPSAwLFxuICAgICAgICBnSW5TdW0gPSAwLFxuICAgICAgICBiSW5TdW0gPSAwLFxuICAgICAgICBhSW5TdW0gPSAwLFxuICAgICAgICByT3V0U3VtID0gcmFkaXVzUGx1czEgKiBwcixcbiAgICAgICAgZ091dFN1bSA9IHJhZGl1c1BsdXMxICogcGcsXG4gICAgICAgIGJPdXRTdW0gPSByYWRpdXNQbHVzMSAqIHBiLFxuICAgICAgICBhT3V0U3VtID0gcmFkaXVzUGx1czEgKiBwYSxcbiAgICAgICAgclN1bSA9IHN1bUZhY3RvciAqIHByLFxuICAgICAgICBnU3VtID0gc3VtRmFjdG9yICogcGcsXG4gICAgICAgIGJTdW0gPSBzdW1GYWN0b3IgKiBwYixcbiAgICAgICAgYVN1bSA9IHN1bUZhY3RvciAqIHBhO1xuXG4gICAgZm9yICh2YXIgX2kyID0gMTsgX2kyIDwgcmFkaXVzUGx1czE7IF9pMisrKSB7XG4gICAgICB2YXIgcCA9IHlpICsgKCh3aWR0aE1pbnVzMSA8IF9pMiA/IHdpZHRoTWludXMxIDogX2kyKSA8PCAyKTtcbiAgICAgIHZhciByID0gcGl4ZWxzW3BdLFxuICAgICAgICAgIGcgPSBwaXhlbHNbcCArIDFdLFxuICAgICAgICAgIGIgPSBwaXhlbHNbcCArIDJdLFxuICAgICAgICAgIGEgPSBwaXhlbHNbcCArIDNdO1xuICAgICAgdmFyIHJicyA9IHJhZGl1c1BsdXMxIC0gX2kyO1xuICAgICAgclN1bSArPSAoc3RhY2suciA9IHIpICogcmJzO1xuICAgICAgZ1N1bSArPSAoc3RhY2suZyA9IGcpICogcmJzO1xuICAgICAgYlN1bSArPSAoc3RhY2suYiA9IGIpICogcmJzO1xuICAgICAgYVN1bSArPSAoc3RhY2suYSA9IGEpICogcmJzO1xuICAgICAgckluU3VtICs9IHI7XG4gICAgICBnSW5TdW0gKz0gZztcbiAgICAgIGJJblN1bSArPSBiO1xuICAgICAgYUluU3VtICs9IGE7XG4gICAgICBzdGFjayA9IHN0YWNrLm5leHQ7XG4gICAgfVxuXG4gICAgc3RhY2tJbiA9IHN0YWNrU3RhcnQ7XG4gICAgc3RhY2tPdXQgPSBzdGFja0VuZDtcblxuICAgIGZvciAodmFyIHggPSAwOyB4IDwgd2lkdGg7IHgrKykge1xuICAgICAgdmFyIHBhSW5pdGlhbCA9IGFTdW0gKiBtdWxTdW0gPj4+IHNoZ1N1bTtcbiAgICAgIHBpeGVsc1t5aSArIDNdID0gcGFJbml0aWFsO1xuXG4gICAgICBpZiAocGFJbml0aWFsICE9PSAwKSB7XG4gICAgICAgIHZhciBfYTIgPSAyNTUgLyBwYUluaXRpYWw7XG5cbiAgICAgICAgcGl4ZWxzW3lpXSA9IChyU3VtICogbXVsU3VtID4+PiBzaGdTdW0pICogX2EyO1xuICAgICAgICBwaXhlbHNbeWkgKyAxXSA9IChnU3VtICogbXVsU3VtID4+PiBzaGdTdW0pICogX2EyO1xuICAgICAgICBwaXhlbHNbeWkgKyAyXSA9IChiU3VtICogbXVsU3VtID4+PiBzaGdTdW0pICogX2EyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGl4ZWxzW3lpXSA9IHBpeGVsc1t5aSArIDFdID0gcGl4ZWxzW3lpICsgMl0gPSAwO1xuICAgICAgfVxuXG4gICAgICByU3VtIC09IHJPdXRTdW07XG4gICAgICBnU3VtIC09IGdPdXRTdW07XG4gICAgICBiU3VtIC09IGJPdXRTdW07XG4gICAgICBhU3VtIC09IGFPdXRTdW07XG4gICAgICByT3V0U3VtIC09IHN0YWNrSW4ucjtcbiAgICAgIGdPdXRTdW0gLT0gc3RhY2tJbi5nO1xuICAgICAgYk91dFN1bSAtPSBzdGFja0luLmI7XG4gICAgICBhT3V0U3VtIC09IHN0YWNrSW4uYTtcblxuICAgICAgdmFyIF9wID0geCArIHJhZGl1cyArIDE7XG5cbiAgICAgIF9wID0geXcgKyAoX3AgPCB3aWR0aE1pbnVzMSA/IF9wIDogd2lkdGhNaW51czEpIDw8IDI7XG4gICAgICBySW5TdW0gKz0gc3RhY2tJbi5yID0gcGl4ZWxzW19wXTtcbiAgICAgIGdJblN1bSArPSBzdGFja0luLmcgPSBwaXhlbHNbX3AgKyAxXTtcbiAgICAgIGJJblN1bSArPSBzdGFja0luLmIgPSBwaXhlbHNbX3AgKyAyXTtcbiAgICAgIGFJblN1bSArPSBzdGFja0luLmEgPSBwaXhlbHNbX3AgKyAzXTtcbiAgICAgIHJTdW0gKz0gckluU3VtO1xuICAgICAgZ1N1bSArPSBnSW5TdW07XG4gICAgICBiU3VtICs9IGJJblN1bTtcbiAgICAgIGFTdW0gKz0gYUluU3VtO1xuICAgICAgc3RhY2tJbiA9IHN0YWNrSW4ubmV4dDtcbiAgICAgIHZhciBfc3RhY2tPdXQgPSBzdGFja091dCxcbiAgICAgICAgICBfciA9IF9zdGFja091dC5yLFxuICAgICAgICAgIF9nID0gX3N0YWNrT3V0LmcsXG4gICAgICAgICAgX2IgPSBfc3RhY2tPdXQuYixcbiAgICAgICAgICBfYSA9IF9zdGFja091dC5hO1xuICAgICAgck91dFN1bSArPSBfcjtcbiAgICAgIGdPdXRTdW0gKz0gX2c7XG4gICAgICBiT3V0U3VtICs9IF9iO1xuICAgICAgYU91dFN1bSArPSBfYTtcbiAgICAgIHJJblN1bSAtPSBfcjtcbiAgICAgIGdJblN1bSAtPSBfZztcbiAgICAgIGJJblN1bSAtPSBfYjtcbiAgICAgIGFJblN1bSAtPSBfYTtcbiAgICAgIHN0YWNrT3V0ID0gc3RhY2tPdXQubmV4dDtcbiAgICAgIHlpICs9IDQ7XG4gICAgfVxuXG4gICAgeXcgKz0gd2lkdGg7XG4gIH1cblxuICBmb3IgKHZhciBfeCA9IDA7IF94IDwgd2lkdGg7IF94KyspIHtcbiAgICB5aSA9IF94IDw8IDI7XG5cbiAgICB2YXIgX3ByID0gcGl4ZWxzW3lpXSxcbiAgICAgICAgX3BnID0gcGl4ZWxzW3lpICsgMV0sXG4gICAgICAgIF9wYiA9IHBpeGVsc1t5aSArIDJdLFxuICAgICAgICBfcGEgPSBwaXhlbHNbeWkgKyAzXSxcbiAgICAgICAgX3JPdXRTdW0gPSByYWRpdXNQbHVzMSAqIF9wcixcbiAgICAgICAgX2dPdXRTdW0gPSByYWRpdXNQbHVzMSAqIF9wZyxcbiAgICAgICAgX2JPdXRTdW0gPSByYWRpdXNQbHVzMSAqIF9wYixcbiAgICAgICAgX2FPdXRTdW0gPSByYWRpdXNQbHVzMSAqIF9wYSxcbiAgICAgICAgX3JTdW0gPSBzdW1GYWN0b3IgKiBfcHIsXG4gICAgICAgIF9nU3VtID0gc3VtRmFjdG9yICogX3BnLFxuICAgICAgICBfYlN1bSA9IHN1bUZhY3RvciAqIF9wYixcbiAgICAgICAgX2FTdW0gPSBzdW1GYWN0b3IgKiBfcGE7XG5cbiAgICBzdGFjayA9IHN0YWNrU3RhcnQ7XG5cbiAgICBmb3IgKHZhciBfaTMgPSAwOyBfaTMgPCByYWRpdXNQbHVzMTsgX2kzKyspIHtcbiAgICAgIHN0YWNrLnIgPSBfcHI7XG4gICAgICBzdGFjay5nID0gX3BnO1xuICAgICAgc3RhY2suYiA9IF9wYjtcbiAgICAgIHN0YWNrLmEgPSBfcGE7XG4gICAgICBzdGFjayA9IHN0YWNrLm5leHQ7XG4gICAgfVxuXG4gICAgdmFyIHlwID0gd2lkdGg7XG4gICAgdmFyIF9nSW5TdW0gPSAwLFxuICAgICAgICBfYkluU3VtID0gMCxcbiAgICAgICAgX2FJblN1bSA9IDAsXG4gICAgICAgIF9ySW5TdW0gPSAwO1xuXG4gICAgZm9yICh2YXIgX2k0ID0gMTsgX2k0IDw9IHJhZGl1czsgX2k0KyspIHtcbiAgICAgIHlpID0geXAgKyBfeCA8PCAyO1xuXG4gICAgICB2YXIgX3JicyA9IHJhZGl1c1BsdXMxIC0gX2k0O1xuXG4gICAgICBfclN1bSArPSAoc3RhY2suciA9IF9wciA9IHBpeGVsc1t5aV0pICogX3JicztcbiAgICAgIF9nU3VtICs9IChzdGFjay5nID0gX3BnID0gcGl4ZWxzW3lpICsgMV0pICogX3JicztcbiAgICAgIF9iU3VtICs9IChzdGFjay5iID0gX3BiID0gcGl4ZWxzW3lpICsgMl0pICogX3JicztcbiAgICAgIF9hU3VtICs9IChzdGFjay5hID0gX3BhID0gcGl4ZWxzW3lpICsgM10pICogX3JicztcbiAgICAgIF9ySW5TdW0gKz0gX3ByO1xuICAgICAgX2dJblN1bSArPSBfcGc7XG4gICAgICBfYkluU3VtICs9IF9wYjtcbiAgICAgIF9hSW5TdW0gKz0gX3BhO1xuICAgICAgc3RhY2sgPSBzdGFjay5uZXh0O1xuXG4gICAgICBpZiAoX2k0IDwgaGVpZ2h0TWludXMxKSB7XG4gICAgICAgIHlwICs9IHdpZHRoO1xuICAgICAgfVxuICAgIH1cblxuICAgIHlpID0gX3g7XG4gICAgc3RhY2tJbiA9IHN0YWNrU3RhcnQ7XG4gICAgc3RhY2tPdXQgPSBzdGFja0VuZDtcblxuICAgIGZvciAodmFyIF95ID0gMDsgX3kgPCBoZWlnaHQ7IF95KyspIHtcbiAgICAgIHZhciBfcDIgPSB5aSA8PCAyO1xuXG4gICAgICBwaXhlbHNbX3AyICsgM10gPSBfcGEgPSBfYVN1bSAqIG11bFN1bSA+Pj4gc2hnU3VtO1xuXG4gICAgICBpZiAoX3BhID4gMCkge1xuICAgICAgICBfcGEgPSAyNTUgLyBfcGE7XG4gICAgICAgIHBpeGVsc1tfcDJdID0gKF9yU3VtICogbXVsU3VtID4+PiBzaGdTdW0pICogX3BhO1xuICAgICAgICBwaXhlbHNbX3AyICsgMV0gPSAoX2dTdW0gKiBtdWxTdW0gPj4+IHNoZ1N1bSkgKiBfcGE7XG4gICAgICAgIHBpeGVsc1tfcDIgKyAyXSA9IChfYlN1bSAqIG11bFN1bSA+Pj4gc2hnU3VtKSAqIF9wYTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBpeGVsc1tfcDJdID0gcGl4ZWxzW19wMiArIDFdID0gcGl4ZWxzW19wMiArIDJdID0gMDtcbiAgICAgIH1cblxuICAgICAgX3JTdW0gLT0gX3JPdXRTdW07XG4gICAgICBfZ1N1bSAtPSBfZ091dFN1bTtcbiAgICAgIF9iU3VtIC09IF9iT3V0U3VtO1xuICAgICAgX2FTdW0gLT0gX2FPdXRTdW07XG4gICAgICBfck91dFN1bSAtPSBzdGFja0luLnI7XG4gICAgICBfZ091dFN1bSAtPSBzdGFja0luLmc7XG4gICAgICBfYk91dFN1bSAtPSBzdGFja0luLmI7XG4gICAgICBfYU91dFN1bSAtPSBzdGFja0luLmE7XG4gICAgICBfcDIgPSBfeCArICgoX3AyID0gX3kgKyByYWRpdXNQbHVzMSkgPCBoZWlnaHRNaW51czEgPyBfcDIgOiBoZWlnaHRNaW51czEpICogd2lkdGggPDwgMjtcbiAgICAgIF9yU3VtICs9IF9ySW5TdW0gKz0gc3RhY2tJbi5yID0gcGl4ZWxzW19wMl07XG4gICAgICBfZ1N1bSArPSBfZ0luU3VtICs9IHN0YWNrSW4uZyA9IHBpeGVsc1tfcDIgKyAxXTtcbiAgICAgIF9iU3VtICs9IF9iSW5TdW0gKz0gc3RhY2tJbi5iID0gcGl4ZWxzW19wMiArIDJdO1xuICAgICAgX2FTdW0gKz0gX2FJblN1bSArPSBzdGFja0luLmEgPSBwaXhlbHNbX3AyICsgM107XG4gICAgICBzdGFja0luID0gc3RhY2tJbi5uZXh0O1xuICAgICAgX3JPdXRTdW0gKz0gX3ByID0gc3RhY2tPdXQucjtcbiAgICAgIF9nT3V0U3VtICs9IF9wZyA9IHN0YWNrT3V0Lmc7XG4gICAgICBfYk91dFN1bSArPSBfcGIgPSBzdGFja091dC5iO1xuICAgICAgX2FPdXRTdW0gKz0gX3BhID0gc3RhY2tPdXQuYTtcbiAgICAgIF9ySW5TdW0gLT0gX3ByO1xuICAgICAgX2dJblN1bSAtPSBfcGc7XG4gICAgICBfYkluU3VtIC09IF9wYjtcbiAgICAgIF9hSW5TdW0gLT0gX3BhO1xuICAgICAgc3RhY2tPdXQgPSBzdGFja091dC5uZXh0O1xuICAgICAgeWkgKz0gd2lkdGg7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGltYWdlRGF0YTtcbn1cbi8qKlxuICogQHBhcmFtIHtIVE1MQ2FudmFzRWxlbWVudH0gY2FudmFzXG4gKiBAcGFyYW0ge0ludGVnZXJ9IHRvcFhcbiAqIEBwYXJhbSB7SW50ZWdlcn0gdG9wWVxuICogQHBhcmFtIHtJbnRlZ2VyfSB3aWR0aFxuICogQHBhcmFtIHtJbnRlZ2VyfSBoZWlnaHRcbiAqIEBwYXJhbSB7RmxvYXR9IHJhZGl1c1xuICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAqL1xuXG5cbmZ1bmN0aW9uIHByb2Nlc3NDYW52YXNSR0IoY2FudmFzLCB0b3BYLCB0b3BZLCB3aWR0aCwgaGVpZ2h0LCByYWRpdXMpIHtcbiAgaWYgKGlzTmFOKHJhZGl1cykgfHwgcmFkaXVzIDwgMSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHJhZGl1cyB8PSAwO1xuICB2YXIgaW1hZ2VEYXRhID0gZ2V0SW1hZ2VEYXRhRnJvbUNhbnZhcyhjYW52YXMsIHRvcFgsIHRvcFksIHdpZHRoLCBoZWlnaHQpO1xuICBpbWFnZURhdGEgPSBwcm9jZXNzSW1hZ2VEYXRhUkdCKGltYWdlRGF0YSwgdG9wWCwgdG9wWSwgd2lkdGgsIGhlaWdodCwgcmFkaXVzKTtcbiAgY2FudmFzLmdldENvbnRleHQoJzJkJykucHV0SW1hZ2VEYXRhKGltYWdlRGF0YSwgdG9wWCwgdG9wWSk7XG59XG4vKipcbiAqIEBwYXJhbSB7SW1hZ2VEYXRhfSBpbWFnZURhdGFcbiAqIEBwYXJhbSB7SW50ZWdlcn0gdG9wWFxuICogQHBhcmFtIHtJbnRlZ2VyfSB0b3BZXG4gKiBAcGFyYW0ge0ludGVnZXJ9IHdpZHRoXG4gKiBAcGFyYW0ge0ludGVnZXJ9IGhlaWdodFxuICogQHBhcmFtIHtGbG9hdH0gcmFkaXVzXG4gKiBAcmV0dXJucyB7SW1hZ2VEYXRhfVxuICovXG5cblxuZnVuY3Rpb24gcHJvY2Vzc0ltYWdlRGF0YVJHQihpbWFnZURhdGEsIHRvcFgsIHRvcFksIHdpZHRoLCBoZWlnaHQsIHJhZGl1cykge1xuICB2YXIgcGl4ZWxzID0gaW1hZ2VEYXRhLmRhdGE7XG4gIHZhciBkaXYgPSAyICogcmFkaXVzICsgMTsgLy8gY29uc3QgdzQgPSB3aWR0aCA8PCAyO1xuXG4gIHZhciB3aWR0aE1pbnVzMSA9IHdpZHRoIC0gMTtcbiAgdmFyIGhlaWdodE1pbnVzMSA9IGhlaWdodCAtIDE7XG4gIHZhciByYWRpdXNQbHVzMSA9IHJhZGl1cyArIDE7XG4gIHZhciBzdW1GYWN0b3IgPSByYWRpdXNQbHVzMSAqIChyYWRpdXNQbHVzMSArIDEpIC8gMjtcbiAgdmFyIHN0YWNrU3RhcnQgPSBuZXcgQmx1clN0YWNrKCk7XG4gIHZhciBzdGFjayA9IHN0YWNrU3RhcnQ7XG4gIHZhciBzdGFja0VuZDtcblxuICBmb3IgKHZhciBpID0gMTsgaSA8IGRpdjsgaSsrKSB7XG4gICAgc3RhY2sgPSBzdGFjay5uZXh0ID0gbmV3IEJsdXJTdGFjaygpO1xuXG4gICAgaWYgKGkgPT09IHJhZGl1c1BsdXMxKSB7XG4gICAgICBzdGFja0VuZCA9IHN0YWNrO1xuICAgIH1cbiAgfVxuXG4gIHN0YWNrLm5leHQgPSBzdGFja1N0YXJ0O1xuICB2YXIgc3RhY2tJbiA9IG51bGw7XG4gIHZhciBzdGFja091dCA9IG51bGw7XG4gIHZhciBtdWxTdW0gPSBtdWxUYWJsZVtyYWRpdXNdO1xuICB2YXIgc2hnU3VtID0gc2hnVGFibGVbcmFkaXVzXTtcbiAgdmFyIHAsIHJicztcbiAgdmFyIHl3ID0gMCxcbiAgICAgIHlpID0gMDtcblxuICBmb3IgKHZhciB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7XG4gICAgdmFyIHByID0gcGl4ZWxzW3lpXSxcbiAgICAgICAgcGcgPSBwaXhlbHNbeWkgKyAxXSxcbiAgICAgICAgcGIgPSBwaXhlbHNbeWkgKyAyXSxcbiAgICAgICAgck91dFN1bSA9IHJhZGl1c1BsdXMxICogcHIsXG4gICAgICAgIGdPdXRTdW0gPSByYWRpdXNQbHVzMSAqIHBnLFxuICAgICAgICBiT3V0U3VtID0gcmFkaXVzUGx1czEgKiBwYixcbiAgICAgICAgclN1bSA9IHN1bUZhY3RvciAqIHByLFxuICAgICAgICBnU3VtID0gc3VtRmFjdG9yICogcGcsXG4gICAgICAgIGJTdW0gPSBzdW1GYWN0b3IgKiBwYjtcbiAgICBzdGFjayA9IHN0YWNrU3RhcnQ7XG5cbiAgICBmb3IgKHZhciBfaTUgPSAwOyBfaTUgPCByYWRpdXNQbHVzMTsgX2k1KyspIHtcbiAgICAgIHN0YWNrLnIgPSBwcjtcbiAgICAgIHN0YWNrLmcgPSBwZztcbiAgICAgIHN0YWNrLmIgPSBwYjtcbiAgICAgIHN0YWNrID0gc3RhY2submV4dDtcbiAgICB9XG5cbiAgICB2YXIgckluU3VtID0gMCxcbiAgICAgICAgZ0luU3VtID0gMCxcbiAgICAgICAgYkluU3VtID0gMDtcblxuICAgIGZvciAodmFyIF9pNiA9IDE7IF9pNiA8IHJhZGl1c1BsdXMxOyBfaTYrKykge1xuICAgICAgcCA9IHlpICsgKCh3aWR0aE1pbnVzMSA8IF9pNiA/IHdpZHRoTWludXMxIDogX2k2KSA8PCAyKTtcbiAgICAgIHJTdW0gKz0gKHN0YWNrLnIgPSBwciA9IHBpeGVsc1twXSkgKiAocmJzID0gcmFkaXVzUGx1czEgLSBfaTYpO1xuICAgICAgZ1N1bSArPSAoc3RhY2suZyA9IHBnID0gcGl4ZWxzW3AgKyAxXSkgKiByYnM7XG4gICAgICBiU3VtICs9IChzdGFjay5iID0gcGIgPSBwaXhlbHNbcCArIDJdKSAqIHJicztcbiAgICAgIHJJblN1bSArPSBwcjtcbiAgICAgIGdJblN1bSArPSBwZztcbiAgICAgIGJJblN1bSArPSBwYjtcbiAgICAgIHN0YWNrID0gc3RhY2submV4dDtcbiAgICB9XG5cbiAgICBzdGFja0luID0gc3RhY2tTdGFydDtcbiAgICBzdGFja091dCA9IHN0YWNrRW5kO1xuXG4gICAgZm9yICh2YXIgeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7XG4gICAgICBwaXhlbHNbeWldID0gclN1bSAqIG11bFN1bSA+Pj4gc2hnU3VtO1xuICAgICAgcGl4ZWxzW3lpICsgMV0gPSBnU3VtICogbXVsU3VtID4+PiBzaGdTdW07XG4gICAgICBwaXhlbHNbeWkgKyAyXSA9IGJTdW0gKiBtdWxTdW0gPj4+IHNoZ1N1bTtcbiAgICAgIHJTdW0gLT0gck91dFN1bTtcbiAgICAgIGdTdW0gLT0gZ091dFN1bTtcbiAgICAgIGJTdW0gLT0gYk91dFN1bTtcbiAgICAgIHJPdXRTdW0gLT0gc3RhY2tJbi5yO1xuICAgICAgZ091dFN1bSAtPSBzdGFja0luLmc7XG4gICAgICBiT3V0U3VtIC09IHN0YWNrSW4uYjtcbiAgICAgIHAgPSB5dyArICgocCA9IHggKyByYWRpdXMgKyAxKSA8IHdpZHRoTWludXMxID8gcCA6IHdpZHRoTWludXMxKSA8PCAyO1xuICAgICAgckluU3VtICs9IHN0YWNrSW4uciA9IHBpeGVsc1twXTtcbiAgICAgIGdJblN1bSArPSBzdGFja0luLmcgPSBwaXhlbHNbcCArIDFdO1xuICAgICAgYkluU3VtICs9IHN0YWNrSW4uYiA9IHBpeGVsc1twICsgMl07XG4gICAgICByU3VtICs9IHJJblN1bTtcbiAgICAgIGdTdW0gKz0gZ0luU3VtO1xuICAgICAgYlN1bSArPSBiSW5TdW07XG4gICAgICBzdGFja0luID0gc3RhY2tJbi5uZXh0O1xuICAgICAgck91dFN1bSArPSBwciA9IHN0YWNrT3V0LnI7XG4gICAgICBnT3V0U3VtICs9IHBnID0gc3RhY2tPdXQuZztcbiAgICAgIGJPdXRTdW0gKz0gcGIgPSBzdGFja091dC5iO1xuICAgICAgckluU3VtIC09IHByO1xuICAgICAgZ0luU3VtIC09IHBnO1xuICAgICAgYkluU3VtIC09IHBiO1xuICAgICAgc3RhY2tPdXQgPSBzdGFja091dC5uZXh0O1xuICAgICAgeWkgKz0gNDtcbiAgICB9XG5cbiAgICB5dyArPSB3aWR0aDtcbiAgfVxuXG4gIGZvciAodmFyIF94MiA9IDA7IF94MiA8IHdpZHRoOyBfeDIrKykge1xuICAgIHlpID0gX3gyIDw8IDI7XG5cbiAgICB2YXIgX3ByMiA9IHBpeGVsc1t5aV0sXG4gICAgICAgIF9wZzIgPSBwaXhlbHNbeWkgKyAxXSxcbiAgICAgICAgX3BiMiA9IHBpeGVsc1t5aSArIDJdLFxuICAgICAgICBfck91dFN1bTIgPSByYWRpdXNQbHVzMSAqIF9wcjIsXG4gICAgICAgIF9nT3V0U3VtMiA9IHJhZGl1c1BsdXMxICogX3BnMixcbiAgICAgICAgX2JPdXRTdW0yID0gcmFkaXVzUGx1czEgKiBfcGIyLFxuICAgICAgICBfclN1bTIgPSBzdW1GYWN0b3IgKiBfcHIyLFxuICAgICAgICBfZ1N1bTIgPSBzdW1GYWN0b3IgKiBfcGcyLFxuICAgICAgICBfYlN1bTIgPSBzdW1GYWN0b3IgKiBfcGIyO1xuXG4gICAgc3RhY2sgPSBzdGFja1N0YXJ0O1xuXG4gICAgZm9yICh2YXIgX2k3ID0gMDsgX2k3IDwgcmFkaXVzUGx1czE7IF9pNysrKSB7XG4gICAgICBzdGFjay5yID0gX3ByMjtcbiAgICAgIHN0YWNrLmcgPSBfcGcyO1xuICAgICAgc3RhY2suYiA9IF9wYjI7XG4gICAgICBzdGFjayA9IHN0YWNrLm5leHQ7XG4gICAgfVxuXG4gICAgdmFyIF9ySW5TdW0yID0gMCxcbiAgICAgICAgX2dJblN1bTIgPSAwLFxuICAgICAgICBfYkluU3VtMiA9IDA7XG5cbiAgICBmb3IgKHZhciBfaTggPSAxLCB5cCA9IHdpZHRoOyBfaTggPD0gcmFkaXVzOyBfaTgrKykge1xuICAgICAgeWkgPSB5cCArIF94MiA8PCAyO1xuICAgICAgX3JTdW0yICs9IChzdGFjay5yID0gX3ByMiA9IHBpeGVsc1t5aV0pICogKHJicyA9IHJhZGl1c1BsdXMxIC0gX2k4KTtcbiAgICAgIF9nU3VtMiArPSAoc3RhY2suZyA9IF9wZzIgPSBwaXhlbHNbeWkgKyAxXSkgKiByYnM7XG4gICAgICBfYlN1bTIgKz0gKHN0YWNrLmIgPSBfcGIyID0gcGl4ZWxzW3lpICsgMl0pICogcmJzO1xuICAgICAgX3JJblN1bTIgKz0gX3ByMjtcbiAgICAgIF9nSW5TdW0yICs9IF9wZzI7XG4gICAgICBfYkluU3VtMiArPSBfcGIyO1xuICAgICAgc3RhY2sgPSBzdGFjay5uZXh0O1xuXG4gICAgICBpZiAoX2k4IDwgaGVpZ2h0TWludXMxKSB7XG4gICAgICAgIHlwICs9IHdpZHRoO1xuICAgICAgfVxuICAgIH1cblxuICAgIHlpID0gX3gyO1xuICAgIHN0YWNrSW4gPSBzdGFja1N0YXJ0O1xuICAgIHN0YWNrT3V0ID0gc3RhY2tFbmQ7XG5cbiAgICBmb3IgKHZhciBfeTIgPSAwOyBfeTIgPCBoZWlnaHQ7IF95MisrKSB7XG4gICAgICBwID0geWkgPDwgMjtcbiAgICAgIHBpeGVsc1twXSA9IF9yU3VtMiAqIG11bFN1bSA+Pj4gc2hnU3VtO1xuICAgICAgcGl4ZWxzW3AgKyAxXSA9IF9nU3VtMiAqIG11bFN1bSA+Pj4gc2hnU3VtO1xuICAgICAgcGl4ZWxzW3AgKyAyXSA9IF9iU3VtMiAqIG11bFN1bSA+Pj4gc2hnU3VtO1xuICAgICAgX3JTdW0yIC09IF9yT3V0U3VtMjtcbiAgICAgIF9nU3VtMiAtPSBfZ091dFN1bTI7XG4gICAgICBfYlN1bTIgLT0gX2JPdXRTdW0yO1xuICAgICAgX3JPdXRTdW0yIC09IHN0YWNrSW4ucjtcbiAgICAgIF9nT3V0U3VtMiAtPSBzdGFja0luLmc7XG4gICAgICBfYk91dFN1bTIgLT0gc3RhY2tJbi5iO1xuICAgICAgcCA9IF94MiArICgocCA9IF95MiArIHJhZGl1c1BsdXMxKSA8IGhlaWdodE1pbnVzMSA/IHAgOiBoZWlnaHRNaW51czEpICogd2lkdGggPDwgMjtcbiAgICAgIF9yU3VtMiArPSBfckluU3VtMiArPSBzdGFja0luLnIgPSBwaXhlbHNbcF07XG4gICAgICBfZ1N1bTIgKz0gX2dJblN1bTIgKz0gc3RhY2tJbi5nID0gcGl4ZWxzW3AgKyAxXTtcbiAgICAgIF9iU3VtMiArPSBfYkluU3VtMiArPSBzdGFja0luLmIgPSBwaXhlbHNbcCArIDJdO1xuICAgICAgc3RhY2tJbiA9IHN0YWNrSW4ubmV4dDtcbiAgICAgIF9yT3V0U3VtMiArPSBfcHIyID0gc3RhY2tPdXQucjtcbiAgICAgIF9nT3V0U3VtMiArPSBfcGcyID0gc3RhY2tPdXQuZztcbiAgICAgIF9iT3V0U3VtMiArPSBfcGIyID0gc3RhY2tPdXQuYjtcbiAgICAgIF9ySW5TdW0yIC09IF9wcjI7XG4gICAgICBfZ0luU3VtMiAtPSBfcGcyO1xuICAgICAgX2JJblN1bTIgLT0gX3BiMjtcbiAgICAgIHN0YWNrT3V0ID0gc3RhY2tPdXQubmV4dDtcbiAgICAgIHlpICs9IHdpZHRoO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpbWFnZURhdGE7XG59XG4vKipcbiAqXG4gKi9cblxuXG52YXIgQmx1clN0YWNrID1cbi8qKlxuICogU2V0IHByb3BlcnRpZXMuXG4gKi9cbmZ1bmN0aW9uIEJsdXJTdGFjaygpIHtcbiAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEJsdXJTdGFjayk7XG5cbiAgdGhpcy5yID0gMDtcbiAgdGhpcy5nID0gMDtcbiAgdGhpcy5iID0gMDtcbiAgdGhpcy5hID0gMDtcbiAgdGhpcy5uZXh0ID0gbnVsbDtcbn07XG5cbmV4cG9ydCB7IEJsdXJTdGFjaywgcHJvY2Vzc0NhbnZhc1JHQiBhcyBjYW52YXNSR0IsIHByb2Nlc3NDYW52YXNSR0JBIGFzIGNhbnZhc1JHQkEsIHByb2Nlc3NJbWFnZSBhcyBpbWFnZSwgcHJvY2Vzc0ltYWdlRGF0YVJHQiBhcyBpbWFnZURhdGFSR0IsIHByb2Nlc3NJbWFnZURhdGFSR0JBIGFzIGltYWdlRGF0YVJHQkEgfTtcbiIsImltcG9ydCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgZnJvbSAncmFmJztcbmltcG9ydCBSR0JDb2xvciBmcm9tICdyZ2Jjb2xvcic7XG5pbXBvcnQgeyBTVkdQYXRoRGF0YSB9IGZyb20gJ3N2Zy1wYXRoZGF0YSc7XG5pbXBvcnQgeyBjYW52YXNSR0JBIH0gZnJvbSAnc3RhY2tibHVyLWNhbnZhcyc7XG5cbi8qKlxuICogT3B0aW9ucyBwcmVzZXQgZm9yIGBPZmZzY3JlZW5DYW52YXNgLlxuICogQHBhcmFtIGNvbmZpZyAtIFByZXNldCByZXF1aXJlbWVudHMuXG4gKiBAcGFyYW0gY29uZmlnLkRPTVBhcnNlciAtIFhNTC9IVE1MIHBhcnNlciBmcm9tIHN0cmluZyBpbnRvIERPTSBEb2N1bWVudC5cbiAqIEByZXR1cm5zIFByZXNldCBvYmplY3QuXG4gKi8gZnVuY3Rpb24gb2Zmc2NyZWVuKCkge1xuICAgIGxldCB7IERPTVBhcnNlcjogRE9NUGFyc2VyRmFsbGJhY2sgIH0gPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHZvaWQgMCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICAgIGNvbnN0IHByZXNldCA9IHtcbiAgICAgICAgd2luZG93OiBudWxsLFxuICAgICAgICBpZ25vcmVBbmltYXRpb246IHRydWUsXG4gICAgICAgIGlnbm9yZU1vdXNlOiB0cnVlLFxuICAgICAgICBET01QYXJzZXI6IERPTVBhcnNlckZhbGxiYWNrLFxuICAgICAgICBjcmVhdGVDYW52YXMgKHdpZHRoLCBoZWlnaHQpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgT2Zmc2NyZWVuQ2FudmFzKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICB9LFxuICAgICAgICBhc3luYyBjcmVhdGVJbWFnZSAodXJsKSB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCk7XG4gICAgICAgICAgICBjb25zdCBibG9iID0gYXdhaXQgcmVzcG9uc2UuYmxvYigpO1xuICAgICAgICAgICAgY29uc3QgaW1nID0gYXdhaXQgY3JlYXRlSW1hZ2VCaXRtYXAoYmxvYik7XG4gICAgICAgICAgICByZXR1cm4gaW1nO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBpZiAodHlwZW9mIGdsb2JhbFRoaXMuRE9NUGFyc2VyICE9PSAndW5kZWZpbmVkJyB8fCB0eXBlb2YgRE9NUGFyc2VyRmFsbGJhY2sgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIFJlZmxlY3QuZGVsZXRlUHJvcGVydHkocHJlc2V0LCAnRE9NUGFyc2VyJyk7XG4gICAgfVxuICAgIHJldHVybiBwcmVzZXQ7XG59XG5cbi8qKlxuICogT3B0aW9ucyBwcmVzZXQgZm9yIGBub2RlLWNhbnZhc2AuXG4gKiBAcGFyYW0gY29uZmlnIC0gUHJlc2V0IHJlcXVpcmVtZW50cy5cbiAqIEBwYXJhbSBjb25maWcuRE9NUGFyc2VyIC0gWE1ML0hUTUwgcGFyc2VyIGZyb20gc3RyaW5nIGludG8gRE9NIERvY3VtZW50LlxuICogQHBhcmFtIGNvbmZpZy5jYW52YXMgLSBgbm9kZS1jYW52YXNgIGV4cG9ydHMuXG4gKiBAcGFyYW0gY29uZmlnLmZldGNoIC0gV0hBVFdHLWNvbXBhdGlibGUgYGZldGNoYCBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIFByZXNldCBvYmplY3QuXG4gKi8gZnVuY3Rpb24gbm9kZShwYXJhbSkge1xuICAgIGxldCB7IERPTVBhcnNlciAsIGNhbnZhcyAsIGZldGNoICB9ID0gcGFyYW07XG4gICAgcmV0dXJuIHtcbiAgICAgICAgd2luZG93OiBudWxsLFxuICAgICAgICBpZ25vcmVBbmltYXRpb246IHRydWUsXG4gICAgICAgIGlnbm9yZU1vdXNlOiB0cnVlLFxuICAgICAgICBET01QYXJzZXIsXG4gICAgICAgIGZldGNoLFxuICAgICAgICBjcmVhdGVDYW52YXM6IGNhbnZhcy5jcmVhdGVDYW52YXMsXG4gICAgICAgIGNyZWF0ZUltYWdlOiBjYW52YXMubG9hZEltYWdlXG4gICAgfTtcbn1cblxudmFyIGluZGV4ID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICBfX3Byb3RvX186IG51bGwsXG4gIG9mZnNjcmVlbjogb2Zmc2NyZWVuLFxuICBub2RlOiBub2RlXG59KTtcblxuLyoqXG4gKiBIVE1MLXNhZmUgY29tcHJlc3Mgd2hpdGUtc3BhY2VzLlxuICogQHBhcmFtIHN0ciAtIFN0cmluZyB0byBjb21wcmVzcy5cbiAqIEByZXR1cm5zIFN0cmluZy5cbiAqLyBmdW5jdGlvbiBjb21wcmVzc1NwYWNlcyhzdHIpIHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoLyg/IVxcdTMwMDApXFxzKy9nbSwgJyAnKTtcbn1cbi8qKlxuICogSFRNTC1zYWZlIGxlZnQgdHJpbS5cbiAqIEBwYXJhbSBzdHIgLSBTdHJpbmcgdG8gdHJpbS5cbiAqIEByZXR1cm5zIFN0cmluZy5cbiAqLyBmdW5jdGlvbiB0cmltTGVmdChzdHIpIHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoL15bXFxuIFxcdF0rLywgJycpO1xufVxuLyoqXG4gKiBIVE1MLXNhZmUgcmlnaHQgdHJpbS5cbiAqIEBwYXJhbSBzdHIgLSBTdHJpbmcgdG8gdHJpbS5cbiAqIEByZXR1cm5zIFN0cmluZy5cbiAqLyBmdW5jdGlvbiB0cmltUmlnaHQoc3RyKSB7XG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9bXFxuIFxcdF0rJC8sICcnKTtcbn1cbi8qKlxuICogU3RyaW5nIHRvIG51bWJlcnMgYXJyYXkuXG4gKiBAcGFyYW0gc3RyIC0gTnVtYmVycyBzdHJpbmcuXG4gKiBAcmV0dXJucyBOdW1iZXJzIGFycmF5LlxuICovIGZ1bmN0aW9uIHRvTnVtYmVycyhzdHIpIHtcbiAgICBjb25zdCBtYXRjaGVzID0gc3RyLm1hdGNoKC8tPyhcXGQrKD86XFwuXFxkKig/OltlRV1bKy1dP1xcZCspPyk/fFxcLlxcZCspKD89XFxEfCQpL2dtKTtcbiAgICByZXR1cm4gbWF0Y2hlcyA/IG1hdGNoZXMubWFwKHBhcnNlRmxvYXQpIDogW107XG59XG4vKipcbiAqIFN0cmluZyB0byBtYXRyaXggdmFsdWUuXG4gKiBAcGFyYW0gc3RyIC0gTnVtYmVycyBzdHJpbmcuXG4gKiBAcmV0dXJucyBNYXRyaXggdmFsdWUuXG4gKi8gZnVuY3Rpb24gdG9NYXRyaXhWYWx1ZShzdHIpIHtcbiAgICBjb25zdCBudW1iZXJzID0gdG9OdW1iZXJzKHN0cik7XG4gICAgY29uc3QgbWF0cml4ID0gW1xuICAgICAgICBudW1iZXJzWzBdIHx8IDAsXG4gICAgICAgIG51bWJlcnNbMV0gfHwgMCxcbiAgICAgICAgbnVtYmVyc1syXSB8fCAwLFxuICAgICAgICBudW1iZXJzWzNdIHx8IDAsXG4gICAgICAgIG51bWJlcnNbNF0gfHwgMCxcbiAgICAgICAgbnVtYmVyc1s1XSB8fCAwXG4gICAgXTtcbiAgICByZXR1cm4gbWF0cml4O1xufVxuLy8gTWljcm9zb2Z0IEVkZ2UgZml4XG5jb25zdCBhbGxVcHBlcmNhc2UgPSAvXltBLVotXSskLztcbi8qKlxuICogTm9ybWFsaXplIGF0dHJpYnV0ZSBuYW1lLlxuICogQHBhcmFtIG5hbWUgLSBBdHRyaWJ1dGUgbmFtZS5cbiAqIEByZXR1cm5zIE5vcm1hbGl6ZWQgYXR0cmlidXRlIG5hbWUuXG4gKi8gZnVuY3Rpb24gbm9ybWFsaXplQXR0cmlidXRlTmFtZShuYW1lKSB7XG4gICAgaWYgKGFsbFVwcGVyY2FzZS50ZXN0KG5hbWUpKSB7XG4gICAgICAgIHJldHVybiBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuICAgIHJldHVybiBuYW1lO1xufVxuLyoqXG4gKiBQYXJzZSBleHRlcm5hbCBVUkwuXG4gKiBAcGFyYW0gdXJsIC0gQ1NTIHVybCBzdHJpbmcuXG4gKiBAcmV0dXJucyBQYXJzZWQgVVJMLlxuICovIGZ1bmN0aW9uIHBhcnNlRXh0ZXJuYWxVcmwodXJsKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgc2luZ2xlIHF1b3RlcyBbMl1cbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICB2ICAgICAgICAgZG91YmxlIHF1b3RlcyBbM11cbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICB2ICAgICAgICAgdiAgICAgICAgIG5vIHF1b3RlcyBbNF1cbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICB2ICAgICAgICAgdiAgICAgICAgIHZcbiAgICBjb25zdCB1cmxNYXRjaCA9IC91cmxcXCgoJyhbXiddKyknfFwiKFteXCJdKylcInwoW14nXCIpXSspKVxcKS8uZXhlYyh1cmwpO1xuICAgIGlmICghdXJsTWF0Y2gpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICByZXR1cm4gdXJsTWF0Y2hbMl0gfHwgdXJsTWF0Y2hbM10gfHwgdXJsTWF0Y2hbNF0gfHwgJyc7XG59XG4vKipcbiAqIFRyYW5zZm9ybSBmbG9hdHMgdG8gaW50ZWdlcnMgaW4gcmdiIGNvbG9ycy5cbiAqIEBwYXJhbSBjb2xvciAtIENvbG9yIHRvIG5vcm1hbGl6ZS5cbiAqIEByZXR1cm5zIE5vcm1hbGl6ZWQgY29sb3IuXG4gKi8gZnVuY3Rpb24gbm9ybWFsaXplQ29sb3IoY29sb3IpIHtcbiAgICBpZiAoIWNvbG9yLnN0YXJ0c1dpdGgoJ3JnYicpKSB7XG4gICAgICAgIHJldHVybiBjb2xvcjtcbiAgICB9XG4gICAgbGV0IHJnYlBhcnRzID0gMztcbiAgICBjb25zdCBub3JtYWxpemVkQ29sb3IgPSBjb2xvci5yZXBsYWNlKC9cXGQrKFxcLlxcZCspPy9nLCAobnVtLCBpc0Zsb2F0KT0+KHJnYlBhcnRzLS0pICYmIGlzRmxvYXQgPyBTdHJpbmcoTWF0aC5yb3VuZChwYXJzZUZsb2F0KG51bSkpKSA6IG51bVxuICAgICk7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZWRDb2xvcjtcbn1cblxuLy8gc2xpZ2h0bHkgbW9kaWZpZWQgdmVyc2lvbiBvZiBodHRwczovL2dpdGh1Yi5jb20va2VlZ2Fuc3RyZWV0L3NwZWNpZmljaXR5L2Jsb2IvbWFzdGVyL3NwZWNpZmljaXR5LmpzXG5jb25zdCBhdHRyaWJ1dGVSZWdleCA9IC8oXFxbW15cXF1dK1xcXSkvZztcbmNvbnN0IGlkUmVnZXggPSAvKCNbXlxccys+fi5bOl0rKS9nO1xuY29uc3QgY2xhc3NSZWdleCA9IC8oXFwuW15cXHMrPn4uWzpdKykvZztcbmNvbnN0IHBzZXVkb0VsZW1lbnRSZWdleCA9IC8oOjpbXlxccys+fi5bOl0rfDpmaXJzdC1saW5lfDpmaXJzdC1sZXR0ZXJ8OmJlZm9yZXw6YWZ0ZXIpL2dpO1xuY29uc3QgcHNldWRvQ2xhc3NXaXRoQnJhY2tldHNSZWdleCA9IC8oOltcXHctXStcXChbXildKlxcKSkvZ2k7XG5jb25zdCBwc2V1ZG9DbGFzc1JlZ2V4ID0gLyg6W15cXHMrPn4uWzpdKykvZztcbmNvbnN0IGVsZW1lbnRSZWdleCA9IC8oW15cXHMrPn4uWzpdKykvZztcbmZ1bmN0aW9uIGZpbmRTZWxlY3Rvck1hdGNoKHNlbGVjdG9yLCByZWdleCkge1xuICAgIGNvbnN0IG1hdGNoZXMgPSByZWdleC5leGVjKHNlbGVjdG9yKTtcbiAgICBpZiAoIW1hdGNoZXMpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHNlbGVjdG9yLFxuICAgICAgICAgICAgMFxuICAgICAgICBdO1xuICAgIH1cbiAgICByZXR1cm4gW1xuICAgICAgICBzZWxlY3Rvci5yZXBsYWNlKHJlZ2V4LCAnICcpLFxuICAgICAgICBtYXRjaGVzLmxlbmd0aFxuICAgIF07XG59XG4vKipcbiAqIE1lYXN1cmUgc2VsZWN0b3Igc3BlY2lmaWNpdHkuXG4gKiBAcGFyYW0gc2VsZWN0b3IgLSBTZWxlY3RvciB0byBtZWFzdXJlLlxuICogQHJldHVybnMgU3BlY2lmaWNpdHkuXG4gKi8gZnVuY3Rpb24gZ2V0U2VsZWN0b3JTcGVjaWZpY2l0eShzZWxlY3Rvcikge1xuICAgIGNvbnN0IHNwZWNpZmljaXR5ID0gW1xuICAgICAgICAwLFxuICAgICAgICAwLFxuICAgICAgICAwXG4gICAgXTtcbiAgICBsZXQgY3VycmVudFNlbGVjdG9yID0gc2VsZWN0b3IucmVwbGFjZSgvOm5vdFxcKChbXildKilcXCkvZywgJyAgICAgJDEgJykucmVwbGFjZSgve1tcXHNcXFNdKi9nbSwgJyAnKTtcbiAgICBsZXQgZGVsdGEgPSAwO1xuICAgIFtjdXJyZW50U2VsZWN0b3IsIGRlbHRhXSA9IGZpbmRTZWxlY3Rvck1hdGNoKGN1cnJlbnRTZWxlY3RvciwgYXR0cmlidXRlUmVnZXgpO1xuICAgIHNwZWNpZmljaXR5WzFdICs9IGRlbHRhO1xuICAgIFtjdXJyZW50U2VsZWN0b3IsIGRlbHRhXSA9IGZpbmRTZWxlY3Rvck1hdGNoKGN1cnJlbnRTZWxlY3RvciwgaWRSZWdleCk7XG4gICAgc3BlY2lmaWNpdHlbMF0gKz0gZGVsdGE7XG4gICAgW2N1cnJlbnRTZWxlY3RvciwgZGVsdGFdID0gZmluZFNlbGVjdG9yTWF0Y2goY3VycmVudFNlbGVjdG9yLCBjbGFzc1JlZ2V4KTtcbiAgICBzcGVjaWZpY2l0eVsxXSArPSBkZWx0YTtcbiAgICBbY3VycmVudFNlbGVjdG9yLCBkZWx0YV0gPSBmaW5kU2VsZWN0b3JNYXRjaChjdXJyZW50U2VsZWN0b3IsIHBzZXVkb0VsZW1lbnRSZWdleCk7XG4gICAgc3BlY2lmaWNpdHlbMl0gKz0gZGVsdGE7XG4gICAgW2N1cnJlbnRTZWxlY3RvciwgZGVsdGFdID0gZmluZFNlbGVjdG9yTWF0Y2goY3VycmVudFNlbGVjdG9yLCBwc2V1ZG9DbGFzc1dpdGhCcmFja2V0c1JlZ2V4KTtcbiAgICBzcGVjaWZpY2l0eVsxXSArPSBkZWx0YTtcbiAgICBbY3VycmVudFNlbGVjdG9yLCBkZWx0YV0gPSBmaW5kU2VsZWN0b3JNYXRjaChjdXJyZW50U2VsZWN0b3IsIHBzZXVkb0NsYXNzUmVnZXgpO1xuICAgIHNwZWNpZmljaXR5WzFdICs9IGRlbHRhO1xuICAgIGN1cnJlbnRTZWxlY3RvciA9IGN1cnJlbnRTZWxlY3Rvci5yZXBsYWNlKC9bKlxccys+fl0vZywgJyAnKS5yZXBsYWNlKC9bIy5dL2csICcgJyk7XG4gICAgW2N1cnJlbnRTZWxlY3RvciwgZGVsdGFdID0gZmluZFNlbGVjdG9yTWF0Y2goY3VycmVudFNlbGVjdG9yLCBlbGVtZW50UmVnZXgpIC8vIGxndG0gW2pzL3VzZWxlc3MtYXNzaWdubWVudC10by1sb2NhbF1cbiAgICA7XG4gICAgc3BlY2lmaWNpdHlbMl0gKz0gZGVsdGE7XG4gICAgcmV0dXJuIHNwZWNpZmljaXR5LmpvaW4oJycpO1xufVxuXG5jb25zdCBQU0VVRE9fWkVSTyA9IDAuMDAwMDAwMDE7XG4vKipcbiAqIFZlY3RvciBtYWduaXR1ZGUuXG4gKiBAcGFyYW0gdlxuICogQHJldHVybnMgTnVtYmVyIHJlc3VsdC5cbiAqLyBmdW5jdGlvbiB2ZWN0b3JNYWduaXR1ZGUodikge1xuICAgIHJldHVybiBNYXRoLnNxcnQoTWF0aC5wb3codlswXSwgMikgKyBNYXRoLnBvdyh2WzFdLCAyKSk7XG59XG4vKipcbiAqIFJhdGlvIGJldHdlZW4gdHdvIHZlY3RvcnMuXG4gKiBAcGFyYW0gdVxuICogQHBhcmFtIHZcbiAqIEByZXR1cm5zIE51bWJlciByZXN1bHQuXG4gKi8gZnVuY3Rpb24gdmVjdG9yc1JhdGlvKHUsIHYpIHtcbiAgICByZXR1cm4gKHVbMF0gKiB2WzBdICsgdVsxXSAqIHZbMV0pIC8gKHZlY3Rvck1hZ25pdHVkZSh1KSAqIHZlY3Rvck1hZ25pdHVkZSh2KSk7XG59XG4vKipcbiAqIEFuZ2xlIGJldHdlZW4gdHdvIHZlY3RvcnMuXG4gKiBAcGFyYW0gdVxuICogQHBhcmFtIHZcbiAqIEByZXR1cm5zIE51bWJlciByZXN1bHQuXG4gKi8gZnVuY3Rpb24gdmVjdG9yc0FuZ2xlKHUsIHYpIHtcbiAgICByZXR1cm4gKHVbMF0gKiB2WzFdIDwgdVsxXSAqIHZbMF0gPyAtMSA6IDEpICogTWF0aC5hY29zKHZlY3RvcnNSYXRpbyh1LCB2KSk7XG59XG5mdW5jdGlvbiBDQjEodCkge1xuICAgIHJldHVybiB0ICogdCAqIHQ7XG59XG5mdW5jdGlvbiBDQjIodCkge1xuICAgIHJldHVybiAzICogdCAqIHQgKiAoMSAtIHQpO1xufVxuZnVuY3Rpb24gQ0IzKHQpIHtcbiAgICByZXR1cm4gMyAqIHQgKiAoMSAtIHQpICogKDEgLSB0KTtcbn1cbmZ1bmN0aW9uIENCNCh0KSB7XG4gICAgcmV0dXJuICgxIC0gdCkgKiAoMSAtIHQpICogKDEgLSB0KTtcbn1cbmZ1bmN0aW9uIFFCMSh0KSB7XG4gICAgcmV0dXJuIHQgKiB0O1xufVxuZnVuY3Rpb24gUUIyKHQpIHtcbiAgICByZXR1cm4gMiAqIHQgKiAoMSAtIHQpO1xufVxuZnVuY3Rpb24gUUIzKHQpIHtcbiAgICByZXR1cm4gKDEgLSB0KSAqICgxIC0gdCk7XG59XG5cbmNsYXNzIFByb3BlcnR5IHtcbiAgICBzdGF0aWMgZW1wdHkoZG9jdW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wZXJ0eShkb2N1bWVudCwgJ0VNUFRZJywgJycpO1xuICAgIH1cbiAgICBzcGxpdCgpIHtcbiAgICAgICAgbGV0IHNlcGFyYXRvciA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzBdIDogJyAnO1xuICAgICAgICBjb25zdCB7IGRvY3VtZW50ICwgbmFtZSAgfSA9IHRoaXM7XG4gICAgICAgIHJldHVybiBjb21wcmVzc1NwYWNlcyh0aGlzLmdldFN0cmluZygpKS50cmltKCkuc3BsaXQoc2VwYXJhdG9yKS5tYXAoKHZhbHVlKT0+bmV3IFByb3BlcnR5KGRvY3VtZW50LCBuYW1lLCB2YWx1ZSlcbiAgICAgICAgKTtcbiAgICB9XG4gICAgaGFzVmFsdWUoemVyb0lzVmFsdWUpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgICAgICByZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09ICcnICYmICh6ZXJvSXNWYWx1ZSB8fCB2YWx1ZSAhPT0gMCkgJiYgdHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJztcbiAgICB9XG4gICAgaXNTdHJpbmcocmVnZXhwKSB7XG4gICAgICAgIGNvbnN0IHsgdmFsdWUgIH0gPSB0aGlzO1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnO1xuICAgICAgICBpZiAoIXJlc3VsdCB8fCAhcmVnZXhwKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZWdleHAudGVzdCh2YWx1ZSk7XG4gICAgfVxuICAgIGlzVXJsRGVmaW5pdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTdHJpbmcoL151cmxcXCgvKTtcbiAgICB9XG4gICAgaXNQaXhlbHMoKSB7XG4gICAgICAgIGlmICghdGhpcy5oYXNWYWx1ZSgpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYXNTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuICAgICAgICBzd2l0Y2godHJ1ZSl7XG4gICAgICAgICAgICBjYXNlIGFzU3RyaW5nLmVuZHNXaXRoKCdweCcpOlxuICAgICAgICAgICAgY2FzZSAvXlswLTldKyQvLnRlc3QoYXNTdHJpbmcpOlxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2V0VmFsdWUodmFsdWUpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZ2V0VmFsdWUoZGVmKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZGVmID09PSAndW5kZWZpbmVkJyB8fCB0aGlzLmhhc1ZhbHVlKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZWY7XG4gICAgfVxuICAgIGdldE51bWJlcihkZWYpIHtcbiAgICAgICAgaWYgKCF0aGlzLmhhc1ZhbHVlKCkpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZGVmID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBQYXJzZSB1bmtub3duIHZhbHVlLlxuICAgICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQoZGVmKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHZhbHVlICB9ID0gdGhpcztcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBQYXJzZSB1bmtub3duIHZhbHVlLlxuICAgICAgICBsZXQgbiA9IHBhcnNlRmxvYXQodmFsdWUpO1xuICAgICAgICBpZiAodGhpcy5pc1N0cmluZygvJSQvKSkge1xuICAgICAgICAgICAgbiAvPSAxMDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG47XG4gICAgfVxuICAgIGdldFN0cmluZyhkZWYpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBkZWYgPT09ICd1bmRlZmluZWQnIHx8IHRoaXMuaGFzVmFsdWUoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiB0aGlzLnZhbHVlID09PSAndW5kZWZpbmVkJyA/ICcnIDogU3RyaW5nKHRoaXMudmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBTdHJpbmcoZGVmKTtcbiAgICB9XG4gICAgZ2V0Q29sb3IoZGVmKSB7XG4gICAgICAgIGxldCBjb2xvciA9IHRoaXMuZ2V0U3RyaW5nKGRlZik7XG4gICAgICAgIGlmICh0aGlzLmlzTm9ybWFsaXplZENvbG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gY29sb3I7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc05vcm1hbGl6ZWRDb2xvciA9IHRydWU7XG4gICAgICAgIGNvbG9yID0gbm9ybWFsaXplQ29sb3IoY29sb3IpO1xuICAgICAgICB0aGlzLnZhbHVlID0gY29sb3I7XG4gICAgICAgIHJldHVybiBjb2xvcjtcbiAgICB9XG4gICAgZ2V0RHBpKCkge1xuICAgICAgICByZXR1cm4gOTYgLy8gVE9ETzogY29tcHV0ZT9cbiAgICAgICAgO1xuICAgIH1cbiAgICBnZXRSZW0oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRvY3VtZW50LnJvb3RFbVNpemU7XG4gICAgfVxuICAgIGdldEVtKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kb2N1bWVudC5lbVNpemU7XG4gICAgfVxuICAgIGdldFVuaXRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmcoKS5yZXBsYWNlKC9bMC05Li1dL2csICcnKTtcbiAgICB9XG4gICAgZ2V0UGl4ZWxzKGF4aXNPcklzRm9udFNpemUpIHtcbiAgICAgICAgbGV0IHByb2Nlc3NQZXJjZW50ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMV0gOiBmYWxzZTtcbiAgICAgICAgaWYgKCF0aGlzLmhhc1ZhbHVlKCkpIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IFtheGlzLCBpc0ZvbnRTaXplXSA9IHR5cGVvZiBheGlzT3JJc0ZvbnRTaXplID09PSAnYm9vbGVhbicgPyBbXG4gICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICBheGlzT3JJc0ZvbnRTaXplXG4gICAgICAgIF0gOiBbXG4gICAgICAgICAgICBheGlzT3JJc0ZvbnRTaXplXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IHsgdmlld1BvcnQgIH0gPSB0aGlzLmRvY3VtZW50LnNjcmVlbjtcbiAgICAgICAgc3dpdGNoKHRydWUpe1xuICAgICAgICAgICAgY2FzZSB0aGlzLmlzU3RyaW5nKC92bWluJC8pOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldE51bWJlcigpIC8gMTAwICogTWF0aC5taW4odmlld1BvcnQuY29tcHV0ZVNpemUoJ3gnKSwgdmlld1BvcnQuY29tcHV0ZVNpemUoJ3knKSk7XG4gICAgICAgICAgICBjYXNlIHRoaXMuaXNTdHJpbmcoL3ZtYXgkLyk6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TnVtYmVyKCkgLyAxMDAgKiBNYXRoLm1heCh2aWV3UG9ydC5jb21wdXRlU2l6ZSgneCcpLCB2aWV3UG9ydC5jb21wdXRlU2l6ZSgneScpKTtcbiAgICAgICAgICAgIGNhc2UgdGhpcy5pc1N0cmluZygvdnckLyk6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TnVtYmVyKCkgLyAxMDAgKiB2aWV3UG9ydC5jb21wdXRlU2l6ZSgneCcpO1xuICAgICAgICAgICAgY2FzZSB0aGlzLmlzU3RyaW5nKC92aCQvKTpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXROdW1iZXIoKSAvIDEwMCAqIHZpZXdQb3J0LmNvbXB1dGVTaXplKCd5Jyk7XG4gICAgICAgICAgICBjYXNlIHRoaXMuaXNTdHJpbmcoL3JlbSQvKTpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXROdW1iZXIoKSAqIHRoaXMuZ2V0UmVtKCk7XG4gICAgICAgICAgICBjYXNlIHRoaXMuaXNTdHJpbmcoL2VtJC8pOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldE51bWJlcigpICogdGhpcy5nZXRFbSgpO1xuICAgICAgICAgICAgY2FzZSB0aGlzLmlzU3RyaW5nKC9leCQvKTpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXROdW1iZXIoKSAqIHRoaXMuZ2V0RW0oKSAvIDI7XG4gICAgICAgICAgICBjYXNlIHRoaXMuaXNTdHJpbmcoL3B4JC8pOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldE51bWJlcigpO1xuICAgICAgICAgICAgY2FzZSB0aGlzLmlzU3RyaW5nKC9wdCQvKTpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXROdW1iZXIoKSAqIHRoaXMuZ2V0RHBpKCkgKiAoMSAvIDcyKTtcbiAgICAgICAgICAgIGNhc2UgdGhpcy5pc1N0cmluZygvcGMkLyk6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TnVtYmVyKCkgKiAxNTtcbiAgICAgICAgICAgIGNhc2UgdGhpcy5pc1N0cmluZygvY20kLyk6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TnVtYmVyKCkgKiB0aGlzLmdldERwaSgpIC8gMi41NDtcbiAgICAgICAgICAgIGNhc2UgdGhpcy5pc1N0cmluZygvbW0kLyk6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TnVtYmVyKCkgKiB0aGlzLmdldERwaSgpIC8gMjUuNDtcbiAgICAgICAgICAgIGNhc2UgdGhpcy5pc1N0cmluZygvaW4kLyk6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TnVtYmVyKCkgKiB0aGlzLmdldERwaSgpO1xuICAgICAgICAgICAgY2FzZSB0aGlzLmlzU3RyaW5nKC8lJC8pICYmIGlzRm9udFNpemU6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TnVtYmVyKCkgKiB0aGlzLmdldEVtKCk7XG4gICAgICAgICAgICBjYXNlIHRoaXMuaXNTdHJpbmcoLyUkLyk6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TnVtYmVyKCkgKiB2aWV3UG9ydC5jb21wdXRlU2l6ZShheGlzKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuID0gdGhpcy5nZXROdW1iZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb2Nlc3NQZXJjZW50ICYmIG4gPCAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbiAqIHZpZXdQb3J0LmNvbXB1dGVTaXplKGF4aXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXRNaWxsaXNlY29uZHMoKSB7XG4gICAgICAgIGlmICghdGhpcy5oYXNWYWx1ZSgpKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc1N0cmluZygvbXMkLykpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldE51bWJlcigpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmdldE51bWJlcigpICogMTAwMDtcbiAgICB9XG4gICAgZ2V0UmFkaWFucygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmhhc1ZhbHVlKCkpIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCh0cnVlKXtcbiAgICAgICAgICAgIGNhc2UgdGhpcy5pc1N0cmluZygvZGVnJC8pOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldE51bWJlcigpICogKE1hdGguUEkgLyAxODApO1xuICAgICAgICAgICAgY2FzZSB0aGlzLmlzU3RyaW5nKC9ncmFkJC8pOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldE51bWJlcigpICogKE1hdGguUEkgLyAyMDApO1xuICAgICAgICAgICAgY2FzZSB0aGlzLmlzU3RyaW5nKC9yYWQkLyk6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TnVtYmVyKCk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldE51bWJlcigpICogKE1hdGguUEkgLyAxODApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldERlZmluaXRpb24oKSB7XG4gICAgICAgIGNvbnN0IGFzU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSAvIyhbXiknXCJdKykvLmV4ZWMoYXNTdHJpbmcpO1xuICAgICAgICBjb25zdCBuYW1lID0gKG1hdGNoID09PSBudWxsIHx8IG1hdGNoID09PSB2b2lkIDAgPyB2b2lkIDAgOiBtYXRjaFsxXSkgfHwgYXNTdHJpbmc7XG4gICAgICAgIHJldHVybiB0aGlzLmRvY3VtZW50LmRlZmluaXRpb25zW25hbWVdO1xuICAgIH1cbiAgICBnZXRGaWxsU3R5bGVEZWZpbml0aW9uKGVsZW1lbnQsIG9wYWNpdHkpIHtcbiAgICAgICAgbGV0IGRlZiA9IHRoaXMuZ2V0RGVmaW5pdGlvbigpO1xuICAgICAgICBpZiAoIWRlZikge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZ3JhZGllbnRcbiAgICAgICAgaWYgKHR5cGVvZiBkZWYuY3JlYXRlR3JhZGllbnQgPT09ICdmdW5jdGlvbicgJiYgJ2dldEJvdW5kaW5nQm94JyBpbiBlbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gZGVmLmNyZWF0ZUdyYWRpZW50KHRoaXMuZG9jdW1lbnQuY3R4LCBlbGVtZW50LCBvcGFjaXR5KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBwYXR0ZXJuXG4gICAgICAgIGlmICh0eXBlb2YgZGVmLmNyZWF0ZVBhdHRlcm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGlmIChkZWYuZ2V0SHJlZkF0dHJpYnV0ZSgpLmhhc1ZhbHVlKCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXR0ZXJuVHJhbnNmb3JtID0gZGVmLmdldEF0dHJpYnV0ZSgncGF0dGVyblRyYW5zZm9ybScpO1xuICAgICAgICAgICAgICAgIGRlZiA9IGRlZi5nZXRIcmVmQXR0cmlidXRlKCkuZ2V0RGVmaW5pdGlvbigpO1xuICAgICAgICAgICAgICAgIGlmIChkZWYgJiYgcGF0dGVyblRyYW5zZm9ybS5oYXNWYWx1ZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlZi5nZXRBdHRyaWJ1dGUoJ3BhdHRlcm5UcmFuc2Zvcm0nLCB0cnVlKS5zZXRWYWx1ZShwYXR0ZXJuVHJhbnNmb3JtLnZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGVmKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlZi5jcmVhdGVQYXR0ZXJuKHRoaXMuZG9jdW1lbnQuY3R4LCBlbGVtZW50LCBvcGFjaXR5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZ2V0VGV4dEJhc2VsaW5lKCkge1xuICAgICAgICBpZiAoIXRoaXMuaGFzVmFsdWUoKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5nZXRTdHJpbmcoKTtcbiAgICAgICAgcmV0dXJuIFByb3BlcnR5LnRleHRCYXNlbGluZU1hcHBpbmdba2V5XSB8fCBudWxsO1xuICAgIH1cbiAgICBhZGRPcGFjaXR5KG9wYWNpdHkpIHtcbiAgICAgICAgbGV0IHZhbHVlID0gdGhpcy5nZXRDb2xvcigpO1xuICAgICAgICBjb25zdCBsZW4gPSB2YWx1ZS5sZW5ndGg7XG4gICAgICAgIGxldCBjb21tYXMgPSAwO1xuICAgICAgICAvLyBTaW11bGF0ZSBvbGQgUkdCQ29sb3IgdmVyc2lvbiwgd2hpY2ggY2FuJ3QgcGFyc2UgcmdiYS5cbiAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKXtcbiAgICAgICAgICAgIGlmICh2YWx1ZVtpXSA9PT0gJywnKSB7XG4gICAgICAgICAgICAgICAgY29tbWFzKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY29tbWFzID09PSAzKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wYWNpdHkuaGFzVmFsdWUoKSAmJiB0aGlzLmlzU3RyaW5nKCkgJiYgY29tbWFzICE9PSAzKSB7XG4gICAgICAgICAgICBjb25zdCBjb2xvciA9IG5ldyBSR0JDb2xvcih2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoY29sb3Iub2spIHtcbiAgICAgICAgICAgICAgICBjb2xvci5hbHBoYSA9IG9wYWNpdHkuZ2V0TnVtYmVyKCk7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBjb2xvci50b1JHQkEoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFByb3BlcnR5KHRoaXMuZG9jdW1lbnQsIHRoaXMubmFtZSwgdmFsdWUpO1xuICAgIH1cbiAgICBjb25zdHJ1Y3Rvcihkb2N1bWVudCwgbmFtZSwgdmFsdWUpe1xuICAgICAgICB0aGlzLmRvY3VtZW50ID0gZG9jdW1lbnQ7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5pc05vcm1hbGl6ZWRDb2xvciA9IGZhbHNlO1xuICAgIH1cbn1cblByb3BlcnR5LnRleHRCYXNlbGluZU1hcHBpbmcgPSB7XG4gICAgJ2Jhc2VsaW5lJzogJ2FscGhhYmV0aWMnLFxuICAgICdiZWZvcmUtZWRnZSc6ICd0b3AnLFxuICAgICd0ZXh0LWJlZm9yZS1lZGdlJzogJ3RvcCcsXG4gICAgJ21pZGRsZSc6ICdtaWRkbGUnLFxuICAgICdjZW50cmFsJzogJ21pZGRsZScsXG4gICAgJ2FmdGVyLWVkZ2UnOiAnYm90dG9tJyxcbiAgICAndGV4dC1hZnRlci1lZGdlJzogJ2JvdHRvbScsXG4gICAgJ2lkZW9ncmFwaGljJzogJ2lkZW9ncmFwaGljJyxcbiAgICAnYWxwaGFiZXRpYyc6ICdhbHBoYWJldGljJyxcbiAgICAnaGFuZ2luZyc6ICdoYW5naW5nJyxcbiAgICAnbWF0aGVtYXRpY2FsJzogJ2FscGhhYmV0aWMnXG59O1xuXG5jbGFzcyBWaWV3UG9ydCB7XG4gICAgY2xlYXIoKSB7XG4gICAgICAgIHRoaXMudmlld1BvcnRzID0gW107XG4gICAgfVxuICAgIHNldEN1cnJlbnQod2lkdGgsIGhlaWdodCkge1xuICAgICAgICB0aGlzLnZpZXdQb3J0cy5wdXNoKHtcbiAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZW1vdmVDdXJyZW50KCkge1xuICAgICAgICB0aGlzLnZpZXdQb3J0cy5wb3AoKTtcbiAgICB9XG4gICAgZ2V0Um9vdCgpIHtcbiAgICAgICAgY29uc3QgW3Jvb3RdID0gdGhpcy52aWV3UG9ydHM7XG4gICAgICAgIGlmICghcm9vdCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcm9vdDtcbiAgICB9XG4gICAgZ2V0Q3VycmVudCgpIHtcbiAgICAgICAgY29uc3QgeyB2aWV3UG9ydHMgIH0gPSB0aGlzO1xuICAgICAgICBjb25zdCBjdXJyZW50ID0gdmlld1BvcnRzW3ZpZXdQb3J0cy5sZW5ndGggLSAxXTtcbiAgICAgICAgaWYgKCFjdXJyZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgIH1cbiAgICBnZXQgd2lkdGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEN1cnJlbnQoKS53aWR0aDtcbiAgICB9XG4gICAgZ2V0IGhlaWdodCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q3VycmVudCgpLmhlaWdodDtcbiAgICB9XG4gICAgY29tcHV0ZVNpemUoZCkge1xuICAgICAgICBpZiAodHlwZW9mIGQgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICByZXR1cm4gZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZCA9PT0gJ3gnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy53aWR0aDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZCA9PT0gJ3knKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5oZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE1hdGguc3FydChNYXRoLnBvdyh0aGlzLndpZHRoLCAyKSArIE1hdGgucG93KHRoaXMuaGVpZ2h0LCAyKSkgLyBNYXRoLnNxcnQoMik7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKCl7XG4gICAgICAgIHRoaXMudmlld1BvcnRzID0gW107XG4gICAgfVxufVxuVmlld1BvcnQuREVGQVVMVF9WSUVXUE9SVF9XSURUSCA9IDgwMDtcblZpZXdQb3J0LkRFRkFVTFRfVklFV1BPUlRfSEVJR0hUID0gNjAwO1xuZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB3aWR0aDogVmlld1BvcnQuREVGQVVMVF9WSUVXUE9SVF9XSURUSCxcbiAgICAgICAgaGVpZ2h0OiBWaWV3UG9ydC5ERUZBVUxUX1ZJRVdQT1JUX0hFSUdIVFxuICAgIH07XG59XG5cbmNsYXNzIFBvaW50IHtcbiAgICBzdGF0aWMgcGFyc2UocG9pbnQpIHtcbiAgICAgICAgbGV0IGRlZmF1bHRWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzFdIDogMDtcbiAgICAgICAgY29uc3QgW3ggPSBkZWZhdWx0VmFsdWUsIHkgPSBkZWZhdWx0VmFsdWVdID0gdG9OdW1iZXJzKHBvaW50KTtcbiAgICAgICAgcmV0dXJuIG5ldyBQb2ludCh4LCB5KTtcbiAgICB9XG4gICAgc3RhdGljIHBhcnNlU2NhbGUoc2NhbGUpIHtcbiAgICAgICAgbGV0IGRlZmF1bHRWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzFdIDogMTtcbiAgICAgICAgY29uc3QgW3ggPSBkZWZhdWx0VmFsdWUsIHkgPSB4XSA9IHRvTnVtYmVycyhzY2FsZSk7XG4gICAgICAgIHJldHVybiBuZXcgUG9pbnQoeCwgeSk7XG4gICAgfVxuICAgIHN0YXRpYyBwYXJzZVBhdGgocGF0aCkge1xuICAgICAgICBjb25zdCBwb2ludHMgPSB0b051bWJlcnMocGF0aCk7XG4gICAgICAgIGNvbnN0IGxlbiA9IHBvaW50cy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHBhdGhQb2ludHMgPSBbXTtcbiAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IGxlbjsgaSArPSAyKXtcbiAgICAgICAgICAgIHBhdGhQb2ludHMucHVzaChuZXcgUG9pbnQocG9pbnRzW2ldLCBwb2ludHNbaSArIDFdKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhdGhQb2ludHM7XG4gICAgfVxuICAgIGFuZ2xlVG8ocG9pbnQpIHtcbiAgICAgICAgcmV0dXJuIE1hdGguYXRhbjIocG9pbnQueSAtIHRoaXMueSwgcG9pbnQueCAtIHRoaXMueCk7XG4gICAgfVxuICAgIGFwcGx5VHJhbnNmb3JtKHRyYW5zZm9ybSkge1xuICAgICAgICBjb25zdCB7IHggLCB5ICB9ID0gdGhpcztcbiAgICAgICAgY29uc3QgeHAgPSB4ICogdHJhbnNmb3JtWzBdICsgeSAqIHRyYW5zZm9ybVsyXSArIHRyYW5zZm9ybVs0XTtcbiAgICAgICAgY29uc3QgeXAgPSB4ICogdHJhbnNmb3JtWzFdICsgeSAqIHRyYW5zZm9ybVszXSArIHRyYW5zZm9ybVs1XTtcbiAgICAgICAgdGhpcy54ID0geHA7XG4gICAgICAgIHRoaXMueSA9IHlwO1xuICAgIH1cbiAgICBjb25zdHJ1Y3Rvcih4LCB5KXtcbiAgICAgICAgdGhpcy54ID0geDtcbiAgICAgICAgdGhpcy55ID0geTtcbiAgICB9XG59XG5cbmNsYXNzIE1vdXNlIHtcbiAgICBpc1dvcmtpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLndvcmtpbmc7XG4gICAgfVxuICAgIHN0YXJ0KCkge1xuICAgICAgICBpZiAodGhpcy53b3JraW5nKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBzY3JlZW4gLCBvbkNsaWNrICwgb25Nb3VzZU1vdmUgIH0gPSB0aGlzO1xuICAgICAgICBjb25zdCBjYW52YXMgPSBzY3JlZW4uY3R4LmNhbnZhcztcbiAgICAgICAgY2FudmFzLm9uY2xpY2sgPSBvbkNsaWNrO1xuICAgICAgICBjYW52YXMub25tb3VzZW1vdmUgPSBvbk1vdXNlTW92ZTtcbiAgICAgICAgdGhpcy53b3JraW5nID0gdHJ1ZTtcbiAgICB9XG4gICAgc3RvcCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLndvcmtpbmcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjYW52YXMgPSB0aGlzLnNjcmVlbi5jdHguY2FudmFzO1xuICAgICAgICB0aGlzLndvcmtpbmcgPSBmYWxzZTtcbiAgICAgICAgY2FudmFzLm9uY2xpY2sgPSBudWxsO1xuICAgICAgICBjYW52YXMub25tb3VzZW1vdmUgPSBudWxsO1xuICAgIH1cbiAgICBoYXNFdmVudHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLndvcmtpbmcgJiYgdGhpcy5ldmVudHMubGVuZ3RoID4gMDtcbiAgICB9XG4gICAgcnVuRXZlbnRzKCkge1xuICAgICAgICBpZiAoIXRoaXMud29ya2luZykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgc2NyZWVuOiBkb2N1bWVudCAsIGV2ZW50cyAsIGV2ZW50RWxlbWVudHMgIH0gPSB0aGlzO1xuICAgICAgICBjb25zdCB7IHN0eWxlICB9ID0gZG9jdW1lbnQuY3R4LmNhbnZhcztcbiAgICAgICAgbGV0IGVsZW1lbnQ7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktY29uZGl0aW9uXG4gICAgICAgIGlmIChzdHlsZSkge1xuICAgICAgICAgICAgc3R5bGUuY3Vyc29yID0gJyc7XG4gICAgICAgIH1cbiAgICAgICAgZXZlbnRzLmZvckVhY2goKHBhcmFtLCBpKT0+e1xuICAgICAgICAgICAgbGV0IHsgcnVuICB9ID0gcGFyYW07XG4gICAgICAgICAgICBlbGVtZW50ID0gZXZlbnRFbGVtZW50c1tpXTtcbiAgICAgICAgICAgIHdoaWxlKGVsZW1lbnQpe1xuICAgICAgICAgICAgICAgIHJ1bihlbGVtZW50KTtcbiAgICAgICAgICAgICAgICBlbGVtZW50ID0gZWxlbWVudC5wYXJlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBkb25lIHJ1bm5pbmcsIGNsZWFyXG4gICAgICAgIHRoaXMuZXZlbnRzID0gW107XG4gICAgICAgIHRoaXMuZXZlbnRFbGVtZW50cyA9IFtdO1xuICAgIH1cbiAgICBjaGVja1BhdGgoZWxlbWVudCwgY3R4KSB7XG4gICAgICAgIGlmICghdGhpcy53b3JraW5nIHx8ICFjdHgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IGV2ZW50cyAsIGV2ZW50RWxlbWVudHMgIH0gPSB0aGlzO1xuICAgICAgICBldmVudHMuZm9yRWFjaCgocGFyYW0sIGkpPT57XG4gICAgICAgICAgICBsZXQgeyB4ICwgeSAgfSA9IHBhcmFtO1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS1jb25kaXRpb25cbiAgICAgICAgICAgIGlmICghZXZlbnRFbGVtZW50c1tpXSAmJiBjdHguaXNQb2ludEluUGF0aCAmJiBjdHguaXNQb2ludEluUGF0aCh4LCB5KSkge1xuICAgICAgICAgICAgICAgIGV2ZW50RWxlbWVudHNbaV0gPSBlbGVtZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgY2hlY2tCb3VuZGluZ0JveChlbGVtZW50LCBib3VuZGluZ0JveCkge1xuICAgICAgICBpZiAoIXRoaXMud29ya2luZyB8fCAhYm91bmRpbmdCb3gpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IGV2ZW50cyAsIGV2ZW50RWxlbWVudHMgIH0gPSB0aGlzO1xuICAgICAgICBldmVudHMuZm9yRWFjaCgocGFyYW0sIGkpPT57XG4gICAgICAgICAgICBsZXQgeyB4ICwgeSAgfSA9IHBhcmFtO1xuICAgICAgICAgICAgaWYgKCFldmVudEVsZW1lbnRzW2ldICYmIGJvdW5kaW5nQm94LmlzUG9pbnRJbkJveCh4LCB5KSkge1xuICAgICAgICAgICAgICAgIGV2ZW50RWxlbWVudHNbaV0gPSBlbGVtZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgbWFwWFkoeCwgeSkge1xuICAgICAgICBjb25zdCB7IHdpbmRvdyAsIGN0eCAgfSA9IHRoaXMuc2NyZWVuO1xuICAgICAgICBjb25zdCBwb2ludCA9IG5ldyBQb2ludCh4LCB5KTtcbiAgICAgICAgbGV0IGVsZW1lbnQgPSBjdHguY2FudmFzO1xuICAgICAgICB3aGlsZShlbGVtZW50KXtcbiAgICAgICAgICAgIHBvaW50LnggLT0gZWxlbWVudC5vZmZzZXRMZWZ0O1xuICAgICAgICAgICAgcG9pbnQueSAtPSBlbGVtZW50Lm9mZnNldFRvcDtcbiAgICAgICAgICAgIGVsZW1lbnQgPSBlbGVtZW50Lm9mZnNldFBhcmVudDtcbiAgICAgICAgfVxuICAgICAgICBpZiAod2luZG93ID09PSBudWxsIHx8IHdpbmRvdyA9PT0gdm9pZCAwID8gdm9pZCAwIDogd2luZG93LnNjcm9sbFgpIHtcbiAgICAgICAgICAgIHBvaW50LnggKz0gd2luZG93LnNjcm9sbFg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHdpbmRvdyA9PT0gbnVsbCB8fCB3aW5kb3cgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHdpbmRvdy5zY3JvbGxZKSB7XG4gICAgICAgICAgICBwb2ludC55ICs9IHdpbmRvdy5zY3JvbGxZO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwb2ludDtcbiAgICB9XG4gICAgb25DbGljayhldmVudCkge1xuICAgICAgICBjb25zdCB7IHggLCB5ICB9ID0gdGhpcy5tYXBYWShldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTtcbiAgICAgICAgdGhpcy5ldmVudHMucHVzaCh7XG4gICAgICAgICAgICB0eXBlOiAnb25jbGljaycsXG4gICAgICAgICAgICB4LFxuICAgICAgICAgICAgeSxcbiAgICAgICAgICAgIHJ1biAoZXZlbnRUYXJnZXQpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnRUYXJnZXQub25DbGljaykge1xuICAgICAgICAgICAgICAgICAgICBldmVudFRhcmdldC5vbkNsaWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgb25Nb3VzZU1vdmUoZXZlbnQpIHtcbiAgICAgICAgY29uc3QgeyB4ICwgeSAgfSA9IHRoaXMubWFwWFkoZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG4gICAgICAgIHRoaXMuZXZlbnRzLnB1c2goe1xuICAgICAgICAgICAgdHlwZTogJ29ubW91c2Vtb3ZlJyxcbiAgICAgICAgICAgIHgsXG4gICAgICAgICAgICB5LFxuICAgICAgICAgICAgcnVuIChldmVudFRhcmdldCkge1xuICAgICAgICAgICAgICAgIGlmIChldmVudFRhcmdldC5vbk1vdXNlTW92ZSkge1xuICAgICAgICAgICAgICAgICAgICBldmVudFRhcmdldC5vbk1vdXNlTW92ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKHNjcmVlbil7XG4gICAgICAgIHRoaXMuc2NyZWVuID0gc2NyZWVuO1xuICAgICAgICB0aGlzLndvcmtpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5ldmVudHMgPSBbXTtcbiAgICAgICAgdGhpcy5ldmVudEVsZW1lbnRzID0gW107XG4gICAgICAgIHRoaXMub25DbGljayA9IHRoaXMub25DbGljay5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLm9uTW91c2VNb3ZlID0gdGhpcy5vbk1vdXNlTW92ZS5iaW5kKHRoaXMpO1xuICAgIH1cbn1cblxuY29uc3QgZGVmYXVsdFdpbmRvdyA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogbnVsbDtcbmNvbnN0IGRlZmF1bHRGZXRjaCQxID0gdHlwZW9mIGZldGNoICE9PSAndW5kZWZpbmVkJyA/IGZldGNoLmJpbmQodW5kZWZpbmVkKSAvLyBgZmV0Y2hgIGRlcGVuZHMgb24gY29udGV4dDogYHNvbWVPYmplY3QuZmV0Y2goLi4uKWAgd2lsbCB0aHJvdyBlcnJvci5cbiA6IHVuZGVmaW5lZDtcbmNsYXNzIFNjcmVlbiB7XG4gICAgd2FpdChjaGVja2VyKSB7XG4gICAgICAgIHRoaXMud2FpdHMucHVzaChjaGVja2VyKTtcbiAgICB9XG4gICAgcmVhZHkoKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbWlzdXNlZC1wcm9taXNlc1xuICAgICAgICBpZiAoIXRoaXMucmVhZHlQcm9taXNlKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMucmVhZHlQcm9taXNlO1xuICAgIH1cbiAgICBpc1JlYWR5KCkge1xuICAgICAgICBpZiAodGhpcy5pc1JlYWR5TG9jaykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXNSZWFkeUxvY2sgPSB0aGlzLndhaXRzLmV2ZXJ5KChfKT0+XygpXG4gICAgICAgICk7XG4gICAgICAgIGlmIChpc1JlYWR5TG9jaykge1xuICAgICAgICAgICAgdGhpcy53YWl0cyA9IFtdO1xuICAgICAgICAgICAgaWYgKHRoaXMucmVzb2x2ZVJlYWR5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNvbHZlUmVhZHkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzUmVhZHlMb2NrID0gaXNSZWFkeUxvY2s7XG4gICAgICAgIHJldHVybiBpc1JlYWR5TG9jaztcbiAgICB9XG4gICAgc2V0RGVmYXVsdHMoY3R4KSB7XG4gICAgICAgIC8vIGluaXRpYWwgdmFsdWVzIGFuZCBkZWZhdWx0c1xuICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPSAncmdiYSgwLDAsMCwwKSc7XG4gICAgICAgIGN0eC5saW5lQ2FwID0gJ2J1dHQnO1xuICAgICAgICBjdHgubGluZUpvaW4gPSAnbWl0ZXInO1xuICAgICAgICBjdHgubWl0ZXJMaW1pdCA9IDQ7XG4gICAgfVxuICAgIHNldFZpZXdCb3gocGFyYW0pIHtcbiAgICAgICAgbGV0IHsgZG9jdW1lbnQgLCBjdHggLCBhc3BlY3RSYXRpbyAsIHdpZHRoICwgZGVzaXJlZFdpZHRoICwgaGVpZ2h0ICwgZGVzaXJlZEhlaWdodCAsIG1pblggPTAgLCBtaW5ZID0wICwgcmVmWCAsIHJlZlkgLCBjbGlwID1mYWxzZSAsIGNsaXBYID0wICwgY2xpcFkgPTAgIH0gPSBwYXJhbTtcbiAgICAgICAgLy8gYXNwZWN0IHJhdGlvIC0gaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHL2Nvb3Jkcy5odG1sI1ByZXNlcnZlQXNwZWN0UmF0aW9BdHRyaWJ1dGVcbiAgICAgICAgY29uc3QgY2xlYW5Bc3BlY3RSYXRpbyA9IGNvbXByZXNzU3BhY2VzKGFzcGVjdFJhdGlvKS5yZXBsYWNlKC9eZGVmZXJcXHMvLCAnJykgLy8gaWdub3JlIGRlZmVyXG4gICAgICAgIDtcbiAgICAgICAgY29uc3QgW2FzcGVjdFJhdGlvQWxpZ24sIGFzcGVjdFJhdGlvTWVldE9yU2xpY2VdID0gY2xlYW5Bc3BlY3RSYXRpby5zcGxpdCgnICcpO1xuICAgICAgICBjb25zdCBhbGlnbiA9IGFzcGVjdFJhdGlvQWxpZ24gfHwgJ3hNaWRZTWlkJztcbiAgICAgICAgY29uc3QgbWVldE9yU2xpY2UgPSBhc3BlY3RSYXRpb01lZXRPclNsaWNlIHx8ICdtZWV0JztcbiAgICAgICAgLy8gY2FsY3VsYXRlIHNjYWxlXG4gICAgICAgIGNvbnN0IHNjYWxlWCA9IHdpZHRoIC8gZGVzaXJlZFdpZHRoO1xuICAgICAgICBjb25zdCBzY2FsZVkgPSBoZWlnaHQgLyBkZXNpcmVkSGVpZ2h0O1xuICAgICAgICBjb25zdCBzY2FsZU1pbiA9IE1hdGgubWluKHNjYWxlWCwgc2NhbGVZKTtcbiAgICAgICAgY29uc3Qgc2NhbGVNYXggPSBNYXRoLm1heChzY2FsZVgsIHNjYWxlWSk7XG4gICAgICAgIGxldCBmaW5hbERlc2lyZWRXaWR0aCA9IGRlc2lyZWRXaWR0aDtcbiAgICAgICAgbGV0IGZpbmFsRGVzaXJlZEhlaWdodCA9IGRlc2lyZWRIZWlnaHQ7XG4gICAgICAgIGlmIChtZWV0T3JTbGljZSA9PT0gJ21lZXQnKSB7XG4gICAgICAgICAgICBmaW5hbERlc2lyZWRXaWR0aCAqPSBzY2FsZU1pbjtcbiAgICAgICAgICAgIGZpbmFsRGVzaXJlZEhlaWdodCAqPSBzY2FsZU1pbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWVldE9yU2xpY2UgPT09ICdzbGljZScpIHtcbiAgICAgICAgICAgIGZpbmFsRGVzaXJlZFdpZHRoICo9IHNjYWxlTWF4O1xuICAgICAgICAgICAgZmluYWxEZXNpcmVkSGVpZ2h0ICo9IHNjYWxlTWF4O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlZlhQcm9wID0gbmV3IFByb3BlcnR5KGRvY3VtZW50LCAncmVmWCcsIHJlZlgpO1xuICAgICAgICBjb25zdCByZWZZUHJvcCA9IG5ldyBQcm9wZXJ0eShkb2N1bWVudCwgJ3JlZlknLCByZWZZKTtcbiAgICAgICAgY29uc3QgaGFzUmVmcyA9IHJlZlhQcm9wLmhhc1ZhbHVlKCkgJiYgcmVmWVByb3AuaGFzVmFsdWUoKTtcbiAgICAgICAgaWYgKGhhc1JlZnMpIHtcbiAgICAgICAgICAgIGN0eC50cmFuc2xhdGUoLXNjYWxlTWluICogcmVmWFByb3AuZ2V0UGl4ZWxzKCd4JyksIC1zY2FsZU1pbiAqIHJlZllQcm9wLmdldFBpeGVscygneScpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2xpcCkge1xuICAgICAgICAgICAgY29uc3Qgc2NhbGVkQ2xpcFggPSBzY2FsZU1pbiAqIGNsaXBYO1xuICAgICAgICAgICAgY29uc3Qgc2NhbGVkQ2xpcFkgPSBzY2FsZU1pbiAqIGNsaXBZO1xuICAgICAgICAgICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgICAgICAgY3R4Lm1vdmVUbyhzY2FsZWRDbGlwWCwgc2NhbGVkQ2xpcFkpO1xuICAgICAgICAgICAgY3R4LmxpbmVUbyh3aWR0aCwgc2NhbGVkQ2xpcFkpO1xuICAgICAgICAgICAgY3R4LmxpbmVUbyh3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgICAgIGN0eC5saW5lVG8oc2NhbGVkQ2xpcFgsIGhlaWdodCk7XG4gICAgICAgICAgICBjdHguY2xvc2VQYXRoKCk7XG4gICAgICAgICAgICBjdHguY2xpcCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaGFzUmVmcykge1xuICAgICAgICAgICAgY29uc3QgaXNNZWV0TWluWSA9IG1lZXRPclNsaWNlID09PSAnbWVldCcgJiYgc2NhbGVNaW4gPT09IHNjYWxlWTtcbiAgICAgICAgICAgIGNvbnN0IGlzU2xpY2VNYXhZID0gbWVldE9yU2xpY2UgPT09ICdzbGljZScgJiYgc2NhbGVNYXggPT09IHNjYWxlWTtcbiAgICAgICAgICAgIGNvbnN0IGlzTWVldE1pblggPSBtZWV0T3JTbGljZSA9PT0gJ21lZXQnICYmIHNjYWxlTWluID09PSBzY2FsZVg7XG4gICAgICAgICAgICBjb25zdCBpc1NsaWNlTWF4WCA9IG1lZXRPclNsaWNlID09PSAnc2xpY2UnICYmIHNjYWxlTWF4ID09PSBzY2FsZVg7XG4gICAgICAgICAgICBpZiAoYWxpZ24uc3RhcnRzV2l0aCgneE1pZCcpICYmIChpc01lZXRNaW5ZIHx8IGlzU2xpY2VNYXhZKSkge1xuICAgICAgICAgICAgICAgIGN0eC50cmFuc2xhdGUod2lkdGggLyAyIC0gZmluYWxEZXNpcmVkV2lkdGggLyAyLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhbGlnbi5lbmRzV2l0aCgnWU1pZCcpICYmIChpc01lZXRNaW5YIHx8IGlzU2xpY2VNYXhYKSkge1xuICAgICAgICAgICAgICAgIGN0eC50cmFuc2xhdGUoMCwgaGVpZ2h0IC8gMiAtIGZpbmFsRGVzaXJlZEhlaWdodCAvIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFsaWduLnN0YXJ0c1dpdGgoJ3hNYXgnKSAmJiAoaXNNZWV0TWluWSB8fCBpc1NsaWNlTWF4WSkpIHtcbiAgICAgICAgICAgICAgICBjdHgudHJhbnNsYXRlKHdpZHRoIC0gZmluYWxEZXNpcmVkV2lkdGgsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFsaWduLmVuZHNXaXRoKCdZTWF4JykgJiYgKGlzTWVldE1pblggfHwgaXNTbGljZU1heFgpKSB7XG4gICAgICAgICAgICAgICAgY3R4LnRyYW5zbGF0ZSgwLCBoZWlnaHQgLSBmaW5hbERlc2lyZWRIZWlnaHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIHNjYWxlXG4gICAgICAgIHN3aXRjaCh0cnVlKXtcbiAgICAgICAgICAgIGNhc2UgYWxpZ24gPT09ICdub25lJzpcbiAgICAgICAgICAgICAgICBjdHguc2NhbGUoc2NhbGVYLCBzY2FsZVkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBtZWV0T3JTbGljZSA9PT0gJ21lZXQnOlxuICAgICAgICAgICAgICAgIGN0eC5zY2FsZShzY2FsZU1pbiwgc2NhbGVNaW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBtZWV0T3JTbGljZSA9PT0gJ3NsaWNlJzpcbiAgICAgICAgICAgICAgICBjdHguc2NhbGUoc2NhbGVNYXgsIHNjYWxlTWF4KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICAvLyB0cmFuc2xhdGVcbiAgICAgICAgY3R4LnRyYW5zbGF0ZSgtbWluWCwgLW1pblkpO1xuICAgIH1cbiAgICBzdGFydChlbGVtZW50KSB7XG4gICAgICAgIGxldCB7IGVuYWJsZVJlZHJhdyA9ZmFsc2UgLCBpZ25vcmVNb3VzZSA9ZmFsc2UgLCBpZ25vcmVBbmltYXRpb24gPWZhbHNlICwgaWdub3JlRGltZW5zaW9ucyA9ZmFsc2UgLCBpZ25vcmVDbGVhciA9ZmFsc2UgLCBmb3JjZVJlZHJhdyAsIHNjYWxlV2lkdGggLCBzY2FsZUhlaWdodCAsIG9mZnNldFggLCBvZmZzZXRZICB9ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgICAgICAgY29uc3QgeyBtb3VzZSAgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGZyYW1lRHVyYXRpb24gPSAxMDAwIC8gU2NyZWVuLkZSQU1FUkFURTtcbiAgICAgICAgdGhpcy5pc1JlYWR5TG9jayA9IGZhbHNlO1xuICAgICAgICB0aGlzLmZyYW1lRHVyYXRpb24gPSBmcmFtZUR1cmF0aW9uO1xuICAgICAgICB0aGlzLnJlYWR5UHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKT0+e1xuICAgICAgICAgICAgdGhpcy5yZXNvbHZlUmVhZHkgPSByZXNvbHZlO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRoaXMuaXNSZWFkeSgpKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcihlbGVtZW50LCBpZ25vcmVEaW1lbnNpb25zLCBpZ25vcmVDbGVhciwgc2NhbGVXaWR0aCwgc2NhbGVIZWlnaHQsIG9mZnNldFgsIG9mZnNldFkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZW5hYmxlUmVkcmF3KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG5vdyA9IERhdGUubm93KCk7XG4gICAgICAgIGxldCB0aGVuID0gbm93O1xuICAgICAgICBsZXQgZGVsdGEgPSAwO1xuICAgICAgICBjb25zdCB0aWNrID0gKCk9PntcbiAgICAgICAgICAgIG5vdyA9IERhdGUubm93KCk7XG4gICAgICAgICAgICBkZWx0YSA9IG5vdyAtIHRoZW47XG4gICAgICAgICAgICBpZiAoZGVsdGEgPj0gZnJhbWVEdXJhdGlvbikge1xuICAgICAgICAgICAgICAgIHRoZW4gPSBub3cgLSBkZWx0YSAlIGZyYW1lRHVyYXRpb247XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hvdWxkVXBkYXRlKGlnbm9yZUFuaW1hdGlvbiwgZm9yY2VSZWRyYXcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyKGVsZW1lbnQsIGlnbm9yZURpbWVuc2lvbnMsIGlnbm9yZUNsZWFyLCBzY2FsZVdpZHRoLCBzY2FsZUhlaWdodCwgb2Zmc2V0WCwgb2Zmc2V0WSk7XG4gICAgICAgICAgICAgICAgICAgIG1vdXNlLnJ1bkV2ZW50cygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaW50ZXJ2YWxJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKTtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKCFpZ25vcmVNb3VzZSkge1xuICAgICAgICAgICAgbW91c2Uuc3RhcnQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmludGVydmFsSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7XG4gICAgfVxuICAgIHN0b3AoKSB7XG4gICAgICAgIGlmICh0aGlzLmludGVydmFsSWQpIHtcbiAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZS5jYW5jZWwodGhpcy5pbnRlcnZhbElkKTtcbiAgICAgICAgICAgIHRoaXMuaW50ZXJ2YWxJZCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tb3VzZS5zdG9wKCk7XG4gICAgfVxuICAgIHNob3VsZFVwZGF0ZShpZ25vcmVBbmltYXRpb24sIGZvcmNlUmVkcmF3KSB7XG4gICAgICAgIC8vIG5lZWQgdXBkYXRlIGZyb20gYW5pbWF0aW9ucz9cbiAgICAgICAgaWYgKCFpZ25vcmVBbmltYXRpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IHsgZnJhbWVEdXJhdGlvbiAgfSA9IHRoaXM7XG4gICAgICAgICAgICBjb25zdCBzaG91bGRVcGRhdGUxID0gdGhpcy5hbmltYXRpb25zLnJlZHVjZSgoc2hvdWxkVXBkYXRlLCBhbmltYXRpb24pPT5hbmltYXRpb24udXBkYXRlKGZyYW1lRHVyYXRpb24pIHx8IHNob3VsZFVwZGF0ZVxuICAgICAgICAgICAgLCBmYWxzZSk7XG4gICAgICAgICAgICBpZiAoc2hvdWxkVXBkYXRlMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIG5lZWQgdXBkYXRlIGZyb20gcmVkcmF3P1xuICAgICAgICBpZiAodHlwZW9mIGZvcmNlUmVkcmF3ID09PSAnZnVuY3Rpb24nICYmIGZvcmNlUmVkcmF3KCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5pc1JlYWR5TG9jayAmJiB0aGlzLmlzUmVhZHkoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gbmVlZCB1cGRhdGUgZnJvbSBtb3VzZSBldmVudHM/XG4gICAgICAgIGlmICh0aGlzLm1vdXNlLmhhc0V2ZW50cygpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJlbmRlcihlbGVtZW50LCBpZ25vcmVEaW1lbnNpb25zLCBpZ25vcmVDbGVhciwgc2NhbGVXaWR0aCwgc2NhbGVIZWlnaHQsIG9mZnNldFgsIG9mZnNldFkpIHtcbiAgICAgICAgY29uc3QgeyB2aWV3UG9ydCAsIGN0eCAsIGlzRmlyc3RSZW5kZXIgIH0gPSB0aGlzO1xuICAgICAgICBjb25zdCBjYW52YXMgPSBjdHguY2FudmFzO1xuICAgICAgICB2aWV3UG9ydC5jbGVhcigpO1xuICAgICAgICBpZiAoY2FudmFzLndpZHRoICYmIGNhbnZhcy5oZWlnaHQpIHtcbiAgICAgICAgICAgIHZpZXdQb3J0LnNldEN1cnJlbnQoY2FudmFzLndpZHRoLCBjYW52YXMuaGVpZ2h0KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB3aWR0aFN0eWxlID0gZWxlbWVudC5nZXRTdHlsZSgnd2lkdGgnKTtcbiAgICAgICAgY29uc3QgaGVpZ2h0U3R5bGUgPSBlbGVtZW50LmdldFN0eWxlKCdoZWlnaHQnKTtcbiAgICAgICAgaWYgKCFpZ25vcmVEaW1lbnNpb25zICYmIChpc0ZpcnN0UmVuZGVyIHx8IHR5cGVvZiBzY2FsZVdpZHRoICE9PSAnbnVtYmVyJyAmJiB0eXBlb2Ygc2NhbGVIZWlnaHQgIT09ICdudW1iZXInKSkge1xuICAgICAgICAgICAgLy8gc2V0IGNhbnZhcyBzaXplXG4gICAgICAgICAgICBpZiAod2lkdGhTdHlsZS5oYXNWYWx1ZSgpKSB7XG4gICAgICAgICAgICAgICAgY2FudmFzLndpZHRoID0gd2lkdGhTdHlsZS5nZXRQaXhlbHMoJ3gnKTtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVubmVjZXNzYXJ5LWNvbmRpdGlvblxuICAgICAgICAgICAgICAgIGlmIChjYW52YXMuc3R5bGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FudmFzLnN0eWxlLndpZHRoID0gXCJcIi5jb25jYXQoY2FudmFzLndpZHRoLCBcInB4XCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChoZWlnaHRTdHlsZS5oYXNWYWx1ZSgpKSB7XG4gICAgICAgICAgICAgICAgY2FudmFzLmhlaWdodCA9IGhlaWdodFN0eWxlLmdldFBpeGVscygneScpO1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktY29uZGl0aW9uXG4gICAgICAgICAgICAgICAgaWYgKGNhbnZhcy5zdHlsZSkge1xuICAgICAgICAgICAgICAgICAgICBjYW52YXMuc3R5bGUuaGVpZ2h0ID0gXCJcIi5jb25jYXQoY2FudmFzLmhlaWdodCwgXCJweFwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGNXaWR0aCA9IGNhbnZhcy5jbGllbnRXaWR0aCB8fCBjYW52YXMud2lkdGg7XG4gICAgICAgIGxldCBjSGVpZ2h0ID0gY2FudmFzLmNsaWVudEhlaWdodCB8fCBjYW52YXMuaGVpZ2h0O1xuICAgICAgICBpZiAoaWdub3JlRGltZW5zaW9ucyAmJiB3aWR0aFN0eWxlLmhhc1ZhbHVlKCkgJiYgaGVpZ2h0U3R5bGUuaGFzVmFsdWUoKSkge1xuICAgICAgICAgICAgY1dpZHRoID0gd2lkdGhTdHlsZS5nZXRQaXhlbHMoJ3gnKTtcbiAgICAgICAgICAgIGNIZWlnaHQgPSBoZWlnaHRTdHlsZS5nZXRQaXhlbHMoJ3knKTtcbiAgICAgICAgfVxuICAgICAgICB2aWV3UG9ydC5zZXRDdXJyZW50KGNXaWR0aCwgY0hlaWdodCk7XG4gICAgICAgIGlmICh0eXBlb2Ygb2Zmc2V0WCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIGVsZW1lbnQuZ2V0QXR0cmlidXRlKCd4JywgdHJ1ZSkuc2V0VmFsdWUob2Zmc2V0WCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBvZmZzZXRZID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3knLCB0cnVlKS5zZXRWYWx1ZShvZmZzZXRZKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHNjYWxlV2lkdGggPT09ICdudW1iZXInIHx8IHR5cGVvZiBzY2FsZUhlaWdodCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIGNvbnN0IHZpZXdCb3ggPSB0b051bWJlcnMoZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3ZpZXdCb3gnKS5nZXRTdHJpbmcoKSk7XG4gICAgICAgICAgICBsZXQgeFJhdGlvID0gMDtcbiAgICAgICAgICAgIGxldCB5UmF0aW8gPSAwO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBzY2FsZVdpZHRoID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHdpZHRoU3R5bGUgPSBlbGVtZW50LmdldFN0eWxlKCd3aWR0aCcpO1xuICAgICAgICAgICAgICAgIGlmICh3aWR0aFN0eWxlLmhhc1ZhbHVlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgeFJhdGlvID0gd2lkdGhTdHlsZS5nZXRQaXhlbHMoJ3gnKSAvIHNjYWxlV2lkdGg7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2aWV3Qm94WzJdICYmICFpc05hTih2aWV3Qm94WzJdKSkge1xuICAgICAgICAgICAgICAgICAgICB4UmF0aW8gPSB2aWV3Qm94WzJdIC8gc2NhbGVXaWR0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIHNjYWxlSGVpZ2h0ID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhlaWdodFN0eWxlID0gZWxlbWVudC5nZXRTdHlsZSgnaGVpZ2h0Jyk7XG4gICAgICAgICAgICAgICAgaWYgKGhlaWdodFN0eWxlLmhhc1ZhbHVlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgeVJhdGlvID0gaGVpZ2h0U3R5bGUuZ2V0UGl4ZWxzKCd5JykgLyBzY2FsZUhlaWdodDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZpZXdCb3hbM10gJiYgIWlzTmFOKHZpZXdCb3hbM10pKSB7XG4gICAgICAgICAgICAgICAgICAgIHlSYXRpbyA9IHZpZXdCb3hbM10gLyBzY2FsZUhlaWdodDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXhSYXRpbykge1xuICAgICAgICAgICAgICAgIHhSYXRpbyA9IHlSYXRpbztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgheVJhdGlvKSB7XG4gICAgICAgICAgICAgICAgeVJhdGlvID0geFJhdGlvO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3dpZHRoJywgdHJ1ZSkuc2V0VmFsdWUoc2NhbGVXaWR0aCk7XG4gICAgICAgICAgICBlbGVtZW50LmdldEF0dHJpYnV0ZSgnaGVpZ2h0JywgdHJ1ZSkuc2V0VmFsdWUoc2NhbGVIZWlnaHQpO1xuICAgICAgICAgICAgY29uc3QgdHJhbnNmb3JtU3R5bGUgPSBlbGVtZW50LmdldFN0eWxlKCd0cmFuc2Zvcm0nLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgICAgIHRyYW5zZm9ybVN0eWxlLnNldFZhbHVlKFwiXCIuY29uY2F0KHRyYW5zZm9ybVN0eWxlLmdldFN0cmluZygpLCBcIiBzY2FsZShcIikuY29uY2F0KDEgLyB4UmF0aW8sIFwiLCBcIikuY29uY2F0KDEgLyB5UmF0aW8sIFwiKVwiKSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY2xlYXIgYW5kIHJlbmRlclxuICAgICAgICBpZiAoIWlnbm9yZUNsZWFyKSB7XG4gICAgICAgICAgICBjdHguY2xlYXJSZWN0KDAsIDAsIGNXaWR0aCwgY0hlaWdodCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxlbWVudC5yZW5kZXIoY3R4KTtcbiAgICAgICAgaWYgKGlzRmlyc3RSZW5kZXIpIHtcbiAgICAgICAgICAgIHRoaXMuaXNGaXJzdFJlbmRlciA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKGN0eCwgeyBmZXRjaCA9ZGVmYXVsdEZldGNoJDEgLCB3aW5kb3cgPWRlZmF1bHRXaW5kb3cgIH0gPSB7fSl7XG4gICAgICAgIHRoaXMuY3R4ID0gY3R4O1xuICAgICAgICB0aGlzLnZpZXdQb3J0ID0gbmV3IFZpZXdQb3J0KCk7XG4gICAgICAgIHRoaXMubW91c2UgPSBuZXcgTW91c2UodGhpcyk7XG4gICAgICAgIHRoaXMuYW5pbWF0aW9ucyA9IFtdO1xuICAgICAgICB0aGlzLndhaXRzID0gW107XG4gICAgICAgIHRoaXMuZnJhbWVEdXJhdGlvbiA9IDA7XG4gICAgICAgIHRoaXMuaXNSZWFkeUxvY2sgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc0ZpcnN0UmVuZGVyID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pbnRlcnZhbElkID0gbnVsbDtcbiAgICAgICAgdGhpcy53aW5kb3cgPSB3aW5kb3c7XG4gICAgICAgIGlmICghZmV0Y2gpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbid0IGZpbmQgJ2ZldGNoJyBpbiAnZ2xvYmFsVGhpcycsIHBsZWFzZSBwcm92aWRlIGl0IHZpYSBvcHRpb25zXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmV0Y2ggPSBmZXRjaDtcbiAgICB9XG59XG5TY3JlZW4uZGVmYXVsdFdpbmRvdyA9IGRlZmF1bHRXaW5kb3c7XG5TY3JlZW4uZGVmYXVsdEZldGNoID0gZGVmYXVsdEZldGNoJDE7XG5TY3JlZW4uRlJBTUVSQVRFID0gMzA7XG5TY3JlZW4uTUFYX1ZJUlRVQUxfUElYRUxTID0gMzAwMDA7XG5cbmNvbnN0IHsgZGVmYXVsdEZldGNoICB9ID0gU2NyZWVuO1xuY29uc3QgRGVmYXVsdERPTVBhcnNlciA9IHR5cGVvZiBET01QYXJzZXIgIT09ICd1bmRlZmluZWQnID8gRE9NUGFyc2VyIDogdW5kZWZpbmVkO1xuY2xhc3MgUGFyc2VyIHtcbiAgICBhc3luYyBwYXJzZShyZXNvdXJjZSkge1xuICAgICAgICBpZiAocmVzb3VyY2Uuc3RhcnRzV2l0aCgnPCcpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUZyb21TdHJpbmcocmVzb3VyY2UpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmxvYWQocmVzb3VyY2UpO1xuICAgIH1cbiAgICBwYXJzZUZyb21TdHJpbmcoeG1sKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlciA9IG5ldyB0aGlzLkRPTVBhcnNlcigpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tEb2N1bWVudChwYXJzZXIucGFyc2VGcm9tU3RyaW5nKHhtbCwgJ2ltYWdlL3N2Zyt4bWwnKSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tEb2N1bWVudChwYXJzZXIucGFyc2VGcm9tU3RyaW5nKHhtbCwgJ3RleHQveG1sJykpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNoZWNrRG9jdW1lbnQoZG9jdW1lbnQpIHtcbiAgICAgICAgY29uc3QgcGFyc2VyRXJyb3IgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgncGFyc2VyZXJyb3InKVswXTtcbiAgICAgICAgaWYgKHBhcnNlckVycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IocGFyc2VyRXJyb3IudGV4dENvbnRlbnQgfHwgJ1Vua25vd24gcGFyc2UgZXJyb3InKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZG9jdW1lbnQ7XG4gICAgfVxuICAgIGFzeW5jIGxvYWQodXJsKSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaCh1cmwpO1xuICAgICAgICBjb25zdCB4bWwgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlRnJvbVN0cmluZyh4bWwpO1xuICAgIH1cbiAgICBjb25zdHJ1Y3Rvcih7IGZldGNoID1kZWZhdWx0RmV0Y2ggLCBET01QYXJzZXIgPURlZmF1bHRET01QYXJzZXIgIH0gPSB7fSl7XG4gICAgICAgIGlmICghZmV0Y2gpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbid0IGZpbmQgJ2ZldGNoJyBpbiAnZ2xvYmFsVGhpcycsIHBsZWFzZSBwcm92aWRlIGl0IHZpYSBvcHRpb25zXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghRE9NUGFyc2VyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCBmaW5kICdET01QYXJzZXInIGluICdnbG9iYWxUaGlzJywgcGxlYXNlIHByb3ZpZGUgaXQgdmlhIG9wdGlvbnNcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mZXRjaCA9IGZldGNoO1xuICAgICAgICB0aGlzLkRPTVBhcnNlciA9IERPTVBhcnNlcjtcbiAgICB9XG59XG5cbmNsYXNzIFRyYW5zbGF0ZSB7XG4gICAgYXBwbHkoY3R4KSB7XG4gICAgICAgIGNvbnN0IHsgeCAsIHkgIH0gPSB0aGlzLnBvaW50O1xuICAgICAgICBjdHgudHJhbnNsYXRlKHggfHwgMCwgeSB8fCAwKTtcbiAgICB9XG4gICAgdW5hcHBseShjdHgpIHtcbiAgICAgICAgY29uc3QgeyB4ICwgeSAgfSA9IHRoaXMucG9pbnQ7XG4gICAgICAgIGN0eC50cmFuc2xhdGUoLTEgKiB4IHx8IDAsIC0xICogeSB8fCAwKTtcbiAgICB9XG4gICAgYXBwbHlUb1BvaW50KHBvaW50KSB7XG4gICAgICAgIGNvbnN0IHsgeCAsIHkgIH0gPSB0aGlzLnBvaW50O1xuICAgICAgICBwb2ludC5hcHBseVRyYW5zZm9ybShbXG4gICAgICAgICAgICAxLFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAxLFxuICAgICAgICAgICAgeCB8fCAwLFxuICAgICAgICAgICAgeSB8fCAwXG4gICAgICAgIF0pO1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvcihfLCBwb2ludCl7XG4gICAgICAgIHRoaXMudHlwZSA9ICd0cmFuc2xhdGUnO1xuICAgICAgICB0aGlzLnBvaW50ID0gUG9pbnQucGFyc2UocG9pbnQpO1xuICAgIH1cbn1cblxuY2xhc3MgUm90YXRlIHtcbiAgICBhcHBseShjdHgpIHtcbiAgICAgICAgY29uc3QgeyBjeCAsIGN5ICwgb3JpZ2luWCAsIG9yaWdpblkgLCBhbmdsZSAgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IHR4ID0gY3ggKyBvcmlnaW5YLmdldFBpeGVscygneCcpO1xuICAgICAgICBjb25zdCB0eSA9IGN5ICsgb3JpZ2luWS5nZXRQaXhlbHMoJ3knKTtcbiAgICAgICAgY3R4LnRyYW5zbGF0ZSh0eCwgdHkpO1xuICAgICAgICBjdHgucm90YXRlKGFuZ2xlLmdldFJhZGlhbnMoKSk7XG4gICAgICAgIGN0eC50cmFuc2xhdGUoLXR4LCAtdHkpO1xuICAgIH1cbiAgICB1bmFwcGx5KGN0eCkge1xuICAgICAgICBjb25zdCB7IGN4ICwgY3kgLCBvcmlnaW5YICwgb3JpZ2luWSAsIGFuZ2xlICB9ID0gdGhpcztcbiAgICAgICAgY29uc3QgdHggPSBjeCArIG9yaWdpblguZ2V0UGl4ZWxzKCd4Jyk7XG4gICAgICAgIGNvbnN0IHR5ID0gY3kgKyBvcmlnaW5ZLmdldFBpeGVscygneScpO1xuICAgICAgICBjdHgudHJhbnNsYXRlKHR4LCB0eSk7XG4gICAgICAgIGN0eC5yb3RhdGUoLTEgKiBhbmdsZS5nZXRSYWRpYW5zKCkpO1xuICAgICAgICBjdHgudHJhbnNsYXRlKC10eCwgLXR5KTtcbiAgICB9XG4gICAgYXBwbHlUb1BvaW50KHBvaW50KSB7XG4gICAgICAgIGNvbnN0IHsgY3ggLCBjeSAsIGFuZ2xlICB9ID0gdGhpcztcbiAgICAgICAgY29uc3QgcmFkID0gYW5nbGUuZ2V0UmFkaWFucygpO1xuICAgICAgICBwb2ludC5hcHBseVRyYW5zZm9ybShbXG4gICAgICAgICAgICAxLFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAxLFxuICAgICAgICAgICAgY3ggfHwgMCxcbiAgICAgICAgICAgIGN5IHx8IDAgLy8gdGhpcy5wLnlcbiAgICAgICAgXSk7XG4gICAgICAgIHBvaW50LmFwcGx5VHJhbnNmb3JtKFtcbiAgICAgICAgICAgIE1hdGguY29zKHJhZCksXG4gICAgICAgICAgICBNYXRoLnNpbihyYWQpLFxuICAgICAgICAgICAgLU1hdGguc2luKHJhZCksXG4gICAgICAgICAgICBNYXRoLmNvcyhyYWQpLFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIDBcbiAgICAgICAgXSk7XG4gICAgICAgIHBvaW50LmFwcGx5VHJhbnNmb3JtKFtcbiAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAtY3ggfHwgMCxcbiAgICAgICAgICAgIC1jeSB8fCAwIC8vIC10aGlzLnAueVxuICAgICAgICBdKTtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoZG9jdW1lbnQsIHJvdGF0ZSwgdHJhbnNmb3JtT3JpZ2luKXtcbiAgICAgICAgdGhpcy50eXBlID0gJ3JvdGF0ZSc7XG4gICAgICAgIGNvbnN0IG51bWJlcnMgPSB0b051bWJlcnMocm90YXRlKTtcbiAgICAgICAgdGhpcy5hbmdsZSA9IG5ldyBQcm9wZXJ0eShkb2N1bWVudCwgJ2FuZ2xlJywgbnVtYmVyc1swXSk7XG4gICAgICAgIHRoaXMub3JpZ2luWCA9IHRyYW5zZm9ybU9yaWdpblswXTtcbiAgICAgICAgdGhpcy5vcmlnaW5ZID0gdHJhbnNmb3JtT3JpZ2luWzFdO1xuICAgICAgICB0aGlzLmN4ID0gbnVtYmVyc1sxXSB8fCAwO1xuICAgICAgICB0aGlzLmN5ID0gbnVtYmVyc1syXSB8fCAwO1xuICAgIH1cbn1cblxuY2xhc3MgU2NhbGUge1xuICAgIGFwcGx5KGN0eCkge1xuICAgICAgICBjb25zdCB7IHNjYWxlOiB7IHggLCB5ICB9ICwgb3JpZ2luWCAsIG9yaWdpblkgIH0gPSB0aGlzO1xuICAgICAgICBjb25zdCB0eCA9IG9yaWdpblguZ2V0UGl4ZWxzKCd4Jyk7XG4gICAgICAgIGNvbnN0IHR5ID0gb3JpZ2luWS5nZXRQaXhlbHMoJ3knKTtcbiAgICAgICAgY3R4LnRyYW5zbGF0ZSh0eCwgdHkpO1xuICAgICAgICBjdHguc2NhbGUoeCwgeSB8fCB4KTtcbiAgICAgICAgY3R4LnRyYW5zbGF0ZSgtdHgsIC10eSk7XG4gICAgfVxuICAgIHVuYXBwbHkoY3R4KSB7XG4gICAgICAgIGNvbnN0IHsgc2NhbGU6IHsgeCAsIHkgIH0gLCBvcmlnaW5YICwgb3JpZ2luWSAgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IHR4ID0gb3JpZ2luWC5nZXRQaXhlbHMoJ3gnKTtcbiAgICAgICAgY29uc3QgdHkgPSBvcmlnaW5ZLmdldFBpeGVscygneScpO1xuICAgICAgICBjdHgudHJhbnNsYXRlKHR4LCB0eSk7XG4gICAgICAgIGN0eC5zY2FsZSgxIC8geCwgMSAvIHkgfHwgeCk7XG4gICAgICAgIGN0eC50cmFuc2xhdGUoLXR4LCAtdHkpO1xuICAgIH1cbiAgICBhcHBseVRvUG9pbnQocG9pbnQpIHtcbiAgICAgICAgY29uc3QgeyB4ICwgeSAgfSA9IHRoaXMuc2NhbGU7XG4gICAgICAgIHBvaW50LmFwcGx5VHJhbnNmb3JtKFtcbiAgICAgICAgICAgIHggfHwgMCxcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgeSB8fCAwLFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIDBcbiAgICAgICAgXSk7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKF8sIHNjYWxlLCB0cmFuc2Zvcm1PcmlnaW4pe1xuICAgICAgICB0aGlzLnR5cGUgPSAnc2NhbGUnO1xuICAgICAgICBjb25zdCBzY2FsZVNpemUgPSBQb2ludC5wYXJzZVNjYWxlKHNjYWxlKTtcbiAgICAgICAgLy8gV29ya2Fyb3VuZCBmb3Igbm9kZS1jYW52YXNcbiAgICAgICAgaWYgKHNjYWxlU2l6ZS54ID09PSAwIHx8IHNjYWxlU2l6ZS55ID09PSAwKSB7XG4gICAgICAgICAgICBzY2FsZVNpemUueCA9IFBTRVVET19aRVJPO1xuICAgICAgICAgICAgc2NhbGVTaXplLnkgPSBQU0VVRE9fWkVSTztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNjYWxlID0gc2NhbGVTaXplO1xuICAgICAgICB0aGlzLm9yaWdpblggPSB0cmFuc2Zvcm1PcmlnaW5bMF07XG4gICAgICAgIHRoaXMub3JpZ2luWSA9IHRyYW5zZm9ybU9yaWdpblsxXTtcbiAgICB9XG59XG5cbmNsYXNzIE1hdHJpeCB7XG4gICAgYXBwbHkoY3R4KSB7XG4gICAgICAgIGNvbnN0IHsgb3JpZ2luWCAsIG9yaWdpblkgLCBtYXRyaXggIH0gPSB0aGlzO1xuICAgICAgICBjb25zdCB0eCA9IG9yaWdpblguZ2V0UGl4ZWxzKCd4Jyk7XG4gICAgICAgIGNvbnN0IHR5ID0gb3JpZ2luWS5nZXRQaXhlbHMoJ3knKTtcbiAgICAgICAgY3R4LnRyYW5zbGF0ZSh0eCwgdHkpO1xuICAgICAgICBjdHgudHJhbnNmb3JtKG1hdHJpeFswXSwgbWF0cml4WzFdLCBtYXRyaXhbMl0sIG1hdHJpeFszXSwgbWF0cml4WzRdLCBtYXRyaXhbNV0pO1xuICAgICAgICBjdHgudHJhbnNsYXRlKC10eCwgLXR5KTtcbiAgICB9XG4gICAgdW5hcHBseShjdHgpIHtcbiAgICAgICAgY29uc3QgeyBvcmlnaW5YICwgb3JpZ2luWSAsIG1hdHJpeCAgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGEgPSBtYXRyaXhbMF07XG4gICAgICAgIGNvbnN0IGIgPSBtYXRyaXhbMl07XG4gICAgICAgIGNvbnN0IGMgPSBtYXRyaXhbNF07XG4gICAgICAgIGNvbnN0IGQgPSBtYXRyaXhbMV07XG4gICAgICAgIGNvbnN0IGUgPSBtYXRyaXhbM107XG4gICAgICAgIGNvbnN0IGYgPSBtYXRyaXhbNV07XG4gICAgICAgIGNvbnN0IGcgPSAwO1xuICAgICAgICBjb25zdCBoID0gMDtcbiAgICAgICAgY29uc3QgaSA9IDE7XG4gICAgICAgIGNvbnN0IGRldCA9IDEgLyAoYSAqIChlICogaSAtIGYgKiBoKSAtIGIgKiAoZCAqIGkgLSBmICogZykgKyBjICogKGQgKiBoIC0gZSAqIGcpKTtcbiAgICAgICAgY29uc3QgdHggPSBvcmlnaW5YLmdldFBpeGVscygneCcpO1xuICAgICAgICBjb25zdCB0eSA9IG9yaWdpblkuZ2V0UGl4ZWxzKCd5Jyk7XG4gICAgICAgIGN0eC50cmFuc2xhdGUodHgsIHR5KTtcbiAgICAgICAgY3R4LnRyYW5zZm9ybShkZXQgKiAoZSAqIGkgLSBmICogaCksIGRldCAqIChmICogZyAtIGQgKiBpKSwgZGV0ICogKGMgKiBoIC0gYiAqIGkpLCBkZXQgKiAoYSAqIGkgLSBjICogZyksIGRldCAqIChiICogZiAtIGMgKiBlKSwgZGV0ICogKGMgKiBkIC0gYSAqIGYpKTtcbiAgICAgICAgY3R4LnRyYW5zbGF0ZSgtdHgsIC10eSk7XG4gICAgfVxuICAgIGFwcGx5VG9Qb2ludChwb2ludCkge1xuICAgICAgICBwb2ludC5hcHBseVRyYW5zZm9ybSh0aGlzLm1hdHJpeCk7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKF8sIG1hdHJpeCwgdHJhbnNmb3JtT3JpZ2luKXtcbiAgICAgICAgdGhpcy50eXBlID0gJ21hdHJpeCc7XG4gICAgICAgIHRoaXMubWF0cml4ID0gdG9NYXRyaXhWYWx1ZShtYXRyaXgpO1xuICAgICAgICB0aGlzLm9yaWdpblggPSB0cmFuc2Zvcm1PcmlnaW5bMF07XG4gICAgICAgIHRoaXMub3JpZ2luWSA9IHRyYW5zZm9ybU9yaWdpblsxXTtcbiAgICB9XG59XG5cbmNsYXNzIFNrZXcgZXh0ZW5kcyBNYXRyaXgge1xuICAgIGNvbnN0cnVjdG9yKGRvY3VtZW50LCBza2V3LCB0cmFuc2Zvcm1PcmlnaW4pe1xuICAgICAgICBzdXBlcihkb2N1bWVudCwgc2tldywgdHJhbnNmb3JtT3JpZ2luKTtcbiAgICAgICAgdGhpcy50eXBlID0gJ3NrZXcnO1xuICAgICAgICB0aGlzLmFuZ2xlID0gbmV3IFByb3BlcnR5KGRvY3VtZW50LCAnYW5nbGUnLCBza2V3KTtcbiAgICB9XG59XG5cbmNsYXNzIFNrZXdYIGV4dGVuZHMgU2tldyB7XG4gICAgY29uc3RydWN0b3IoZG9jdW1lbnQsIHNrZXcsIHRyYW5zZm9ybU9yaWdpbil7XG4gICAgICAgIHN1cGVyKGRvY3VtZW50LCBza2V3LCB0cmFuc2Zvcm1PcmlnaW4pO1xuICAgICAgICB0aGlzLnR5cGUgPSAnc2tld1gnO1xuICAgICAgICB0aGlzLm1hdHJpeCA9IFtcbiAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgTWF0aC50YW4odGhpcy5hbmdsZS5nZXRSYWRpYW5zKCkpLFxuICAgICAgICAgICAgMSxcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAwXG4gICAgICAgIF07XG4gICAgfVxufVxuXG5jbGFzcyBTa2V3WSBleHRlbmRzIFNrZXcge1xuICAgIGNvbnN0cnVjdG9yKGRvY3VtZW50LCBza2V3LCB0cmFuc2Zvcm1PcmlnaW4pe1xuICAgICAgICBzdXBlcihkb2N1bWVudCwgc2tldywgdHJhbnNmb3JtT3JpZ2luKTtcbiAgICAgICAgdGhpcy50eXBlID0gJ3NrZXdZJztcbiAgICAgICAgdGhpcy5tYXRyaXggPSBbXG4gICAgICAgICAgICAxLFxuICAgICAgICAgICAgTWF0aC50YW4odGhpcy5hbmdsZS5nZXRSYWRpYW5zKCkpLFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgMFxuICAgICAgICBdO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VUcmFuc2Zvcm1zKHRyYW5zZm9ybSkge1xuICAgIHJldHVybiBjb21wcmVzc1NwYWNlcyh0cmFuc2Zvcm0pLnRyaW0oKS5yZXBsYWNlKC9cXCkoW2EtekEtWl0pL2csICcpICQxJykucmVwbGFjZSgvXFwpKFxccz8sXFxzPykvZywgJykgJykuc3BsaXQoL1xccyg/PVthLXpdKS8pO1xufVxuZnVuY3Rpb24gcGFyc2VUcmFuc2Zvcm0odHJhbnNmb3JtKSB7XG4gICAgY29uc3QgW3R5cGUgPSAnJywgdmFsdWUgPSAnJ10gPSB0cmFuc2Zvcm0uc3BsaXQoJygnKTtcbiAgICByZXR1cm4gW1xuICAgICAgICB0eXBlLnRyaW0oKSxcbiAgICAgICAgdmFsdWUudHJpbSgpLnJlcGxhY2UoJyknLCAnJylcbiAgICBdO1xufVxuY2xhc3MgVHJhbnNmb3JtIHtcbiAgICBzdGF0aWMgZnJvbUVsZW1lbnQoZG9jdW1lbnQsIGVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgdHJhbnNmb3JtU3R5bGUgPSBlbGVtZW50LmdldFN0eWxlKCd0cmFuc2Zvcm0nLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICAgIGlmICh0cmFuc2Zvcm1TdHlsZS5oYXNWYWx1ZSgpKSB7XG4gICAgICAgICAgICBjb25zdCBbdHJhbnNmb3JtT3JpZ2luWFByb3BlcnR5LCB0cmFuc2Zvcm1PcmlnaW5ZUHJvcGVydHkgPSB0cmFuc2Zvcm1PcmlnaW5YUHJvcGVydHldID0gZWxlbWVudC5nZXRTdHlsZSgndHJhbnNmb3JtLW9yaWdpbicsIGZhbHNlLCB0cnVlKS5zcGxpdCgpO1xuICAgICAgICAgICAgaWYgKHRyYW5zZm9ybU9yaWdpblhQcm9wZXJ0eSAmJiB0cmFuc2Zvcm1PcmlnaW5ZUHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0cmFuc2Zvcm1PcmlnaW4gPSBbXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybU9yaWdpblhQcm9wZXJ0eSxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtT3JpZ2luWVByb3BlcnR5XG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRyYW5zZm9ybShkb2N1bWVudCwgdHJhbnNmb3JtU3R5bGUuZ2V0U3RyaW5nKCksIHRyYW5zZm9ybU9yaWdpbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGFwcGx5KGN0eCkge1xuICAgICAgICB0aGlzLnRyYW5zZm9ybXMuZm9yRWFjaCgodHJhbnNmb3JtKT0+dHJhbnNmb3JtLmFwcGx5KGN0eClcbiAgICAgICAgKTtcbiAgICB9XG4gICAgdW5hcHBseShjdHgpIHtcbiAgICAgICAgdGhpcy50cmFuc2Zvcm1zLmZvckVhY2goKHRyYW5zZm9ybSk9PnRyYW5zZm9ybS51bmFwcGx5KGN0eClcbiAgICAgICAgKTtcbiAgICB9XG4gICAgLy8gVE9ETzogYXBwbHlUb1BvaW50IHVudXNlZCAuLi4gcmVtb3ZlP1xuICAgIGFwcGx5VG9Qb2ludChwb2ludCkge1xuICAgICAgICB0aGlzLnRyYW5zZm9ybXMuZm9yRWFjaCgodHJhbnNmb3JtKT0+dHJhbnNmb3JtLmFwcGx5VG9Qb2ludChwb2ludClcbiAgICAgICAgKTtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoZG9jdW1lbnQsIHRyYW5zZm9ybTEsIHRyYW5zZm9ybU9yaWdpbil7XG4gICAgICAgIHRoaXMuZG9jdW1lbnQgPSBkb2N1bWVudDtcbiAgICAgICAgdGhpcy50cmFuc2Zvcm1zID0gW107XG4gICAgICAgIGNvbnN0IGRhdGEgPSBwYXJzZVRyYW5zZm9ybXModHJhbnNmb3JtMSk7XG4gICAgICAgIGRhdGEuZm9yRWFjaCgodHJhbnNmb3JtKT0+e1xuICAgICAgICAgICAgaWYgKHRyYW5zZm9ybSA9PT0gJ25vbmUnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgW3R5cGUsIHZhbHVlXSA9IHBhcnNlVHJhbnNmb3JtKHRyYW5zZm9ybSk7XG4gICAgICAgICAgICBjb25zdCBUcmFuc2Zvcm1UeXBlID0gVHJhbnNmb3JtLnRyYW5zZm9ybVR5cGVzW3R5cGVdO1xuICAgICAgICAgICAgaWYgKFRyYW5zZm9ybVR5cGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zZm9ybXMucHVzaChuZXcgVHJhbnNmb3JtVHlwZSh0aGlzLmRvY3VtZW50LCB2YWx1ZSwgdHJhbnNmb3JtT3JpZ2luKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cblRyYW5zZm9ybS50cmFuc2Zvcm1UeXBlcyA9IHtcbiAgICB0cmFuc2xhdGU6IFRyYW5zbGF0ZSxcbiAgICByb3RhdGU6IFJvdGF0ZSxcbiAgICBzY2FsZTogU2NhbGUsXG4gICAgbWF0cml4OiBNYXRyaXgsXG4gICAgc2tld1g6IFNrZXdYLFxuICAgIHNrZXdZOiBTa2V3WVxufTtcblxuY2xhc3MgRWxlbWVudCB7XG4gICAgZ2V0QXR0cmlidXRlKG5hbWUpIHtcbiAgICAgICAgbGV0IGNyZWF0ZUlmTm90RXhpc3RzID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMV0gOiBmYWxzZTtcbiAgICAgICAgY29uc3QgYXR0ciA9IHRoaXMuYXR0cmlidXRlc1tuYW1lXTtcbiAgICAgICAgaWYgKCFhdHRyICYmIGNyZWF0ZUlmTm90RXhpc3RzKSB7XG4gICAgICAgICAgICBjb25zdCBhdHRyID0gbmV3IFByb3BlcnR5KHRoaXMuZG9jdW1lbnQsIG5hbWUsICcnKTtcbiAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlc1tuYW1lXSA9IGF0dHI7XG4gICAgICAgICAgICByZXR1cm4gYXR0cjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXR0ciB8fCBQcm9wZXJ0eS5lbXB0eSh0aGlzLmRvY3VtZW50KTtcbiAgICB9XG4gICAgZ2V0SHJlZkF0dHJpYnV0ZSgpIHtcbiAgICAgICAgbGV0IGhyZWY7XG4gICAgICAgIGZvcihjb25zdCBrZXkgaW4gdGhpcy5hdHRyaWJ1dGVzKXtcbiAgICAgICAgICAgIGlmIChrZXkgPT09ICdocmVmJyB8fCBrZXkuZW5kc1dpdGgoJzpocmVmJykpIHtcbiAgICAgICAgICAgICAgICBocmVmID0gdGhpcy5hdHRyaWJ1dGVzW2tleV07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGhyZWYgfHwgUHJvcGVydHkuZW1wdHkodGhpcy5kb2N1bWVudCk7XG4gICAgfVxuICAgIGdldFN0eWxlKG5hbWUpIHtcbiAgICAgICAgbGV0IGNyZWF0ZUlmTm90RXhpc3RzID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMV0gOiBmYWxzZSwgc2tpcEFuY2VzdG9ycyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzJdIDogZmFsc2U7XG4gICAgICAgIGNvbnN0IHN0eWxlID0gdGhpcy5zdHlsZXNbbmFtZV07XG4gICAgICAgIGlmIChzdHlsZSkge1xuICAgICAgICAgICAgcmV0dXJuIHN0eWxlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGF0dHIgPSB0aGlzLmdldEF0dHJpYnV0ZShuYW1lKTtcbiAgICAgICAgaWYgKGF0dHIuaGFzVmFsdWUoKSkge1xuICAgICAgICAgICAgdGhpcy5zdHlsZXNbbmFtZV0gPSBhdHRyIC8vIG1vdmUgdXAgdG8gbWUgdG8gY2FjaGVcbiAgICAgICAgICAgIDtcbiAgICAgICAgICAgIHJldHVybiBhdHRyO1xuICAgICAgICB9XG4gICAgICAgIGlmICghc2tpcEFuY2VzdG9ycykge1xuICAgICAgICAgICAgY29uc3QgeyBwYXJlbnQgIH0gPSB0aGlzO1xuICAgICAgICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudFN0eWxlID0gcGFyZW50LmdldFN0eWxlKG5hbWUpO1xuICAgICAgICAgICAgICAgIGlmIChwYXJlbnRTdHlsZS5oYXNWYWx1ZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJlbnRTdHlsZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNyZWF0ZUlmTm90RXhpc3RzKSB7XG4gICAgICAgICAgICBjb25zdCBzdHlsZSA9IG5ldyBQcm9wZXJ0eSh0aGlzLmRvY3VtZW50LCBuYW1lLCAnJyk7XG4gICAgICAgICAgICB0aGlzLnN0eWxlc1tuYW1lXSA9IHN0eWxlO1xuICAgICAgICAgICAgcmV0dXJuIHN0eWxlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQcm9wZXJ0eS5lbXB0eSh0aGlzLmRvY3VtZW50KTtcbiAgICB9XG4gICAgcmVuZGVyKGN0eCkge1xuICAgICAgICAvLyBkb24ndCByZW5kZXIgZGlzcGxheT1ub25lXG4gICAgICAgIC8vIGRvbid0IHJlbmRlciB2aXNpYmlsaXR5PWhpZGRlblxuICAgICAgICBpZiAodGhpcy5nZXRTdHlsZSgnZGlzcGxheScpLmdldFN0cmluZygpID09PSAnbm9uZScgfHwgdGhpcy5nZXRTdHlsZSgndmlzaWJpbGl0eScpLmdldFN0cmluZygpID09PSAnaGlkZGVuJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGN0eC5zYXZlKCk7XG4gICAgICAgIGlmICh0aGlzLmdldFN0eWxlKCdtYXNrJykuaGFzVmFsdWUoKSkge1xuICAgICAgICAgICAgY29uc3QgbWFzayA9IHRoaXMuZ2V0U3R5bGUoJ21hc2snKS5nZXREZWZpbml0aW9uKCk7XG4gICAgICAgICAgICBpZiAobWFzaykge1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwbHlFZmZlY3RzKGN0eCk7XG4gICAgICAgICAgICAgICAgbWFzay5hcHBseShjdHgsIHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZ2V0U3R5bGUoJ2ZpbHRlcicpLmdldFZhbHVlKCdub25lJykgIT09ICdub25lJykge1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyID0gdGhpcy5nZXRTdHlsZSgnZmlsdGVyJykuZ2V0RGVmaW5pdGlvbigpO1xuICAgICAgICAgICAgaWYgKGZpbHRlcikge1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwbHlFZmZlY3RzKGN0eCk7XG4gICAgICAgICAgICAgICAgZmlsdGVyLmFwcGx5KGN0eCwgdGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNldENvbnRleHQoY3R4KTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyQ2hpbGRyZW4oY3R4KTtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJDb250ZXh0KGN0eCk7XG4gICAgICAgIH1cbiAgICAgICAgY3R4LnJlc3RvcmUoKTtcbiAgICB9XG4gICAgc2V0Q29udGV4dChfKSB7XG4gICAgLy8gTk8gUkVOREVSXG4gICAgfVxuICAgIGFwcGx5RWZmZWN0cyhjdHgpIHtcbiAgICAgICAgLy8gdHJhbnNmb3JtXG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybSA9IFRyYW5zZm9ybS5mcm9tRWxlbWVudCh0aGlzLmRvY3VtZW50LCB0aGlzKTtcbiAgICAgICAgaWYgKHRyYW5zZm9ybSkge1xuICAgICAgICAgICAgdHJhbnNmb3JtLmFwcGx5KGN0eCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY2xpcFxuICAgICAgICBjb25zdCBjbGlwUGF0aFN0eWxlUHJvcCA9IHRoaXMuZ2V0U3R5bGUoJ2NsaXAtcGF0aCcsIGZhbHNlLCB0cnVlKTtcbiAgICAgICAgaWYgKGNsaXBQYXRoU3R5bGVQcm9wLmhhc1ZhbHVlKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGNsaXAgPSBjbGlwUGF0aFN0eWxlUHJvcC5nZXREZWZpbml0aW9uKCk7XG4gICAgICAgICAgICBpZiAoY2xpcCkge1xuICAgICAgICAgICAgICAgIGNsaXAuYXBwbHkoY3R4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBjbGVhckNvbnRleHQoXykge1xuICAgIC8vIE5PIFJFTkRFUlxuICAgIH1cbiAgICByZW5kZXJDaGlsZHJlbihjdHgpIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCk9PntcbiAgICAgICAgICAgIGNoaWxkLnJlbmRlcihjdHgpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgYWRkQ2hpbGQoY2hpbGROb2RlKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkID0gY2hpbGROb2RlIGluc3RhbmNlb2YgRWxlbWVudCA/IGNoaWxkTm9kZSA6IHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudChjaGlsZE5vZGUpO1xuICAgICAgICBjaGlsZC5wYXJlbnQgPSB0aGlzO1xuICAgICAgICBpZiAoIUVsZW1lbnQuaWdub3JlQ2hpbGRUeXBlcy5pbmNsdWRlcyhjaGlsZC50eXBlKSkge1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbi5wdXNoKGNoaWxkKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBtYXRjaGVzU2VsZWN0b3Ioc2VsZWN0b3IpIHtcbiAgICAgICAgdmFyIHJlZjtcbiAgICAgICAgY29uc3QgeyBub2RlICB9ID0gdGhpcztcbiAgICAgICAgaWYgKHR5cGVvZiBub2RlLm1hdGNoZXMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBub2RlLm1hdGNoZXMoc2VsZWN0b3IpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0eWxlQ2xhc3NlcyA9IChyZWYgPSBub2RlLmdldEF0dHJpYnV0ZSkgPT09IG51bGwgfHwgcmVmID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZWYuY2FsbChub2RlLCAnY2xhc3MnKTtcbiAgICAgICAgaWYgKCFzdHlsZUNsYXNzZXMgfHwgc3R5bGVDbGFzc2VzID09PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdHlsZUNsYXNzZXMuc3BsaXQoJyAnKS5zb21lKChzdHlsZUNsYXNzKT0+XCIuXCIuY29uY2F0KHN0eWxlQ2xhc3MpID09PSBzZWxlY3RvclxuICAgICAgICApO1xuICAgIH1cbiAgICBhZGRTdHlsZXNGcm9tU3R5bGVEZWZpbml0aW9uKCkge1xuICAgICAgICBjb25zdCB7IHN0eWxlcyAsIHN0eWxlc1NwZWNpZmljaXR5ICB9ID0gdGhpcy5kb2N1bWVudDtcbiAgICAgICAgbGV0IHN0eWxlUHJvcDtcbiAgICAgICAgZm9yKGNvbnN0IHNlbGVjdG9yIGluIHN0eWxlcyl7XG4gICAgICAgICAgICBpZiAoIXNlbGVjdG9yLnN0YXJ0c1dpdGgoJ0AnKSAmJiB0aGlzLm1hdGNoZXNTZWxlY3RvcihzZWxlY3RvcikpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdHlsZSA9IHN0eWxlc1tzZWxlY3Rvcl07XG4gICAgICAgICAgICAgICAgY29uc3Qgc3BlY2lmaWNpdHkgPSBzdHlsZXNTcGVjaWZpY2l0eVtzZWxlY3Rvcl07XG4gICAgICAgICAgICAgICAgaWYgKHN0eWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvcihjb25zdCBuYW1lIGluIHN0eWxlKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBleGlzdGluZ1NwZWNpZmljaXR5ID0gdGhpcy5zdHlsZXNTcGVjaWZpY2l0eVtuYW1lXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZXhpc3RpbmdTcGVjaWZpY2l0eSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZ1NwZWNpZmljaXR5ID0gJzAwMCc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3BlY2lmaWNpdHkgJiYgc3BlY2lmaWNpdHkgPj0gZXhpc3RpbmdTcGVjaWZpY2l0eSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlUHJvcCA9IHN0eWxlW25hbWVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHlsZVByb3ApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHlsZXNbbmFtZV0gPSBzdHlsZVByb3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3R5bGVzU3BlY2lmaWNpdHlbbmFtZV0gPSBzcGVjaWZpY2l0eTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZW1vdmVTdHlsZXMoZWxlbWVudCwgaWdub3JlU3R5bGVzKSB7XG4gICAgICAgIGNvbnN0IHRvUmVzdG9yZTEgPSBpZ25vcmVTdHlsZXMucmVkdWNlKCh0b1Jlc3RvcmUsIG5hbWUpPT57XG4gICAgICAgICAgICBjb25zdCBzdHlsZVByb3AgPSBlbGVtZW50LmdldFN0eWxlKG5hbWUpO1xuICAgICAgICAgICAgaWYgKCFzdHlsZVByb3AuaGFzVmFsdWUoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0b1Jlc3RvcmU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHN0eWxlUHJvcC5nZXRTdHJpbmcoKTtcbiAgICAgICAgICAgIHN0eWxlUHJvcC5zZXRWYWx1ZSgnJyk7XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgIC4uLnRvUmVzdG9yZSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgXTtcbiAgICAgICAgfSwgW10pO1xuICAgICAgICByZXR1cm4gdG9SZXN0b3JlMTtcbiAgICB9XG4gICAgcmVzdG9yZVN0eWxlcyhlbGVtZW50LCBzdHlsZXMpIHtcbiAgICAgICAgc3R5bGVzLmZvckVhY2goKHBhcmFtKT0+e1xuICAgICAgICAgICAgbGV0IFtuYW1lLCB2YWx1ZV0gPSBwYXJhbTtcbiAgICAgICAgICAgIGVsZW1lbnQuZ2V0U3R5bGUobmFtZSwgdHJ1ZSkuc2V0VmFsdWUodmFsdWUpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgaXNGaXJzdENoaWxkKCkge1xuICAgICAgICB2YXIgcmVmO1xuICAgICAgICByZXR1cm4gKChyZWYgPSB0aGlzLnBhcmVudCkgPT09IG51bGwgfHwgcmVmID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZWYuY2hpbGRyZW4uaW5kZXhPZih0aGlzKSkgPT09IDA7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKGRvY3VtZW50LCBub2RlLCBjYXB0dXJlVGV4dE5vZGVzID0gZmFsc2Upe1xuICAgICAgICB0aGlzLmRvY3VtZW50ID0gZG9jdW1lbnQ7XG4gICAgICAgIHRoaXMubm9kZSA9IG5vZGU7XG4gICAgICAgIHRoaXMuY2FwdHVyZVRleHROb2RlcyA9IGNhcHR1cmVUZXh0Tm9kZXM7XG4gICAgICAgIHRoaXMudHlwZSA9ICcnO1xuICAgICAgICB0aGlzLmF0dHJpYnV0ZXMgPSB7fTtcbiAgICAgICAgdGhpcy5zdHlsZXMgPSB7fTtcbiAgICAgICAgdGhpcy5zdHlsZXNTcGVjaWZpY2l0eSA9IHt9O1xuICAgICAgICB0aGlzLmFuaW1hdGlvbkZyb3plbiA9IGZhbHNlO1xuICAgICAgICB0aGlzLmFuaW1hdGlvbkZyb3plblZhbHVlID0gJyc7XG4gICAgICAgIHRoaXMucGFyZW50ID0gbnVsbDtcbiAgICAgICAgdGhpcy5jaGlsZHJlbiA9IFtdO1xuICAgICAgICBpZiAoIW5vZGUgfHwgbm9kZS5ub2RlVHlwZSAhPT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIGFkZCBhdHRyaWJ1dGVzXG4gICAgICAgIEFycmF5LmZyb20obm9kZS5hdHRyaWJ1dGVzKS5mb3JFYWNoKChhdHRyaWJ1dGUpPT57XG4gICAgICAgICAgICBjb25zdCBub2RlTmFtZSA9IG5vcm1hbGl6ZUF0dHJpYnV0ZU5hbWUoYXR0cmlidXRlLm5vZGVOYW1lKTtcbiAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlc1tub2RlTmFtZV0gPSBuZXcgUHJvcGVydHkoZG9jdW1lbnQsIG5vZGVOYW1lLCBhdHRyaWJ1dGUudmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hZGRTdHlsZXNGcm9tU3R5bGVEZWZpbml0aW9uKCk7XG4gICAgICAgIC8vIGFkZCBpbmxpbmUgc3R5bGVzXG4gICAgICAgIGlmICh0aGlzLmdldEF0dHJpYnV0ZSgnc3R5bGUnKS5oYXNWYWx1ZSgpKSB7XG4gICAgICAgICAgICBjb25zdCBzdHlsZXMgPSB0aGlzLmdldEF0dHJpYnV0ZSgnc3R5bGUnKS5nZXRTdHJpbmcoKS5zcGxpdCgnOycpLm1hcCgoXyk9Pl8udHJpbSgpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgc3R5bGVzLmZvckVhY2goKHN0eWxlKT0+e1xuICAgICAgICAgICAgICAgIGlmICghc3R5bGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBbbmFtZSwgdmFsdWVdID0gc3R5bGUuc3BsaXQoJzonKS5tYXAoKF8pPT5fLnRyaW0oKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHlsZXNbbmFtZV0gPSBuZXcgUHJvcGVydHkoZG9jdW1lbnQsIG5hbWUsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IGRlZmluaXRpb25zICB9ID0gZG9jdW1lbnQ7XG4gICAgICAgIGNvbnN0IGlkID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ2lkJyk7XG4gICAgICAgIC8vIGFkZCBpZFxuICAgICAgICBpZiAoaWQuaGFzVmFsdWUoKSkge1xuICAgICAgICAgICAgaWYgKCFkZWZpbml0aW9uc1tpZC5nZXRTdHJpbmcoKV0pIHtcbiAgICAgICAgICAgICAgICBkZWZpbml0aW9uc1tpZC5nZXRTdHJpbmcoKV0gPSB0aGlzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIEFycmF5LmZyb20obm9kZS5jaGlsZE5vZGVzKS5mb3JFYWNoKChjaGlsZE5vZGUpPT57XG4gICAgICAgICAgICBpZiAoY2hpbGROb2RlLm5vZGVUeXBlID09PSAxKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRDaGlsZChjaGlsZE5vZGUpIC8vIEVMRU1FTlRfTk9ERVxuICAgICAgICAgICAgICAgIDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2FwdHVyZVRleHROb2RlcyAmJiAoY2hpbGROb2RlLm5vZGVUeXBlID09PSAzIHx8IGNoaWxkTm9kZS5ub2RlVHlwZSA9PT0gNCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0ZXh0Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNoaWxkTm9kZSk7XG4gICAgICAgICAgICAgICAgaWYgKHRleHROb2RlLmdldFRleHQoKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkQ2hpbGQodGV4dE5vZGUpIC8vIFRFWFRfTk9ERVxuICAgICAgICAgICAgICAgICAgICA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59XG5FbGVtZW50Lmlnbm9yZUNoaWxkVHlwZXMgPSBbXG4gICAgJ3RpdGxlJ1xuXTtcblxuY2xhc3MgVW5rbm93bkVsZW1lbnQgZXh0ZW5kcyBFbGVtZW50IHtcbiAgICBjb25zdHJ1Y3Rvcihkb2N1bWVudCwgbm9kZSwgY2FwdHVyZVRleHROb2Rlcyl7XG4gICAgICAgIHN1cGVyKGRvY3VtZW50LCBub2RlLCBjYXB0dXJlVGV4dE5vZGVzKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHdyYXBGb250RmFtaWx5KGZvbnRGYW1pbHkpIHtcbiAgICBjb25zdCB0cmltbWVkID0gZm9udEZhbWlseS50cmltKCk7XG4gICAgcmV0dXJuIC9eKCd8XCIpLy50ZXN0KHRyaW1tZWQpID8gdHJpbW1lZCA6IFwiXFxcIlwiLmNvbmNhdCh0cmltbWVkLCBcIlxcXCJcIik7XG59XG5mdW5jdGlvbiBwcmVwYXJlRm9udEZhbWlseShmb250RmFtaWx5KSB7XG4gICAgcmV0dXJuIHR5cGVvZiBwcm9jZXNzID09PSAndW5kZWZpbmVkJyA/IGZvbnRGYW1pbHkgOiBmb250RmFtaWx5LnRyaW0oKS5zcGxpdCgnLCcpLm1hcCh3cmFwRm9udEZhbWlseSkuam9pbignLCcpO1xufVxuLyoqXG4gKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvZm9udC1zdHlsZVxuICogQHBhcmFtIGZvbnRTdHlsZVxuICogQHJldHVybnMgQ1NTIGZvbnQgc3R5bGUuXG4gKi8gZnVuY3Rpb24gcHJlcGFyZUZvbnRTdHlsZShmb250U3R5bGUpIHtcbiAgICBpZiAoIWZvbnRTdHlsZSkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGNvbnN0IHRhcmdldEZvbnRTdHlsZSA9IGZvbnRTdHlsZS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICBzd2l0Y2godGFyZ2V0Rm9udFN0eWxlKXtcbiAgICAgICAgY2FzZSAnbm9ybWFsJzpcbiAgICAgICAgY2FzZSAnaXRhbGljJzpcbiAgICAgICAgY2FzZSAnb2JsaXF1ZSc6XG4gICAgICAgIGNhc2UgJ2luaGVyaXQnOlxuICAgICAgICBjYXNlICdpbml0aWFsJzpcbiAgICAgICAgY2FzZSAndW5zZXQnOlxuICAgICAgICAgICAgcmV0dXJuIHRhcmdldEZvbnRTdHlsZTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGlmICgvXm9ibGlxdWVcXHMrKC18KVxcZCtkZWckLy50ZXN0KHRhcmdldEZvbnRTdHlsZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0Rm9udFN0eWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbn1cbi8qKlxuICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL2ZvbnQtd2VpZ2h0XG4gKiBAcGFyYW0gZm9udFdlaWdodFxuICogQHJldHVybnMgQ1NTIGZvbnQgd2VpZ2h0LlxuICovIGZ1bmN0aW9uIHByZXBhcmVGb250V2VpZ2h0KGZvbnRXZWlnaHQpIHtcbiAgICBpZiAoIWZvbnRXZWlnaHQpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICBjb25zdCB0YXJnZXRGb250V2VpZ2h0ID0gZm9udFdlaWdodC50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICBzd2l0Y2godGFyZ2V0Rm9udFdlaWdodCl7XG4gICAgICAgIGNhc2UgJ25vcm1hbCc6XG4gICAgICAgIGNhc2UgJ2JvbGQnOlxuICAgICAgICBjYXNlICdsaWdodGVyJzpcbiAgICAgICAgY2FzZSAnYm9sZGVyJzpcbiAgICAgICAgY2FzZSAnaW5oZXJpdCc6XG4gICAgICAgIGNhc2UgJ2luaXRpYWwnOlxuICAgICAgICBjYXNlICd1bnNldCc6XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0Rm9udFdlaWdodDtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGlmICgvXltcXGQuXSskLy50ZXN0KHRhcmdldEZvbnRXZWlnaHQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldEZvbnRXZWlnaHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxufVxuY2xhc3MgRm9udCB7XG4gICAgc3RhdGljIHBhcnNlKCkge1xuICAgICAgICBsZXQgZm9udCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzBdIDogJycsIGluaGVyaXQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHZvaWQgMDtcbiAgICAgICAgbGV0IGZvbnRTdHlsZSA9ICcnO1xuICAgICAgICBsZXQgZm9udFZhcmlhbnQgPSAnJztcbiAgICAgICAgbGV0IGZvbnRXZWlnaHQgPSAnJztcbiAgICAgICAgbGV0IGZvbnRTaXplID0gJyc7XG4gICAgICAgIGxldCBmb250RmFtaWx5ID0gJyc7XG4gICAgICAgIGNvbnN0IHBhcnRzID0gY29tcHJlc3NTcGFjZXMoZm9udCkudHJpbSgpLnNwbGl0KCcgJyk7XG4gICAgICAgIGNvbnN0IHNldCA9IHtcbiAgICAgICAgICAgIGZvbnRTaXplOiBmYWxzZSxcbiAgICAgICAgICAgIGZvbnRTdHlsZTogZmFsc2UsXG4gICAgICAgICAgICBmb250V2VpZ2h0OiBmYWxzZSxcbiAgICAgICAgICAgIGZvbnRWYXJpYW50OiBmYWxzZVxuICAgICAgICB9O1xuICAgICAgICBwYXJ0cy5mb3JFYWNoKChwYXJ0KT0+e1xuICAgICAgICAgICAgc3dpdGNoKHRydWUpe1xuICAgICAgICAgICAgICAgIGNhc2UgIXNldC5mb250U3R5bGUgJiYgRm9udC5zdHlsZXMuaW5jbHVkZXMocGFydCk6XG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJ0ICE9PSAnaW5oZXJpdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTdHlsZSA9IHBhcnQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgc2V0LmZvbnRTdHlsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgIXNldC5mb250VmFyaWFudCAmJiBGb250LnZhcmlhbnRzLmluY2x1ZGVzKHBhcnQpOlxuICAgICAgICAgICAgICAgICAgICBpZiAocGFydCAhPT0gJ2luaGVyaXQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb250VmFyaWFudCA9IHBhcnQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgc2V0LmZvbnRTdHlsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHNldC5mb250VmFyaWFudCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgIXNldC5mb250V2VpZ2h0ICYmIEZvbnQud2VpZ2h0cy5pbmNsdWRlcyhwYXJ0KTpcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnQgIT09ICdpbmhlcml0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9udFdlaWdodCA9IHBhcnQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgc2V0LmZvbnRTdHlsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHNldC5mb250VmFyaWFudCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHNldC5mb250V2VpZ2h0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAhc2V0LmZvbnRTaXplOlxuICAgICAgICAgICAgICAgICAgICBpZiAocGFydCAhPT0gJ2luaGVyaXQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZSA9IHBhcnQuc3BsaXQoJy8nKVswXSB8fCAnJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzZXQuZm9udFN0eWxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgc2V0LmZvbnRWYXJpYW50ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgc2V0LmZvbnRXZWlnaHQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBzZXQuZm9udFNpemUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBpZiAocGFydCAhPT0gJ2luaGVyaXQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb250RmFtaWx5ICs9IHBhcnQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBuZXcgRm9udChmb250U3R5bGUsIGZvbnRWYXJpYW50LCBmb250V2VpZ2h0LCBmb250U2l6ZSwgZm9udEZhbWlseSwgaW5oZXJpdCk7XG4gICAgfVxuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgcHJlcGFyZUZvbnRTdHlsZSh0aGlzLmZvbnRTdHlsZSksXG4gICAgICAgICAgICB0aGlzLmZvbnRWYXJpYW50LFxuICAgICAgICAgICAgcHJlcGFyZUZvbnRXZWlnaHQodGhpcy5mb250V2VpZ2h0KSxcbiAgICAgICAgICAgIHRoaXMuZm9udFNpemUsXG4gICAgICAgICAgICAvLyBXcmFwIGZvbnRGYW1pbHkgb25seSBvbiBub2RlanMgYW5kIG9ubHkgZm9yIGNhbnZhcy5jdHhcbiAgICAgICAgICAgIHByZXBhcmVGb250RmFtaWx5KHRoaXMuZm9udEZhbWlseSlcbiAgICAgICAgXS5qb2luKCcgJykudHJpbSgpO1xuICAgIH1cbiAgICBjb25zdHJ1Y3Rvcihmb250U3R5bGUsIGZvbnRWYXJpYW50LCBmb250V2VpZ2h0LCBmb250U2l6ZSwgZm9udEZhbWlseSwgaW5oZXJpdCl7XG4gICAgICAgIGNvbnN0IGluaGVyaXRGb250ID0gaW5oZXJpdCA/IHR5cGVvZiBpbmhlcml0ID09PSAnc3RyaW5nJyA/IEZvbnQucGFyc2UoaW5oZXJpdCkgOiBpbmhlcml0IDoge307XG4gICAgICAgIHRoaXMuZm9udEZhbWlseSA9IGZvbnRGYW1pbHkgfHwgaW5oZXJpdEZvbnQuZm9udEZhbWlseTtcbiAgICAgICAgdGhpcy5mb250U2l6ZSA9IGZvbnRTaXplIHx8IGluaGVyaXRGb250LmZvbnRTaXplO1xuICAgICAgICB0aGlzLmZvbnRTdHlsZSA9IGZvbnRTdHlsZSB8fCBpbmhlcml0Rm9udC5mb250U3R5bGU7XG4gICAgICAgIHRoaXMuZm9udFdlaWdodCA9IGZvbnRXZWlnaHQgfHwgaW5oZXJpdEZvbnQuZm9udFdlaWdodDtcbiAgICAgICAgdGhpcy5mb250VmFyaWFudCA9IGZvbnRWYXJpYW50IHx8IGluaGVyaXRGb250LmZvbnRWYXJpYW50O1xuICAgIH1cbn1cbkZvbnQuc3R5bGVzID0gJ25vcm1hbHxpdGFsaWN8b2JsaXF1ZXxpbmhlcml0JztcbkZvbnQudmFyaWFudHMgPSAnbm9ybWFsfHNtYWxsLWNhcHN8aW5oZXJpdCc7XG5Gb250LndlaWdodHMgPSAnbm9ybWFsfGJvbGR8Ym9sZGVyfGxpZ2h0ZXJ8MTAwfDIwMHwzMDB8NDAwfDUwMHw2MDB8NzAwfDgwMHw5MDB8aW5oZXJpdCc7XG5cbmNsYXNzIEJvdW5kaW5nQm94IHtcbiAgICBnZXQgeCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMueDE7XG4gICAgfVxuICAgIGdldCB5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy55MTtcbiAgICB9XG4gICAgZ2V0IHdpZHRoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy54MiAtIHRoaXMueDE7XG4gICAgfVxuICAgIGdldCBoZWlnaHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnkyIC0gdGhpcy55MTtcbiAgICB9XG4gICAgYWRkUG9pbnQoeCwgeSkge1xuICAgICAgICBpZiAodHlwZW9mIHggIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBpZiAoaXNOYU4odGhpcy54MSkgfHwgaXNOYU4odGhpcy54MikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLngxID0geDtcbiAgICAgICAgICAgICAgICB0aGlzLngyID0geDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh4IDwgdGhpcy54MSkge1xuICAgICAgICAgICAgICAgIHRoaXMueDEgPSB4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHggPiB0aGlzLngyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy54MiA9IHg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB5ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgaWYgKGlzTmFOKHRoaXMueTEpIHx8IGlzTmFOKHRoaXMueTIpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy55MSA9IHk7XG4gICAgICAgICAgICAgICAgdGhpcy55MiA9IHk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoeSA8IHRoaXMueTEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnkxID0geTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh5ID4gdGhpcy55Mikge1xuICAgICAgICAgICAgICAgIHRoaXMueTIgPSB5O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGFkZFgoeCkge1xuICAgICAgICB0aGlzLmFkZFBvaW50KHgsIDApO1xuICAgIH1cbiAgICBhZGRZKHkpIHtcbiAgICAgICAgdGhpcy5hZGRQb2ludCgwLCB5KTtcbiAgICB9XG4gICAgYWRkQm91bmRpbmdCb3goYm91bmRpbmdCb3gpIHtcbiAgICAgICAgaWYgKCFib3VuZGluZ0JveCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgeDEgLCB5MSAsIHgyICwgeTIgIH0gPSBib3VuZGluZ0JveDtcbiAgICAgICAgdGhpcy5hZGRQb2ludCh4MSwgeTEpO1xuICAgICAgICB0aGlzLmFkZFBvaW50KHgyLCB5Mik7XG4gICAgfVxuICAgIHN1bUN1YmljKHQsIHAwLCBwMSwgcDIsIHAzKSB7XG4gICAgICAgIHJldHVybiBNYXRoLnBvdygxIC0gdCwgMykgKiBwMCArIDMgKiBNYXRoLnBvdygxIC0gdCwgMikgKiB0ICogcDEgKyAzICogKDEgLSB0KSAqIE1hdGgucG93KHQsIDIpICogcDIgKyBNYXRoLnBvdyh0LCAzKSAqIHAzO1xuICAgIH1cbiAgICBiZXppZXJDdXJ2ZUFkZChmb3JYLCBwMCwgcDEsIHAyLCBwMykge1xuICAgICAgICBjb25zdCBiID0gNiAqIHAwIC0gMTIgKiBwMSArIDYgKiBwMjtcbiAgICAgICAgY29uc3QgYSA9IC0zICogcDAgKyA5ICogcDEgLSA5ICogcDIgKyAzICogcDM7XG4gICAgICAgIGNvbnN0IGMgPSAzICogcDEgLSAzICogcDA7XG4gICAgICAgIGlmIChhID09PSAwKSB7XG4gICAgICAgICAgICBpZiAoYiA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHQgPSAtYyAvIGI7XG4gICAgICAgICAgICBpZiAoMCA8IHQgJiYgdCA8IDEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZm9yWCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZFgodGhpcy5zdW1DdWJpYyh0LCBwMCwgcDEsIHAyLCBwMykpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkWSh0aGlzLnN1bUN1YmljKHQsIHAwLCBwMSwgcDIsIHAzKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGIyYWMgPSBNYXRoLnBvdyhiLCAyKSAtIDQgKiBjICogYTtcbiAgICAgICAgaWYgKGIyYWMgPCAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdDEgPSAoLWIgKyBNYXRoLnNxcnQoYjJhYykpIC8gKDIgKiBhKTtcbiAgICAgICAgaWYgKDAgPCB0MSAmJiB0MSA8IDEpIHtcbiAgICAgICAgICAgIGlmIChmb3JYKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRYKHRoaXMuc3VtQ3ViaWModDEsIHAwLCBwMSwgcDIsIHAzKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkWSh0aGlzLnN1bUN1YmljKHQxLCBwMCwgcDEsIHAyLCBwMykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHQyID0gKC1iIC0gTWF0aC5zcXJ0KGIyYWMpKSAvICgyICogYSk7XG4gICAgICAgIGlmICgwIDwgdDIgJiYgdDIgPCAxKSB7XG4gICAgICAgICAgICBpZiAoZm9yWCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkWCh0aGlzLnN1bUN1YmljKHQyLCBwMCwgcDEsIHAyLCBwMykpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZFkodGhpcy5zdW1DdWJpYyh0MiwgcDAsIHAxLCBwMiwgcDMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBmcm9tIGh0dHA6Ly9ibG9nLmhhY2tlcnMtY2FmZS5uZXQvMjAwOS8wNi9ob3ctdG8tY2FsY3VsYXRlLWJlemllci1jdXJ2ZXMtYm91bmRpbmcuaHRtbFxuICAgIGFkZEJlemllckN1cnZlKHAweCwgcDB5LCBwMXgsIHAxeSwgcDJ4LCBwMnksIHAzeCwgcDN5KSB7XG4gICAgICAgIHRoaXMuYWRkUG9pbnQocDB4LCBwMHkpO1xuICAgICAgICB0aGlzLmFkZFBvaW50KHAzeCwgcDN5KTtcbiAgICAgICAgdGhpcy5iZXppZXJDdXJ2ZUFkZCh0cnVlLCBwMHgsIHAxeCwgcDJ4LCBwM3gpO1xuICAgICAgICB0aGlzLmJlemllckN1cnZlQWRkKGZhbHNlLCBwMHksIHAxeSwgcDJ5LCBwM3kpO1xuICAgIH1cbiAgICBhZGRRdWFkcmF0aWNDdXJ2ZShwMHgsIHAweSwgcDF4LCBwMXksIHAyeCwgcDJ5KSB7XG4gICAgICAgIGNvbnN0IGNwMXggPSBwMHggKyAyIC8gMyAqIChwMXggLSBwMHgpIC8vIENQMSA9IFFQMCArIDIvMyAqKFFQMS1RUDApXG4gICAgICAgIDtcbiAgICAgICAgY29uc3QgY3AxeSA9IHAweSArIDIgLyAzICogKHAxeSAtIHAweSkgLy8gQ1AxID0gUVAwICsgMi8zICooUVAxLVFQMClcbiAgICAgICAgO1xuICAgICAgICBjb25zdCBjcDJ4ID0gY3AxeCArIDEgLyAzICogKHAyeCAtIHAweCkgLy8gQ1AyID0gQ1AxICsgMS8zICooUVAyLVFQMClcbiAgICAgICAgO1xuICAgICAgICBjb25zdCBjcDJ5ID0gY3AxeSArIDEgLyAzICogKHAyeSAtIHAweSkgLy8gQ1AyID0gQ1AxICsgMS8zICooUVAyLVFQMClcbiAgICAgICAgO1xuICAgICAgICB0aGlzLmFkZEJlemllckN1cnZlKHAweCwgcDB5LCBjcDF4LCBjcDJ4LCBjcDF5LCBjcDJ5LCBwMngsIHAyeSk7XG4gICAgfVxuICAgIGlzUG9pbnRJbkJveCh4LCB5KSB7XG4gICAgICAgIGNvbnN0IHsgeDEgLCB5MSAsIHgyICwgeTIgIH0gPSB0aGlzO1xuICAgICAgICByZXR1cm4geDEgPD0geCAmJiB4IDw9IHgyICYmIHkxIDw9IHkgJiYgeSA8PSB5MjtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoeDEgPSBOdW1iZXIuTmFOLCB5MSA9IE51bWJlci5OYU4sIHgyID0gTnVtYmVyLk5hTiwgeTIgPSBOdW1iZXIuTmFOKXtcbiAgICAgICAgdGhpcy54MSA9IHgxO1xuICAgICAgICB0aGlzLnkxID0geTE7XG4gICAgICAgIHRoaXMueDIgPSB4MjtcbiAgICAgICAgdGhpcy55MiA9IHkyO1xuICAgICAgICB0aGlzLmFkZFBvaW50KHgxLCB5MSk7XG4gICAgICAgIHRoaXMuYWRkUG9pbnQoeDIsIHkyKTtcbiAgICB9XG59XG5cbmNsYXNzIFJlbmRlcmVkRWxlbWVudCBleHRlbmRzIEVsZW1lbnQge1xuICAgIGNhbGN1bGF0ZU9wYWNpdHkoKSB7XG4gICAgICAgIGxldCBvcGFjaXR5ID0gMTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzLCBjb25zaXN0ZW50LXRoaXNcbiAgICAgICAgbGV0IGVsZW1lbnQgPSB0aGlzO1xuICAgICAgICB3aGlsZShlbGVtZW50KXtcbiAgICAgICAgICAgIGNvbnN0IG9wYWNpdHlTdHlsZSA9IGVsZW1lbnQuZ2V0U3R5bGUoJ29wYWNpdHknLCBmYWxzZSwgdHJ1ZSkgLy8gbm8gYW5jZXN0b3JzIG9uIHN0eWxlIGNhbGxcbiAgICAgICAgICAgIDtcbiAgICAgICAgICAgIGlmIChvcGFjaXR5U3R5bGUuaGFzVmFsdWUodHJ1ZSkpIHtcbiAgICAgICAgICAgICAgICBvcGFjaXR5ICo9IG9wYWNpdHlTdHlsZS5nZXROdW1iZXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3BhY2l0eTtcbiAgICB9XG4gICAgc2V0Q29udGV4dChjdHgpIHtcbiAgICAgICAgbGV0IGZyb21NZWFzdXJlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMV0gOiBmYWxzZTtcbiAgICAgICAgaWYgKCFmcm9tTWVhc3VyZSkge1xuICAgICAgICAgICAgLy8gZmlsbFxuICAgICAgICAgICAgY29uc3QgZmlsbFN0eWxlUHJvcCA9IHRoaXMuZ2V0U3R5bGUoJ2ZpbGwnKTtcbiAgICAgICAgICAgIGNvbnN0IGZpbGxPcGFjaXR5U3R5bGVQcm9wID0gdGhpcy5nZXRTdHlsZSgnZmlsbC1vcGFjaXR5Jyk7XG4gICAgICAgICAgICBjb25zdCBzdHJva2VTdHlsZVByb3AgPSB0aGlzLmdldFN0eWxlKCdzdHJva2UnKTtcbiAgICAgICAgICAgIGNvbnN0IHN0cm9rZU9wYWNpdHlQcm9wID0gdGhpcy5nZXRTdHlsZSgnc3Ryb2tlLW9wYWNpdHknKTtcbiAgICAgICAgICAgIGlmIChmaWxsU3R5bGVQcm9wLmlzVXJsRGVmaW5pdGlvbigpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsbFN0eWxlID0gZmlsbFN0eWxlUHJvcC5nZXRGaWxsU3R5bGVEZWZpbml0aW9uKHRoaXMsIGZpbGxPcGFjaXR5U3R5bGVQcm9wKTtcbiAgICAgICAgICAgICAgICBpZiAoZmlsbFN0eWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSBmaWxsU3R5bGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChmaWxsU3R5bGVQcm9wLmhhc1ZhbHVlKCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoZmlsbFN0eWxlUHJvcC5nZXRTdHJpbmcoKSA9PT0gJ2N1cnJlbnRDb2xvcicpIHtcbiAgICAgICAgICAgICAgICAgICAgZmlsbFN0eWxlUHJvcC5zZXRWYWx1ZSh0aGlzLmdldFN0eWxlKCdjb2xvcicpLmdldENvbG9yKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBmaWxsU3R5bGUgPSBmaWxsU3R5bGVQcm9wLmdldENvbG9yKCk7XG4gICAgICAgICAgICAgICAgaWYgKGZpbGxTdHlsZSAhPT0gJ2luaGVyaXQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSBmaWxsU3R5bGUgPT09ICdub25lJyA/ICdyZ2JhKDAsMCwwLDApJyA6IGZpbGxTdHlsZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmlsbE9wYWNpdHlTdHlsZVByb3AuaGFzVmFsdWUoKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGxTdHlsZSA9IG5ldyBQcm9wZXJ0eSh0aGlzLmRvY3VtZW50LCAnZmlsbCcsIGN0eC5maWxsU3R5bGUpLmFkZE9wYWNpdHkoZmlsbE9wYWNpdHlTdHlsZVByb3ApLmdldENvbG9yKCk7XG4gICAgICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IGZpbGxTdHlsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHN0cm9rZVxuICAgICAgICAgICAgaWYgKHN0cm9rZVN0eWxlUHJvcC5pc1VybERlZmluaXRpb24oKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0cm9rZVN0eWxlID0gc3Ryb2tlU3R5bGVQcm9wLmdldEZpbGxTdHlsZURlZmluaXRpb24odGhpcywgc3Ryb2tlT3BhY2l0eVByb3ApO1xuICAgICAgICAgICAgICAgIGlmIChzdHJva2VTdHlsZSkge1xuICAgICAgICAgICAgICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPSBzdHJva2VTdHlsZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN0cm9rZVN0eWxlUHJvcC5oYXNWYWx1ZSgpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHN0cm9rZVN0eWxlUHJvcC5nZXRTdHJpbmcoKSA9PT0gJ2N1cnJlbnRDb2xvcicpIHtcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlU3R5bGVQcm9wLnNldFZhbHVlKHRoaXMuZ2V0U3R5bGUoJ2NvbG9yJykuZ2V0Q29sb3IoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHN0cm9rZVN0eWxlID0gc3Ryb2tlU3R5bGVQcm9wLmdldFN0cmluZygpO1xuICAgICAgICAgICAgICAgIGlmIChzdHJva2VTdHlsZSAhPT0gJ2luaGVyaXQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eC5zdHJva2VTdHlsZSA9IHN0cm9rZVN0eWxlID09PSAnbm9uZScgPyAncmdiYSgwLDAsMCwwKScgOiBzdHJva2VTdHlsZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc3Ryb2tlT3BhY2l0eVByb3AuaGFzVmFsdWUoKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0cm9rZVN0eWxlID0gbmV3IFByb3BlcnR5KHRoaXMuZG9jdW1lbnQsICdzdHJva2UnLCBjdHguc3Ryb2tlU3R5bGUpLmFkZE9wYWNpdHkoc3Ryb2tlT3BhY2l0eVByb3ApLmdldFN0cmluZygpO1xuICAgICAgICAgICAgICAgIGN0eC5zdHJva2VTdHlsZSA9IHN0cm9rZVN0eWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgc3Ryb2tlV2lkdGhTdHlsZVByb3AgPSB0aGlzLmdldFN0eWxlKCdzdHJva2Utd2lkdGgnKTtcbiAgICAgICAgICAgIGlmIChzdHJva2VXaWR0aFN0eWxlUHJvcC5oYXNWYWx1ZSgpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3TGluZVdpZHRoID0gc3Ryb2tlV2lkdGhTdHlsZVByb3AuZ2V0UGl4ZWxzKCk7XG4gICAgICAgICAgICAgICAgY3R4LmxpbmVXaWR0aCA9ICFuZXdMaW5lV2lkdGggPyBQU0VVRE9fWkVSTyAvLyBicm93c2VycyBkb24ndCByZXNwZWN0IDAgKG9yIG5vZGUtY2FudmFzPyA6LSlcbiAgICAgICAgICAgICAgICAgOiBuZXdMaW5lV2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzdHJva2VMaW5lY2FwU3R5bGVQcm9wID0gdGhpcy5nZXRTdHlsZSgnc3Ryb2tlLWxpbmVjYXAnKTtcbiAgICAgICAgICAgIGNvbnN0IHN0cm9rZUxpbmVqb2luU3R5bGVQcm9wID0gdGhpcy5nZXRTdHlsZSgnc3Ryb2tlLWxpbmVqb2luJyk7XG4gICAgICAgICAgICBjb25zdCBzdHJva2VNaXRlcmxpbWl0UHJvcCA9IHRoaXMuZ2V0U3R5bGUoJ3N0cm9rZS1taXRlcmxpbWl0Jyk7XG4gICAgICAgICAgICAvLyBORUVEIFRFU1RcbiAgICAgICAgICAgIC8vIGNvbnN0IHBvaW50T3JkZXJTdHlsZVByb3AgPSB0aGlzLmdldFN0eWxlKCdwYWludC1vcmRlcicpO1xuICAgICAgICAgICAgY29uc3Qgc3Ryb2tlRGFzaGFycmF5U3R5bGVQcm9wID0gdGhpcy5nZXRTdHlsZSgnc3Ryb2tlLWRhc2hhcnJheScpO1xuICAgICAgICAgICAgY29uc3Qgc3Ryb2tlRGFzaG9mZnNldFByb3AgPSB0aGlzLmdldFN0eWxlKCdzdHJva2UtZGFzaG9mZnNldCcpO1xuICAgICAgICAgICAgaWYgKHN0cm9rZUxpbmVjYXBTdHlsZVByb3AuaGFzVmFsdWUoKSkge1xuICAgICAgICAgICAgICAgIGN0eC5saW5lQ2FwID0gc3Ryb2tlTGluZWNhcFN0eWxlUHJvcC5nZXRTdHJpbmcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzdHJva2VMaW5lam9pblN0eWxlUHJvcC5oYXNWYWx1ZSgpKSB7XG4gICAgICAgICAgICAgICAgY3R4LmxpbmVKb2luID0gc3Ryb2tlTGluZWpvaW5TdHlsZVByb3AuZ2V0U3RyaW5nKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc3Ryb2tlTWl0ZXJsaW1pdFByb3AuaGFzVmFsdWUoKSkge1xuICAgICAgICAgICAgICAgIGN0eC5taXRlckxpbWl0ID0gc3Ryb2tlTWl0ZXJsaW1pdFByb3AuZ2V0TnVtYmVyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBORUVEIFRFU1RcbiAgICAgICAgICAgIC8vIGlmIChwb2ludE9yZGVyU3R5bGVQcm9wLmhhc1ZhbHVlKCkpIHtcbiAgICAgICAgICAgIC8vICAgLy8gP1xuICAgICAgICAgICAgLy8gICBjdHgucGFpbnRPcmRlciA9IHBvaW50T3JkZXJTdHlsZVByb3AuZ2V0VmFsdWUoKTtcbiAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgIGlmIChzdHJva2VEYXNoYXJyYXlTdHlsZVByb3AuaGFzVmFsdWUoKSAmJiBzdHJva2VEYXNoYXJyYXlTdHlsZVByb3AuZ2V0U3RyaW5nKCkgIT09ICdub25lJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdhcHMgPSB0b051bWJlcnMoc3Ryb2tlRGFzaGFycmF5U3R5bGVQcm9wLmdldFN0cmluZygpKTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGN0eC5zZXRMaW5lRGFzaCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4LnNldExpbmVEYXNoKGdhcHMpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSAvLyBAdHMtZXhwZWN0LWVycm9yIEhhbmRsZSBicm93c2VyIHByZWZpeC5cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGN0eC53ZWJraXRMaW5lRGFzaCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBIYW5kbGUgYnJvd3NlciBwcmVmaXguXG4gICAgICAgICAgICAgICAgICAgIGN0eC53ZWJraXRMaW5lRGFzaCA9IGdhcHM7XG4gICAgICAgICAgICAgICAgfSBlbHNlIC8vIEB0cy1leHBlY3QtZXJyb3IgSGFuZGxlIGJyb3dzZXIgcHJlZml4LlxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY3R4Lm1vekRhc2ggIT09ICd1bmRlZmluZWQnICYmICEoZ2Fwcy5sZW5ndGggPT09IDEgJiYgZ2Fwc1swXSA9PT0gMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBIYW5kbGUgYnJvd3NlciBwcmVmaXguXG4gICAgICAgICAgICAgICAgICAgIGN0eC5tb3pEYXNoID0gZ2FwcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gc3Ryb2tlRGFzaG9mZnNldFByb3AuZ2V0UGl4ZWxzKCk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjdHgubGluZURhc2hPZmZzZXQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eC5saW5lRGFzaE9mZnNldCA9IG9mZnNldDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgLy8gQHRzLWV4cGVjdC1lcnJvciBIYW5kbGUgYnJvd3NlciBwcmVmaXguXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjdHgud2Via2l0TGluZURhc2hPZmZzZXQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgSGFuZGxlIGJyb3dzZXIgcHJlZml4LlxuICAgICAgICAgICAgICAgICAgICBjdHgud2Via2l0TGluZURhc2hPZmZzZXQgPSBvZmZzZXQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIC8vIEB0cy1leHBlY3QtZXJyb3IgSGFuZGxlIGJyb3dzZXIgcHJlZml4LlxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY3R4Lm1vekRhc2hPZmZzZXQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgSGFuZGxlIGJyb3dzZXIgcHJlZml4LlxuICAgICAgICAgICAgICAgICAgICBjdHgubW96RGFzaE9mZnNldCA9IG9mZnNldDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gZm9udFxuICAgICAgICB0aGlzLm1vZGlmaWVkRW1TaXplU3RhY2sgPSBmYWxzZTtcbiAgICAgICAgaWYgKHR5cGVvZiBjdHguZm9udCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvbnRTdHlsZVByb3AgPSB0aGlzLmdldFN0eWxlKCdmb250Jyk7XG4gICAgICAgICAgICBjb25zdCBmb250U3R5bGVTdHlsZVByb3AgPSB0aGlzLmdldFN0eWxlKCdmb250LXN0eWxlJyk7XG4gICAgICAgICAgICBjb25zdCBmb250VmFyaWFudFN0eWxlUHJvcCA9IHRoaXMuZ2V0U3R5bGUoJ2ZvbnQtdmFyaWFudCcpO1xuICAgICAgICAgICAgY29uc3QgZm9udFdlaWdodFN0eWxlUHJvcCA9IHRoaXMuZ2V0U3R5bGUoJ2ZvbnQtd2VpZ2h0Jyk7XG4gICAgICAgICAgICBjb25zdCBmb250U2l6ZVN0eWxlUHJvcCA9IHRoaXMuZ2V0U3R5bGUoJ2ZvbnQtc2l6ZScpO1xuICAgICAgICAgICAgY29uc3QgZm9udEZhbWlseVN0eWxlUHJvcCA9IHRoaXMuZ2V0U3R5bGUoJ2ZvbnQtZmFtaWx5Jyk7XG4gICAgICAgICAgICBjb25zdCBmb250ID0gbmV3IEZvbnQoZm9udFN0eWxlU3R5bGVQcm9wLmdldFN0cmluZygpLCBmb250VmFyaWFudFN0eWxlUHJvcC5nZXRTdHJpbmcoKSwgZm9udFdlaWdodFN0eWxlUHJvcC5nZXRTdHJpbmcoKSwgZm9udFNpemVTdHlsZVByb3AuaGFzVmFsdWUoKSA/IFwiXCIuY29uY2F0KGZvbnRTaXplU3R5bGVQcm9wLmdldFBpeGVscyh0cnVlKSwgXCJweFwiKSA6ICcnLCBmb250RmFtaWx5U3R5bGVQcm9wLmdldFN0cmluZygpLCBGb250LnBhcnNlKGZvbnRTdHlsZVByb3AuZ2V0U3RyaW5nKCksIGN0eC5mb250KSk7XG4gICAgICAgICAgICBmb250U3R5bGVTdHlsZVByb3Auc2V0VmFsdWUoZm9udC5mb250U3R5bGUpO1xuICAgICAgICAgICAgZm9udFZhcmlhbnRTdHlsZVByb3Auc2V0VmFsdWUoZm9udC5mb250VmFyaWFudCk7XG4gICAgICAgICAgICBmb250V2VpZ2h0U3R5bGVQcm9wLnNldFZhbHVlKGZvbnQuZm9udFdlaWdodCk7XG4gICAgICAgICAgICBmb250U2l6ZVN0eWxlUHJvcC5zZXRWYWx1ZShmb250LmZvbnRTaXplKTtcbiAgICAgICAgICAgIGZvbnRGYW1pbHlTdHlsZVByb3Auc2V0VmFsdWUoZm9udC5mb250RmFtaWx5KTtcbiAgICAgICAgICAgIGN0eC5mb250ID0gZm9udC50b1N0cmluZygpO1xuICAgICAgICAgICAgaWYgKGZvbnRTaXplU3R5bGVQcm9wLmlzUGl4ZWxzKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRvY3VtZW50LmVtU2l6ZSA9IGZvbnRTaXplU3R5bGVQcm9wLmdldFBpeGVscygpO1xuICAgICAgICAgICAgICAgIHRoaXMubW9kaWZpZWRFbVNpemVTdGFjayA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFmcm9tTWVhc3VyZSkge1xuICAgICAgICAgICAgLy8gZWZmZWN0c1xuICAgICAgICAgICAgdGhpcy5hcHBseUVmZmVjdHMoY3R4KTtcbiAgICAgICAgICAgIC8vIG9wYWNpdHlcbiAgICAgICAgICAgIGN0eC5nbG9iYWxBbHBoYSA9IHRoaXMuY2FsY3VsYXRlT3BhY2l0eSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNsZWFyQ29udGV4dChjdHgpIHtcbiAgICAgICAgc3VwZXIuY2xlYXJDb250ZXh0KGN0eCk7XG4gICAgICAgIGlmICh0aGlzLm1vZGlmaWVkRW1TaXplU3RhY2spIHtcbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnQucG9wRW1TaXplKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3RydWN0b3IoLi4uYXJncyl7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3MpO1xuICAgICAgICB0aGlzLm1vZGlmaWVkRW1TaXplU3RhY2sgPSBmYWxzZTtcbiAgICB9XG59XG5cbmNsYXNzIFRleHRFbGVtZW50IGV4dGVuZHMgUmVuZGVyZWRFbGVtZW50IHtcbiAgICBzZXRDb250ZXh0KGN0eCkge1xuICAgICAgICBsZXQgZnJvbU1lYXN1cmUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHZvaWQgMCA/IGFyZ3VtZW50c1sxXSA6IGZhbHNlO1xuICAgICAgICBzdXBlci5zZXRDb250ZXh0KGN0eCwgZnJvbU1lYXN1cmUpO1xuICAgICAgICBjb25zdCB0ZXh0QmFzZWxpbmUgPSB0aGlzLmdldFN0eWxlKCdkb21pbmFudC1iYXNlbGluZScpLmdldFRleHRCYXNlbGluZSgpIHx8IHRoaXMuZ2V0U3R5bGUoJ2FsaWdubWVudC1iYXNlbGluZScpLmdldFRleHRCYXNlbGluZSgpO1xuICAgICAgICBpZiAodGV4dEJhc2VsaW5lKSB7XG4gICAgICAgICAgICBjdHgudGV4dEJhc2VsaW5lID0gdGV4dEJhc2VsaW5lO1xuICAgICAgICB9XG4gICAgfVxuICAgIGluaXRpYWxpemVDb29yZGluYXRlcygpIHtcbiAgICAgICAgdGhpcy54ID0gMDtcbiAgICAgICAgdGhpcy55ID0gMDtcbiAgICAgICAgdGhpcy5sZWFmVGV4dHMgPSBbXTtcbiAgICAgICAgdGhpcy50ZXh0Q2h1bmtTdGFydCA9IDA7XG4gICAgICAgIHRoaXMubWluWCA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgICAgICAgdGhpcy5tYXhYID0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO1xuICAgIH1cbiAgICBnZXRCb3VuZGluZ0JveChjdHgpIHtcbiAgICAgICAgaWYgKHRoaXMudHlwZSAhPT0gJ3RleHQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRURWxlbWVudEJvdW5kaW5nQm94KGN0eCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZmlyc3QsIGNhbGN1bGF0ZSBjaGlsZCBwb3NpdGlvbnNcbiAgICAgICAgdGhpcy5pbml0aWFsaXplQ29vcmRpbmF0ZXMoKTtcbiAgICAgICAgdGhpcy5hZGp1c3RDaGlsZENvb3JkaW5hdGVzUmVjdXJzaXZlKGN0eCk7XG4gICAgICAgIGxldCBib3VuZGluZ0JveCA9IG51bGw7XG4gICAgICAgIC8vIHRoZW4gY2FsY3VsYXRlIGJvdW5kaW5nIGJveFxuICAgICAgICB0aGlzLmNoaWxkcmVuLmZvckVhY2goKF8sIGkpPT57XG4gICAgICAgICAgICBjb25zdCBjaGlsZEJvdW5kaW5nQm94ID0gdGhpcy5nZXRDaGlsZEJvdW5kaW5nQm94KGN0eCwgdGhpcywgdGhpcywgaSk7XG4gICAgICAgICAgICBpZiAoIWJvdW5kaW5nQm94KSB7XG4gICAgICAgICAgICAgICAgYm91bmRpbmdCb3ggPSBjaGlsZEJvdW5kaW5nQm94O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBib3VuZGluZ0JveC5hZGRCb3VuZGluZ0JveChjaGlsZEJvdW5kaW5nQm94KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBib3VuZGluZ0JveDtcbiAgICB9XG4gICAgZ2V0Rm9udFNpemUoKSB7XG4gICAgICAgIGNvbnN0IHsgZG9jdW1lbnQgLCBwYXJlbnQgIH0gPSB0aGlzO1xuICAgICAgICBjb25zdCBpbmhlcml0Rm9udFNpemUgPSBGb250LnBhcnNlKGRvY3VtZW50LmN0eC5mb250KS5mb250U2l6ZTtcbiAgICAgICAgY29uc3QgZm9udFNpemUgPSBwYXJlbnQuZ2V0U3R5bGUoJ2ZvbnQtc2l6ZScpLmdldE51bWJlcihpbmhlcml0Rm9udFNpemUpO1xuICAgICAgICByZXR1cm4gZm9udFNpemU7XG4gICAgfVxuICAgIGdldFRFbGVtZW50Qm91bmRpbmdCb3goY3R4KSB7XG4gICAgICAgIGNvbnN0IGZvbnRTaXplID0gdGhpcy5nZXRGb250U2l6ZSgpO1xuICAgICAgICByZXR1cm4gbmV3IEJvdW5kaW5nQm94KHRoaXMueCwgdGhpcy55IC0gZm9udFNpemUsIHRoaXMueCArIHRoaXMubWVhc3VyZVRleHQoY3R4KSwgdGhpcy55KTtcbiAgICB9XG4gICAgZ2V0R2x5cGgoZm9udCwgdGV4dCwgaSkge1xuICAgICAgICBjb25zdCBjaGFyID0gdGV4dFtpXTtcbiAgICAgICAgbGV0IGdseXBoO1xuICAgICAgICBpZiAoZm9udC5pc0FyYWJpYykge1xuICAgICAgICAgICAgdmFyIHJlZjtcbiAgICAgICAgICAgIGNvbnN0IGxlbiA9IHRleHQubGVuZ3RoO1xuICAgICAgICAgICAgY29uc3QgcHJldkNoYXIgPSB0ZXh0W2kgLSAxXTtcbiAgICAgICAgICAgIGNvbnN0IG5leHRDaGFyID0gdGV4dFtpICsgMV07XG4gICAgICAgICAgICBsZXQgYXJhYmljRm9ybSA9ICdpc29sYXRlZCc7XG4gICAgICAgICAgICBpZiAoKGkgPT09IDAgfHwgcHJldkNoYXIgPT09ICcgJykgJiYgaSA8IGxlbiAtIDEgJiYgbmV4dENoYXIgIT09ICcgJykge1xuICAgICAgICAgICAgICAgIGFyYWJpY0Zvcm0gPSAndGVybWluYWwnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGkgPiAwICYmIHByZXZDaGFyICE9PSAnICcgJiYgaSA8IGxlbiAtIDEgJiYgbmV4dENoYXIgIT09ICcgJykge1xuICAgICAgICAgICAgICAgIGFyYWJpY0Zvcm0gPSAnbWVkaWFsJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpID4gMCAmJiBwcmV2Q2hhciAhPT0gJyAnICYmIChpID09PSBsZW4gLSAxIHx8IG5leHRDaGFyID09PSAnICcpKSB7XG4gICAgICAgICAgICAgICAgYXJhYmljRm9ybSA9ICdpbml0aWFsJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGdseXBoID0gKChyZWYgPSBmb250LmFyYWJpY0dseXBoc1tjaGFyXSkgPT09IG51bGwgfHwgcmVmID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZWZbYXJhYmljRm9ybV0pIHx8IGZvbnQuZ2x5cGhzW2NoYXJdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2x5cGggPSBmb250LmdseXBoc1tjaGFyXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWdseXBoKSB7XG4gICAgICAgICAgICBnbHlwaCA9IGZvbnQubWlzc2luZ0dseXBoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBnbHlwaDtcbiAgICB9XG4gICAgZ2V0VGV4dCgpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICBnZXRUZXh0RnJvbU5vZGUobm9kZSkge1xuICAgICAgICBjb25zdCB0ZXh0Tm9kZSA9IG5vZGUgfHwgdGhpcy5ub2RlO1xuICAgICAgICBjb25zdCBjaGlsZE5vZGVzID0gQXJyYXkuZnJvbSh0ZXh0Tm9kZS5wYXJlbnROb2RlLmNoaWxkTm9kZXMpO1xuICAgICAgICBjb25zdCBpbmRleCA9IGNoaWxkTm9kZXMuaW5kZXhPZih0ZXh0Tm9kZSk7XG4gICAgICAgIGNvbnN0IGxhc3RJbmRleCA9IGNoaWxkTm9kZXMubGVuZ3RoIC0gMTtcbiAgICAgICAgbGV0IHRleHQgPSBjb21wcmVzc1NwYWNlcygvLyB0ZXh0Tm9kZS52YWx1ZVxuICAgICAgICAvLyB8fCB0ZXh0Tm9kZS50ZXh0XG4gICAgICAgIHRleHROb2RlLnRleHRDb250ZW50IHx8ICcnKTtcbiAgICAgICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICB0ZXh0ID0gdHJpbUxlZnQodGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluZGV4ID09PSBsYXN0SW5kZXgpIHtcbiAgICAgICAgICAgIHRleHQgPSB0cmltUmlnaHQodGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfVxuICAgIHJlbmRlckNoaWxkcmVuKGN0eCkge1xuICAgICAgICBpZiAodGhpcy50eXBlICE9PSAndGV4dCcpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyVEVsZW1lbnRDaGlsZHJlbihjdHgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIGZpcnN0LCBjYWxjdWxhdGUgY2hpbGQgcG9zaXRpb25zXG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZUNvb3JkaW5hdGVzKCk7XG4gICAgICAgIHRoaXMuYWRqdXN0Q2hpbGRDb29yZGluYXRlc1JlY3Vyc2l2ZShjdHgpO1xuICAgICAgICAvLyB0aGVuIHJlbmRlclxuICAgICAgICB0aGlzLmNoaWxkcmVuLmZvckVhY2goKF8sIGkpPT57XG4gICAgICAgICAgICB0aGlzLnJlbmRlckNoaWxkKGN0eCwgdGhpcywgdGhpcywgaSk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCB7IG1vdXNlICB9ID0gdGhpcy5kb2N1bWVudC5zY3JlZW47XG4gICAgICAgIC8vIERvIG5vdCBjYWxjIGJvdW5kaW5nIGJveCBpZiBtb3VzZSBpcyBub3Qgd29ya2luZy5cbiAgICAgICAgaWYgKG1vdXNlLmlzV29ya2luZygpKSB7XG4gICAgICAgICAgICBtb3VzZS5jaGVja0JvdW5kaW5nQm94KHRoaXMsIHRoaXMuZ2V0Qm91bmRpbmdCb3goY3R4KSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVuZGVyVEVsZW1lbnRDaGlsZHJlbihjdHgpIHtcbiAgICAgICAgY29uc3QgeyBkb2N1bWVudCAsIHBhcmVudCAgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IHJlbmRlclRleHQgPSB0aGlzLmdldFRleHQoKTtcbiAgICAgICAgY29uc3QgY3VzdG9tRm9udCA9IHBhcmVudC5nZXRTdHlsZSgnZm9udC1mYW1pbHknKS5nZXREZWZpbml0aW9uKCk7XG4gICAgICAgIGlmIChjdXN0b21Gb250KSB7XG4gICAgICAgICAgICBjb25zdCB7IHVuaXRzUGVyRW0gIH0gPSBjdXN0b21Gb250LmZvbnRGYWNlO1xuICAgICAgICAgICAgY29uc3QgY3R4Rm9udCA9IEZvbnQucGFyc2UoZG9jdW1lbnQuY3R4LmZvbnQpO1xuICAgICAgICAgICAgY29uc3QgZm9udFNpemUgPSBwYXJlbnQuZ2V0U3R5bGUoJ2ZvbnQtc2l6ZScpLmdldE51bWJlcihjdHhGb250LmZvbnRTaXplKTtcbiAgICAgICAgICAgIGNvbnN0IGZvbnRTdHlsZSA9IHBhcmVudC5nZXRTdHlsZSgnZm9udC1zdHlsZScpLmdldFN0cmluZyhjdHhGb250LmZvbnRTdHlsZSk7XG4gICAgICAgICAgICBjb25zdCBzY2FsZSA9IGZvbnRTaXplIC8gdW5pdHNQZXJFbTtcbiAgICAgICAgICAgIGNvbnN0IHRleHQgPSBjdXN0b21Gb250LmlzUlRMID8gcmVuZGVyVGV4dC5zcGxpdCgnJykucmV2ZXJzZSgpLmpvaW4oJycpIDogcmVuZGVyVGV4dDtcbiAgICAgICAgICAgIGNvbnN0IGR4ID0gdG9OdW1iZXJzKHBhcmVudC5nZXRBdHRyaWJ1dGUoJ2R4JykuZ2V0U3RyaW5nKCkpO1xuICAgICAgICAgICAgY29uc3QgbGVuID0gdGV4dC5sZW5ndGg7XG4gICAgICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspe1xuICAgICAgICAgICAgICAgIGNvbnN0IGdseXBoID0gdGhpcy5nZXRHbHlwaChjdXN0b21Gb250LCB0ZXh0LCBpKTtcbiAgICAgICAgICAgICAgICBjdHgudHJhbnNsYXRlKHRoaXMueCwgdGhpcy55KTtcbiAgICAgICAgICAgICAgICBjdHguc2NhbGUoc2NhbGUsIC1zY2FsZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgbHcgPSBjdHgubGluZVdpZHRoO1xuICAgICAgICAgICAgICAgIGN0eC5saW5lV2lkdGggPSBjdHgubGluZVdpZHRoICogdW5pdHNQZXJFbSAvIGZvbnRTaXplO1xuICAgICAgICAgICAgICAgIGlmIChmb250U3R5bGUgPT09ICdpdGFsaWMnKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eC50cmFuc2Zvcm0oMSwgMCwgMC40LCAxLCAwLCAwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZ2x5cGgucmVuZGVyKGN0eCk7XG4gICAgICAgICAgICAgICAgaWYgKGZvbnRTdHlsZSA9PT0gJ2l0YWxpYycpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4LnRyYW5zZm9ybSgxLCAwLCAtMC40LCAxLCAwLCAwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY3R4LmxpbmVXaWR0aCA9IGx3O1xuICAgICAgICAgICAgICAgIGN0eC5zY2FsZSgxIC8gc2NhbGUsIC0xIC8gc2NhbGUpO1xuICAgICAgICAgICAgICAgIGN0eC50cmFuc2xhdGUoLXRoaXMueCwgLXRoaXMueSk7XG4gICAgICAgICAgICAgICAgdGhpcy54ICs9IGZvbnRTaXplICogKGdseXBoLmhvcml6QWR2WCB8fCBjdXN0b21Gb250Lmhvcml6QWR2WCkgLyB1bml0c1BlckVtO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZHhbaV0gIT09ICd1bmRlZmluZWQnICYmICFpc05hTihkeFtpXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy54ICs9IGR4W2ldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHggLCB5ICB9ID0gdGhpcztcbiAgICAgICAgLy8gTkVFRCBURVNUXG4gICAgICAgIC8vIGlmIChjdHgucGFpbnRPcmRlciA9PT0gJ3N0cm9rZScpIHtcbiAgICAgICAgLy8gICBpZiAoY3R4LnN0cm9rZVN0eWxlKSB7XG4gICAgICAgIC8vICAgICBjdHguc3Ryb2tlVGV4dChyZW5kZXJUZXh0LCB4LCB5KTtcbiAgICAgICAgLy8gICB9XG4gICAgICAgIC8vICAgaWYgKGN0eC5maWxsU3R5bGUpIHtcbiAgICAgICAgLy8gICAgIGN0eC5maWxsVGV4dChyZW5kZXJUZXh0LCB4LCB5KTtcbiAgICAgICAgLy8gICB9XG4gICAgICAgIC8vIH0gZWxzZSB7XG4gICAgICAgIGlmIChjdHguZmlsbFN0eWxlKSB7XG4gICAgICAgICAgICBjdHguZmlsbFRleHQocmVuZGVyVGV4dCwgeCwgeSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGN0eC5zdHJva2VTdHlsZSkge1xuICAgICAgICAgICAgY3R4LnN0cm9rZVRleHQocmVuZGVyVGV4dCwgeCwgeSk7XG4gICAgICAgIH1cbiAgICAvLyB9XG4gICAgfVxuICAgIGFwcGx5QW5jaG9yaW5nKCkge1xuICAgICAgICBpZiAodGhpcy50ZXh0Q2h1bmtTdGFydCA+PSB0aGlzLmxlYWZUZXh0cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBUaGlzIGlzIGJhc2ljYWxseSB0aGUgXCJBcHBseSBhbmNob3JpbmdcIiBwYXJ0IG9mIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9TVkcyL3RleHQuaHRtbCNUZXh0TGF5b3V0QWxnb3JpdGhtLlxuICAgICAgICAvLyBUaGUgZGlmZmVyZW5jZSBpcyB0aGF0IHdlIGFwcGx5IHRoZSBhbmNob3JpbmcgYXMgc29vbiBhcyBhIGNodW5rIGlzIGZpbmlzaGVkLiBUaGlzIHNhdmVzIHNvbWUgZXh0cmEgbG9vcGluZy5cbiAgICAgICAgLy8gVmVydGljYWwgdGV4dCBpcyBub3Qgc3VwcG9ydGVkLlxuICAgICAgICBjb25zdCBmaXJzdEVsZW1lbnQgPSB0aGlzLmxlYWZUZXh0c1t0aGlzLnRleHRDaHVua1N0YXJ0XTtcbiAgICAgICAgY29uc3QgdGV4dEFuY2hvciA9IGZpcnN0RWxlbWVudC5nZXRTdHlsZSgndGV4dC1hbmNob3InKS5nZXRTdHJpbmcoJ3N0YXJ0Jyk7XG4gICAgICAgIGNvbnN0IGlzUlRMID0gZmFsc2UgLy8gd2UgdHJlYXQgUlRMIGxpa2UgTFRSXG4gICAgICAgIDtcbiAgICAgICAgbGV0IHNoaWZ0ID0gMDtcbiAgICAgICAgaWYgKHRleHRBbmNob3IgPT09ICdzdGFydCcgJiYgIWlzUlRMIHx8IHRleHRBbmNob3IgPT09ICdlbmQnICYmIGlzUlRMKSB7XG4gICAgICAgICAgICBzaGlmdCA9IGZpcnN0RWxlbWVudC54IC0gdGhpcy5taW5YO1xuICAgICAgICB9IGVsc2UgaWYgKHRleHRBbmNob3IgPT09ICdlbmQnICYmICFpc1JUTCB8fCB0ZXh0QW5jaG9yID09PSAnc3RhcnQnICYmIGlzUlRMKSB7XG4gICAgICAgICAgICBzaGlmdCA9IGZpcnN0RWxlbWVudC54IC0gdGhpcy5tYXhYO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2hpZnQgPSBmaXJzdEVsZW1lbnQueCAtICh0aGlzLm1pblggKyB0aGlzLm1heFgpIC8gMjtcbiAgICAgICAgfVxuICAgICAgICBmb3IobGV0IGkgPSB0aGlzLnRleHRDaHVua1N0YXJ0OyBpIDwgdGhpcy5sZWFmVGV4dHMubGVuZ3RoOyBpKyspe1xuICAgICAgICAgICAgdGhpcy5sZWFmVGV4dHNbaV0ueCArPSBzaGlmdDtcbiAgICAgICAgfVxuICAgICAgICAvLyBzdGFydCBuZXcgY2h1bmtcbiAgICAgICAgdGhpcy5taW5YID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuICAgICAgICB0aGlzLm1heFggPSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7XG4gICAgICAgIHRoaXMudGV4dENodW5rU3RhcnQgPSB0aGlzLmxlYWZUZXh0cy5sZW5ndGg7XG4gICAgfVxuICAgIGFkanVzdENoaWxkQ29vcmRpbmF0ZXNSZWN1cnNpdmUoY3R4KSB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW4uZm9yRWFjaCgoXywgaSk9PntcbiAgICAgICAgICAgIHRoaXMuYWRqdXN0Q2hpbGRDb29yZGluYXRlc1JlY3Vyc2l2ZUNvcmUoY3R4LCB0aGlzLCB0aGlzLCBpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYXBwbHlBbmNob3JpbmcoKTtcbiAgICB9XG4gICAgYWRqdXN0Q2hpbGRDb29yZGluYXRlc1JlY3Vyc2l2ZUNvcmUoY3R4LCB0ZXh0UGFyZW50LCBwYXJlbnQsIGkxKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkID0gcGFyZW50LmNoaWxkcmVuW2kxXTtcbiAgICAgICAgaWYgKGNoaWxkLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNoaWxkLmNoaWxkcmVuLmZvckVhY2goKF8sIGkpPT57XG4gICAgICAgICAgICAgICAgdGV4dFBhcmVudC5hZGp1c3RDaGlsZENvb3JkaW5hdGVzUmVjdXJzaXZlQ29yZShjdHgsIHRleHRQYXJlbnQsIGNoaWxkLCBpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gb25seSBsZWFmcyBhcmUgcmVsZXZhbnRcbiAgICAgICAgICAgIHRoaXMuYWRqdXN0Q2hpbGRDb29yZGluYXRlcyhjdHgsIHRleHRQYXJlbnQsIHBhcmVudCwgaTEpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFkanVzdENoaWxkQ29vcmRpbmF0ZXMoY3R4LCB0ZXh0UGFyZW50LCBwYXJlbnQsIGkpIHtcbiAgICAgICAgY29uc3QgY2hpbGQgPSBwYXJlbnQuY2hpbGRyZW5baV07XG4gICAgICAgIGlmICh0eXBlb2YgY2hpbGQubWVhc3VyZVRleHQgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBjaGlsZDtcbiAgICAgICAgfVxuICAgICAgICBjdHguc2F2ZSgpO1xuICAgICAgICBjaGlsZC5zZXRDb250ZXh0KGN0eCwgdHJ1ZSk7XG4gICAgICAgIGNvbnN0IHhBdHRyID0gY2hpbGQuZ2V0QXR0cmlidXRlKCd4Jyk7XG4gICAgICAgIGNvbnN0IHlBdHRyID0gY2hpbGQuZ2V0QXR0cmlidXRlKCd5Jyk7XG4gICAgICAgIGNvbnN0IGR4QXR0ciA9IGNoaWxkLmdldEF0dHJpYnV0ZSgnZHgnKTtcbiAgICAgICAgY29uc3QgZHlBdHRyID0gY2hpbGQuZ2V0QXR0cmlidXRlKCdkeScpO1xuICAgICAgICBjb25zdCBjdXN0b21Gb250ID0gY2hpbGQuZ2V0U3R5bGUoJ2ZvbnQtZmFtaWx5JykuZ2V0RGVmaW5pdGlvbigpO1xuICAgICAgICBjb25zdCBpc1JUTCA9IEJvb2xlYW4oY3VzdG9tRm9udCA9PT0gbnVsbCB8fCBjdXN0b21Gb250ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjdXN0b21Gb250LmlzUlRMKTtcbiAgICAgICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgICAgIC8vIEZpcnN0IGNoaWxkcmVuIGluaGVyaXQgYXR0cmlidXRlcyBmcm9tIHBhcmVudChzKS4gUG9zaXRpb25hbCBhdHRyaWJ1dGVzXG4gICAgICAgICAgICAvLyBhcmUgb25seSBpbmhlcml0ZWQgZnJvbSBhIHBhcmVudCB0byBpdCdzIGZpcnN0IGNoaWxkLlxuICAgICAgICAgICAgaWYgKCF4QXR0ci5oYXNWYWx1ZSgpKSB7XG4gICAgICAgICAgICAgICAgeEF0dHIuc2V0VmFsdWUoY2hpbGQuZ2V0SW5oZXJpdGVkQXR0cmlidXRlKCd4JykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF5QXR0ci5oYXNWYWx1ZSgpKSB7XG4gICAgICAgICAgICAgICAgeUF0dHIuc2V0VmFsdWUoY2hpbGQuZ2V0SW5oZXJpdGVkQXR0cmlidXRlKCd5JykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFkeEF0dHIuaGFzVmFsdWUoKSkge1xuICAgICAgICAgICAgICAgIGR4QXR0ci5zZXRWYWx1ZShjaGlsZC5nZXRJbmhlcml0ZWRBdHRyaWJ1dGUoJ2R4JykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFkeUF0dHIuaGFzVmFsdWUoKSkge1xuICAgICAgICAgICAgICAgIGR5QXR0ci5zZXRWYWx1ZShjaGlsZC5nZXRJbmhlcml0ZWRBdHRyaWJ1dGUoJ2R5JykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHdpZHRoID0gY2hpbGQubWVhc3VyZVRleHQoY3R4KTtcbiAgICAgICAgaWYgKGlzUlRMKSB7XG4gICAgICAgICAgICB0ZXh0UGFyZW50LnggLT0gd2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHhBdHRyLmhhc1ZhbHVlKCkpIHtcbiAgICAgICAgICAgIC8vIGFuIFwieFwiIGF0dHJpYnV0ZSBtYXJrcyB0aGUgc3RhcnQgb2YgYSBuZXcgY2h1bmtcbiAgICAgICAgICAgIHRleHRQYXJlbnQuYXBwbHlBbmNob3JpbmcoKTtcbiAgICAgICAgICAgIGNoaWxkLnggPSB4QXR0ci5nZXRQaXhlbHMoJ3gnKTtcbiAgICAgICAgICAgIGlmIChkeEF0dHIuaGFzVmFsdWUoKSkge1xuICAgICAgICAgICAgICAgIGNoaWxkLnggKz0gZHhBdHRyLmdldFBpeGVscygneCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGR4QXR0ci5oYXNWYWx1ZSgpKSB7XG4gICAgICAgICAgICAgICAgdGV4dFBhcmVudC54ICs9IGR4QXR0ci5nZXRQaXhlbHMoJ3gnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNoaWxkLnggPSB0ZXh0UGFyZW50Lng7XG4gICAgICAgIH1cbiAgICAgICAgdGV4dFBhcmVudC54ID0gY2hpbGQueDtcbiAgICAgICAgaWYgKCFpc1JUTCkge1xuICAgICAgICAgICAgdGV4dFBhcmVudC54ICs9IHdpZHRoO1xuICAgICAgICB9XG4gICAgICAgIGlmICh5QXR0ci5oYXNWYWx1ZSgpKSB7XG4gICAgICAgICAgICBjaGlsZC55ID0geUF0dHIuZ2V0UGl4ZWxzKCd5Jyk7XG4gICAgICAgICAgICBpZiAoZHlBdHRyLmhhc1ZhbHVlKCkpIHtcbiAgICAgICAgICAgICAgICBjaGlsZC55ICs9IGR5QXR0ci5nZXRQaXhlbHMoJ3knKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChkeUF0dHIuaGFzVmFsdWUoKSkge1xuICAgICAgICAgICAgICAgIHRleHRQYXJlbnQueSArPSBkeUF0dHIuZ2V0UGl4ZWxzKCd5Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjaGlsZC55ID0gdGV4dFBhcmVudC55O1xuICAgICAgICB9XG4gICAgICAgIHRleHRQYXJlbnQueSA9IGNoaWxkLnk7XG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgY3VycmVudCBjaHVuayBhbmQgaXQncyBib3VuZHNcbiAgICAgICAgdGV4dFBhcmVudC5sZWFmVGV4dHMucHVzaChjaGlsZCk7XG4gICAgICAgIHRleHRQYXJlbnQubWluWCA9IE1hdGgubWluKHRleHRQYXJlbnQubWluWCwgY2hpbGQueCwgY2hpbGQueCArIHdpZHRoKTtcbiAgICAgICAgdGV4dFBhcmVudC5tYXhYID0gTWF0aC5tYXgodGV4dFBhcmVudC5tYXhYLCBjaGlsZC54LCBjaGlsZC54ICsgd2lkdGgpO1xuICAgICAgICBjaGlsZC5jbGVhckNvbnRleHQoY3R4KTtcbiAgICAgICAgY3R4LnJlc3RvcmUoKTtcbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgIH1cbiAgICBnZXRDaGlsZEJvdW5kaW5nQm94KGN0eCwgdGV4dFBhcmVudCwgcGFyZW50LCBpMikge1xuICAgICAgICBjb25zdCBjaGlsZCA9IHBhcmVudC5jaGlsZHJlbltpMl07XG4gICAgICAgIC8vIG5vdCBhIHRleHQgbm9kZT9cbiAgICAgICAgaWYgKHR5cGVvZiBjaGlsZC5nZXRCb3VuZGluZ0JveCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYm91bmRpbmdCb3ggPSBjaGlsZC5nZXRCb3VuZGluZ0JveChjdHgpO1xuICAgICAgICBpZiAoYm91bmRpbmdCb3gpIHtcbiAgICAgICAgICAgIGNoaWxkLmNoaWxkcmVuLmZvckVhY2goKF8sIGkpPT57XG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGRCb3VuZGluZ0JveCA9IHRleHRQYXJlbnQuZ2V0Q2hpbGRCb3VuZGluZ0JveChjdHgsIHRleHRQYXJlbnQsIGNoaWxkLCBpKTtcbiAgICAgICAgICAgICAgICBib3VuZGluZ0JveC5hZGRCb3VuZGluZ0JveChjaGlsZEJvdW5kaW5nQm94KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBib3VuZGluZ0JveDtcbiAgICB9XG4gICAgcmVuZGVyQ2hpbGQoY3R4LCB0ZXh0UGFyZW50LCBwYXJlbnQsIGkzKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkID0gcGFyZW50LmNoaWxkcmVuW2kzXTtcbiAgICAgICAgY2hpbGQucmVuZGVyKGN0eCk7XG4gICAgICAgIGNoaWxkLmNoaWxkcmVuLmZvckVhY2goKF8sIGkpPT57XG4gICAgICAgICAgICB0ZXh0UGFyZW50LnJlbmRlckNoaWxkKGN0eCwgdGV4dFBhcmVudCwgY2hpbGQsIGkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgbWVhc3VyZVRleHQoY3R4KSB7XG4gICAgICAgIGNvbnN0IHsgbWVhc3VyZUNhY2hlICB9ID0gdGhpcztcbiAgICAgICAgaWYgKH5tZWFzdXJlQ2FjaGUpIHtcbiAgICAgICAgICAgIHJldHVybiBtZWFzdXJlQ2FjaGU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVuZGVyVGV4dCA9IHRoaXMuZ2V0VGV4dCgpO1xuICAgICAgICBjb25zdCBtZWFzdXJlID0gdGhpcy5tZWFzdXJlVGFyZ2V0VGV4dChjdHgsIHJlbmRlclRleHQpO1xuICAgICAgICB0aGlzLm1lYXN1cmVDYWNoZSA9IG1lYXN1cmU7XG4gICAgICAgIHJldHVybiBtZWFzdXJlO1xuICAgIH1cbiAgICBtZWFzdXJlVGFyZ2V0VGV4dChjdHgsIHRhcmdldFRleHQpIHtcbiAgICAgICAgaWYgKCF0YXJnZXRUZXh0Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBwYXJlbnQgIH0gPSB0aGlzO1xuICAgICAgICBjb25zdCBjdXN0b21Gb250ID0gcGFyZW50LmdldFN0eWxlKCdmb250LWZhbWlseScpLmdldERlZmluaXRpb24oKTtcbiAgICAgICAgaWYgKGN1c3RvbUZvbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvbnRTaXplID0gdGhpcy5nZXRGb250U2l6ZSgpO1xuICAgICAgICAgICAgY29uc3QgdGV4dCA9IGN1c3RvbUZvbnQuaXNSVEwgPyB0YXJnZXRUZXh0LnNwbGl0KCcnKS5yZXZlcnNlKCkuam9pbignJykgOiB0YXJnZXRUZXh0O1xuICAgICAgICAgICAgY29uc3QgZHggPSB0b051bWJlcnMocGFyZW50LmdldEF0dHJpYnV0ZSgnZHgnKS5nZXRTdHJpbmcoKSk7XG4gICAgICAgICAgICBjb25zdCBsZW4gPSB0ZXh0Lmxlbmd0aDtcbiAgICAgICAgICAgIGxldCBtZWFzdXJlID0gMDtcbiAgICAgICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCBsZW47IGkrKyl7XG4gICAgICAgICAgICAgICAgY29uc3QgZ2x5cGggPSB0aGlzLmdldEdseXBoKGN1c3RvbUZvbnQsIHRleHQsIGkpO1xuICAgICAgICAgICAgICAgIG1lYXN1cmUgKz0gKGdseXBoLmhvcml6QWR2WCB8fCBjdXN0b21Gb250Lmhvcml6QWR2WCkgKiBmb250U2l6ZSAvIGN1c3RvbUZvbnQuZm9udEZhY2UudW5pdHNQZXJFbTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGR4W2ldICE9PSAndW5kZWZpbmVkJyAmJiAhaXNOYU4oZHhbaV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIG1lYXN1cmUgKz0gZHhbaV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG1lYXN1cmU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS1jb25kaXRpb25cbiAgICAgICAgaWYgKCFjdHgubWVhc3VyZVRleHQpIHtcbiAgICAgICAgICAgIHJldHVybiB0YXJnZXRUZXh0Lmxlbmd0aCAqIDEwO1xuICAgICAgICB9XG4gICAgICAgIGN0eC5zYXZlKCk7XG4gICAgICAgIHRoaXMuc2V0Q29udGV4dChjdHgsIHRydWUpO1xuICAgICAgICBjb25zdCB7IHdpZHRoOiBtZWFzdXJlICB9ID0gY3R4Lm1lYXN1cmVUZXh0KHRhcmdldFRleHQpO1xuICAgICAgICB0aGlzLmNsZWFyQ29udGV4dChjdHgpO1xuICAgICAgICBjdHgucmVzdG9yZSgpO1xuICAgICAgICByZXR1cm4gbWVhc3VyZTtcbiAgICB9XG4gICAgLyoqXG4gICAqIEluaGVyaXRzIHBvc2l0aW9uYWwgYXR0cmlidXRlcyBmcm9tIHtAbGluayBUZXh0RWxlbWVudH0gcGFyZW50KHMpLiBBdHRyaWJ1dGVzXG4gICAqIGFyZSBvbmx5IGluaGVyaXRlZCBmcm9tIGEgcGFyZW50IHRvIGl0cyBmaXJzdCBjaGlsZC5cbiAgICogQHBhcmFtIG5hbWUgLSBUaGUgYXR0cmlidXRlIG5hbWUuXG4gICAqIEByZXR1cm5zIFRoZSBhdHRyaWJ1dGUgdmFsdWUgb3IgbnVsbC5cbiAgICovIGdldEluaGVyaXRlZEF0dHJpYnV0ZShuYW1lKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhcyxjb25zaXN0ZW50LXRoaXNcbiAgICAgICAgbGV0IGN1cnJlbnQgPSB0aGlzO1xuICAgICAgICB3aGlsZShjdXJyZW50IGluc3RhbmNlb2YgVGV4dEVsZW1lbnQgJiYgY3VycmVudC5pc0ZpcnN0Q2hpbGQoKSAmJiBjdXJyZW50LnBhcmVudCl7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnRBdHRyID0gY3VycmVudC5wYXJlbnQuZ2V0QXR0cmlidXRlKG5hbWUpO1xuICAgICAgICAgICAgaWYgKHBhcmVudEF0dHIuaGFzVmFsdWUodHJ1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyZW50QXR0ci5nZXRTdHJpbmcoJzAnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnBhcmVudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoZG9jdW1lbnQsIG5vZGUsIGNhcHR1cmVUZXh0Tm9kZXMpe1xuICAgICAgICBzdXBlcihkb2N1bWVudCwgbm9kZSwgbmV3LnRhcmdldCA9PT0gVGV4dEVsZW1lbnQgPyB0cnVlIDogY2FwdHVyZVRleHROb2Rlcyk7XG4gICAgICAgIHRoaXMudHlwZSA9ICd0ZXh0JztcbiAgICAgICAgdGhpcy54ID0gMDtcbiAgICAgICAgdGhpcy55ID0gMDtcbiAgICAgICAgdGhpcy5sZWFmVGV4dHMgPSBbXTtcbiAgICAgICAgdGhpcy50ZXh0Q2h1bmtTdGFydCA9IDA7XG4gICAgICAgIHRoaXMubWluWCA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgICAgICAgdGhpcy5tYXhYID0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO1xuICAgICAgICB0aGlzLm1lYXN1cmVDYWNoZSA9IC0xO1xuICAgIH1cbn1cblxuY2xhc3MgVFNwYW5FbGVtZW50IGV4dGVuZHMgVGV4dEVsZW1lbnQge1xuICAgIGdldFRleHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHQ7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKGRvY3VtZW50LCBub2RlLCBjYXB0dXJlVGV4dE5vZGVzKXtcbiAgICAgICAgc3VwZXIoZG9jdW1lbnQsIG5vZGUsIG5ldy50YXJnZXQgPT09IFRTcGFuRWxlbWVudCA/IHRydWUgOiBjYXB0dXJlVGV4dE5vZGVzKTtcbiAgICAgICAgdGhpcy50eXBlID0gJ3RzcGFuJztcbiAgICAgICAgLy8gaWYgdGhpcyBub2RlIGhhcyBjaGlsZHJlbiwgdGhlbiB0aGV5IG93biB0aGUgdGV4dFxuICAgICAgICB0aGlzLnRleHQgPSB0aGlzLmNoaWxkcmVuLmxlbmd0aCA+IDAgPyAnJyA6IHRoaXMuZ2V0VGV4dEZyb21Ob2RlKCk7XG4gICAgfVxufVxuXG5jbGFzcyBUZXh0Tm9kZSBleHRlbmRzIFRTcGFuRWxlbWVudCB7XG4gICAgY29uc3RydWN0b3IoLi4uYXJncyl7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3MpO1xuICAgICAgICB0aGlzLnR5cGUgPSAndGV4dE5vZGUnO1xuICAgIH1cbn1cblxuY2xhc3MgUGF0aFBhcnNlciBleHRlbmRzIFNWR1BhdGhEYXRhIHtcbiAgICByZXNldCgpIHtcbiAgICAgICAgdGhpcy5pID0gLTE7XG4gICAgICAgIHRoaXMuY29tbWFuZCA9IG51bGw7XG4gICAgICAgIHRoaXMucHJldmlvdXNDb21tYW5kID0gbnVsbDtcbiAgICAgICAgdGhpcy5zdGFydCA9IG5ldyBQb2ludCgwLCAwKTtcbiAgICAgICAgdGhpcy5jb250cm9sID0gbmV3IFBvaW50KDAsIDApO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSBuZXcgUG9pbnQoMCwgMCk7XG4gICAgICAgIHRoaXMucG9pbnRzID0gW107XG4gICAgICAgIHRoaXMuYW5nbGVzID0gW107XG4gICAgfVxuICAgIGlzRW5kKCkge1xuICAgICAgICBjb25zdCB7IGkgLCBjb21tYW5kcyAgfSA9IHRoaXM7XG4gICAgICAgIHJldHVybiBpID49IGNvbW1hbmRzLmxlbmd0aCAtIDE7XG4gICAgfVxuICAgIG5leHQoKSB7XG4gICAgICAgIGNvbnN0IGNvbW1hbmQgPSB0aGlzLmNvbW1hbmRzWysrdGhpcy5pXTtcbiAgICAgICAgdGhpcy5wcmV2aW91c0NvbW1hbmQgPSB0aGlzLmNvbW1hbmQ7XG4gICAgICAgIHRoaXMuY29tbWFuZCA9IGNvbW1hbmQ7XG4gICAgICAgIHJldHVybiBjb21tYW5kO1xuICAgIH1cbiAgICBnZXRQb2ludCgpIHtcbiAgICAgICAgbGV0IHhQcm9wID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMF0gOiAneCcsIHlQcm9wID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMV0gOiAneSc7XG4gICAgICAgIGNvbnN0IHBvaW50ID0gbmV3IFBvaW50KHRoaXMuY29tbWFuZFt4UHJvcF0sIHRoaXMuY29tbWFuZFt5UHJvcF0pO1xuICAgICAgICByZXR1cm4gdGhpcy5tYWtlQWJzb2x1dGUocG9pbnQpO1xuICAgIH1cbiAgICBnZXRBc0NvbnRyb2xQb2ludCh4UHJvcCwgeVByb3ApIHtcbiAgICAgICAgY29uc3QgcG9pbnQgPSB0aGlzLmdldFBvaW50KHhQcm9wLCB5UHJvcCk7XG4gICAgICAgIHRoaXMuY29udHJvbCA9IHBvaW50O1xuICAgICAgICByZXR1cm4gcG9pbnQ7XG4gICAgfVxuICAgIGdldEFzQ3VycmVudFBvaW50KHhQcm9wLCB5UHJvcCkge1xuICAgICAgICBjb25zdCBwb2ludCA9IHRoaXMuZ2V0UG9pbnQoeFByb3AsIHlQcm9wKTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gcG9pbnQ7XG4gICAgICAgIHJldHVybiBwb2ludDtcbiAgICB9XG4gICAgZ2V0UmVmbGVjdGVkQ29udHJvbFBvaW50KCkge1xuICAgICAgICBjb25zdCBwcmV2aW91c0NvbW1hbmQgPSB0aGlzLnByZXZpb3VzQ29tbWFuZC50eXBlO1xuICAgICAgICBpZiAocHJldmlvdXNDb21tYW5kICE9PSBTVkdQYXRoRGF0YS5DVVJWRV9UTyAmJiBwcmV2aW91c0NvbW1hbmQgIT09IFNWR1BhdGhEYXRhLlNNT09USF9DVVJWRV9UTyAmJiBwcmV2aW91c0NvbW1hbmQgIT09IFNWR1BhdGhEYXRhLlFVQURfVE8gJiYgcHJldmlvdXNDb21tYW5kICE9PSBTVkdQYXRoRGF0YS5TTU9PVEhfUVVBRF9UTykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudDtcbiAgICAgICAgfVxuICAgICAgICAvLyByZWZsZWN0IHBvaW50XG4gICAgICAgIGNvbnN0IHsgY3VycmVudDogeyB4OiBjeCAsIHk6IGN5ICB9ICwgY29udHJvbDogeyB4OiBveCAsIHk6IG95ICB9ICB9ID0gdGhpcztcbiAgICAgICAgY29uc3QgcG9pbnQgPSBuZXcgUG9pbnQoMiAqIGN4IC0gb3gsIDIgKiBjeSAtIG95KTtcbiAgICAgICAgcmV0dXJuIHBvaW50O1xuICAgIH1cbiAgICBtYWtlQWJzb2x1dGUocG9pbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuY29tbWFuZC5yZWxhdGl2ZSkge1xuICAgICAgICAgICAgY29uc3QgeyB4ICwgeSAgfSA9IHRoaXMuY3VycmVudDtcbiAgICAgICAgICAgIHBvaW50LnggKz0geDtcbiAgICAgICAgICAgIHBvaW50LnkgKz0geTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcG9pbnQ7XG4gICAgfVxuICAgIGFkZE1hcmtlcihwb2ludCwgZnJvbSwgcHJpb3JUbykge1xuICAgICAgICBjb25zdCB7IHBvaW50cyAsIGFuZ2xlcyAgfSA9IHRoaXM7XG4gICAgICAgIC8vIGlmIHRoZSBsYXN0IGFuZ2xlIGlzbid0IGZpbGxlZCBpbiBiZWNhdXNlIHdlIGRpZG4ndCBoYXZlIHRoaXMgcG9pbnQgeWV0IC4uLlxuICAgICAgICBpZiAocHJpb3JUbyAmJiBhbmdsZXMubGVuZ3RoID4gMCAmJiAhYW5nbGVzW2FuZ2xlcy5sZW5ndGggLSAxXSkge1xuICAgICAgICAgICAgYW5nbGVzW2FuZ2xlcy5sZW5ndGggLSAxXSA9IHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV0uYW5nbGVUbyhwcmlvclRvKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFkZE1hcmtlckFuZ2xlKHBvaW50LCBmcm9tID8gZnJvbS5hbmdsZVRvKHBvaW50KSA6IG51bGwpO1xuICAgIH1cbiAgICBhZGRNYXJrZXJBbmdsZShwb2ludCwgYW5nbGUpIHtcbiAgICAgICAgdGhpcy5wb2ludHMucHVzaChwb2ludCk7XG4gICAgICAgIHRoaXMuYW5nbGVzLnB1c2goYW5nbGUpO1xuICAgIH1cbiAgICBnZXRNYXJrZXJQb2ludHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBvaW50cztcbiAgICB9XG4gICAgZ2V0TWFya2VyQW5nbGVzKCkge1xuICAgICAgICBjb25zdCB7IGFuZ2xlcyAgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGxlbiA9IGFuZ2xlcy5sZW5ndGg7XG4gICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCBsZW47IGkrKyl7XG4gICAgICAgICAgICBpZiAoIWFuZ2xlc1tpXSkge1xuICAgICAgICAgICAgICAgIGZvcihsZXQgaiA9IGkgKyAxOyBqIDwgbGVuOyBqKyspe1xuICAgICAgICAgICAgICAgICAgICBpZiAoYW5nbGVzW2pdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhbmdsZXNbaV0gPSBhbmdsZXNbal07XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYW5nbGVzO1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvcihwYXRoKXtcbiAgICAgICAgc3VwZXIocGF0aC8vIEZpeCBzcGFjZXMgYWZ0ZXIgc2lnbnMuXG4gICAgICAgIC5yZXBsYWNlKC8oWytcXC0uXSlcXHMrL2dtLCAnJDEnKS8vIFJlbW92ZSBpbnZhbGlkIHBhcnQuXG4gICAgICAgIC5yZXBsYWNlKC9bXk1tWnpMbEhoVnZDY1NzUXFUdEFhZVxcZFxccy4sKy1dLiovZywgJycpKTtcbiAgICAgICAgdGhpcy5jb250cm9sID0gbmV3IFBvaW50KDAsIDApO1xuICAgICAgICB0aGlzLnN0YXJ0ID0gbmV3IFBvaW50KDAsIDApO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSBuZXcgUG9pbnQoMCwgMCk7XG4gICAgICAgIHRoaXMuY29tbWFuZCA9IG51bGw7XG4gICAgICAgIHRoaXMuY29tbWFuZHMgPSB0aGlzLmNvbW1hbmRzO1xuICAgICAgICB0aGlzLmkgPSAtMTtcbiAgICAgICAgdGhpcy5wcmV2aW91c0NvbW1hbmQgPSBudWxsO1xuICAgICAgICB0aGlzLnBvaW50cyA9IFtdO1xuICAgICAgICB0aGlzLmFuZ2xlcyA9IFtdO1xuICAgIH1cbn1cblxuY2xhc3MgUGF0aEVsZW1lbnQgZXh0ZW5kcyBSZW5kZXJlZEVsZW1lbnQge1xuICAgIHBhdGgoY3R4KSB7XG4gICAgICAgIGNvbnN0IHsgcGF0aFBhcnNlciAgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGJvdW5kaW5nQm94ID0gbmV3IEJvdW5kaW5nQm94KCk7XG4gICAgICAgIHBhdGhQYXJzZXIucmVzZXQoKTtcbiAgICAgICAgaWYgKGN0eCkge1xuICAgICAgICAgICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlKCFwYXRoUGFyc2VyLmlzRW5kKCkpe1xuICAgICAgICAgICAgc3dpdGNoKHBhdGhQYXJzZXIubmV4dCgpLnR5cGUpe1xuICAgICAgICAgICAgICAgIGNhc2UgUGF0aFBhcnNlci5NT1ZFX1RPOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhdGhNKGN0eCwgYm91bmRpbmdCb3gpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFBhdGhQYXJzZXIuTElORV9UTzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXRoTChjdHgsIGJvdW5kaW5nQm94KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBQYXRoUGFyc2VyLkhPUklaX0xJTkVfVE86XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGF0aEgoY3R4LCBib3VuZGluZ0JveCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgUGF0aFBhcnNlci5WRVJUX0xJTkVfVE86XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGF0aFYoY3R4LCBib3VuZGluZ0JveCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgUGF0aFBhcnNlci5DVVJWRV9UTzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXRoQyhjdHgsIGJvdW5kaW5nQm94KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBQYXRoUGFyc2VyLlNNT09USF9DVVJWRV9UTzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXRoUyhjdHgsIGJvdW5kaW5nQm94KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBQYXRoUGFyc2VyLlFVQURfVE86XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGF0aFEoY3R4LCBib3VuZGluZ0JveCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgUGF0aFBhcnNlci5TTU9PVEhfUVVBRF9UTzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXRoVChjdHgsIGJvdW5kaW5nQm94KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBQYXRoUGFyc2VyLkFSQzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXRoQShjdHgsIGJvdW5kaW5nQm94KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBQYXRoUGFyc2VyLkNMT1NFX1BBVEg6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGF0aFooY3R4LCBib3VuZGluZ0JveCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBib3VuZGluZ0JveDtcbiAgICB9XG4gICAgZ2V0Qm91bmRpbmdCb3goX2N0eCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXRoKCk7XG4gICAgfVxuICAgIGdldE1hcmtlcnMoKSB7XG4gICAgICAgIGNvbnN0IHsgcGF0aFBhcnNlciAgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IHBvaW50cyA9IHBhdGhQYXJzZXIuZ2V0TWFya2VyUG9pbnRzKCk7XG4gICAgICAgIGNvbnN0IGFuZ2xlcyA9IHBhdGhQYXJzZXIuZ2V0TWFya2VyQW5nbGVzKCk7XG4gICAgICAgIGNvbnN0IG1hcmtlcnMgPSBwb2ludHMubWFwKChwb2ludCwgaSk9PltcbiAgICAgICAgICAgICAgICBwb2ludCxcbiAgICAgICAgICAgICAgICBhbmdsZXNbaV1cbiAgICAgICAgICAgIF1cbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIG1hcmtlcnM7XG4gICAgfVxuICAgIHJlbmRlckNoaWxkcmVuKGN0eCkge1xuICAgICAgICB0aGlzLnBhdGgoY3R4KTtcbiAgICAgICAgdGhpcy5kb2N1bWVudC5zY3JlZW4ubW91c2UuY2hlY2tQYXRoKHRoaXMsIGN0eCk7XG4gICAgICAgIGNvbnN0IGZpbGxSdWxlU3R5bGVQcm9wID0gdGhpcy5nZXRTdHlsZSgnZmlsbC1ydWxlJyk7XG4gICAgICAgIGlmIChjdHguZmlsbFN0eWxlICE9PSAnJykge1xuICAgICAgICAgICAgaWYgKGZpbGxSdWxlU3R5bGVQcm9wLmdldFN0cmluZygnaW5oZXJpdCcpICE9PSAnaW5oZXJpdCcpIHtcbiAgICAgICAgICAgICAgICBjdHguZmlsbChmaWxsUnVsZVN0eWxlUHJvcC5nZXRTdHJpbmcoKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGN0eC5maWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGN0eC5zdHJva2VTdHlsZSAhPT0gJycpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmdldEF0dHJpYnV0ZSgndmVjdG9yLWVmZmVjdCcpLmdldFN0cmluZygpID09PSAnbm9uLXNjYWxpbmctc3Ryb2tlJykge1xuICAgICAgICAgICAgICAgIGN0eC5zYXZlKCk7XG4gICAgICAgICAgICAgICAgY3R4LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcbiAgICAgICAgICAgICAgICBjdHguc3Ryb2tlKCk7XG4gICAgICAgICAgICAgICAgY3R4LnJlc3RvcmUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY3R4LnN0cm9rZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1hcmtlcnMgPSB0aGlzLmdldE1hcmtlcnMoKTtcbiAgICAgICAgaWYgKG1hcmtlcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hcmtlcnNMYXN0SW5kZXggPSBtYXJrZXJzLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICBjb25zdCBtYXJrZXJTdGFydFN0eWxlUHJvcCA9IHRoaXMuZ2V0U3R5bGUoJ21hcmtlci1zdGFydCcpO1xuICAgICAgICAgICAgY29uc3QgbWFya2VyTWlkU3R5bGVQcm9wID0gdGhpcy5nZXRTdHlsZSgnbWFya2VyLW1pZCcpO1xuICAgICAgICAgICAgY29uc3QgbWFya2VyRW5kU3R5bGVQcm9wID0gdGhpcy5nZXRTdHlsZSgnbWFya2VyLWVuZCcpO1xuICAgICAgICAgICAgaWYgKG1hcmtlclN0YXJ0U3R5bGVQcm9wLmlzVXJsRGVmaW5pdGlvbigpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWFya2VyID0gbWFya2VyU3RhcnRTdHlsZVByb3AuZ2V0RGVmaW5pdGlvbigpO1xuICAgICAgICAgICAgICAgIGNvbnN0IFtwb2ludCwgYW5nbGVdID0gbWFya2Vyc1swXTtcbiAgICAgICAgICAgICAgICBtYXJrZXIucmVuZGVyKGN0eCwgcG9pbnQsIGFuZ2xlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXJrZXJNaWRTdHlsZVByb3AuaXNVcmxEZWZpbml0aW9uKCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtYXJrZXIgPSBtYXJrZXJNaWRTdHlsZVByb3AuZ2V0RGVmaW5pdGlvbigpO1xuICAgICAgICAgICAgICAgIGZvcihsZXQgaSA9IDE7IGkgPCBtYXJrZXJzTGFzdEluZGV4OyBpKyspe1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBbcG9pbnQsIGFuZ2xlXSA9IG1hcmtlcnNbaV07XG4gICAgICAgICAgICAgICAgICAgIG1hcmtlci5yZW5kZXIoY3R4LCBwb2ludCwgYW5nbGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXJrZXJFbmRTdHlsZVByb3AuaXNVcmxEZWZpbml0aW9uKCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtYXJrZXIgPSBtYXJrZXJFbmRTdHlsZVByb3AuZ2V0RGVmaW5pdGlvbigpO1xuICAgICAgICAgICAgICAgIGNvbnN0IFtwb2ludCwgYW5nbGVdID0gbWFya2Vyc1ttYXJrZXJzTGFzdEluZGV4XTtcbiAgICAgICAgICAgICAgICBtYXJrZXIucmVuZGVyKGN0eCwgcG9pbnQsIGFuZ2xlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgcGF0aE0ocGF0aFBhcnNlcikge1xuICAgICAgICBjb25zdCBwb2ludCA9IHBhdGhQYXJzZXIuZ2V0QXNDdXJyZW50UG9pbnQoKTtcbiAgICAgICAgcGF0aFBhcnNlci5zdGFydCA9IHBhdGhQYXJzZXIuY3VycmVudDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHBvaW50XG4gICAgICAgIH07XG4gICAgfVxuICAgIHBhdGhNKGN0eCwgYm91bmRpbmdCb3gpIHtcbiAgICAgICAgY29uc3QgeyBwYXRoUGFyc2VyICB9ID0gdGhpcztcbiAgICAgICAgY29uc3QgeyBwb2ludCAgfSA9IFBhdGhFbGVtZW50LnBhdGhNKHBhdGhQYXJzZXIpO1xuICAgICAgICBjb25zdCB7IHggLCB5ICB9ID0gcG9pbnQ7XG4gICAgICAgIHBhdGhQYXJzZXIuYWRkTWFya2VyKHBvaW50KTtcbiAgICAgICAgYm91bmRpbmdCb3guYWRkUG9pbnQoeCwgeSk7XG4gICAgICAgIGlmIChjdHgpIHtcbiAgICAgICAgICAgIGN0eC5tb3ZlVG8oeCwgeSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIHBhdGhMKHBhdGhQYXJzZXIpIHtcbiAgICAgICAgY29uc3QgeyBjdXJyZW50ICB9ID0gcGF0aFBhcnNlcjtcbiAgICAgICAgY29uc3QgcG9pbnQgPSBwYXRoUGFyc2VyLmdldEFzQ3VycmVudFBvaW50KCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgcG9pbnRcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcGF0aEwoY3R4LCBib3VuZGluZ0JveCkge1xuICAgICAgICBjb25zdCB7IHBhdGhQYXJzZXIgIH0gPSB0aGlzO1xuICAgICAgICBjb25zdCB7IGN1cnJlbnQgLCBwb2ludCAgfSA9IFBhdGhFbGVtZW50LnBhdGhMKHBhdGhQYXJzZXIpO1xuICAgICAgICBjb25zdCB7IHggLCB5ICB9ID0gcG9pbnQ7XG4gICAgICAgIHBhdGhQYXJzZXIuYWRkTWFya2VyKHBvaW50LCBjdXJyZW50KTtcbiAgICAgICAgYm91bmRpbmdCb3guYWRkUG9pbnQoeCwgeSk7XG4gICAgICAgIGlmIChjdHgpIHtcbiAgICAgICAgICAgIGN0eC5saW5lVG8oeCwgeSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIHBhdGhIKHBhdGhQYXJzZXIpIHtcbiAgICAgICAgY29uc3QgeyBjdXJyZW50ICwgY29tbWFuZCAgfSA9IHBhdGhQYXJzZXI7XG4gICAgICAgIGNvbnN0IHBvaW50ID0gbmV3IFBvaW50KChjb21tYW5kLnJlbGF0aXZlID8gY3VycmVudC54IDogMCkgKyBjb21tYW5kLngsIGN1cnJlbnQueSk7XG4gICAgICAgIHBhdGhQYXJzZXIuY3VycmVudCA9IHBvaW50O1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgIHBvaW50XG4gICAgICAgIH07XG4gICAgfVxuICAgIHBhdGhIKGN0eCwgYm91bmRpbmdCb3gpIHtcbiAgICAgICAgY29uc3QgeyBwYXRoUGFyc2VyICB9ID0gdGhpcztcbiAgICAgICAgY29uc3QgeyBjdXJyZW50ICwgcG9pbnQgIH0gPSBQYXRoRWxlbWVudC5wYXRoSChwYXRoUGFyc2VyKTtcbiAgICAgICAgY29uc3QgeyB4ICwgeSAgfSA9IHBvaW50O1xuICAgICAgICBwYXRoUGFyc2VyLmFkZE1hcmtlcihwb2ludCwgY3VycmVudCk7XG4gICAgICAgIGJvdW5kaW5nQm94LmFkZFBvaW50KHgsIHkpO1xuICAgICAgICBpZiAoY3R4KSB7XG4gICAgICAgICAgICBjdHgubGluZVRvKHgsIHkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBwYXRoVihwYXRoUGFyc2VyKSB7XG4gICAgICAgIGNvbnN0IHsgY3VycmVudCAsIGNvbW1hbmQgIH0gPSBwYXRoUGFyc2VyO1xuICAgICAgICBjb25zdCBwb2ludCA9IG5ldyBQb2ludChjdXJyZW50LngsIChjb21tYW5kLnJlbGF0aXZlID8gY3VycmVudC55IDogMCkgKyBjb21tYW5kLnkpO1xuICAgICAgICBwYXRoUGFyc2VyLmN1cnJlbnQgPSBwb2ludDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICBwb2ludFxuICAgICAgICB9O1xuICAgIH1cbiAgICBwYXRoVihjdHgsIGJvdW5kaW5nQm94KSB7XG4gICAgICAgIGNvbnN0IHsgcGF0aFBhcnNlciAgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IHsgY3VycmVudCAsIHBvaW50ICB9ID0gUGF0aEVsZW1lbnQucGF0aFYocGF0aFBhcnNlcik7XG4gICAgICAgIGNvbnN0IHsgeCAsIHkgIH0gPSBwb2ludDtcbiAgICAgICAgcGF0aFBhcnNlci5hZGRNYXJrZXIocG9pbnQsIGN1cnJlbnQpO1xuICAgICAgICBib3VuZGluZ0JveC5hZGRQb2ludCh4LCB5KTtcbiAgICAgICAgaWYgKGN0eCkge1xuICAgICAgICAgICAgY3R4LmxpbmVUbyh4LCB5KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgcGF0aEMocGF0aFBhcnNlcikge1xuICAgICAgICBjb25zdCB7IGN1cnJlbnQgIH0gPSBwYXRoUGFyc2VyO1xuICAgICAgICBjb25zdCBwb2ludCA9IHBhdGhQYXJzZXIuZ2V0UG9pbnQoJ3gxJywgJ3kxJyk7XG4gICAgICAgIGNvbnN0IGNvbnRyb2xQb2ludCA9IHBhdGhQYXJzZXIuZ2V0QXNDb250cm9sUG9pbnQoJ3gyJywgJ3kyJyk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRQb2ludCA9IHBhdGhQYXJzZXIuZ2V0QXNDdXJyZW50UG9pbnQoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICBwb2ludCxcbiAgICAgICAgICAgIGNvbnRyb2xQb2ludCxcbiAgICAgICAgICAgIGN1cnJlbnRQb2ludFxuICAgICAgICB9O1xuICAgIH1cbiAgICBwYXRoQyhjdHgsIGJvdW5kaW5nQm94KSB7XG4gICAgICAgIGNvbnN0IHsgcGF0aFBhcnNlciAgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IHsgY3VycmVudCAsIHBvaW50ICwgY29udHJvbFBvaW50ICwgY3VycmVudFBvaW50ICB9ID0gUGF0aEVsZW1lbnQucGF0aEMocGF0aFBhcnNlcik7XG4gICAgICAgIHBhdGhQYXJzZXIuYWRkTWFya2VyKGN1cnJlbnRQb2ludCwgY29udHJvbFBvaW50LCBwb2ludCk7XG4gICAgICAgIGJvdW5kaW5nQm94LmFkZEJlemllckN1cnZlKGN1cnJlbnQueCwgY3VycmVudC55LCBwb2ludC54LCBwb2ludC55LCBjb250cm9sUG9pbnQueCwgY29udHJvbFBvaW50LnksIGN1cnJlbnRQb2ludC54LCBjdXJyZW50UG9pbnQueSk7XG4gICAgICAgIGlmIChjdHgpIHtcbiAgICAgICAgICAgIGN0eC5iZXppZXJDdXJ2ZVRvKHBvaW50LngsIHBvaW50LnksIGNvbnRyb2xQb2ludC54LCBjb250cm9sUG9pbnQueSwgY3VycmVudFBvaW50LngsIGN1cnJlbnRQb2ludC55KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgcGF0aFMocGF0aFBhcnNlcikge1xuICAgICAgICBjb25zdCB7IGN1cnJlbnQgIH0gPSBwYXRoUGFyc2VyO1xuICAgICAgICBjb25zdCBwb2ludCA9IHBhdGhQYXJzZXIuZ2V0UmVmbGVjdGVkQ29udHJvbFBvaW50KCk7XG4gICAgICAgIGNvbnN0IGNvbnRyb2xQb2ludCA9IHBhdGhQYXJzZXIuZ2V0QXNDb250cm9sUG9pbnQoJ3gyJywgJ3kyJyk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRQb2ludCA9IHBhdGhQYXJzZXIuZ2V0QXNDdXJyZW50UG9pbnQoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICBwb2ludCxcbiAgICAgICAgICAgIGNvbnRyb2xQb2ludCxcbiAgICAgICAgICAgIGN1cnJlbnRQb2ludFxuICAgICAgICB9O1xuICAgIH1cbiAgICBwYXRoUyhjdHgsIGJvdW5kaW5nQm94KSB7XG4gICAgICAgIGNvbnN0IHsgcGF0aFBhcnNlciAgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IHsgY3VycmVudCAsIHBvaW50ICwgY29udHJvbFBvaW50ICwgY3VycmVudFBvaW50ICB9ID0gUGF0aEVsZW1lbnQucGF0aFMocGF0aFBhcnNlcik7XG4gICAgICAgIHBhdGhQYXJzZXIuYWRkTWFya2VyKGN1cnJlbnRQb2ludCwgY29udHJvbFBvaW50LCBwb2ludCk7XG4gICAgICAgIGJvdW5kaW5nQm94LmFkZEJlemllckN1cnZlKGN1cnJlbnQueCwgY3VycmVudC55LCBwb2ludC54LCBwb2ludC55LCBjb250cm9sUG9pbnQueCwgY29udHJvbFBvaW50LnksIGN1cnJlbnRQb2ludC54LCBjdXJyZW50UG9pbnQueSk7XG4gICAgICAgIGlmIChjdHgpIHtcbiAgICAgICAgICAgIGN0eC5iZXppZXJDdXJ2ZVRvKHBvaW50LngsIHBvaW50LnksIGNvbnRyb2xQb2ludC54LCBjb250cm9sUG9pbnQueSwgY3VycmVudFBvaW50LngsIGN1cnJlbnRQb2ludC55KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgcGF0aFEocGF0aFBhcnNlcikge1xuICAgICAgICBjb25zdCB7IGN1cnJlbnQgIH0gPSBwYXRoUGFyc2VyO1xuICAgICAgICBjb25zdCBjb250cm9sUG9pbnQgPSBwYXRoUGFyc2VyLmdldEFzQ29udHJvbFBvaW50KCd4MScsICd5MScpO1xuICAgICAgICBjb25zdCBjdXJyZW50UG9pbnQgPSBwYXRoUGFyc2VyLmdldEFzQ3VycmVudFBvaW50KCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgY29udHJvbFBvaW50LFxuICAgICAgICAgICAgY3VycmVudFBvaW50XG4gICAgICAgIH07XG4gICAgfVxuICAgIHBhdGhRKGN0eCwgYm91bmRpbmdCb3gpIHtcbiAgICAgICAgY29uc3QgeyBwYXRoUGFyc2VyICB9ID0gdGhpcztcbiAgICAgICAgY29uc3QgeyBjdXJyZW50ICwgY29udHJvbFBvaW50ICwgY3VycmVudFBvaW50ICB9ID0gUGF0aEVsZW1lbnQucGF0aFEocGF0aFBhcnNlcik7XG4gICAgICAgIHBhdGhQYXJzZXIuYWRkTWFya2VyKGN1cnJlbnRQb2ludCwgY29udHJvbFBvaW50LCBjb250cm9sUG9pbnQpO1xuICAgICAgICBib3VuZGluZ0JveC5hZGRRdWFkcmF0aWNDdXJ2ZShjdXJyZW50LngsIGN1cnJlbnQueSwgY29udHJvbFBvaW50LngsIGNvbnRyb2xQb2ludC55LCBjdXJyZW50UG9pbnQueCwgY3VycmVudFBvaW50LnkpO1xuICAgICAgICBpZiAoY3R4KSB7XG4gICAgICAgICAgICBjdHgucXVhZHJhdGljQ3VydmVUbyhjb250cm9sUG9pbnQueCwgY29udHJvbFBvaW50LnksIGN1cnJlbnRQb2ludC54LCBjdXJyZW50UG9pbnQueSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIHBhdGhUKHBhdGhQYXJzZXIpIHtcbiAgICAgICAgY29uc3QgeyBjdXJyZW50ICB9ID0gcGF0aFBhcnNlcjtcbiAgICAgICAgY29uc3QgY29udHJvbFBvaW50ID0gcGF0aFBhcnNlci5nZXRSZWZsZWN0ZWRDb250cm9sUG9pbnQoKTtcbiAgICAgICAgcGF0aFBhcnNlci5jb250cm9sID0gY29udHJvbFBvaW50O1xuICAgICAgICBjb25zdCBjdXJyZW50UG9pbnQgPSBwYXRoUGFyc2VyLmdldEFzQ3VycmVudFBvaW50KCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgY29udHJvbFBvaW50LFxuICAgICAgICAgICAgY3VycmVudFBvaW50XG4gICAgICAgIH07XG4gICAgfVxuICAgIHBhdGhUKGN0eCwgYm91bmRpbmdCb3gpIHtcbiAgICAgICAgY29uc3QgeyBwYXRoUGFyc2VyICB9ID0gdGhpcztcbiAgICAgICAgY29uc3QgeyBjdXJyZW50ICwgY29udHJvbFBvaW50ICwgY3VycmVudFBvaW50ICB9ID0gUGF0aEVsZW1lbnQucGF0aFQocGF0aFBhcnNlcik7XG4gICAgICAgIHBhdGhQYXJzZXIuYWRkTWFya2VyKGN1cnJlbnRQb2ludCwgY29udHJvbFBvaW50LCBjb250cm9sUG9pbnQpO1xuICAgICAgICBib3VuZGluZ0JveC5hZGRRdWFkcmF0aWNDdXJ2ZShjdXJyZW50LngsIGN1cnJlbnQueSwgY29udHJvbFBvaW50LngsIGNvbnRyb2xQb2ludC55LCBjdXJyZW50UG9pbnQueCwgY3VycmVudFBvaW50LnkpO1xuICAgICAgICBpZiAoY3R4KSB7XG4gICAgICAgICAgICBjdHgucXVhZHJhdGljQ3VydmVUbyhjb250cm9sUG9pbnQueCwgY29udHJvbFBvaW50LnksIGN1cnJlbnRQb2ludC54LCBjdXJyZW50UG9pbnQueSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIHBhdGhBKHBhdGhQYXJzZXIpIHtcbiAgICAgICAgY29uc3QgeyBjdXJyZW50ICwgY29tbWFuZCAgfSA9IHBhdGhQYXJzZXI7XG4gICAgICAgIGxldCB7IHJYICwgclkgLCB4Um90ICwgbEFyY0ZsYWcgLCBzd2VlcEZsYWcgIH0gPSBjb21tYW5kO1xuICAgICAgICBjb25zdCB4QXhpc1JvdGF0aW9uID0geFJvdCAqIChNYXRoLlBJIC8gMTgwKTtcbiAgICAgICAgY29uc3QgY3VycmVudFBvaW50ID0gcGF0aFBhcnNlci5nZXRBc0N1cnJlbnRQb2ludCgpO1xuICAgICAgICAvLyBDb252ZXJzaW9uIGZyb20gZW5kcG9pbnQgdG8gY2VudGVyIHBhcmFtZXRlcml6YXRpb25cbiAgICAgICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvaW1wbG5vdGUuaHRtbCNBcmNJbXBsZW1lbnRhdGlvbk5vdGVzXG4gICAgICAgIC8vIHgxJywgeTEnXG4gICAgICAgIGNvbnN0IGN1cnJwID0gbmV3IFBvaW50KE1hdGguY29zKHhBeGlzUm90YXRpb24pICogKGN1cnJlbnQueCAtIGN1cnJlbnRQb2ludC54KSAvIDIgKyBNYXRoLnNpbih4QXhpc1JvdGF0aW9uKSAqIChjdXJyZW50LnkgLSBjdXJyZW50UG9pbnQueSkgLyAyLCAtTWF0aC5zaW4oeEF4aXNSb3RhdGlvbikgKiAoY3VycmVudC54IC0gY3VycmVudFBvaW50LngpIC8gMiArIE1hdGguY29zKHhBeGlzUm90YXRpb24pICogKGN1cnJlbnQueSAtIGN1cnJlbnRQb2ludC55KSAvIDIpO1xuICAgICAgICAvLyBhZGp1c3QgcmFkaWlcbiAgICAgICAgY29uc3QgbCA9IE1hdGgucG93KGN1cnJwLngsIDIpIC8gTWF0aC5wb3coclgsIDIpICsgTWF0aC5wb3coY3VycnAueSwgMikgLyBNYXRoLnBvdyhyWSwgMik7XG4gICAgICAgIGlmIChsID4gMSkge1xuICAgICAgICAgICAgclggKj0gTWF0aC5zcXJ0KGwpO1xuICAgICAgICAgICAgclkgKj0gTWF0aC5zcXJ0KGwpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGN4JywgY3knXG4gICAgICAgIGxldCBzID0gKGxBcmNGbGFnID09PSBzd2VlcEZsYWcgPyAtMSA6IDEpICogTWF0aC5zcXJ0KChNYXRoLnBvdyhyWCwgMikgKiBNYXRoLnBvdyhyWSwgMikgLSBNYXRoLnBvdyhyWCwgMikgKiBNYXRoLnBvdyhjdXJycC55LCAyKSAtIE1hdGgucG93KHJZLCAyKSAqIE1hdGgucG93KGN1cnJwLngsIDIpKSAvIChNYXRoLnBvdyhyWCwgMikgKiBNYXRoLnBvdyhjdXJycC55LCAyKSArIE1hdGgucG93KHJZLCAyKSAqIE1hdGgucG93KGN1cnJwLngsIDIpKSk7XG4gICAgICAgIGlmIChpc05hTihzKSkge1xuICAgICAgICAgICAgcyA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3BwID0gbmV3IFBvaW50KHMgKiByWCAqIGN1cnJwLnkgLyByWSwgcyAqIC1yWSAqIGN1cnJwLnggLyByWCk7XG4gICAgICAgIC8vIGN4LCBjeVxuICAgICAgICBjb25zdCBjZW50cCA9IG5ldyBQb2ludCgoY3VycmVudC54ICsgY3VycmVudFBvaW50LngpIC8gMiArIE1hdGguY29zKHhBeGlzUm90YXRpb24pICogY3BwLnggLSBNYXRoLnNpbih4QXhpc1JvdGF0aW9uKSAqIGNwcC55LCAoY3VycmVudC55ICsgY3VycmVudFBvaW50LnkpIC8gMiArIE1hdGguc2luKHhBeGlzUm90YXRpb24pICogY3BwLnggKyBNYXRoLmNvcyh4QXhpc1JvdGF0aW9uKSAqIGNwcC55KTtcbiAgICAgICAgLy8gaW5pdGlhbCBhbmdsZVxuICAgICAgICBjb25zdCBhMSA9IHZlY3RvcnNBbmdsZShbXG4gICAgICAgICAgICAxLFxuICAgICAgICAgICAgMFxuICAgICAgICBdLCBbXG4gICAgICAgICAgICAoY3VycnAueCAtIGNwcC54KSAvIHJYLFxuICAgICAgICAgICAgKGN1cnJwLnkgLSBjcHAueSkgLyByWVxuICAgICAgICBdKSAvLyDOuDFcbiAgICAgICAgO1xuICAgICAgICAvLyBhbmdsZSBkZWx0YVxuICAgICAgICBjb25zdCB1ID0gW1xuICAgICAgICAgICAgKGN1cnJwLnggLSBjcHAueCkgLyByWCxcbiAgICAgICAgICAgIChjdXJycC55IC0gY3BwLnkpIC8gcllcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgdiA9IFtcbiAgICAgICAgICAgICgtY3VycnAueCAtIGNwcC54KSAvIHJYLFxuICAgICAgICAgICAgKC1jdXJycC55IC0gY3BwLnkpIC8gcllcbiAgICAgICAgXTtcbiAgICAgICAgbGV0IGFkID0gdmVjdG9yc0FuZ2xlKHUsIHYpIC8vIM6UzrhcbiAgICAgICAgO1xuICAgICAgICBpZiAodmVjdG9yc1JhdGlvKHUsIHYpIDw9IC0xKSB7XG4gICAgICAgICAgICBhZCA9IE1hdGguUEk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZlY3RvcnNSYXRpbyh1LCB2KSA+PSAxKSB7XG4gICAgICAgICAgICBhZCA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGN1cnJlbnRQb2ludCxcbiAgICAgICAgICAgIHJYLFxuICAgICAgICAgICAgclksXG4gICAgICAgICAgICBzd2VlcEZsYWcsXG4gICAgICAgICAgICB4QXhpc1JvdGF0aW9uLFxuICAgICAgICAgICAgY2VudHAsXG4gICAgICAgICAgICBhMSxcbiAgICAgICAgICAgIGFkXG4gICAgICAgIH07XG4gICAgfVxuICAgIHBhdGhBKGN0eCwgYm91bmRpbmdCb3gpIHtcbiAgICAgICAgY29uc3QgeyBwYXRoUGFyc2VyICB9ID0gdGhpcztcbiAgICAgICAgY29uc3QgeyBjdXJyZW50UG9pbnQgLCByWCAsIHJZICwgc3dlZXBGbGFnICwgeEF4aXNSb3RhdGlvbiAsIGNlbnRwICwgYTEgLCBhZCAgfSA9IFBhdGhFbGVtZW50LnBhdGhBKHBhdGhQYXJzZXIpO1xuICAgICAgICAvLyBmb3IgbWFya2Vyc1xuICAgICAgICBjb25zdCBkaXIgPSAxIC0gc3dlZXBGbGFnID8gMSA6IC0xO1xuICAgICAgICBjb25zdCBhaCA9IGExICsgZGlyICogKGFkIC8gMik7XG4gICAgICAgIGNvbnN0IGhhbGZXYXkgPSBuZXcgUG9pbnQoY2VudHAueCArIHJYICogTWF0aC5jb3MoYWgpLCBjZW50cC55ICsgclkgKiBNYXRoLnNpbihhaCkpO1xuICAgICAgICBwYXRoUGFyc2VyLmFkZE1hcmtlckFuZ2xlKGhhbGZXYXksIGFoIC0gZGlyICogTWF0aC5QSSAvIDIpO1xuICAgICAgICBwYXRoUGFyc2VyLmFkZE1hcmtlckFuZ2xlKGN1cnJlbnRQb2ludCwgYWggLSBkaXIgKiBNYXRoLlBJKTtcbiAgICAgICAgYm91bmRpbmdCb3guYWRkUG9pbnQoY3VycmVudFBvaW50LngsIGN1cnJlbnRQb2ludC55KSAvLyBUT0RPOiB0aGlzIGlzIHRvbyBuYWl2ZSwgbWFrZSBpdCBiZXR0ZXJcbiAgICAgICAgO1xuICAgICAgICBpZiAoY3R4ICYmICFpc05hTihhMSkgJiYgIWlzTmFOKGFkKSkge1xuICAgICAgICAgICAgY29uc3QgciA9IHJYID4gclkgPyByWCA6IHJZO1xuICAgICAgICAgICAgY29uc3Qgc3ggPSByWCA+IHJZID8gMSA6IHJYIC8gclk7XG4gICAgICAgICAgICBjb25zdCBzeSA9IHJYID4gclkgPyByWSAvIHJYIDogMTtcbiAgICAgICAgICAgIGN0eC50cmFuc2xhdGUoY2VudHAueCwgY2VudHAueSk7XG4gICAgICAgICAgICBjdHgucm90YXRlKHhBeGlzUm90YXRpb24pO1xuICAgICAgICAgICAgY3R4LnNjYWxlKHN4LCBzeSk7XG4gICAgICAgICAgICBjdHguYXJjKDAsIDAsIHIsIGExLCBhMSArIGFkLCBCb29sZWFuKDEgLSBzd2VlcEZsYWcpKTtcbiAgICAgICAgICAgIGN0eC5zY2FsZSgxIC8gc3gsIDEgLyBzeSk7XG4gICAgICAgICAgICBjdHgucm90YXRlKC14QXhpc1JvdGF0aW9uKTtcbiAgICAgICAgICAgIGN0eC50cmFuc2xhdGUoLWNlbnRwLngsIC1jZW50cC55KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgcGF0aFoocGF0aFBhcnNlcikge1xuICAgICAgICBwYXRoUGFyc2VyLmN1cnJlbnQgPSBwYXRoUGFyc2VyLnN0YXJ0O1xuICAgIH1cbiAgICBwYXRoWihjdHgsIGJvdW5kaW5nQm94KSB7XG4gICAgICAgIFBhdGhFbGVtZW50LnBhdGhaKHRoaXMucGF0aFBhcnNlcik7XG4gICAgICAgIGlmIChjdHgpIHtcbiAgICAgICAgICAgIC8vIG9ubHkgY2xvc2UgcGF0aCBpZiBpdCBpcyBub3QgYSBzdHJhaWdodCBsaW5lXG4gICAgICAgICAgICBpZiAoYm91bmRpbmdCb3gueDEgIT09IGJvdW5kaW5nQm94LngyICYmIGJvdW5kaW5nQm94LnkxICE9PSBib3VuZGluZ0JveC55Mikge1xuICAgICAgICAgICAgICAgIGN0eC5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdHJ1Y3Rvcihkb2N1bWVudCwgbm9kZSwgY2FwdHVyZVRleHROb2Rlcyl7XG4gICAgICAgIHN1cGVyKGRvY3VtZW50LCBub2RlLCBjYXB0dXJlVGV4dE5vZGVzKTtcbiAgICAgICAgdGhpcy50eXBlID0gJ3BhdGgnO1xuICAgICAgICB0aGlzLnBhdGhQYXJzZXIgPSBuZXcgUGF0aFBhcnNlcih0aGlzLmdldEF0dHJpYnV0ZSgnZCcpLmdldFN0cmluZygpKTtcbiAgICB9XG59XG5cbmNsYXNzIFNWR0VsZW1lbnQgZXh0ZW5kcyBSZW5kZXJlZEVsZW1lbnQge1xuICAgIHNldENvbnRleHQoY3R4KSB7XG4gICAgICAgIHZhciByZWY7XG4gICAgICAgIGNvbnN0IHsgZG9jdW1lbnQgIH0gPSB0aGlzO1xuICAgICAgICBjb25zdCB7IHNjcmVlbiAsIHdpbmRvdyAgfSA9IGRvY3VtZW50O1xuICAgICAgICBjb25zdCBjYW52YXMgPSBjdHguY2FudmFzO1xuICAgICAgICBzY3JlZW4uc2V0RGVmYXVsdHMoY3R4KTtcbiAgICAgICAgaWYgKCdzdHlsZScgaW4gY2FudmFzICYmIHR5cGVvZiBjdHguZm9udCAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93ICYmIHR5cGVvZiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGN0eC5mb250ID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoY2FudmFzKS5nZXRQcm9wZXJ0eVZhbHVlKCdmb250Jyk7XG4gICAgICAgICAgICBjb25zdCBmb250U2l6ZVByb3AgPSBuZXcgUHJvcGVydHkoZG9jdW1lbnQsICdmb250U2l6ZScsIEZvbnQucGFyc2UoY3R4LmZvbnQpLmZvbnRTaXplKTtcbiAgICAgICAgICAgIGlmIChmb250U2l6ZVByb3AuaGFzVmFsdWUoKSkge1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LnJvb3RFbVNpemUgPSBmb250U2l6ZVByb3AuZ2V0UGl4ZWxzKCd5Jyk7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZW1TaXplID0gZG9jdW1lbnQucm9vdEVtU2l6ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBjcmVhdGUgbmV3IHZpZXcgcG9ydFxuICAgICAgICBpZiAoIXRoaXMuZ2V0QXR0cmlidXRlKCd4JykuaGFzVmFsdWUoKSkge1xuICAgICAgICAgICAgdGhpcy5nZXRBdHRyaWJ1dGUoJ3gnLCB0cnVlKS5zZXRWYWx1ZSgwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuZ2V0QXR0cmlidXRlKCd5JykuaGFzVmFsdWUoKSkge1xuICAgICAgICAgICAgdGhpcy5nZXRBdHRyaWJ1dGUoJ3knLCB0cnVlKS5zZXRWYWx1ZSgwKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgeyB3aWR0aCAsIGhlaWdodCAgfSA9IHNjcmVlbi52aWV3UG9ydDtcbiAgICAgICAgaWYgKCF0aGlzLmdldFN0eWxlKCd3aWR0aCcpLmhhc1ZhbHVlKCkpIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0U3R5bGUoJ3dpZHRoJywgdHJ1ZSkuc2V0VmFsdWUoJzEwMCUnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuZ2V0U3R5bGUoJ2hlaWdodCcpLmhhc1ZhbHVlKCkpIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0U3R5bGUoJ2hlaWdodCcsIHRydWUpLnNldFZhbHVlKCcxMDAlJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmdldFN0eWxlKCdjb2xvcicpLmhhc1ZhbHVlKCkpIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0U3R5bGUoJ2NvbG9yJywgdHJ1ZSkuc2V0VmFsdWUoJ2JsYWNrJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVmWEF0dHIgPSB0aGlzLmdldEF0dHJpYnV0ZSgncmVmWCcpO1xuICAgICAgICBjb25zdCByZWZZQXR0ciA9IHRoaXMuZ2V0QXR0cmlidXRlKCdyZWZZJyk7XG4gICAgICAgIGNvbnN0IHZpZXdCb3hBdHRyID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ3ZpZXdCb3gnKTtcbiAgICAgICAgY29uc3Qgdmlld0JveCA9IHZpZXdCb3hBdHRyLmhhc1ZhbHVlKCkgPyB0b051bWJlcnModmlld0JveEF0dHIuZ2V0U3RyaW5nKCkpIDogbnVsbDtcbiAgICAgICAgY29uc3QgY2xpcCA9ICF0aGlzLnJvb3QgJiYgdGhpcy5nZXRTdHlsZSgnb3ZlcmZsb3cnKS5nZXRWYWx1ZSgnaGlkZGVuJykgIT09ICd2aXNpYmxlJztcbiAgICAgICAgbGV0IG1pblggPSAwO1xuICAgICAgICBsZXQgbWluWSA9IDA7XG4gICAgICAgIGxldCBjbGlwWCA9IDA7XG4gICAgICAgIGxldCBjbGlwWSA9IDA7XG4gICAgICAgIGlmICh2aWV3Qm94KSB7XG4gICAgICAgICAgICBtaW5YID0gdmlld0JveFswXTtcbiAgICAgICAgICAgIG1pblkgPSB2aWV3Qm94WzFdO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5yb290KSB7XG4gICAgICAgICAgICB3aWR0aCA9IHRoaXMuZ2V0U3R5bGUoJ3dpZHRoJykuZ2V0UGl4ZWxzKCd4Jyk7XG4gICAgICAgICAgICBoZWlnaHQgPSB0aGlzLmdldFN0eWxlKCdoZWlnaHQnKS5nZXRQaXhlbHMoJ3knKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICdtYXJrZXInKSB7XG4gICAgICAgICAgICAgICAgY2xpcFggPSBtaW5YO1xuICAgICAgICAgICAgICAgIGNsaXBZID0gbWluWTtcbiAgICAgICAgICAgICAgICBtaW5YID0gMDtcbiAgICAgICAgICAgICAgICBtaW5ZID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzY3JlZW4udmlld1BvcnQuc2V0Q3VycmVudCh3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgLy8gRGVmYXVsdCB2YWx1ZSBvZiB0cmFuc2Zvcm0tb3JpZ2luIGlzIGNlbnRlciBvbmx5IGZvciByb290IFNWRyBlbGVtZW50c1xuICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9TVkcvQXR0cmlidXRlL3RyYW5zZm9ybS1vcmlnaW5cbiAgICAgICAgaWYgKHRoaXMubm9kZSAvLyBpcyBub3QgdGVtcG9yYXJ5IFNWR0VsZW1lbnRcbiAgICAgICAgICYmICghdGhpcy5wYXJlbnQgfHwgKChyZWYgPSB0aGlzLm5vZGUucGFyZW50Tm9kZSkgPT09IG51bGwgfHwgcmVmID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZWYubm9kZU5hbWUpID09PSAnZm9yZWlnbk9iamVjdCcpICYmIHRoaXMuZ2V0U3R5bGUoJ3RyYW5zZm9ybScsIGZhbHNlLCB0cnVlKS5oYXNWYWx1ZSgpICYmICF0aGlzLmdldFN0eWxlKCd0cmFuc2Zvcm0tb3JpZ2luJywgZmFsc2UsIHRydWUpLmhhc1ZhbHVlKCkpIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0U3R5bGUoJ3RyYW5zZm9ybS1vcmlnaW4nLCB0cnVlLCB0cnVlKS5zZXRWYWx1ZSgnNTAlIDUwJScpO1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyLnNldENvbnRleHQoY3R4KTtcbiAgICAgICAgY3R4LnRyYW5zbGF0ZSh0aGlzLmdldEF0dHJpYnV0ZSgneCcpLmdldFBpeGVscygneCcpLCB0aGlzLmdldEF0dHJpYnV0ZSgneScpLmdldFBpeGVscygneScpKTtcbiAgICAgICAgaWYgKHZpZXdCb3gpIHtcbiAgICAgICAgICAgIHdpZHRoID0gdmlld0JveFsyXTtcbiAgICAgICAgICAgIGhlaWdodCA9IHZpZXdCb3hbM107XG4gICAgICAgIH1cbiAgICAgICAgZG9jdW1lbnQuc2V0Vmlld0JveCh7XG4gICAgICAgICAgICBjdHgsXG4gICAgICAgICAgICBhc3BlY3RSYXRpbzogdGhpcy5nZXRBdHRyaWJ1dGUoJ3ByZXNlcnZlQXNwZWN0UmF0aW8nKS5nZXRTdHJpbmcoKSxcbiAgICAgICAgICAgIHdpZHRoOiBzY3JlZW4udmlld1BvcnQud2lkdGgsXG4gICAgICAgICAgICBkZXNpcmVkV2lkdGg6IHdpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0OiBzY3JlZW4udmlld1BvcnQuaGVpZ2h0LFxuICAgICAgICAgICAgZGVzaXJlZEhlaWdodDogaGVpZ2h0LFxuICAgICAgICAgICAgbWluWCxcbiAgICAgICAgICAgIG1pblksXG4gICAgICAgICAgICByZWZYOiByZWZYQXR0ci5nZXRWYWx1ZSgpLFxuICAgICAgICAgICAgcmVmWTogcmVmWUF0dHIuZ2V0VmFsdWUoKSxcbiAgICAgICAgICAgIGNsaXAsXG4gICAgICAgICAgICBjbGlwWCxcbiAgICAgICAgICAgIGNsaXBZXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodmlld0JveCkge1xuICAgICAgICAgICAgc2NyZWVuLnZpZXdQb3J0LnJlbW92ZUN1cnJlbnQoKTtcbiAgICAgICAgICAgIHNjcmVlbi52aWV3UG9ydC5zZXRDdXJyZW50KHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNsZWFyQ29udGV4dChjdHgpIHtcbiAgICAgICAgc3VwZXIuY2xlYXJDb250ZXh0KGN0eCk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnQuc2NyZWVuLnZpZXdQb3J0LnJlbW92ZUN1cnJlbnQoKTtcbiAgICB9XG4gICAgLyoqXG4gICAqIFJlc2l6ZSBTVkcgdG8gZml0IGluIGdpdmVuIHNpemUuXG4gICAqIEBwYXJhbSB3aWR0aFxuICAgKiBAcGFyYW0gaGVpZ2h0XG4gICAqIEBwYXJhbSBwcmVzZXJ2ZUFzcGVjdFJhdGlvXG4gICAqLyByZXNpemUod2lkdGgpIHtcbiAgICAgICAgbGV0IGhlaWdodCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzFdIDogd2lkdGgsIHByZXNlcnZlQXNwZWN0UmF0aW8gPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHZvaWQgMCA/IGFyZ3VtZW50c1syXSA6IGZhbHNlO1xuICAgICAgICBjb25zdCB3aWR0aEF0dHIgPSB0aGlzLmdldEF0dHJpYnV0ZSgnd2lkdGgnLCB0cnVlKTtcbiAgICAgICAgY29uc3QgaGVpZ2h0QXR0ciA9IHRoaXMuZ2V0QXR0cmlidXRlKCdoZWlnaHQnLCB0cnVlKTtcbiAgICAgICAgY29uc3Qgdmlld0JveEF0dHIgPSB0aGlzLmdldEF0dHJpYnV0ZSgndmlld0JveCcpO1xuICAgICAgICBjb25zdCBzdHlsZUF0dHIgPSB0aGlzLmdldEF0dHJpYnV0ZSgnc3R5bGUnKTtcbiAgICAgICAgY29uc3Qgb3JpZ2luV2lkdGggPSB3aWR0aEF0dHIuZ2V0TnVtYmVyKDApO1xuICAgICAgICBjb25zdCBvcmlnaW5IZWlnaHQgPSBoZWlnaHRBdHRyLmdldE51bWJlcigwKTtcbiAgICAgICAgaWYgKHByZXNlcnZlQXNwZWN0UmF0aW8pIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcHJlc2VydmVBc3BlY3RSYXRpbyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdldEF0dHJpYnV0ZSgncHJlc2VydmVBc3BlY3RSYXRpbycsIHRydWUpLnNldFZhbHVlKHByZXNlcnZlQXNwZWN0UmF0aW8pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmVzZXJ2ZUFzcGVjdFJhdGlvQXR0ciA9IHRoaXMuZ2V0QXR0cmlidXRlKCdwcmVzZXJ2ZUFzcGVjdFJhdGlvJyk7XG4gICAgICAgICAgICAgICAgaWYgKHByZXNlcnZlQXNwZWN0UmF0aW9BdHRyLmhhc1ZhbHVlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJlc2VydmVBc3BlY3RSYXRpb0F0dHIuc2V0VmFsdWUocHJlc2VydmVBc3BlY3RSYXRpb0F0dHIuZ2V0U3RyaW5nKCkucmVwbGFjZSgvXlxccyooXFxTLipcXFMpXFxzKiQvLCAnJDEnKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHdpZHRoQXR0ci5zZXRWYWx1ZSh3aWR0aCk7XG4gICAgICAgIGhlaWdodEF0dHIuc2V0VmFsdWUoaGVpZ2h0KTtcbiAgICAgICAgaWYgKCF2aWV3Qm94QXR0ci5oYXNWYWx1ZSgpKSB7XG4gICAgICAgICAgICB2aWV3Qm94QXR0ci5zZXRWYWx1ZShcIjAgMCBcIi5jb25jYXQob3JpZ2luV2lkdGggfHwgd2lkdGgsIFwiIFwiKS5jb25jYXQob3JpZ2luSGVpZ2h0IHx8IGhlaWdodCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdHlsZUF0dHIuaGFzVmFsdWUoKSkge1xuICAgICAgICAgICAgY29uc3Qgd2lkdGhTdHlsZSA9IHRoaXMuZ2V0U3R5bGUoJ3dpZHRoJyk7XG4gICAgICAgICAgICBjb25zdCBoZWlnaHRTdHlsZSA9IHRoaXMuZ2V0U3R5bGUoJ2hlaWdodCcpO1xuICAgICAgICAgICAgaWYgKHdpZHRoU3R5bGUuaGFzVmFsdWUoKSkge1xuICAgICAgICAgICAgICAgIHdpZHRoU3R5bGUuc2V0VmFsdWUoXCJcIi5jb25jYXQod2lkdGgsIFwicHhcIikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGhlaWdodFN0eWxlLmhhc1ZhbHVlKCkpIHtcbiAgICAgICAgICAgICAgICBoZWlnaHRTdHlsZS5zZXRWYWx1ZShcIlwiLmNvbmNhdChoZWlnaHQsIFwicHhcIikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKC4uLmFyZ3Mpe1xuICAgICAgICBzdXBlciguLi5hcmdzKTtcbiAgICAgICAgdGhpcy50eXBlID0gJ3N2Zyc7XG4gICAgICAgIHRoaXMucm9vdCA9IGZhbHNlO1xuICAgIH1cbn1cblxuY2xhc3MgUmVjdEVsZW1lbnQgZXh0ZW5kcyBQYXRoRWxlbWVudCB7XG4gICAgcGF0aChjdHgpIHtcbiAgICAgICAgY29uc3QgeCA9IHRoaXMuZ2V0QXR0cmlidXRlKCd4JykuZ2V0UGl4ZWxzKCd4Jyk7XG4gICAgICAgIGNvbnN0IHkgPSB0aGlzLmdldEF0dHJpYnV0ZSgneScpLmdldFBpeGVscygneScpO1xuICAgICAgICBjb25zdCB3aWR0aCA9IHRoaXMuZ2V0U3R5bGUoJ3dpZHRoJywgZmFsc2UsIHRydWUpLmdldFBpeGVscygneCcpO1xuICAgICAgICBjb25zdCBoZWlnaHQgPSB0aGlzLmdldFN0eWxlKCdoZWlnaHQnLCBmYWxzZSwgdHJ1ZSkuZ2V0UGl4ZWxzKCd5Jyk7XG4gICAgICAgIGNvbnN0IHJ4QXR0ciA9IHRoaXMuZ2V0QXR0cmlidXRlKCdyeCcpO1xuICAgICAgICBjb25zdCByeUF0dHIgPSB0aGlzLmdldEF0dHJpYnV0ZSgncnknKTtcbiAgICAgICAgbGV0IHJ4ID0gcnhBdHRyLmdldFBpeGVscygneCcpO1xuICAgICAgICBsZXQgcnkgPSByeUF0dHIuZ2V0UGl4ZWxzKCd5Jyk7XG4gICAgICAgIGlmIChyeEF0dHIuaGFzVmFsdWUoKSAmJiAhcnlBdHRyLmhhc1ZhbHVlKCkpIHtcbiAgICAgICAgICAgIHJ5ID0gcng7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJ5QXR0ci5oYXNWYWx1ZSgpICYmICFyeEF0dHIuaGFzVmFsdWUoKSkge1xuICAgICAgICAgICAgcnggPSByeTtcbiAgICAgICAgfVxuICAgICAgICByeCA9IE1hdGgubWluKHJ4LCB3aWR0aCAvIDIpO1xuICAgICAgICByeSA9IE1hdGgubWluKHJ5LCBoZWlnaHQgLyAyKTtcbiAgICAgICAgaWYgKGN0eCkge1xuICAgICAgICAgICAgY29uc3QgS0FQUEEgPSA0ICogKChNYXRoLnNxcnQoMikgLSAxKSAvIDMpO1xuICAgICAgICAgICAgY3R4LmJlZ2luUGF0aCgpIC8vIGFsd2F5cyBzdGFydCB0aGUgcGF0aCBzbyB3ZSBkb24ndCBmaWxsIHByaW9yIHBhdGhzXG4gICAgICAgICAgICA7XG4gICAgICAgICAgICBpZiAoaGVpZ2h0ID4gMCAmJiB3aWR0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBjdHgubW92ZVRvKHggKyByeCwgeSk7XG4gICAgICAgICAgICAgICAgY3R4LmxpbmVUbyh4ICsgd2lkdGggLSByeCwgeSk7XG4gICAgICAgICAgICAgICAgY3R4LmJlemllckN1cnZlVG8oeCArIHdpZHRoIC0gcnggKyBLQVBQQSAqIHJ4LCB5LCB4ICsgd2lkdGgsIHkgKyByeSAtIEtBUFBBICogcnksIHggKyB3aWR0aCwgeSArIHJ5KTtcbiAgICAgICAgICAgICAgICBjdHgubGluZVRvKHggKyB3aWR0aCwgeSArIGhlaWdodCAtIHJ5KTtcbiAgICAgICAgICAgICAgICBjdHguYmV6aWVyQ3VydmVUbyh4ICsgd2lkdGgsIHkgKyBoZWlnaHQgLSByeSArIEtBUFBBICogcnksIHggKyB3aWR0aCAtIHJ4ICsgS0FQUEEgKiByeCwgeSArIGhlaWdodCwgeCArIHdpZHRoIC0gcngsIHkgKyBoZWlnaHQpO1xuICAgICAgICAgICAgICAgIGN0eC5saW5lVG8oeCArIHJ4LCB5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgICAgICBjdHguYmV6aWVyQ3VydmVUbyh4ICsgcnggLSBLQVBQQSAqIHJ4LCB5ICsgaGVpZ2h0LCB4LCB5ICsgaGVpZ2h0IC0gcnkgKyBLQVBQQSAqIHJ5LCB4LCB5ICsgaGVpZ2h0IC0gcnkpO1xuICAgICAgICAgICAgICAgIGN0eC5saW5lVG8oeCwgeSArIHJ5KTtcbiAgICAgICAgICAgICAgICBjdHguYmV6aWVyQ3VydmVUbyh4LCB5ICsgcnkgLSBLQVBQQSAqIHJ5LCB4ICsgcnggLSBLQVBQQSAqIHJ4LCB5LCB4ICsgcngsIHkpO1xuICAgICAgICAgICAgICAgIGN0eC5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IEJvdW5kaW5nQm94KHgsIHksIHggKyB3aWR0aCwgeSArIGhlaWdodCk7XG4gICAgfVxuICAgIGdldE1hcmtlcnMoKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvciguLi5hcmdzKXtcbiAgICAgICAgc3VwZXIoLi4uYXJncyk7XG4gICAgICAgIHRoaXMudHlwZSA9ICdyZWN0JztcbiAgICB9XG59XG5cbmNsYXNzIENpcmNsZUVsZW1lbnQgZXh0ZW5kcyBQYXRoRWxlbWVudCB7XG4gICAgcGF0aChjdHgpIHtcbiAgICAgICAgY29uc3QgY3ggPSB0aGlzLmdldEF0dHJpYnV0ZSgnY3gnKS5nZXRQaXhlbHMoJ3gnKTtcbiAgICAgICAgY29uc3QgY3kgPSB0aGlzLmdldEF0dHJpYnV0ZSgnY3knKS5nZXRQaXhlbHMoJ3knKTtcbiAgICAgICAgY29uc3QgciA9IHRoaXMuZ2V0QXR0cmlidXRlKCdyJykuZ2V0UGl4ZWxzKCk7XG4gICAgICAgIGlmIChjdHggJiYgciA+IDApIHtcbiAgICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICAgICAgICAgIGN0eC5hcmMoY3gsIGN5LCByLCAwLCBNYXRoLlBJICogMiwgZmFsc2UpO1xuICAgICAgICAgICAgY3R4LmNsb3NlUGF0aCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgQm91bmRpbmdCb3goY3ggLSByLCBjeSAtIHIsIGN4ICsgciwgY3kgKyByKTtcbiAgICB9XG4gICAgZ2V0TWFya2VycygpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKC4uLmFyZ3Mpe1xuICAgICAgICBzdXBlciguLi5hcmdzKTtcbiAgICAgICAgdGhpcy50eXBlID0gJ2NpcmNsZSc7XG4gICAgfVxufVxuXG5jbGFzcyBFbGxpcHNlRWxlbWVudCBleHRlbmRzIFBhdGhFbGVtZW50IHtcbiAgICBwYXRoKGN0eCkge1xuICAgICAgICBjb25zdCBLQVBQQSA9IDQgKiAoKE1hdGguc3FydCgyKSAtIDEpIC8gMyk7XG4gICAgICAgIGNvbnN0IHJ4ID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ3J4JykuZ2V0UGl4ZWxzKCd4Jyk7XG4gICAgICAgIGNvbnN0IHJ5ID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ3J5JykuZ2V0UGl4ZWxzKCd5Jyk7XG4gICAgICAgIGNvbnN0IGN4ID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ2N4JykuZ2V0UGl4ZWxzKCd4Jyk7XG4gICAgICAgIGNvbnN0IGN5ID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ2N5JykuZ2V0UGl4ZWxzKCd5Jyk7XG4gICAgICAgIGlmIChjdHggJiYgcnggPiAwICYmIHJ5ID4gMCkge1xuICAgICAgICAgICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgICAgICAgY3R4Lm1vdmVUbyhjeCArIHJ4LCBjeSk7XG4gICAgICAgICAgICBjdHguYmV6aWVyQ3VydmVUbyhjeCArIHJ4LCBjeSArIEtBUFBBICogcnksIGN4ICsgS0FQUEEgKiByeCwgY3kgKyByeSwgY3gsIGN5ICsgcnkpO1xuICAgICAgICAgICAgY3R4LmJlemllckN1cnZlVG8oY3ggLSBLQVBQQSAqIHJ4LCBjeSArIHJ5LCBjeCAtIHJ4LCBjeSArIEtBUFBBICogcnksIGN4IC0gcngsIGN5KTtcbiAgICAgICAgICAgIGN0eC5iZXppZXJDdXJ2ZVRvKGN4IC0gcngsIGN5IC0gS0FQUEEgKiByeSwgY3ggLSBLQVBQQSAqIHJ4LCBjeSAtIHJ5LCBjeCwgY3kgLSByeSk7XG4gICAgICAgICAgICBjdHguYmV6aWVyQ3VydmVUbyhjeCArIEtBUFBBICogcngsIGN5IC0gcnksIGN4ICsgcngsIGN5IC0gS0FQUEEgKiByeSwgY3ggKyByeCwgY3kpO1xuICAgICAgICAgICAgY3R4LmNsb3NlUGF0aCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgQm91bmRpbmdCb3goY3ggLSByeCwgY3kgLSByeSwgY3ggKyByeCwgY3kgKyByeSk7XG4gICAgfVxuICAgIGdldE1hcmtlcnMoKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvciguLi5hcmdzKXtcbiAgICAgICAgc3VwZXIoLi4uYXJncyk7XG4gICAgICAgIHRoaXMudHlwZSA9ICdlbGxpcHNlJztcbiAgICB9XG59XG5cbmNsYXNzIExpbmVFbGVtZW50IGV4dGVuZHMgUGF0aEVsZW1lbnQge1xuICAgIGdldFBvaW50cygpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG5ldyBQb2ludCh0aGlzLmdldEF0dHJpYnV0ZSgneDEnKS5nZXRQaXhlbHMoJ3gnKSwgdGhpcy5nZXRBdHRyaWJ1dGUoJ3kxJykuZ2V0UGl4ZWxzKCd5JykpLFxuICAgICAgICAgICAgbmV3IFBvaW50KHRoaXMuZ2V0QXR0cmlidXRlKCd4MicpLmdldFBpeGVscygneCcpLCB0aGlzLmdldEF0dHJpYnV0ZSgneTInKS5nZXRQaXhlbHMoJ3knKSlcbiAgICAgICAgXTtcbiAgICB9XG4gICAgcGF0aChjdHgpIHtcbiAgICAgICAgY29uc3QgW3sgeDogeDAgLCB5OiB5MCAgfSwgeyB4OiB4MSAsIHk6IHkxICB9XSA9IHRoaXMuZ2V0UG9pbnRzKCk7XG4gICAgICAgIGlmIChjdHgpIHtcbiAgICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICAgICAgICAgIGN0eC5tb3ZlVG8oeDAsIHkwKTtcbiAgICAgICAgICAgIGN0eC5saW5lVG8oeDEsIHkxKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IEJvdW5kaW5nQm94KHgwLCB5MCwgeDEsIHkxKTtcbiAgICB9XG4gICAgZ2V0TWFya2VycygpIHtcbiAgICAgICAgY29uc3QgW3AwLCBwMV0gPSB0aGlzLmdldFBvaW50cygpO1xuICAgICAgICBjb25zdCBhID0gcDAuYW5nbGVUbyhwMSk7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgcDAsXG4gICAgICAgICAgICAgICAgYVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBwMSxcbiAgICAgICAgICAgICAgICBhXG4gICAgICAgICAgICBdXG4gICAgICAgIF07XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKC4uLmFyZ3Mpe1xuICAgICAgICBzdXBlciguLi5hcmdzKTtcbiAgICAgICAgdGhpcy50eXBlID0gJ2xpbmUnO1xuICAgIH1cbn1cblxuY2xhc3MgUG9seWxpbmVFbGVtZW50IGV4dGVuZHMgUGF0aEVsZW1lbnQge1xuICAgIHBhdGgoY3R4KSB7XG4gICAgICAgIGNvbnN0IHsgcG9pbnRzICB9ID0gdGhpcztcbiAgICAgICAgY29uc3QgW3sgeDogeDAgLCB5OiB5MCAgfV0gPSBwb2ludHM7XG4gICAgICAgIGNvbnN0IGJvdW5kaW5nQm94ID0gbmV3IEJvdW5kaW5nQm94KHgwLCB5MCk7XG4gICAgICAgIGlmIChjdHgpIHtcbiAgICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICAgICAgICAgIGN0eC5tb3ZlVG8oeDAsIHkwKTtcbiAgICAgICAgfVxuICAgICAgICBwb2ludHMuZm9yRWFjaCgocGFyYW0pPT57XG4gICAgICAgICAgICBsZXQgeyB4ICwgeSAgfSA9IHBhcmFtO1xuICAgICAgICAgICAgYm91bmRpbmdCb3guYWRkUG9pbnQoeCwgeSk7XG4gICAgICAgICAgICBpZiAoY3R4KSB7XG4gICAgICAgICAgICAgICAgY3R4LmxpbmVUbyh4LCB5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBib3VuZGluZ0JveDtcbiAgICB9XG4gICAgZ2V0TWFya2VycygpIHtcbiAgICAgICAgY29uc3QgeyBwb2ludHMgIH0gPSB0aGlzO1xuICAgICAgICBjb25zdCBsYXN0SW5kZXggPSBwb2ludHMubGVuZ3RoIC0gMTtcbiAgICAgICAgY29uc3QgbWFya2VycyA9IFtdO1xuICAgICAgICBwb2ludHMuZm9yRWFjaCgocG9pbnQsIGkpPT57XG4gICAgICAgICAgICBpZiAoaSA9PT0gbGFzdEluZGV4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbWFya2Vycy5wdXNoKFtcbiAgICAgICAgICAgICAgICBwb2ludCxcbiAgICAgICAgICAgICAgICBwb2ludC5hbmdsZVRvKHBvaW50c1tpICsgMV0pXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChtYXJrZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIG1hcmtlcnMucHVzaChbXG4gICAgICAgICAgICAgICAgcG9pbnRzW3BvaW50cy5sZW5ndGggLSAxXSxcbiAgICAgICAgICAgICAgICBtYXJrZXJzW21hcmtlcnMubGVuZ3RoIC0gMV1bMV1cbiAgICAgICAgICAgIF0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYXJrZXJzO1xuICAgIH1cbiAgICBjb25zdHJ1Y3Rvcihkb2N1bWVudCwgbm9kZSwgY2FwdHVyZVRleHROb2Rlcyl7XG4gICAgICAgIHN1cGVyKGRvY3VtZW50LCBub2RlLCBjYXB0dXJlVGV4dE5vZGVzKTtcbiAgICAgICAgdGhpcy50eXBlID0gJ3BvbHlsaW5lJztcbiAgICAgICAgdGhpcy5wb2ludHMgPSBbXTtcbiAgICAgICAgdGhpcy5wb2ludHMgPSBQb2ludC5wYXJzZVBhdGgodGhpcy5nZXRBdHRyaWJ1dGUoJ3BvaW50cycpLmdldFN0cmluZygpKTtcbiAgICB9XG59XG5cbmNsYXNzIFBvbHlnb25FbGVtZW50IGV4dGVuZHMgUG9seWxpbmVFbGVtZW50IHtcbiAgICBwYXRoKGN0eCkge1xuICAgICAgICBjb25zdCBib3VuZGluZ0JveCA9IHN1cGVyLnBhdGgoY3R4KTtcbiAgICAgICAgY29uc3QgW3sgeCAsIHkgIH1dID0gdGhpcy5wb2ludHM7XG4gICAgICAgIGlmIChjdHgpIHtcbiAgICAgICAgICAgIGN0eC5saW5lVG8oeCwgeSk7XG4gICAgICAgICAgICBjdHguY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGJvdW5kaW5nQm94O1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvciguLi5hcmdzKXtcbiAgICAgICAgc3VwZXIoLi4uYXJncyk7XG4gICAgICAgIHRoaXMudHlwZSA9ICdwb2x5Z29uJztcbiAgICB9XG59XG5cbmNsYXNzIFBhdHRlcm5FbGVtZW50IGV4dGVuZHMgRWxlbWVudCB7XG4gICAgY3JlYXRlUGF0dGVybihjdHgsIF8sIHBhcmVudE9wYWNpdHlQcm9wKSB7XG4gICAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy5nZXRTdHlsZSgnd2lkdGgnKS5nZXRQaXhlbHMoJ3gnLCB0cnVlKTtcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gdGhpcy5nZXRTdHlsZSgnaGVpZ2h0JykuZ2V0UGl4ZWxzKCd5JywgdHJ1ZSk7XG4gICAgICAgIC8vIHJlbmRlciBtZSB1c2luZyBhIHRlbXBvcmFyeSBzdmcgZWxlbWVudFxuICAgICAgICBjb25zdCBwYXR0ZXJuU3ZnID0gbmV3IFNWR0VsZW1lbnQodGhpcy5kb2N1bWVudCwgbnVsbCk7XG4gICAgICAgIHBhdHRlcm5TdmcuYXR0cmlidXRlcy52aWV3Qm94ID0gbmV3IFByb3BlcnR5KHRoaXMuZG9jdW1lbnQsICd2aWV3Qm94JywgdGhpcy5nZXRBdHRyaWJ1dGUoJ3ZpZXdCb3gnKS5nZXRWYWx1ZSgpKTtcbiAgICAgICAgcGF0dGVyblN2Zy5hdHRyaWJ1dGVzLndpZHRoID0gbmV3IFByb3BlcnR5KHRoaXMuZG9jdW1lbnQsICd3aWR0aCcsIFwiXCIuY29uY2F0KHdpZHRoLCBcInB4XCIpKTtcbiAgICAgICAgcGF0dGVyblN2Zy5hdHRyaWJ1dGVzLmhlaWdodCA9IG5ldyBQcm9wZXJ0eSh0aGlzLmRvY3VtZW50LCAnaGVpZ2h0JywgXCJcIi5jb25jYXQoaGVpZ2h0LCBcInB4XCIpKTtcbiAgICAgICAgcGF0dGVyblN2Zy5hdHRyaWJ1dGVzLnRyYW5zZm9ybSA9IG5ldyBQcm9wZXJ0eSh0aGlzLmRvY3VtZW50LCAndHJhbnNmb3JtJywgdGhpcy5nZXRBdHRyaWJ1dGUoJ3BhdHRlcm5UcmFuc2Zvcm0nKS5nZXRWYWx1ZSgpKTtcbiAgICAgICAgcGF0dGVyblN2Zy5jaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW47XG4gICAgICAgIGNvbnN0IHBhdHRlcm5DYW52YXMgPSB0aGlzLmRvY3VtZW50LmNyZWF0ZUNhbnZhcyh3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgY29uc3QgcGF0dGVybkN0eCA9IHBhdHRlcm5DYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICAgICAgY29uc3QgeEF0dHIgPSB0aGlzLmdldEF0dHJpYnV0ZSgneCcpO1xuICAgICAgICBjb25zdCB5QXR0ciA9IHRoaXMuZ2V0QXR0cmlidXRlKCd5Jyk7XG4gICAgICAgIGlmICh4QXR0ci5oYXNWYWx1ZSgpICYmIHlBdHRyLmhhc1ZhbHVlKCkpIHtcbiAgICAgICAgICAgIHBhdHRlcm5DdHgudHJhbnNsYXRlKHhBdHRyLmdldFBpeGVscygneCcsIHRydWUpLCB5QXR0ci5nZXRQaXhlbHMoJ3knLCB0cnVlKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcmVudE9wYWNpdHlQcm9wLmhhc1ZhbHVlKCkpIHtcbiAgICAgICAgICAgIHRoaXMuc3R5bGVzWydmaWxsLW9wYWNpdHknXSA9IHBhcmVudE9wYWNpdHlQcm9wO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgUmVmbGVjdC5kZWxldGVQcm9wZXJ0eSh0aGlzLnN0eWxlcywgJ2ZpbGwtb3BhY2l0eScpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHJlbmRlciAzeDMgZ3JpZCBzbyB3aGVuIHdlIHRyYW5zZm9ybSB0aGVyZSdzIG5vIHdoaXRlIHNwYWNlIG9uIGVkZ2VzXG4gICAgICAgIGZvcihsZXQgeCA9IC0xOyB4IDw9IDE7IHgrKyl7XG4gICAgICAgICAgICBmb3IobGV0IHkgPSAtMTsgeSA8PSAxOyB5Kyspe1xuICAgICAgICAgICAgICAgIHBhdHRlcm5DdHguc2F2ZSgpO1xuICAgICAgICAgICAgICAgIHBhdHRlcm5TdmcuYXR0cmlidXRlcy54ID0gbmV3IFByb3BlcnR5KHRoaXMuZG9jdW1lbnQsICd4JywgeCAqIHBhdHRlcm5DYW52YXMud2lkdGgpO1xuICAgICAgICAgICAgICAgIHBhdHRlcm5TdmcuYXR0cmlidXRlcy55ID0gbmV3IFByb3BlcnR5KHRoaXMuZG9jdW1lbnQsICd5JywgeSAqIHBhdHRlcm5DYW52YXMuaGVpZ2h0KTtcbiAgICAgICAgICAgICAgICBwYXR0ZXJuU3ZnLnJlbmRlcihwYXR0ZXJuQ3R4KTtcbiAgICAgICAgICAgICAgICBwYXR0ZXJuQ3R4LnJlc3RvcmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXR0ZXJuID0gY3R4LmNyZWF0ZVBhdHRlcm4ocGF0dGVybkNhbnZhcywgJ3JlcGVhdCcpO1xuICAgICAgICByZXR1cm4gcGF0dGVybjtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoLi4uYXJncyl7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3MpO1xuICAgICAgICB0aGlzLnR5cGUgPSAncGF0dGVybic7XG4gICAgfVxufVxuXG5jbGFzcyBNYXJrZXJFbGVtZW50IGV4dGVuZHMgRWxlbWVudCB7XG4gICAgcmVuZGVyKGN0eCwgcG9pbnQsIGFuZ2xlKSB7XG4gICAgICAgIGlmICghcG9pbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHggLCB5ICB9ID0gcG9pbnQ7XG4gICAgICAgIGNvbnN0IG9yaWVudCA9IHRoaXMuZ2V0QXR0cmlidXRlKCdvcmllbnQnKS5nZXRTdHJpbmcoJ2F1dG8nKTtcbiAgICAgICAgY29uc3QgbWFya2VyVW5pdHMgPSB0aGlzLmdldEF0dHJpYnV0ZSgnbWFya2VyVW5pdHMnKS5nZXRTdHJpbmcoJ3N0cm9rZVdpZHRoJyk7XG4gICAgICAgIGN0eC50cmFuc2xhdGUoeCwgeSk7XG4gICAgICAgIGlmIChvcmllbnQgPT09ICdhdXRvJykge1xuICAgICAgICAgICAgY3R4LnJvdGF0ZShhbmdsZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hcmtlclVuaXRzID09PSAnc3Ryb2tlV2lkdGgnKSB7XG4gICAgICAgICAgICBjdHguc2NhbGUoY3R4LmxpbmVXaWR0aCwgY3R4LmxpbmVXaWR0aCk7XG4gICAgICAgIH1cbiAgICAgICAgY3R4LnNhdmUoKTtcbiAgICAgICAgLy8gcmVuZGVyIG1lIHVzaW5nIGEgdGVtcG9yYXJ5IHN2ZyBlbGVtZW50XG4gICAgICAgIGNvbnN0IG1hcmtlclN2ZyA9IG5ldyBTVkdFbGVtZW50KHRoaXMuZG9jdW1lbnQpO1xuICAgICAgICBtYXJrZXJTdmcudHlwZSA9IHRoaXMudHlwZTtcbiAgICAgICAgbWFya2VyU3ZnLmF0dHJpYnV0ZXMudmlld0JveCA9IG5ldyBQcm9wZXJ0eSh0aGlzLmRvY3VtZW50LCAndmlld0JveCcsIHRoaXMuZ2V0QXR0cmlidXRlKCd2aWV3Qm94JykuZ2V0VmFsdWUoKSk7XG4gICAgICAgIG1hcmtlclN2Zy5hdHRyaWJ1dGVzLnJlZlggPSBuZXcgUHJvcGVydHkodGhpcy5kb2N1bWVudCwgJ3JlZlgnLCB0aGlzLmdldEF0dHJpYnV0ZSgncmVmWCcpLmdldFZhbHVlKCkpO1xuICAgICAgICBtYXJrZXJTdmcuYXR0cmlidXRlcy5yZWZZID0gbmV3IFByb3BlcnR5KHRoaXMuZG9jdW1lbnQsICdyZWZZJywgdGhpcy5nZXRBdHRyaWJ1dGUoJ3JlZlknKS5nZXRWYWx1ZSgpKTtcbiAgICAgICAgbWFya2VyU3ZnLmF0dHJpYnV0ZXMud2lkdGggPSBuZXcgUHJvcGVydHkodGhpcy5kb2N1bWVudCwgJ3dpZHRoJywgdGhpcy5nZXRBdHRyaWJ1dGUoJ21hcmtlcldpZHRoJykuZ2V0VmFsdWUoKSk7XG4gICAgICAgIG1hcmtlclN2Zy5hdHRyaWJ1dGVzLmhlaWdodCA9IG5ldyBQcm9wZXJ0eSh0aGlzLmRvY3VtZW50LCAnaGVpZ2h0JywgdGhpcy5nZXRBdHRyaWJ1dGUoJ21hcmtlckhlaWdodCcpLmdldFZhbHVlKCkpO1xuICAgICAgICBtYXJrZXJTdmcuYXR0cmlidXRlcy5vdmVyZmxvdyA9IG5ldyBQcm9wZXJ0eSh0aGlzLmRvY3VtZW50LCAnb3ZlcmZsb3cnLCB0aGlzLmdldEF0dHJpYnV0ZSgnb3ZlcmZsb3cnKS5nZXRWYWx1ZSgpKTtcbiAgICAgICAgbWFya2VyU3ZnLmF0dHJpYnV0ZXMuZmlsbCA9IG5ldyBQcm9wZXJ0eSh0aGlzLmRvY3VtZW50LCAnZmlsbCcsIHRoaXMuZ2V0QXR0cmlidXRlKCdmaWxsJykuZ2V0Q29sb3IoJ2JsYWNrJykpO1xuICAgICAgICBtYXJrZXJTdmcuYXR0cmlidXRlcy5zdHJva2UgPSBuZXcgUHJvcGVydHkodGhpcy5kb2N1bWVudCwgJ3N0cm9rZScsIHRoaXMuZ2V0QXR0cmlidXRlKCdzdHJva2UnKS5nZXRWYWx1ZSgnbm9uZScpKTtcbiAgICAgICAgbWFya2VyU3ZnLmNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbjtcbiAgICAgICAgbWFya2VyU3ZnLnJlbmRlcihjdHgpO1xuICAgICAgICBjdHgucmVzdG9yZSgpO1xuICAgICAgICBpZiAobWFya2VyVW5pdHMgPT09ICdzdHJva2VXaWR0aCcpIHtcbiAgICAgICAgICAgIGN0eC5zY2FsZSgxIC8gY3R4LmxpbmVXaWR0aCwgMSAvIGN0eC5saW5lV2lkdGgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcmllbnQgPT09ICdhdXRvJykge1xuICAgICAgICAgICAgY3R4LnJvdGF0ZSgtYW5nbGUpO1xuICAgICAgICB9XG4gICAgICAgIGN0eC50cmFuc2xhdGUoLXgsIC15KTtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoLi4uYXJncyl7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3MpO1xuICAgICAgICB0aGlzLnR5cGUgPSAnbWFya2VyJztcbiAgICB9XG59XG5cbmNsYXNzIERlZnNFbGVtZW50IGV4dGVuZHMgRWxlbWVudCB7XG4gICAgcmVuZGVyKCkge1xuICAgIC8vIE5PT1BcbiAgICB9XG4gICAgY29uc3RydWN0b3IoLi4uYXJncyl7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3MpO1xuICAgICAgICB0aGlzLnR5cGUgPSAnZGVmcyc7XG4gICAgfVxufVxuXG5jbGFzcyBHRWxlbWVudCBleHRlbmRzIFJlbmRlcmVkRWxlbWVudCB7XG4gICAgZ2V0Qm91bmRpbmdCb3goY3R4KSB7XG4gICAgICAgIGNvbnN0IGJvdW5kaW5nQm94ID0gbmV3IEJvdW5kaW5nQm94KCk7XG4gICAgICAgIHRoaXMuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpPT57XG4gICAgICAgICAgICBib3VuZGluZ0JveC5hZGRCb3VuZGluZ0JveChjaGlsZC5nZXRCb3VuZGluZ0JveChjdHgpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBib3VuZGluZ0JveDtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoLi4uYXJncyl7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3MpO1xuICAgICAgICB0aGlzLnR5cGUgPSAnZyc7XG4gICAgfVxufVxuXG5jbGFzcyBHcmFkaWVudEVsZW1lbnQgZXh0ZW5kcyBFbGVtZW50IHtcbiAgICBnZXRHcmFkaWVudFVuaXRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUoJ2dyYWRpZW50VW5pdHMnKS5nZXRTdHJpbmcoJ29iamVjdEJvdW5kaW5nQm94Jyk7XG4gICAgfVxuICAgIGNyZWF0ZUdyYWRpZW50KGN0eCwgZWxlbWVudCwgcGFyZW50T3BhY2l0eVByb3ApIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzLCBjb25zaXN0ZW50LXRoaXNcbiAgICAgICAgbGV0IHN0b3BzQ29udGFpbmVyID0gdGhpcztcbiAgICAgICAgaWYgKHRoaXMuZ2V0SHJlZkF0dHJpYnV0ZSgpLmhhc1ZhbHVlKCkpIHtcbiAgICAgICAgICAgIHN0b3BzQ29udGFpbmVyID0gdGhpcy5nZXRIcmVmQXR0cmlidXRlKCkuZ2V0RGVmaW5pdGlvbigpO1xuICAgICAgICAgICAgdGhpcy5pbmhlcml0U3RvcENvbnRhaW5lcihzdG9wc0NvbnRhaW5lcik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBzdG9wcyAgfSA9IHN0b3BzQ29udGFpbmVyO1xuICAgICAgICBjb25zdCBncmFkaWVudCA9IHRoaXMuZ2V0R3JhZGllbnQoY3R4LCBlbGVtZW50KTtcbiAgICAgICAgaWYgKCFncmFkaWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWRkUGFyZW50T3BhY2l0eShwYXJlbnRPcGFjaXR5UHJvcCwgc3RvcHNbc3RvcHMubGVuZ3RoIC0gMV0uY29sb3IpO1xuICAgICAgICB9XG4gICAgICAgIHN0b3BzLmZvckVhY2goKHN0b3ApPT57XG4gICAgICAgICAgICBncmFkaWVudC5hZGRDb2xvclN0b3Aoc3RvcC5vZmZzZXQsIHRoaXMuYWRkUGFyZW50T3BhY2l0eShwYXJlbnRPcGFjaXR5UHJvcCwgc3RvcC5jb2xvcikpO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRoaXMuZ2V0QXR0cmlidXRlKCdncmFkaWVudFRyYW5zZm9ybScpLmhhc1ZhbHVlKCkpIHtcbiAgICAgICAgICAgIC8vIHJlbmRlciBhcyB0cmFuc2Zvcm1lZCBwYXR0ZXJuIG9uIHRlbXBvcmFyeSBjYW52YXNcbiAgICAgICAgICAgIGNvbnN0IHsgZG9jdW1lbnQgIH0gPSB0aGlzO1xuICAgICAgICAgICAgY29uc3QgeyBNQVhfVklSVFVBTF9QSVhFTFMgIH0gPSBTY3JlZW47XG4gICAgICAgICAgICBjb25zdCB7IHZpZXdQb3J0ICB9ID0gZG9jdW1lbnQuc2NyZWVuO1xuICAgICAgICAgICAgY29uc3Qgcm9vdFZpZXcgPSB2aWV3UG9ydC5nZXRSb290KCk7XG4gICAgICAgICAgICBjb25zdCByZWN0ID0gbmV3IFJlY3RFbGVtZW50KGRvY3VtZW50KTtcbiAgICAgICAgICAgIHJlY3QuYXR0cmlidXRlcy54ID0gbmV3IFByb3BlcnR5KGRvY3VtZW50LCAneCcsIC1NQVhfVklSVFVBTF9QSVhFTFMgLyAzKTtcbiAgICAgICAgICAgIHJlY3QuYXR0cmlidXRlcy55ID0gbmV3IFByb3BlcnR5KGRvY3VtZW50LCAneScsIC1NQVhfVklSVFVBTF9QSVhFTFMgLyAzKTtcbiAgICAgICAgICAgIHJlY3QuYXR0cmlidXRlcy53aWR0aCA9IG5ldyBQcm9wZXJ0eShkb2N1bWVudCwgJ3dpZHRoJywgTUFYX1ZJUlRVQUxfUElYRUxTKTtcbiAgICAgICAgICAgIHJlY3QuYXR0cmlidXRlcy5oZWlnaHQgPSBuZXcgUHJvcGVydHkoZG9jdW1lbnQsICdoZWlnaHQnLCBNQVhfVklSVFVBTF9QSVhFTFMpO1xuICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSBuZXcgR0VsZW1lbnQoZG9jdW1lbnQpO1xuICAgICAgICAgICAgZ3JvdXAuYXR0cmlidXRlcy50cmFuc2Zvcm0gPSBuZXcgUHJvcGVydHkoZG9jdW1lbnQsICd0cmFuc2Zvcm0nLCB0aGlzLmdldEF0dHJpYnV0ZSgnZ3JhZGllbnRUcmFuc2Zvcm0nKS5nZXRWYWx1ZSgpKTtcbiAgICAgICAgICAgIGdyb3VwLmNoaWxkcmVuID0gW1xuICAgICAgICAgICAgICAgIHJlY3RcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBjb25zdCBwYXR0ZXJuU3ZnID0gbmV3IFNWR0VsZW1lbnQoZG9jdW1lbnQpO1xuICAgICAgICAgICAgcGF0dGVyblN2Zy5hdHRyaWJ1dGVzLnggPSBuZXcgUHJvcGVydHkoZG9jdW1lbnQsICd4JywgMCk7XG4gICAgICAgICAgICBwYXR0ZXJuU3ZnLmF0dHJpYnV0ZXMueSA9IG5ldyBQcm9wZXJ0eShkb2N1bWVudCwgJ3knLCAwKTtcbiAgICAgICAgICAgIHBhdHRlcm5TdmcuYXR0cmlidXRlcy53aWR0aCA9IG5ldyBQcm9wZXJ0eShkb2N1bWVudCwgJ3dpZHRoJywgcm9vdFZpZXcud2lkdGgpO1xuICAgICAgICAgICAgcGF0dGVyblN2Zy5hdHRyaWJ1dGVzLmhlaWdodCA9IG5ldyBQcm9wZXJ0eShkb2N1bWVudCwgJ2hlaWdodCcsIHJvb3RWaWV3LmhlaWdodCk7XG4gICAgICAgICAgICBwYXR0ZXJuU3ZnLmNoaWxkcmVuID0gW1xuICAgICAgICAgICAgICAgIGdyb3VwXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgY29uc3QgcGF0dGVybkNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUNhbnZhcyhyb290Vmlldy53aWR0aCwgcm9vdFZpZXcuaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnN0IHBhdHRlcm5DdHggPSBwYXR0ZXJuQ2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gICAgICAgICAgICBwYXR0ZXJuQ3R4LmZpbGxTdHlsZSA9IGdyYWRpZW50O1xuICAgICAgICAgICAgcGF0dGVyblN2Zy5yZW5kZXIocGF0dGVybkN0eCk7XG4gICAgICAgICAgICByZXR1cm4gcGF0dGVybkN0eC5jcmVhdGVQYXR0ZXJuKHBhdHRlcm5DYW52YXMsICduby1yZXBlYXQnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ3JhZGllbnQ7XG4gICAgfVxuICAgIGluaGVyaXRTdG9wQ29udGFpbmVyKHN0b3BzQ29udGFpbmVyKSB7XG4gICAgICAgIHRoaXMuYXR0cmlidXRlc1RvSW5oZXJpdC5mb3JFYWNoKChhdHRyaWJ1dGVUb0luaGVyaXQpPT57XG4gICAgICAgICAgICBpZiAoIXRoaXMuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZVRvSW5oZXJpdCkuaGFzVmFsdWUoKSAmJiBzdG9wc0NvbnRhaW5lci5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlVG9Jbmhlcml0KS5oYXNWYWx1ZSgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlVG9Jbmhlcml0LCB0cnVlKS5zZXRWYWx1ZShzdG9wc0NvbnRhaW5lci5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlVG9Jbmhlcml0KS5nZXRWYWx1ZSgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFkZFBhcmVudE9wYWNpdHkocGFyZW50T3BhY2l0eVByb3AsIGNvbG9yKSB7XG4gICAgICAgIGlmIChwYXJlbnRPcGFjaXR5UHJvcC5oYXNWYWx1ZSgpKSB7XG4gICAgICAgICAgICBjb25zdCBjb2xvclByb3AgPSBuZXcgUHJvcGVydHkodGhpcy5kb2N1bWVudCwgJ2NvbG9yJywgY29sb3IpO1xuICAgICAgICAgICAgcmV0dXJuIGNvbG9yUHJvcC5hZGRPcGFjaXR5KHBhcmVudE9wYWNpdHlQcm9wKS5nZXRDb2xvcigpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb2xvcjtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoZG9jdW1lbnQsIG5vZGUsIGNhcHR1cmVUZXh0Tm9kZXMpe1xuICAgICAgICBzdXBlcihkb2N1bWVudCwgbm9kZSwgY2FwdHVyZVRleHROb2Rlcyk7XG4gICAgICAgIHRoaXMuYXR0cmlidXRlc1RvSW5oZXJpdCA9IFtcbiAgICAgICAgICAgICdncmFkaWVudFVuaXRzJ1xuICAgICAgICBdO1xuICAgICAgICB0aGlzLnN0b3BzID0gW107XG4gICAgICAgIGNvbnN0IHsgc3RvcHMgLCBjaGlsZHJlbiAgfSA9IHRoaXM7XG4gICAgICAgIGNoaWxkcmVuLmZvckVhY2goKGNoaWxkKT0+e1xuICAgICAgICAgICAgaWYgKGNoaWxkLnR5cGUgPT09ICdzdG9wJykge1xuICAgICAgICAgICAgICAgIHN0b3BzLnB1c2goY2hpbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmNsYXNzIExpbmVhckdyYWRpZW50RWxlbWVudCBleHRlbmRzIEdyYWRpZW50RWxlbWVudCB7XG4gICAgZ2V0R3JhZGllbnQoY3R4LCBlbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IGlzQm91bmRpbmdCb3hVbml0cyA9IHRoaXMuZ2V0R3JhZGllbnRVbml0cygpID09PSAnb2JqZWN0Qm91bmRpbmdCb3gnO1xuICAgICAgICBjb25zdCBib3VuZGluZ0JveCA9IGlzQm91bmRpbmdCb3hVbml0cyA/IGVsZW1lbnQuZ2V0Qm91bmRpbmdCb3goY3R4KSA6IG51bGw7XG4gICAgICAgIGlmIChpc0JvdW5kaW5nQm94VW5pdHMgJiYgIWJvdW5kaW5nQm94KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuZ2V0QXR0cmlidXRlKCd4MScpLmhhc1ZhbHVlKCkgJiYgIXRoaXMuZ2V0QXR0cmlidXRlKCd5MScpLmhhc1ZhbHVlKCkgJiYgIXRoaXMuZ2V0QXR0cmlidXRlKCd4MicpLmhhc1ZhbHVlKCkgJiYgIXRoaXMuZ2V0QXR0cmlidXRlKCd5MicpLmhhc1ZhbHVlKCkpIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0QXR0cmlidXRlKCd4MScsIHRydWUpLnNldFZhbHVlKDApO1xuICAgICAgICAgICAgdGhpcy5nZXRBdHRyaWJ1dGUoJ3kxJywgdHJ1ZSkuc2V0VmFsdWUoMCk7XG4gICAgICAgICAgICB0aGlzLmdldEF0dHJpYnV0ZSgneDInLCB0cnVlKS5zZXRWYWx1ZSgxKTtcbiAgICAgICAgICAgIHRoaXMuZ2V0QXR0cmlidXRlKCd5MicsIHRydWUpLnNldFZhbHVlKDApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHgxID0gaXNCb3VuZGluZ0JveFVuaXRzID8gYm91bmRpbmdCb3gueCArIGJvdW5kaW5nQm94LndpZHRoICogdGhpcy5nZXRBdHRyaWJ1dGUoJ3gxJykuZ2V0TnVtYmVyKCkgOiB0aGlzLmdldEF0dHJpYnV0ZSgneDEnKS5nZXRQaXhlbHMoJ3gnKTtcbiAgICAgICAgY29uc3QgeTEgPSBpc0JvdW5kaW5nQm94VW5pdHMgPyBib3VuZGluZ0JveC55ICsgYm91bmRpbmdCb3guaGVpZ2h0ICogdGhpcy5nZXRBdHRyaWJ1dGUoJ3kxJykuZ2V0TnVtYmVyKCkgOiB0aGlzLmdldEF0dHJpYnV0ZSgneTEnKS5nZXRQaXhlbHMoJ3knKTtcbiAgICAgICAgY29uc3QgeDIgPSBpc0JvdW5kaW5nQm94VW5pdHMgPyBib3VuZGluZ0JveC54ICsgYm91bmRpbmdCb3gud2lkdGggKiB0aGlzLmdldEF0dHJpYnV0ZSgneDInKS5nZXROdW1iZXIoKSA6IHRoaXMuZ2V0QXR0cmlidXRlKCd4MicpLmdldFBpeGVscygneCcpO1xuICAgICAgICBjb25zdCB5MiA9IGlzQm91bmRpbmdCb3hVbml0cyA/IGJvdW5kaW5nQm94LnkgKyBib3VuZGluZ0JveC5oZWlnaHQgKiB0aGlzLmdldEF0dHJpYnV0ZSgneTInKS5nZXROdW1iZXIoKSA6IHRoaXMuZ2V0QXR0cmlidXRlKCd5MicpLmdldFBpeGVscygneScpO1xuICAgICAgICBpZiAoeDEgPT09IHgyICYmIHkxID09PSB5Mikge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGN0eC5jcmVhdGVMaW5lYXJHcmFkaWVudCh4MSwgeTEsIHgyLCB5Mik7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKGRvY3VtZW50LCBub2RlLCBjYXB0dXJlVGV4dE5vZGVzKXtcbiAgICAgICAgc3VwZXIoZG9jdW1lbnQsIG5vZGUsIGNhcHR1cmVUZXh0Tm9kZXMpO1xuICAgICAgICB0aGlzLnR5cGUgPSAnbGluZWFyR3JhZGllbnQnO1xuICAgICAgICB0aGlzLmF0dHJpYnV0ZXNUb0luaGVyaXQucHVzaCgneDEnLCAneTEnLCAneDInLCAneTInKTtcbiAgICB9XG59XG5cbmNsYXNzIFJhZGlhbEdyYWRpZW50RWxlbWVudCBleHRlbmRzIEdyYWRpZW50RWxlbWVudCB7XG4gICAgZ2V0R3JhZGllbnQoY3R4LCBlbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IGlzQm91bmRpbmdCb3hVbml0cyA9IHRoaXMuZ2V0R3JhZGllbnRVbml0cygpID09PSAnb2JqZWN0Qm91bmRpbmdCb3gnO1xuICAgICAgICBjb25zdCBib3VuZGluZ0JveCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdCb3goY3R4KTtcbiAgICAgICAgaWYgKGlzQm91bmRpbmdCb3hVbml0cyAmJiAhYm91bmRpbmdCb3gpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5nZXRBdHRyaWJ1dGUoJ2N4JykuaGFzVmFsdWUoKSkge1xuICAgICAgICAgICAgdGhpcy5nZXRBdHRyaWJ1dGUoJ2N4JywgdHJ1ZSkuc2V0VmFsdWUoJzUwJScpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5nZXRBdHRyaWJ1dGUoJ2N5JykuaGFzVmFsdWUoKSkge1xuICAgICAgICAgICAgdGhpcy5nZXRBdHRyaWJ1dGUoJ2N5JywgdHJ1ZSkuc2V0VmFsdWUoJzUwJScpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5nZXRBdHRyaWJ1dGUoJ3InKS5oYXNWYWx1ZSgpKSB7XG4gICAgICAgICAgICB0aGlzLmdldEF0dHJpYnV0ZSgncicsIHRydWUpLnNldFZhbHVlKCc1MCUnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjeCA9IGlzQm91bmRpbmdCb3hVbml0cyA/IGJvdW5kaW5nQm94LnggKyBib3VuZGluZ0JveC53aWR0aCAqIHRoaXMuZ2V0QXR0cmlidXRlKCdjeCcpLmdldE51bWJlcigpIDogdGhpcy5nZXRBdHRyaWJ1dGUoJ2N4JykuZ2V0UGl4ZWxzKCd4Jyk7XG4gICAgICAgIGNvbnN0IGN5ID0gaXNCb3VuZGluZ0JveFVuaXRzID8gYm91bmRpbmdCb3gueSArIGJvdW5kaW5nQm94LmhlaWdodCAqIHRoaXMuZ2V0QXR0cmlidXRlKCdjeScpLmdldE51bWJlcigpIDogdGhpcy5nZXRBdHRyaWJ1dGUoJ2N5JykuZ2V0UGl4ZWxzKCd5Jyk7XG4gICAgICAgIGxldCBmeCA9IGN4O1xuICAgICAgICBsZXQgZnkgPSBjeTtcbiAgICAgICAgaWYgKHRoaXMuZ2V0QXR0cmlidXRlKCdmeCcpLmhhc1ZhbHVlKCkpIHtcbiAgICAgICAgICAgIGZ4ID0gaXNCb3VuZGluZ0JveFVuaXRzID8gYm91bmRpbmdCb3gueCArIGJvdW5kaW5nQm94LndpZHRoICogdGhpcy5nZXRBdHRyaWJ1dGUoJ2Z4JykuZ2V0TnVtYmVyKCkgOiB0aGlzLmdldEF0dHJpYnV0ZSgnZngnKS5nZXRQaXhlbHMoJ3gnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5nZXRBdHRyaWJ1dGUoJ2Z5JykuaGFzVmFsdWUoKSkge1xuICAgICAgICAgICAgZnkgPSBpc0JvdW5kaW5nQm94VW5pdHMgPyBib3VuZGluZ0JveC55ICsgYm91bmRpbmdCb3guaGVpZ2h0ICogdGhpcy5nZXRBdHRyaWJ1dGUoJ2Z5JykuZ2V0TnVtYmVyKCkgOiB0aGlzLmdldEF0dHJpYnV0ZSgnZnknKS5nZXRQaXhlbHMoJ3knKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByID0gaXNCb3VuZGluZ0JveFVuaXRzID8gKGJvdW5kaW5nQm94LndpZHRoICsgYm91bmRpbmdCb3guaGVpZ2h0KSAvIDIgKiB0aGlzLmdldEF0dHJpYnV0ZSgncicpLmdldE51bWJlcigpIDogdGhpcy5nZXRBdHRyaWJ1dGUoJ3InKS5nZXRQaXhlbHMoKTtcbiAgICAgICAgY29uc3QgZnIgPSB0aGlzLmdldEF0dHJpYnV0ZSgnZnInKS5nZXRQaXhlbHMoKTtcbiAgICAgICAgcmV0dXJuIGN0eC5jcmVhdGVSYWRpYWxHcmFkaWVudChmeCwgZnksIGZyLCBjeCwgY3ksIHIpO1xuICAgIH1cbiAgICBjb25zdHJ1Y3Rvcihkb2N1bWVudCwgbm9kZSwgY2FwdHVyZVRleHROb2Rlcyl7XG4gICAgICAgIHN1cGVyKGRvY3VtZW50LCBub2RlLCBjYXB0dXJlVGV4dE5vZGVzKTtcbiAgICAgICAgdGhpcy50eXBlID0gJ3JhZGlhbEdyYWRpZW50JztcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzVG9Jbmhlcml0LnB1c2goJ2N4JywgJ2N5JywgJ3InLCAnZngnLCAnZnknLCAnZnInKTtcbiAgICB9XG59XG5cbmNsYXNzIFN0b3BFbGVtZW50IGV4dGVuZHMgRWxlbWVudCB7XG4gICAgY29uc3RydWN0b3IoZG9jdW1lbnQsIG5vZGUsIGNhcHR1cmVUZXh0Tm9kZXMpe1xuICAgICAgICBzdXBlcihkb2N1bWVudCwgbm9kZSwgY2FwdHVyZVRleHROb2Rlcyk7XG4gICAgICAgIHRoaXMudHlwZSA9ICdzdG9wJztcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgdGhpcy5nZXRBdHRyaWJ1dGUoJ29mZnNldCcpLmdldE51bWJlcigpKSk7XG4gICAgICAgIGNvbnN0IHN0b3BPcGFjaXR5ID0gdGhpcy5nZXRTdHlsZSgnc3RvcC1vcGFjaXR5Jyk7XG4gICAgICAgIGxldCBzdG9wQ29sb3IgPSB0aGlzLmdldFN0eWxlKCdzdG9wLWNvbG9yJywgdHJ1ZSk7XG4gICAgICAgIGlmIChzdG9wQ29sb3IuZ2V0U3RyaW5nKCkgPT09ICcnKSB7XG4gICAgICAgICAgICBzdG9wQ29sb3Iuc2V0VmFsdWUoJyMwMDAnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RvcE9wYWNpdHkuaGFzVmFsdWUoKSkge1xuICAgICAgICAgICAgc3RvcENvbG9yID0gc3RvcENvbG9yLmFkZE9wYWNpdHkoc3RvcE9wYWNpdHkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub2Zmc2V0ID0gb2Zmc2V0O1xuICAgICAgICB0aGlzLmNvbG9yID0gc3RvcENvbG9yLmdldENvbG9yKCk7XG4gICAgfVxufVxuXG5jbGFzcyBBbmltYXRlRWxlbWVudCBleHRlbmRzIEVsZW1lbnQge1xuICAgIGdldFByb3BlcnR5KCkge1xuICAgICAgICBjb25zdCBhdHRyaWJ1dGVUeXBlID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ2F0dHJpYnV0ZVR5cGUnKS5nZXRTdHJpbmcoKTtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlTmFtZSA9IHRoaXMuZ2V0QXR0cmlidXRlKCdhdHRyaWJ1dGVOYW1lJykuZ2V0U3RyaW5nKCk7XG4gICAgICAgIGlmIChhdHRyaWJ1dGVUeXBlID09PSAnQ1NTJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50LmdldFN0eWxlKGF0dHJpYnV0ZU5hbWUsIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudC5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSwgdHJ1ZSk7XG4gICAgfVxuICAgIGNhbGNWYWx1ZSgpIHtcbiAgICAgICAgY29uc3QgeyBpbml0aWFsVW5pdHMgIH0gPSB0aGlzO1xuICAgICAgICBjb25zdCB7IHByb2dyZXNzICwgZnJvbSAsIHRvICB9ID0gdGhpcy5nZXRQcm9ncmVzcygpO1xuICAgICAgICAvLyB0d2VlbiB2YWx1ZSBsaW5lYXJseVxuICAgICAgICBsZXQgbmV3VmFsdWUgPSBmcm9tLmdldE51bWJlcigpICsgKHRvLmdldE51bWJlcigpIC0gZnJvbS5nZXROdW1iZXIoKSkgKiBwcm9ncmVzcztcbiAgICAgICAgaWYgKGluaXRpYWxVbml0cyA9PT0gJyUnKSB7XG4gICAgICAgICAgICBuZXdWYWx1ZSAqPSAxMDAgLy8gbnVtVmFsdWUoKSByZXR1cm5zIDAtMSB3aGVyZWFzIHByb3BlcnRpZXMgYXJlIDAtMTAwXG4gICAgICAgICAgICA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFwiXCIuY29uY2F0KG5ld1ZhbHVlKS5jb25jYXQoaW5pdGlhbFVuaXRzKTtcbiAgICB9XG4gICAgdXBkYXRlKGRlbHRhKSB7XG4gICAgICAgIGNvbnN0IHsgcGFyZW50ICB9ID0gdGhpcztcbiAgICAgICAgY29uc3QgcHJvcCA9IHRoaXMuZ2V0UHJvcGVydHkoKTtcbiAgICAgICAgLy8gc2V0IGluaXRpYWwgdmFsdWVcbiAgICAgICAgaWYgKCF0aGlzLmluaXRpYWxWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5pbml0aWFsVmFsdWUgPSBwcm9wLmdldFN0cmluZygpO1xuICAgICAgICAgICAgdGhpcy5pbml0aWFsVW5pdHMgPSBwcm9wLmdldFVuaXRzKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgd2UncmUgcGFzdCB0aGUgZW5kIHRpbWVcbiAgICAgICAgaWYgKHRoaXMuZHVyYXRpb24gPiB0aGlzLm1heER1cmF0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCBmaWxsID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ2ZpbGwnKS5nZXRTdHJpbmcoJ3JlbW92ZScpO1xuICAgICAgICAgICAgLy8gbG9vcCBmb3IgaW5kZWZpbml0ZWx5IHJlcGVhdGluZyBhbmltYXRpb25zXG4gICAgICAgICAgICBpZiAodGhpcy5nZXRBdHRyaWJ1dGUoJ3JlcGVhdENvdW50JykuZ2V0U3RyaW5nKCkgPT09ICdpbmRlZmluaXRlJyB8fCB0aGlzLmdldEF0dHJpYnV0ZSgncmVwZWF0RHVyJykuZ2V0U3RyaW5nKCkgPT09ICdpbmRlZmluaXRlJykge1xuICAgICAgICAgICAgICAgIHRoaXMuZHVyYXRpb24gPSAwO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChmaWxsID09PSAnZnJlZXplJyAmJiAhdGhpcy5mcm96ZW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZyb3plbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudCAmJiBwcm9wKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudC5hbmltYXRpb25Gcm96ZW4gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBwYXJlbnQuYW5pbWF0aW9uRnJvemVuVmFsdWUgPSBwcm9wLmdldFN0cmluZygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZmlsbCA9PT0gJ3JlbW92ZScgJiYgIXRoaXMucmVtb3ZlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudCAmJiBwcm9wKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb3Auc2V0VmFsdWUocGFyZW50LmFuaW1hdGlvbkZyb3plbiA/IHBhcmVudC5hbmltYXRpb25Gcm96ZW5WYWx1ZSA6IHRoaXMuaW5pdGlhbFZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kdXJhdGlvbiArPSBkZWx0YTtcbiAgICAgICAgLy8gaWYgd2UncmUgcGFzdCB0aGUgYmVnaW4gdGltZVxuICAgICAgICBsZXQgdXBkYXRlZCA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5iZWdpbiA8IHRoaXMuZHVyYXRpb24pIHtcbiAgICAgICAgICAgIGxldCBuZXdWYWx1ZSA9IHRoaXMuY2FsY1ZhbHVlKCkgLy8gdHdlZW5cbiAgICAgICAgICAgIDtcbiAgICAgICAgICAgIGNvbnN0IHR5cGVBdHRyID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ3R5cGUnKTtcbiAgICAgICAgICAgIGlmICh0eXBlQXR0ci5oYXNWYWx1ZSgpKSB7XG4gICAgICAgICAgICAgICAgLy8gZm9yIHRyYW5zZm9ybSwgZXRjLlxuICAgICAgICAgICAgICAgIGNvbnN0IHR5cGUgPSB0eXBlQXR0ci5nZXRTdHJpbmcoKTtcbiAgICAgICAgICAgICAgICBuZXdWYWx1ZSA9IFwiXCIuY29uY2F0KHR5cGUsIFwiKFwiKS5jb25jYXQobmV3VmFsdWUsIFwiKVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHByb3Auc2V0VmFsdWUobmV3VmFsdWUpO1xuICAgICAgICAgICAgdXBkYXRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVwZGF0ZWQ7XG4gICAgfVxuICAgIGdldFByb2dyZXNzKCkge1xuICAgICAgICBjb25zdCB7IGRvY3VtZW50ICwgdmFsdWVzICB9ID0gdGhpcztcbiAgICAgICAgbGV0IHByb2dyZXNzID0gKHRoaXMuZHVyYXRpb24gLSB0aGlzLmJlZ2luKSAvICh0aGlzLm1heER1cmF0aW9uIC0gdGhpcy5iZWdpbik7XG4gICAgICAgIGxldCBmcm9tO1xuICAgICAgICBsZXQgdG87XG4gICAgICAgIGlmICh2YWx1ZXMuaGFzVmFsdWUoKSkge1xuICAgICAgICAgICAgY29uc3QgcCA9IHByb2dyZXNzICogKHZhbHVlcy5nZXRWYWx1ZSgpLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgY29uc3QgbGIgPSBNYXRoLmZsb29yKHApO1xuICAgICAgICAgICAgY29uc3QgdWIgPSBNYXRoLmNlaWwocCk7XG4gICAgICAgICAgICBsZXQgdmFsdWU7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlcy5nZXRWYWx1ZSgpW2xiXTtcbiAgICAgICAgICAgIGZyb20gPSBuZXcgUHJvcGVydHkoZG9jdW1lbnQsICdmcm9tJywgdmFsdWUgPyBwYXJzZUZsb2F0KHZhbHVlKSA6IDApO1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZXMuZ2V0VmFsdWUoKVt1Yl07XG4gICAgICAgICAgICB0byA9IG5ldyBQcm9wZXJ0eShkb2N1bWVudCwgJ3RvJywgdmFsdWUgPyBwYXJzZUZsb2F0KHZhbHVlKSA6IDApO1xuICAgICAgICAgICAgcHJvZ3Jlc3MgPSAocCAtIGxiKSAvICh1YiAtIGxiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZyb20gPSB0aGlzLmZyb207XG4gICAgICAgICAgICB0byA9IHRoaXMudG87XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHByb2dyZXNzLFxuICAgICAgICAgICAgZnJvbSxcbiAgICAgICAgICAgIHRvXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKGRvY3VtZW50LCBub2RlLCBjYXB0dXJlVGV4dE5vZGVzKXtcbiAgICAgICAgc3VwZXIoZG9jdW1lbnQsIG5vZGUsIGNhcHR1cmVUZXh0Tm9kZXMpO1xuICAgICAgICB0aGlzLnR5cGUgPSAnYW5pbWF0ZSc7XG4gICAgICAgIHRoaXMuZHVyYXRpb24gPSAwO1xuICAgICAgICB0aGlzLmluaXRpYWxVbml0cyA9ICcnO1xuICAgICAgICB0aGlzLnJlbW92ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5mcm96ZW4gPSBmYWxzZTtcbiAgICAgICAgZG9jdW1lbnQuc2NyZWVuLmFuaW1hdGlvbnMucHVzaCh0aGlzKTtcbiAgICAgICAgdGhpcy5iZWdpbiA9IHRoaXMuZ2V0QXR0cmlidXRlKCdiZWdpbicpLmdldE1pbGxpc2Vjb25kcygpO1xuICAgICAgICB0aGlzLm1heER1cmF0aW9uID0gdGhpcy5iZWdpbiArIHRoaXMuZ2V0QXR0cmlidXRlKCdkdXInKS5nZXRNaWxsaXNlY29uZHMoKTtcbiAgICAgICAgdGhpcy5mcm9tID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ2Zyb20nKTtcbiAgICAgICAgdGhpcy50byA9IHRoaXMuZ2V0QXR0cmlidXRlKCd0bycpO1xuICAgICAgICB0aGlzLnZhbHVlcyA9IG5ldyBQcm9wZXJ0eShkb2N1bWVudCwgJ3ZhbHVlcycsIG51bGwpO1xuICAgICAgICBjb25zdCB2YWx1ZXNBdHRyID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ3ZhbHVlcycpO1xuICAgICAgICBpZiAodmFsdWVzQXR0ci5oYXNWYWx1ZSgpKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlcy5zZXRWYWx1ZSh2YWx1ZXNBdHRyLmdldFN0cmluZygpLnNwbGl0KCc7JykpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBBbmltYXRlQ29sb3JFbGVtZW50IGV4dGVuZHMgQW5pbWF0ZUVsZW1lbnQge1xuICAgIGNhbGNWYWx1ZSgpIHtcbiAgICAgICAgY29uc3QgeyBwcm9ncmVzcyAsIGZyb20gLCB0byAgfSA9IHRoaXMuZ2V0UHJvZ3Jlc3MoKTtcbiAgICAgICAgY29uc3QgY29sb3JGcm9tID0gbmV3IFJHQkNvbG9yKGZyb20uZ2V0Q29sb3IoKSk7XG4gICAgICAgIGNvbnN0IGNvbG9yVG8gPSBuZXcgUkdCQ29sb3IodG8uZ2V0Q29sb3IoKSk7XG4gICAgICAgIGlmIChjb2xvckZyb20ub2sgJiYgY29sb3JUby5vaykge1xuICAgICAgICAgICAgLy8gdHdlZW4gY29sb3IgbGluZWFybHlcbiAgICAgICAgICAgIGNvbnN0IHIgPSBjb2xvckZyb20uciArIChjb2xvclRvLnIgLSBjb2xvckZyb20ucikgKiBwcm9ncmVzcztcbiAgICAgICAgICAgIGNvbnN0IGcgPSBjb2xvckZyb20uZyArIChjb2xvclRvLmcgLSBjb2xvckZyb20uZykgKiBwcm9ncmVzcztcbiAgICAgICAgICAgIGNvbnN0IGIgPSBjb2xvckZyb20uYiArIChjb2xvclRvLmIgLSBjb2xvckZyb20uYikgKiBwcm9ncmVzcztcbiAgICAgICAgICAgIC8vID8gYWxwaGFcbiAgICAgICAgICAgIHJldHVybiBcInJnYihcIi5jb25jYXQoTWF0aC5mbG9vcihyKSwgXCIsIFwiKS5jb25jYXQoTWF0aC5mbG9vcihnKSwgXCIsIFwiKS5jb25jYXQoTWF0aC5mbG9vcihiKSwgXCIpXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZSgnZnJvbScpLmdldENvbG9yKCk7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKC4uLmFyZ3Mpe1xuICAgICAgICBzdXBlciguLi5hcmdzKTtcbiAgICAgICAgdGhpcy50eXBlID0gJ2FuaW1hdGVDb2xvcic7XG4gICAgfVxufVxuXG5jbGFzcyBBbmltYXRlVHJhbnNmb3JtRWxlbWVudCBleHRlbmRzIEFuaW1hdGVFbGVtZW50IHtcbiAgICBjYWxjVmFsdWUoKSB7XG4gICAgICAgIGNvbnN0IHsgcHJvZ3Jlc3MgLCBmcm9tOiBmcm9tMSAsIHRvOiB0bzEgIH0gPSB0aGlzLmdldFByb2dyZXNzKCk7XG4gICAgICAgIC8vIHR3ZWVuIHZhbHVlIGxpbmVhcmx5XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybUZyb20gPSB0b051bWJlcnMoZnJvbTEuZ2V0U3RyaW5nKCkpO1xuICAgICAgICBjb25zdCB0cmFuc2Zvcm1UbyA9IHRvTnVtYmVycyh0bzEuZ2V0U3RyaW5nKCkpO1xuICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IHRyYW5zZm9ybUZyb20ubWFwKChmcm9tLCBpKT0+e1xuICAgICAgICAgICAgY29uc3QgdG8gPSB0cmFuc2Zvcm1Ub1tpXTtcbiAgICAgICAgICAgIHJldHVybiBmcm9tICsgKHRvIC0gZnJvbSkgKiBwcm9ncmVzcztcbiAgICAgICAgfSkuam9pbignICcpO1xuICAgICAgICByZXR1cm4gbmV3VmFsdWU7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKC4uLmFyZ3Mpe1xuICAgICAgICBzdXBlciguLi5hcmdzKTtcbiAgICAgICAgdGhpcy50eXBlID0gJ2FuaW1hdGVUcmFuc2Zvcm0nO1xuICAgIH1cbn1cblxuY2xhc3MgRm9udEZhY2VFbGVtZW50IGV4dGVuZHMgRWxlbWVudCB7XG4gICAgY29uc3RydWN0b3IoZG9jdW1lbnQsIG5vZGUsIGNhcHR1cmVUZXh0Tm9kZXMpe1xuICAgICAgICBzdXBlcihkb2N1bWVudCwgbm9kZSwgY2FwdHVyZVRleHROb2Rlcyk7XG4gICAgICAgIHRoaXMudHlwZSA9ICdmb250LWZhY2UnO1xuICAgICAgICB0aGlzLmFzY2VudCA9IHRoaXMuZ2V0QXR0cmlidXRlKCdhc2NlbnQnKS5nZXROdW1iZXIoKTtcbiAgICAgICAgdGhpcy5kZXNjZW50ID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ2Rlc2NlbnQnKS5nZXROdW1iZXIoKTtcbiAgICAgICAgdGhpcy51bml0c1BlckVtID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ3VuaXRzLXBlci1lbScpLmdldE51bWJlcigpO1xuICAgIH1cbn1cblxuY2xhc3MgR2x5cGhFbGVtZW50IGV4dGVuZHMgUGF0aEVsZW1lbnQge1xuICAgIGNvbnN0cnVjdG9yKGRvY3VtZW50LCBub2RlLCBjYXB0dXJlVGV4dE5vZGVzKXtcbiAgICAgICAgc3VwZXIoZG9jdW1lbnQsIG5vZGUsIGNhcHR1cmVUZXh0Tm9kZXMpO1xuICAgICAgICB0aGlzLnR5cGUgPSAnZ2x5cGgnO1xuICAgICAgICB0aGlzLmhvcml6QWR2WCA9IHRoaXMuZ2V0QXR0cmlidXRlKCdob3Jpei1hZHYteCcpLmdldE51bWJlcigpO1xuICAgICAgICB0aGlzLnVuaWNvZGUgPSB0aGlzLmdldEF0dHJpYnV0ZSgndW5pY29kZScpLmdldFN0cmluZygpO1xuICAgICAgICB0aGlzLmFyYWJpY0Zvcm0gPSB0aGlzLmdldEF0dHJpYnV0ZSgnYXJhYmljLWZvcm0nKS5nZXRTdHJpbmcoKTtcbiAgICB9XG59XG5cbmNsYXNzIE1pc3NpbmdHbHlwaEVsZW1lbnQgZXh0ZW5kcyBHbHlwaEVsZW1lbnQge1xuICAgIGNvbnN0cnVjdG9yKC4uLmFyZ3Mpe1xuICAgICAgICBzdXBlciguLi5hcmdzKTtcbiAgICAgICAgdGhpcy50eXBlID0gJ21pc3NpbmctZ2x5cGgnO1xuICAgICAgICB0aGlzLmhvcml6QWR2WCA9IDA7XG4gICAgfVxufVxuXG5jbGFzcyBGb250RWxlbWVudCBleHRlbmRzIEVsZW1lbnQge1xuICAgIHJlbmRlcigpIHtcbiAgICAvLyBOTyBSRU5ERVJcbiAgICB9XG4gICAgY29uc3RydWN0b3IoZG9jdW1lbnQsIG5vZGUsIGNhcHR1cmVUZXh0Tm9kZXMpe1xuICAgICAgICBzdXBlcihkb2N1bWVudCwgbm9kZSwgY2FwdHVyZVRleHROb2Rlcyk7XG4gICAgICAgIHRoaXMudHlwZSA9ICdmb250JztcbiAgICAgICAgdGhpcy5pc0FyYWJpYyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmdseXBocyA9IHt9O1xuICAgICAgICB0aGlzLmFyYWJpY0dseXBocyA9IHt9O1xuICAgICAgICB0aGlzLmlzUlRMID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaG9yaXpBZHZYID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ2hvcml6LWFkdi14JykuZ2V0TnVtYmVyKCk7XG4gICAgICAgIGNvbnN0IHsgZGVmaW5pdGlvbnMgIH0gPSBkb2N1bWVudDtcbiAgICAgICAgY29uc3QgeyBjaGlsZHJlbiAgfSA9IHRoaXM7XG4gICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pe1xuICAgICAgICAgICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgRm9udEZhY2VFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb250RmFjZSA9IGNoaWxkO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvbnRGYW1pbHlTdHlsZSA9IGNoaWxkLmdldFN0eWxlKCdmb250LWZhbWlseScpO1xuICAgICAgICAgICAgICAgIGlmIChmb250RmFtaWx5U3R5bGUuaGFzVmFsdWUoKSkge1xuICAgICAgICAgICAgICAgICAgICBkZWZpbml0aW9uc1tmb250RmFtaWx5U3R5bGUuZ2V0U3RyaW5nKCldID0gdGhpcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNoaWxkIGluc3RhbmNlb2YgTWlzc2luZ0dseXBoRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMubWlzc2luZ0dseXBoID0gY2hpbGQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNoaWxkIGluc3RhbmNlb2YgR2x5cGhFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkLmFyYWJpY0Zvcm0pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1JUTCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNBcmFiaWMgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhcmFiaWNHbHlwaCA9IHRoaXMuYXJhYmljR2x5cGhzW2NoaWxkLnVuaWNvZGVdO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFyYWJpY0dseXBoID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hcmFiaWNHbHlwaHNbY2hpbGQudW5pY29kZV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoaWxkLmFyYWJpY0Zvcm1dOiBjaGlsZFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyYWJpY0dseXBoW2NoaWxkLmFyYWJpY0Zvcm1dID0gY2hpbGQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdseXBoc1tjaGlsZC51bmljb2RlXSA9IGNoaWxkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgVFJlZkVsZW1lbnQgZXh0ZW5kcyBUZXh0RWxlbWVudCB7XG4gICAgZ2V0VGV4dCgpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZ2V0SHJlZkF0dHJpYnV0ZSgpLmdldERlZmluaXRpb24oKTtcbiAgICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0Q2hpbGQgPSBlbGVtZW50LmNoaWxkcmVuWzBdO1xuICAgICAgICAgICAgaWYgKGZpcnN0Q2hpbGQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmlyc3RDaGlsZC5nZXRUZXh0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvciguLi5hcmdzKXtcbiAgICAgICAgc3VwZXIoLi4uYXJncyk7XG4gICAgICAgIHRoaXMudHlwZSA9ICd0cmVmJztcbiAgICB9XG59XG5cbmNsYXNzIEFFbGVtZW50IGV4dGVuZHMgVGV4dEVsZW1lbnQge1xuICAgIGdldFRleHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHQ7XG4gICAgfVxuICAgIHJlbmRlckNoaWxkcmVuKGN0eCkge1xuICAgICAgICBpZiAodGhpcy5oYXNUZXh0KSB7XG4gICAgICAgICAgICAvLyByZW5kZXIgYXMgdGV4dCBlbGVtZW50XG4gICAgICAgICAgICBzdXBlci5yZW5kZXJDaGlsZHJlbihjdHgpO1xuICAgICAgICAgICAgY29uc3QgeyBkb2N1bWVudCAsIHggLCB5ICB9ID0gdGhpcztcbiAgICAgICAgICAgIGNvbnN0IHsgbW91c2UgIH0gPSBkb2N1bWVudC5zY3JlZW47XG4gICAgICAgICAgICBjb25zdCBmb250U2l6ZSA9IG5ldyBQcm9wZXJ0eShkb2N1bWVudCwgJ2ZvbnRTaXplJywgRm9udC5wYXJzZShkb2N1bWVudC5jdHguZm9udCkuZm9udFNpemUpO1xuICAgICAgICAgICAgLy8gRG8gbm90IGNhbGMgYm91bmRpbmcgYm94IGlmIG1vdXNlIGlzIG5vdCB3b3JraW5nLlxuICAgICAgICAgICAgaWYgKG1vdXNlLmlzV29ya2luZygpKSB7XG4gICAgICAgICAgICAgICAgbW91c2UuY2hlY2tCb3VuZGluZ0JveCh0aGlzLCBuZXcgQm91bmRpbmdCb3goeCwgeSAtIGZvbnRTaXplLmdldFBpeGVscygneScpLCB4ICsgdGhpcy5tZWFzdXJlVGV4dChjdHgpLCB5KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAvLyByZW5kZXIgYXMgdGVtcG9yYXJ5IGdyb3VwXG4gICAgICAgICAgICBjb25zdCBnID0gbmV3IEdFbGVtZW50KHRoaXMuZG9jdW1lbnQpO1xuICAgICAgICAgICAgZy5jaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW47XG4gICAgICAgICAgICBnLnBhcmVudCA9IHRoaXM7XG4gICAgICAgICAgICBnLnJlbmRlcihjdHgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIG9uQ2xpY2soKSB7XG4gICAgICAgIGNvbnN0IHsgd2luZG93ICB9ID0gdGhpcy5kb2N1bWVudDtcbiAgICAgICAgaWYgKHdpbmRvdykge1xuICAgICAgICAgICAgd2luZG93Lm9wZW4odGhpcy5nZXRIcmVmQXR0cmlidXRlKCkuZ2V0U3RyaW5nKCkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIG9uTW91c2VNb3ZlKCkge1xuICAgICAgICBjb25zdCBjdHggPSB0aGlzLmRvY3VtZW50LmN0eDtcbiAgICAgICAgY3R4LmNhbnZhcy5zdHlsZS5jdXJzb3IgPSAncG9pbnRlcic7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKGRvY3VtZW50LCBub2RlMSwgY2FwdHVyZVRleHROb2Rlcyl7XG4gICAgICAgIHN1cGVyKGRvY3VtZW50LCBub2RlMSwgY2FwdHVyZVRleHROb2Rlcyk7XG4gICAgICAgIHRoaXMudHlwZSA9ICdhJztcbiAgICAgICAgY29uc3QgeyBjaGlsZE5vZGVzICB9ID0gbm9kZTE7XG4gICAgICAgIGNvbnN0IGZpcnN0Q2hpbGQgPSBjaGlsZE5vZGVzWzBdO1xuICAgICAgICBjb25zdCBoYXNUZXh0ID0gY2hpbGROb2Rlcy5sZW5ndGggPiAwICYmIEFycmF5LmZyb20oY2hpbGROb2RlcykuZXZlcnkoKG5vZGUpPT5ub2RlLm5vZGVUeXBlID09PSAzXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuaGFzVGV4dCA9IGhhc1RleHQ7XG4gICAgICAgIHRoaXMudGV4dCA9IGhhc1RleHQgPyB0aGlzLmdldFRleHRGcm9tTm9kZShmaXJzdENoaWxkKSA6ICcnO1xuICAgIH1cbn1cblxuY2xhc3MgVGV4dFBhdGhFbGVtZW50IGV4dGVuZHMgVGV4dEVsZW1lbnQge1xuICAgIGdldFRleHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHQ7XG4gICAgfVxuICAgIHBhdGgoY3R4KSB7XG4gICAgICAgIGNvbnN0IHsgZGF0YUFycmF5ICB9ID0gdGhpcztcbiAgICAgICAgaWYgKGN0eCkge1xuICAgICAgICAgICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgICB9XG4gICAgICAgIGRhdGFBcnJheS5mb3JFYWNoKChwYXJhbSk9PntcbiAgICAgICAgICAgIGxldCB7IHR5cGUgLCBwb2ludHMgIH0gPSBwYXJhbTtcbiAgICAgICAgICAgIHN3aXRjaCh0eXBlKXtcbiAgICAgICAgICAgICAgICBjYXNlIFBhdGhQYXJzZXIuTElORV9UTzpcbiAgICAgICAgICAgICAgICAgICAgaWYgKGN0eCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmxpbmVUbyhwb2ludHNbMF0sIHBvaW50c1sxXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBQYXRoUGFyc2VyLk1PVkVfVE86XG4gICAgICAgICAgICAgICAgICAgIGlmIChjdHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5tb3ZlVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgUGF0aFBhcnNlci5DVVJWRV9UTzpcbiAgICAgICAgICAgICAgICAgICAgaWYgKGN0eCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmJlemllckN1cnZlVG8ocG9pbnRzWzBdLCBwb2ludHNbMV0sIHBvaW50c1syXSwgcG9pbnRzWzNdLCBwb2ludHNbNF0sIHBvaW50c1s1XSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBQYXRoUGFyc2VyLlFVQURfVE86XG4gICAgICAgICAgICAgICAgICAgIGlmIChjdHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5xdWFkcmF0aWNDdXJ2ZVRvKHBvaW50c1swXSwgcG9pbnRzWzFdLCBwb2ludHNbMl0sIHBvaW50c1szXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBQYXRoUGFyc2VyLkFSQzpcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgW2N4LCBjeSwgcngsIHJ5LCB0aGV0YSwgZFRoZXRhLCBwc2ksIGZzXSA9IHBvaW50cztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHIgPSByeCA+IHJ5ID8gcnggOiByeTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNjYWxlWCA9IHJ4ID4gcnkgPyAxIDogcnggLyByeTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNjYWxlWSA9IHJ4ID4gcnkgPyByeSAvIHJ4IDogMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgudHJhbnNsYXRlKGN4LCBjeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnJvdGF0ZShwc2kpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5zY2FsZShzY2FsZVgsIHNjYWxlWSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmFyYygwLCAwLCByLCB0aGV0YSwgdGhldGEgKyBkVGhldGEsIEJvb2xlYW4oMSAtIGZzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnNjYWxlKDEgLyBzY2FsZVgsIDEgLyBzY2FsZVkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5yb3RhdGUoLXBzaSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnRyYW5zbGF0ZSgtY3gsIC1jeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgUGF0aFBhcnNlci5DTE9TRV9QQVRIOlxuICAgICAgICAgICAgICAgICAgICBpZiAoY3R4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdHguY2xvc2VQYXRoKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZW5kZXJDaGlsZHJlbihjdHgpIHtcbiAgICAgICAgdGhpcy5zZXRUZXh0RGF0YShjdHgpO1xuICAgICAgICBjdHguc2F2ZSgpO1xuICAgICAgICBjb25zdCB0ZXh0RGVjb3JhdGlvbiA9IHRoaXMucGFyZW50LmdldFN0eWxlKCd0ZXh0LWRlY29yYXRpb24nKS5nZXRTdHJpbmcoKTtcbiAgICAgICAgY29uc3QgZm9udFNpemUgPSB0aGlzLmdldEZvbnRTaXplKCk7XG4gICAgICAgIGNvbnN0IHsgZ2x5cGhJbmZvICB9ID0gdGhpcztcbiAgICAgICAgY29uc3QgZmlsbCA9IGN0eC5maWxsU3R5bGU7XG4gICAgICAgIGlmICh0ZXh0RGVjb3JhdGlvbiA9PT0gJ3VuZGVybGluZScpIHtcbiAgICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICAgICAgfVxuICAgICAgICBnbHlwaEluZm8uZm9yRWFjaCgoZ2x5cGgsIGkpPT57XG4gICAgICAgICAgICBjb25zdCB7IHAwICwgcDEgLCByb3RhdGlvbiAsIHRleHQ6IHBhcnRpYWxUZXh0ICB9ID0gZ2x5cGg7XG4gICAgICAgICAgICBjdHguc2F2ZSgpO1xuICAgICAgICAgICAgY3R4LnRyYW5zbGF0ZShwMC54LCBwMC55KTtcbiAgICAgICAgICAgIGN0eC5yb3RhdGUocm90YXRpb24pO1xuICAgICAgICAgICAgaWYgKGN0eC5maWxsU3R5bGUpIHtcbiAgICAgICAgICAgICAgICBjdHguZmlsbFRleHQocGFydGlhbFRleHQsIDAsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGN0eC5zdHJva2VTdHlsZSkge1xuICAgICAgICAgICAgICAgIGN0eC5zdHJva2VUZXh0KHBhcnRpYWxUZXh0LCAwLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgICAgICAgICBpZiAodGV4dERlY29yYXRpb24gPT09ICd1bmRlcmxpbmUnKSB7XG4gICAgICAgICAgICAgICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4Lm1vdmVUbyhwMC54LCBwMC55ICsgZm9udFNpemUgLyA4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY3R4LmxpbmVUbyhwMS54LCBwMS55ICsgZm9udFNpemUgLyA1KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgLy8gLy8gVG8gYXNzaXN0IHdpdGggZGVidWdnaW5nIHZpc3VhbGx5LCB1bmNvbW1lbnQgZm9sbG93aW5nXG4gICAgICAgIC8vXG4gICAgICAgIC8vIGN0eC5iZWdpblBhdGgoKTtcbiAgICAgICAgLy8gaWYgKGkgJSAyKVxuICAgICAgICAvLyAgIGN0eC5zdHJva2VTdHlsZSA9ICdyZWQnO1xuICAgICAgICAvLyBlbHNlXG4gICAgICAgIC8vICAgY3R4LnN0cm9rZVN0eWxlID0gJ2dyZWVuJztcbiAgICAgICAgLy8gY3R4Lm1vdmVUbyhwMC54LCBwMC55KTtcbiAgICAgICAgLy8gY3R4LmxpbmVUbyhwMS54LCBwMS55KTtcbiAgICAgICAgLy8gY3R4LnN0cm9rZSgpO1xuICAgICAgICAvLyBjdHguY2xvc2VQYXRoKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodGV4dERlY29yYXRpb24gPT09ICd1bmRlcmxpbmUnKSB7XG4gICAgICAgICAgICBjdHgubGluZVdpZHRoID0gZm9udFNpemUgLyAyMDtcbiAgICAgICAgICAgIGN0eC5zdHJva2VTdHlsZSA9IGZpbGw7XG4gICAgICAgICAgICBjdHguc3Ryb2tlKCk7XG4gICAgICAgICAgICBjdHguY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgY3R4LnJlc3RvcmUoKTtcbiAgICB9XG4gICAgZ2V0TGV0dGVyU3BhY2luZ0F0KCkge1xuICAgICAgICBsZXQgaWR4ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMF0gOiAwO1xuICAgICAgICByZXR1cm4gdGhpcy5sZXR0ZXJTcGFjaW5nQ2FjaGVbaWR4XSB8fCAwO1xuICAgIH1cbiAgICBmaW5kU2VnbWVudFRvRml0Q2hhcihjdHgsIGFuY2hvciwgdGV4dEZ1bGxXaWR0aCwgZnVsbFBhdGhXaWR0aCwgc3BhY2VzTnVtYmVyLCBpbnB1dE9mZnNldCwgZHksIGMsIGNoYXJJKSB7XG4gICAgICAgIGxldCBvZmZzZXQgPSBpbnB1dE9mZnNldDtcbiAgICAgICAgbGV0IGdseXBoV2lkdGggPSB0aGlzLm1lYXN1cmVUZXh0KGN0eCwgYyk7XG4gICAgICAgIGlmIChjID09PSAnICcgJiYgYW5jaG9yID09PSAnanVzdGlmeScgJiYgdGV4dEZ1bGxXaWR0aCA8IGZ1bGxQYXRoV2lkdGgpIHtcbiAgICAgICAgICAgIGdseXBoV2lkdGggKz0gKGZ1bGxQYXRoV2lkdGggLSB0ZXh0RnVsbFdpZHRoKSAvIHNwYWNlc051bWJlcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhckkgPiAtMSkge1xuICAgICAgICAgICAgb2Zmc2V0ICs9IHRoaXMuZ2V0TGV0dGVyU3BhY2luZ0F0KGNoYXJJKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzcGxpbmVTdGVwID0gdGhpcy50ZXh0SGVpZ2h0IC8gMjA7XG4gICAgICAgIGNvbnN0IHAwID0gdGhpcy5nZXRFcXVpZGlzdGFudFBvaW50T25QYXRoKG9mZnNldCwgc3BsaW5lU3RlcCwgMCk7XG4gICAgICAgIGNvbnN0IHAxID0gdGhpcy5nZXRFcXVpZGlzdGFudFBvaW50T25QYXRoKG9mZnNldCArIGdseXBoV2lkdGgsIHNwbGluZVN0ZXAsIDApO1xuICAgICAgICBjb25zdCBzZWdtZW50ID0ge1xuICAgICAgICAgICAgcDAsXG4gICAgICAgICAgICBwMVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCByb3RhdGlvbiA9IHAwICYmIHAxID8gTWF0aC5hdGFuMihwMS55IC0gcDAueSwgcDEueCAtIHAwLngpIDogMDtcbiAgICAgICAgaWYgKGR5KSB7XG4gICAgICAgICAgICBjb25zdCBkeVggPSBNYXRoLmNvcyhNYXRoLlBJIC8gMiArIHJvdGF0aW9uKSAqIGR5O1xuICAgICAgICAgICAgY29uc3QgZHlZID0gTWF0aC5jb3MoLXJvdGF0aW9uKSAqIGR5O1xuICAgICAgICAgICAgc2VnbWVudC5wMCA9IHtcbiAgICAgICAgICAgICAgICAuLi5wMCxcbiAgICAgICAgICAgICAgICB4OiBwMC54ICsgZHlYLFxuICAgICAgICAgICAgICAgIHk6IHAwLnkgKyBkeVlcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBzZWdtZW50LnAxID0ge1xuICAgICAgICAgICAgICAgIC4uLnAxLFxuICAgICAgICAgICAgICAgIHg6IHAxLnggKyBkeVgsXG4gICAgICAgICAgICAgICAgeTogcDEueSArIGR5WVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBvZmZzZXQgKz0gZ2x5cGhXaWR0aDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG9mZnNldCxcbiAgICAgICAgICAgIHNlZ21lbnQsXG4gICAgICAgICAgICByb3RhdGlvblxuICAgICAgICB9O1xuICAgIH1cbiAgICBtZWFzdXJlVGV4dChjdHgsIHRleHQpIHtcbiAgICAgICAgY29uc3QgeyBtZWFzdXJlc0NhY2hlICB9ID0gdGhpcztcbiAgICAgICAgY29uc3QgdGFyZ2V0VGV4dCA9IHRleHQgfHwgdGhpcy5nZXRUZXh0KCk7XG4gICAgICAgIGlmIChtZWFzdXJlc0NhY2hlLmhhcyh0YXJnZXRUZXh0KSkge1xuICAgICAgICAgICAgcmV0dXJuIG1lYXN1cmVzQ2FjaGUuZ2V0KHRhcmdldFRleHQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1lYXN1cmUgPSB0aGlzLm1lYXN1cmVUYXJnZXRUZXh0KGN0eCwgdGFyZ2V0VGV4dCk7XG4gICAgICAgIG1lYXN1cmVzQ2FjaGUuc2V0KHRhcmdldFRleHQsIG1lYXN1cmUpO1xuICAgICAgICByZXR1cm4gbWVhc3VyZTtcbiAgICB9XG4gICAgLy8gVGhpcyBtZXRob2Qgc3VwcG9zZXMgd2hhdCBhbGwgY3VzdG9tIGZvbnRzIGFscmVhZHkgbG9hZGVkLlxuICAgIC8vIElmIHNvbWUgZm9udCB3aWxsIGJlIGxvYWRlZCBhZnRlciB0aGlzIG1ldGhvZCBjYWxsLCA8dGV4dFBhdGg+IHdpbGwgbm90IGJlIHJlbmRlcmVkIGNvcnJlY3RseS5cbiAgICAvLyBZb3UgbmVlZCB0byBjYWxsIHRoaXMgbWV0aG9kIG1hbnVhbGx5IHRvIHVwZGF0ZSBnbHlwaHMgY2FjaGUuXG4gICAgc2V0VGV4dERhdGEoY3R4KSB7XG4gICAgICAgIGlmICh0aGlzLmdseXBoSW5mbykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlbmRlclRleHQgPSB0aGlzLmdldFRleHQoKTtcbiAgICAgICAgY29uc3QgY2hhcnMgPSByZW5kZXJUZXh0LnNwbGl0KCcnKTtcbiAgICAgICAgY29uc3Qgc3BhY2VzTnVtYmVyID0gcmVuZGVyVGV4dC5zcGxpdCgnICcpLmxlbmd0aCAtIDE7XG4gICAgICAgIGNvbnN0IGR4ID0gdGhpcy5wYXJlbnQuZ2V0QXR0cmlidXRlKCdkeCcpLnNwbGl0KCkubWFwKChfKT0+Xy5nZXRQaXhlbHMoJ3gnKVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBkeSA9IHRoaXMucGFyZW50LmdldEF0dHJpYnV0ZSgnZHknKS5nZXRQaXhlbHMoJ3knKTtcbiAgICAgICAgY29uc3QgYW5jaG9yID0gdGhpcy5wYXJlbnQuZ2V0U3R5bGUoJ3RleHQtYW5jaG9yJykuZ2V0U3RyaW5nKCdzdGFydCcpO1xuICAgICAgICBjb25zdCB0aGlzU3BhY2luZyA9IHRoaXMuZ2V0U3R5bGUoJ2xldHRlci1zcGFjaW5nJyk7XG4gICAgICAgIGNvbnN0IHBhcmVudFNwYWNpbmcgPSB0aGlzLnBhcmVudC5nZXRTdHlsZSgnbGV0dGVyLXNwYWNpbmcnKTtcbiAgICAgICAgbGV0IGxldHRlclNwYWNpbmcgPSAwO1xuICAgICAgICBpZiAoIXRoaXNTcGFjaW5nLmhhc1ZhbHVlKCkgfHwgdGhpc1NwYWNpbmcuZ2V0VmFsdWUoKSA9PT0gJ2luaGVyaXQnKSB7XG4gICAgICAgICAgICBsZXR0ZXJTcGFjaW5nID0gcGFyZW50U3BhY2luZy5nZXRQaXhlbHMoKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzU3BhY2luZy5oYXNWYWx1ZSgpKSB7XG4gICAgICAgICAgICBpZiAodGhpc1NwYWNpbmcuZ2V0VmFsdWUoKSAhPT0gJ2luaXRpYWwnICYmIHRoaXNTcGFjaW5nLmdldFZhbHVlKCkgIT09ICd1bnNldCcpIHtcbiAgICAgICAgICAgICAgICBsZXR0ZXJTcGFjaW5nID0gdGhpc1NwYWNpbmcuZ2V0UGl4ZWxzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gZmlsbCBsZXR0ZXItc3BhY2luZyBjYWNoZVxuICAgICAgICBjb25zdCBsZXR0ZXJTcGFjaW5nQ2FjaGUgPSBbXTtcbiAgICAgICAgY29uc3QgdGV4dExlbiA9IHJlbmRlclRleHQubGVuZ3RoO1xuICAgICAgICB0aGlzLmxldHRlclNwYWNpbmdDYWNoZSA9IGxldHRlclNwYWNpbmdDYWNoZTtcbiAgICAgICAgZm9yKGxldCBpMSA9IDA7IGkxIDwgdGV4dExlbjsgaTErKyl7XG4gICAgICAgICAgICBsZXR0ZXJTcGFjaW5nQ2FjaGUucHVzaCh0eXBlb2YgZHhbaTFdICE9PSAndW5kZWZpbmVkJyA/IGR4W2kxXSA6IGxldHRlclNwYWNpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGR4U3VtID0gbGV0dGVyU3BhY2luZ0NhY2hlLnJlZHVjZSgoYWNjLCBjdXIsIGkpPT5pID09PSAwID8gMCA6IGFjYyArIGN1ciB8fCAwXG4gICAgICAgICwgMCk7XG4gICAgICAgIGNvbnN0IHRleHRXaWR0aCA9IHRoaXMubWVhc3VyZVRleHQoY3R4KTtcbiAgICAgICAgY29uc3QgdGV4dEZ1bGxXaWR0aCA9IE1hdGgubWF4KHRleHRXaWR0aCArIGR4U3VtLCAwKTtcbiAgICAgICAgdGhpcy50ZXh0V2lkdGggPSB0ZXh0V2lkdGg7XG4gICAgICAgIHRoaXMudGV4dEhlaWdodCA9IHRoaXMuZ2V0Rm9udFNpemUoKTtcbiAgICAgICAgdGhpcy5nbHlwaEluZm8gPSBbXTtcbiAgICAgICAgY29uc3QgZnVsbFBhdGhXaWR0aCA9IHRoaXMuZ2V0UGF0aExlbmd0aCgpO1xuICAgICAgICBjb25zdCBzdGFydE9mZnNldCA9IHRoaXMuZ2V0U3R5bGUoJ3N0YXJ0T2Zmc2V0JykuZ2V0TnVtYmVyKDApICogZnVsbFBhdGhXaWR0aDtcbiAgICAgICAgbGV0IG9mZnNldCA9IDA7XG4gICAgICAgIGlmIChhbmNob3IgPT09ICdtaWRkbGUnIHx8IGFuY2hvciA9PT0gJ2NlbnRlcicpIHtcbiAgICAgICAgICAgIG9mZnNldCA9IC10ZXh0RnVsbFdpZHRoIC8gMjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYW5jaG9yID09PSAnZW5kJyB8fCBhbmNob3IgPT09ICdyaWdodCcpIHtcbiAgICAgICAgICAgIG9mZnNldCA9IC10ZXh0RnVsbFdpZHRoO1xuICAgICAgICB9XG4gICAgICAgIG9mZnNldCArPSBzdGFydE9mZnNldDtcbiAgICAgICAgY2hhcnMuZm9yRWFjaCgoY2hhciwgaSk9PntcbiAgICAgICAgICAgIC8vIEZpbmQgc3VjaCBzZWdtZW50IHdoYXQgZGlzdGFuY2UgYmV0d2VlbiBwMCBhbmQgcDEgaXMgYXBwcm94LiB3aWR0aCBvZiBnbHlwaFxuICAgICAgICAgICAgY29uc3QgeyBvZmZzZXQ6IG5leHRPZmZzZXQgLCBzZWdtZW50ICwgcm90YXRpb24gIH0gPSB0aGlzLmZpbmRTZWdtZW50VG9GaXRDaGFyKGN0eCwgYW5jaG9yLCB0ZXh0RnVsbFdpZHRoLCBmdWxsUGF0aFdpZHRoLCBzcGFjZXNOdW1iZXIsIG9mZnNldCwgZHksIGNoYXIsIGkpO1xuICAgICAgICAgICAgb2Zmc2V0ID0gbmV4dE9mZnNldDtcbiAgICAgICAgICAgIGlmICghc2VnbWVudC5wMCB8fCAhc2VnbWVudC5wMSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGNvbnN0IHdpZHRoID0gdGhpcy5nZXRMaW5lTGVuZ3RoKFxuICAgICAgICAgICAgLy8gICBzZWdtZW50LnAwLngsXG4gICAgICAgICAgICAvLyAgIHNlZ21lbnQucDAueSxcbiAgICAgICAgICAgIC8vICAgc2VnbWVudC5wMS54LFxuICAgICAgICAgICAgLy8gICBzZWdtZW50LnAxLnlcbiAgICAgICAgICAgIC8vICk7XG4gICAgICAgICAgICAvLyBOb3RlOiBTaW5jZSBnbHlwaHMgYXJlIHJlbmRlcmVkIG9uZSBhdCBhIHRpbWUsIGFueSBrZXJuaW5nIHBhaXIgZGF0YSBidWlsdCBpbnRvIHRoZSBmb250IHdpbGwgbm90IGJlIHVzZWQuXG4gICAgICAgICAgICAvLyBDYW4gZm9yZXNlZSBoYXZpbmcgYSByb3VnaCBwYWlyIHRhYmxlIGJ1aWx0IGluIHRoYXQgdGhlIGRldmVsb3BlciBjYW4gb3ZlcnJpZGUgYXMgbmVlZGVkLlxuICAgICAgICAgICAgLy8gT3IgdXNlIFwiZHhcIiBhdHRyaWJ1dGUgb2YgdGhlIDx0ZXh0PiBub2RlIGFzIGEgbmFpdmUgcmVwbGFjZW1lbnRcbiAgICAgICAgICAgIC8vIGNvbnN0IGtlcm4gPSAwO1xuICAgICAgICAgICAgLy8gcGxhY2Vob2xkZXIgZm9yIGZ1dHVyZSBpbXBsZW1lbnRhdGlvblxuICAgICAgICAgICAgLy8gY29uc3QgbWlkcG9pbnQgPSB0aGlzLmdldFBvaW50T25MaW5lKFxuICAgICAgICAgICAgLy8gICBrZXJuICsgd2lkdGggLyAyLjAsXG4gICAgICAgICAgICAvLyAgIHNlZ21lbnQucDAueCwgc2VnbWVudC5wMC55LCBzZWdtZW50LnAxLngsIHNlZ21lbnQucDEueVxuICAgICAgICAgICAgLy8gKTtcbiAgICAgICAgICAgIHRoaXMuZ2x5cGhJbmZvLnB1c2goe1xuICAgICAgICAgICAgICAgIC8vIHRyYW5zcG9zZVg6IG1pZHBvaW50LngsXG4gICAgICAgICAgICAgICAgLy8gdHJhbnNwb3NlWTogbWlkcG9pbnQueSxcbiAgICAgICAgICAgICAgICB0ZXh0OiBjaGFyc1tpXSxcbiAgICAgICAgICAgICAgICBwMDogc2VnbWVudC5wMCxcbiAgICAgICAgICAgICAgICBwMTogc2VnbWVudC5wMSxcbiAgICAgICAgICAgICAgICByb3RhdGlvblxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwYXJzZVBhdGhEYXRhKHBhdGgpIHtcbiAgICAgICAgdGhpcy5wYXRoTGVuZ3RoID0gLTEgLy8gcmVzZXQgcGF0aCBsZW5ndGhcbiAgICAgICAgO1xuICAgICAgICBpZiAoIXBhdGgpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXRoQ29tbWFuZHMgPSBbXTtcbiAgICAgICAgY29uc3QgeyBwYXRoUGFyc2VyICB9ID0gcGF0aDtcbiAgICAgICAgcGF0aFBhcnNlci5yZXNldCgpO1xuICAgICAgICAvLyBjb252ZXJ0IGwsIEgsIGgsIFYsIGFuZCB2IHRvIExcbiAgICAgICAgd2hpbGUoIXBhdGhQYXJzZXIuaXNFbmQoKSl7XG4gICAgICAgICAgICBjb25zdCB7IGN1cnJlbnQgIH0gPSBwYXRoUGFyc2VyO1xuICAgICAgICAgICAgY29uc3Qgc3RhcnRYID0gY3VycmVudCA/IGN1cnJlbnQueCA6IDA7XG4gICAgICAgICAgICBjb25zdCBzdGFydFkgPSBjdXJyZW50ID8gY3VycmVudC55IDogMDtcbiAgICAgICAgICAgIGNvbnN0IGNvbW1hbmQgPSBwYXRoUGFyc2VyLm5leHQoKTtcbiAgICAgICAgICAgIGxldCBuZXh0Q29tbWFuZFR5cGUgPSBjb21tYW5kLnR5cGU7XG4gICAgICAgICAgICBsZXQgcG9pbnRzID0gW107XG4gICAgICAgICAgICBzd2l0Y2goY29tbWFuZC50eXBlKXtcbiAgICAgICAgICAgICAgICBjYXNlIFBhdGhQYXJzZXIuTU9WRV9UTzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXRoTShwYXRoUGFyc2VyLCBwb2ludHMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFBhdGhQYXJzZXIuTElORV9UTzpcbiAgICAgICAgICAgICAgICAgICAgbmV4dENvbW1hbmRUeXBlID0gdGhpcy5wYXRoTChwYXRoUGFyc2VyLCBwb2ludHMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFBhdGhQYXJzZXIuSE9SSVpfTElORV9UTzpcbiAgICAgICAgICAgICAgICAgICAgbmV4dENvbW1hbmRUeXBlID0gdGhpcy5wYXRoSChwYXRoUGFyc2VyLCBwb2ludHMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFBhdGhQYXJzZXIuVkVSVF9MSU5FX1RPOlxuICAgICAgICAgICAgICAgICAgICBuZXh0Q29tbWFuZFR5cGUgPSB0aGlzLnBhdGhWKHBhdGhQYXJzZXIsIHBvaW50cyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgUGF0aFBhcnNlci5DVVJWRV9UTzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXRoQyhwYXRoUGFyc2VyLCBwb2ludHMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFBhdGhQYXJzZXIuU01PT1RIX0NVUlZFX1RPOlxuICAgICAgICAgICAgICAgICAgICBuZXh0Q29tbWFuZFR5cGUgPSB0aGlzLnBhdGhTKHBhdGhQYXJzZXIsIHBvaW50cyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgUGF0aFBhcnNlci5RVUFEX1RPOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhdGhRKHBhdGhQYXJzZXIsIHBvaW50cyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgUGF0aFBhcnNlci5TTU9PVEhfUVVBRF9UTzpcbiAgICAgICAgICAgICAgICAgICAgbmV4dENvbW1hbmRUeXBlID0gdGhpcy5wYXRoVChwYXRoUGFyc2VyLCBwb2ludHMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFBhdGhQYXJzZXIuQVJDOlxuICAgICAgICAgICAgICAgICAgICBwb2ludHMgPSB0aGlzLnBhdGhBKHBhdGhQYXJzZXIpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFBhdGhQYXJzZXIuQ0xPU0VfUEFUSDpcbiAgICAgICAgICAgICAgICAgICAgUGF0aEVsZW1lbnQucGF0aFoocGF0aFBhcnNlcik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNvbW1hbmQudHlwZSAhPT0gUGF0aFBhcnNlci5DTE9TRV9QQVRIKSB7XG4gICAgICAgICAgICAgICAgcGF0aENvbW1hbmRzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBuZXh0Q29tbWFuZFR5cGUsXG4gICAgICAgICAgICAgICAgICAgIHBvaW50cyxcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IHN0YXJ0WCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IHN0YXJ0WVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBwYXRoTGVuZ3RoOiB0aGlzLmNhbGNMZW5ndGgoc3RhcnRYLCBzdGFydFksIG5leHRDb21tYW5kVHlwZSwgcG9pbnRzKVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwYXRoQ29tbWFuZHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFBhdGhQYXJzZXIuQ0xPU0VfUEFUSCxcbiAgICAgICAgICAgICAgICAgICAgcG9pbnRzOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgcGF0aExlbmd0aDogMFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXRoQ29tbWFuZHM7XG4gICAgfVxuICAgIHBhdGhNKHBhdGhQYXJzZXIsIHBvaW50cykge1xuICAgICAgICBjb25zdCB7IHggLCB5ICB9ID0gUGF0aEVsZW1lbnQucGF0aE0ocGF0aFBhcnNlcikucG9pbnQ7XG4gICAgICAgIHBvaW50cy5wdXNoKHgsIHkpO1xuICAgIH1cbiAgICBwYXRoTChwYXRoUGFyc2VyLCBwb2ludHMpIHtcbiAgICAgICAgY29uc3QgeyB4ICwgeSAgfSA9IFBhdGhFbGVtZW50LnBhdGhMKHBhdGhQYXJzZXIpLnBvaW50O1xuICAgICAgICBwb2ludHMucHVzaCh4LCB5KTtcbiAgICAgICAgcmV0dXJuIFBhdGhQYXJzZXIuTElORV9UTztcbiAgICB9XG4gICAgcGF0aEgocGF0aFBhcnNlciwgcG9pbnRzKSB7XG4gICAgICAgIGNvbnN0IHsgeCAsIHkgIH0gPSBQYXRoRWxlbWVudC5wYXRoSChwYXRoUGFyc2VyKS5wb2ludDtcbiAgICAgICAgcG9pbnRzLnB1c2goeCwgeSk7XG4gICAgICAgIHJldHVybiBQYXRoUGFyc2VyLkxJTkVfVE87XG4gICAgfVxuICAgIHBhdGhWKHBhdGhQYXJzZXIsIHBvaW50cykge1xuICAgICAgICBjb25zdCB7IHggLCB5ICB9ID0gUGF0aEVsZW1lbnQucGF0aFYocGF0aFBhcnNlcikucG9pbnQ7XG4gICAgICAgIHBvaW50cy5wdXNoKHgsIHkpO1xuICAgICAgICByZXR1cm4gUGF0aFBhcnNlci5MSU5FX1RPO1xuICAgIH1cbiAgICBwYXRoQyhwYXRoUGFyc2VyLCBwb2ludHMpIHtcbiAgICAgICAgY29uc3QgeyBwb2ludCAsIGNvbnRyb2xQb2ludCAsIGN1cnJlbnRQb2ludCAgfSA9IFBhdGhFbGVtZW50LnBhdGhDKHBhdGhQYXJzZXIpO1xuICAgICAgICBwb2ludHMucHVzaChwb2ludC54LCBwb2ludC55LCBjb250cm9sUG9pbnQueCwgY29udHJvbFBvaW50LnksIGN1cnJlbnRQb2ludC54LCBjdXJyZW50UG9pbnQueSk7XG4gICAgfVxuICAgIHBhdGhTKHBhdGhQYXJzZXIsIHBvaW50cykge1xuICAgICAgICBjb25zdCB7IHBvaW50ICwgY29udHJvbFBvaW50ICwgY3VycmVudFBvaW50ICB9ID0gUGF0aEVsZW1lbnQucGF0aFMocGF0aFBhcnNlcik7XG4gICAgICAgIHBvaW50cy5wdXNoKHBvaW50LngsIHBvaW50LnksIGNvbnRyb2xQb2ludC54LCBjb250cm9sUG9pbnQueSwgY3VycmVudFBvaW50LngsIGN1cnJlbnRQb2ludC55KTtcbiAgICAgICAgcmV0dXJuIFBhdGhQYXJzZXIuQ1VSVkVfVE87XG4gICAgfVxuICAgIHBhdGhRKHBhdGhQYXJzZXIsIHBvaW50cykge1xuICAgICAgICBjb25zdCB7IGNvbnRyb2xQb2ludCAsIGN1cnJlbnRQb2ludCAgfSA9IFBhdGhFbGVtZW50LnBhdGhRKHBhdGhQYXJzZXIpO1xuICAgICAgICBwb2ludHMucHVzaChjb250cm9sUG9pbnQueCwgY29udHJvbFBvaW50LnksIGN1cnJlbnRQb2ludC54LCBjdXJyZW50UG9pbnQueSk7XG4gICAgfVxuICAgIHBhdGhUKHBhdGhQYXJzZXIsIHBvaW50cykge1xuICAgICAgICBjb25zdCB7IGNvbnRyb2xQb2ludCAsIGN1cnJlbnRQb2ludCAgfSA9IFBhdGhFbGVtZW50LnBhdGhUKHBhdGhQYXJzZXIpO1xuICAgICAgICBwb2ludHMucHVzaChjb250cm9sUG9pbnQueCwgY29udHJvbFBvaW50LnksIGN1cnJlbnRQb2ludC54LCBjdXJyZW50UG9pbnQueSk7XG4gICAgICAgIHJldHVybiBQYXRoUGFyc2VyLlFVQURfVE87XG4gICAgfVxuICAgIHBhdGhBKHBhdGhQYXJzZXIpIHtcbiAgICAgICAgbGV0IHsgclggLCByWSAsIHN3ZWVwRmxhZyAsIHhBeGlzUm90YXRpb24gLCBjZW50cCAsIGExICwgYWQgIH0gPSBQYXRoRWxlbWVudC5wYXRoQShwYXRoUGFyc2VyKTtcbiAgICAgICAgaWYgKHN3ZWVwRmxhZyA9PT0gMCAmJiBhZCA+IDApIHtcbiAgICAgICAgICAgIGFkIC09IDIgKiBNYXRoLlBJO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzd2VlcEZsYWcgPT09IDEgJiYgYWQgPCAwKSB7XG4gICAgICAgICAgICBhZCArPSAyICogTWF0aC5QSTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgY2VudHAueCxcbiAgICAgICAgICAgIGNlbnRwLnksXG4gICAgICAgICAgICByWCxcbiAgICAgICAgICAgIHJZLFxuICAgICAgICAgICAgYTEsXG4gICAgICAgICAgICBhZCxcbiAgICAgICAgICAgIHhBeGlzUm90YXRpb24sXG4gICAgICAgICAgICBzd2VlcEZsYWdcbiAgICAgICAgXTtcbiAgICB9XG4gICAgY2FsY0xlbmd0aCh4LCB5LCBjb21tYW5kVHlwZSwgcG9pbnRzKSB7XG4gICAgICAgIGxldCBsZW4gPSAwO1xuICAgICAgICBsZXQgcDEgPSBudWxsO1xuICAgICAgICBsZXQgcDIgPSBudWxsO1xuICAgICAgICBsZXQgdCA9IDA7XG4gICAgICAgIHN3aXRjaChjb21tYW5kVHlwZSl7XG4gICAgICAgICAgICBjYXNlIFBhdGhQYXJzZXIuTElORV9UTzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRMaW5lTGVuZ3RoKHgsIHksIHBvaW50c1swXSwgcG9pbnRzWzFdKTtcbiAgICAgICAgICAgIGNhc2UgUGF0aFBhcnNlci5DVVJWRV9UTzpcbiAgICAgICAgICAgICAgICAvLyBBcHByb3hpbWF0ZXMgYnkgYnJlYWtpbmcgY3VydmUgaW50byAxMDAgbGluZSBzZWdtZW50c1xuICAgICAgICAgICAgICAgIGxlbiA9IDA7XG4gICAgICAgICAgICAgICAgcDEgPSB0aGlzLmdldFBvaW50T25DdWJpY0JlemllcigwLCB4LCB5LCBwb2ludHNbMF0sIHBvaW50c1sxXSwgcG9pbnRzWzJdLCBwb2ludHNbM10sIHBvaW50c1s0XSwgcG9pbnRzWzVdKTtcbiAgICAgICAgICAgICAgICBmb3IodCA9IDAuMDE7IHQgPD0gMTsgdCArPSAwLjAxKXtcbiAgICAgICAgICAgICAgICAgICAgcDIgPSB0aGlzLmdldFBvaW50T25DdWJpY0Jlemllcih0LCB4LCB5LCBwb2ludHNbMF0sIHBvaW50c1sxXSwgcG9pbnRzWzJdLCBwb2ludHNbM10sIHBvaW50c1s0XSwgcG9pbnRzWzVdKTtcbiAgICAgICAgICAgICAgICAgICAgbGVuICs9IHRoaXMuZ2V0TGluZUxlbmd0aChwMS54LCBwMS55LCBwMi54LCBwMi55KTtcbiAgICAgICAgICAgICAgICAgICAgcDEgPSBwMjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxlbjtcbiAgICAgICAgICAgIGNhc2UgUGF0aFBhcnNlci5RVUFEX1RPOlxuICAgICAgICAgICAgICAgIC8vIEFwcHJveGltYXRlcyBieSBicmVha2luZyBjdXJ2ZSBpbnRvIDEwMCBsaW5lIHNlZ21lbnRzXG4gICAgICAgICAgICAgICAgbGVuID0gMDtcbiAgICAgICAgICAgICAgICBwMSA9IHRoaXMuZ2V0UG9pbnRPblF1YWRyYXRpY0JlemllcigwLCB4LCB5LCBwb2ludHNbMF0sIHBvaW50c1sxXSwgcG9pbnRzWzJdLCBwb2ludHNbM10pO1xuICAgICAgICAgICAgICAgIGZvcih0ID0gMC4wMTsgdCA8PSAxOyB0ICs9IDAuMDEpe1xuICAgICAgICAgICAgICAgICAgICBwMiA9IHRoaXMuZ2V0UG9pbnRPblF1YWRyYXRpY0Jlemllcih0LCB4LCB5LCBwb2ludHNbMF0sIHBvaW50c1sxXSwgcG9pbnRzWzJdLCBwb2ludHNbM10pO1xuICAgICAgICAgICAgICAgICAgICBsZW4gKz0gdGhpcy5nZXRMaW5lTGVuZ3RoKHAxLngsIHAxLnksIHAyLngsIHAyLnkpO1xuICAgICAgICAgICAgICAgICAgICBwMSA9IHAyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbGVuO1xuICAgICAgICAgICAgY2FzZSBQYXRoUGFyc2VyLkFSQzpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEFwcHJveGltYXRlcyBieSBicmVha2luZyBjdXJ2ZSBpbnRvIGxpbmUgc2VnbWVudHNcbiAgICAgICAgICAgICAgICAgICAgbGVuID0gMDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSBwb2ludHNbNF07XG4gICAgICAgICAgICAgICAgICAgIC8vIDQgPSB0aGV0YVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkVGhldGEgPSBwb2ludHNbNV07XG4gICAgICAgICAgICAgICAgICAgIC8vIDUgPSBkVGhldGFcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kID0gcG9pbnRzWzRdICsgZFRoZXRhO1xuICAgICAgICAgICAgICAgICAgICBsZXQgaW5jID0gTWF0aC5QSSAvIDE4MDtcbiAgICAgICAgICAgICAgICAgICAgLy8gMSBkZWdyZWUgcmVzb2x1dGlvblxuICAgICAgICAgICAgICAgICAgICBpZiAoTWF0aC5hYnMoc3RhcnQgLSBlbmQpIDwgaW5jKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbmMgPSBNYXRoLmFicyhzdGFydCAtIGVuZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gTm90ZTogZm9yIHB1cnBvc2Ugb2YgY2FsY3VsYXRpbmcgYXJjIGxlbmd0aCwgbm90IGdvaW5nIHRvIHdvcnJ5IGFib3V0IHJvdGF0aW5nIFgtYXhpcyBieSBhbmdsZSBwc2lcbiAgICAgICAgICAgICAgICAgICAgcDEgPSB0aGlzLmdldFBvaW50T25FbGxpcHRpY2FsQXJjKHBvaW50c1swXSwgcG9pbnRzWzFdLCBwb2ludHNbMl0sIHBvaW50c1szXSwgc3RhcnQsIDApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZFRoZXRhIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yKHQgPSBzdGFydCAtIGluYzsgdCA+IGVuZDsgdCAtPSBpbmMpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAyID0gdGhpcy5nZXRQb2ludE9uRWxsaXB0aWNhbEFyYyhwb2ludHNbMF0sIHBvaW50c1sxXSwgcG9pbnRzWzJdLCBwb2ludHNbM10sIHQsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbiArPSB0aGlzLmdldExpbmVMZW5ndGgocDEueCwgcDEueSwgcDIueCwgcDIueSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcDEgPSBwMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcih0ID0gc3RhcnQgKyBpbmM7IHQgPCBlbmQ7IHQgKz0gaW5jKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwMiA9IHRoaXMuZ2V0UG9pbnRPbkVsbGlwdGljYWxBcmMocG9pbnRzWzBdLCBwb2ludHNbMV0sIHBvaW50c1syXSwgcG9pbnRzWzNdLCB0LCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4gKz0gdGhpcy5nZXRMaW5lTGVuZ3RoKHAxLngsIHAxLnksIHAyLngsIHAyLnkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAxID0gcDI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcDIgPSB0aGlzLmdldFBvaW50T25FbGxpcHRpY2FsQXJjKHBvaW50c1swXSwgcG9pbnRzWzFdLCBwb2ludHNbMl0sIHBvaW50c1szXSwgZW5kLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgbGVuICs9IHRoaXMuZ2V0TGluZUxlbmd0aChwMS54LCBwMS55LCBwMi54LCBwMi55KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxlbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIGdldFBvaW50T25MaW5lKGRpc3QsIHAxeCwgcDF5LCBwMngsIHAyeSkge1xuICAgICAgICBsZXQgZnJvbVggPSBhcmd1bWVudHMubGVuZ3RoID4gNSAmJiBhcmd1bWVudHNbNV0gIT09IHZvaWQgMCA/IGFyZ3VtZW50c1s1XSA6IHAxeCwgZnJvbVkgPSBhcmd1bWVudHMubGVuZ3RoID4gNiAmJiBhcmd1bWVudHNbNl0gIT09IHZvaWQgMCA/IGFyZ3VtZW50c1s2XSA6IHAxeTtcbiAgICAgICAgY29uc3QgbSA9IChwMnkgLSBwMXkpIC8gKHAyeCAtIHAxeCArIFBTRVVET19aRVJPKTtcbiAgICAgICAgbGV0IHJ1biA9IE1hdGguc3FydChkaXN0ICogZGlzdCAvICgxICsgbSAqIG0pKTtcbiAgICAgICAgaWYgKHAyeCA8IHAxeCkge1xuICAgICAgICAgICAgcnVuICo9IC0xO1xuICAgICAgICB9XG4gICAgICAgIGxldCByaXNlID0gbSAqIHJ1bjtcbiAgICAgICAgbGV0IHB0ID0gbnVsbDtcbiAgICAgICAgaWYgKHAyeCA9PT0gcDF4KSB7XG4gICAgICAgICAgICBwdCA9IHtcbiAgICAgICAgICAgICAgICB4OiBmcm9tWCxcbiAgICAgICAgICAgICAgICB5OiBmcm9tWSArIHJpc2VcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoKGZyb21ZIC0gcDF5KSAvIChmcm9tWCAtIHAxeCArIFBTRVVET19aRVJPKSA9PT0gbSkge1xuICAgICAgICAgICAgcHQgPSB7XG4gICAgICAgICAgICAgICAgeDogZnJvbVggKyBydW4sXG4gICAgICAgICAgICAgICAgeTogZnJvbVkgKyByaXNlXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IGl4ID0gMDtcbiAgICAgICAgICAgIGxldCBpeSA9IDA7XG4gICAgICAgICAgICBjb25zdCBsZW4gPSB0aGlzLmdldExpbmVMZW5ndGgocDF4LCBwMXksIHAyeCwgcDJ5KTtcbiAgICAgICAgICAgIGlmIChsZW4gPCBQU0VVRE9fWkVSTykge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHUgPSAoZnJvbVggLSBwMXgpICogKHAyeCAtIHAxeCkgKyAoZnJvbVkgLSBwMXkpICogKHAyeSAtIHAxeSk7XG4gICAgICAgICAgICB1IC89IGxlbiAqIGxlbjtcbiAgICAgICAgICAgIGl4ID0gcDF4ICsgdSAqIChwMnggLSBwMXgpO1xuICAgICAgICAgICAgaXkgPSBwMXkgKyB1ICogKHAyeSAtIHAxeSk7XG4gICAgICAgICAgICBjb25zdCBwUmlzZSA9IHRoaXMuZ2V0TGluZUxlbmd0aChmcm9tWCwgZnJvbVksIGl4LCBpeSk7XG4gICAgICAgICAgICBjb25zdCBwUnVuID0gTWF0aC5zcXJ0KGRpc3QgKiBkaXN0IC0gcFJpc2UgKiBwUmlzZSk7XG4gICAgICAgICAgICBydW4gPSBNYXRoLnNxcnQocFJ1biAqIHBSdW4gLyAoMSArIG0gKiBtKSk7XG4gICAgICAgICAgICBpZiAocDJ4IDwgcDF4KSB7XG4gICAgICAgICAgICAgICAgcnVuICo9IC0xO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmlzZSA9IG0gKiBydW47XG4gICAgICAgICAgICBwdCA9IHtcbiAgICAgICAgICAgICAgICB4OiBpeCArIHJ1bixcbiAgICAgICAgICAgICAgICB5OiBpeSArIHJpc2VcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHB0O1xuICAgIH1cbiAgICBnZXRQb2ludE9uUGF0aChkaXN0YW5jZSkge1xuICAgICAgICBjb25zdCBmdWxsTGVuID0gdGhpcy5nZXRQYXRoTGVuZ3RoKCk7XG4gICAgICAgIGxldCBjdW11bGF0aXZlUGF0aExlbmd0aCA9IDA7XG4gICAgICAgIGxldCBwID0gbnVsbDtcbiAgICAgICAgaWYgKGRpc3RhbmNlIDwgLTAuMDAwMDUgfHwgZGlzdGFuY2UgLSAwLjAwMDA1ID4gZnVsbExlbikge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBkYXRhQXJyYXkgIH0gPSB0aGlzO1xuICAgICAgICBmb3IgKGNvbnN0IGNvbW1hbmQgb2YgZGF0YUFycmF5KXtcbiAgICAgICAgICAgIGlmIChjb21tYW5kICYmIChjb21tYW5kLnBhdGhMZW5ndGggPCAwLjAwMDA1IHx8IGN1bXVsYXRpdmVQYXRoTGVuZ3RoICsgY29tbWFuZC5wYXRoTGVuZ3RoICsgMC4wMDAwNSA8IGRpc3RhbmNlKSkge1xuICAgICAgICAgICAgICAgIGN1bXVsYXRpdmVQYXRoTGVuZ3RoICs9IGNvbW1hbmQucGF0aExlbmd0aDtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGRlbHRhID0gZGlzdGFuY2UgLSBjdW11bGF0aXZlUGF0aExlbmd0aDtcbiAgICAgICAgICAgIGxldCBjdXJyZW50VCA9IDA7XG4gICAgICAgICAgICBzd2l0Y2goY29tbWFuZC50eXBlKXtcbiAgICAgICAgICAgICAgICBjYXNlIFBhdGhQYXJzZXIuTElORV9UTzpcbiAgICAgICAgICAgICAgICAgICAgcCA9IHRoaXMuZ2V0UG9pbnRPbkxpbmUoZGVsdGEsIGNvbW1hbmQuc3RhcnQueCwgY29tbWFuZC5zdGFydC55LCBjb21tYW5kLnBvaW50c1swXSwgY29tbWFuZC5wb2ludHNbMV0sIGNvbW1hbmQuc3RhcnQueCwgY29tbWFuZC5zdGFydC55KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBQYXRoUGFyc2VyLkFSQzpcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSBjb21tYW5kLnBvaW50c1s0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIDQgPSB0aGV0YVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZFRoZXRhID0gY29tbWFuZC5wb2ludHNbNV07XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyA1ID0gZFRoZXRhXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSBjb21tYW5kLnBvaW50c1s0XSArIGRUaGV0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUID0gc3RhcnQgKyBkZWx0YSAvIGNvbW1hbmQucGF0aExlbmd0aCAqIGRUaGV0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkVGhldGEgPCAwICYmIGN1cnJlbnRUIDwgZW5kIHx8IGRUaGV0YSA+PSAwICYmIGN1cnJlbnRUID4gZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBwID0gdGhpcy5nZXRQb2ludE9uRWxsaXB0aWNhbEFyYyhjb21tYW5kLnBvaW50c1swXSwgY29tbWFuZC5wb2ludHNbMV0sIGNvbW1hbmQucG9pbnRzWzJdLCBjb21tYW5kLnBvaW50c1szXSwgY3VycmVudFQsIGNvbW1hbmQucG9pbnRzWzZdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSBQYXRoUGFyc2VyLkNVUlZFX1RPOlxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50VCA9IGRlbHRhIC8gY29tbWFuZC5wYXRoTGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudFQgPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VCA9IDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcCA9IHRoaXMuZ2V0UG9pbnRPbkN1YmljQmV6aWVyKGN1cnJlbnRULCBjb21tYW5kLnN0YXJ0LngsIGNvbW1hbmQuc3RhcnQueSwgY29tbWFuZC5wb2ludHNbMF0sIGNvbW1hbmQucG9pbnRzWzFdLCBjb21tYW5kLnBvaW50c1syXSwgY29tbWFuZC5wb2ludHNbM10sIGNvbW1hbmQucG9pbnRzWzRdLCBjb21tYW5kLnBvaW50c1s1XSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgUGF0aFBhcnNlci5RVUFEX1RPOlxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50VCA9IGRlbHRhIC8gY29tbWFuZC5wYXRoTGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudFQgPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VCA9IDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcCA9IHRoaXMuZ2V0UG9pbnRPblF1YWRyYXRpY0JlemllcihjdXJyZW50VCwgY29tbWFuZC5zdGFydC54LCBjb21tYW5kLnN0YXJ0LnksIGNvbW1hbmQucG9pbnRzWzBdLCBjb21tYW5kLnBvaW50c1sxXSwgY29tbWFuZC5wb2ludHNbMl0sIGNvbW1hbmQucG9pbnRzWzNdKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGdldExpbmVMZW5ndGgoeDEsIHkxLCB4MiwgeTIpIHtcbiAgICAgICAgcmV0dXJuIE1hdGguc3FydCgoeDIgLSB4MSkgKiAoeDIgLSB4MSkgKyAoeTIgLSB5MSkgKiAoeTIgLSB5MSkpO1xuICAgIH1cbiAgICBnZXRQYXRoTGVuZ3RoKCkge1xuICAgICAgICBpZiAodGhpcy5wYXRoTGVuZ3RoID09PSAtMSkge1xuICAgICAgICAgICAgdGhpcy5wYXRoTGVuZ3RoID0gdGhpcy5kYXRhQXJyYXkucmVkdWNlKChsZW5ndGgsIGNvbW1hbmQpPT5jb21tYW5kLnBhdGhMZW5ndGggPiAwID8gbGVuZ3RoICsgY29tbWFuZC5wYXRoTGVuZ3RoIDogbGVuZ3RoXG4gICAgICAgICAgICAsIDApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnBhdGhMZW5ndGg7XG4gICAgfVxuICAgIGdldFBvaW50T25DdWJpY0JlemllcihwY3QsIHAxeCwgcDF5LCBwMngsIHAyeSwgcDN4LCBwM3ksIHA0eCwgcDR5KSB7XG4gICAgICAgIGNvbnN0IHggPSBwNHggKiBDQjEocGN0KSArIHAzeCAqIENCMihwY3QpICsgcDJ4ICogQ0IzKHBjdCkgKyBwMXggKiBDQjQocGN0KTtcbiAgICAgICAgY29uc3QgeSA9IHA0eSAqIENCMShwY3QpICsgcDN5ICogQ0IyKHBjdCkgKyBwMnkgKiBDQjMocGN0KSArIHAxeSAqIENCNChwY3QpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeCxcbiAgICAgICAgICAgIHlcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZ2V0UG9pbnRPblF1YWRyYXRpY0JlemllcihwY3QsIHAxeCwgcDF5LCBwMngsIHAyeSwgcDN4LCBwM3kpIHtcbiAgICAgICAgY29uc3QgeCA9IHAzeCAqIFFCMShwY3QpICsgcDJ4ICogUUIyKHBjdCkgKyBwMXggKiBRQjMocGN0KTtcbiAgICAgICAgY29uc3QgeSA9IHAzeSAqIFFCMShwY3QpICsgcDJ5ICogUUIyKHBjdCkgKyBwMXkgKiBRQjMocGN0KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHgsXG4gICAgICAgICAgICB5XG4gICAgICAgIH07XG4gICAgfVxuICAgIGdldFBvaW50T25FbGxpcHRpY2FsQXJjKGN4LCBjeSwgcngsIHJ5LCB0aGV0YSwgcHNpKSB7XG4gICAgICAgIGNvbnN0IGNvc1BzaSA9IE1hdGguY29zKHBzaSk7XG4gICAgICAgIGNvbnN0IHNpblBzaSA9IE1hdGguc2luKHBzaSk7XG4gICAgICAgIGNvbnN0IHB0ID0ge1xuICAgICAgICAgICAgeDogcnggKiBNYXRoLmNvcyh0aGV0YSksXG4gICAgICAgICAgICB5OiByeSAqIE1hdGguc2luKHRoZXRhKVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeDogY3ggKyAocHQueCAqIGNvc1BzaSAtIHB0LnkgKiBzaW5Qc2kpLFxuICAgICAgICAgICAgeTogY3kgKyAocHQueCAqIHNpblBzaSArIHB0LnkgKiBjb3NQc2kpXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8vIFRPRE8gbmVlZCBzb21lIG9wdGltaXNhdGlvbnMuIHBvc3NpYmx5IGJ1aWxkIGNhY2hlIG9ubHkgZm9yIGN1cnZlZCBzZWdtZW50cz9cbiAgICBidWlsZEVxdWlkaXN0YW50Q2FjaGUoaW5wdXRTdGVwLCBpbnB1dFByZWNpc2lvbikge1xuICAgICAgICBjb25zdCBmdWxsTGVuID0gdGhpcy5nZXRQYXRoTGVuZ3RoKCk7XG4gICAgICAgIGNvbnN0IHByZWNpc2lvbiA9IGlucHV0UHJlY2lzaW9uIHx8IDAuMjUgLy8gYWNjdXJhY3kgdnMgcGVyZm9ybWFuY2VcbiAgICAgICAgO1xuICAgICAgICBjb25zdCBzdGVwID0gaW5wdXRTdGVwIHx8IGZ1bGxMZW4gLyAxMDA7XG4gICAgICAgIGlmICghdGhpcy5lcXVpZGlzdGFudENhY2hlIHx8IHRoaXMuZXF1aWRpc3RhbnRDYWNoZS5zdGVwICE9PSBzdGVwIHx8IHRoaXMuZXF1aWRpc3RhbnRDYWNoZS5wcmVjaXNpb24gIT09IHByZWNpc2lvbikge1xuICAgICAgICAgICAgLy8gUHJlcGFyZSBjYWNoZVxuICAgICAgICAgICAgdGhpcy5lcXVpZGlzdGFudENhY2hlID0ge1xuICAgICAgICAgICAgICAgIHN0ZXAsXG4gICAgICAgICAgICAgICAgcHJlY2lzaW9uLFxuICAgICAgICAgICAgICAgIHBvaW50czogW11cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBDYWxjdWxhdGUgcG9pbnRzXG4gICAgICAgICAgICBsZXQgcyA9IDA7XG4gICAgICAgICAgICBmb3IobGV0IGwgPSAwOyBsIDw9IGZ1bGxMZW47IGwgKz0gcHJlY2lzaW9uKXtcbiAgICAgICAgICAgICAgICBjb25zdCBwMCA9IHRoaXMuZ2V0UG9pbnRPblBhdGgobCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcDEgPSB0aGlzLmdldFBvaW50T25QYXRoKGwgKyBwcmVjaXNpb24pO1xuICAgICAgICAgICAgICAgIGlmICghcDAgfHwgIXAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzICs9IHRoaXMuZ2V0TGluZUxlbmd0aChwMC54LCBwMC55LCBwMS54LCBwMS55KTtcbiAgICAgICAgICAgICAgICBpZiAocyA+PSBzdGVwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXF1aWRpc3RhbnRDYWNoZS5wb2ludHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiBwMC54LFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogcDAueSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RhbmNlOiBsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzIC09IHN0ZXA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGdldEVxdWlkaXN0YW50UG9pbnRPblBhdGgodGFyZ2V0RGlzdGFuY2UsIHN0ZXAsIHByZWNpc2lvbikge1xuICAgICAgICB0aGlzLmJ1aWxkRXF1aWRpc3RhbnRDYWNoZShzdGVwLCBwcmVjaXNpb24pO1xuICAgICAgICBpZiAodGFyZ2V0RGlzdGFuY2UgPCAwIHx8IHRhcmdldERpc3RhbmNlIC0gdGhpcy5nZXRQYXRoTGVuZ3RoKCkgPiAwLjAwMDA1KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpZHggPSBNYXRoLnJvdW5kKHRhcmdldERpc3RhbmNlIC8gdGhpcy5nZXRQYXRoTGVuZ3RoKCkgKiAodGhpcy5lcXVpZGlzdGFudENhY2hlLnBvaW50cy5sZW5ndGggLSAxKSk7XG4gICAgICAgIHJldHVybiB0aGlzLmVxdWlkaXN0YW50Q2FjaGUucG9pbnRzW2lkeF0gfHwgbnVsbDtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoZG9jdW1lbnQsIG5vZGUsIGNhcHR1cmVUZXh0Tm9kZXMpe1xuICAgICAgICBzdXBlcihkb2N1bWVudCwgbm9kZSwgY2FwdHVyZVRleHROb2Rlcyk7XG4gICAgICAgIHRoaXMudHlwZSA9ICd0ZXh0UGF0aCc7XG4gICAgICAgIHRoaXMudGV4dFdpZHRoID0gMDtcbiAgICAgICAgdGhpcy50ZXh0SGVpZ2h0ID0gMDtcbiAgICAgICAgdGhpcy5wYXRoTGVuZ3RoID0gLTE7XG4gICAgICAgIHRoaXMuZ2x5cGhJbmZvID0gbnVsbDtcbiAgICAgICAgdGhpcy5sZXR0ZXJTcGFjaW5nQ2FjaGUgPSBbXTtcbiAgICAgICAgdGhpcy5tZWFzdXJlc0NhY2hlID0gbmV3IE1hcChbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgJycsXG4gICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgXVxuICAgICAgICBdKTtcbiAgICAgICAgY29uc3QgcGF0aEVsZW1lbnQgPSB0aGlzLmdldEhyZWZBdHRyaWJ1dGUoKS5nZXREZWZpbml0aW9uKCk7XG4gICAgICAgIHRoaXMudGV4dCA9IHRoaXMuZ2V0VGV4dEZyb21Ob2RlKCk7XG4gICAgICAgIHRoaXMuZGF0YUFycmF5ID0gdGhpcy5wYXJzZVBhdGhEYXRhKHBhdGhFbGVtZW50KTtcbiAgICB9XG59XG5cbi8vIGdyb3VwczogMTogbWltZS10eXBlICgrIGNoYXJzZXQpLCAyOiBtaW1lLXR5cGUgKHcvbyBjaGFyc2V0KSwgMzogY2hhcnNldCwgNDogYmFzZTY0PywgNTogYm9keVxuY29uc3QgZGF0YVVyaVJlZ2V4ID0gL15cXHMqZGF0YTooKFteLyw7XStcXC9bXi8sO10rKSg/OjsoW14sOz1dKz1bXiw7PV0rKSk/KT8oPzo7KGJhc2U2NCkpPywoLiopJC9pO1xuY2xhc3MgSW1hZ2VFbGVtZW50IGV4dGVuZHMgUmVuZGVyZWRFbGVtZW50IHtcbiAgICBhc3luYyBsb2FkSW1hZ2UoaHJlZikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgaW1hZ2UgPSBhd2FpdCB0aGlzLmRvY3VtZW50LmNyZWF0ZUltYWdlKGhyZWYpO1xuICAgICAgICAgICAgdGhpcy5pbWFnZSA9IGltYWdlO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciB3aGlsZSBsb2FkaW5nIGltYWdlIFxcXCJcIi5jb25jYXQoaHJlZiwgXCJcXFwiOlwiKSwgZXJyKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxvYWRlZCA9IHRydWU7XG4gICAgfVxuICAgIGFzeW5jIGxvYWRTdmcoaHJlZikge1xuICAgICAgICBjb25zdCBtYXRjaCA9IGRhdGFVcmlSZWdleC5leGVjKGhyZWYpO1xuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBtYXRjaFs1XTtcbiAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoWzRdID09PSAnYmFzZTY0Jykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmltYWdlID0gYXRvYihkYXRhKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmltYWdlID0gZGVjb2RlVVJJQ29tcG9uZW50KGRhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmRvY3VtZW50LmZldGNoKGhyZWYpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHN2ZyA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmltYWdlID0gc3ZnO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIHdoaWxlIGxvYWRpbmcgaW1hZ2UgXFxcIlwiLmNvbmNhdChocmVmLCBcIlxcXCI6XCIpLCBlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMubG9hZGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgcmVuZGVyQ2hpbGRyZW4oY3R4KSB7XG4gICAgICAgIGNvbnN0IHsgZG9jdW1lbnQgLCBpbWFnZSAsIGxvYWRlZCAgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IHggPSB0aGlzLmdldEF0dHJpYnV0ZSgneCcpLmdldFBpeGVscygneCcpO1xuICAgICAgICBjb25zdCB5ID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ3knKS5nZXRQaXhlbHMoJ3knKTtcbiAgICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLmdldFN0eWxlKCd3aWR0aCcpLmdldFBpeGVscygneCcpO1xuICAgICAgICBjb25zdCBoZWlnaHQgPSB0aGlzLmdldFN0eWxlKCdoZWlnaHQnKS5nZXRQaXhlbHMoJ3knKTtcbiAgICAgICAgaWYgKCFsb2FkZWQgfHwgIWltYWdlIHx8ICF3aWR0aCB8fCAhaGVpZ2h0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY3R4LnNhdmUoKTtcbiAgICAgICAgY3R4LnRyYW5zbGF0ZSh4LCB5KTtcbiAgICAgICAgaWYgKHR5cGVvZiBpbWFnZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNvbnN0IHN1YkRvY3VtZW50ID0gZG9jdW1lbnQuY2FudmcuZm9ya1N0cmluZyhjdHgsIGltYWdlLCB7XG4gICAgICAgICAgICAgICAgaWdub3JlTW91c2U6IHRydWUsXG4gICAgICAgICAgICAgICAgaWdub3JlQW5pbWF0aW9uOiB0cnVlLFxuICAgICAgICAgICAgICAgIGlnbm9yZURpbWVuc2lvbnM6IHRydWUsXG4gICAgICAgICAgICAgICAgaWdub3JlQ2xlYXI6IHRydWUsXG4gICAgICAgICAgICAgICAgb2Zmc2V0WDogMCxcbiAgICAgICAgICAgICAgICBvZmZzZXRZOiAwLFxuICAgICAgICAgICAgICAgIHNjYWxlV2lkdGg6IHdpZHRoLFxuICAgICAgICAgICAgICAgIHNjYWxlSGVpZ2h0OiBoZWlnaHRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgeyBkb2N1bWVudEVsZW1lbnQgIH0gPSBzdWJEb2N1bWVudC5kb2N1bWVudDtcbiAgICAgICAgICAgIGlmIChkb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBkb2N1bWVudEVsZW1lbnQucGFyZW50ID0gdGhpcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZvaWQgc3ViRG9jdW1lbnQucmVuZGVyKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkb2N1bWVudC5zZXRWaWV3Qm94KHtcbiAgICAgICAgICAgICAgICBjdHgsXG4gICAgICAgICAgICAgICAgYXNwZWN0UmF0aW86IHRoaXMuZ2V0QXR0cmlidXRlKCdwcmVzZXJ2ZUFzcGVjdFJhdGlvJykuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICAgICAgZGVzaXJlZFdpZHRoOiBpbWFnZS53aWR0aCxcbiAgICAgICAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgICAgICAgZGVzaXJlZEhlaWdodDogaW1hZ2UuaGVpZ2h0XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICh0aGlzLmxvYWRlZCkge1xuICAgICAgICAgICAgICAgIGlmICghKCdjb21wbGV0ZScgaW4gaW1hZ2UpIHx8IGltYWdlLmNvbXBsZXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eC5kcmF3SW1hZ2UoaW1hZ2UsIDAsIDApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjdHgucmVzdG9yZSgpO1xuICAgIH1cbiAgICBnZXRCb3VuZGluZ0JveCgpIHtcbiAgICAgICAgY29uc3QgeCA9IHRoaXMuZ2V0QXR0cmlidXRlKCd4JykuZ2V0UGl4ZWxzKCd4Jyk7XG4gICAgICAgIGNvbnN0IHkgPSB0aGlzLmdldEF0dHJpYnV0ZSgneScpLmdldFBpeGVscygneScpO1xuICAgICAgICBjb25zdCB3aWR0aCA9IHRoaXMuZ2V0U3R5bGUoJ3dpZHRoJykuZ2V0UGl4ZWxzKCd4Jyk7XG4gICAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMuZ2V0U3R5bGUoJ2hlaWdodCcpLmdldFBpeGVscygneScpO1xuICAgICAgICByZXR1cm4gbmV3IEJvdW5kaW5nQm94KHgsIHksIHggKyB3aWR0aCwgeSArIGhlaWdodCk7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKGRvY3VtZW50LCBub2RlLCBjYXB0dXJlVGV4dE5vZGVzKXtcbiAgICAgICAgc3VwZXIoZG9jdW1lbnQsIG5vZGUsIGNhcHR1cmVUZXh0Tm9kZXMpO1xuICAgICAgICB0aGlzLnR5cGUgPSAnaW1hZ2UnO1xuICAgICAgICB0aGlzLmxvYWRlZCA9IGZhbHNlO1xuICAgICAgICBjb25zdCBocmVmID0gdGhpcy5nZXRIcmVmQXR0cmlidXRlKCkuZ2V0U3RyaW5nKCk7XG4gICAgICAgIGlmICghaHJlZikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlzU3ZnID0gaHJlZi5lbmRzV2l0aCgnLnN2ZycpIHx8IC9eXFxzKmRhdGE6aW1hZ2VcXC9zdmdcXCt4bWwvaS50ZXN0KGhyZWYpO1xuICAgICAgICBkb2N1bWVudC5pbWFnZXMucHVzaCh0aGlzKTtcbiAgICAgICAgaWYgKCFpc1N2Zykge1xuICAgICAgICAgICAgdm9pZCB0aGlzLmxvYWRJbWFnZShocmVmKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZvaWQgdGhpcy5sb2FkU3ZnKGhyZWYpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBTeW1ib2xFbGVtZW50IGV4dGVuZHMgUmVuZGVyZWRFbGVtZW50IHtcbiAgICByZW5kZXIoXykge1xuICAgIC8vIE5PIFJFTkRFUlxuICAgIH1cbiAgICBjb25zdHJ1Y3RvciguLi5hcmdzKXtcbiAgICAgICAgc3VwZXIoLi4uYXJncyk7XG4gICAgICAgIHRoaXMudHlwZSA9ICdzeW1ib2wnO1xuICAgIH1cbn1cblxuY2xhc3MgU1ZHRm9udExvYWRlciB7XG4gICAgYXN5bmMgbG9hZChmb250RmFtaWx5LCB1cmwpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHsgZG9jdW1lbnQgIH0gPSB0aGlzO1xuICAgICAgICAgICAgY29uc3Qgc3ZnRG9jdW1lbnQgPSBhd2FpdCBkb2N1bWVudC5jYW52Zy5wYXJzZXIubG9hZCh1cmwpO1xuICAgICAgICAgICAgY29uc3QgZm9udHMgPSBzdmdEb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnZm9udCcpO1xuICAgICAgICAgICAgQXJyYXkuZnJvbShmb250cykuZm9yRWFjaCgoZm9udE5vZGUpPT57XG4gICAgICAgICAgICAgICAgY29uc3QgZm9udCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZm9udE5vZGUpO1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmRlZmluaXRpb25zW2ZvbnRGYW1pbHldID0gZm9udDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciB3aGlsZSBsb2FkaW5nIGZvbnQgXFxcIlwiLmNvbmNhdCh1cmwsIFwiXFxcIjpcIiksIGVycik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sb2FkZWQgPSB0cnVlO1xuICAgIH1cbiAgICBjb25zdHJ1Y3Rvcihkb2N1bWVudCl7XG4gICAgICAgIHRoaXMuZG9jdW1lbnQgPSBkb2N1bWVudDtcbiAgICAgICAgdGhpcy5sb2FkZWQgPSBmYWxzZTtcbiAgICAgICAgZG9jdW1lbnQuZm9udHMucHVzaCh0aGlzKTtcbiAgICB9XG59XG5cbmNsYXNzIFN0eWxlRWxlbWVudCBleHRlbmRzIEVsZW1lbnQge1xuICAgIGNvbnN0cnVjdG9yKGRvY3VtZW50LCBub2RlLCBjYXB0dXJlVGV4dE5vZGVzKXtcbiAgICAgICAgc3VwZXIoZG9jdW1lbnQsIG5vZGUsIGNhcHR1cmVUZXh0Tm9kZXMpO1xuICAgICAgICB0aGlzLnR5cGUgPSAnc3R5bGUnO1xuICAgICAgICBjb25zdCBjc3MgPSBjb21wcmVzc1NwYWNlcyhBcnJheS5mcm9tKG5vZGUuY2hpbGROb2RlcykvLyBORUVEIFRFU1RcbiAgICAgICAgLm1hcCgoXyk9Pl8udGV4dENvbnRlbnRcbiAgICAgICAgKS5qb2luKCcnKS5yZXBsYWNlKC8oXFwvXFwqKFteKl18W1xcclxcbl18KFxcKisoW14qL118W1xcclxcbl0pKSkqXFwqK1xcLyl8KF5bXFxzXSpcXC9cXC8uKikvZ20sICcnKSAvLyByZW1vdmUgY29tbWVudHNcbiAgICAgICAgLnJlcGxhY2UoL0BpbXBvcnQuKjsvZywgJycpIC8vIHJlbW92ZSBpbXBvcnRzXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGNzc0RlZnMgPSBjc3Muc3BsaXQoJ30nKTtcbiAgICAgICAgY3NzRGVmcy5mb3JFYWNoKChfMSk9PntcbiAgICAgICAgICAgIGNvbnN0IGRlZiA9IF8xLnRyaW0oKTtcbiAgICAgICAgICAgIGlmICghZGVmKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY3NzUGFydHMgPSBkZWYuc3BsaXQoJ3snKTtcbiAgICAgICAgICAgIGNvbnN0IGNzc0NsYXNzZXMgPSBjc3NQYXJ0c1swXS5zcGxpdCgnLCcpO1xuICAgICAgICAgICAgY29uc3QgY3NzUHJvcHMgPSBjc3NQYXJ0c1sxXS5zcGxpdCgnOycpO1xuICAgICAgICAgICAgY3NzQ2xhc3Nlcy5mb3JFYWNoKChfKT0+e1xuICAgICAgICAgICAgICAgIGNvbnN0IGNzc0NsYXNzID0gXy50cmltKCk7XG4gICAgICAgICAgICAgICAgaWYgKCFjc3NDbGFzcykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHByb3BzID0gZG9jdW1lbnQuc3R5bGVzW2Nzc0NsYXNzXSB8fCB7fTtcbiAgICAgICAgICAgICAgICBjc3NQcm9wcy5mb3JFYWNoKChjc3NQcm9wKT0+e1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm9wID0gY3NzUHJvcC5pbmRleE9mKCc6Jyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBjc3NQcm9wLnN1YnN0cigwLCBwcm9wKS50cmltKCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gY3NzUHJvcC5zdWJzdHIocHJvcCArIDEsIGNzc1Byb3AubGVuZ3RoIC0gcHJvcCkudHJpbSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSAmJiB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHNbbmFtZV0gPSBuZXcgUHJvcGVydHkoZG9jdW1lbnQsIG5hbWUsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LnN0eWxlc1tjc3NDbGFzc10gPSBwcm9wcztcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5zdHlsZXNTcGVjaWZpY2l0eVtjc3NDbGFzc10gPSBnZXRTZWxlY3RvclNwZWNpZmljaXR5KGNzc0NsYXNzKTtcbiAgICAgICAgICAgICAgICBpZiAoY3NzQ2xhc3MgPT09ICdAZm9udC1mYWNlJykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmb250RmFtaWx5ID0gcHJvcHNbJ2ZvbnQtZmFtaWx5J10uZ2V0U3RyaW5nKCkucmVwbGFjZSgvXCJ8Jy9nLCAnJyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNyY3MgPSBwcm9wcy5zcmMuZ2V0U3RyaW5nKCkuc3BsaXQoJywnKTtcbiAgICAgICAgICAgICAgICAgICAgc3Jjcy5mb3JFYWNoKChzcmMpPT57XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3JjLmluZGV4T2YoJ2Zvcm1hdChcInN2Z1wiKScpID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVybCA9IHBhcnNlRXh0ZXJuYWxVcmwoc3JjKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodXJsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgbmV3IFNWR0ZvbnRMb2FkZXIoZG9jdW1lbnQpLmxvYWQoZm9udEZhbWlseSwgdXJsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5TdHlsZUVsZW1lbnQucGFyc2VFeHRlcm5hbFVybCA9IHBhcnNlRXh0ZXJuYWxVcmw7XG5cbmNsYXNzIFVzZUVsZW1lbnQgZXh0ZW5kcyBSZW5kZXJlZEVsZW1lbnQge1xuICAgIHNldENvbnRleHQoY3R4KSB7XG4gICAgICAgIHN1cGVyLnNldENvbnRleHQoY3R4KTtcbiAgICAgICAgY29uc3QgeEF0dHIgPSB0aGlzLmdldEF0dHJpYnV0ZSgneCcpO1xuICAgICAgICBjb25zdCB5QXR0ciA9IHRoaXMuZ2V0QXR0cmlidXRlKCd5Jyk7XG4gICAgICAgIGlmICh4QXR0ci5oYXNWYWx1ZSgpKSB7XG4gICAgICAgICAgICBjdHgudHJhbnNsYXRlKHhBdHRyLmdldFBpeGVscygneCcpLCAwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoeUF0dHIuaGFzVmFsdWUoKSkge1xuICAgICAgICAgICAgY3R4LnRyYW5zbGF0ZSgwLCB5QXR0ci5nZXRQaXhlbHMoJ3knKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcGF0aChjdHgpIHtcbiAgICAgICAgY29uc3QgeyBlbGVtZW50ICB9ID0gdGhpcztcbiAgICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgICAgIGVsZW1lbnQucGF0aChjdHgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJlbmRlckNoaWxkcmVuKGN0eCkge1xuICAgICAgICBjb25zdCB7IGRvY3VtZW50ICwgZWxlbWVudCAgfSA9IHRoaXM7XG4gICAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgICAgICBsZXQgdGVtcFN2ZyA9IGVsZW1lbnQ7XG4gICAgICAgICAgICBpZiAoZWxlbWVudC50eXBlID09PSAnc3ltYm9sJykge1xuICAgICAgICAgICAgICAgIC8vIHJlbmRlciBtZSB1c2luZyBhIHRlbXBvcmFyeSBzdmcgZWxlbWVudCBpbiBzeW1ib2wgY2FzZXMgKGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRy9zdHJ1Y3QuaHRtbCNVc2VFbGVtZW50KVxuICAgICAgICAgICAgICAgIHRlbXBTdmcgPSBuZXcgU1ZHRWxlbWVudChkb2N1bWVudCk7XG4gICAgICAgICAgICAgICAgdGVtcFN2Zy5hdHRyaWJ1dGVzLnZpZXdCb3ggPSBuZXcgUHJvcGVydHkoZG9jdW1lbnQsICd2aWV3Qm94JywgZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3ZpZXdCb3gnKS5nZXRTdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgdGVtcFN2Zy5hdHRyaWJ1dGVzLnByZXNlcnZlQXNwZWN0UmF0aW8gPSBuZXcgUHJvcGVydHkoZG9jdW1lbnQsICdwcmVzZXJ2ZUFzcGVjdFJhdGlvJywgZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3ByZXNlcnZlQXNwZWN0UmF0aW8nKS5nZXRTdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgdGVtcFN2Zy5hdHRyaWJ1dGVzLm92ZXJmbG93ID0gbmV3IFByb3BlcnR5KGRvY3VtZW50LCAnb3ZlcmZsb3cnLCBlbGVtZW50LmdldEF0dHJpYnV0ZSgnb3ZlcmZsb3cnKS5nZXRTdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgdGVtcFN2Zy5jaGlsZHJlbiA9IGVsZW1lbnQuY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgLy8gZWxlbWVudCBpcyBzdGlsbCB0aGUgcGFyZW50IG9mIHRoZSBjaGlsZHJlblxuICAgICAgICAgICAgICAgIGVsZW1lbnQuc3R5bGVzLm9wYWNpdHkgPSBuZXcgUHJvcGVydHkoZG9jdW1lbnQsICdvcGFjaXR5JywgdGhpcy5jYWxjdWxhdGVPcGFjaXR5KCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRlbXBTdmcudHlwZSA9PT0gJ3N2ZycpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB3aWR0aFN0eWxlID0gdGhpcy5nZXRTdHlsZSgnd2lkdGgnLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgaGVpZ2h0U3R5bGUgPSB0aGlzLmdldFN0eWxlKCdoZWlnaHQnLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgLy8gaWYgc3ltYm9sIG9yIHN2ZywgaW5oZXJpdCB3aWR0aC9oZWlnaHQgZnJvbSBtZVxuICAgICAgICAgICAgICAgIGlmICh3aWR0aFN0eWxlLmhhc1ZhbHVlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGVtcFN2Zy5hdHRyaWJ1dGVzLndpZHRoID0gbmV3IFByb3BlcnR5KGRvY3VtZW50LCAnd2lkdGgnLCB3aWR0aFN0eWxlLmdldFN0cmluZygpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGhlaWdodFN0eWxlLmhhc1ZhbHVlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGVtcFN2Zy5hdHRyaWJ1dGVzLmhlaWdodCA9IG5ldyBQcm9wZXJ0eShkb2N1bWVudCwgJ2hlaWdodCcsIGhlaWdodFN0eWxlLmdldFN0cmluZygpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBvbGRQYXJlbnQgPSB0ZW1wU3ZnLnBhcmVudDtcbiAgICAgICAgICAgIHRlbXBTdmcucGFyZW50ID0gdGhpcztcbiAgICAgICAgICAgIHRlbXBTdmcucmVuZGVyKGN0eCk7XG4gICAgICAgICAgICB0ZW1wU3ZnLnBhcmVudCA9IG9sZFBhcmVudDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXRCb3VuZGluZ0JveChjdHgpIHtcbiAgICAgICAgY29uc3QgeyBlbGVtZW50ICB9ID0gdGhpcztcbiAgICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50LmdldEJvdW5kaW5nQm94KGN0eCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGVsZW1lbnRUcmFuc2Zvcm0oKSB7XG4gICAgICAgIGNvbnN0IHsgZG9jdW1lbnQgLCBlbGVtZW50ICB9ID0gdGhpcztcbiAgICAgICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gVHJhbnNmb3JtLmZyb21FbGVtZW50KGRvY3VtZW50LCBlbGVtZW50KTtcbiAgICB9XG4gICAgZ2V0IGVsZW1lbnQoKSB7XG4gICAgICAgIGlmICghdGhpcy5jYWNoZWRFbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLmNhY2hlZEVsZW1lbnQgPSB0aGlzLmdldEhyZWZBdHRyaWJ1dGUoKS5nZXREZWZpbml0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGVkRWxlbWVudDtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoLi4uYXJncyl7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3MpO1xuICAgICAgICB0aGlzLnR5cGUgPSAndXNlJztcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGltR2V0KGltZywgeCwgeSwgd2lkdGgsIF9oZWlnaHQsIHJnYmEpIHtcbiAgICByZXR1cm4gaW1nW3kgKiB3aWR0aCAqIDQgKyB4ICogNCArIHJnYmFdO1xufVxuZnVuY3Rpb24gaW1TZXQoaW1nLCB4LCB5LCB3aWR0aCwgX2hlaWdodCwgcmdiYSwgdmFsKSB7XG4gICAgaW1nW3kgKiB3aWR0aCAqIDQgKyB4ICogNCArIHJnYmFdID0gdmFsO1xufVxuZnVuY3Rpb24gbShtYXRyaXgsIGksIHYpIHtcbiAgICBjb25zdCBtaSA9IG1hdHJpeFtpXTtcbiAgICByZXR1cm4gbWkgKiB2O1xufVxuZnVuY3Rpb24gYyhhLCBtMSwgbTIsIG0zKSB7XG4gICAgcmV0dXJuIG0xICsgTWF0aC5jb3MoYSkgKiBtMiArIE1hdGguc2luKGEpICogbTM7XG59XG5jbGFzcyBGZUNvbG9yTWF0cml4RWxlbWVudCBleHRlbmRzIEVsZW1lbnQge1xuICAgIGFwcGx5KGN0eCwgX3gsIF95LCB3aWR0aCwgaGVpZ2h0KSB7XG4gICAgICAgIC8vIGFzc3VtaW5nIHg9PTAgJiYgeT09MCBmb3Igbm93XG4gICAgICAgIGNvbnN0IHsgaW5jbHVkZU9wYWNpdHkgLCBtYXRyaXggIH0gPSB0aGlzO1xuICAgICAgICBjb25zdCBzcmNEYXRhID0gY3R4LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgZm9yKGxldCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKXtcbiAgICAgICAgICAgIGZvcihsZXQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKXtcbiAgICAgICAgICAgICAgICBjb25zdCByID0gaW1HZXQoc3JjRGF0YS5kYXRhLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCAwKTtcbiAgICAgICAgICAgICAgICBjb25zdCBnID0gaW1HZXQoc3JjRGF0YS5kYXRhLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCAxKTtcbiAgICAgICAgICAgICAgICBjb25zdCBiID0gaW1HZXQoc3JjRGF0YS5kYXRhLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCAyKTtcbiAgICAgICAgICAgICAgICBjb25zdCBhID0gaW1HZXQoc3JjRGF0YS5kYXRhLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCAzKTtcbiAgICAgICAgICAgICAgICBsZXQgbnIgPSBtKG1hdHJpeCwgMCwgcikgKyBtKG1hdHJpeCwgMSwgZykgKyBtKG1hdHJpeCwgMiwgYikgKyBtKG1hdHJpeCwgMywgYSkgKyBtKG1hdHJpeCwgNCwgMSk7XG4gICAgICAgICAgICAgICAgbGV0IG5nID0gbShtYXRyaXgsIDUsIHIpICsgbShtYXRyaXgsIDYsIGcpICsgbShtYXRyaXgsIDcsIGIpICsgbShtYXRyaXgsIDgsIGEpICsgbShtYXRyaXgsIDksIDEpO1xuICAgICAgICAgICAgICAgIGxldCBuYiA9IG0obWF0cml4LCAxMCwgcikgKyBtKG1hdHJpeCwgMTEsIGcpICsgbShtYXRyaXgsIDEyLCBiKSArIG0obWF0cml4LCAxMywgYSkgKyBtKG1hdHJpeCwgMTQsIDEpO1xuICAgICAgICAgICAgICAgIGxldCBuYSA9IG0obWF0cml4LCAxNSwgcikgKyBtKG1hdHJpeCwgMTYsIGcpICsgbShtYXRyaXgsIDE3LCBiKSArIG0obWF0cml4LCAxOCwgYSkgKyBtKG1hdHJpeCwgMTksIDEpO1xuICAgICAgICAgICAgICAgIGlmIChpbmNsdWRlT3BhY2l0eSkge1xuICAgICAgICAgICAgICAgICAgICBuciA9IDA7XG4gICAgICAgICAgICAgICAgICAgIG5nID0gMDtcbiAgICAgICAgICAgICAgICAgICAgbmIgPSAwO1xuICAgICAgICAgICAgICAgICAgICBuYSAqPSBhIC8gMjU1O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpbVNldChzcmNEYXRhLmRhdGEsIHgsIHksIHdpZHRoLCBoZWlnaHQsIDAsIG5yKTtcbiAgICAgICAgICAgICAgICBpbVNldChzcmNEYXRhLmRhdGEsIHgsIHksIHdpZHRoLCBoZWlnaHQsIDEsIG5nKTtcbiAgICAgICAgICAgICAgICBpbVNldChzcmNEYXRhLmRhdGEsIHgsIHksIHdpZHRoLCBoZWlnaHQsIDIsIG5iKTtcbiAgICAgICAgICAgICAgICBpbVNldChzcmNEYXRhLmRhdGEsIHgsIHksIHdpZHRoLCBoZWlnaHQsIDMsIG5hKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjdHguY2xlYXJSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICBjdHgucHV0SW1hZ2VEYXRhKHNyY0RhdGEsIDAsIDApO1xuICAgIH1cbiAgICBjb25zdHJ1Y3Rvcihkb2N1bWVudCwgbm9kZSwgY2FwdHVyZVRleHROb2Rlcyl7XG4gICAgICAgIHN1cGVyKGRvY3VtZW50LCBub2RlLCBjYXB0dXJlVGV4dE5vZGVzKTtcbiAgICAgICAgdGhpcy50eXBlID0gJ2ZlQ29sb3JNYXRyaXgnO1xuICAgICAgICBsZXQgbWF0cml4ID0gdG9OdW1iZXJzKHRoaXMuZ2V0QXR0cmlidXRlKCd2YWx1ZXMnKS5nZXRTdHJpbmcoKSk7XG4gICAgICAgIHN3aXRjaCh0aGlzLmdldEF0dHJpYnV0ZSgndHlwZScpLmdldFN0cmluZygnbWF0cml4Jykpe1xuICAgICAgICAgICAgY2FzZSAnc2F0dXJhdGUnOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcyA9IG1hdHJpeFswXTtcbiAgICAgICAgICAgICAgICAgICAgLyogZXNsaW50LWRpc2FibGUgYXJyYXktZWxlbWVudC1uZXdsaW5lICovIG1hdHJpeCA9IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIDAuMjEzICsgMC43ODcgKiBzLFxuICAgICAgICAgICAgICAgICAgICAgICAgMC43MTUgLSAwLjcxNSAqIHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAwLjA3MiAtIDAuMDcyICogcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgMC4yMTMgLSAwLjIxMyAqIHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAwLjcxNSArIDAuMjg1ICogcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIDAuMDcyIC0gMC4wNzIgKiBzLFxuICAgICAgICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAwLjIxMyAtIDAuMjEzICogcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIDAuNzE1IC0gMC43MTUgKiBzLFxuICAgICAgICAgICAgICAgICAgICAgICAgMC4wNzIgKyAwLjkyOCAqIHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnaHVlUm90YXRlJzpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGEgPSBtYXRyaXhbMF0gKiBNYXRoLlBJIC8gMTgwO1xuICAgICAgICAgICAgICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBhcnJheS1lbGVtZW50LW5ld2xpbmUgKi8gbWF0cml4ID0gW1xuICAgICAgICAgICAgICAgICAgICAgICAgYyhhLCAwLjIxMywgMC43ODcsIC0wLjIxMyksXG4gICAgICAgICAgICAgICAgICAgICAgICBjKGEsIDAuNzE1LCAtMC43MTUsIC0wLjcxNSksXG4gICAgICAgICAgICAgICAgICAgICAgICBjKGEsIDAuMDcyLCAtMC4wNzIsIDAuOTI4KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgYyhhLCAwLjIxMywgLTAuMjEzLCAwLjE0MyksXG4gICAgICAgICAgICAgICAgICAgICAgICBjKGEsIDAuNzE1LCAwLjI4NSwgMC4xNCksXG4gICAgICAgICAgICAgICAgICAgICAgICBjKGEsIDAuMDcyLCAtMC4wNzIsIC0wLjI4MyksXG4gICAgICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMoYSwgMC4yMTMsIC0wLjIxMywgLTAuNzg3KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMoYSwgMC43MTUsIC0wLjcxNSwgMC43MTUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYyhhLCAwLjA3MiwgMC45MjgsIDAuMDcyKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdsdW1pbmFuY2VUb0FscGhhJzpcbiAgICAgICAgICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBhcnJheS1lbGVtZW50LW5ld2xpbmUgKi8gbWF0cml4ID0gW1xuICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAwLjIxMjUsXG4gICAgICAgICAgICAgICAgICAgIDAuNzE1NCxcbiAgICAgICAgICAgICAgICAgICAgMC4wNzIxLFxuICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1hdHJpeCA9IG1hdHJpeDtcbiAgICAgICAgdGhpcy5pbmNsdWRlT3BhY2l0eSA9IHRoaXMuZ2V0QXR0cmlidXRlKCdpbmNsdWRlT3BhY2l0eScpLmhhc1ZhbHVlKCk7XG4gICAgfVxufVxuXG5jbGFzcyBNYXNrRWxlbWVudCBleHRlbmRzIEVsZW1lbnQge1xuICAgIGFwcGx5KGN0eCwgZWxlbWVudCkge1xuICAgICAgICBjb25zdCB7IGRvY3VtZW50ICB9ID0gdGhpcztcbiAgICAgICAgLy8gcmVuZGVyIGFzIHRlbXAgc3ZnXG4gICAgICAgIGxldCB4ID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ3gnKS5nZXRQaXhlbHMoJ3gnKTtcbiAgICAgICAgbGV0IHkgPSB0aGlzLmdldEF0dHJpYnV0ZSgneScpLmdldFBpeGVscygneScpO1xuICAgICAgICBsZXQgd2lkdGggPSB0aGlzLmdldFN0eWxlKCd3aWR0aCcpLmdldFBpeGVscygneCcpO1xuICAgICAgICBsZXQgaGVpZ2h0ID0gdGhpcy5nZXRTdHlsZSgnaGVpZ2h0JykuZ2V0UGl4ZWxzKCd5Jyk7XG4gICAgICAgIGlmICghd2lkdGggJiYgIWhlaWdodCkge1xuICAgICAgICAgICAgY29uc3QgYm91bmRpbmdCb3ggPSBuZXcgQm91bmRpbmdCb3goKTtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpPT57XG4gICAgICAgICAgICAgICAgYm91bmRpbmdCb3guYWRkQm91bmRpbmdCb3goY2hpbGQuZ2V0Qm91bmRpbmdCb3goY3R4KSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHggPSBNYXRoLmZsb29yKGJvdW5kaW5nQm94LngxKTtcbiAgICAgICAgICAgIHkgPSBNYXRoLmZsb29yKGJvdW5kaW5nQm94LnkxKTtcbiAgICAgICAgICAgIHdpZHRoID0gTWF0aC5mbG9vcihib3VuZGluZ0JveC53aWR0aCk7XG4gICAgICAgICAgICBoZWlnaHQgPSBNYXRoLmZsb29yKGJvdW5kaW5nQm94LmhlaWdodCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaWdub3JlZFN0eWxlcyA9IHRoaXMucmVtb3ZlU3R5bGVzKGVsZW1lbnQsIE1hc2tFbGVtZW50Lmlnbm9yZVN0eWxlcyk7XG4gICAgICAgIGNvbnN0IG1hc2tDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVDYW52YXMoeCArIHdpZHRoLCB5ICsgaGVpZ2h0KTtcbiAgICAgICAgY29uc3QgbWFza0N0eCA9IG1hc2tDYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICAgICAgZG9jdW1lbnQuc2NyZWVuLnNldERlZmF1bHRzKG1hc2tDdHgpO1xuICAgICAgICB0aGlzLnJlbmRlckNoaWxkcmVuKG1hc2tDdHgpO1xuICAgICAgICAvLyBjb252ZXJ0IG1hc2sgdG8gYWxwaGEgd2l0aCBhIGZha2Ugbm9kZVxuICAgICAgICAvLyBUT0RPOiByZWZhY3RvciBvdXQgYXBwbHkgZnJvbSBmZUNvbG9yTWF0cml4XG4gICAgICAgIG5ldyBGZUNvbG9yTWF0cml4RWxlbWVudChkb2N1bWVudCwge1xuICAgICAgICAgICAgbm9kZVR5cGU6IDEsXG4gICAgICAgICAgICBjaGlsZE5vZGVzOiBbXSxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGVOYW1lOiAndHlwZScsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiAnbHVtaW5hbmNlVG9BbHBoYSdcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZU5hbWU6ICdpbmNsdWRlT3BhY2l0eScsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiAndHJ1ZSdcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgIH0pLmFwcGx5KG1hc2tDdHgsIDAsIDAsIHggKyB3aWR0aCwgeSArIGhlaWdodCk7XG4gICAgICAgIGNvbnN0IHRtcENhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUNhbnZhcyh4ICsgd2lkdGgsIHkgKyBoZWlnaHQpO1xuICAgICAgICBjb25zdCB0bXBDdHggPSB0bXBDYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICAgICAgZG9jdW1lbnQuc2NyZWVuLnNldERlZmF1bHRzKHRtcEN0eCk7XG4gICAgICAgIGVsZW1lbnQucmVuZGVyKHRtcEN0eCk7XG4gICAgICAgIHRtcEN0eC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnZGVzdGluYXRpb24taW4nO1xuICAgICAgICB0bXBDdHguZmlsbFN0eWxlID0gbWFza0N0eC5jcmVhdGVQYXR0ZXJuKG1hc2tDYW52YXMsICduby1yZXBlYXQnKTtcbiAgICAgICAgdG1wQ3R4LmZpbGxSZWN0KDAsIDAsIHggKyB3aWR0aCwgeSArIGhlaWdodCk7XG4gICAgICAgIGN0eC5maWxsU3R5bGUgPSB0bXBDdHguY3JlYXRlUGF0dGVybih0bXBDYW52YXMsICduby1yZXBlYXQnKTtcbiAgICAgICAgY3R4LmZpbGxSZWN0KDAsIDAsIHggKyB3aWR0aCwgeSArIGhlaWdodCk7XG4gICAgICAgIC8vIHJlYXNzaWduIG1hc2tcbiAgICAgICAgdGhpcy5yZXN0b3JlU3R5bGVzKGVsZW1lbnQsIGlnbm9yZWRTdHlsZXMpO1xuICAgIH1cbiAgICByZW5kZXIoXykge1xuICAgIC8vIE5PIFJFTkRFUlxuICAgIH1cbiAgICBjb25zdHJ1Y3RvciguLi5hcmdzKXtcbiAgICAgICAgc3VwZXIoLi4uYXJncyk7XG4gICAgICAgIHRoaXMudHlwZSA9ICdtYXNrJztcbiAgICB9XG59XG5NYXNrRWxlbWVudC5pZ25vcmVTdHlsZXMgPSBbXG4gICAgJ21hc2snLFxuICAgICd0cmFuc2Zvcm0nLFxuICAgICdjbGlwLXBhdGgnXG5dO1xuXG5jb25zdCBub29wID0gKCk9Pntcbi8vIE5PT1Bcbn07XG5jbGFzcyBDbGlwUGF0aEVsZW1lbnQgZXh0ZW5kcyBFbGVtZW50IHtcbiAgICBhcHBseShjdHgpIHtcbiAgICAgICAgY29uc3QgeyBkb2N1bWVudCAgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGNvbnRleHRQcm90byA9IFJlZmxlY3QuZ2V0UHJvdG90eXBlT2YoY3R4KTtcbiAgICAgICAgY29uc3QgeyBiZWdpblBhdGggLCBjbG9zZVBhdGggIH0gPSBjdHg7XG4gICAgICAgIGlmIChjb250ZXh0UHJvdG8pIHtcbiAgICAgICAgICAgIGNvbnRleHRQcm90by5iZWdpblBhdGggPSBub29wO1xuICAgICAgICAgICAgY29udGV4dFByb3RvLmNsb3NlUGF0aCA9IG5vb3A7XG4gICAgICAgIH1cbiAgICAgICAgUmVmbGVjdC5hcHBseShiZWdpblBhdGgsIGN0eCwgW10pO1xuICAgICAgICB0aGlzLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkKT0+e1xuICAgICAgICAgICAgaWYgKCEoJ3BhdGgnIGluIGNoaWxkKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCB0cmFuc2Zvcm0gPSAnZWxlbWVudFRyYW5zZm9ybScgaW4gY2hpbGQgPyBjaGlsZC5lbGVtZW50VHJhbnNmb3JtKCkgOiBudWxsIC8vIGhhbmRsZSA8dXNlIC8+XG4gICAgICAgICAgICA7XG4gICAgICAgICAgICBpZiAoIXRyYW5zZm9ybSkge1xuICAgICAgICAgICAgICAgIHRyYW5zZm9ybSA9IFRyYW5zZm9ybS5mcm9tRWxlbWVudChkb2N1bWVudCwgY2hpbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRyYW5zZm9ybSkge1xuICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5hcHBseShjdHgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2hpbGQucGF0aChjdHgpO1xuICAgICAgICAgICAgaWYgKGNvbnRleHRQcm90bykge1xuICAgICAgICAgICAgICAgIGNvbnRleHRQcm90by5jbG9zZVBhdGggPSBjbG9zZVBhdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHJhbnNmb3JtKSB7XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtLnVuYXBwbHkoY3R4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIFJlZmxlY3QuYXBwbHkoY2xvc2VQYXRoLCBjdHgsIFtdKTtcbiAgICAgICAgY3R4LmNsaXAoKTtcbiAgICAgICAgaWYgKGNvbnRleHRQcm90bykge1xuICAgICAgICAgICAgY29udGV4dFByb3RvLmJlZ2luUGF0aCA9IGJlZ2luUGF0aDtcbiAgICAgICAgICAgIGNvbnRleHRQcm90by5jbG9zZVBhdGggPSBjbG9zZVBhdGg7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVuZGVyKF8pIHtcbiAgICAvLyBOTyBSRU5ERVJcbiAgICB9XG4gICAgY29uc3RydWN0b3IoLi4uYXJncyl7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3MpO1xuICAgICAgICB0aGlzLnR5cGUgPSAnY2xpcFBhdGgnO1xuICAgIH1cbn1cblxuY2xhc3MgRmlsdGVyRWxlbWVudCBleHRlbmRzIEVsZW1lbnQge1xuICAgIGFwcGx5KGN0eCwgZWxlbWVudCkge1xuICAgICAgICAvLyByZW5kZXIgYXMgdGVtcCBzdmdcbiAgICAgICAgY29uc3QgeyBkb2N1bWVudCAsIGNoaWxkcmVuICB9ID0gdGhpcztcbiAgICAgICAgY29uc3QgYm91bmRpbmdCb3ggPSAnZ2V0Qm91bmRpbmdCb3gnIGluIGVsZW1lbnQgPyBlbGVtZW50LmdldEJvdW5kaW5nQm94KGN0eCkgOiBudWxsO1xuICAgICAgICBpZiAoIWJvdW5kaW5nQm94KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHB4ID0gMDtcbiAgICAgICAgbGV0IHB5ID0gMDtcbiAgICAgICAgY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpPT57XG4gICAgICAgICAgICBjb25zdCBlZmQgPSBjaGlsZC5leHRyYUZpbHRlckRpc3RhbmNlIHx8IDA7XG4gICAgICAgICAgICBweCA9IE1hdGgubWF4KHB4LCBlZmQpO1xuICAgICAgICAgICAgcHkgPSBNYXRoLm1heChweSwgZWZkKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHdpZHRoID0gTWF0aC5mbG9vcihib3VuZGluZ0JveC53aWR0aCk7XG4gICAgICAgIGNvbnN0IGhlaWdodCA9IE1hdGguZmxvb3IoYm91bmRpbmdCb3guaGVpZ2h0KTtcbiAgICAgICAgY29uc3QgdG1wQ2FudmFzV2lkdGggPSB3aWR0aCArIDIgKiBweDtcbiAgICAgICAgY29uc3QgdG1wQ2FudmFzSGVpZ2h0ID0gaGVpZ2h0ICsgMiAqIHB5O1xuICAgICAgICBpZiAodG1wQ2FudmFzV2lkdGggPCAxIHx8IHRtcENhbnZhc0hlaWdodCA8IDEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB4ID0gTWF0aC5mbG9vcihib3VuZGluZ0JveC54KTtcbiAgICAgICAgY29uc3QgeSA9IE1hdGguZmxvb3IoYm91bmRpbmdCb3gueSk7XG4gICAgICAgIGNvbnN0IGlnbm9yZWRTdHlsZXMgPSB0aGlzLnJlbW92ZVN0eWxlcyhlbGVtZW50LCBGaWx0ZXJFbGVtZW50Lmlnbm9yZVN0eWxlcyk7XG4gICAgICAgIGNvbnN0IHRtcENhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUNhbnZhcyh0bXBDYW52YXNXaWR0aCwgdG1wQ2FudmFzSGVpZ2h0KTtcbiAgICAgICAgY29uc3QgdG1wQ3R4ID0gdG1wQ2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gICAgICAgIGRvY3VtZW50LnNjcmVlbi5zZXREZWZhdWx0cyh0bXBDdHgpO1xuICAgICAgICB0bXBDdHgudHJhbnNsYXRlKC14ICsgcHgsIC15ICsgcHkpO1xuICAgICAgICBlbGVtZW50LnJlbmRlcih0bXBDdHgpO1xuICAgICAgICAvLyBhcHBseSBmaWx0ZXJzXG4gICAgICAgIGNoaWxkcmVuLmZvckVhY2goKGNoaWxkKT0+e1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjaGlsZC5hcHBseSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIGNoaWxkLmFwcGx5KHRtcEN0eCwgMCwgMCwgdG1wQ2FudmFzV2lkdGgsIHRtcENhbnZhc0hlaWdodCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICAvLyByZW5kZXIgb24gbWVcbiAgICAgICAgY3R4LmRyYXdJbWFnZSh0bXBDYW52YXMsIDAsIDAsIHRtcENhbnZhc1dpZHRoLCB0bXBDYW52YXNIZWlnaHQsIHggLSBweCwgeSAtIHB5LCB0bXBDYW52YXNXaWR0aCwgdG1wQ2FudmFzSGVpZ2h0KTtcbiAgICAgICAgdGhpcy5yZXN0b3JlU3R5bGVzKGVsZW1lbnQsIGlnbm9yZWRTdHlsZXMpO1xuICAgIH1cbiAgICByZW5kZXIoXykge1xuICAgIC8vIE5PIFJFTkRFUlxuICAgIH1cbiAgICBjb25zdHJ1Y3RvciguLi5hcmdzKXtcbiAgICAgICAgc3VwZXIoLi4uYXJncyk7XG4gICAgICAgIHRoaXMudHlwZSA9ICdmaWx0ZXInO1xuICAgIH1cbn1cbkZpbHRlckVsZW1lbnQuaWdub3JlU3R5bGVzID0gW1xuICAgICdmaWx0ZXInLFxuICAgICd0cmFuc2Zvcm0nLFxuICAgICdjbGlwLXBhdGgnXG5dO1xuXG5jbGFzcyBGZURyb3BTaGFkb3dFbGVtZW50IGV4dGVuZHMgRWxlbWVudCB7XG4gICAgYXBwbHkoXywgX3gsIF95LCBfd2lkdGgsIF9oZWlnaHQpIHtcbiAgICAvLyBUT0RPOiBpbXBsZW1lbnRcbiAgICB9XG4gICAgY29uc3RydWN0b3IoZG9jdW1lbnQsIG5vZGUsIGNhcHR1cmVUZXh0Tm9kZXMpe1xuICAgICAgICBzdXBlcihkb2N1bWVudCwgbm9kZSwgY2FwdHVyZVRleHROb2Rlcyk7XG4gICAgICAgIHRoaXMudHlwZSA9ICdmZURyb3BTaGFkb3cnO1xuICAgICAgICB0aGlzLmFkZFN0eWxlc0Zyb21TdHlsZURlZmluaXRpb24oKTtcbiAgICB9XG59XG5cbmNsYXNzIEZlTW9ycGhvbG9neUVsZW1lbnQgZXh0ZW5kcyBFbGVtZW50IHtcbiAgICBhcHBseShfLCBfeCwgX3ksIF93aWR0aCwgX2hlaWdodCkge1xuICAgIC8vIFRPRE86IGltcGxlbWVudFxuICAgIH1cbiAgICBjb25zdHJ1Y3RvciguLi5hcmdzKXtcbiAgICAgICAgc3VwZXIoLi4uYXJncyk7XG4gICAgICAgIHRoaXMudHlwZSA9ICdmZU1vcnBob2xvZ3knO1xuICAgIH1cbn1cblxuY2xhc3MgRmVDb21wb3NpdGVFbGVtZW50IGV4dGVuZHMgRWxlbWVudCB7XG4gICAgYXBwbHkoXywgX3gsIF95LCBfd2lkdGgsIF9oZWlnaHQpIHtcbiAgICAvLyBUT0RPOiBpbXBsZW1lbnRcbiAgICB9XG4gICAgY29uc3RydWN0b3IoLi4uYXJncyl7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3MpO1xuICAgICAgICB0aGlzLnR5cGUgPSAnZmVDb21wb3NpdGUnO1xuICAgIH1cbn1cblxuY2xhc3MgRmVHYXVzc2lhbkJsdXJFbGVtZW50IGV4dGVuZHMgRWxlbWVudCB7XG4gICAgYXBwbHkoY3R4LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KSB7XG4gICAgICAgIGNvbnN0IHsgZG9jdW1lbnQgLCBibHVyUmFkaXVzICB9ID0gdGhpcztcbiAgICAgICAgY29uc3QgYm9keSA9IGRvY3VtZW50LndpbmRvdyA/IGRvY3VtZW50LndpbmRvdy5kb2N1bWVudC5ib2R5IDogbnVsbDtcbiAgICAgICAgY29uc3QgY2FudmFzID0gY3R4LmNhbnZhcztcbiAgICAgICAgLy8gU3RhY2tCbHVyIHJlcXVpcmVzIGNhbnZhcyBiZSBvbiBkb2N1bWVudFxuICAgICAgICBjYW52YXMuaWQgPSBkb2N1bWVudC5nZXRVbmlxdWVJZCgpO1xuICAgICAgICBpZiAoYm9keSkge1xuICAgICAgICAgICAgY2FudmFzLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgICAgICBib2R5LmFwcGVuZENoaWxkKGNhbnZhcyk7XG4gICAgICAgIH1cbiAgICAgICAgY2FudmFzUkdCQShjYW52YXMsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGJsdXJSYWRpdXMpO1xuICAgICAgICBpZiAoYm9keSkge1xuICAgICAgICAgICAgYm9keS5yZW1vdmVDaGlsZChjYW52YXMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKGRvY3VtZW50LCBub2RlLCBjYXB0dXJlVGV4dE5vZGVzKXtcbiAgICAgICAgc3VwZXIoZG9jdW1lbnQsIG5vZGUsIGNhcHR1cmVUZXh0Tm9kZXMpO1xuICAgICAgICB0aGlzLnR5cGUgPSAnZmVHYXVzc2lhbkJsdXInO1xuICAgICAgICB0aGlzLmJsdXJSYWRpdXMgPSBNYXRoLmZsb29yKHRoaXMuZ2V0QXR0cmlidXRlKCdzdGREZXZpYXRpb24nKS5nZXROdW1iZXIoKSk7XG4gICAgICAgIHRoaXMuZXh0cmFGaWx0ZXJEaXN0YW5jZSA9IHRoaXMuYmx1clJhZGl1cztcbiAgICB9XG59XG5cbmNsYXNzIFRpdGxlRWxlbWVudCBleHRlbmRzIEVsZW1lbnQge1xuICAgIGNvbnN0cnVjdG9yKC4uLmFyZ3Mpe1xuICAgICAgICBzdXBlciguLi5hcmdzKTtcbiAgICAgICAgdGhpcy50eXBlID0gJ3RpdGxlJztcbiAgICB9XG59XG5cbmNsYXNzIERlc2NFbGVtZW50IGV4dGVuZHMgRWxlbWVudCB7XG4gICAgY29uc3RydWN0b3IoLi4uYXJncyl7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3MpO1xuICAgICAgICB0aGlzLnR5cGUgPSAnZGVzYyc7XG4gICAgfVxufVxuXG5jb25zdCBlbGVtZW50cyA9IHtcbiAgICAnc3ZnJzogU1ZHRWxlbWVudCxcbiAgICAncmVjdCc6IFJlY3RFbGVtZW50LFxuICAgICdjaXJjbGUnOiBDaXJjbGVFbGVtZW50LFxuICAgICdlbGxpcHNlJzogRWxsaXBzZUVsZW1lbnQsXG4gICAgJ2xpbmUnOiBMaW5lRWxlbWVudCxcbiAgICAncG9seWxpbmUnOiBQb2x5bGluZUVsZW1lbnQsXG4gICAgJ3BvbHlnb24nOiBQb2x5Z29uRWxlbWVudCxcbiAgICAncGF0aCc6IFBhdGhFbGVtZW50LFxuICAgICdwYXR0ZXJuJzogUGF0dGVybkVsZW1lbnQsXG4gICAgJ21hcmtlcic6IE1hcmtlckVsZW1lbnQsXG4gICAgJ2RlZnMnOiBEZWZzRWxlbWVudCxcbiAgICAnbGluZWFyR3JhZGllbnQnOiBMaW5lYXJHcmFkaWVudEVsZW1lbnQsXG4gICAgJ3JhZGlhbEdyYWRpZW50JzogUmFkaWFsR3JhZGllbnRFbGVtZW50LFxuICAgICdzdG9wJzogU3RvcEVsZW1lbnQsXG4gICAgJ2FuaW1hdGUnOiBBbmltYXRlRWxlbWVudCxcbiAgICAnYW5pbWF0ZUNvbG9yJzogQW5pbWF0ZUNvbG9yRWxlbWVudCxcbiAgICAnYW5pbWF0ZVRyYW5zZm9ybSc6IEFuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LFxuICAgICdmb250JzogRm9udEVsZW1lbnQsXG4gICAgJ2ZvbnQtZmFjZSc6IEZvbnRGYWNlRWxlbWVudCxcbiAgICAnbWlzc2luZy1nbHlwaCc6IE1pc3NpbmdHbHlwaEVsZW1lbnQsXG4gICAgJ2dseXBoJzogR2x5cGhFbGVtZW50LFxuICAgICd0ZXh0JzogVGV4dEVsZW1lbnQsXG4gICAgJ3RzcGFuJzogVFNwYW5FbGVtZW50LFxuICAgICd0cmVmJzogVFJlZkVsZW1lbnQsXG4gICAgJ2EnOiBBRWxlbWVudCxcbiAgICAndGV4dFBhdGgnOiBUZXh0UGF0aEVsZW1lbnQsXG4gICAgJ2ltYWdlJzogSW1hZ2VFbGVtZW50LFxuICAgICdnJzogR0VsZW1lbnQsXG4gICAgJ3N5bWJvbCc6IFN5bWJvbEVsZW1lbnQsXG4gICAgJ3N0eWxlJzogU3R5bGVFbGVtZW50LFxuICAgICd1c2UnOiBVc2VFbGVtZW50LFxuICAgICdtYXNrJzogTWFza0VsZW1lbnQsXG4gICAgJ2NsaXBQYXRoJzogQ2xpcFBhdGhFbGVtZW50LFxuICAgICdmaWx0ZXInOiBGaWx0ZXJFbGVtZW50LFxuICAgICdmZURyb3BTaGFkb3cnOiBGZURyb3BTaGFkb3dFbGVtZW50LFxuICAgICdmZU1vcnBob2xvZ3knOiBGZU1vcnBob2xvZ3lFbGVtZW50LFxuICAgICdmZUNvbXBvc2l0ZSc6IEZlQ29tcG9zaXRlRWxlbWVudCxcbiAgICAnZmVDb2xvck1hdHJpeCc6IEZlQ29sb3JNYXRyaXhFbGVtZW50LFxuICAgICdmZUdhdXNzaWFuQmx1cic6IEZlR2F1c3NpYW5CbHVyRWxlbWVudCxcbiAgICAndGl0bGUnOiBUaXRsZUVsZW1lbnQsXG4gICAgJ2Rlc2MnOiBEZXNjRWxlbWVudFxufTtcblxuZnVuY3Rpb24gY3JlYXRlQ2FudmFzKHdpZHRoLCBoZWlnaHQpIHtcbiAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICBjYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgIHJldHVybiBjYW52YXM7XG59XG5hc3luYyBmdW5jdGlvbiBjcmVhdGVJbWFnZShzcmMpIHtcbiAgICBsZXQgYW5vbnltb3VzQ3Jvc3NPcmlnaW4gPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHZvaWQgMCA/IGFyZ3VtZW50c1sxXSA6IGZhbHNlO1xuICAgIGNvbnN0IGltYWdlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XG4gICAgaWYgKGFub255bW91c0Nyb3NzT3JpZ2luKSB7XG4gICAgICAgIGltYWdlLmNyb3NzT3JpZ2luID0gJ0Fub255bW91cyc7XG4gICAgfVxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KT0+e1xuICAgICAgICBpbWFnZS5vbmxvYWQgPSAoKT0+e1xuICAgICAgICAgICAgcmVzb2x2ZShpbWFnZSk7XG4gICAgICAgIH07XG4gICAgICAgIGltYWdlLm9uZXJyb3IgPSAoX2V2ZW50LCBfc291cmNlLCBfbGluZW5vLCBfY29sbm8sIGVycm9yKT0+e1xuICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfTtcbiAgICAgICAgaW1hZ2Uuc3JjID0gc3JjO1xuICAgIH0pO1xufVxuY29uc3QgREVGQVVMVF9FTV9TSVpFID0gMTI7XG5jbGFzcyBEb2N1bWVudCB7XG4gICAgYmluZENyZWF0ZUltYWdlKGNyZWF0ZUltYWdlMSwgYW5vbnltb3VzQ3Jvc3NPcmlnaW4pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBhbm9ueW1vdXNDcm9zc09yaWdpbiA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICByZXR1cm4gKHNvdXJjZSwgZm9yY2VBbm9ueW1vdXNDcm9zc09yaWdpbik9PmNyZWF0ZUltYWdlMShzb3VyY2UsIHR5cGVvZiBmb3JjZUFub255bW91c0Nyb3NzT3JpZ2luID09PSAnYm9vbGVhbicgPyBmb3JjZUFub255bW91c0Nyb3NzT3JpZ2luIDogYW5vbnltb3VzQ3Jvc3NPcmlnaW4pXG4gICAgICAgICAgICA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNyZWF0ZUltYWdlMTtcbiAgICB9XG4gICAgZ2V0IHdpbmRvdygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2NyZWVuLndpbmRvdztcbiAgICB9XG4gICAgZ2V0IGZldGNoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zY3JlZW4uZmV0Y2g7XG4gICAgfVxuICAgIGdldCBjdHgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNjcmVlbi5jdHg7XG4gICAgfVxuICAgIGdldCBlbVNpemUoKSB7XG4gICAgICAgIGNvbnN0IHsgZW1TaXplU3RhY2sgIH0gPSB0aGlzO1xuICAgICAgICByZXR1cm4gZW1TaXplU3RhY2tbZW1TaXplU3RhY2subGVuZ3RoIC0gMV0gfHwgREVGQVVMVF9FTV9TSVpFO1xuICAgIH1cbiAgICBzZXQgZW1TaXplKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IHsgZW1TaXplU3RhY2sgIH0gPSB0aGlzO1xuICAgICAgICBlbVNpemVTdGFjay5wdXNoKHZhbHVlKTtcbiAgICB9XG4gICAgcG9wRW1TaXplKCkge1xuICAgICAgICBjb25zdCB7IGVtU2l6ZVN0YWNrICB9ID0gdGhpcztcbiAgICAgICAgZW1TaXplU3RhY2sucG9wKCk7XG4gICAgfVxuICAgIGdldFVuaXF1ZUlkKCkge1xuICAgICAgICByZXR1cm4gXCJjYW52Z1wiLmNvbmNhdCgrK3RoaXMudW5pcXVlSWQpO1xuICAgIH1cbiAgICBpc0ltYWdlc0xvYWRlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW1hZ2VzLmV2ZXJ5KChfKT0+Xy5sb2FkZWRcbiAgICAgICAgKTtcbiAgICB9XG4gICAgaXNGb250c0xvYWRlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9udHMuZXZlcnkoKF8pPT5fLmxvYWRlZFxuICAgICAgICApO1xuICAgIH1cbiAgICBjcmVhdGVEb2N1bWVudEVsZW1lbnQoZG9jdW1lbnQpIHtcbiAgICAgICAgY29uc3QgZG9jdW1lbnRFbGVtZW50ID0gdGhpcy5jcmVhdGVFbGVtZW50KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCk7XG4gICAgICAgIGRvY3VtZW50RWxlbWVudC5yb290ID0gdHJ1ZTtcbiAgICAgICAgZG9jdW1lbnRFbGVtZW50LmFkZFN0eWxlc0Zyb21TdHlsZURlZmluaXRpb24oKTtcbiAgICAgICAgdGhpcy5kb2N1bWVudEVsZW1lbnQgPSBkb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgIHJldHVybiBkb2N1bWVudEVsZW1lbnQ7XG4gICAgfVxuICAgIGNyZWF0ZUVsZW1lbnQobm9kZSkge1xuICAgICAgICBjb25zdCBlbGVtZW50VHlwZSA9IG5vZGUubm9kZU5hbWUucmVwbGFjZSgvXlteOl0rOi8sICcnKTtcbiAgICAgICAgY29uc3QgRWxlbWVudFR5cGUgPSBEb2N1bWVudC5lbGVtZW50VHlwZXNbZWxlbWVudFR5cGVdO1xuICAgICAgICBpZiAoRWxlbWVudFR5cGUpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRWxlbWVudFR5cGUodGhpcywgbm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBVbmtub3duRWxlbWVudCh0aGlzLCBub2RlKTtcbiAgICB9XG4gICAgY3JlYXRlVGV4dE5vZGUobm9kZSkge1xuICAgICAgICByZXR1cm4gbmV3IFRleHROb2RlKHRoaXMsIG5vZGUpO1xuICAgIH1cbiAgICBzZXRWaWV3Qm94KGNvbmZpZykge1xuICAgICAgICB0aGlzLnNjcmVlbi5zZXRWaWV3Qm94KHtcbiAgICAgICAgICAgIGRvY3VtZW50OiB0aGlzLFxuICAgICAgICAgICAgLi4uY29uZmlnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvcihjYW52ZywgeyByb290RW1TaXplID1ERUZBVUxUX0VNX1NJWkUgLCBlbVNpemUgPURFRkFVTFRfRU1fU0laRSAsIGNyZWF0ZUNhbnZhczogY3JlYXRlQ2FudmFzMSA9IERvY3VtZW50LmNyZWF0ZUNhbnZhcyAsIGNyZWF0ZUltYWdlOiBjcmVhdGVJbWFnZTIgPSBEb2N1bWVudC5jcmVhdGVJbWFnZSAsIGFub255bW91c0Nyb3NzT3JpZ2luICB9ID0ge30pe1xuICAgICAgICB0aGlzLmNhbnZnID0gY2Fudmc7XG4gICAgICAgIHRoaXMuZGVmaW5pdGlvbnMgPSB7fTtcbiAgICAgICAgdGhpcy5zdHlsZXMgPSB7fTtcbiAgICAgICAgdGhpcy5zdHlsZXNTcGVjaWZpY2l0eSA9IHt9O1xuICAgICAgICB0aGlzLmltYWdlcyA9IFtdO1xuICAgICAgICB0aGlzLmZvbnRzID0gW107XG4gICAgICAgIHRoaXMuZW1TaXplU3RhY2sgPSBbXTtcbiAgICAgICAgdGhpcy51bmlxdWVJZCA9IDA7XG4gICAgICAgIHRoaXMuc2NyZWVuID0gY2Fudmcuc2NyZWVuO1xuICAgICAgICB0aGlzLnJvb3RFbVNpemUgPSByb290RW1TaXplO1xuICAgICAgICB0aGlzLmVtU2l6ZSA9IGVtU2l6ZTtcbiAgICAgICAgdGhpcy5jcmVhdGVDYW52YXMgPSBjcmVhdGVDYW52YXMxO1xuICAgICAgICB0aGlzLmNyZWF0ZUltYWdlID0gdGhpcy5iaW5kQ3JlYXRlSW1hZ2UoY3JlYXRlSW1hZ2UyLCBhbm9ueW1vdXNDcm9zc09yaWdpbik7XG4gICAgICAgIHRoaXMuc2NyZWVuLndhaXQoKCk9PnRoaXMuaXNJbWFnZXNMb2FkZWQoKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnNjcmVlbi53YWl0KCgpPT50aGlzLmlzRm9udHNMb2FkZWQoKVxuICAgICAgICApO1xuICAgIH1cbn1cbkRvY3VtZW50LmNyZWF0ZUNhbnZhcyA9IGNyZWF0ZUNhbnZhcztcbkRvY3VtZW50LmNyZWF0ZUltYWdlID0gY3JlYXRlSW1hZ2U7XG5Eb2N1bWVudC5lbGVtZW50VHlwZXMgPSBlbGVtZW50cztcblxuLyoqXG4gKiBTVkcgcmVuZGVyZXIgb24gY2FudmFzLlxuICovIGNsYXNzIENhbnZnIHtcbiAgICAvKipcbiAgICogQ3JlYXRlIENhbnZnIGluc3RhbmNlIGZyb20gU1ZHIHNvdXJjZSBzdHJpbmcgb3IgVVJMLlxuICAgKiBAcGFyYW0gY3R4IC0gUmVuZGVyaW5nIGNvbnRleHQuXG4gICAqIEBwYXJhbSBzdmcgLSBTVkcgc291cmNlIHN0cmluZyBvciBVUkwuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gUmVuZGVyaW5nIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIENhbnZnIGluc3RhbmNlLlxuICAgKi8gc3RhdGljIGFzeW5jIGZyb20oY3R4LCBzdmcpIHtcbiAgICAgICAgbGV0IG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHZvaWQgMCA/IGFyZ3VtZW50c1syXSA6IHt9O1xuICAgICAgICBjb25zdCBwYXJzZXIgPSBuZXcgUGFyc2VyKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBzdmdEb2N1bWVudCA9IGF3YWl0IHBhcnNlci5wYXJzZShzdmcpO1xuICAgICAgICByZXR1cm4gbmV3IENhbnZnKGN0eCwgc3ZnRG9jdW1lbnQsIG9wdGlvbnMpO1xuICAgIH1cbiAgICAvKipcbiAgICogQ3JlYXRlIENhbnZnIGluc3RhbmNlIGZyb20gU1ZHIHNvdXJjZSBzdHJpbmcuXG4gICAqIEBwYXJhbSBjdHggLSBSZW5kZXJpbmcgY29udGV4dC5cbiAgICogQHBhcmFtIHN2ZyAtIFNWRyBzb3VyY2Ugc3RyaW5nLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFJlbmRlcmluZyBvcHRpb25zLlxuICAgKiBAcmV0dXJucyBDYW52ZyBpbnN0YW5jZS5cbiAgICovIHN0YXRpYyBmcm9tU3RyaW5nKGN0eCwgc3ZnKSB7XG4gICAgICAgIGxldCBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMl0gOiB7fTtcbiAgICAgICAgY29uc3QgcGFyc2VyID0gbmV3IFBhcnNlcihvcHRpb25zKTtcbiAgICAgICAgY29uc3Qgc3ZnRG9jdW1lbnQgPSBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKHN2Zyk7XG4gICAgICAgIHJldHVybiBuZXcgQ2FudmcoY3R4LCBzdmdEb2N1bWVudCwgb3B0aW9ucyk7XG4gICAgfVxuICAgIC8qKlxuICAgKiBDcmVhdGUgbmV3IENhbnZnIGluc3RhbmNlIHdpdGggaW5oZXJpdGVkIG9wdGlvbnMuXG4gICAqIEBwYXJhbSBjdHggLSBSZW5kZXJpbmcgY29udGV4dC5cbiAgICogQHBhcmFtIHN2ZyAtIFNWRyBzb3VyY2Ugc3RyaW5nIG9yIFVSTC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBSZW5kZXJpbmcgb3B0aW9ucy5cbiAgICogQHJldHVybnMgQ2FudmcgaW5zdGFuY2UuXG4gICAqLyBmb3JrKGN0eCwgc3ZnKSB7XG4gICAgICAgIGxldCBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMl0gOiB7fTtcbiAgICAgICAgcmV0dXJuIENhbnZnLmZyb20oY3R4LCBzdmcsIHtcbiAgICAgICAgICAgIC4uLnRoaXMub3B0aW9ucyxcbiAgICAgICAgICAgIC4uLm9wdGlvbnNcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgKiBDcmVhdGUgbmV3IENhbnZnIGluc3RhbmNlIHdpdGggaW5oZXJpdGVkIG9wdGlvbnMuXG4gICAqIEBwYXJhbSBjdHggLSBSZW5kZXJpbmcgY29udGV4dC5cbiAgICogQHBhcmFtIHN2ZyAtIFNWRyBzb3VyY2Ugc3RyaW5nLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFJlbmRlcmluZyBvcHRpb25zLlxuICAgKiBAcmV0dXJucyBDYW52ZyBpbnN0YW5jZS5cbiAgICovIGZvcmtTdHJpbmcoY3R4LCBzdmcpIHtcbiAgICAgICAgbGV0IG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHZvaWQgMCA/IGFyZ3VtZW50c1syXSA6IHt9O1xuICAgICAgICByZXR1cm4gQ2FudmcuZnJvbVN0cmluZyhjdHgsIHN2Zywge1xuICAgICAgICAgICAgLi4udGhpcy5vcHRpb25zLFxuICAgICAgICAgICAgLi4ub3B0aW9uc1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAqIERvY3VtZW50IGlzIHJlYWR5IHByb21pc2UuXG4gICAqIEByZXR1cm5zIFJlYWR5IHByb21pc2UuXG4gICAqLyByZWFkeSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2NyZWVuLnJlYWR5KCk7XG4gICAgfVxuICAgIC8qKlxuICAgKiBEb2N1bWVudCBpcyByZWFkeSB2YWx1ZS5cbiAgICogQHJldHVybnMgSXMgcmVhZHkgb3Igbm90LlxuICAgKi8gaXNSZWFkeSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2NyZWVuLmlzUmVhZHkoKTtcbiAgICB9XG4gICAgLyoqXG4gICAqIFJlbmRlciBvbmx5IGZpcnN0IGZyYW1lLCBpZ25vcmluZyBhbmltYXRpb25zIGFuZCBtb3VzZS5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBSZW5kZXJpbmcgb3B0aW9ucy5cbiAgICovIGFzeW5jIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHZvaWQgMCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICAgICAgICB0aGlzLnN0YXJ0KHtcbiAgICAgICAgICAgIGVuYWJsZVJlZHJhdzogdHJ1ZSxcbiAgICAgICAgICAgIGlnbm9yZUFuaW1hdGlvbjogdHJ1ZSxcbiAgICAgICAgICAgIGlnbm9yZU1vdXNlOiB0cnVlLFxuICAgICAgICAgICAgLi4ub3B0aW9uc1xuICAgICAgICB9KTtcbiAgICAgICAgYXdhaXQgdGhpcy5yZWFkeSgpO1xuICAgICAgICB0aGlzLnN0b3AoKTtcbiAgICB9XG4gICAgLyoqXG4gICAqIFN0YXJ0IHJlbmRlcmluZy5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBSZW5kZXIgb3B0aW9ucy5cbiAgICovIHN0YXJ0KCkge1xuICAgICAgICBsZXQgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzBdIDoge307XG4gICAgICAgIGNvbnN0IHsgZG9jdW1lbnRFbGVtZW50ICwgc2NyZWVuICwgb3B0aW9uczogYmFzZU9wdGlvbnMgIH0gPSB0aGlzO1xuICAgICAgICBzY3JlZW4uc3RhcnQoZG9jdW1lbnRFbGVtZW50LCB7XG4gICAgICAgICAgICBlbmFibGVSZWRyYXc6IHRydWUsXG4gICAgICAgICAgICAuLi5iYXNlT3B0aW9ucyxcbiAgICAgICAgICAgIC4uLm9wdGlvbnNcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgKiBTdG9wIHJlbmRlcmluZy5cbiAgICovIHN0b3AoKSB7XG4gICAgICAgIHRoaXMuc2NyZWVuLnN0b3AoKTtcbiAgICB9XG4gICAgLyoqXG4gICAqIFJlc2l6ZSBTVkcgdG8gZml0IGluIGdpdmVuIHNpemUuXG4gICAqIEBwYXJhbSB3aWR0aFxuICAgKiBAcGFyYW0gaGVpZ2h0XG4gICAqIEBwYXJhbSBwcmVzZXJ2ZUFzcGVjdFJhdGlvXG4gICAqLyByZXNpemUod2lkdGgpIHtcbiAgICAgICAgbGV0IGhlaWdodCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzFdIDogd2lkdGgsIHByZXNlcnZlQXNwZWN0UmF0aW8gPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHZvaWQgMCA/IGFyZ3VtZW50c1syXSA6IGZhbHNlO1xuICAgICAgICB0aGlzLmRvY3VtZW50RWxlbWVudC5yZXNpemUod2lkdGgsIGhlaWdodCwgcHJlc2VydmVBc3BlY3RSYXRpbyk7XG4gICAgfVxuICAgIC8qKlxuICAgKiBNYWluIGNvbnN0cnVjdG9yLlxuICAgKiBAcGFyYW0gY3R4IC0gUmVuZGVyaW5nIGNvbnRleHQuXG4gICAqIEBwYXJhbSBzdmcgLSBTVkcgRG9jdW1lbnQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gUmVuZGVyaW5nIG9wdGlvbnMuXG4gICAqLyBjb25zdHJ1Y3RvcihjdHgsIHN2Zywgb3B0aW9ucyA9IHt9KXtcbiAgICAgICAgdGhpcy5wYXJzZXIgPSBuZXcgUGFyc2VyKG9wdGlvbnMpO1xuICAgICAgICB0aGlzLnNjcmVlbiA9IG5ldyBTY3JlZW4oY3R4LCBvcHRpb25zKTtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICAgICAgY29uc3QgZG9jdW1lbnQgPSBuZXcgRG9jdW1lbnQodGhpcywgb3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGRvY3VtZW50RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RWxlbWVudChzdmcpO1xuICAgICAgICB0aGlzLmRvY3VtZW50ID0gZG9jdW1lbnQ7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRFbGVtZW50ID0gZG9jdW1lbnRFbGVtZW50O1xuICAgIH1cbn1cblxuZXhwb3J0IHsgQUVsZW1lbnQsIEFuaW1hdGVDb2xvckVsZW1lbnQsIEFuaW1hdGVFbGVtZW50LCBBbmltYXRlVHJhbnNmb3JtRWxlbWVudCwgQm91bmRpbmdCb3gsIENCMSwgQ0IyLCBDQjMsIENCNCwgQ2FudmcsIENpcmNsZUVsZW1lbnQsIENsaXBQYXRoRWxlbWVudCwgRGVmc0VsZW1lbnQsIERlc2NFbGVtZW50LCBEb2N1bWVudCwgRWxlbWVudCwgRWxsaXBzZUVsZW1lbnQsIEZlQ29sb3JNYXRyaXhFbGVtZW50LCBGZUNvbXBvc2l0ZUVsZW1lbnQsIEZlRHJvcFNoYWRvd0VsZW1lbnQsIEZlR2F1c3NpYW5CbHVyRWxlbWVudCwgRmVNb3JwaG9sb2d5RWxlbWVudCwgRmlsdGVyRWxlbWVudCwgRm9udCwgRm9udEVsZW1lbnQsIEZvbnRGYWNlRWxlbWVudCwgR0VsZW1lbnQsIEdseXBoRWxlbWVudCwgR3JhZGllbnRFbGVtZW50LCBJbWFnZUVsZW1lbnQsIExpbmVFbGVtZW50LCBMaW5lYXJHcmFkaWVudEVsZW1lbnQsIE1hcmtlckVsZW1lbnQsIE1hc2tFbGVtZW50LCBNYXRyaXgsIE1pc3NpbmdHbHlwaEVsZW1lbnQsIE1vdXNlLCBQU0VVRE9fWkVSTywgUGFyc2VyLCBQYXRoRWxlbWVudCwgUGF0aFBhcnNlciwgUGF0dGVybkVsZW1lbnQsIFBvaW50LCBQb2x5Z29uRWxlbWVudCwgUG9seWxpbmVFbGVtZW50LCBQcm9wZXJ0eSwgUUIxLCBRQjIsIFFCMywgUmFkaWFsR3JhZGllbnRFbGVtZW50LCBSZWN0RWxlbWVudCwgUmVuZGVyZWRFbGVtZW50LCBSb3RhdGUsIFNWR0VsZW1lbnQsIFNWR0ZvbnRMb2FkZXIsIFNjYWxlLCBTY3JlZW4sIFNrZXcsIFNrZXdYLCBTa2V3WSwgU3RvcEVsZW1lbnQsIFN0eWxlRWxlbWVudCwgU3ltYm9sRWxlbWVudCwgVFJlZkVsZW1lbnQsIFRTcGFuRWxlbWVudCwgVGV4dEVsZW1lbnQsIFRleHRQYXRoRWxlbWVudCwgVGl0bGVFbGVtZW50LCBUcmFuc2Zvcm0sIFRyYW5zbGF0ZSwgVW5rbm93bkVsZW1lbnQsIFVzZUVsZW1lbnQsIFZpZXdQb3J0LCBjb21wcmVzc1NwYWNlcywgZWxlbWVudHMsIGdldFNlbGVjdG9yU3BlY2lmaWNpdHksIG5vcm1hbGl6ZUF0dHJpYnV0ZU5hbWUsIG5vcm1hbGl6ZUNvbG9yLCBwYXJzZUV4dGVybmFsVXJsLCBpbmRleCBhcyBwcmVzZXRzLCB0b01hdHJpeFZhbHVlLCB0b051bWJlcnMsIHRyaW1MZWZ0LCB0cmltUmlnaHQsIHZlY3Rvck1hZ25pdHVkZSwgdmVjdG9yc0FuZ2xlLCB2ZWN0b3JzUmF0aW8gfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxuIiwiaW1wb3J0IHsgSW1hZ2VUeXBlIH0gZnJvbSBcIi4vc3ZnLWNvbnZlcnRcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY2hlY2tTdXBwb3J0KHR5cGU6IEltYWdlVHlwZSk6IGJvb2xlYW4ge1xuICAgIGlmICh0eXBlID09IFwicG5nXCIpIHJldHVybiB0cnVlO1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBDbGlwYm9hcmRJdGVtLnN1cHBvcnRzKCh0eXBlID09IFwic3ZnXCIpID8gXCJpbWFnZS9zdmcreG1sXCIgOiBcImltYWdlL2pwZWdcIik7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyLCBcIiAtIGVycm9yID0gbm8gc3VwcG9ydCBmb3IgUE5HXCIpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufSIsImltcG9ydCAnLi9zdHlsZXMuc2Nzcyc7XG5pbXBvcnQgeyBnZXQgYXMgaWRiR2V0LCBzZXQgYXMgaWRiU2V0IH0gZnJvbSBcImlkYi1rZXl2YWxcIjtcbmltcG9ydCBjb252ZXJ0U1ZHLCB7IEltYWdlVHlwZSB9IGZyb20gXCIuL2xpYi9zdmctY29udmVydFwiO1xuaW1wb3J0IGNoZWNrU3VwcG9ydCBmcm9tIFwiLi9saWIvY2hlY2stc3VwcG9ydFwiO1xuXG5jb25zdCBET00gPSB7XG4gICAgXCJxclwiOiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNxclwiKSBhcyBTVkdFbGVtZW50KSxcbiAgICBcImNvbnRlbnRcIjogKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjY29udGVudFwiKSBhcyBIVE1MSW5wdXRFbGVtZW50KSxcbiAgICBcInRvZ2dsZVwiOiB7XG4gICAgICAgIFwiZGl2XCI6IChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI3RvZ2dsZVwiKSBhcyBIVE1MRGl2RWxlbWVudCksXG4gICAgICAgIFwic3ZnXCI6IChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI3RvZ2dsZS1zdmdcIikgYXMgSFRNTElucHV0RWxlbWVudCksXG4gICAgICAgIFwicG5nXCI6IChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI3RvZ2dsZS1wbmdcIikgYXMgSFRNTElucHV0RWxlbWVudCksXG4gICAgICAgIFwianBnXCI6IChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI3RvZ2dsZS1qcGdcIikgYXMgSFRNTElucHV0RWxlbWVudClcbiAgICB9LFxuICAgIFwiZXhwb3J0XCI6IHtcbiAgICAgICAgXCJkaXZcIjogKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjZXhwb3J0XCIpIGFzIEhUTUxEaXZFbGVtZW50KSxcbiAgICAgICAgXCJjb3B5XCI6IChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI2NvcHlcIikgYXMgSFRNTEJ1dHRvbkVsZW1lbnQpLFxuICAgICAgICBcImRvd25sb2FkXCI6IChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI2Rvd25sb2FkXCIpIGFzIEhUTUxCdXR0b25FbGVtZW50KVxuICAgIH1cbn1cblxuY29uc3QgZ2V0VHlwZTogKCkgPT4gSW1hZ2VUeXBlID0gKCkgPT4ge1xuICAgIGxldCB0eXBlOiBJbWFnZVR5cGU7XG5cbiAgICBpZiAoRE9NLnRvZ2dsZS5zdmcuY2hlY2tlZCkgdHlwZSA9IFwic3ZnXCI7XG4gICAgZWxzZSBpZiAoRE9NLnRvZ2dsZS5wbmcuY2hlY2tlZCkgdHlwZSA9IFwicG5nXCI7XG4gICAgZWxzZSB0eXBlID0gXCJqcGVnXCI7XG5cbiAgICByZXR1cm4gdHlwZTtcbn1cblxuY29uc3QgZ2V0RmlsZTogKCkgPT4gUHJvbWlzZTxCbG9iPiA9IGFzeW5jICgpID0+IHtcbiAgICBsZXQgdHlwZSA9IGdldFR5cGUoKTtcbiAgICBsZXQgZmlsZTogQmxvYjtcbiAgICBpZiAodHlwZSA9PSBcInN2Z1wiKSB7XG4gICAgICAgIGZpbGUgPSBuZXcgQmxvYihbRE9NLnFyLm91dGVySFRNTF0sIHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImltYWdlL3N2Zyt4bWxcIlxuICAgICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGZpbGUgPSBhd2FpdCBjb252ZXJ0U1ZHKERPTS5xciwgdHlwZSwgYXdhaXQgaWRiR2V0KFwic2l6ZVwiKSA/PyAyMDAwLCBhd2FpdCBpZGJHZXQoXCJzaXplXCIpID8/IDIwMDApO1xuICAgIH1cblxuICAgIHJldHVybiBmaWxlO1xufTtcbmNvbnN0IGRvd25sb2FkID0gYXN5bmMgKCkgPT4ge1xuICAgIGxldCB0eXBlID0gZ2V0VHlwZSgpO1xuICAgIGxldCBmaWxlID0gYXdhaXQgZ2V0RmlsZSgpO1xuICAgIGxldCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGZpbGUpO1xuXG4gICAgbGV0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcbiAgICBhLmhyZWYgPSB1cmw7XG4gICAgYS5kb3dubG9hZCA9IFwicXIuXCIgKyAoKHR5cGUgPT0gXCJqcGVnXCIpID8gXCJqcGdcIiA6IHR5cGUpO1xuICAgIGEuY2xpY2soKTtcblxuICAgIFVSTC5yZXZva2VPYmplY3RVUkwodXJsKTtcbn07XG5jb25zdCBjb3B5TmF0aXZlID0gYXN5bmMgKCkgPT4ge1xuICAgIGxldCBmaWxlID0gYXdhaXQgZ2V0RmlsZSgpO1xuICAgIGxldCBjbGlwYm9hcmRPcHRzOiBQYXJ0aWFsPFJlY29yZDxzdHJpbmcsIEJsb2I+PiA9IHt9O1xuICAgIGNsaXBib2FyZE9wdHNbZmlsZS50eXBlXSA9IGZpbGU7XG4gICAgYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZShbbmV3IENsaXBib2FyZEl0ZW0oY2xpcGJvYXJkT3B0cyBhcyBSZWNvcmQ8c3RyaW5nLCBCbG9iPildKTtcbn1cbmNvbnN0IGNvcHkgPSBhc3luYyAoKSA9PiB7XG4gICAgbGV0IHsgc3RhdGU6IHBlcm1pc3Npb24gfSA9IGF3YWl0IG5hdmlnYXRvci5wZXJtaXNzaW9ucy5xdWVyeSh7XG4gICAgICAgIFwibmFtZVwiOiBcImNsaXBib2FyZC13cml0ZVwiIGFzIHVua25vd24gYXMgUGVybWlzc2lvbk5hbWVcbiAgICB9KTtcbiAgICBpZiAocGVybWlzc2lvbiAhPSBcImdyYW50ZWRcIikge1xuICAgICAgICBET00uZXhwb3J0LmNvcHkuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHN3aXRjaCAoZ2V0VHlwZSgpKSB7XG4gICAgICAgIGNhc2UgXCJwbmdcIjoge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGNvcHlOYXRpdmUoKTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwic3ZnXCI6IHtcbiAgICAgICAgICAgIGxldCBjb3B5QXMgPSBhd2FpdCBpZGJHZXQoXCJjb3B5LXN2Z1wiKTtcbiAgICAgICAgICAgIGlmIChjaGVja1N1cHBvcnQoXCJzdmdcIikgJiYgKCFjb3B5QXMgfHwgY29weUFzID09IFwic3ZnXCIpKSByZXR1cm4gYXdhaXQgY29weU5hdGl2ZSgpO1xuICAgICAgICAgICAgaWYgKGNvcHlBcyA9PSBcInBuZ1wiKSB7XG4gICAgICAgICAgICAgICAgRE9NLnRvZ2dsZS5wbmcuY2hlY2tlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgaWRiU2V0KFwiZXhwb3J0LXR5cGVcIiwgXCJwbmdcIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGNvcHlOYXRpdmUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KERPTS5xci5vdXRlckhUTUwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJqcGVnXCI6IHtcbiAgICAgICAgICAgIGxldCBjb3B5QXMgPSBhd2FpdCBpZGJHZXQoXCJjb3B5LWpwZ1wiKTtcbiAgICAgICAgICAgIGlmIChjaGVja1N1cHBvcnQoXCJqcGVnXCIpICYmICghY29weUFzIHx8IGNvcHlBcyA9PSBcImpwZ1wiKSkgcmV0dXJuIGF3YWl0IGNvcHlOYXRpdmUoKTtcbiAgICAgICAgICAgIGlmICghY29weUFzIHx8IGNvcHlBcyA9PSBcInBuZ1wiKSB7XG4gICAgICAgICAgICAgICAgRE9NLnRvZ2dsZS5wbmcuY2hlY2tlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgaWRiU2V0KFwiZXhwb3J0LXR5cGVcIiwgXCJwbmdcIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGNvcHlOYXRpdmUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGF3YWl0IChhd2FpdCBnZXRGaWxlKCkpLnRleHQoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiV3JvbmcgdHlwZVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5jb25zdCB1cGRhdGVRUiA9ICgpID0+IHtcbiAgICBpZGJTZXQoXCJjb250ZW50XCIsIERPTS5jb250ZW50LnZhbHVlKTtcbiAgICAvLyBAdHMtaWdub3JlIG5vdCBhbiBucG0gcGFja2FnZVxuICAgIGxldCBlbGVtID0gUVJDb2RlKERPTS5jb250ZW50LnZhbHVlKSBhcyBTVkdFbGVtZW50O1xuICAgIGVsZW0uaWQgPSBcInFyXCI7XG4gICAgZWxlbS5yZW1vdmVBdHRyaWJ1dGUoXCJ3aWR0aFwiKTtcbiAgICBlbGVtLnJlbW92ZUF0dHJpYnV0ZShcImhlaWdodFwiKTtcbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI3FyXCIpLm91dGVySFRNTCA9IGVsZW0ub3V0ZXJIVE1MO1xufTtcbndpbmRvdy5vbmxvYWQgPSBhc3luYyAoKSA9PiB7XG4gICAgd2luZG93Lm9ua2V5ZG93biA9IChlOiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgIGlmICghZS5jdHJsS2V5ICYmICFlLm1ldGFLZXkpIHJldHVybjtcbiAgICAgICAgc3dpdGNoIChlLmtleSkge1xuICAgICAgICAgICAgY2FzZSBcInZcIjoge1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBpZGJTZXQoXCJleHBvcnQtdHlwZVwiLCBcInN2Z1wiKTtcbiAgICAgICAgICAgICAgICBET00udG9nZ2xlLnN2Zy5jaGVja2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJwXCI6IHtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgaWRiU2V0KFwiZXhwb3J0LXR5cGVcIiwgXCJwbmdcIik7XG4gICAgICAgICAgICAgICAgRE9NLnRvZ2dsZS5wbmcuY2hlY2tlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwialwiOiB7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGlkYlNldChcImV4cG9ydC10eXBlXCIsIFwianBlZ1wiKTtcbiAgICAgICAgICAgICAgICBET00udG9nZ2xlLmpwZy5jaGVja2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJzXCI6XG4gICAgICAgICAgICBjYXNlIFwiZFwiOiB7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGRvd25sb2FkKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiY1wiOiB7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGNvcHkoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCIsXCI6IHtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBcIi9zZXR0aW5ncy5odG1sXCI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGxldCBjb250ZW50ID0gYXdhaXQgaWRiR2V0KFwiY29udGVudFwiKTtcbiAgICBET00uY29udGVudC52YWx1ZSA9IGNvbnRlbnQgPz8gd2luZG93LmxvY2F0aW9uLm9yaWdpbjtcbiAgICB1cGRhdGVRUigpO1xuICAgIERPTS5jb250ZW50Lm9ua2V5dXAgPSBET00uY29udGVudC5vbnBhc3RlID0gKCkgPT4gdXBkYXRlUVIoKTtcbiAgICBET00uY29udGVudC5kaXNhYmxlZCA9IGZhbHNlO1xuICAgIGxldCB0eXBlID0gYXdhaXQgaWRiR2V0KFwiZXhwb3J0LXR5cGVcIikgYXMgSW1hZ2VUeXBlID8/IFwicG5nXCI7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgXCJqcGVnXCI6IHtcbiAgICAgICAgICAgIERPTS50b2dnbGUuanBnLmNoZWNrZWQgPSB0cnVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcInN2Z1wiOiB7XG4gICAgICAgICAgICBET00udG9nZ2xlLnN2Zy5jaGVja2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJwbmdcIjoge1xuICAgICAgICAgICAgRE9NLnRvZ2dsZS5wbmcuY2hlY2tlZCA9IHRydWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICBET00udG9nZ2xlLmRpdi5vbmNsaWNrID0gKCkgPT4gaWRiU2V0KFwiZXhwb3J0LXR5cGVcIiwgZ2V0VHlwZSgpKTtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgZm9yIChsZXQgaSBvZiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiaW5wdXRbbmFtZT10b2dnbGUtc3RhdGVdXCIpKSB7XG4gICAgICAgIChpIGFzIEhUTUxJbnB1dEVsZW1lbnQpLmRpc2FibGVkID0gZmFsc2U7XG4gICAgfVxuICAgIERPTS5leHBvcnQuY29weS5vbmNsaWNrID0gY29weTtcbiAgICBET00uZXhwb3J0LmRvd25sb2FkLm9uY2xpY2sgPSBkb3dubG9hZDtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgZm9yIChsZXQgaSBvZiBET00uZXhwb3J0LmRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZShcImJ1dHRvblwiKSkge1xuICAgICAgICBpLmRpc2FibGVkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgd2luZG93Lm9uY2xpY2sgPSAoZSkgPT4ge1xuICAgICAgICBpZiAoKGUudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgIT0gXCJidXR0b25cIiAmJiAoZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLnRhZ05hbWUudG9Mb3dlckNhc2UoKSAhPSBcImlucHV0XCIpIHtcbiAgICAgICAgICAgIERPTS5jb250ZW50LnNlbGVjdCgpO1xuICAgICAgICB9XG4gICAgfVxufTsiLCJpbXBvcnQgeyBDYW52ZywgcHJlc2V0cywgSU9wdGlvbnMgfSBmcm9tIFwiY2FudmdcIjtcblxuZXhwb3J0IHR5cGUgQ29udmVydGFibGUgPSBcInBuZ1wiIHwgXCJqcGVnXCI7XG5cbmV4cG9ydCB0eXBlIEltYWdlVHlwZSA9IFwic3ZnXCIgfCBDb252ZXJ0YWJsZTtcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gY29udmVydChzdmc6IFNWR0VsZW1lbnQsIHR5cGU6IENvbnZlcnRhYmxlLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcik6IFByb21pc2U8QmxvYj4ge1xuICAgIGxldCBjYW52YXMgPSBuZXcgT2Zmc2NyZWVuQ2FudmFzKHdpZHRoLCBoZWlnaHQpO1xuICAgIGF3YWl0IChhd2FpdCBDYW52Zy5mcm9tKFxuICAgICAgICAoY2FudmFzKS5nZXRDb250ZXh0KCcyZCcpIGFzIE9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICAgICAgc3ZnLm91dGVySFRNTCxcbiAgICAgICAgcHJlc2V0cy5vZmZzY3JlZW4oKSBhcyBJT3B0aW9uc1xuICAgICkpLnJlbmRlcigpO1xuICAgIHJldHVybiBhd2FpdCBjYW52YXMuY29udmVydFRvQmxvYih7XG4gICAgICAgIFwidHlwZVwiOiBcImltYWdlL1wiICsgdHlwZVxuICAgIH0pO1xufSJdLCJuYW1lcyI6WyJnZXROYW5vU2Vjb25kcyIsImhydGltZSIsImxvYWRUaW1lIiwibW9kdWxlTG9hZFRpbWUiLCJub2RlTG9hZFRpbWUiLCJ1cFRpbWUiLCJwZXJmb3JtYW5jZSIsIm5vdyIsIm1vZHVsZSIsImV4cG9ydHMiLCJwcm9jZXNzIiwiaHIiLCJ1cHRpbWUiLCJEYXRlIiwiZ2V0VGltZSIsImNhbGwiLCJ0aGlzIiwicm9vdCIsIndpbmRvdyIsImciLCJ2ZW5kb3JzIiwic3VmZml4IiwicmFmIiwiY2FmIiwiaSIsImxlbmd0aCIsImxhc3QiLCJpZCIsInF1ZXVlIiwiZnJhbWVEdXJhdGlvbiIsImNhbGxiYWNrIiwiX25vdyIsIm5leHQiLCJNYXRoIiwibWF4Iiwic2V0VGltZW91dCIsImNwIiwic2xpY2UiLCJjYW5jZWxsZWQiLCJlIiwicm91bmQiLCJwdXNoIiwiaGFuZGxlIiwiZm4iLCJjYW5jZWwiLCJhcHBseSIsImFyZ3VtZW50cyIsInBvbHlmaWxsIiwib2JqZWN0IiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiY2FuY2VsQW5pbWF0aW9uRnJhbWUiLCJjb2xvcl9zdHJpbmciLCJvayIsImFscGhhIiwiY2hhckF0Iiwic3Vic3RyIiwicmVwbGFjZSIsInRvTG93ZXJDYXNlIiwic2ltcGxlX2NvbG9ycyIsImFsaWNlYmx1ZSIsImFudGlxdWV3aGl0ZSIsImFxdWEiLCJhcXVhbWFyaW5lIiwiYXp1cmUiLCJiZWlnZSIsImJpc3F1ZSIsImJsYWNrIiwiYmxhbmNoZWRhbG1vbmQiLCJibHVlIiwiYmx1ZXZpb2xldCIsImJyb3duIiwiYnVybHl3b29kIiwiY2FkZXRibHVlIiwiY2hhcnRyZXVzZSIsImNob2NvbGF0ZSIsImNvcmFsIiwiY29ybmZsb3dlcmJsdWUiLCJjb3Juc2lsayIsImNyaW1zb24iLCJjeWFuIiwiZGFya2JsdWUiLCJkYXJrY3lhbiIsImRhcmtnb2xkZW5yb2QiLCJkYXJrZ3JheSIsImRhcmtncmVlbiIsImRhcmtraGFraSIsImRhcmttYWdlbnRhIiwiZGFya29saXZlZ3JlZW4iLCJkYXJrb3JhbmdlIiwiZGFya29yY2hpZCIsImRhcmtyZWQiLCJkYXJrc2FsbW9uIiwiZGFya3NlYWdyZWVuIiwiZGFya3NsYXRlYmx1ZSIsImRhcmtzbGF0ZWdyYXkiLCJkYXJrdHVycXVvaXNlIiwiZGFya3Zpb2xldCIsImRlZXBwaW5rIiwiZGVlcHNreWJsdWUiLCJkaW1ncmF5IiwiZG9kZ2VyYmx1ZSIsImZlbGRzcGFyIiwiZmlyZWJyaWNrIiwiZmxvcmFsd2hpdGUiLCJmb3Jlc3RncmVlbiIsImZ1Y2hzaWEiLCJnYWluc2Jvcm8iLCJnaG9zdHdoaXRlIiwiZ29sZCIsImdvbGRlbnJvZCIsImdyYXkiLCJncmVlbiIsImdyZWVueWVsbG93IiwiaG9uZXlkZXciLCJob3RwaW5rIiwiaW5kaWFucmVkIiwiaW5kaWdvIiwiaXZvcnkiLCJraGFraSIsImxhdmVuZGVyIiwibGF2ZW5kZXJibHVzaCIsImxhd25ncmVlbiIsImxlbW9uY2hpZmZvbiIsImxpZ2h0Ymx1ZSIsImxpZ2h0Y29yYWwiLCJsaWdodGN5YW4iLCJsaWdodGdvbGRlbnJvZHllbGxvdyIsImxpZ2h0Z3JleSIsImxpZ2h0Z3JlZW4iLCJsaWdodHBpbmsiLCJsaWdodHNhbG1vbiIsImxpZ2h0c2VhZ3JlZW4iLCJsaWdodHNreWJsdWUiLCJsaWdodHNsYXRlYmx1ZSIsImxpZ2h0c2xhdGVncmF5IiwibGlnaHRzdGVlbGJsdWUiLCJsaWdodHllbGxvdyIsImxpbWUiLCJsaW1lZ3JlZW4iLCJsaW5lbiIsIm1hZ2VudGEiLCJtYXJvb24iLCJtZWRpdW1hcXVhbWFyaW5lIiwibWVkaXVtYmx1ZSIsIm1lZGl1bW9yY2hpZCIsIm1lZGl1bXB1cnBsZSIsIm1lZGl1bXNlYWdyZWVuIiwibWVkaXVtc2xhdGVibHVlIiwibWVkaXVtc3ByaW5nZ3JlZW4iLCJtZWRpdW10dXJxdW9pc2UiLCJtZWRpdW12aW9sZXRyZWQiLCJtaWRuaWdodGJsdWUiLCJtaW50Y3JlYW0iLCJtaXN0eXJvc2UiLCJtb2NjYXNpbiIsIm5hdmFqb3doaXRlIiwibmF2eSIsIm9sZGxhY2UiLCJvbGl2ZSIsIm9saXZlZHJhYiIsIm9yYW5nZSIsIm9yYW5nZXJlZCIsIm9yY2hpZCIsInBhbGVnb2xkZW5yb2QiLCJwYWxlZ3JlZW4iLCJwYWxldHVycXVvaXNlIiwicGFsZXZpb2xldHJlZCIsInBhcGF5YXdoaXAiLCJwZWFjaHB1ZmYiLCJwZXJ1IiwicGluayIsInBsdW0iLCJwb3dkZXJibHVlIiwicHVycGxlIiwicmViZWNjYXB1cnBsZSIsInJlZCIsInJvc3licm93biIsInJveWFsYmx1ZSIsInNhZGRsZWJyb3duIiwic2FsbW9uIiwic2FuZHlicm93biIsInNlYWdyZWVuIiwic2Vhc2hlbGwiLCJzaWVubmEiLCJzaWx2ZXIiLCJza3libHVlIiwic2xhdGVibHVlIiwic2xhdGVncmF5Iiwic25vdyIsInNwcmluZ2dyZWVuIiwic3RlZWxibHVlIiwidGFuIiwidGVhbCIsInRoaXN0bGUiLCJ0b21hdG8iLCJ0dXJxdW9pc2UiLCJ2aW9sZXQiLCJ2aW9sZXRyZWQiLCJ3aGVhdCIsIndoaXRlIiwid2hpdGVzbW9rZSIsInllbGxvdyIsInllbGxvd2dyZWVuIiwiY29sb3JfZGVmcyIsInJlIiwiZXhhbXBsZSIsImJpdHMiLCJwYXJzZUludCIsInBhcnNlRmxvYXQiLCJwcm9jZXNzb3IiLCJleGVjIiwiY2hhbm5lbHMiLCJyIiwiYiIsImlzTmFOIiwidG9SR0IiLCJ0b1JHQkEiLCJ0b0hleCIsInRvU3RyaW5nIiwiZ2V0SGVscFhNTCIsImV4YW1wbGVzIiwiQXJyYXkiLCJqIiwic2MiLCJ4bWwiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJzZXRBdHRyaWJ1dGUiLCJsaXN0X2l0ZW0iLCJsaXN0X2NvbG9yIiwiUkdCQ29sb3IiLCJleGFtcGxlX2RpdiIsInN0eWxlIiwiY3NzVGV4dCIsImFwcGVuZENoaWxkIiwiY3JlYXRlVGV4dE5vZGUiLCJsaXN0X2l0ZW1fdmFsdWUiLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJ1bmRlZmluZWQiLCJfX3dlYnBhY2tfbW9kdWxlc19fIiwiZ2xvYmFsVGhpcyIsIkZ1bmN0aW9uIiwicHJvbWlzaWZ5UmVxdWVzdCIsInJlcXVlc3QiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsIm9uY29tcGxldGUiLCJvbnN1Y2Nlc3MiLCJyZXN1bHQiLCJvbmFib3J0Iiwib25lcnJvciIsImVycm9yIiwiZGVmYXVsdEdldFN0b3JlRnVuYyIsImRlZmF1bHRHZXRTdG9yZSIsImRiTmFtZSIsInN0b3JlTmFtZSIsImluZGV4ZWREQiIsIm9wZW4iLCJvbnVwZ3JhZGVuZWVkZWQiLCJjcmVhdGVPYmplY3RTdG9yZSIsImRicCIsInR4TW9kZSIsInRoZW4iLCJkYiIsInRyYW5zYWN0aW9uIiwib2JqZWN0U3RvcmUiLCJjcmVhdGVTdG9yZSIsImdldCIsImtleSIsImN1c3RvbVN0b3JlIiwic3RvcmUiLCJzZXQiLCJ2YWx1ZSIsInB1dCIsInQiLCJPYmplY3QiLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiVHlwZUVycm9yIiwiU3RyaW5nIiwiY29uc3RydWN0b3IiLCJjcmVhdGUiLCJjb3MiLCJzaW4iLCJhIiwiRXJyb3IiLCJuIiwiUEkiLCJvIiwibEFyY0ZsYWciLCJzd2VlcEZsYWciLCJyWCIsInJZIiwicyIsIngiLCJ1IiwieSIsImFicyIsImgiLCJ4Um90IiwiYyIsInAiLCJwb3ciLCJzcXJ0IiwibSIsIk8iLCJsIiwiVCIsInYiLCJjWCIsImNZIiwicGhpMSIsImF0YW4yIiwicGhpMiIsInJlbGF0aXZlIiwieDEiLCJ5MSIsIngyIiwieTIiLCJOYU4iLCJ0eXBlIiwiXyIsIlNNT09USF9DVVJWRV9UTyIsIkNVUlZFX1RPIiwiU01PT1RIX1FVQURfVE8iLCJRVUFEX1RPIiwiTU9WRV9UTyIsIkNMT1NFX1BBVEgiLCJIT1JJWl9MSU5FX1RPIiwiTElORV9UTyIsIlZFUlRfTElORV9UTyIsImYiLCJOIiwiZCIsIkUiLCJBIiwiQyIsIk0iLCJSIiwiSSIsIlMiLCJMIiwiUk9VTkQiLCJUT19BQlMiLCJUT19SRUwiLCJOT1JNQUxJWkVfSFZaIiwiQVJDIiwiTk9STUFMSVpFX1NUIiwiUVRfVE9fQyIsIklORk8iLCJTQU5JVElaRSIsIkxJTkVfQ09NTUFORFMiLCJNQVRSSVgiLCJST1RBVEUiLCJUUkFOU0xBVEUiLCJTQ0FMRSIsIlNLRVdfWCIsImF0YW4iLCJTS0VXX1kiLCJYX0FYSVNfU1lNTUVUUlkiLCJZX0FYSVNfU1lNTUVUUlkiLCJBX1RPX0MiLCJtaW4iLCJjZWlsIiwiSCIsIkFOTk9UQVRFX0FSQ1MiLCJDTE9ORSIsIkNBTENVTEFURV9CT1VORFMiLCJtYXhYIiwibWluWCIsIm1heFkiLCJtaW5ZIiwiRFJBV0lOR19DT01NQU5EUyIsInciLCJtYXAiLCJVIiwidHJhbnNmb3JtIiwidG9BYnMiLCJ0b1JlbCIsIm5vcm1hbGl6ZUhWWiIsIm5vcm1hbGl6ZVNUIiwicXRUb0MiLCJhVG9DIiwic2FuaXRpemUiLCJ0cmFuc2xhdGUiLCJzY2FsZSIsInJvdGF0ZSIsIm1hdHJpeCIsInNrZXdYIiwic2tld1kiLCJ4U3ltbWV0cnkiLCJ5U3ltbWV0cnkiLCJhbm5vdGF0ZUFyY3MiLCJjaGFyQ29kZUF0IiwiY3VyTnVtYmVyIiwiY3VyQ29tbWFuZFR5cGUiLCJjdXJDb21tYW5kUmVsYXRpdmUiLCJjYW5QYXJzZUNvbW1hbmRPckNvbW1hIiwiY3VyTnVtYmVySGFzRXhwIiwiY3VyTnVtYmVySGFzRXhwRGlnaXRzIiwiY3VyTnVtYmVySGFzRGVjaW1hbCIsImN1ckFyZ3MiLCJmaW5pc2giLCJwYXJzZSIsIlN5bnRheEVycm9yIiwiTnVtYmVyIiwiZ2V0UHJvdG90eXBlT2YiLCJpc0FycmF5IiwiY29tbWFuZHMiLCJlbmNvZGUiLCJnZXRCb3VuZHMiLCJfdHlwZW9mIiwib2JqIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJtdWxUYWJsZSIsInNoZ1RhYmxlIiwicHJvY2Vzc0NhbnZhc1JHQkEiLCJjYW52YXMiLCJ0b3BYIiwidG9wWSIsIndpZHRoIiwiaGVpZ2h0IiwicmFkaXVzIiwiaW1hZ2VEYXRhIiwiZ2V0RWxlbWVudEJ5SWQiLCJjb250ZXh0IiwiZ2V0Q29udGV4dCIsImdldEltYWdlRGF0YSIsImdldEltYWdlRGF0YUZyb21DYW52YXMiLCJzdGFja0VuZCIsInBpeGVscyIsImRhdGEiLCJkaXYiLCJ3aWR0aE1pbnVzMSIsImhlaWdodE1pbnVzMSIsInJhZGl1c1BsdXMxIiwic3VtRmFjdG9yIiwic3RhY2tTdGFydCIsIkJsdXJTdGFjayIsInN0YWNrIiwic3RhY2tJbiIsInN0YWNrT3V0IiwieXciLCJ5aSIsIm11bFN1bSIsInNoZ1N1bSIsInByIiwicGciLCJwYiIsInBhIiwiX2kiLCJySW5TdW0iLCJnSW5TdW0iLCJiSW5TdW0iLCJhSW5TdW0iLCJyT3V0U3VtIiwiZ091dFN1bSIsImJPdXRTdW0iLCJhT3V0U3VtIiwiclN1bSIsImdTdW0iLCJiU3VtIiwiYVN1bSIsIl9pMiIsInJicyIsInBhSW5pdGlhbCIsIl9hMiIsIl9wIiwiX3N0YWNrT3V0IiwiX3IiLCJfZyIsIl9iIiwiX2EiLCJfeCIsIl9wciIsIl9wZyIsIl9wYiIsIl9wYSIsIl9yT3V0U3VtIiwiX2dPdXRTdW0iLCJfYk91dFN1bSIsIl9hT3V0U3VtIiwiX3JTdW0iLCJfZ1N1bSIsIl9iU3VtIiwiX2FTdW0iLCJfaTMiLCJ5cCIsIl9nSW5TdW0iLCJfYkluU3VtIiwiX2FJblN1bSIsIl9ySW5TdW0iLCJfaTQiLCJfcmJzIiwiX3kiLCJfcDIiLCJwcm9jZXNzSW1hZ2VEYXRhUkdCQSIsInB1dEltYWdlRGF0YSIsImluc3RhbmNlIiwiQ29uc3RydWN0b3IiLCJfY2xhc3NDYWxsQ2hlY2siLCJpbmRleCIsImZyZWV6ZSIsIm9mZnNjcmVlbiIsIkRPTVBhcnNlciIsIkRPTVBhcnNlckZhbGxiYWNrIiwicHJlc2V0IiwiaWdub3JlQW5pbWF0aW9uIiwiaWdub3JlTW91c2UiLCJjcmVhdGVDYW52YXMiLCJPZmZzY3JlZW5DYW52YXMiLCJjcmVhdGVJbWFnZSIsInVybCIsInJlc3BvbnNlIiwiZmV0Y2giLCJibG9iIiwiY3JlYXRlSW1hZ2VCaXRtYXAiLCJSZWZsZWN0IiwiZGVsZXRlUHJvcGVydHkiLCJub2RlIiwicGFyYW0iLCJsb2FkSW1hZ2UiLCJjb21wcmVzc1NwYWNlcyIsInN0ciIsInRvTnVtYmVycyIsIm1hdGNoZXMiLCJtYXRjaCIsImFsbFVwcGVyY2FzZSIsInBhcnNlRXh0ZXJuYWxVcmwiLCJ1cmxNYXRjaCIsImF0dHJpYnV0ZVJlZ2V4IiwiaWRSZWdleCIsImNsYXNzUmVnZXgiLCJwc2V1ZG9FbGVtZW50UmVnZXgiLCJwc2V1ZG9DbGFzc1dpdGhCcmFja2V0c1JlZ2V4IiwicHNldWRvQ2xhc3NSZWdleCIsImVsZW1lbnRSZWdleCIsImZpbmRTZWxlY3Rvck1hdGNoIiwic2VsZWN0b3IiLCJyZWdleCIsIlBTRVVET19aRVJPIiwidmVjdG9yTWFnbml0dWRlIiwidmVjdG9yc1JhdGlvIiwidmVjdG9yc0FuZ2xlIiwiYWNvcyIsIkNCMSIsIkNCMiIsIkNCMyIsIkNCNCIsIlFCMSIsIlFCMiIsIlFCMyIsIlByb3BlcnR5IiwiZW1wdHkiLCJzcGxpdCIsInNlcGFyYXRvciIsIm5hbWUiLCJnZXRTdHJpbmciLCJ0cmltIiwiaGFzVmFsdWUiLCJ6ZXJvSXNWYWx1ZSIsImlzU3RyaW5nIiwicmVnZXhwIiwidGVzdCIsImlzVXJsRGVmaW5pdGlvbiIsImlzUGl4ZWxzIiwiYXNTdHJpbmciLCJlbmRzV2l0aCIsInNldFZhbHVlIiwiZ2V0VmFsdWUiLCJkZWYiLCJnZXROdW1iZXIiLCJnZXRDb2xvciIsImNvbG9yIiwiaXNOb3JtYWxpemVkQ29sb3IiLCJzdGFydHNXaXRoIiwicmdiUGFydHMiLCJudW0iLCJpc0Zsb2F0Iiwibm9ybWFsaXplQ29sb3IiLCJnZXREcGkiLCJnZXRSZW0iLCJyb290RW1TaXplIiwiZ2V0RW0iLCJlbVNpemUiLCJnZXRVbml0cyIsImdldFBpeGVscyIsImF4aXNPcklzRm9udFNpemUiLCJwcm9jZXNzUGVyY2VudCIsImF4aXMiLCJpc0ZvbnRTaXplIiwidmlld1BvcnQiLCJzY3JlZW4iLCJjb21wdXRlU2l6ZSIsImdldE1pbGxpc2Vjb25kcyIsImdldFJhZGlhbnMiLCJnZXREZWZpbml0aW9uIiwiZGVmaW5pdGlvbnMiLCJnZXRGaWxsU3R5bGVEZWZpbml0aW9uIiwiZWxlbWVudCIsIm9wYWNpdHkiLCJjcmVhdGVHcmFkaWVudCIsImN0eCIsImNyZWF0ZVBhdHRlcm4iLCJnZXRIcmVmQXR0cmlidXRlIiwicGF0dGVyblRyYW5zZm9ybSIsImdldEF0dHJpYnV0ZSIsImdldFRleHRCYXNlbGluZSIsInRleHRCYXNlbGluZU1hcHBpbmciLCJhZGRPcGFjaXR5IiwibGVuIiwiY29tbWFzIiwiVmlld1BvcnQiLCJjbGVhciIsInZpZXdQb3J0cyIsInNldEN1cnJlbnQiLCJyZW1vdmVDdXJyZW50IiwicG9wIiwiZ2V0Um9vdCIsImdldERlZmF1bHQiLCJnZXRDdXJyZW50IiwiREVGQVVMVF9WSUVXUE9SVF9XSURUSCIsIkRFRkFVTFRfVklFV1BPUlRfSEVJR0hUIiwiUG9pbnQiLCJwb2ludCIsImRlZmF1bHRWYWx1ZSIsInBhcnNlU2NhbGUiLCJwYXJzZVBhdGgiLCJwYXRoIiwicG9pbnRzIiwicGF0aFBvaW50cyIsImFuZ2xlVG8iLCJhcHBseVRyYW5zZm9ybSIsInhwIiwiTW91c2UiLCJpc1dvcmtpbmciLCJ3b3JraW5nIiwic3RhcnQiLCJvbkNsaWNrIiwib25Nb3VzZU1vdmUiLCJvbmNsaWNrIiwib25tb3VzZW1vdmUiLCJzdG9wIiwiaGFzRXZlbnRzIiwiZXZlbnRzIiwicnVuRXZlbnRzIiwiZXZlbnRFbGVtZW50cyIsImN1cnNvciIsImZvckVhY2giLCJydW4iLCJwYXJlbnQiLCJjaGVja1BhdGgiLCJpc1BvaW50SW5QYXRoIiwiY2hlY2tCb3VuZGluZ0JveCIsImJvdW5kaW5nQm94IiwiaXNQb2ludEluQm94IiwibWFwWFkiLCJvZmZzZXRMZWZ0Iiwib2Zmc2V0VG9wIiwib2Zmc2V0UGFyZW50Iiwic2Nyb2xsWCIsInNjcm9sbFkiLCJldmVudCIsImNsaWVudFgiLCJjbGllbnRZIiwiZXZlbnRUYXJnZXQiLCJiaW5kIiwiZGVmYXVsdFdpbmRvdyIsImRlZmF1bHRGZXRjaCQxIiwiU2NyZWVuIiwid2FpdCIsImNoZWNrZXIiLCJ3YWl0cyIsInJlYWR5IiwicmVhZHlQcm9taXNlIiwiaXNSZWFkeSIsImlzUmVhZHlMb2NrIiwiZXZlcnkiLCJyZXNvbHZlUmVhZHkiLCJzZXREZWZhdWx0cyIsInN0cm9rZVN0eWxlIiwibGluZUNhcCIsImxpbmVKb2luIiwibWl0ZXJMaW1pdCIsInNldFZpZXdCb3giLCJhc3BlY3RSYXRpbyIsImRlc2lyZWRXaWR0aCIsImRlc2lyZWRIZWlnaHQiLCJyZWZYIiwicmVmWSIsImNsaXAiLCJjbGlwWCIsImNsaXBZIiwiY2xlYW5Bc3BlY3RSYXRpbyIsImFzcGVjdFJhdGlvQWxpZ24iLCJhc3BlY3RSYXRpb01lZXRPclNsaWNlIiwiYWxpZ24iLCJtZWV0T3JTbGljZSIsInNjYWxlWCIsInNjYWxlWSIsInNjYWxlTWluIiwic2NhbGVNYXgiLCJmaW5hbERlc2lyZWRXaWR0aCIsImZpbmFsRGVzaXJlZEhlaWdodCIsInJlZlhQcm9wIiwicmVmWVByb3AiLCJoYXNSZWZzIiwic2NhbGVkQ2xpcFgiLCJzY2FsZWRDbGlwWSIsImJlZ2luUGF0aCIsIm1vdmVUbyIsImxpbmVUbyIsImNsb3NlUGF0aCIsImlzTWVldE1pblkiLCJpc1NsaWNlTWF4WSIsImlzTWVldE1pblgiLCJpc1NsaWNlTWF4WCIsImVuYWJsZVJlZHJhdyIsImlnbm9yZURpbWVuc2lvbnMiLCJpZ25vcmVDbGVhciIsImZvcmNlUmVkcmF3Iiwic2NhbGVXaWR0aCIsInNjYWxlSGVpZ2h0Iiwib2Zmc2V0WCIsIm9mZnNldFkiLCJtb3VzZSIsIkZSQU1FUkFURSIsInJlbmRlciIsImRlbHRhIiwidGljayIsInNob3VsZFVwZGF0ZSIsImludGVydmFsSWQiLCJhbmltYXRpb25zIiwicmVkdWNlIiwiYW5pbWF0aW9uIiwidXBkYXRlIiwiaXNGaXJzdFJlbmRlciIsIndpZHRoU3R5bGUiLCJnZXRTdHlsZSIsImhlaWdodFN0eWxlIiwiY29uY2F0IiwiY1dpZHRoIiwiY2xpZW50V2lkdGgiLCJjSGVpZ2h0IiwiY2xpZW50SGVpZ2h0Iiwidmlld0JveCIsInhSYXRpbyIsInlSYXRpbyIsInRyYW5zZm9ybVN0eWxlIiwiY2xlYXJSZWN0IiwiZGVmYXVsdEZldGNoIiwiTUFYX1ZJUlRVQUxfUElYRUxTIiwiRGVmYXVsdERPTVBhcnNlciIsIlBhcnNlciIsInJlc291cmNlIiwicGFyc2VGcm9tU3RyaW5nIiwibG9hZCIsInBhcnNlciIsImNoZWNrRG9jdW1lbnQiLCJlcnIiLCJwYXJzZXJFcnJvciIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwidGV4dENvbnRlbnQiLCJ0ZXh0IiwiTWF0cml4Iiwib3JpZ2luWCIsIm9yaWdpblkiLCJ0eCIsInR5IiwidW5hcHBseSIsImRldCIsImFwcGx5VG9Qb2ludCIsInRyYW5zZm9ybU9yaWdpbiIsIm51bWJlcnMiLCJ0b01hdHJpeFZhbHVlIiwiU2tldyIsInNrZXciLCJzdXBlciIsImFuZ2xlIiwiVHJhbnNmb3JtIiwiZnJvbUVsZW1lbnQiLCJ0cmFuc2Zvcm1PcmlnaW5YUHJvcGVydHkiLCJ0cmFuc2Zvcm1PcmlnaW5ZUHJvcGVydHkiLCJ0cmFuc2Zvcm1zIiwidHJhbnNmb3JtMSIsInBhcnNlVHJhbnNmb3JtIiwiVHJhbnNmb3JtVHlwZSIsInRyYW5zZm9ybVR5cGVzIiwiY3giLCJjeSIsInJhZCIsInNjYWxlU2l6ZSIsIkVsZW1lbnQiLCJjcmVhdGVJZk5vdEV4aXN0cyIsImF0dHIiLCJhdHRyaWJ1dGVzIiwiaHJlZiIsInNraXBBbmNlc3RvcnMiLCJzdHlsZXMiLCJwYXJlbnRTdHlsZSIsInNhdmUiLCJtYXNrIiwiYXBwbHlFZmZlY3RzIiwiZmlsdGVyIiwic2V0Q29udGV4dCIsInJlbmRlckNoaWxkcmVuIiwiY2xlYXJDb250ZXh0IiwicmVzdG9yZSIsImNsaXBQYXRoU3R5bGVQcm9wIiwiY2hpbGRyZW4iLCJjaGlsZCIsImFkZENoaWxkIiwiY2hpbGROb2RlIiwiaWdub3JlQ2hpbGRUeXBlcyIsImluY2x1ZGVzIiwibWF0Y2hlc1NlbGVjdG9yIiwicmVmIiwic3R5bGVDbGFzc2VzIiwic29tZSIsInN0eWxlQ2xhc3MiLCJhZGRTdHlsZXNGcm9tU3R5bGVEZWZpbml0aW9uIiwic3R5bGVzU3BlY2lmaWNpdHkiLCJzdHlsZVByb3AiLCJzcGVjaWZpY2l0eSIsImV4aXN0aW5nU3BlY2lmaWNpdHkiLCJyZW1vdmVTdHlsZXMiLCJpZ25vcmVTdHlsZXMiLCJ0b1Jlc3RvcmUiLCJyZXN0b3JlU3R5bGVzIiwiaXNGaXJzdENoaWxkIiwiaW5kZXhPZiIsImNhcHR1cmVUZXh0Tm9kZXMiLCJhbmltYXRpb25Gcm96ZW4iLCJhbmltYXRpb25Gcm96ZW5WYWx1ZSIsIm5vZGVUeXBlIiwiZnJvbSIsImF0dHJpYnV0ZSIsIm5vZGVOYW1lIiwiY2hpbGROb2RlcyIsInRleHROb2RlIiwiZ2V0VGV4dCIsIlVua25vd25FbGVtZW50Iiwid3JhcEZvbnRGYW1pbHkiLCJmb250RmFtaWx5IiwidHJpbW1lZCIsInByZXBhcmVGb250U3R5bGUiLCJmb250U3R5bGUiLCJ0YXJnZXRGb250U3R5bGUiLCJwcmVwYXJlRm9udFdlaWdodCIsImZvbnRXZWlnaHQiLCJ0YXJnZXRGb250V2VpZ2h0IiwiRm9udCIsImluaGVyaXQiLCJmb250VmFyaWFudCIsImZvbnRTaXplIiwicGFydHMiLCJwYXJ0IiwidmFyaWFudHMiLCJ3ZWlnaHRzIiwiam9pbiIsImluaGVyaXRGb250IiwiQm91bmRpbmdCb3giLCJhZGRQb2ludCIsImFkZFgiLCJhZGRZIiwiYWRkQm91bmRpbmdCb3giLCJzdW1DdWJpYyIsInAwIiwicDEiLCJwMiIsInAzIiwiYmV6aWVyQ3VydmVBZGQiLCJmb3JYIiwiYjJhYyIsInQxIiwidDIiLCJhZGRCZXppZXJDdXJ2ZSIsInAweCIsInAweSIsInAxeCIsInAxeSIsInAyeCIsInAyeSIsInAzeCIsInAzeSIsImFkZFF1YWRyYXRpY0N1cnZlIiwiY3AxeCIsImNwMXkiLCJjcDJ4IiwiY3AyeSIsIlJlbmRlcmVkRWxlbWVudCIsImNhbGN1bGF0ZU9wYWNpdHkiLCJvcGFjaXR5U3R5bGUiLCJmcm9tTWVhc3VyZSIsImZpbGxTdHlsZVByb3AiLCJmaWxsT3BhY2l0eVN0eWxlUHJvcCIsInN0cm9rZVN0eWxlUHJvcCIsInN0cm9rZU9wYWNpdHlQcm9wIiwiZmlsbFN0eWxlIiwic3Ryb2tlV2lkdGhTdHlsZVByb3AiLCJuZXdMaW5lV2lkdGgiLCJsaW5lV2lkdGgiLCJzdHJva2VMaW5lY2FwU3R5bGVQcm9wIiwic3Ryb2tlTGluZWpvaW5TdHlsZVByb3AiLCJzdHJva2VNaXRlcmxpbWl0UHJvcCIsInN0cm9rZURhc2hhcnJheVN0eWxlUHJvcCIsInN0cm9rZURhc2hvZmZzZXRQcm9wIiwiZ2FwcyIsInNldExpbmVEYXNoIiwid2Via2l0TGluZURhc2giLCJtb3pEYXNoIiwib2Zmc2V0IiwibGluZURhc2hPZmZzZXQiLCJ3ZWJraXRMaW5lRGFzaE9mZnNldCIsIm1vekRhc2hPZmZzZXQiLCJtb2RpZmllZEVtU2l6ZVN0YWNrIiwiZm9udCIsImZvbnRTdHlsZVByb3AiLCJmb250U3R5bGVTdHlsZVByb3AiLCJmb250VmFyaWFudFN0eWxlUHJvcCIsImZvbnRXZWlnaHRTdHlsZVByb3AiLCJmb250U2l6ZVN0eWxlUHJvcCIsImZvbnRGYW1pbHlTdHlsZVByb3AiLCJnbG9iYWxBbHBoYSIsInBvcEVtU2l6ZSIsImFyZ3MiLCJUZXh0RWxlbWVudCIsInRleHRCYXNlbGluZSIsImluaXRpYWxpemVDb29yZGluYXRlcyIsImxlYWZUZXh0cyIsInRleHRDaHVua1N0YXJ0IiwiUE9TSVRJVkVfSU5GSU5JVFkiLCJORUdBVElWRV9JTkZJTklUWSIsImdldEJvdW5kaW5nQm94IiwiZ2V0VEVsZW1lbnRCb3VuZGluZ0JveCIsImFkanVzdENoaWxkQ29vcmRpbmF0ZXNSZWN1cnNpdmUiLCJjaGlsZEJvdW5kaW5nQm94IiwiZ2V0Q2hpbGRCb3VuZGluZ0JveCIsImdldEZvbnRTaXplIiwiaW5oZXJpdEZvbnRTaXplIiwibWVhc3VyZVRleHQiLCJnZXRHbHlwaCIsImNoYXIiLCJnbHlwaCIsImlzQXJhYmljIiwicHJldkNoYXIiLCJuZXh0Q2hhciIsImFyYWJpY0Zvcm0iLCJhcmFiaWNHbHlwaHMiLCJnbHlwaHMiLCJtaXNzaW5nR2x5cGgiLCJnZXRUZXh0RnJvbU5vZGUiLCJwYXJlbnROb2RlIiwibGFzdEluZGV4IiwicmVuZGVyVEVsZW1lbnRDaGlsZHJlbiIsInJlbmRlckNoaWxkIiwicmVuZGVyVGV4dCIsImN1c3RvbUZvbnQiLCJ1bml0c1BlckVtIiwiZm9udEZhY2UiLCJjdHhGb250IiwiaXNSVEwiLCJyZXZlcnNlIiwiZHgiLCJsdyIsImhvcml6QWR2WCIsImZpbGxUZXh0Iiwic3Ryb2tlVGV4dCIsImFwcGx5QW5jaG9yaW5nIiwiZmlyc3RFbGVtZW50IiwidGV4dEFuY2hvciIsInNoaWZ0IiwiYWRqdXN0Q2hpbGRDb29yZGluYXRlc1JlY3Vyc2l2ZUNvcmUiLCJ0ZXh0UGFyZW50IiwiaTEiLCJhZGp1c3RDaGlsZENvb3JkaW5hdGVzIiwieEF0dHIiLCJ5QXR0ciIsImR4QXR0ciIsImR5QXR0ciIsIkJvb2xlYW4iLCJnZXRJbmhlcml0ZWRBdHRyaWJ1dGUiLCJpMiIsImkzIiwibWVhc3VyZUNhY2hlIiwibWVhc3VyZSIsIm1lYXN1cmVUYXJnZXRUZXh0IiwidGFyZ2V0VGV4dCIsImN1cnJlbnQiLCJwYXJlbnRBdHRyIiwiVFNwYW5FbGVtZW50IiwiVGV4dE5vZGUiLCJQYXRoUGFyc2VyIiwicmVzZXQiLCJjb21tYW5kIiwicHJldmlvdXNDb21tYW5kIiwiY29udHJvbCIsImFuZ2xlcyIsImlzRW5kIiwiZ2V0UG9pbnQiLCJ4UHJvcCIsInlQcm9wIiwibWFrZUFic29sdXRlIiwiZ2V0QXNDb250cm9sUG9pbnQiLCJnZXRBc0N1cnJlbnRQb2ludCIsImdldFJlZmxlY3RlZENvbnRyb2xQb2ludCIsIm94Iiwib3kiLCJhZGRNYXJrZXIiLCJwcmlvclRvIiwiYWRkTWFya2VyQW5nbGUiLCJnZXRNYXJrZXJQb2ludHMiLCJnZXRNYXJrZXJBbmdsZXMiLCJQYXRoRWxlbWVudCIsInBhdGhQYXJzZXIiLCJwYXRoTSIsInBhdGhMIiwicGF0aEgiLCJwYXRoViIsInBhdGhDIiwicGF0aFMiLCJwYXRoUSIsInBhdGhUIiwicGF0aEEiLCJwYXRoWiIsIl9jdHgiLCJnZXRNYXJrZXJzIiwibWFya2VycyIsImZpbGxSdWxlU3R5bGVQcm9wIiwiZmlsbCIsInNldFRyYW5zZm9ybSIsInN0cm9rZSIsIm1hcmtlcnNMYXN0SW5kZXgiLCJtYXJrZXJTdGFydFN0eWxlUHJvcCIsIm1hcmtlck1pZFN0eWxlUHJvcCIsIm1hcmtlckVuZFN0eWxlUHJvcCIsIm1hcmtlciIsImNvbnRyb2xQb2ludCIsImN1cnJlbnRQb2ludCIsImJlemllckN1cnZlVG8iLCJxdWFkcmF0aWNDdXJ2ZVRvIiwieEF4aXNSb3RhdGlvbiIsImN1cnJwIiwiY3BwIiwiY2VudHAiLCJhMSIsImFkIiwiZGlyIiwiYWgiLCJoYWxmV2F5Iiwic3giLCJzeSIsImFyYyIsIlNWR0VsZW1lbnQiLCJnZXRDb21wdXRlZFN0eWxlIiwiZ2V0UHJvcGVydHlWYWx1ZSIsImZvbnRTaXplUHJvcCIsInJlZlhBdHRyIiwicmVmWUF0dHIiLCJ2aWV3Qm94QXR0ciIsInJlc2l6ZSIsInByZXNlcnZlQXNwZWN0UmF0aW8iLCJ3aWR0aEF0dHIiLCJoZWlnaHRBdHRyIiwic3R5bGVBdHRyIiwib3JpZ2luV2lkdGgiLCJvcmlnaW5IZWlnaHQiLCJwcmVzZXJ2ZUFzcGVjdFJhdGlvQXR0ciIsIlJlY3RFbGVtZW50IiwicnhBdHRyIiwicnlBdHRyIiwicngiLCJyeSIsIktBUFBBIiwiUG9seWxpbmVFbGVtZW50IiwieDAiLCJ5MCIsIkdFbGVtZW50IiwiR3JhZGllbnRFbGVtZW50IiwiZ2V0R3JhZGllbnRVbml0cyIsInBhcmVudE9wYWNpdHlQcm9wIiwic3RvcHNDb250YWluZXIiLCJpbmhlcml0U3RvcENvbnRhaW5lciIsInN0b3BzIiwiZ3JhZGllbnQiLCJnZXRHcmFkaWVudCIsImFkZFBhcmVudE9wYWNpdHkiLCJhZGRDb2xvclN0b3AiLCJyb290VmlldyIsInJlY3QiLCJncm91cCIsInBhdHRlcm5TdmciLCJwYXR0ZXJuQ2FudmFzIiwicGF0dGVybkN0eCIsImF0dHJpYnV0ZXNUb0luaGVyaXQiLCJhdHRyaWJ1dGVUb0luaGVyaXQiLCJBbmltYXRlRWxlbWVudCIsImdldFByb3BlcnR5IiwiYXR0cmlidXRlVHlwZSIsImF0dHJpYnV0ZU5hbWUiLCJjYWxjVmFsdWUiLCJpbml0aWFsVW5pdHMiLCJwcm9ncmVzcyIsInRvIiwiZ2V0UHJvZ3Jlc3MiLCJuZXdWYWx1ZSIsInByb3AiLCJpbml0aWFsVmFsdWUiLCJkdXJhdGlvbiIsIm1heER1cmF0aW9uIiwiZnJvemVuIiwicmVtb3ZlZCIsInVwZGF0ZWQiLCJiZWdpbiIsInR5cGVBdHRyIiwidmFsdWVzIiwibGIiLCJmbG9vciIsInViIiwidmFsdWVzQXR0ciIsIkZvbnRGYWNlRWxlbWVudCIsImFzY2VudCIsImRlc2NlbnQiLCJHbHlwaEVsZW1lbnQiLCJ1bmljb2RlIiwiTWlzc2luZ0dseXBoRWxlbWVudCIsImRhdGFVcmlSZWdleCIsIlNWR0ZvbnRMb2FkZXIiLCJmb250cyIsImNhbnZnIiwiZm9udE5vZGUiLCJjb25zb2xlIiwibG9hZGVkIiwiU3R5bGVFbGVtZW50IiwiY3NzIiwiXzEiLCJjc3NQYXJ0cyIsImNzc0NsYXNzZXMiLCJjc3NQcm9wcyIsImNzc0NsYXNzIiwicHJvcHMiLCJjc3NQcm9wIiwiY3VycmVudFNlbGVjdG9yIiwiZ2V0U2VsZWN0b3JTcGVjaWZpY2l0eSIsInNyYyIsImltR2V0IiwiaW1nIiwiX2hlaWdodCIsInJnYmEiLCJpbVNldCIsInZhbCIsIm0xIiwibTIiLCJtMyIsIkZlQ29sb3JNYXRyaXhFbGVtZW50IiwiaW5jbHVkZU9wYWNpdHkiLCJzcmNEYXRhIiwibnIiLCJuZyIsIm5iIiwibmEiLCJNYXNrRWxlbWVudCIsImlnbm9yZWRTdHlsZXMiLCJtYXNrQ2FudmFzIiwibWFza0N0eCIsInRtcENhbnZhcyIsInRtcEN0eCIsImdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiIsImZpbGxSZWN0Iiwibm9vcCIsIkZpbHRlckVsZW1lbnQiLCJweCIsInB5IiwiZWZkIiwiZXh0cmFGaWx0ZXJEaXN0YW5jZSIsInRtcENhbnZhc1dpZHRoIiwidG1wQ2FudmFzSGVpZ2h0IiwiZHJhd0ltYWdlIiwiZ2V0UG9pbnRzIiwib3JpZW50IiwibWFya2VyVW5pdHMiLCJtYXJrZXJTdmciLCJvdmVyZmxvdyIsImlzQm91bmRpbmdCb3hVbml0cyIsImNyZWF0ZUxpbmVhckdyYWRpZW50IiwiZngiLCJmeSIsImZyIiwiY3JlYXRlUmFkaWFsR3JhZGllbnQiLCJzdG9wT3BhY2l0eSIsInN0b3BDb2xvciIsImNvbG9yRnJvbSIsImNvbG9yVG8iLCJmcm9tMSIsInRvMSIsInRyYW5zZm9ybUZyb20iLCJ0cmFuc2Zvcm1UbyIsImZvbnRGYW1pbHlTdHlsZSIsImFyYWJpY0dseXBoIiwiZmlyc3RDaGlsZCIsImhhc1RleHQiLCJub2RlMSIsImRhdGFBcnJheSIsInRoZXRhIiwiZFRoZXRhIiwicHNpIiwiZnMiLCJzZXRUZXh0RGF0YSIsInRleHREZWNvcmF0aW9uIiwiZ2x5cGhJbmZvIiwicm90YXRpb24iLCJwYXJ0aWFsVGV4dCIsImdldExldHRlclNwYWNpbmdBdCIsImlkeCIsImxldHRlclNwYWNpbmdDYWNoZSIsImZpbmRTZWdtZW50VG9GaXRDaGFyIiwiYW5jaG9yIiwidGV4dEZ1bGxXaWR0aCIsImZ1bGxQYXRoV2lkdGgiLCJzcGFjZXNOdW1iZXIiLCJpbnB1dE9mZnNldCIsImR5IiwiY2hhckkiLCJnbHlwaFdpZHRoIiwic3BsaW5lU3RlcCIsInRleHRIZWlnaHQiLCJnZXRFcXVpZGlzdGFudFBvaW50T25QYXRoIiwic2VnbWVudCIsImR5WCIsImR5WSIsIm1lYXN1cmVzQ2FjaGUiLCJoYXMiLCJjaGFycyIsInRoaXNTcGFjaW5nIiwicGFyZW50U3BhY2luZyIsImxldHRlclNwYWNpbmciLCJ0ZXh0TGVuIiwiZHhTdW0iLCJhY2MiLCJjdXIiLCJ0ZXh0V2lkdGgiLCJnZXRQYXRoTGVuZ3RoIiwic3RhcnRPZmZzZXQiLCJuZXh0T2Zmc2V0IiwicGFyc2VQYXRoRGF0YSIsInBhdGhMZW5ndGgiLCJwYXRoQ29tbWFuZHMiLCJzdGFydFgiLCJzdGFydFkiLCJuZXh0Q29tbWFuZFR5cGUiLCJjYWxjTGVuZ3RoIiwiY29tbWFuZFR5cGUiLCJnZXRMaW5lTGVuZ3RoIiwiZ2V0UG9pbnRPbkN1YmljQmV6aWVyIiwiZ2V0UG9pbnRPblF1YWRyYXRpY0JlemllciIsImVuZCIsImluYyIsImdldFBvaW50T25FbGxpcHRpY2FsQXJjIiwiZ2V0UG9pbnRPbkxpbmUiLCJkaXN0IiwiZnJvbVgiLCJmcm9tWSIsInJpc2UiLCJwdCIsIml4IiwiaXkiLCJwUmlzZSIsInBSdW4iLCJnZXRQb2ludE9uUGF0aCIsImRpc3RhbmNlIiwiZnVsbExlbiIsImN1bXVsYXRpdmVQYXRoTGVuZ3RoIiwiY3VycmVudFQiLCJwY3QiLCJwNHgiLCJwNHkiLCJjb3NQc2kiLCJzaW5Qc2kiLCJidWlsZEVxdWlkaXN0YW50Q2FjaGUiLCJpbnB1dFN0ZXAiLCJpbnB1dFByZWNpc2lvbiIsInByZWNpc2lvbiIsInN0ZXAiLCJlcXVpZGlzdGFudENhY2hlIiwidGFyZ2V0RGlzdGFuY2UiLCJNYXAiLCJwYXRoRWxlbWVudCIsImltYWdlIiwibG9hZFN2ZyIsImF0b2IiLCJkZWNvZGVVUklDb21wb25lbnQiLCJzdmciLCJzdWJEb2N1bWVudCIsImZvcmtTdHJpbmciLCJkb2N1bWVudEVsZW1lbnQiLCJjb21wbGV0ZSIsImlzU3ZnIiwiaW1hZ2VzIiwidGVtcFN2ZyIsIm9sZFBhcmVudCIsImVsZW1lbnRUcmFuc2Zvcm0iLCJjYWNoZWRFbGVtZW50IiwiY29udGV4dFByb3RvIiwiX3dpZHRoIiwiYmx1clJhZGl1cyIsImJvZHkiLCJnZXRVbmlxdWVJZCIsImRpc3BsYXkiLCJyZW1vdmVDaGlsZCIsIkRvY3VtZW50IiwiYmluZENyZWF0ZUltYWdlIiwiY3JlYXRlSW1hZ2UxIiwiYW5vbnltb3VzQ3Jvc3NPcmlnaW4iLCJzb3VyY2UiLCJmb3JjZUFub255bW91c0Nyb3NzT3JpZ2luIiwiZW1TaXplU3RhY2siLCJ1bmlxdWVJZCIsImlzSW1hZ2VzTG9hZGVkIiwiaXNGb250c0xvYWRlZCIsImNyZWF0ZURvY3VtZW50RWxlbWVudCIsImVsZW1lbnRUeXBlIiwiRWxlbWVudFR5cGUiLCJlbGVtZW50VHlwZXMiLCJjb25maWciLCJjcmVhdGVDYW52YXMxIiwiY3JlYXRlSW1hZ2UyIiwiYXN5bmMiLCJjcm9zc09yaWdpbiIsIm9ubG9hZCIsIl9ldmVudCIsIl9zb3VyY2UiLCJfbGluZW5vIiwiX2NvbG5vIiwiQ2FudmciLCJvcHRpb25zIiwic3ZnRG9jdW1lbnQiLCJmcm9tU3RyaW5nIiwiZm9yayIsImJhc2VPcHRpb25zIiwiY2hlY2tTdXBwb3J0IiwiQ2xpcGJvYXJkSXRlbSIsInN1cHBvcnRzIiwiRE9NIiwicXVlcnlTZWxlY3RvciIsImdldFR5cGUiLCJ0b2dnbGUiLCJjaGVja2VkIiwicG5nIiwiZ2V0RmlsZSIsImZpbGUiLCJCbG9iIiwicXIiLCJvdXRlckhUTUwiLCJjb252ZXJ0VG9CbG9iIiwiY29udmVydCIsImRvd25sb2FkIiwiVVJMIiwiY3JlYXRlT2JqZWN0VVJMIiwiY2xpY2siLCJyZXZva2VPYmplY3RVUkwiLCJjb3B5TmF0aXZlIiwiY2xpcGJvYXJkT3B0cyIsIm5hdmlnYXRvciIsImNsaXBib2FyZCIsIndyaXRlIiwiY29weSIsInN0YXRlIiwicGVybWlzc2lvbiIsInBlcm1pc3Npb25zIiwicXVlcnkiLCJjb3B5QXMiLCJ3cml0ZVRleHQiLCJleHBvcnQiLCJkaXNhYmxlZCIsInVwZGF0ZVFSIiwiY29udGVudCIsImVsZW0iLCJRUkNvZGUiLCJyZW1vdmVBdHRyaWJ1dGUiLCJvbmtleWRvd24iLCJjdHJsS2V5IiwibWV0YUtleSIsInByZXZlbnREZWZhdWx0IiwianBnIiwibG9jYXRpb24iLCJvcmlnaW4iLCJvbmtleXVwIiwib25wYXN0ZSIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJ0YXJnZXQiLCJ0YWdOYW1lIiwic2VsZWN0Il0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file diff --git a/favicon.png b/favicon.png new file mode 100644 index 0000000..d462383 Binary files /dev/null and b/favicon.png differ diff --git a/index.html b/index.html index 0923b8a..ecdca7d 100644 --- a/index.html +++ b/index.html @@ -1 +1 @@ -QR Code Generator




\ No newline at end of file +QR Code Generator




\ No newline at end of file diff --git a/package-lock.json b/package-lock.json index b0a8f7e..8912c05 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,6 +11,8 @@ "idb-keyval": "^6.2.1" }, "devDependencies": { + "@types/bootstrap": "^5.2.10", + "@typescript/lib-dom": "npm:@types/web@^0.0.150", "autoprefixer": "^10.4.19", "bootstrap": "^5.3.3", "canvg": "^4.0.2", @@ -313,7 +315,6 @@ "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", "dev": true, - "peer": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/popperjs" @@ -338,6 +339,15 @@ "@types/node": "*" } }, + "node_modules/@types/bootstrap": { + "version": "5.2.10", + "resolved": "https://registry.npmjs.org/@types/bootstrap/-/bootstrap-5.2.10.tgz", + "integrity": "sha512-F2X+cd6551tep0MvVZ6nM8v7XgGN/twpdNDjqS1TUM7YFNEtQYWk+dKAnH+T1gr6QgCoGMPl487xw/9hXooa2g==", + "dev": true, + "dependencies": { + "@popperjs/core": "^2.9.2" + } + }, "node_modules/@types/connect": { "version": "3.4.38", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", @@ -530,6 +540,13 @@ "@types/node": "*" } }, + "node_modules/@typescript/lib-dom": { + "name": "@types/web", + "version": "0.0.150", + "resolved": "https://registry.npmjs.org/@types/web/-/web-0.0.150.tgz", + "integrity": "sha512-MuIXeRFFwSjToJZS0ISM4Ohu5pXcTvJ/uyxRVQF8ChKWigfM0wJ6vdWOFiODOWJ/eiHupksiQHXHs8nSVKyffw==", + "dev": true + }, "node_modules/@webassemblyjs/ast": { "version": "1.12.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", diff --git a/package.json b/package.json index 9e97337..1bb3f66 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,8 @@ "build": "webpack" }, "devDependencies": { + "@types/bootstrap": "^5.2.10", + "@typescript/lib-dom": "npm:@types/web@^0.0.150", "autoprefixer": "^10.4.19", "bootstrap": "^5.3.3", "canvg": "^4.0.2", diff --git a/settings.css b/settings.css new file mode 100644 index 0000000..ff74022 --- /dev/null +++ b/settings.css @@ -0,0 +1,7 @@ +/*! + * Bootstrap v5.3.3 (https://getbootstrap.com/) + * Copyright 2011-2024 The Bootstrap Authors + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */:root,[data-bs-theme=light]{--bs-blue: #0d6efd;--bs-indigo: #6610f2;--bs-purple: #6f42c1;--bs-pink: #d63384;--bs-red: #dc3545;--bs-orange: #fd7e14;--bs-yellow: #ffc107;--bs-green: #198754;--bs-teal: #20c997;--bs-cyan: #0dcaf0;--bs-black: #000;--bs-white: #fff;--bs-gray: #6c757d;--bs-gray-dark: #343a40;--bs-gray-100: #f8f9fa;--bs-gray-200: #e9ecef;--bs-gray-300: #dee2e6;--bs-gray-400: #ced4da;--bs-gray-500: #adb5bd;--bs-gray-600: #6c757d;--bs-gray-700: #495057;--bs-gray-800: #343a40;--bs-gray-900: #212529;--bs-primary: #0d6efd;--bs-secondary: #6c757d;--bs-success: #198754;--bs-info: #0dcaf0;--bs-warning: #ffc107;--bs-danger: #dc3545;--bs-light: #f8f9fa;--bs-dark: #212529;--bs-primary-rgb: 13, 110, 253;--bs-secondary-rgb: 108, 117, 125;--bs-success-rgb: 25, 135, 84;--bs-info-rgb: 13, 202, 240;--bs-warning-rgb: 255, 193, 7;--bs-danger-rgb: 220, 53, 69;--bs-light-rgb: 248, 249, 250;--bs-dark-rgb: 33, 37, 41;--bs-primary-text-emphasis: #052c65;--bs-secondary-text-emphasis: #2b2f32;--bs-success-text-emphasis: #0a3622;--bs-info-text-emphasis: #055160;--bs-warning-text-emphasis: #664d03;--bs-danger-text-emphasis: #58151c;--bs-light-text-emphasis: #495057;--bs-dark-text-emphasis: #495057;--bs-primary-bg-subtle: #cfe2ff;--bs-secondary-bg-subtle: #e2e3e5;--bs-success-bg-subtle: #d1e7dd;--bs-info-bg-subtle: #cff4fc;--bs-warning-bg-subtle: #fff3cd;--bs-danger-bg-subtle: #f8d7da;--bs-light-bg-subtle: #fcfcfd;--bs-dark-bg-subtle: #ced4da;--bs-primary-border-subtle: #9ec5fe;--bs-secondary-border-subtle: #c4c8cb;--bs-success-border-subtle: #a3cfbb;--bs-info-border-subtle: #9eeaf9;--bs-warning-border-subtle: #ffe69c;--bs-danger-border-subtle: #f1aeb5;--bs-light-border-subtle: #e9ecef;--bs-dark-border-subtle: #adb5bd;--bs-white-rgb: 255, 255, 255;--bs-black-rgb: 0, 0, 0;--bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-body-font-family: var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight: 400;--bs-body-line-height: 1.5;--bs-body-color: #212529;--bs-body-color-rgb: 33, 37, 41;--bs-body-bg: #fff;--bs-body-bg-rgb: 255, 255, 255;--bs-emphasis-color: #000;--bs-emphasis-color-rgb: 0, 0, 0;--bs-secondary-color: rgba(33, 37, 41, 0.75);--bs-secondary-color-rgb: 33, 37, 41;--bs-secondary-bg: #e9ecef;--bs-secondary-bg-rgb: 233, 236, 239;--bs-tertiary-color: rgba(33, 37, 41, 0.5);--bs-tertiary-color-rgb: 33, 37, 41;--bs-tertiary-bg: #f8f9fa;--bs-tertiary-bg-rgb: 248, 249, 250;--bs-heading-color: inherit;--bs-link-color: #0d6efd;--bs-link-color-rgb: 13, 110, 253;--bs-link-decoration: underline;--bs-link-hover-color: #0a58ca;--bs-link-hover-color-rgb: 10, 88, 202;--bs-code-color: #d63384;--bs-highlight-color: #212529;--bs-highlight-bg: #fff3cd;--bs-border-width: 1px;--bs-border-style: solid;--bs-border-color: #dee2e6;--bs-border-color-translucent: rgba(0, 0, 0, 0.175);--bs-border-radius: 0.375rem;--bs-border-radius-sm: 0.25rem;--bs-border-radius-lg: 0.5rem;--bs-border-radius-xl: 1rem;--bs-border-radius-xxl: 2rem;--bs-border-radius-2xl: var(--bs-border-radius-xxl);--bs-border-radius-pill: 50rem;--bs-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);--bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);--bs-box-shadow-lg: 0 1rem 3rem rgba(0, 0, 0, 0.175);--bs-box-shadow-inset: inset 0 1px 2px rgba(0, 0, 0, 0.075);--bs-focus-ring-width: 0.25rem;--bs-focus-ring-opacity: 0.25;--bs-focus-ring-color: rgba(13, 110, 253, 0.25);--bs-form-valid-color: #198754;--bs-form-valid-border-color: #198754;--bs-form-invalid-color: #dc3545;--bs-form-invalid-border-color: #dc3545}[data-bs-theme=dark]{color-scheme:dark;--bs-body-color: #dee2e6;--bs-body-color-rgb: 222, 226, 230;--bs-body-bg: #212529;--bs-body-bg-rgb: 33, 37, 41;--bs-emphasis-color: #fff;--bs-emphasis-color-rgb: 255, 255, 255;--bs-secondary-color: rgba(222, 226, 230, 0.75);--bs-secondary-color-rgb: 222, 226, 230;--bs-secondary-bg: #343a40;--bs-secondary-bg-rgb: 52, 58, 64;--bs-tertiary-color: rgba(222, 226, 230, 0.5);--bs-tertiary-color-rgb: 222, 226, 230;--bs-tertiary-bg: #2b3035;--bs-tertiary-bg-rgb: 43, 48, 53;--bs-primary-text-emphasis: #6ea8fe;--bs-secondary-text-emphasis: #a7acb1;--bs-success-text-emphasis: #75b798;--bs-info-text-emphasis: #6edff6;--bs-warning-text-emphasis: #ffda6a;--bs-danger-text-emphasis: #ea868f;--bs-light-text-emphasis: #f8f9fa;--bs-dark-text-emphasis: #dee2e6;--bs-primary-bg-subtle: #031633;--bs-secondary-bg-subtle: #161719;--bs-success-bg-subtle: #051b11;--bs-info-bg-subtle: #032830;--bs-warning-bg-subtle: #332701;--bs-danger-bg-subtle: #2c0b0e;--bs-light-bg-subtle: #343a40;--bs-dark-bg-subtle: #1a1d20;--bs-primary-border-subtle: #084298;--bs-secondary-border-subtle: #41464b;--bs-success-border-subtle: #0f5132;--bs-info-border-subtle: #087990;--bs-warning-border-subtle: #997404;--bs-danger-border-subtle: #842029;--bs-light-border-subtle: #495057;--bs-dark-border-subtle: #343a40;--bs-heading-color: inherit;--bs-link-color: #6ea8fe;--bs-link-hover-color: #8bb9fe;--bs-link-color-rgb: 110, 168, 254;--bs-link-hover-color-rgb: 139, 185, 254;--bs-code-color: #e685b5;--bs-highlight-color: #dee2e6;--bs-highlight-bg: #664d03;--bs-border-color: #495057;--bs-border-color-translucent: rgba(255, 255, 255, 0.15);--bs-form-valid-color: #75b798;--bs-form-valid-border-color: #75b798;--bs-form-invalid-color: #ea868f;--bs-form-invalid-border-color: #ea868f}*,*::before,*::after{box-sizing:border-box}@media(prefers-reduced-motion: no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}hr{margin:1rem 0;color:inherit;border:0;border-top:var(--bs-border-width) solid;opacity:.25}h6,.h6,h5,.h5,h4,.h4,h3,.h3,h2,.h2,h1,.h1{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2;color:var(--bs-heading-color)}h1,.h1{font-size:calc(1.375rem + 1.5vw)}@media(min-width: 1200px){h1,.h1{font-size:2.5rem}}h2,.h2{font-size:calc(1.325rem + 0.9vw)}@media(min-width: 1200px){h2,.h2{font-size:2rem}}h3,.h3{font-size:calc(1.3rem + 0.6vw)}@media(min-width: 1200px){h3,.h3{font-size:1.75rem}}h4,.h4{font-size:calc(1.275rem + 0.3vw)}@media(min-width: 1200px){h4,.h4{font-size:1.5rem}}h5,.h5{font-size:1.25rem}h6,.h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small,.small{font-size:0.875em}mark,.mark{padding:.1875em;color:var(--bs-highlight-color);background-color:var(--bs-highlight-bg)}sub,sup{position:relative;font-size:0.75em;line-height:0;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}a{color:rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1));text-decoration:underline}a:hover{--bs-link-color-rgb: var(--bs-link-hover-color-rgb)}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}pre,code,kbd,samp{font-family:var(--bs-font-monospace);font-size:1em}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:0.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:0.875em;color:var(--bs-code-color);word-wrap:break-word}a>code{color:inherit}kbd{padding:.1875rem .375rem;font-size:0.875em;color:var(--bs-body-bg);background-color:var(--bs-body-color);border-radius:.25rem}kbd kbd{padding:0;font-size:1em}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:var(--bs-secondary-color);text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}thead,tbody,tfoot,tr,td,th{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator{display:none !important}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button:not(:disabled),[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + 0.3vw);line-height:inherit}@media(min-width: 1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-text,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none !important}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-6{font-size:2.5rem}}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:0.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:0.875em;color:#6c757d}.blockquote-footer::before{content:"— "}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:var(--bs-body-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:0.875em;color:var(--bs-secondary-color)}.container,.container-fluid,.container-xxl,.container-xl,.container-lg,.container-md,.container-sm{--bs-gutter-x: 1.5rem;--bs-gutter-y: 0;width:100%;padding-right:calc(var(--bs-gutter-x)*.5);padding-left:calc(var(--bs-gutter-x)*.5);margin-right:auto;margin-left:auto}@media(min-width: 576px){.container-sm,.container{max-width:540px}}@media(min-width: 768px){.container-md,.container-sm,.container{max-width:720px}}@media(min-width: 992px){.container-lg,.container-md,.container-sm,.container{max-width:960px}}@media(min-width: 1200px){.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1140px}}@media(min-width: 1400px){.container-xxl,.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1320px}}:root{--bs-breakpoint-xs: 0;--bs-breakpoint-sm: 576px;--bs-breakpoint-md: 768px;--bs-breakpoint-lg: 992px;--bs-breakpoint-xl: 1200px;--bs-breakpoint-xxl: 1400px}.row{--bs-gutter-x: 1.5rem;--bs-gutter-y: 0;display:flex;flex-wrap:wrap;margin-top:calc(-1*var(--bs-gutter-y));margin-right:calc(-0.5*var(--bs-gutter-x));margin-left:calc(-0.5*var(--bs-gutter-x))}.row>*{flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x)*.5);padding-left:calc(var(--bs-gutter-x)*.5);margin-top:var(--bs-gutter-y)}.col{flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.66666667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333333%}.col-2{flex:0 0 auto;width:16.66666667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333333%}.col-5{flex:0 0 auto;width:41.66666667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333333%}.col-8{flex:0 0 auto;width:66.66666667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333333%}.col-11{flex:0 0 auto;width:91.66666667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-left:8.33333333%}.offset-2{margin-left:16.66666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333333%}.offset-5{margin-left:41.66666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333333%}.offset-8{margin-left:66.66666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333333%}.offset-11{margin-left:91.66666667%}.g-0,.gx-0{--bs-gutter-x: 0}.g-0,.gy-0{--bs-gutter-y: 0}.g-1,.gx-1{--bs-gutter-x: 0.25rem}.g-1,.gy-1{--bs-gutter-y: 0.25rem}.g-2,.gx-2{--bs-gutter-x: 0.5rem}.g-2,.gy-2{--bs-gutter-y: 0.5rem}.g-3,.gx-3{--bs-gutter-x: 1rem}.g-3,.gy-3{--bs-gutter-y: 1rem}.g-4,.gx-4{--bs-gutter-x: 1.5rem}.g-4,.gy-4{--bs-gutter-y: 1.5rem}.g-5,.gx-5{--bs-gutter-x: 3rem}.g-5,.gy-5{--bs-gutter-y: 3rem}@media(min-width: 576px){.col-sm{flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.66666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-2{flex:0 0 auto;width:16.66666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333333%}.col-sm-8{flex:0 0 auto;width:66.66666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333333%}.col-sm-11{flex:0 0 auto;width:91.66666667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333333%}.offset-sm-2{margin-left:16.66666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333333%}.offset-sm-5{margin-left:41.66666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333333%}.offset-sm-8{margin-left:66.66666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333333%}.offset-sm-11{margin-left:91.66666667%}.g-sm-0,.gx-sm-0{--bs-gutter-x: 0}.g-sm-0,.gy-sm-0{--bs-gutter-y: 0}.g-sm-1,.gx-sm-1{--bs-gutter-x: 0.25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y: 0.25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x: 0.5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y: 0.5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x: 1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y: 1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x: 1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y: 1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x: 3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y: 3rem}}@media(min-width: 768px){.col-md{flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.66666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333333%}.col-md-11{flex:0 0 auto;width:91.66666667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333333%}.offset-md-2{margin-left:16.66666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333333%}.offset-md-5{margin-left:41.66666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333333%}.offset-md-8{margin-left:66.66666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333333%}.offset-md-11{margin-left:91.66666667%}.g-md-0,.gx-md-0{--bs-gutter-x: 0}.g-md-0,.gy-md-0{--bs-gutter-y: 0}.g-md-1,.gx-md-1{--bs-gutter-x: 0.25rem}.g-md-1,.gy-md-1{--bs-gutter-y: 0.25rem}.g-md-2,.gx-md-2{--bs-gutter-x: 0.5rem}.g-md-2,.gy-md-2{--bs-gutter-y: 0.5rem}.g-md-3,.gx-md-3{--bs-gutter-x: 1rem}.g-md-3,.gy-md-3{--bs-gutter-y: 1rem}.g-md-4,.gx-md-4{--bs-gutter-x: 1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y: 1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x: 3rem}.g-md-5,.gy-md-5{--bs-gutter-y: 3rem}}@media(min-width: 992px){.col-lg{flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.66666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333333%}.col-lg-11{flex:0 0 auto;width:91.66666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333333%}.offset-lg-2{margin-left:16.66666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333333%}.offset-lg-5{margin-left:41.66666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333333%}.offset-lg-8{margin-left:66.66666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333333%}.offset-lg-11{margin-left:91.66666667%}.g-lg-0,.gx-lg-0{--bs-gutter-x: 0}.g-lg-0,.gy-lg-0{--bs-gutter-y: 0}.g-lg-1,.gx-lg-1{--bs-gutter-x: 0.25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y: 0.25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x: 0.5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y: 0.5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x: 1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y: 1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x: 1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y: 1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x: 3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y: 3rem}}@media(min-width: 1200px){.col-xl{flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.66666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333333%}.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333333%}.col-xl-8{flex:0 0 auto;width:66.66666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333333%}.col-xl-11{flex:0 0 auto;width:91.66666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333333%}.offset-xl-2{margin-left:16.66666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333333%}.offset-xl-5{margin-left:41.66666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333333%}.offset-xl-8{margin-left:66.66666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333333%}.offset-xl-11{margin-left:91.66666667%}.g-xl-0,.gx-xl-0{--bs-gutter-x: 0}.g-xl-0,.gy-xl-0{--bs-gutter-y: 0}.g-xl-1,.gx-xl-1{--bs-gutter-x: 0.25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y: 0.25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x: 0.5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y: 0.5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x: 1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y: 1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x: 1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y: 1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x: 3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y: 3rem}}@media(min-width: 1400px){.col-xxl{flex:1 0 0%}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.66666667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333333%}.col-xxl-2{flex:0 0 auto;width:16.66666667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333333%}.col-xxl-5{flex:0 0 auto;width:41.66666667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333333%}.col-xxl-8{flex:0 0 auto;width:66.66666667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333333%}.col-xxl-11{flex:0 0 auto;width:91.66666667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.33333333%}.offset-xxl-2{margin-left:16.66666667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.33333333%}.offset-xxl-5{margin-left:41.66666667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.33333333%}.offset-xxl-8{margin-left:66.66666667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.33333333%}.offset-xxl-11{margin-left:91.66666667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x: 0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y: 0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x: 0.25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y: 0.25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x: 0.5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y: 0.5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x: 1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y: 1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x: 1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y: 1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x: 3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y: 3rem}}.table{--bs-table-color-type: initial;--bs-table-bg-type: initial;--bs-table-color-state: initial;--bs-table-bg-state: initial;--bs-table-color: var(--bs-emphasis-color);--bs-table-bg: var(--bs-body-bg);--bs-table-border-color: var(--bs-border-color);--bs-table-accent-bg: transparent;--bs-table-striped-color: var(--bs-emphasis-color);--bs-table-striped-bg: rgba(var(--bs-emphasis-color-rgb), 0.05);--bs-table-active-color: var(--bs-emphasis-color);--bs-table-active-bg: rgba(var(--bs-emphasis-color-rgb), 0.1);--bs-table-hover-color: var(--bs-emphasis-color);--bs-table-hover-bg: rgba(var(--bs-emphasis-color-rgb), 0.075);width:100%;margin-bottom:1rem;vertical-align:top;border-color:var(--bs-table-border-color)}.table>:not(caption)>*>*{padding:.5rem .5rem;color:var(--bs-table-color-state, var(--bs-table-color-type, var(--bs-table-color)));background-color:var(--bs-table-bg);border-bottom-width:var(--bs-border-width);box-shadow:inset 0 0 0 9999px var(--bs-table-bg-state, var(--bs-table-bg-type, var(--bs-table-accent-bg)))}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table-group-divider{border-top:calc(var(--bs-border-width)*2) solid currentcolor}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem .25rem}.table-bordered>:not(caption)>*{border-width:var(--bs-border-width) 0}.table-bordered>:not(caption)>*>*{border-width:0 var(--bs-border-width)}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-borderless>:not(:first-child){border-top-width:0}.table-striped>tbody>tr:nth-of-type(odd)>*{--bs-table-color-type: var(--bs-table-striped-color);--bs-table-bg-type: var(--bs-table-striped-bg)}.table-striped-columns>:not(caption)>tr>:nth-child(even){--bs-table-color-type: var(--bs-table-striped-color);--bs-table-bg-type: var(--bs-table-striped-bg)}.table-active{--bs-table-color-state: var(--bs-table-active-color);--bs-table-bg-state: var(--bs-table-active-bg)}.table-hover>tbody>tr:hover>*{--bs-table-color-state: var(--bs-table-hover-color);--bs-table-bg-state: var(--bs-table-hover-bg)}.table-primary{--bs-table-color: #000;--bs-table-bg: #cfe2ff;--bs-table-border-color: #a6b5cc;--bs-table-striped-bg: #c5d7f2;--bs-table-striped-color: #000;--bs-table-active-bg: #bacbe6;--bs-table-active-color: #000;--bs-table-hover-bg: #bfd1ec;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-secondary{--bs-table-color: #000;--bs-table-bg: #e2e3e5;--bs-table-border-color: #b5b6b7;--bs-table-striped-bg: #d7d8da;--bs-table-striped-color: #000;--bs-table-active-bg: #cbccce;--bs-table-active-color: #000;--bs-table-hover-bg: #d1d2d4;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-success{--bs-table-color: #000;--bs-table-bg: #d1e7dd;--bs-table-border-color: #a7b9b1;--bs-table-striped-bg: #c7dbd2;--bs-table-striped-color: #000;--bs-table-active-bg: #bcd0c7;--bs-table-active-color: #000;--bs-table-hover-bg: #c1d6cc;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-info{--bs-table-color: #000;--bs-table-bg: #cff4fc;--bs-table-border-color: #a6c3ca;--bs-table-striped-bg: #c5e8ef;--bs-table-striped-color: #000;--bs-table-active-bg: #badce3;--bs-table-active-color: #000;--bs-table-hover-bg: #bfe2e9;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-warning{--bs-table-color: #000;--bs-table-bg: #fff3cd;--bs-table-border-color: #ccc2a4;--bs-table-striped-bg: #f2e7c3;--bs-table-striped-color: #000;--bs-table-active-bg: #e6dbb9;--bs-table-active-color: #000;--bs-table-hover-bg: #ece1be;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-danger{--bs-table-color: #000;--bs-table-bg: #f8d7da;--bs-table-border-color: #c6acae;--bs-table-striped-bg: #eccccf;--bs-table-striped-color: #000;--bs-table-active-bg: #dfc2c4;--bs-table-active-color: #000;--bs-table-hover-bg: #e5c7ca;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-light{--bs-table-color: #000;--bs-table-bg: #f8f9fa;--bs-table-border-color: #c6c7c8;--bs-table-striped-bg: #ecedee;--bs-table-striped-color: #000;--bs-table-active-bg: #dfe0e1;--bs-table-active-color: #000;--bs-table-hover-bg: #e5e6e7;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-dark{--bs-table-color: #fff;--bs-table-bg: #212529;--bs-table-border-color: #4d5154;--bs-table-striped-bg: #2c3034;--bs-table-striped-color: #fff;--bs-table-active-bg: #373b3e;--bs-table-active-color: #fff;--bs-table-hover-bg: #323539;--bs-table-hover-color: #fff;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media(max-width: 575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(0.375rem + var(--bs-border-width));padding-bottom:calc(0.375rem + var(--bs-border-width));margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(0.5rem + var(--bs-border-width));padding-bottom:calc(0.5rem + var(--bs-border-width));font-size:1.25rem}.col-form-label-sm{padding-top:calc(0.25rem + var(--bs-border-width));padding-bottom:calc(0.25rem + var(--bs-border-width));font-size:0.875rem}.form-text{margin-top:.25rem;font-size:0.875em;color:var(--bs-secondary-color)}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--bs-body-bg);background-clip:padding-box;border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-control{transition:none}}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:var(--bs-body-color);background-color:var(--bs-body-bg);border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-control::-webkit-date-and-time-value{min-width:85px;height:1.5em;margin:0}.form-control::-webkit-datetime-edit{display:block;padding:0}.form-control::-moz-placeholder{color:var(--bs-secondary-color);opacity:1}.form-control::placeholder{color:var(--bs-secondary-color);opacity:1}.form-control:disabled{background-color:var(--bs-secondary-bg);opacity:1}.form-control::file-selector-button{padding:.375rem .75rem;margin:-0.375rem -0.75rem;margin-inline-end:.75rem;color:var(--bs-body-color);background-color:var(--bs-tertiary-bg);pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:var(--bs-border-width);border-radius:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:var(--bs-secondary-bg)}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1.5;color:var(--bs-body-color);background-color:rgba(0,0,0,0);border:solid rgba(0,0,0,0);border-width:var(--bs-border-width) 0}.form-control-plaintext:focus{outline:0}.form-control-plaintext.form-control-sm,.form-control-plaintext.form-control-lg{padding-right:0;padding-left:0}.form-control-sm{min-height:calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2));padding:.25rem .5rem;font-size:0.875rem;border-radius:var(--bs-border-radius-sm)}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-0.25rem -0.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1.5em + 1rem + calc(var(--bs-border-width) * 2));padding:.5rem 1rem;font-size:1.25rem;border-radius:var(--bs-border-radius-lg)}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-0.5rem -1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1.5em + 0.75rem + calc(var(--bs-border-width) * 2))}textarea.form-control-sm{min-height:calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2))}textarea.form-control-lg{min-height:calc(1.5em + 1rem + calc(var(--bs-border-width) * 2))}.form-control-color{width:3rem;height:calc(1.5em + 0.75rem + calc(var(--bs-border-width) * 2));padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{border:0 !important;border-radius:var(--bs-border-radius)}.form-control-color::-webkit-color-swatch{border:0 !important;border-radius:var(--bs-border-radius)}.form-control-color.form-control-sm{height:calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2))}.form-control-color.form-control-lg{height:calc(1.5em + 1rem + calc(var(--bs-border-width) * 2))}.form-select{--bs-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 16 16%27%3e%3cpath fill=%27none%27 stroke=%27%23343a40%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27 stroke-width=%272%27 d=%27m2 5 6 6 6-6%27/%3e%3c/svg%3e");display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--bs-body-bg);background-image:var(--bs-form-select-bg-img),var(--bs-form-select-bg-icon, none);background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-select{transition:none}}.form-select:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-select[multiple],.form-select[size]:not([size="1"]){padding-right:.75rem;background-image:none}.form-select:disabled{background-color:var(--bs-secondary-bg)}.form-select:-moz-focusring{color:rgba(0,0,0,0);text-shadow:0 0 0 var(--bs-body-color)}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:0.875rem;border-radius:var(--bs-border-radius-sm)}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem;border-radius:var(--bs-border-radius-lg)}[data-bs-theme=dark] .form-select{--bs-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 16 16%27%3e%3cpath fill=%27none%27 stroke=%27%23dee2e6%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27 stroke-width=%272%27 d=%27m2 5 6 6 6-6%27/%3e%3c/svg%3e")}.form-check{display:block;min-height:1.5rem;padding-left:1.5em;margin-bottom:.125rem}.form-check .form-check-input{float:left;margin-left:-1.5em}.form-check-reverse{padding-right:1.5em;padding-left:0;text-align:right}.form-check-reverse .form-check-input{float:right;margin-right:-1.5em;margin-left:0}.form-check-input{--bs-form-check-bg: var(--bs-body-bg);flex-shrink:0;width:1em;height:1em;margin-top:.25em;vertical-align:top;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--bs-form-check-bg);background-image:var(--bs-form-check-bg-image);background-repeat:no-repeat;background-position:center;background-size:contain;border:var(--bs-border-width) solid var(--bs-border-color);-webkit-print-color-adjust:exact;print-color-adjust:exact}.form-check-input[type=checkbox]{border-radius:.25em}.form-check-input[type=radio]{border-radius:50%}.form-check-input:active{filter:brightness(90%)}.form-check-input:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-check-input:checked{background-color:#0d6efd;border-color:#0d6efd}.form-check-input:checked[type=checkbox]{--bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 20 20%27%3e%3cpath fill=%27none%27 stroke=%27%23fff%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27 stroke-width=%273%27 d=%27m6 10 3 3 6-6%27/%3e%3c/svg%3e")}.form-check-input:checked[type=radio]{--bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%27-4 -4 8 8%27%3e%3ccircle r=%272%27 fill=%27%23fff%27/%3e%3c/svg%3e")}.form-check-input[type=checkbox]:indeterminate{background-color:#0d6efd;border-color:#0d6efd;--bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 20 20%27%3e%3cpath fill=%27none%27 stroke=%27%23fff%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27 stroke-width=%273%27 d=%27M6 10h8%27/%3e%3c/svg%3e")}.form-check-input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input[disabled]~.form-check-label,.form-check-input:disabled~.form-check-label{cursor:default;opacity:.5}.form-switch{padding-left:2.5em}.form-switch .form-check-input{--bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%27-4 -4 8 8%27%3e%3ccircle r=%273%27 fill=%27rgba%280, 0, 0, 0.25%29%27/%3e%3c/svg%3e");width:2em;margin-left:-2.5em;background-image:var(--bs-form-switch-bg);background-position:left center;border-radius:2em;transition:background-position .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-switch .form-check-input{transition:none}}.form-switch .form-check-input:focus{--bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%27-4 -4 8 8%27%3e%3ccircle r=%273%27 fill=%27%2386b7fe%27/%3e%3c/svg%3e")}.form-switch .form-check-input:checked{background-position:right center;--bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%27-4 -4 8 8%27%3e%3ccircle r=%273%27 fill=%27%23fff%27/%3e%3c/svg%3e")}.form-switch.form-check-reverse{padding-right:2.5em;padding-left:0}.form-switch.form-check-reverse .form-check-input{margin-right:-2.5em;margin-left:0}.form-check-inline{display:inline-block;margin-right:1rem}.btn-check{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.btn-check[disabled]+.btn,.btn-check:disabled+.btn{pointer-events:none;filter:none;opacity:.65}[data-bs-theme=dark] .form-switch .form-check-input:not(:checked):not(:focus){--bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%27-4 -4 8 8%27%3e%3ccircle r=%273%27 fill=%27rgba%28255, 255, 255, 0.25%29%27/%3e%3c/svg%3e")}.form-range{width:100%;height:1.5rem;padding:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:rgba(0,0,0,0)}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-0.25rem;-webkit-appearance:none;appearance:none;background-color:#0d6efd;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.form-range::-webkit-slider-thumb:active{background-color:#b6d4fe}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:rgba(0,0,0,0);cursor:pointer;background-color:var(--bs-secondary-bg);border-color:rgba(0,0,0,0);border-radius:1rem}.form-range::-moz-range-thumb{width:1rem;height:1rem;-moz-appearance:none;appearance:none;background-color:#0d6efd;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-range::-moz-range-thumb{-moz-transition:none;transition:none}}.form-range::-moz-range-thumb:active{background-color:#b6d4fe}.form-range::-moz-range-track{width:100%;height:.5rem;color:rgba(0,0,0,0);cursor:pointer;background-color:var(--bs-secondary-bg);border-color:rgba(0,0,0,0);border-radius:1rem}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:var(--bs-secondary-color)}.form-range:disabled::-moz-range-thumb{background-color:var(--bs-secondary-color)}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-control-plaintext,.form-floating>.form-select{height:calc(3.5rem + calc(var(--bs-border-width) * 2));min-height:calc(3.5rem + calc(var(--bs-border-width) * 2));line-height:1.25}.form-floating>label{position:absolute;top:0;left:0;z-index:2;height:100%;padding:1rem .75rem;overflow:hidden;text-align:start;text-overflow:ellipsis;white-space:nowrap;pointer-events:none;border:var(--bs-border-width) solid rgba(0,0,0,0);transform-origin:0 0;transition:opacity .1s ease-in-out,transform .1s ease-in-out}@media(prefers-reduced-motion: reduce){.form-floating>label{transition:none}}.form-floating>.form-control,.form-floating>.form-control-plaintext{padding:1rem .75rem}.form-floating>.form-control::-moz-placeholder, .form-floating>.form-control-plaintext::-moz-placeholder{color:rgba(0,0,0,0)}.form-floating>.form-control::placeholder,.form-floating>.form-control-plaintext::placeholder{color:rgba(0,0,0,0)}.form-floating>.form-control:not(:-moz-placeholder-shown), .form-floating>.form-control-plaintext:not(:-moz-placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown),.form-floating>.form-control-plaintext:focus,.form-floating>.form-control-plaintext:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:-webkit-autofill,.form-floating>.form-control-plaintext:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:not(:-moz-placeholder-shown)~label{color:rgba(var(--bs-body-color-rgb), 0.65);transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-control-plaintext~label,.form-floating>.form-select~label{color:rgba(var(--bs-body-color-rgb), 0.65);transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.form-floating>.form-control:not(:-moz-placeholder-shown)~label::after{position:absolute;inset:1rem .375rem;z-index:-1;height:1.5em;content:"";background-color:var(--bs-body-bg);border-radius:var(--bs-border-radius)}.form-floating>.form-control:focus~label::after,.form-floating>.form-control:not(:placeholder-shown)~label::after,.form-floating>.form-control-plaintext~label::after,.form-floating>.form-select~label::after{position:absolute;inset:1rem .375rem;z-index:-1;height:1.5em;content:"";background-color:var(--bs-body-bg);border-radius:var(--bs-border-radius)}.form-floating>.form-control:-webkit-autofill~label{color:rgba(var(--bs-body-color-rgb), 0.65);transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.form-floating>.form-control-plaintext~label{border-width:var(--bs-border-width) 0}.form-floating>:disabled~label,.form-floating>.form-control:disabled~label{color:#6c757d}.form-floating>:disabled~label::after,.form-floating>.form-control:disabled~label::after{background-color:var(--bs-secondary-bg)}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-select,.input-group>.form-floating{position:relative;flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.form-select:focus,.input-group>.form-floating:focus-within{z-index:5}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:5}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);text-align:center;white-space:nowrap;background-color:var(--bs-tertiary-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius)}.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text,.input-group-lg>.btn{padding:.5rem 1rem;font-size:1.25rem;border-radius:var(--bs-border-radius-lg)}.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text,.input-group-sm>.btn{padding:.25rem .5rem;font-size:0.875rem;border-radius:var(--bs-border-radius-sm)}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:3rem}.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3),.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-control,.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-select{border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),.input-group.has-validation>.dropdown-toggle:nth-last-child(n+4),.input-group.has-validation>.form-floating:nth-last-child(n+3)>.form-control,.input-group.has-validation>.form-floating:nth-last-child(n+3)>.form-select{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:calc(var(--bs-border-width)*-1);border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.form-floating:not(:first-child)>.form-control,.input-group>.form-floating:not(:first-child)>.form-select{border-top-left-radius:0;border-bottom-left-radius:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:0.875em;color:var(--bs-form-valid-color)}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:0.875rem;color:#fff;background-color:var(--bs-success);border-radius:var(--bs-border-radius)}.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip,.is-valid~.valid-feedback,.is-valid~.valid-tooltip{display:block}.was-validated .form-control:valid,.form-control.is-valid{border-color:var(--bs-form-valid-border-color);padding-right:calc(1.5em + 0.75rem);background-image:url("data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 8 8%27%3e%3cpath fill=%27%23198754%27 d=%27M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z%27/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(0.375em + 0.1875rem) center;background-size:calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-control:valid:focus,.form-control.is-valid:focus{border-color:var(--bs-form-valid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb), 0.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + 0.75rem);background-position:top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem)}.was-validated .form-select:valid,.form-select.is-valid{border-color:var(--bs-form-valid-border-color)}.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size="1"],.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"]{--bs-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 8 8%27%3e%3cpath fill=%27%23198754%27 d=%27M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z%27/%3e%3c/svg%3e");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-select:valid:focus,.form-select.is-valid:focus{border-color:var(--bs-form-valid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb), 0.25)}.was-validated .form-control-color:valid,.form-control-color.is-valid{width:calc(3rem + calc(1.5em + 0.75rem))}.was-validated .form-check-input:valid,.form-check-input.is-valid{border-color:var(--bs-form-valid-border-color)}.was-validated .form-check-input:valid:checked,.form-check-input.is-valid:checked{background-color:var(--bs-form-valid-color)}.was-validated .form-check-input:valid:focus,.form-check-input.is-valid:focus{box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb), 0.25)}.was-validated .form-check-input:valid~.form-check-label,.form-check-input.is-valid~.form-check-label{color:var(--bs-form-valid-color)}.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}.was-validated .input-group>.form-control:not(:focus):valid,.input-group>.form-control:not(:focus).is-valid,.was-validated .input-group>.form-select:not(:focus):valid,.input-group>.form-select:not(:focus).is-valid,.was-validated .input-group>.form-floating:not(:focus-within):valid,.input-group>.form-floating:not(:focus-within).is-valid{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:0.875em;color:var(--bs-form-invalid-color)}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:0.875rem;color:#fff;background-color:var(--bs-danger);border-radius:var(--bs-border-radius)}.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip,.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip{display:block}.was-validated .form-control:invalid,.form-control.is-invalid{border-color:var(--bs-form-invalid-border-color);padding-right:calc(1.5em + 0.75rem);background-image:url("data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 12 12%27 width=%2712%27 height=%2712%27 fill=%27none%27 stroke=%27%23dc3545%27%3e%3ccircle cx=%276%27 cy=%276%27 r=%274.5%27/%3e%3cpath stroke-linejoin=%27round%27 d=%27M5.8 3.6h.4L6 6.5z%27/%3e%3ccircle cx=%276%27 cy=%278.2%27 r=%27.6%27 fill=%27%23dc3545%27 stroke=%27none%27/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(0.375em + 0.1875rem) center;background-size:calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:var(--bs-form-invalid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb), 0.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + 0.75rem);background-position:top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem)}.was-validated .form-select:invalid,.form-select.is-invalid{border-color:var(--bs-form-invalid-border-color)}.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size="1"],.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"]{--bs-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 12 12%27 width=%2712%27 height=%2712%27 fill=%27none%27 stroke=%27%23dc3545%27%3e%3ccircle cx=%276%27 cy=%276%27 r=%274.5%27/%3e%3cpath stroke-linejoin=%27round%27 d=%27M5.8 3.6h.4L6 6.5z%27/%3e%3ccircle cx=%276%27 cy=%278.2%27 r=%27.6%27 fill=%27%23dc3545%27 stroke=%27none%27/%3e%3c/svg%3e");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-select:invalid:focus,.form-select.is-invalid:focus{border-color:var(--bs-form-invalid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb), 0.25)}.was-validated .form-control-color:invalid,.form-control-color.is-invalid{width:calc(3rem + calc(1.5em + 0.75rem))}.was-validated .form-check-input:invalid,.form-check-input.is-invalid{border-color:var(--bs-form-invalid-border-color)}.was-validated .form-check-input:invalid:checked,.form-check-input.is-invalid:checked{background-color:var(--bs-form-invalid-color)}.was-validated .form-check-input:invalid:focus,.form-check-input.is-invalid:focus{box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb), 0.25)}.was-validated .form-check-input:invalid~.form-check-label,.form-check-input.is-invalid~.form-check-label{color:var(--bs-form-invalid-color)}.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}.was-validated .input-group>.form-control:not(:focus):invalid,.input-group>.form-control:not(:focus).is-invalid,.was-validated .input-group>.form-select:not(:focus):invalid,.input-group>.form-select:not(:focus).is-invalid,.was-validated .input-group>.form-floating:not(:focus-within):invalid,.input-group>.form-floating:not(:focus-within).is-invalid{z-index:4}.btn{--bs-btn-padding-x: 0.75rem;--bs-btn-padding-y: 0.375rem;--bs-btn-font-family: ;--bs-btn-font-size:1rem;--bs-btn-font-weight: 400;--bs-btn-line-height: 1.5;--bs-btn-color: var(--bs-body-color);--bs-btn-bg: transparent;--bs-btn-border-width: var(--bs-border-width);--bs-btn-border-color: transparent;--bs-btn-border-radius: var(--bs-border-radius);--bs-btn-hover-border-color: transparent;--bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);--bs-btn-disabled-opacity: 0.65;--bs-btn-focus-box-shadow: 0 0 0 0.25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--bs-btn-padding-y) var(--bs-btn-padding-x);font-family:var(--bs-btn-font-family);font-size:var(--bs-btn-font-size);font-weight:var(--bs-btn-font-weight);line-height:var(--bs-btn-line-height);color:var(--bs-btn-color);text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);border-radius:var(--bs-btn-border-radius);background-color:var(--bs-btn-bg);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.btn{transition:none}}.btn:hover{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color)}.btn-check+.btn:hover{color:var(--bs-btn-color);background-color:var(--bs-btn-bg);border-color:var(--bs-btn-border-color)}.btn:focus-visible{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:focus-visible+.btn{border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:checked+.btn,:not(.btn-check)+.btn:active,.btn:first-child:active,.btn.active,.btn.show{color:var(--bs-btn-active-color);background-color:var(--bs-btn-active-bg);border-color:var(--bs-btn-active-border-color)}.btn-check:checked+.btn:focus-visible,:not(.btn-check)+.btn:active:focus-visible,.btn:first-child:active:focus-visible,.btn.active:focus-visible,.btn.show:focus-visible{box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:checked:focus-visible+.btn{box-shadow:var(--bs-btn-focus-box-shadow)}.btn:disabled,.btn.disabled,fieldset:disabled .btn{color:var(--bs-btn-disabled-color);pointer-events:none;background-color:var(--bs-btn-disabled-bg);border-color:var(--bs-btn-disabled-border-color);opacity:var(--bs-btn-disabled-opacity)}.btn-primary{--bs-btn-color: #fff;--bs-btn-bg: #0d6efd;--bs-btn-border-color: #0d6efd;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #0b5ed7;--bs-btn-hover-border-color: #0a58ca;--bs-btn-focus-shadow-rgb: 49, 132, 253;--bs-btn-active-color: #fff;--bs-btn-active-bg: #0a58ca;--bs-btn-active-border-color: #0a53be;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #0d6efd;--bs-btn-disabled-border-color: #0d6efd}.btn-secondary{--bs-btn-color: #fff;--bs-btn-bg: #6c757d;--bs-btn-border-color: #6c757d;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #5c636a;--bs-btn-hover-border-color: #565e64;--bs-btn-focus-shadow-rgb: 130, 138, 145;--bs-btn-active-color: #fff;--bs-btn-active-bg: #565e64;--bs-btn-active-border-color: #51585e;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #6c757d;--bs-btn-disabled-border-color: #6c757d}.btn-success{--bs-btn-color: #fff;--bs-btn-bg: #198754;--bs-btn-border-color: #198754;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #157347;--bs-btn-hover-border-color: #146c43;--bs-btn-focus-shadow-rgb: 60, 153, 110;--bs-btn-active-color: #fff;--bs-btn-active-bg: #146c43;--bs-btn-active-border-color: #13653f;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #198754;--bs-btn-disabled-border-color: #198754}.btn-info{--bs-btn-color: #000;--bs-btn-bg: #0dcaf0;--bs-btn-border-color: #0dcaf0;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #31d2f2;--bs-btn-hover-border-color: #25cff2;--bs-btn-focus-shadow-rgb: 11, 172, 204;--bs-btn-active-color: #000;--bs-btn-active-bg: #3dd5f3;--bs-btn-active-border-color: #25cff2;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #0dcaf0;--bs-btn-disabled-border-color: #0dcaf0}.btn-warning{--bs-btn-color: #000;--bs-btn-bg: #ffc107;--bs-btn-border-color: #ffc107;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #ffca2c;--bs-btn-hover-border-color: #ffc720;--bs-btn-focus-shadow-rgb: 217, 164, 6;--bs-btn-active-color: #000;--bs-btn-active-bg: #ffcd39;--bs-btn-active-border-color: #ffc720;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #ffc107;--bs-btn-disabled-border-color: #ffc107}.btn-danger{--bs-btn-color: #fff;--bs-btn-bg: #dc3545;--bs-btn-border-color: #dc3545;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #bb2d3b;--bs-btn-hover-border-color: #b02a37;--bs-btn-focus-shadow-rgb: 225, 83, 97;--bs-btn-active-color: #fff;--bs-btn-active-bg: #b02a37;--bs-btn-active-border-color: #a52834;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #dc3545;--bs-btn-disabled-border-color: #dc3545}.btn-light{--bs-btn-color: #000;--bs-btn-bg: #f8f9fa;--bs-btn-border-color: #f8f9fa;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #d3d4d5;--bs-btn-hover-border-color: #c6c7c8;--bs-btn-focus-shadow-rgb: 211, 212, 213;--bs-btn-active-color: #000;--bs-btn-active-bg: #c6c7c8;--bs-btn-active-border-color: #babbbc;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #f8f9fa;--bs-btn-disabled-border-color: #f8f9fa}.btn-dark{--bs-btn-color: #fff;--bs-btn-bg: #212529;--bs-btn-border-color: #212529;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #424649;--bs-btn-hover-border-color: #373b3e;--bs-btn-focus-shadow-rgb: 66, 70, 73;--bs-btn-active-color: #fff;--bs-btn-active-bg: #4d5154;--bs-btn-active-border-color: #373b3e;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #212529;--bs-btn-disabled-border-color: #212529}.btn-outline-primary{--bs-btn-color: #0d6efd;--bs-btn-border-color: #0d6efd;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #0d6efd;--bs-btn-hover-border-color: #0d6efd;--bs-btn-focus-shadow-rgb: 13, 110, 253;--bs-btn-active-color: #fff;--bs-btn-active-bg: #0d6efd;--bs-btn-active-border-color: #0d6efd;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #0d6efd;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #0d6efd;--bs-gradient: none}.btn-outline-secondary{--bs-btn-color: #6c757d;--bs-btn-border-color: #6c757d;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #6c757d;--bs-btn-hover-border-color: #6c757d;--bs-btn-focus-shadow-rgb: 108, 117, 125;--bs-btn-active-color: #fff;--bs-btn-active-bg: #6c757d;--bs-btn-active-border-color: #6c757d;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #6c757d;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #6c757d;--bs-gradient: none}.btn-outline-success{--bs-btn-color: #198754;--bs-btn-border-color: #198754;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #198754;--bs-btn-hover-border-color: #198754;--bs-btn-focus-shadow-rgb: 25, 135, 84;--bs-btn-active-color: #fff;--bs-btn-active-bg: #198754;--bs-btn-active-border-color: #198754;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #198754;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #198754;--bs-gradient: none}.btn-outline-info{--bs-btn-color: #0dcaf0;--bs-btn-border-color: #0dcaf0;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #0dcaf0;--bs-btn-hover-border-color: #0dcaf0;--bs-btn-focus-shadow-rgb: 13, 202, 240;--bs-btn-active-color: #000;--bs-btn-active-bg: #0dcaf0;--bs-btn-active-border-color: #0dcaf0;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #0dcaf0;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #0dcaf0;--bs-gradient: none}.btn-outline-warning{--bs-btn-color: #ffc107;--bs-btn-border-color: #ffc107;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #ffc107;--bs-btn-hover-border-color: #ffc107;--bs-btn-focus-shadow-rgb: 255, 193, 7;--bs-btn-active-color: #000;--bs-btn-active-bg: #ffc107;--bs-btn-active-border-color: #ffc107;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #ffc107;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #ffc107;--bs-gradient: none}.btn-outline-danger{--bs-btn-color: #dc3545;--bs-btn-border-color: #dc3545;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #dc3545;--bs-btn-hover-border-color: #dc3545;--bs-btn-focus-shadow-rgb: 220, 53, 69;--bs-btn-active-color: #fff;--bs-btn-active-bg: #dc3545;--bs-btn-active-border-color: #dc3545;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #dc3545;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #dc3545;--bs-gradient: none}.btn-outline-light{--bs-btn-color: #f8f9fa;--bs-btn-border-color: #f8f9fa;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #f8f9fa;--bs-btn-hover-border-color: #f8f9fa;--bs-btn-focus-shadow-rgb: 248, 249, 250;--bs-btn-active-color: #000;--bs-btn-active-bg: #f8f9fa;--bs-btn-active-border-color: #f8f9fa;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #f8f9fa;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #f8f9fa;--bs-gradient: none}.btn-outline-dark{--bs-btn-color: #212529;--bs-btn-border-color: #212529;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #212529;--bs-btn-hover-border-color: #212529;--bs-btn-focus-shadow-rgb: 33, 37, 41;--bs-btn-active-color: #fff;--bs-btn-active-bg: #212529;--bs-btn-active-border-color: #212529;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #212529;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #212529;--bs-gradient: none}.btn-link{--bs-btn-font-weight: 400;--bs-btn-color: var(--bs-link-color);--bs-btn-bg: transparent;--bs-btn-border-color: transparent;--bs-btn-hover-color: var(--bs-link-hover-color);--bs-btn-hover-border-color: transparent;--bs-btn-active-color: var(--bs-link-hover-color);--bs-btn-active-border-color: transparent;--bs-btn-disabled-color: #6c757d;--bs-btn-disabled-border-color: transparent;--bs-btn-box-shadow: 0 0 0 #000;--bs-btn-focus-shadow-rgb: 49, 132, 253;text-decoration:underline}.btn-link:focus-visible{color:var(--bs-btn-color)}.btn-link:hover{color:var(--bs-btn-hover-color)}.btn-lg,.btn-group-lg>.btn{--bs-btn-padding-y: 0.5rem;--bs-btn-padding-x: 1rem;--bs-btn-font-size:1.25rem;--bs-btn-border-radius: var(--bs-border-radius-lg)}.btn-sm,.btn-group-sm>.btn{--bs-btn-padding-y: 0.25rem;--bs-btn-padding-x: 0.5rem;--bs-btn-font-size:0.875rem;--bs-btn-border-radius: var(--bs-border-radius-sm)}.fade{transition:opacity .15s linear}@media(prefers-reduced-motion: reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height .35s ease}@media(prefers-reduced-motion: reduce){.collapsing{transition:none}}.collapsing.collapse-horizontal{width:0;height:auto;transition:width .35s ease}@media(prefers-reduced-motion: reduce){.collapsing.collapse-horizontal{transition:none}}.dropup,.dropend,.dropdown,.dropstart,.dropup-center,.dropdown-center{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid rgba(0,0,0,0);border-bottom:0;border-left:.3em solid rgba(0,0,0,0)}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{--bs-dropdown-zindex: 1000;--bs-dropdown-min-width: 10rem;--bs-dropdown-padding-x: 0;--bs-dropdown-padding-y: 0.5rem;--bs-dropdown-spacer: 0.125rem;--bs-dropdown-font-size:1rem;--bs-dropdown-color: var(--bs-body-color);--bs-dropdown-bg: var(--bs-body-bg);--bs-dropdown-border-color: var(--bs-border-color-translucent);--bs-dropdown-border-radius: var(--bs-border-radius);--bs-dropdown-border-width: var(--bs-border-width);--bs-dropdown-inner-border-radius: calc(var(--bs-border-radius) - var(--bs-border-width));--bs-dropdown-divider-bg: var(--bs-border-color-translucent);--bs-dropdown-divider-margin-y: 0.5rem;--bs-dropdown-box-shadow: var(--bs-box-shadow);--bs-dropdown-link-color: var(--bs-body-color);--bs-dropdown-link-hover-color: var(--bs-body-color);--bs-dropdown-link-hover-bg: var(--bs-tertiary-bg);--bs-dropdown-link-active-color: #fff;--bs-dropdown-link-active-bg: #0d6efd;--bs-dropdown-link-disabled-color: var(--bs-tertiary-color);--bs-dropdown-item-padding-x: 1rem;--bs-dropdown-item-padding-y: 0.25rem;--bs-dropdown-header-color: #6c757d;--bs-dropdown-header-padding-x: 1rem;--bs-dropdown-header-padding-y: 0.5rem;position:absolute;z-index:var(--bs-dropdown-zindex);display:none;min-width:var(--bs-dropdown-min-width);padding:var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x);margin:0;font-size:var(--bs-dropdown-font-size);color:var(--bs-dropdown-color);text-align:left;list-style:none;background-color:var(--bs-dropdown-bg);background-clip:padding-box;border:var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color);border-radius:var(--bs-dropdown-border-radius)}.dropdown-menu[data-bs-popper]{top:100%;left:0;margin-top:var(--bs-dropdown-spacer)}.dropdown-menu-start{--bs-position: start}.dropdown-menu-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-end{--bs-position: end}.dropdown-menu-end[data-bs-popper]{right:0;left:auto}@media(min-width: 576px){.dropdown-menu-sm-start{--bs-position: start}.dropdown-menu-sm-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-sm-end{--bs-position: end}.dropdown-menu-sm-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 768px){.dropdown-menu-md-start{--bs-position: start}.dropdown-menu-md-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-md-end{--bs-position: end}.dropdown-menu-md-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 992px){.dropdown-menu-lg-start{--bs-position: start}.dropdown-menu-lg-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-lg-end{--bs-position: end}.dropdown-menu-lg-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 1200px){.dropdown-menu-xl-start{--bs-position: start}.dropdown-menu-xl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xl-end{--bs-position: end}.dropdown-menu-xl-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 1400px){.dropdown-menu-xxl-start{--bs-position: start}.dropdown-menu-xxl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xxl-end{--bs-position: end}.dropdown-menu-xxl-end[data-bs-popper]{right:0;left:auto}}.dropup .dropdown-menu[data-bs-popper]{top:auto;bottom:100%;margin-top:0;margin-bottom:var(--bs-dropdown-spacer)}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid rgba(0,0,0,0);border-bottom:.3em solid;border-left:.3em solid rgba(0,0,0,0)}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-menu[data-bs-popper]{top:0;right:auto;left:100%;margin-top:0;margin-left:var(--bs-dropdown-spacer)}.dropend .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid rgba(0,0,0,0);border-right:0;border-bottom:.3em solid rgba(0,0,0,0);border-left:.3em solid}.dropend .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-toggle::after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{top:0;right:100%;left:auto;margin-top:0;margin-right:var(--bs-dropdown-spacer)}.dropstart .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropstart .dropdown-toggle::after{display:none}.dropstart .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid rgba(0,0,0,0);border-right:.3em solid;border-bottom:.3em solid rgba(0,0,0,0)}.dropstart .dropdown-toggle:empty::after{margin-left:0}.dropstart .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:var(--bs-dropdown-divider-margin-y) 0;overflow:hidden;border-top:1px solid var(--bs-dropdown-divider-bg);opacity:1}.dropdown-item{display:block;width:100%;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);clear:both;font-weight:400;color:var(--bs-dropdown-link-color);text-align:inherit;text-decoration:none;white-space:nowrap;background-color:rgba(0,0,0,0);border:0;border-radius:var(--bs-dropdown-item-border-radius, 0)}.dropdown-item:hover,.dropdown-item:focus{color:var(--bs-dropdown-link-hover-color);background-color:var(--bs-dropdown-link-hover-bg)}.dropdown-item.active,.dropdown-item:active{color:var(--bs-dropdown-link-active-color);text-decoration:none;background-color:var(--bs-dropdown-link-active-bg)}.dropdown-item.disabled,.dropdown-item:disabled{color:var(--bs-dropdown-link-disabled-color);pointer-events:none;background-color:rgba(0,0,0,0)}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x);margin-bottom:0;font-size:0.875rem;color:var(--bs-dropdown-header-color);white-space:nowrap}.dropdown-item-text{display:block;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);color:var(--bs-dropdown-link-color)}.dropdown-menu-dark{--bs-dropdown-color: #dee2e6;--bs-dropdown-bg: #343a40;--bs-dropdown-border-color: var(--bs-border-color-translucent);--bs-dropdown-box-shadow: ;--bs-dropdown-link-color: #dee2e6;--bs-dropdown-link-hover-color: #fff;--bs-dropdown-divider-bg: var(--bs-border-color-translucent);--bs-dropdown-link-hover-bg: rgba(255, 255, 255, 0.15);--bs-dropdown-link-active-color: #fff;--bs-dropdown-link-active-bg: #0d6efd;--bs-dropdown-link-disabled-color: #adb5bd;--bs-dropdown-header-color: #adb5bd}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;flex:1 1 auto}.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn:hover,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group{border-radius:var(--bs-border-radius)}.btn-group>:not(.btn-check:first-child)+.btn,.btn-group>.btn-group:not(:first-child){margin-left:calc(var(--bs-border-width)*-1)}.btn-group>.btn:not(:last-child):not(.dropdown-toggle),.btn-group>.btn.dropdown-toggle-split:first-child,.btn-group>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn,.btn-group>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after,.dropend .dropdown-toggle-split::after{margin-left:0}.dropstart .dropdown-toggle-split::before{margin-right:0}.btn-sm+.dropdown-toggle-split,.btn-group-sm>.btn+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child){margin-top:calc(var(--bs-border-width)*-1)}.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle),.btn-group-vertical>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn~.btn,.btn-group-vertical>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-top-right-radius:0}.nav{--bs-nav-link-padding-x: 1rem;--bs-nav-link-padding-y: 0.5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color: var(--bs-link-color);--bs-nav-link-hover-color: var(--bs-link-hover-color);--bs-nav-link-disabled-color: var(--bs-secondary-color);display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);font-size:var(--bs-nav-link-font-size);font-weight:var(--bs-nav-link-font-weight);color:var(--bs-nav-link-color);text-decoration:none;background:none;border:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}@media(prefers-reduced-motion: reduce){.nav-link{transition:none}}.nav-link:hover,.nav-link:focus{color:var(--bs-nav-link-hover-color)}.nav-link:focus-visible{outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.nav-link.disabled,.nav-link:disabled{color:var(--bs-nav-link-disabled-color);pointer-events:none;cursor:default}.nav-tabs{--bs-nav-tabs-border-width: var(--bs-border-width);--bs-nav-tabs-border-color: var(--bs-border-color);--bs-nav-tabs-border-radius: var(--bs-border-radius);--bs-nav-tabs-link-hover-border-color: var(--bs-secondary-bg) var(--bs-secondary-bg) var(--bs-border-color);--bs-nav-tabs-link-active-color: var(--bs-emphasis-color);--bs-nav-tabs-link-active-bg: var(--bs-body-bg);--bs-nav-tabs-link-active-border-color: var(--bs-border-color) var(--bs-border-color) var(--bs-body-bg);border-bottom:var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color)}.nav-tabs .nav-link{margin-bottom:calc(-1*var(--bs-nav-tabs-border-width));border:var(--bs-nav-tabs-border-width) solid rgba(0,0,0,0);border-top-left-radius:var(--bs-nav-tabs-border-radius);border-top-right-radius:var(--bs-nav-tabs-border-radius)}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{isolation:isolate;border-color:var(--bs-nav-tabs-link-hover-border-color)}.nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:var(--bs-nav-tabs-link-active-color);background-color:var(--bs-nav-tabs-link-active-bg);border-color:var(--bs-nav-tabs-link-active-border-color)}.nav-tabs .dropdown-menu{margin-top:calc(-1*var(--bs-nav-tabs-border-width));border-top-left-radius:0;border-top-right-radius:0}.nav-pills{--bs-nav-pills-border-radius: var(--bs-border-radius);--bs-nav-pills-link-active-color: #fff;--bs-nav-pills-link-active-bg: #0d6efd}.nav-pills .nav-link{border-radius:var(--bs-nav-pills-border-radius)}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:var(--bs-nav-pills-link-active-color);background-color:var(--bs-nav-pills-link-active-bg)}.nav-underline{--bs-nav-underline-gap: 1rem;--bs-nav-underline-border-width: 0.125rem;--bs-nav-underline-link-active-color: var(--bs-emphasis-color);gap:var(--bs-nav-underline-gap)}.nav-underline .nav-link{padding-right:0;padding-left:0;border-bottom:var(--bs-nav-underline-border-width) solid rgba(0,0,0,0)}.nav-underline .nav-link:hover,.nav-underline .nav-link:focus{border-bottom-color:currentcolor}.nav-underline .nav-link.active,.nav-underline .show>.nav-link{font-weight:700;color:var(--bs-nav-underline-link-active-color);border-bottom-color:currentcolor}.nav-fill>.nav-link,.nav-fill .nav-item{flex:1 1 auto;text-align:center}.nav-justified>.nav-link,.nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{--bs-navbar-padding-x: 0;--bs-navbar-padding-y: 0.5rem;--bs-navbar-color: rgba(var(--bs-emphasis-color-rgb), 0.65);--bs-navbar-hover-color: rgba(var(--bs-emphasis-color-rgb), 0.8);--bs-navbar-disabled-color: rgba(var(--bs-emphasis-color-rgb), 0.3);--bs-navbar-active-color: rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-brand-padding-y: 0.3125rem;--bs-navbar-brand-margin-end: 1rem;--bs-navbar-brand-font-size: 1.25rem;--bs-navbar-brand-color: rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-brand-hover-color: rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-nav-link-padding-x: 0.5rem;--bs-navbar-toggler-padding-y: 0.25rem;--bs-navbar-toggler-padding-x: 0.75rem;--bs-navbar-toggler-font-size: 1.25rem;--bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 30 30%27%3e%3cpath stroke=%27rgba%2833, 37, 41, 0.75%29%27 stroke-linecap=%27round%27 stroke-miterlimit=%2710%27 stroke-width=%272%27 d=%27M4 7h22M4 15h22M4 23h22%27/%3e%3c/svg%3e");--bs-navbar-toggler-border-color: rgba(var(--bs-emphasis-color-rgb), 0.15);--bs-navbar-toggler-border-radius: var(--bs-border-radius);--bs-navbar-toggler-focus-width: 0.25rem;--bs-navbar-toggler-transition: box-shadow 0.15s ease-in-out;position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding:var(--bs-navbar-padding-y) var(--bs-navbar-padding-x)}.navbar>.container,.navbar>.container-fluid,.navbar>.container-sm,.navbar>.container-md,.navbar>.container-lg,.navbar>.container-xl,.navbar>.container-xxl{display:flex;flex-wrap:inherit;align-items:center;justify-content:space-between}.navbar-brand{padding-top:var(--bs-navbar-brand-padding-y);padding-bottom:var(--bs-navbar-brand-padding-y);margin-right:var(--bs-navbar-brand-margin-end);font-size:var(--bs-navbar-brand-font-size);color:var(--bs-navbar-brand-color);text-decoration:none;white-space:nowrap}.navbar-brand:hover,.navbar-brand:focus{color:var(--bs-navbar-brand-hover-color)}.navbar-nav{--bs-nav-link-padding-x: 0;--bs-nav-link-padding-y: 0.5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color: var(--bs-navbar-color);--bs-nav-link-hover-color: var(--bs-navbar-hover-color);--bs-nav-link-disabled-color: var(--bs-navbar-disabled-color);display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link.active,.navbar-nav .nav-link.show{color:var(--bs-navbar-active-color)}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem;color:var(--bs-navbar-color)}.navbar-text a,.navbar-text a:hover,.navbar-text a:focus{color:var(--bs-navbar-active-color)}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x);font-size:var(--bs-navbar-toggler-font-size);line-height:1;color:var(--bs-navbar-color);background-color:rgba(0,0,0,0);border:var(--bs-border-width) solid var(--bs-navbar-toggler-border-color);border-radius:var(--bs-navbar-toggler-border-radius);transition:var(--bs-navbar-toggler-transition)}@media(prefers-reduced-motion: reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{text-decoration:none;outline:0;box-shadow:0 0 0 var(--bs-navbar-toggler-focus-width)}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-image:var(--bs-navbar-toggler-icon-bg);background-repeat:no-repeat;background-position:center;background-size:100%}.navbar-nav-scroll{max-height:var(--bs-scroll-height, 75vh);overflow-y:auto}@media(min-width: 576px){.navbar-expand-sm{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-sm .offcanvas .offcanvas-header{display:none}.navbar-expand-sm .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 768px){.navbar-expand-md{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-md .offcanvas .offcanvas-header{display:none}.navbar-expand-md .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 992px){.navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-lg .offcanvas .offcanvas-header{display:none}.navbar-expand-lg .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 1200px){.navbar-expand-xl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-xl .offcanvas .offcanvas-header{display:none}.navbar-expand-xl .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 1400px){.navbar-expand-xxl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}.navbar-expand-xxl .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-xxl .offcanvas .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}.navbar-expand{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand .offcanvas .offcanvas-header{display:none}.navbar-expand .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}.navbar-dark,.navbar[data-bs-theme=dark]{--bs-navbar-color: rgba(255, 255, 255, 0.55);--bs-navbar-hover-color: rgba(255, 255, 255, 0.75);--bs-navbar-disabled-color: rgba(255, 255, 255, 0.25);--bs-navbar-active-color: #fff;--bs-navbar-brand-color: #fff;--bs-navbar-brand-hover-color: #fff;--bs-navbar-toggler-border-color: rgba(255, 255, 255, 0.1);--bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 30 30%27%3e%3cpath stroke=%27rgba%28255, 255, 255, 0.55%29%27 stroke-linecap=%27round%27 stroke-miterlimit=%2710%27 stroke-width=%272%27 d=%27M4 7h22M4 15h22M4 23h22%27/%3e%3c/svg%3e")}[data-bs-theme=dark] .navbar-toggler-icon{--bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 30 30%27%3e%3cpath stroke=%27rgba%28255, 255, 255, 0.55%29%27 stroke-linecap=%27round%27 stroke-miterlimit=%2710%27 stroke-width=%272%27 d=%27M4 7h22M4 15h22M4 23h22%27/%3e%3c/svg%3e")}.card{--bs-card-spacer-y: 1rem;--bs-card-spacer-x: 1rem;--bs-card-title-spacer-y: 0.5rem;--bs-card-title-color: ;--bs-card-subtitle-color: ;--bs-card-border-width: var(--bs-border-width);--bs-card-border-color: var(--bs-border-color-translucent);--bs-card-border-radius: var(--bs-border-radius);--bs-card-box-shadow: ;--bs-card-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width)));--bs-card-cap-padding-y: 0.5rem;--bs-card-cap-padding-x: 1rem;--bs-card-cap-bg: rgba(var(--bs-body-color-rgb), 0.03);--bs-card-cap-color: ;--bs-card-height: ;--bs-card-color: ;--bs-card-bg: var(--bs-body-bg);--bs-card-img-overlay-padding: 1rem;--bs-card-group-margin: 0.75rem;position:relative;display:flex;flex-direction:column;min-width:0;height:var(--bs-card-height);color:var(--bs-body-color);word-wrap:break-word;background-color:var(--bs-card-bg);background-clip:border-box;border:var(--bs-card-border-width) solid var(--bs-card-border-color);border-radius:var(--bs-card-border-radius)}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:var(--bs-card-inner-border-radius);border-bottom-left-radius:var(--bs-card-inner-border-radius)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;padding:var(--bs-card-spacer-y) var(--bs-card-spacer-x);color:var(--bs-card-color)}.card-title{margin-bottom:var(--bs-card-title-spacer-y);color:var(--bs-card-title-color)}.card-subtitle{margin-top:calc(-0.5*var(--bs-card-title-spacer-y));margin-bottom:0;color:var(--bs-card-subtitle-color)}.card-text:last-child{margin-bottom:0}.card-link+.card-link{margin-left:var(--bs-card-spacer-x)}.card-header{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);margin-bottom:0;color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-bottom:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card-header:first-child{border-radius:var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0}.card-footer{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-top:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card-footer:last-child{border-radius:0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius)}.card-header-tabs{margin-right:calc(-0.5*var(--bs-card-cap-padding-x));margin-bottom:calc(-1*var(--bs-card-cap-padding-y));margin-left:calc(-0.5*var(--bs-card-cap-padding-x));border-bottom:0}.card-header-tabs .nav-link.active{background-color:var(--bs-card-bg);border-bottom-color:var(--bs-card-bg)}.card-header-pills{margin-right:calc(-0.5*var(--bs-card-cap-padding-x));margin-left:calc(-0.5*var(--bs-card-cap-padding-x))}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:var(--bs-card-img-overlay-padding);border-radius:var(--bs-card-inner-border-radius)}.card-img,.card-img-top,.card-img-bottom{width:100%}.card-img,.card-img-top{border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius)}.card-img,.card-img-bottom{border-bottom-right-radius:var(--bs-card-inner-border-radius);border-bottom-left-radius:var(--bs-card-inner-border-radius)}.card-group>.card{margin-bottom:var(--bs-card-group-margin)}@media(min-width: 576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-img-top,.card-group>.card:not(:last-child) .card-header{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-img-bottom,.card-group>.card:not(:last-child) .card-footer{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-img-top,.card-group>.card:not(:first-child) .card-header{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-img-bottom,.card-group>.card:not(:first-child) .card-footer{border-bottom-left-radius:0}}.accordion{--bs-accordion-color: var(--bs-body-color);--bs-accordion-bg: var(--bs-body-bg);--bs-accordion-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease;--bs-accordion-border-color: var(--bs-border-color);--bs-accordion-border-width: var(--bs-border-width);--bs-accordion-border-radius: var(--bs-border-radius);--bs-accordion-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width)));--bs-accordion-btn-padding-x: 1.25rem;--bs-accordion-btn-padding-y: 1rem;--bs-accordion-btn-color: var(--bs-body-color);--bs-accordion-btn-bg: var(--bs-accordion-bg);--bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 16 16%27 fill=%27none%27 stroke=%27%23212529%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3e%3cpath d=%27M2 5L8 11L14 5%27/%3e%3c/svg%3e");--bs-accordion-btn-icon-width: 1.25rem;--bs-accordion-btn-icon-transform: rotate(-180deg);--bs-accordion-btn-icon-transition: transform 0.2s ease-in-out;--bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 16 16%27 fill=%27none%27 stroke=%27%23052c65%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3e%3cpath d=%27M2 5L8 11L14 5%27/%3e%3c/svg%3e");--bs-accordion-btn-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);--bs-accordion-body-padding-x: 1.25rem;--bs-accordion-body-padding-y: 1rem;--bs-accordion-active-color: var(--bs-primary-text-emphasis);--bs-accordion-active-bg: var(--bs-primary-bg-subtle)}.accordion-button{position:relative;display:flex;align-items:center;width:100%;padding:var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);font-size:1rem;color:var(--bs-accordion-btn-color);text-align:left;background-color:var(--bs-accordion-btn-bg);border:0;border-radius:0;overflow-anchor:none;transition:var(--bs-accordion-transition)}@media(prefers-reduced-motion: reduce){.accordion-button{transition:none}}.accordion-button:not(.collapsed){color:var(--bs-accordion-active-color);background-color:var(--bs-accordion-active-bg);box-shadow:inset 0 calc(-1*var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color)}.accordion-button:not(.collapsed)::after{background-image:var(--bs-accordion-btn-active-icon);transform:var(--bs-accordion-btn-icon-transform)}.accordion-button::after{flex-shrink:0;width:var(--bs-accordion-btn-icon-width);height:var(--bs-accordion-btn-icon-width);margin-left:auto;content:"";background-image:var(--bs-accordion-btn-icon);background-repeat:no-repeat;background-size:var(--bs-accordion-btn-icon-width);transition:var(--bs-accordion-btn-icon-transition)}@media(prefers-reduced-motion: reduce){.accordion-button::after{transition:none}}.accordion-button:hover{z-index:2}.accordion-button:focus{z-index:3;outline:0;box-shadow:var(--bs-accordion-btn-focus-box-shadow)}.accordion-header{margin-bottom:0}.accordion-item{color:var(--bs-accordion-color);background-color:var(--bs-accordion-bg);border:var(--bs-accordion-border-width) solid var(--bs-accordion-border-color)}.accordion-item:first-of-type{border-top-left-radius:var(--bs-accordion-border-radius);border-top-right-radius:var(--bs-accordion-border-radius)}.accordion-item:first-of-type>.accordion-header .accordion-button{border-top-left-radius:var(--bs-accordion-inner-border-radius);border-top-right-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-right-radius:var(--bs-accordion-border-radius);border-bottom-left-radius:var(--bs-accordion-border-radius)}.accordion-item:last-of-type>.accordion-header .accordion-button.collapsed{border-bottom-right-radius:var(--bs-accordion-inner-border-radius);border-bottom-left-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:last-of-type>.accordion-collapse{border-bottom-right-radius:var(--bs-accordion-border-radius);border-bottom-left-radius:var(--bs-accordion-border-radius)}.accordion-body{padding:var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x)}.accordion-flush>.accordion-item{border-right:0;border-left:0;border-radius:0}.accordion-flush>.accordion-item:first-child{border-top:0}.accordion-flush>.accordion-item:last-child{border-bottom:0}.accordion-flush>.accordion-item>.accordion-header .accordion-button,.accordion-flush>.accordion-item>.accordion-header .accordion-button.collapsed{border-radius:0}.accordion-flush>.accordion-item>.accordion-collapse{border-radius:0}[data-bs-theme=dark] .accordion-button::after{--bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 16 16%27 fill=%27%236ea8fe%27%3e%3cpath fill-rule=%27evenodd%27 d=%27M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z%27/%3e%3c/svg%3e");--bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 16 16%27 fill=%27%236ea8fe%27%3e%3cpath fill-rule=%27evenodd%27 d=%27M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z%27/%3e%3c/svg%3e")}.breadcrumb{--bs-breadcrumb-padding-x: 0;--bs-breadcrumb-padding-y: 0;--bs-breadcrumb-margin-bottom: 1rem;--bs-breadcrumb-bg: ;--bs-breadcrumb-border-radius: ;--bs-breadcrumb-divider-color: var(--bs-secondary-color);--bs-breadcrumb-item-padding-x: 0.5rem;--bs-breadcrumb-item-active-color: var(--bs-secondary-color);display:flex;flex-wrap:wrap;padding:var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x);margin-bottom:var(--bs-breadcrumb-margin-bottom);font-size:var(--bs-breadcrumb-font-size);list-style:none;background-color:var(--bs-breadcrumb-bg);border-radius:var(--bs-breadcrumb-border-radius)}.breadcrumb-item+.breadcrumb-item{padding-left:var(--bs-breadcrumb-item-padding-x)}.breadcrumb-item+.breadcrumb-item::before{float:left;padding-right:var(--bs-breadcrumb-item-padding-x);color:var(--bs-breadcrumb-divider-color);content:var(--bs-breadcrumb-divider, "/") /* rtl: var(--bs-breadcrumb-divider, "/") */}.breadcrumb-item.active{color:var(--bs-breadcrumb-item-active-color)}.pagination{--bs-pagination-padding-x: 0.75rem;--bs-pagination-padding-y: 0.375rem;--bs-pagination-font-size:1rem;--bs-pagination-color: var(--bs-link-color);--bs-pagination-bg: var(--bs-body-bg);--bs-pagination-border-width: var(--bs-border-width);--bs-pagination-border-color: var(--bs-border-color);--bs-pagination-border-radius: var(--bs-border-radius);--bs-pagination-hover-color: var(--bs-link-hover-color);--bs-pagination-hover-bg: var(--bs-tertiary-bg);--bs-pagination-hover-border-color: var(--bs-border-color);--bs-pagination-focus-color: var(--bs-link-hover-color);--bs-pagination-focus-bg: var(--bs-secondary-bg);--bs-pagination-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);--bs-pagination-active-color: #fff;--bs-pagination-active-bg: #0d6efd;--bs-pagination-active-border-color: #0d6efd;--bs-pagination-disabled-color: var(--bs-secondary-color);--bs-pagination-disabled-bg: var(--bs-secondary-bg);--bs-pagination-disabled-border-color: var(--bs-border-color);display:flex;padding-left:0;list-style:none}.page-link{position:relative;display:block;padding:var(--bs-pagination-padding-y) var(--bs-pagination-padding-x);font-size:var(--bs-pagination-font-size);color:var(--bs-pagination-color);text-decoration:none;background-color:var(--bs-pagination-bg);border:var(--bs-pagination-border-width) solid var(--bs-pagination-border-color);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.page-link{transition:none}}.page-link:hover{z-index:2;color:var(--bs-pagination-hover-color);background-color:var(--bs-pagination-hover-bg);border-color:var(--bs-pagination-hover-border-color)}.page-link:focus{z-index:3;color:var(--bs-pagination-focus-color);background-color:var(--bs-pagination-focus-bg);outline:0;box-shadow:var(--bs-pagination-focus-box-shadow)}.page-link.active,.active>.page-link{z-index:3;color:var(--bs-pagination-active-color);background-color:var(--bs-pagination-active-bg);border-color:var(--bs-pagination-active-border-color)}.page-link.disabled,.disabled>.page-link{color:var(--bs-pagination-disabled-color);pointer-events:none;background-color:var(--bs-pagination-disabled-bg);border-color:var(--bs-pagination-disabled-border-color)}.page-item:not(:first-child) .page-link{margin-left:calc(var(--bs-border-width)*-1)}.page-item:first-child .page-link{border-top-left-radius:var(--bs-pagination-border-radius);border-bottom-left-radius:var(--bs-pagination-border-radius)}.page-item:last-child .page-link{border-top-right-radius:var(--bs-pagination-border-radius);border-bottom-right-radius:var(--bs-pagination-border-radius)}.pagination-lg{--bs-pagination-padding-x: 1.5rem;--bs-pagination-padding-y: 0.75rem;--bs-pagination-font-size:1.25rem;--bs-pagination-border-radius: var(--bs-border-radius-lg)}.pagination-sm{--bs-pagination-padding-x: 0.5rem;--bs-pagination-padding-y: 0.25rem;--bs-pagination-font-size:0.875rem;--bs-pagination-border-radius: var(--bs-border-radius-sm)}.badge{--bs-badge-padding-x: 0.65em;--bs-badge-padding-y: 0.35em;--bs-badge-font-size:0.75em;--bs-badge-font-weight: 700;--bs-badge-color: #fff;--bs-badge-border-radius: var(--bs-border-radius);display:inline-block;padding:var(--bs-badge-padding-y) var(--bs-badge-padding-x);font-size:var(--bs-badge-font-size);font-weight:var(--bs-badge-font-weight);line-height:1;color:var(--bs-badge-color);text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:var(--bs-badge-border-radius)}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{--bs-alert-bg: transparent;--bs-alert-padding-x: 1rem;--bs-alert-padding-y: 1rem;--bs-alert-margin-bottom: 1rem;--bs-alert-color: inherit;--bs-alert-border-color: transparent;--bs-alert-border: var(--bs-border-width) solid var(--bs-alert-border-color);--bs-alert-border-radius: var(--bs-border-radius);--bs-alert-link-color: inherit;position:relative;padding:var(--bs-alert-padding-y) var(--bs-alert-padding-x);margin-bottom:var(--bs-alert-margin-bottom);color:var(--bs-alert-color);background-color:var(--bs-alert-bg);border:var(--bs-alert-border);border-radius:var(--bs-alert-border-radius)}.alert-heading{color:inherit}.alert-link{font-weight:700;color:var(--bs-alert-link-color)}.alert-dismissible{padding-right:3rem}.alert-dismissible .btn-close{position:absolute;top:0;right:0;z-index:2;padding:1.25rem 1rem}.alert-primary{--bs-alert-color: var(--bs-primary-text-emphasis);--bs-alert-bg: var(--bs-primary-bg-subtle);--bs-alert-border-color: var(--bs-primary-border-subtle);--bs-alert-link-color: var(--bs-primary-text-emphasis)}.alert-secondary{--bs-alert-color: var(--bs-secondary-text-emphasis);--bs-alert-bg: var(--bs-secondary-bg-subtle);--bs-alert-border-color: var(--bs-secondary-border-subtle);--bs-alert-link-color: var(--bs-secondary-text-emphasis)}.alert-success{--bs-alert-color: var(--bs-success-text-emphasis);--bs-alert-bg: var(--bs-success-bg-subtle);--bs-alert-border-color: var(--bs-success-border-subtle);--bs-alert-link-color: var(--bs-success-text-emphasis)}.alert-info{--bs-alert-color: var(--bs-info-text-emphasis);--bs-alert-bg: var(--bs-info-bg-subtle);--bs-alert-border-color: var(--bs-info-border-subtle);--bs-alert-link-color: var(--bs-info-text-emphasis)}.alert-warning{--bs-alert-color: var(--bs-warning-text-emphasis);--bs-alert-bg: var(--bs-warning-bg-subtle);--bs-alert-border-color: var(--bs-warning-border-subtle);--bs-alert-link-color: var(--bs-warning-text-emphasis)}.alert-danger{--bs-alert-color: var(--bs-danger-text-emphasis);--bs-alert-bg: var(--bs-danger-bg-subtle);--bs-alert-border-color: var(--bs-danger-border-subtle);--bs-alert-link-color: var(--bs-danger-text-emphasis)}.alert-light{--bs-alert-color: var(--bs-light-text-emphasis);--bs-alert-bg: var(--bs-light-bg-subtle);--bs-alert-border-color: var(--bs-light-border-subtle);--bs-alert-link-color: var(--bs-light-text-emphasis)}.alert-dark{--bs-alert-color: var(--bs-dark-text-emphasis);--bs-alert-bg: var(--bs-dark-bg-subtle);--bs-alert-border-color: var(--bs-dark-border-subtle);--bs-alert-link-color: var(--bs-dark-text-emphasis)}@keyframes progress-bar-stripes{0%{background-position-x:1rem}}.progress,.progress-stacked{--bs-progress-height: 1rem;--bs-progress-font-size:0.75rem;--bs-progress-bg: var(--bs-secondary-bg);--bs-progress-border-radius: var(--bs-border-radius);--bs-progress-box-shadow: var(--bs-box-shadow-inset);--bs-progress-bar-color: #fff;--bs-progress-bar-bg: #0d6efd;--bs-progress-bar-transition: width 0.6s ease;display:flex;height:var(--bs-progress-height);overflow:hidden;font-size:var(--bs-progress-font-size);background-color:var(--bs-progress-bg);border-radius:var(--bs-progress-border-radius)}.progress-bar{display:flex;flex-direction:column;justify-content:center;overflow:hidden;color:var(--bs-progress-bar-color);text-align:center;white-space:nowrap;background-color:var(--bs-progress-bar-bg);transition:var(--bs-progress-bar-transition)}@media(prefers-reduced-motion: reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-size:var(--bs-progress-height) var(--bs-progress-height)}.progress-stacked>.progress{overflow:visible}.progress-stacked>.progress>.progress-bar{width:100%}.progress-bar-animated{animation:1s linear infinite progress-bar-stripes}@media(prefers-reduced-motion: reduce){.progress-bar-animated{animation:none}}.list-group{--bs-list-group-color: var(--bs-body-color);--bs-list-group-bg: var(--bs-body-bg);--bs-list-group-border-color: var(--bs-border-color);--bs-list-group-border-width: var(--bs-border-width);--bs-list-group-border-radius: var(--bs-border-radius);--bs-list-group-item-padding-x: 1rem;--bs-list-group-item-padding-y: 0.5rem;--bs-list-group-action-color: var(--bs-secondary-color);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-tertiary-bg);--bs-list-group-action-active-color: var(--bs-body-color);--bs-list-group-action-active-bg: var(--bs-secondary-bg);--bs-list-group-disabled-color: var(--bs-secondary-color);--bs-list-group-disabled-bg: var(--bs-body-bg);--bs-list-group-active-color: #fff;--bs-list-group-active-bg: #0d6efd;--bs-list-group-active-border-color: #0d6efd;display:flex;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:var(--bs-list-group-border-radius)}.list-group-numbered{list-style-type:none;counter-reset:section}.list-group-numbered>.list-group-item::before{content:counters(section, ".") ". ";counter-increment:section}.list-group-item-action{width:100%;color:var(--bs-list-group-action-color);text-align:inherit}.list-group-item-action:hover,.list-group-item-action:focus{z-index:1;color:var(--bs-list-group-action-hover-color);text-decoration:none;background-color:var(--bs-list-group-action-hover-bg)}.list-group-item-action:active{color:var(--bs-list-group-action-active-color);background-color:var(--bs-list-group-action-active-bg)}.list-group-item{position:relative;display:block;padding:var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x);color:var(--bs-list-group-color);text-decoration:none;background-color:var(--bs-list-group-bg);border:var(--bs-list-group-border-width) solid var(--bs-list-group-border-color)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:var(--bs-list-group-disabled-color);pointer-events:none;background-color:var(--bs-list-group-disabled-bg)}.list-group-item.active{z-index:2;color:var(--bs-list-group-active-color);background-color:var(--bs-list-group-active-bg);border-color:var(--bs-list-group-active-border-color)}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:calc(-1*var(--bs-list-group-border-width));border-top-width:var(--bs-list-group-border-width)}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}@media(min-width: 576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media(min-width: 768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media(min-width: 992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media(min-width: 1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media(min-width: 1400px){.list-group-horizontal-xxl{flex-direction:row}.list-group-horizontal-xxl>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-xxl>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 var(--bs-list-group-border-width)}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{--bs-list-group-color: var(--bs-primary-text-emphasis);--bs-list-group-bg: var(--bs-primary-bg-subtle);--bs-list-group-border-color: var(--bs-primary-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-primary-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-primary-border-subtle);--bs-list-group-active-color: var(--bs-primary-bg-subtle);--bs-list-group-active-bg: var(--bs-primary-text-emphasis);--bs-list-group-active-border-color: var(--bs-primary-text-emphasis)}.list-group-item-secondary{--bs-list-group-color: var(--bs-secondary-text-emphasis);--bs-list-group-bg: var(--bs-secondary-bg-subtle);--bs-list-group-border-color: var(--bs-secondary-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-secondary-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-secondary-border-subtle);--bs-list-group-active-color: var(--bs-secondary-bg-subtle);--bs-list-group-active-bg: var(--bs-secondary-text-emphasis);--bs-list-group-active-border-color: var(--bs-secondary-text-emphasis)}.list-group-item-success{--bs-list-group-color: var(--bs-success-text-emphasis);--bs-list-group-bg: var(--bs-success-bg-subtle);--bs-list-group-border-color: var(--bs-success-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-success-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-success-border-subtle);--bs-list-group-active-color: var(--bs-success-bg-subtle);--bs-list-group-active-bg: var(--bs-success-text-emphasis);--bs-list-group-active-border-color: var(--bs-success-text-emphasis)}.list-group-item-info{--bs-list-group-color: var(--bs-info-text-emphasis);--bs-list-group-bg: var(--bs-info-bg-subtle);--bs-list-group-border-color: var(--bs-info-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-info-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-info-border-subtle);--bs-list-group-active-color: var(--bs-info-bg-subtle);--bs-list-group-active-bg: var(--bs-info-text-emphasis);--bs-list-group-active-border-color: var(--bs-info-text-emphasis)}.list-group-item-warning{--bs-list-group-color: var(--bs-warning-text-emphasis);--bs-list-group-bg: var(--bs-warning-bg-subtle);--bs-list-group-border-color: var(--bs-warning-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-warning-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-warning-border-subtle);--bs-list-group-active-color: var(--bs-warning-bg-subtle);--bs-list-group-active-bg: var(--bs-warning-text-emphasis);--bs-list-group-active-border-color: var(--bs-warning-text-emphasis)}.list-group-item-danger{--bs-list-group-color: var(--bs-danger-text-emphasis);--bs-list-group-bg: var(--bs-danger-bg-subtle);--bs-list-group-border-color: var(--bs-danger-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-danger-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-danger-border-subtle);--bs-list-group-active-color: var(--bs-danger-bg-subtle);--bs-list-group-active-bg: var(--bs-danger-text-emphasis);--bs-list-group-active-border-color: var(--bs-danger-text-emphasis)}.list-group-item-light{--bs-list-group-color: var(--bs-light-text-emphasis);--bs-list-group-bg: var(--bs-light-bg-subtle);--bs-list-group-border-color: var(--bs-light-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-light-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-light-border-subtle);--bs-list-group-active-color: var(--bs-light-bg-subtle);--bs-list-group-active-bg: var(--bs-light-text-emphasis);--bs-list-group-active-border-color: var(--bs-light-text-emphasis)}.list-group-item-dark{--bs-list-group-color: var(--bs-dark-text-emphasis);--bs-list-group-bg: var(--bs-dark-bg-subtle);--bs-list-group-border-color: var(--bs-dark-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-dark-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-dark-border-subtle);--bs-list-group-active-color: var(--bs-dark-bg-subtle);--bs-list-group-active-bg: var(--bs-dark-text-emphasis);--bs-list-group-active-border-color: var(--bs-dark-text-emphasis)}.btn-close{--bs-btn-close-color: #000;--bs-btn-close-bg: url("data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 16 16%27 fill=%27%23000%27%3e%3cpath d=%27M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z%27/%3e%3c/svg%3e");--bs-btn-close-opacity: 0.5;--bs-btn-close-hover-opacity: 0.75;--bs-btn-close-focus-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);--bs-btn-close-focus-opacity: 1;--bs-btn-close-disabled-opacity: 0.25;--bs-btn-close-white-filter: invert(1) grayscale(100%) brightness(200%);box-sizing:content-box;width:1em;height:1em;padding:.25em .25em;color:var(--bs-btn-close-color);background:rgba(0,0,0,0) var(--bs-btn-close-bg) center/1em auto no-repeat;border:0;border-radius:.375rem;opacity:var(--bs-btn-close-opacity)}.btn-close:hover{color:var(--bs-btn-close-color);text-decoration:none;opacity:var(--bs-btn-close-hover-opacity)}.btn-close:focus{outline:0;box-shadow:var(--bs-btn-close-focus-shadow);opacity:var(--bs-btn-close-focus-opacity)}.btn-close:disabled,.btn-close.disabled{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;opacity:var(--bs-btn-close-disabled-opacity)}.btn-close-white{filter:var(--bs-btn-close-white-filter)}[data-bs-theme=dark] .btn-close{filter:var(--bs-btn-close-white-filter)}.toast{--bs-toast-zindex: 1090;--bs-toast-padding-x: 0.75rem;--bs-toast-padding-y: 0.5rem;--bs-toast-spacing: 1.5rem;--bs-toast-max-width: 350px;--bs-toast-font-size:0.875rem;--bs-toast-color: ;--bs-toast-bg: rgba(var(--bs-body-bg-rgb), 0.85);--bs-toast-border-width: var(--bs-border-width);--bs-toast-border-color: var(--bs-border-color-translucent);--bs-toast-border-radius: var(--bs-border-radius);--bs-toast-box-shadow: var(--bs-box-shadow);--bs-toast-header-color: var(--bs-secondary-color);--bs-toast-header-bg: rgba(var(--bs-body-bg-rgb), 0.85);--bs-toast-header-border-color: var(--bs-border-color-translucent);width:var(--bs-toast-max-width);max-width:100%;font-size:var(--bs-toast-font-size);color:var(--bs-toast-color);pointer-events:auto;background-color:var(--bs-toast-bg);background-clip:padding-box;border:var(--bs-toast-border-width) solid var(--bs-toast-border-color);box-shadow:var(--bs-toast-box-shadow);border-radius:var(--bs-toast-border-radius)}.toast.showing{opacity:0}.toast:not(.show){display:none}.toast-container{--bs-toast-zindex: 1090;position:absolute;z-index:var(--bs-toast-zindex);width:-moz-max-content;width:max-content;max-width:100%;pointer-events:none}.toast-container>:not(:last-child){margin-bottom:var(--bs-toast-spacing)}.toast-header{display:flex;align-items:center;padding:var(--bs-toast-padding-y) var(--bs-toast-padding-x);color:var(--bs-toast-header-color);background-color:var(--bs-toast-header-bg);background-clip:padding-box;border-bottom:var(--bs-toast-border-width) solid var(--bs-toast-header-border-color);border-top-left-radius:calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));border-top-right-radius:calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width))}.toast-header .btn-close{margin-right:calc(-0.5*var(--bs-toast-padding-x));margin-left:var(--bs-toast-padding-x)}.toast-body{padding:var(--bs-toast-padding-x);word-wrap:break-word}.modal{--bs-modal-zindex: 1055;--bs-modal-width: 500px;--bs-modal-padding: 1rem;--bs-modal-margin: 0.5rem;--bs-modal-color: ;--bs-modal-bg: var(--bs-body-bg);--bs-modal-border-color: var(--bs-border-color-translucent);--bs-modal-border-width: var(--bs-border-width);--bs-modal-border-radius: var(--bs-border-radius-lg);--bs-modal-box-shadow: var(--bs-box-shadow-sm);--bs-modal-inner-border-radius: calc(var(--bs-border-radius-lg) - (var(--bs-border-width)));--bs-modal-header-padding-x: 1rem;--bs-modal-header-padding-y: 1rem;--bs-modal-header-padding: 1rem 1rem;--bs-modal-header-border-color: var(--bs-border-color);--bs-modal-header-border-width: var(--bs-border-width);--bs-modal-title-line-height: 1.5;--bs-modal-footer-gap: 0.5rem;--bs-modal-footer-bg: ;--bs-modal-footer-border-color: var(--bs-border-color);--bs-modal-footer-border-width: var(--bs-border-width);position:fixed;top:0;left:0;z-index:var(--bs-modal-zindex);display:none;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0}.modal-dialog{position:relative;width:auto;margin:var(--bs-modal-margin);pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translate(0, -50px)}@media(prefers-reduced-motion: reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{height:calc(100% - var(--bs-modal-margin)*2)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - var(--bs-modal-margin)*2)}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;color:var(--bs-modal-color);pointer-events:auto;background-color:var(--bs-modal-bg);background-clip:padding-box;border:var(--bs-modal-border-width) solid var(--bs-modal-border-color);border-radius:var(--bs-modal-border-radius);outline:0}.modal-backdrop{--bs-backdrop-zindex: 1050;--bs-backdrop-bg: #000;--bs-backdrop-opacity: 0.5;position:fixed;top:0;left:0;z-index:var(--bs-backdrop-zindex);width:100vw;height:100vh;background-color:var(--bs-backdrop-bg)}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:var(--bs-backdrop-opacity)}.modal-header{display:flex;flex-shrink:0;align-items:center;padding:var(--bs-modal-header-padding);border-bottom:var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color);border-top-left-radius:var(--bs-modal-inner-border-radius);border-top-right-radius:var(--bs-modal-inner-border-radius)}.modal-header .btn-close{padding:calc(var(--bs-modal-header-padding-y)*.5) calc(var(--bs-modal-header-padding-x)*.5);margin:calc(-0.5*var(--bs-modal-header-padding-y)) calc(-0.5*var(--bs-modal-header-padding-x)) calc(-0.5*var(--bs-modal-header-padding-y)) auto}.modal-title{margin-bottom:0;line-height:var(--bs-modal-title-line-height)}.modal-body{position:relative;flex:1 1 auto;padding:var(--bs-modal-padding)}.modal-footer{display:flex;flex-shrink:0;flex-wrap:wrap;align-items:center;justify-content:flex-end;padding:calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap)*.5);background-color:var(--bs-modal-footer-bg);border-top:var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color);border-bottom-right-radius:var(--bs-modal-inner-border-radius);border-bottom-left-radius:var(--bs-modal-inner-border-radius)}.modal-footer>*{margin:calc(var(--bs-modal-footer-gap)*.5)}@media(min-width: 576px){.modal{--bs-modal-margin: 1.75rem;--bs-modal-box-shadow: var(--bs-box-shadow)}.modal-dialog{max-width:var(--bs-modal-width);margin-right:auto;margin-left:auto}.modal-sm{--bs-modal-width: 300px}}@media(min-width: 992px){.modal-lg,.modal-xl{--bs-modal-width: 800px}}@media(min-width: 1200px){.modal-xl{--bs-modal-width: 1140px}}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen .modal-header,.modal-fullscreen .modal-footer{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}@media(max-width: 575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-sm-down .modal-header,.modal-fullscreen-sm-down .modal-footer{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}}@media(max-width: 767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-md-down .modal-header,.modal-fullscreen-md-down .modal-footer{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}}@media(max-width: 991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-lg-down .modal-header,.modal-fullscreen-lg-down .modal-footer{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}}@media(max-width: 1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xl-down .modal-header,.modal-fullscreen-xl-down .modal-footer{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}}@media(max-width: 1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xxl-down .modal-header,.modal-fullscreen-xxl-down .modal-footer{border-radius:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}}.tooltip{--bs-tooltip-zindex: 1080;--bs-tooltip-max-width: 200px;--bs-tooltip-padding-x: 0.5rem;--bs-tooltip-padding-y: 0.25rem;--bs-tooltip-margin: ;--bs-tooltip-font-size:0.875rem;--bs-tooltip-color: var(--bs-body-bg);--bs-tooltip-bg: var(--bs-emphasis-color);--bs-tooltip-border-radius: var(--bs-border-radius);--bs-tooltip-opacity: 0.9;--bs-tooltip-arrow-width: 0.8rem;--bs-tooltip-arrow-height: 0.4rem;z-index:var(--bs-tooltip-zindex);display:block;margin:var(--bs-tooltip-margin);font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--bs-tooltip-font-size);word-wrap:break-word;opacity:0}.tooltip.show{opacity:var(--bs-tooltip-opacity)}.tooltip .tooltip-arrow{display:block;width:var(--bs-tooltip-arrow-width);height:var(--bs-tooltip-arrow-height)}.tooltip .tooltip-arrow::before{position:absolute;content:"";border-color:rgba(0,0,0,0);border-style:solid}.bs-tooltip-top .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow{bottom:calc(-1*var(--bs-tooltip-arrow-height))}.bs-tooltip-top .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before{top:-1px;border-width:var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width)*.5) 0;border-top-color:var(--bs-tooltip-bg)}.bs-tooltip-end .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow{left:calc(-1*var(--bs-tooltip-arrow-height));width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-end .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before{right:-1px;border-width:calc(var(--bs-tooltip-arrow-width)*.5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width)*.5) 0;border-right-color:var(--bs-tooltip-bg)}.bs-tooltip-bottom .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow{top:calc(-1*var(--bs-tooltip-arrow-height))}.bs-tooltip-bottom .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before{bottom:-1px;border-width:0 calc(var(--bs-tooltip-arrow-width)*.5) var(--bs-tooltip-arrow-height);border-bottom-color:var(--bs-tooltip-bg)}.bs-tooltip-start .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow{right:calc(-1*var(--bs-tooltip-arrow-height));width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-start .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before{left:-1px;border-width:calc(var(--bs-tooltip-arrow-width)*.5) 0 calc(var(--bs-tooltip-arrow-width)*.5) var(--bs-tooltip-arrow-height);border-left-color:var(--bs-tooltip-bg)}.tooltip-inner{max-width:var(--bs-tooltip-max-width);padding:var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x);color:var(--bs-tooltip-color);text-align:center;background-color:var(--bs-tooltip-bg);border-radius:var(--bs-tooltip-border-radius)}.popover{--bs-popover-zindex: 1070;--bs-popover-max-width: 276px;--bs-popover-font-size:0.875rem;--bs-popover-bg: var(--bs-body-bg);--bs-popover-border-width: var(--bs-border-width);--bs-popover-border-color: var(--bs-border-color-translucent);--bs-popover-border-radius: var(--bs-border-radius-lg);--bs-popover-inner-border-radius: calc(var(--bs-border-radius-lg) - var(--bs-border-width));--bs-popover-box-shadow: var(--bs-box-shadow);--bs-popover-header-padding-x: 1rem;--bs-popover-header-padding-y: 0.5rem;--bs-popover-header-font-size:1rem;--bs-popover-header-color: inherit;--bs-popover-header-bg: var(--bs-secondary-bg);--bs-popover-body-padding-x: 1rem;--bs-popover-body-padding-y: 1rem;--bs-popover-body-color: var(--bs-body-color);--bs-popover-arrow-width: 1rem;--bs-popover-arrow-height: 0.5rem;--bs-popover-arrow-border: var(--bs-popover-border-color);z-index:var(--bs-popover-zindex);display:block;max-width:var(--bs-popover-max-width);font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--bs-popover-font-size);word-wrap:break-word;background-color:var(--bs-popover-bg);background-clip:padding-box;border:var(--bs-popover-border-width) solid var(--bs-popover-border-color);border-radius:var(--bs-popover-border-radius)}.popover .popover-arrow{display:block;width:var(--bs-popover-arrow-width);height:var(--bs-popover-arrow-height)}.popover .popover-arrow::before,.popover .popover-arrow::after{position:absolute;display:block;content:"";border-color:rgba(0,0,0,0);border-style:solid;border-width:0}.bs-popover-top>.popover-arrow,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow{bottom:calc(-1*(var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-top>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,.bs-popover-top>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after{border-width:var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width)*.5) 0}.bs-popover-top>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before{bottom:0;border-top-color:var(--bs-popover-arrow-border)}.bs-popover-top>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after{bottom:var(--bs-popover-border-width);border-top-color:var(--bs-popover-bg)}.bs-popover-end>.popover-arrow,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow{left:calc(-1*(var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height);height:var(--bs-popover-arrow-width)}.bs-popover-end>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,.bs-popover-end>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after{border-width:calc(var(--bs-popover-arrow-width)*.5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width)*.5) 0}.bs-popover-end>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before{left:0;border-right-color:var(--bs-popover-arrow-border)}.bs-popover-end>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after{left:var(--bs-popover-border-width);border-right-color:var(--bs-popover-bg)}.bs-popover-bottom>.popover-arrow,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow{top:calc(-1*(var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-bottom>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,.bs-popover-bottom>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after{border-width:0 calc(var(--bs-popover-arrow-width)*.5) var(--bs-popover-arrow-height)}.bs-popover-bottom>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before{top:0;border-bottom-color:var(--bs-popover-arrow-border)}.bs-popover-bottom>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after{top:var(--bs-popover-border-width);border-bottom-color:var(--bs-popover-bg)}.bs-popover-bottom .popover-header::before,.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before{position:absolute;top:0;left:50%;display:block;width:var(--bs-popover-arrow-width);margin-left:calc(-0.5*var(--bs-popover-arrow-width));content:"";border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-header-bg)}.bs-popover-start>.popover-arrow,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow{right:calc(-1*(var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height);height:var(--bs-popover-arrow-width)}.bs-popover-start>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,.bs-popover-start>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after{border-width:calc(var(--bs-popover-arrow-width)*.5) 0 calc(var(--bs-popover-arrow-width)*.5) var(--bs-popover-arrow-height)}.bs-popover-start>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before{right:0;border-left-color:var(--bs-popover-arrow-border)}.bs-popover-start>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after{right:var(--bs-popover-border-width);border-left-color:var(--bs-popover-bg)}.popover-header{padding:var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x);margin-bottom:0;font-size:var(--bs-popover-header-font-size);color:var(--bs-popover-header-color);background-color:var(--bs-popover-header-bg);border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-border-color);border-top-left-radius:var(--bs-popover-inner-border-radius);border-top-right-radius:var(--bs-popover-inner-border-radius)}.popover-header:empty{display:none}.popover-body{padding:var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x);color:var(--bs-popover-body-color)}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;backface-visibility:hidden;transition:transform .6s ease-in-out}@media(prefers-reduced-motion: reduce){.carousel-item{transition:none}}.carousel-item.active,.carousel-item-next,.carousel-item-prev{display:block}.carousel-item-next:not(.carousel-item-start),.active.carousel-item-end{transform:translateX(100%)}.carousel-item-prev:not(.carousel-item-end),.active.carousel-item-start{transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item.active,.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end{z-index:1;opacity:1}.carousel-fade .active.carousel-item-start,.carousel-fade .active.carousel-item-end{z-index:0;opacity:0;transition:opacity 0s .6s}@media(prefers-reduced-motion: reduce){.carousel-fade .active.carousel-item-start,.carousel-fade .active.carousel-item-end{transition:none}}.carousel-control-prev,.carousel-control-next{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;padding:0;color:#fff;text-align:center;background:none;border:0;opacity:.5;transition:opacity .15s ease}@media(prefers-reduced-motion: reduce){.carousel-control-prev,.carousel-control-next{transition:none}}.carousel-control-prev:hover,.carousel-control-prev:focus,.carousel-control-next:hover,.carousel-control-next:focus{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-prev-icon,.carousel-control-next-icon{display:inline-block;width:2rem;height:2rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 16 16%27 fill=%27%23fff%27%3e%3cpath d=%27M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z%27/%3e%3c/svg%3e") /*rtl:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")*/}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 16 16%27 fill=%27%23fff%27%3e%3cpath d=%27M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z%27/%3e%3c/svg%3e") /*rtl:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e")*/}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:2;display:flex;justify-content:center;padding:0;margin-right:15%;margin-bottom:1rem;margin-left:15%}.carousel-indicators [data-bs-target]{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;padding:0;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border:0;border-top:10px solid rgba(0,0,0,0);border-bottom:10px solid rgba(0,0,0,0);opacity:.5;transition:opacity .6s ease}@media(prefers-reduced-motion: reduce){.carousel-indicators [data-bs-target]{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:1.25rem;left:15%;padding-top:1.25rem;padding-bottom:1.25rem;color:#fff;text-align:center}.carousel-dark .carousel-control-prev-icon,.carousel-dark .carousel-control-next-icon{filter:invert(1) grayscale(100)}.carousel-dark .carousel-indicators [data-bs-target]{background-color:#000}.carousel-dark .carousel-caption{color:#000}[data-bs-theme=dark] .carousel .carousel-control-prev-icon,[data-bs-theme=dark] .carousel .carousel-control-next-icon,[data-bs-theme=dark].carousel .carousel-control-prev-icon,[data-bs-theme=dark].carousel .carousel-control-next-icon{filter:invert(1) grayscale(100)}[data-bs-theme=dark] .carousel .carousel-indicators [data-bs-target],[data-bs-theme=dark].carousel .carousel-indicators [data-bs-target]{background-color:#000}[data-bs-theme=dark] .carousel .carousel-caption,[data-bs-theme=dark].carousel .carousel-caption{color:#000}.spinner-grow,.spinner-border{display:inline-block;width:var(--bs-spinner-width);height:var(--bs-spinner-height);vertical-align:var(--bs-spinner-vertical-align);border-radius:50%;animation:var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name)}@keyframes spinner-border{to{transform:rotate(360deg) /* rtl:ignore */}}.spinner-border{--bs-spinner-width: 2rem;--bs-spinner-height: 2rem;--bs-spinner-vertical-align: -0.125em;--bs-spinner-border-width: 0.25em;--bs-spinner-animation-speed: 0.75s;--bs-spinner-animation-name: spinner-border;border:var(--bs-spinner-border-width) solid currentcolor;border-right-color:rgba(0,0,0,0)}.spinner-border-sm{--bs-spinner-width: 1rem;--bs-spinner-height: 1rem;--bs-spinner-border-width: 0.2em}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{--bs-spinner-width: 2rem;--bs-spinner-height: 2rem;--bs-spinner-vertical-align: -0.125em;--bs-spinner-animation-speed: 0.75s;--bs-spinner-animation-name: spinner-grow;background-color:currentcolor;opacity:0}.spinner-grow-sm{--bs-spinner-width: 1rem;--bs-spinner-height: 1rem}@media(prefers-reduced-motion: reduce){.spinner-border,.spinner-grow{--bs-spinner-animation-speed: 1.5s}}.offcanvas,.offcanvas-xxl,.offcanvas-xl,.offcanvas-lg,.offcanvas-md,.offcanvas-sm{--bs-offcanvas-zindex: 1045;--bs-offcanvas-width: 400px;--bs-offcanvas-height: 30vh;--bs-offcanvas-padding-x: 1rem;--bs-offcanvas-padding-y: 1rem;--bs-offcanvas-color: var(--bs-body-color);--bs-offcanvas-bg: var(--bs-body-bg);--bs-offcanvas-border-width: var(--bs-border-width);--bs-offcanvas-border-color: var(--bs-border-color-translucent);--bs-offcanvas-box-shadow: var(--bs-box-shadow-sm);--bs-offcanvas-transition: transform 0.3s ease-in-out;--bs-offcanvas-title-line-height: 1.5}@media(max-width: 575.98px){.offcanvas-sm{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media(max-width: 575.98px)and (prefers-reduced-motion: reduce){.offcanvas-sm{transition:none}}@media(max-width: 575.98px){.offcanvas-sm.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-sm.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-sm.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-sm.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-sm.showing,.offcanvas-sm.show:not(.hiding){transform:none}.offcanvas-sm.showing,.offcanvas-sm.hiding,.offcanvas-sm.show{visibility:visible}}@media(min-width: 576px){.offcanvas-sm{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:rgba(0,0,0,0) !important}.offcanvas-sm .offcanvas-header{display:none}.offcanvas-sm .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:rgba(0,0,0,0) !important}}@media(max-width: 767.98px){.offcanvas-md{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media(max-width: 767.98px)and (prefers-reduced-motion: reduce){.offcanvas-md{transition:none}}@media(max-width: 767.98px){.offcanvas-md.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-md.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-md.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-md.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-md.showing,.offcanvas-md.show:not(.hiding){transform:none}.offcanvas-md.showing,.offcanvas-md.hiding,.offcanvas-md.show{visibility:visible}}@media(min-width: 768px){.offcanvas-md{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:rgba(0,0,0,0) !important}.offcanvas-md .offcanvas-header{display:none}.offcanvas-md .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:rgba(0,0,0,0) !important}}@media(max-width: 991.98px){.offcanvas-lg{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media(max-width: 991.98px)and (prefers-reduced-motion: reduce){.offcanvas-lg{transition:none}}@media(max-width: 991.98px){.offcanvas-lg.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-lg.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-lg.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-lg.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-lg.showing,.offcanvas-lg.show:not(.hiding){transform:none}.offcanvas-lg.showing,.offcanvas-lg.hiding,.offcanvas-lg.show{visibility:visible}}@media(min-width: 992px){.offcanvas-lg{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:rgba(0,0,0,0) !important}.offcanvas-lg .offcanvas-header{display:none}.offcanvas-lg .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:rgba(0,0,0,0) !important}}@media(max-width: 1199.98px){.offcanvas-xl{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media(max-width: 1199.98px)and (prefers-reduced-motion: reduce){.offcanvas-xl{transition:none}}@media(max-width: 1199.98px){.offcanvas-xl.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-xl.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-xl.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-xl.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-xl.showing,.offcanvas-xl.show:not(.hiding){transform:none}.offcanvas-xl.showing,.offcanvas-xl.hiding,.offcanvas-xl.show{visibility:visible}}@media(min-width: 1200px){.offcanvas-xl{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:rgba(0,0,0,0) !important}.offcanvas-xl .offcanvas-header{display:none}.offcanvas-xl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:rgba(0,0,0,0) !important}}@media(max-width: 1399.98px){.offcanvas-xxl{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media(max-width: 1399.98px)and (prefers-reduced-motion: reduce){.offcanvas-xxl{transition:none}}@media(max-width: 1399.98px){.offcanvas-xxl.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-xxl.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-xxl.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-xxl.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-xxl.showing,.offcanvas-xxl.show:not(.hiding){transform:none}.offcanvas-xxl.showing,.offcanvas-xxl.hiding,.offcanvas-xxl.show{visibility:visible}}@media(min-width: 1400px){.offcanvas-xxl{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:rgba(0,0,0,0) !important}.offcanvas-xxl .offcanvas-header{display:none}.offcanvas-xxl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:rgba(0,0,0,0) !important}}.offcanvas{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}@media(prefers-reduced-motion: reduce){.offcanvas{transition:none}}.offcanvas.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas.showing,.offcanvas.show:not(.hiding){transform:none}.offcanvas.showing,.offcanvas.hiding,.offcanvas.show{visibility:visible}.offcanvas-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.offcanvas-backdrop.fade{opacity:0}.offcanvas-backdrop.show{opacity:.5}.offcanvas-header{display:flex;align-items:center;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x)}.offcanvas-header .btn-close{padding:calc(var(--bs-offcanvas-padding-y)*.5) calc(var(--bs-offcanvas-padding-x)*.5);margin:calc(-0.5*var(--bs-offcanvas-padding-y)) calc(-0.5*var(--bs-offcanvas-padding-x)) calc(-0.5*var(--bs-offcanvas-padding-y)) auto}.offcanvas-title{margin-bottom:0;line-height:var(--bs-offcanvas-title-line-height)}.offcanvas-body{flex-grow:1;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);overflow-y:auto}.placeholder{display:inline-block;min-height:1em;vertical-align:middle;cursor:wait;background-color:currentcolor;opacity:.5}.placeholder.btn::before{display:inline-block;content:""}.placeholder-xs{min-height:.6em}.placeholder-sm{min-height:.8em}.placeholder-lg{min-height:1.2em}.placeholder-glow .placeholder{animation:placeholder-glow 2s ease-in-out infinite}@keyframes placeholder-glow{50%{opacity:.2}}.placeholder-wave{-webkit-mask-image:linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);mask-image:linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);-webkit-mask-size:200% 100%;mask-size:200% 100%;animation:placeholder-wave 2s linear infinite}@keyframes placeholder-wave{100%{-webkit-mask-position:-200% 0%;mask-position:-200% 0%}}.clearfix::after{display:block;clear:both;content:""}.text-bg-primary{color:#fff !important;background-color:RGBA(var(--bs-primary-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-secondary{color:#fff !important;background-color:RGBA(var(--bs-secondary-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-success{color:#fff !important;background-color:RGBA(var(--bs-success-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-info{color:#000 !important;background-color:RGBA(var(--bs-info-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-warning{color:#000 !important;background-color:RGBA(var(--bs-warning-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-danger{color:#fff !important;background-color:RGBA(var(--bs-danger-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-light{color:#000 !important;background-color:RGBA(var(--bs-light-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-dark{color:#fff !important;background-color:RGBA(var(--bs-dark-rgb), var(--bs-bg-opacity, 1)) !important}.link-primary{color:RGBA(var(--bs-primary-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-primary-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-primary:hover,.link-primary:focus{color:RGBA(10, 88, 202, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(10, 88, 202, var(--bs-link-underline-opacity, 1)) !important}.link-secondary{color:RGBA(var(--bs-secondary-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-secondary-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-secondary:hover,.link-secondary:focus{color:RGBA(86, 94, 100, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(86, 94, 100, var(--bs-link-underline-opacity, 1)) !important}.link-success{color:RGBA(var(--bs-success-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-success-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-success:hover,.link-success:focus{color:RGBA(20, 108, 67, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(20, 108, 67, var(--bs-link-underline-opacity, 1)) !important}.link-info{color:RGBA(var(--bs-info-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-info-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-info:hover,.link-info:focus{color:RGBA(61, 213, 243, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(61, 213, 243, var(--bs-link-underline-opacity, 1)) !important}.link-warning{color:RGBA(var(--bs-warning-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-warning-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-warning:hover,.link-warning:focus{color:RGBA(255, 205, 57, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(255, 205, 57, var(--bs-link-underline-opacity, 1)) !important}.link-danger{color:RGBA(var(--bs-danger-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-danger-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-danger:hover,.link-danger:focus{color:RGBA(176, 42, 55, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(176, 42, 55, var(--bs-link-underline-opacity, 1)) !important}.link-light{color:RGBA(var(--bs-light-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-light-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-light:hover,.link-light:focus{color:RGBA(249, 250, 251, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(249, 250, 251, var(--bs-link-underline-opacity, 1)) !important}.link-dark{color:RGBA(var(--bs-dark-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-dark-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-dark:hover,.link-dark:focus{color:RGBA(26, 30, 33, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(26, 30, 33, var(--bs-link-underline-opacity, 1)) !important}.link-body-emphasis{color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-body-emphasis:hover,.link-body-emphasis:focus{color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, 0.75)) !important;text-decoration-color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 0.75)) !important}.focus-ring:focus{outline:0;box-shadow:var(--bs-focus-ring-x, 0) var(--bs-focus-ring-y, 0) var(--bs-focus-ring-blur, 0) var(--bs-focus-ring-width) var(--bs-focus-ring-color)}.icon-link{display:inline-flex;gap:.375rem;align-items:center;text-decoration-color:rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 0.5));text-underline-offset:.25em;backface-visibility:hidden}.icon-link>.bi{flex-shrink:0;width:1em;height:1em;fill:currentcolor;transition:.2s ease-in-out transform}@media(prefers-reduced-motion: reduce){.icon-link>.bi{transition:none}}.icon-link-hover:hover>.bi,.icon-link-hover:focus-visible>.bi{transform:var(--bs-icon-link-transform, translate3d(0.25em, 0, 0))}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--bs-aspect-ratio);content:""}.ratio>*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-1x1{--bs-aspect-ratio: 100%}.ratio-4x3{--bs-aspect-ratio: 75%}.ratio-16x9{--bs-aspect-ratio: 56.25%}.ratio-21x9{--bs-aspect-ratio: 42.8571428571%}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}.sticky-top{position:sticky;top:0;z-index:1020}.sticky-bottom{position:sticky;bottom:0;z-index:1020}@media(min-width: 576px){.sticky-sm-top{position:sticky;top:0;z-index:1020}.sticky-sm-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 768px){.sticky-md-top{position:sticky;top:0;z-index:1020}.sticky-md-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 992px){.sticky-lg-top{position:sticky;top:0;z-index:1020}.sticky-lg-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 1200px){.sticky-xl-top{position:sticky;top:0;z-index:1020}.sticky-xl-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 1400px){.sticky-xxl-top{position:sticky;top:0;z-index:1020}.sticky-xxl-bottom{position:sticky;bottom:0;z-index:1020}}.hstack{display:flex;flex-direction:row;align-items:center;align-self:stretch}.vstack{display:flex;flex:1 1 auto;flex-direction:column;align-self:stretch}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){width:1px !important;height:1px !important;padding:0 !important;margin:-1px !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;white-space:nowrap !important;border:0 !important}.visually-hidden:not(caption),.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption){position:absolute !important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{display:inline-block;align-self:stretch;width:var(--bs-border-width);min-height:1em;background-color:currentcolor;opacity:.25}.align-baseline{vertical-align:baseline !important}.align-top{vertical-align:top !important}.align-middle{vertical-align:middle !important}.align-bottom{vertical-align:bottom !important}.align-text-bottom{vertical-align:text-bottom !important}.align-text-top{vertical-align:text-top !important}.float-start{float:left !important}.float-end{float:right !important}.float-none{float:none !important}.object-fit-contain{-o-object-fit:contain !important;object-fit:contain !important}.object-fit-cover{-o-object-fit:cover !important;object-fit:cover !important}.object-fit-fill{-o-object-fit:fill !important;object-fit:fill !important}.object-fit-scale{-o-object-fit:scale-down !important;object-fit:scale-down !important}.object-fit-none{-o-object-fit:none !important;object-fit:none !important}.opacity-0{opacity:0 !important}.opacity-25{opacity:.25 !important}.opacity-50{opacity:.5 !important}.opacity-75{opacity:.75 !important}.opacity-100{opacity:1 !important}.overflow-auto{overflow:auto !important}.overflow-hidden{overflow:hidden !important}.overflow-visible{overflow:visible !important}.overflow-scroll{overflow:scroll !important}.overflow-x-auto{overflow-x:auto !important}.overflow-x-hidden{overflow-x:hidden !important}.overflow-x-visible{overflow-x:visible !important}.overflow-x-scroll{overflow-x:scroll !important}.overflow-y-auto{overflow-y:auto !important}.overflow-y-hidden{overflow-y:hidden !important}.overflow-y-visible{overflow-y:visible !important}.overflow-y-scroll{overflow-y:scroll !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-block{display:block !important}.d-grid{display:grid !important}.d-inline-grid{display:inline-grid !important}.d-table{display:table !important}.d-table-row{display:table-row !important}.d-table-cell{display:table-cell !important}.d-flex{display:flex !important}.d-inline-flex{display:inline-flex !important}.d-none{display:none !important}.shadow{box-shadow:var(--bs-box-shadow) !important}.shadow-sm{box-shadow:var(--bs-box-shadow-sm) !important}.shadow-lg{box-shadow:var(--bs-box-shadow-lg) !important}.shadow-none{box-shadow:none !important}.focus-ring-primary{--bs-focus-ring-color: rgba(var(--bs-primary-rgb), var(--bs-focus-ring-opacity))}.focus-ring-secondary{--bs-focus-ring-color: rgba(var(--bs-secondary-rgb), var(--bs-focus-ring-opacity))}.focus-ring-success{--bs-focus-ring-color: rgba(var(--bs-success-rgb), var(--bs-focus-ring-opacity))}.focus-ring-info{--bs-focus-ring-color: rgba(var(--bs-info-rgb), var(--bs-focus-ring-opacity))}.focus-ring-warning{--bs-focus-ring-color: rgba(var(--bs-warning-rgb), var(--bs-focus-ring-opacity))}.focus-ring-danger{--bs-focus-ring-color: rgba(var(--bs-danger-rgb), var(--bs-focus-ring-opacity))}.focus-ring-light{--bs-focus-ring-color: rgba(var(--bs-light-rgb), var(--bs-focus-ring-opacity))}.focus-ring-dark{--bs-focus-ring-color: rgba(var(--bs-dark-rgb), var(--bs-focus-ring-opacity))}.position-static{position:static !important}.position-relative{position:relative !important}.position-absolute{position:absolute !important}.position-fixed{position:fixed !important}.position-sticky{position:sticky !important}.top-0{top:0 !important}.top-50{top:50% !important}.top-100{top:100% !important}.bottom-0{bottom:0 !important}.bottom-50{bottom:50% !important}.bottom-100{bottom:100% !important}.start-0{left:0 !important}.start-50{left:50% !important}.start-100{left:100% !important}.end-0{right:0 !important}.end-50{right:50% !important}.end-100{right:100% !important}.translate-middle{transform:translate(-50%, -50%) !important}.translate-middle-x{transform:translateX(-50%) !important}.translate-middle-y{transform:translateY(-50%) !important}.border{border:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-0{border:0 !important}.border-top{border-top:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-top-0{border-top:0 !important}.border-end{border-right:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-end-0{border-right:0 !important}.border-bottom{border-bottom:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-bottom-0{border-bottom:0 !important}.border-start{border-left:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-start-0{border-left:0 !important}.border-primary{--bs-border-opacity: 1;border-color:rgba(var(--bs-primary-rgb), var(--bs-border-opacity)) !important}.border-secondary{--bs-border-opacity: 1;border-color:rgba(var(--bs-secondary-rgb), var(--bs-border-opacity)) !important}.border-success{--bs-border-opacity: 1;border-color:rgba(var(--bs-success-rgb), var(--bs-border-opacity)) !important}.border-info{--bs-border-opacity: 1;border-color:rgba(var(--bs-info-rgb), var(--bs-border-opacity)) !important}.border-warning{--bs-border-opacity: 1;border-color:rgba(var(--bs-warning-rgb), var(--bs-border-opacity)) !important}.border-danger{--bs-border-opacity: 1;border-color:rgba(var(--bs-danger-rgb), var(--bs-border-opacity)) !important}.border-light{--bs-border-opacity: 1;border-color:rgba(var(--bs-light-rgb), var(--bs-border-opacity)) !important}.border-dark{--bs-border-opacity: 1;border-color:rgba(var(--bs-dark-rgb), var(--bs-border-opacity)) !important}.border-black{--bs-border-opacity: 1;border-color:rgba(var(--bs-black-rgb), var(--bs-border-opacity)) !important}.border-white{--bs-border-opacity: 1;border-color:rgba(var(--bs-white-rgb), var(--bs-border-opacity)) !important}.border-primary-subtle{border-color:var(--bs-primary-border-subtle) !important}.border-secondary-subtle{border-color:var(--bs-secondary-border-subtle) !important}.border-success-subtle{border-color:var(--bs-success-border-subtle) !important}.border-info-subtle{border-color:var(--bs-info-border-subtle) !important}.border-warning-subtle{border-color:var(--bs-warning-border-subtle) !important}.border-danger-subtle{border-color:var(--bs-danger-border-subtle) !important}.border-light-subtle{border-color:var(--bs-light-border-subtle) !important}.border-dark-subtle{border-color:var(--bs-dark-border-subtle) !important}.border-1{border-width:1px !important}.border-2{border-width:2px !important}.border-3{border-width:3px !important}.border-4{border-width:4px !important}.border-5{border-width:5px !important}.border-opacity-10{--bs-border-opacity: 0.1}.border-opacity-25{--bs-border-opacity: 0.25}.border-opacity-50{--bs-border-opacity: 0.5}.border-opacity-75{--bs-border-opacity: 0.75}.border-opacity-100{--bs-border-opacity: 1}.w-25{width:25% !important}.w-50{width:50% !important}.w-75{width:75% !important}.w-100{width:100% !important}.w-auto{width:auto !important}.mw-100{max-width:100% !important}.vw-100{width:100vw !important}.min-vw-100{min-width:100vw !important}.h-25{height:25% !important}.h-50{height:50% !important}.h-75{height:75% !important}.h-100{height:100% !important}.h-auto{height:auto !important}.mh-100{max-height:100% !important}.vh-100{height:100vh !important}.min-vh-100{min-height:100vh !important}.flex-fill{flex:1 1 auto !important}.flex-row{flex-direction:row !important}.flex-column{flex-direction:column !important}.flex-row-reverse{flex-direction:row-reverse !important}.flex-column-reverse{flex-direction:column-reverse !important}.flex-grow-0{flex-grow:0 !important}.flex-grow-1{flex-grow:1 !important}.flex-shrink-0{flex-shrink:0 !important}.flex-shrink-1{flex-shrink:1 !important}.flex-wrap{flex-wrap:wrap !important}.flex-nowrap{flex-wrap:nowrap !important}.flex-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-start{justify-content:flex-start !important}.justify-content-end{justify-content:flex-end !important}.justify-content-center{justify-content:center !important}.justify-content-between{justify-content:space-between !important}.justify-content-around{justify-content:space-around !important}.justify-content-evenly{justify-content:space-evenly !important}.align-items-start{align-items:flex-start !important}.align-items-end{align-items:flex-end !important}.align-items-center{align-items:center !important}.align-items-baseline{align-items:baseline !important}.align-items-stretch{align-items:stretch !important}.align-content-start{align-content:flex-start !important}.align-content-end{align-content:flex-end !important}.align-content-center{align-content:center !important}.align-content-between{align-content:space-between !important}.align-content-around{align-content:space-around !important}.align-content-stretch{align-content:stretch !important}.align-self-auto{align-self:auto !important}.align-self-start{align-self:flex-start !important}.align-self-end{align-self:flex-end !important}.align-self-center{align-self:center !important}.align-self-baseline{align-self:baseline !important}.align-self-stretch{align-self:stretch !important}.order-first{order:-1 !important}.order-0{order:0 !important}.order-1{order:1 !important}.order-2{order:2 !important}.order-3{order:3 !important}.order-4{order:4 !important}.order-5{order:5 !important}.order-last{order:6 !important}.m-0{margin:0 !important}.m-1{margin:.25rem !important}.m-2{margin:.5rem !important}.m-3{margin:1rem !important}.m-4{margin:1.5rem !important}.m-5{margin:3rem !important}.m-auto{margin:auto !important}.mx-0{margin-right:0 !important;margin-left:0 !important}.mx-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-3{margin-right:1rem !important;margin-left:1rem !important}.mx-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-5{margin-right:3rem !important;margin-left:3rem !important}.mx-auto{margin-right:auto !important;margin-left:auto !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-0{margin-top:0 !important}.mt-1{margin-top:.25rem !important}.mt-2{margin-top:.5rem !important}.mt-3{margin-top:1rem !important}.mt-4{margin-top:1.5rem !important}.mt-5{margin-top:3rem !important}.mt-auto{margin-top:auto !important}.me-0{margin-right:0 !important}.me-1{margin-right:.25rem !important}.me-2{margin-right:.5rem !important}.me-3{margin-right:1rem !important}.me-4{margin-right:1.5rem !important}.me-5{margin-right:3rem !important}.me-auto{margin-right:auto !important}.mb-0{margin-bottom:0 !important}.mb-1{margin-bottom:.25rem !important}.mb-2{margin-bottom:.5rem !important}.mb-3{margin-bottom:1rem !important}.mb-4{margin-bottom:1.5rem !important}.mb-5{margin-bottom:3rem !important}.mb-auto{margin-bottom:auto !important}.ms-0{margin-left:0 !important}.ms-1{margin-left:.25rem !important}.ms-2{margin-left:.5rem !important}.ms-3{margin-left:1rem !important}.ms-4{margin-left:1.5rem !important}.ms-5{margin-left:3rem !important}.ms-auto{margin-left:auto !important}.p-0{padding:0 !important}.p-1{padding:.25rem !important}.p-2{padding:.5rem !important}.p-3{padding:1rem !important}.p-4{padding:1.5rem !important}.p-5{padding:3rem !important}.px-0{padding-right:0 !important;padding-left:0 !important}.px-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-3{padding-right:1rem !important;padding-left:1rem !important}.px-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-5{padding-right:3rem !important;padding-left:3rem !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-0{padding-top:0 !important}.pt-1{padding-top:.25rem !important}.pt-2{padding-top:.5rem !important}.pt-3{padding-top:1rem !important}.pt-4{padding-top:1.5rem !important}.pt-5{padding-top:3rem !important}.pe-0{padding-right:0 !important}.pe-1{padding-right:.25rem !important}.pe-2{padding-right:.5rem !important}.pe-3{padding-right:1rem !important}.pe-4{padding-right:1.5rem !important}.pe-5{padding-right:3rem !important}.pb-0{padding-bottom:0 !important}.pb-1{padding-bottom:.25rem !important}.pb-2{padding-bottom:.5rem !important}.pb-3{padding-bottom:1rem !important}.pb-4{padding-bottom:1.5rem !important}.pb-5{padding-bottom:3rem !important}.ps-0{padding-left:0 !important}.ps-1{padding-left:.25rem !important}.ps-2{padding-left:.5rem !important}.ps-3{padding-left:1rem !important}.ps-4{padding-left:1.5rem !important}.ps-5{padding-left:3rem !important}.gap-0{gap:0 !important}.gap-1{gap:.25rem !important}.gap-2{gap:.5rem !important}.gap-3{gap:1rem !important}.gap-4{gap:1.5rem !important}.gap-5{gap:3rem !important}.row-gap-0{row-gap:0 !important}.row-gap-1{row-gap:.25rem !important}.row-gap-2{row-gap:.5rem !important}.row-gap-3{row-gap:1rem !important}.row-gap-4{row-gap:1.5rem !important}.row-gap-5{row-gap:3rem !important}.column-gap-0{-moz-column-gap:0 !important;column-gap:0 !important}.column-gap-1{-moz-column-gap:.25rem !important;column-gap:.25rem !important}.column-gap-2{-moz-column-gap:.5rem !important;column-gap:.5rem !important}.column-gap-3{-moz-column-gap:1rem !important;column-gap:1rem !important}.column-gap-4{-moz-column-gap:1.5rem !important;column-gap:1.5rem !important}.column-gap-5{-moz-column-gap:3rem !important;column-gap:3rem !important}.font-monospace{font-family:var(--bs-font-monospace) !important}.fs-1{font-size:calc(1.375rem + 1.5vw) !important}.fs-2{font-size:calc(1.325rem + 0.9vw) !important}.fs-3{font-size:calc(1.3rem + 0.6vw) !important}.fs-4{font-size:calc(1.275rem + 0.3vw) !important}.fs-5{font-size:1.25rem !important}.fs-6{font-size:1rem !important}.fst-italic{font-style:italic !important}.fst-normal{font-style:normal !important}.fw-lighter{font-weight:lighter !important}.fw-light{font-weight:300 !important}.fw-normal{font-weight:400 !important}.fw-medium{font-weight:500 !important}.fw-semibold{font-weight:600 !important}.fw-bold{font-weight:700 !important}.fw-bolder{font-weight:bolder !important}.lh-1{line-height:1 !important}.lh-sm{line-height:1.25 !important}.lh-base{line-height:1.5 !important}.lh-lg{line-height:2 !important}.text-start{text-align:left !important}.text-end{text-align:right !important}.text-center{text-align:center !important}.text-decoration-none{text-decoration:none !important}.text-decoration-underline{text-decoration:underline !important}.text-decoration-line-through{text-decoration:line-through !important}.text-lowercase{text-transform:lowercase !important}.text-uppercase{text-transform:uppercase !important}.text-capitalize{text-transform:capitalize !important}.text-wrap{white-space:normal !important}.text-nowrap{white-space:nowrap !important}.text-break{word-wrap:break-word !important;word-break:break-word !important}.text-primary{--bs-text-opacity: 1;color:rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important}.text-secondary{--bs-text-opacity: 1;color:rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important}.text-success{--bs-text-opacity: 1;color:rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important}.text-info{--bs-text-opacity: 1;color:rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important}.text-warning{--bs-text-opacity: 1;color:rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important}.text-danger{--bs-text-opacity: 1;color:rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important}.text-light{--bs-text-opacity: 1;color:rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important}.text-dark{--bs-text-opacity: 1;color:rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important}.text-black{--bs-text-opacity: 1;color:rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important}.text-white{--bs-text-opacity: 1;color:rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important}.text-body{--bs-text-opacity: 1;color:rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important}.text-muted{--bs-text-opacity: 1;color:var(--bs-secondary-color) !important}.text-black-50{--bs-text-opacity: 1;color:rgba(0,0,0,.5) !important}.text-white-50{--bs-text-opacity: 1;color:rgba(255,255,255,.5) !important}.text-body-secondary{--bs-text-opacity: 1;color:var(--bs-secondary-color) !important}.text-body-tertiary{--bs-text-opacity: 1;color:var(--bs-tertiary-color) !important}.text-body-emphasis{--bs-text-opacity: 1;color:var(--bs-emphasis-color) !important}.text-reset{--bs-text-opacity: 1;color:inherit !important}.text-opacity-25{--bs-text-opacity: 0.25}.text-opacity-50{--bs-text-opacity: 0.5}.text-opacity-75{--bs-text-opacity: 0.75}.text-opacity-100{--bs-text-opacity: 1}.text-primary-emphasis{color:var(--bs-primary-text-emphasis) !important}.text-secondary-emphasis{color:var(--bs-secondary-text-emphasis) !important}.text-success-emphasis{color:var(--bs-success-text-emphasis) !important}.text-info-emphasis{color:var(--bs-info-text-emphasis) !important}.text-warning-emphasis{color:var(--bs-warning-text-emphasis) !important}.text-danger-emphasis{color:var(--bs-danger-text-emphasis) !important}.text-light-emphasis{color:var(--bs-light-text-emphasis) !important}.text-dark-emphasis{color:var(--bs-dark-text-emphasis) !important}.link-opacity-10{--bs-link-opacity: 0.1}.link-opacity-10-hover:hover{--bs-link-opacity: 0.1}.link-opacity-25{--bs-link-opacity: 0.25}.link-opacity-25-hover:hover{--bs-link-opacity: 0.25}.link-opacity-50{--bs-link-opacity: 0.5}.link-opacity-50-hover:hover{--bs-link-opacity: 0.5}.link-opacity-75{--bs-link-opacity: 0.75}.link-opacity-75-hover:hover{--bs-link-opacity: 0.75}.link-opacity-100{--bs-link-opacity: 1}.link-opacity-100-hover:hover{--bs-link-opacity: 1}.link-offset-1{text-underline-offset:.125em !important}.link-offset-1-hover:hover{text-underline-offset:.125em !important}.link-offset-2{text-underline-offset:.25em !important}.link-offset-2-hover:hover{text-underline-offset:.25em !important}.link-offset-3{text-underline-offset:.375em !important}.link-offset-3-hover:hover{text-underline-offset:.375em !important}.link-underline-primary{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-primary-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-secondary{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-secondary-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-success{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-success-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-info{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-info-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-warning{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-warning-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-danger{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-danger-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-light{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-light-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-dark{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-dark-rgb), var(--bs-link-underline-opacity)) !important}.link-underline{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-link-color-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-underline-opacity-0{--bs-link-underline-opacity: 0}.link-underline-opacity-0-hover:hover{--bs-link-underline-opacity: 0}.link-underline-opacity-10{--bs-link-underline-opacity: 0.1}.link-underline-opacity-10-hover:hover{--bs-link-underline-opacity: 0.1}.link-underline-opacity-25{--bs-link-underline-opacity: 0.25}.link-underline-opacity-25-hover:hover{--bs-link-underline-opacity: 0.25}.link-underline-opacity-50{--bs-link-underline-opacity: 0.5}.link-underline-opacity-50-hover:hover{--bs-link-underline-opacity: 0.5}.link-underline-opacity-75{--bs-link-underline-opacity: 0.75}.link-underline-opacity-75-hover:hover{--bs-link-underline-opacity: 0.75}.link-underline-opacity-100{--bs-link-underline-opacity: 1}.link-underline-opacity-100-hover:hover{--bs-link-underline-opacity: 1}.bg-primary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important}.bg-secondary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important}.bg-success{--bs-bg-opacity: 1;background-color:rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important}.bg-info{--bs-bg-opacity: 1;background-color:rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important}.bg-warning{--bs-bg-opacity: 1;background-color:rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important}.bg-danger{--bs-bg-opacity: 1;background-color:rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important}.bg-light{--bs-bg-opacity: 1;background-color:rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important}.bg-dark{--bs-bg-opacity: 1;background-color:rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important}.bg-black{--bs-bg-opacity: 1;background-color:rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important}.bg-white{--bs-bg-opacity: 1;background-color:rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important}.bg-body{--bs-bg-opacity: 1;background-color:rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important}.bg-transparent{--bs-bg-opacity: 1;background-color:rgba(0,0,0,0) !important}.bg-body-secondary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-secondary-bg-rgb), var(--bs-bg-opacity)) !important}.bg-body-tertiary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-tertiary-bg-rgb), var(--bs-bg-opacity)) !important}.bg-opacity-10{--bs-bg-opacity: 0.1}.bg-opacity-25{--bs-bg-opacity: 0.25}.bg-opacity-50{--bs-bg-opacity: 0.5}.bg-opacity-75{--bs-bg-opacity: 0.75}.bg-opacity-100{--bs-bg-opacity: 1}.bg-primary-subtle{background-color:var(--bs-primary-bg-subtle) !important}.bg-secondary-subtle{background-color:var(--bs-secondary-bg-subtle) !important}.bg-success-subtle{background-color:var(--bs-success-bg-subtle) !important}.bg-info-subtle{background-color:var(--bs-info-bg-subtle) !important}.bg-warning-subtle{background-color:var(--bs-warning-bg-subtle) !important}.bg-danger-subtle{background-color:var(--bs-danger-bg-subtle) !important}.bg-light-subtle{background-color:var(--bs-light-bg-subtle) !important}.bg-dark-subtle{background-color:var(--bs-dark-bg-subtle) !important}.bg-gradient{background-image:var(--bs-gradient) !important}.user-select-all{-webkit-user-select:all !important;-moz-user-select:all !important;user-select:all !important}.user-select-auto{-webkit-user-select:auto !important;-moz-user-select:auto !important;user-select:auto !important}.user-select-none{-webkit-user-select:none !important;-moz-user-select:none !important;user-select:none !important}.pe-none{pointer-events:none !important}.pe-auto{pointer-events:auto !important}.rounded{border-radius:var(--bs-border-radius) !important}.rounded-0{border-radius:0 !important}.rounded-1{border-radius:var(--bs-border-radius-sm) !important}.rounded-2{border-radius:var(--bs-border-radius) !important}.rounded-3{border-radius:var(--bs-border-radius-lg) !important}.rounded-4{border-radius:var(--bs-border-radius-xl) !important}.rounded-5{border-radius:var(--bs-border-radius-xxl) !important}.rounded-circle{border-radius:50% !important}.rounded-pill{border-radius:var(--bs-border-radius-pill) !important}.rounded-top{border-top-left-radius:var(--bs-border-radius) !important;border-top-right-radius:var(--bs-border-radius) !important}.rounded-top-0{border-top-left-radius:0 !important;border-top-right-radius:0 !important}.rounded-top-1{border-top-left-radius:var(--bs-border-radius-sm) !important;border-top-right-radius:var(--bs-border-radius-sm) !important}.rounded-top-2{border-top-left-radius:var(--bs-border-radius) !important;border-top-right-radius:var(--bs-border-radius) !important}.rounded-top-3{border-top-left-radius:var(--bs-border-radius-lg) !important;border-top-right-radius:var(--bs-border-radius-lg) !important}.rounded-top-4{border-top-left-radius:var(--bs-border-radius-xl) !important;border-top-right-radius:var(--bs-border-radius-xl) !important}.rounded-top-5{border-top-left-radius:var(--bs-border-radius-xxl) !important;border-top-right-radius:var(--bs-border-radius-xxl) !important}.rounded-top-circle{border-top-left-radius:50% !important;border-top-right-radius:50% !important}.rounded-top-pill{border-top-left-radius:var(--bs-border-radius-pill) !important;border-top-right-radius:var(--bs-border-radius-pill) !important}.rounded-end{border-top-right-radius:var(--bs-border-radius) !important;border-bottom-right-radius:var(--bs-border-radius) !important}.rounded-end-0{border-top-right-radius:0 !important;border-bottom-right-radius:0 !important}.rounded-end-1{border-top-right-radius:var(--bs-border-radius-sm) !important;border-bottom-right-radius:var(--bs-border-radius-sm) !important}.rounded-end-2{border-top-right-radius:var(--bs-border-radius) !important;border-bottom-right-radius:var(--bs-border-radius) !important}.rounded-end-3{border-top-right-radius:var(--bs-border-radius-lg) !important;border-bottom-right-radius:var(--bs-border-radius-lg) !important}.rounded-end-4{border-top-right-radius:var(--bs-border-radius-xl) !important;border-bottom-right-radius:var(--bs-border-radius-xl) !important}.rounded-end-5{border-top-right-radius:var(--bs-border-radius-xxl) !important;border-bottom-right-radius:var(--bs-border-radius-xxl) !important}.rounded-end-circle{border-top-right-radius:50% !important;border-bottom-right-radius:50% !important}.rounded-end-pill{border-top-right-radius:var(--bs-border-radius-pill) !important;border-bottom-right-radius:var(--bs-border-radius-pill) !important}.rounded-bottom{border-bottom-right-radius:var(--bs-border-radius) !important;border-bottom-left-radius:var(--bs-border-radius) !important}.rounded-bottom-0{border-bottom-right-radius:0 !important;border-bottom-left-radius:0 !important}.rounded-bottom-1{border-bottom-right-radius:var(--bs-border-radius-sm) !important;border-bottom-left-radius:var(--bs-border-radius-sm) !important}.rounded-bottom-2{border-bottom-right-radius:var(--bs-border-radius) !important;border-bottom-left-radius:var(--bs-border-radius) !important}.rounded-bottom-3{border-bottom-right-radius:var(--bs-border-radius-lg) !important;border-bottom-left-radius:var(--bs-border-radius-lg) !important}.rounded-bottom-4{border-bottom-right-radius:var(--bs-border-radius-xl) !important;border-bottom-left-radius:var(--bs-border-radius-xl) !important}.rounded-bottom-5{border-bottom-right-radius:var(--bs-border-radius-xxl) !important;border-bottom-left-radius:var(--bs-border-radius-xxl) !important}.rounded-bottom-circle{border-bottom-right-radius:50% !important;border-bottom-left-radius:50% !important}.rounded-bottom-pill{border-bottom-right-radius:var(--bs-border-radius-pill) !important;border-bottom-left-radius:var(--bs-border-radius-pill) !important}.rounded-start{border-bottom-left-radius:var(--bs-border-radius) !important;border-top-left-radius:var(--bs-border-radius) !important}.rounded-start-0{border-bottom-left-radius:0 !important;border-top-left-radius:0 !important}.rounded-start-1{border-bottom-left-radius:var(--bs-border-radius-sm) !important;border-top-left-radius:var(--bs-border-radius-sm) !important}.rounded-start-2{border-bottom-left-radius:var(--bs-border-radius) !important;border-top-left-radius:var(--bs-border-radius) !important}.rounded-start-3{border-bottom-left-radius:var(--bs-border-radius-lg) !important;border-top-left-radius:var(--bs-border-radius-lg) !important}.rounded-start-4{border-bottom-left-radius:var(--bs-border-radius-xl) !important;border-top-left-radius:var(--bs-border-radius-xl) !important}.rounded-start-5{border-bottom-left-radius:var(--bs-border-radius-xxl) !important;border-top-left-radius:var(--bs-border-radius-xxl) !important}.rounded-start-circle{border-bottom-left-radius:50% !important;border-top-left-radius:50% !important}.rounded-start-pill{border-bottom-left-radius:var(--bs-border-radius-pill) !important;border-top-left-radius:var(--bs-border-radius-pill) !important}.visible{visibility:visible !important}.invisible{visibility:hidden !important}.z-n1{z-index:-1 !important}.z-0{z-index:0 !important}.z-1{z-index:1 !important}.z-2{z-index:2 !important}.z-3{z-index:3 !important}@media(min-width: 576px){.float-sm-start{float:left !important}.float-sm-end{float:right !important}.float-sm-none{float:none !important}.object-fit-sm-contain{-o-object-fit:contain !important;object-fit:contain !important}.object-fit-sm-cover{-o-object-fit:cover !important;object-fit:cover !important}.object-fit-sm-fill{-o-object-fit:fill !important;object-fit:fill !important}.object-fit-sm-scale{-o-object-fit:scale-down !important;object-fit:scale-down !important}.object-fit-sm-none{-o-object-fit:none !important;object-fit:none !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-block{display:block !important}.d-sm-grid{display:grid !important}.d-sm-inline-grid{display:inline-grid !important}.d-sm-table{display:table !important}.d-sm-table-row{display:table-row !important}.d-sm-table-cell{display:table-cell !important}.d-sm-flex{display:flex !important}.d-sm-inline-flex{display:inline-flex !important}.d-sm-none{display:none !important}.flex-sm-fill{flex:1 1 auto !important}.flex-sm-row{flex-direction:row !important}.flex-sm-column{flex-direction:column !important}.flex-sm-row-reverse{flex-direction:row-reverse !important}.flex-sm-column-reverse{flex-direction:column-reverse !important}.flex-sm-grow-0{flex-grow:0 !important}.flex-sm-grow-1{flex-grow:1 !important}.flex-sm-shrink-0{flex-shrink:0 !important}.flex-sm-shrink-1{flex-shrink:1 !important}.flex-sm-wrap{flex-wrap:wrap !important}.flex-sm-nowrap{flex-wrap:nowrap !important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-sm-start{justify-content:flex-start !important}.justify-content-sm-end{justify-content:flex-end !important}.justify-content-sm-center{justify-content:center !important}.justify-content-sm-between{justify-content:space-between !important}.justify-content-sm-around{justify-content:space-around !important}.justify-content-sm-evenly{justify-content:space-evenly !important}.align-items-sm-start{align-items:flex-start !important}.align-items-sm-end{align-items:flex-end !important}.align-items-sm-center{align-items:center !important}.align-items-sm-baseline{align-items:baseline !important}.align-items-sm-stretch{align-items:stretch !important}.align-content-sm-start{align-content:flex-start !important}.align-content-sm-end{align-content:flex-end !important}.align-content-sm-center{align-content:center !important}.align-content-sm-between{align-content:space-between !important}.align-content-sm-around{align-content:space-around !important}.align-content-sm-stretch{align-content:stretch !important}.align-self-sm-auto{align-self:auto !important}.align-self-sm-start{align-self:flex-start !important}.align-self-sm-end{align-self:flex-end !important}.align-self-sm-center{align-self:center !important}.align-self-sm-baseline{align-self:baseline !important}.align-self-sm-stretch{align-self:stretch !important}.order-sm-first{order:-1 !important}.order-sm-0{order:0 !important}.order-sm-1{order:1 !important}.order-sm-2{order:2 !important}.order-sm-3{order:3 !important}.order-sm-4{order:4 !important}.order-sm-5{order:5 !important}.order-sm-last{order:6 !important}.m-sm-0{margin:0 !important}.m-sm-1{margin:.25rem !important}.m-sm-2{margin:.5rem !important}.m-sm-3{margin:1rem !important}.m-sm-4{margin:1.5rem !important}.m-sm-5{margin:3rem !important}.m-sm-auto{margin:auto !important}.mx-sm-0{margin-right:0 !important;margin-left:0 !important}.mx-sm-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-sm-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-sm-3{margin-right:1rem !important;margin-left:1rem !important}.mx-sm-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-sm-5{margin-right:3rem !important;margin-left:3rem !important}.mx-sm-auto{margin-right:auto !important;margin-left:auto !important}.my-sm-0{margin-top:0 !important;margin-bottom:0 !important}.my-sm-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-sm-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-sm-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-sm-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-sm-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-sm-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-sm-0{margin-top:0 !important}.mt-sm-1{margin-top:.25rem !important}.mt-sm-2{margin-top:.5rem !important}.mt-sm-3{margin-top:1rem !important}.mt-sm-4{margin-top:1.5rem !important}.mt-sm-5{margin-top:3rem !important}.mt-sm-auto{margin-top:auto !important}.me-sm-0{margin-right:0 !important}.me-sm-1{margin-right:.25rem !important}.me-sm-2{margin-right:.5rem !important}.me-sm-3{margin-right:1rem !important}.me-sm-4{margin-right:1.5rem !important}.me-sm-5{margin-right:3rem !important}.me-sm-auto{margin-right:auto !important}.mb-sm-0{margin-bottom:0 !important}.mb-sm-1{margin-bottom:.25rem !important}.mb-sm-2{margin-bottom:.5rem !important}.mb-sm-3{margin-bottom:1rem !important}.mb-sm-4{margin-bottom:1.5rem !important}.mb-sm-5{margin-bottom:3rem !important}.mb-sm-auto{margin-bottom:auto !important}.ms-sm-0{margin-left:0 !important}.ms-sm-1{margin-left:.25rem !important}.ms-sm-2{margin-left:.5rem !important}.ms-sm-3{margin-left:1rem !important}.ms-sm-4{margin-left:1.5rem !important}.ms-sm-5{margin-left:3rem !important}.ms-sm-auto{margin-left:auto !important}.p-sm-0{padding:0 !important}.p-sm-1{padding:.25rem !important}.p-sm-2{padding:.5rem !important}.p-sm-3{padding:1rem !important}.p-sm-4{padding:1.5rem !important}.p-sm-5{padding:3rem !important}.px-sm-0{padding-right:0 !important;padding-left:0 !important}.px-sm-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-sm-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-sm-3{padding-right:1rem !important;padding-left:1rem !important}.px-sm-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-sm-5{padding-right:3rem !important;padding-left:3rem !important}.py-sm-0{padding-top:0 !important;padding-bottom:0 !important}.py-sm-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-sm-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-sm-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-sm-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-sm-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-sm-0{padding-top:0 !important}.pt-sm-1{padding-top:.25rem !important}.pt-sm-2{padding-top:.5rem !important}.pt-sm-3{padding-top:1rem !important}.pt-sm-4{padding-top:1.5rem !important}.pt-sm-5{padding-top:3rem !important}.pe-sm-0{padding-right:0 !important}.pe-sm-1{padding-right:.25rem !important}.pe-sm-2{padding-right:.5rem !important}.pe-sm-3{padding-right:1rem !important}.pe-sm-4{padding-right:1.5rem !important}.pe-sm-5{padding-right:3rem !important}.pb-sm-0{padding-bottom:0 !important}.pb-sm-1{padding-bottom:.25rem !important}.pb-sm-2{padding-bottom:.5rem !important}.pb-sm-3{padding-bottom:1rem !important}.pb-sm-4{padding-bottom:1.5rem !important}.pb-sm-5{padding-bottom:3rem !important}.ps-sm-0{padding-left:0 !important}.ps-sm-1{padding-left:.25rem !important}.ps-sm-2{padding-left:.5rem !important}.ps-sm-3{padding-left:1rem !important}.ps-sm-4{padding-left:1.5rem !important}.ps-sm-5{padding-left:3rem !important}.gap-sm-0{gap:0 !important}.gap-sm-1{gap:.25rem !important}.gap-sm-2{gap:.5rem !important}.gap-sm-3{gap:1rem !important}.gap-sm-4{gap:1.5rem !important}.gap-sm-5{gap:3rem !important}.row-gap-sm-0{row-gap:0 !important}.row-gap-sm-1{row-gap:.25rem !important}.row-gap-sm-2{row-gap:.5rem !important}.row-gap-sm-3{row-gap:1rem !important}.row-gap-sm-4{row-gap:1.5rem !important}.row-gap-sm-5{row-gap:3rem !important}.column-gap-sm-0{-moz-column-gap:0 !important;column-gap:0 !important}.column-gap-sm-1{-moz-column-gap:.25rem !important;column-gap:.25rem !important}.column-gap-sm-2{-moz-column-gap:.5rem !important;column-gap:.5rem !important}.column-gap-sm-3{-moz-column-gap:1rem !important;column-gap:1rem !important}.column-gap-sm-4{-moz-column-gap:1.5rem !important;column-gap:1.5rem !important}.column-gap-sm-5{-moz-column-gap:3rem !important;column-gap:3rem !important}.text-sm-start{text-align:left !important}.text-sm-end{text-align:right !important}.text-sm-center{text-align:center !important}}@media(min-width: 768px){.float-md-start{float:left !important}.float-md-end{float:right !important}.float-md-none{float:none !important}.object-fit-md-contain{-o-object-fit:contain !important;object-fit:contain !important}.object-fit-md-cover{-o-object-fit:cover !important;object-fit:cover !important}.object-fit-md-fill{-o-object-fit:fill !important;object-fit:fill !important}.object-fit-md-scale{-o-object-fit:scale-down !important;object-fit:scale-down !important}.object-fit-md-none{-o-object-fit:none !important;object-fit:none !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-block{display:block !important}.d-md-grid{display:grid !important}.d-md-inline-grid{display:inline-grid !important}.d-md-table{display:table !important}.d-md-table-row{display:table-row !important}.d-md-table-cell{display:table-cell !important}.d-md-flex{display:flex !important}.d-md-inline-flex{display:inline-flex !important}.d-md-none{display:none !important}.flex-md-fill{flex:1 1 auto !important}.flex-md-row{flex-direction:row !important}.flex-md-column{flex-direction:column !important}.flex-md-row-reverse{flex-direction:row-reverse !important}.flex-md-column-reverse{flex-direction:column-reverse !important}.flex-md-grow-0{flex-grow:0 !important}.flex-md-grow-1{flex-grow:1 !important}.flex-md-shrink-0{flex-shrink:0 !important}.flex-md-shrink-1{flex-shrink:1 !important}.flex-md-wrap{flex-wrap:wrap !important}.flex-md-nowrap{flex-wrap:nowrap !important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-md-start{justify-content:flex-start !important}.justify-content-md-end{justify-content:flex-end !important}.justify-content-md-center{justify-content:center !important}.justify-content-md-between{justify-content:space-between !important}.justify-content-md-around{justify-content:space-around !important}.justify-content-md-evenly{justify-content:space-evenly !important}.align-items-md-start{align-items:flex-start !important}.align-items-md-end{align-items:flex-end !important}.align-items-md-center{align-items:center !important}.align-items-md-baseline{align-items:baseline !important}.align-items-md-stretch{align-items:stretch !important}.align-content-md-start{align-content:flex-start !important}.align-content-md-end{align-content:flex-end !important}.align-content-md-center{align-content:center !important}.align-content-md-between{align-content:space-between !important}.align-content-md-around{align-content:space-around !important}.align-content-md-stretch{align-content:stretch !important}.align-self-md-auto{align-self:auto !important}.align-self-md-start{align-self:flex-start !important}.align-self-md-end{align-self:flex-end !important}.align-self-md-center{align-self:center !important}.align-self-md-baseline{align-self:baseline !important}.align-self-md-stretch{align-self:stretch !important}.order-md-first{order:-1 !important}.order-md-0{order:0 !important}.order-md-1{order:1 !important}.order-md-2{order:2 !important}.order-md-3{order:3 !important}.order-md-4{order:4 !important}.order-md-5{order:5 !important}.order-md-last{order:6 !important}.m-md-0{margin:0 !important}.m-md-1{margin:.25rem !important}.m-md-2{margin:.5rem !important}.m-md-3{margin:1rem !important}.m-md-4{margin:1.5rem !important}.m-md-5{margin:3rem !important}.m-md-auto{margin:auto !important}.mx-md-0{margin-right:0 !important;margin-left:0 !important}.mx-md-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-md-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-md-3{margin-right:1rem !important;margin-left:1rem !important}.mx-md-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-md-5{margin-right:3rem !important;margin-left:3rem !important}.mx-md-auto{margin-right:auto !important;margin-left:auto !important}.my-md-0{margin-top:0 !important;margin-bottom:0 !important}.my-md-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-md-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-md-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-md-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-md-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-md-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-md-0{margin-top:0 !important}.mt-md-1{margin-top:.25rem !important}.mt-md-2{margin-top:.5rem !important}.mt-md-3{margin-top:1rem !important}.mt-md-4{margin-top:1.5rem !important}.mt-md-5{margin-top:3rem !important}.mt-md-auto{margin-top:auto !important}.me-md-0{margin-right:0 !important}.me-md-1{margin-right:.25rem !important}.me-md-2{margin-right:.5rem !important}.me-md-3{margin-right:1rem !important}.me-md-4{margin-right:1.5rem !important}.me-md-5{margin-right:3rem !important}.me-md-auto{margin-right:auto !important}.mb-md-0{margin-bottom:0 !important}.mb-md-1{margin-bottom:.25rem !important}.mb-md-2{margin-bottom:.5rem !important}.mb-md-3{margin-bottom:1rem !important}.mb-md-4{margin-bottom:1.5rem !important}.mb-md-5{margin-bottom:3rem !important}.mb-md-auto{margin-bottom:auto !important}.ms-md-0{margin-left:0 !important}.ms-md-1{margin-left:.25rem !important}.ms-md-2{margin-left:.5rem !important}.ms-md-3{margin-left:1rem !important}.ms-md-4{margin-left:1.5rem !important}.ms-md-5{margin-left:3rem !important}.ms-md-auto{margin-left:auto !important}.p-md-0{padding:0 !important}.p-md-1{padding:.25rem !important}.p-md-2{padding:.5rem !important}.p-md-3{padding:1rem !important}.p-md-4{padding:1.5rem !important}.p-md-5{padding:3rem !important}.px-md-0{padding-right:0 !important;padding-left:0 !important}.px-md-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-md-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-md-3{padding-right:1rem !important;padding-left:1rem !important}.px-md-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-md-5{padding-right:3rem !important;padding-left:3rem !important}.py-md-0{padding-top:0 !important;padding-bottom:0 !important}.py-md-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-md-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-md-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-md-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-md-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-md-0{padding-top:0 !important}.pt-md-1{padding-top:.25rem !important}.pt-md-2{padding-top:.5rem !important}.pt-md-3{padding-top:1rem !important}.pt-md-4{padding-top:1.5rem !important}.pt-md-5{padding-top:3rem !important}.pe-md-0{padding-right:0 !important}.pe-md-1{padding-right:.25rem !important}.pe-md-2{padding-right:.5rem !important}.pe-md-3{padding-right:1rem !important}.pe-md-4{padding-right:1.5rem !important}.pe-md-5{padding-right:3rem !important}.pb-md-0{padding-bottom:0 !important}.pb-md-1{padding-bottom:.25rem !important}.pb-md-2{padding-bottom:.5rem !important}.pb-md-3{padding-bottom:1rem !important}.pb-md-4{padding-bottom:1.5rem !important}.pb-md-5{padding-bottom:3rem !important}.ps-md-0{padding-left:0 !important}.ps-md-1{padding-left:.25rem !important}.ps-md-2{padding-left:.5rem !important}.ps-md-3{padding-left:1rem !important}.ps-md-4{padding-left:1.5rem !important}.ps-md-5{padding-left:3rem !important}.gap-md-0{gap:0 !important}.gap-md-1{gap:.25rem !important}.gap-md-2{gap:.5rem !important}.gap-md-3{gap:1rem !important}.gap-md-4{gap:1.5rem !important}.gap-md-5{gap:3rem !important}.row-gap-md-0{row-gap:0 !important}.row-gap-md-1{row-gap:.25rem !important}.row-gap-md-2{row-gap:.5rem !important}.row-gap-md-3{row-gap:1rem !important}.row-gap-md-4{row-gap:1.5rem !important}.row-gap-md-5{row-gap:3rem !important}.column-gap-md-0{-moz-column-gap:0 !important;column-gap:0 !important}.column-gap-md-1{-moz-column-gap:.25rem !important;column-gap:.25rem !important}.column-gap-md-2{-moz-column-gap:.5rem !important;column-gap:.5rem !important}.column-gap-md-3{-moz-column-gap:1rem !important;column-gap:1rem !important}.column-gap-md-4{-moz-column-gap:1.5rem !important;column-gap:1.5rem !important}.column-gap-md-5{-moz-column-gap:3rem !important;column-gap:3rem !important}.text-md-start{text-align:left !important}.text-md-end{text-align:right !important}.text-md-center{text-align:center !important}}@media(min-width: 992px){.float-lg-start{float:left !important}.float-lg-end{float:right !important}.float-lg-none{float:none !important}.object-fit-lg-contain{-o-object-fit:contain !important;object-fit:contain !important}.object-fit-lg-cover{-o-object-fit:cover !important;object-fit:cover !important}.object-fit-lg-fill{-o-object-fit:fill !important;object-fit:fill !important}.object-fit-lg-scale{-o-object-fit:scale-down !important;object-fit:scale-down !important}.object-fit-lg-none{-o-object-fit:none !important;object-fit:none !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-block{display:block !important}.d-lg-grid{display:grid !important}.d-lg-inline-grid{display:inline-grid !important}.d-lg-table{display:table !important}.d-lg-table-row{display:table-row !important}.d-lg-table-cell{display:table-cell !important}.d-lg-flex{display:flex !important}.d-lg-inline-flex{display:inline-flex !important}.d-lg-none{display:none !important}.flex-lg-fill{flex:1 1 auto !important}.flex-lg-row{flex-direction:row !important}.flex-lg-column{flex-direction:column !important}.flex-lg-row-reverse{flex-direction:row-reverse !important}.flex-lg-column-reverse{flex-direction:column-reverse !important}.flex-lg-grow-0{flex-grow:0 !important}.flex-lg-grow-1{flex-grow:1 !important}.flex-lg-shrink-0{flex-shrink:0 !important}.flex-lg-shrink-1{flex-shrink:1 !important}.flex-lg-wrap{flex-wrap:wrap !important}.flex-lg-nowrap{flex-wrap:nowrap !important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-lg-start{justify-content:flex-start !important}.justify-content-lg-end{justify-content:flex-end !important}.justify-content-lg-center{justify-content:center !important}.justify-content-lg-between{justify-content:space-between !important}.justify-content-lg-around{justify-content:space-around !important}.justify-content-lg-evenly{justify-content:space-evenly !important}.align-items-lg-start{align-items:flex-start !important}.align-items-lg-end{align-items:flex-end !important}.align-items-lg-center{align-items:center !important}.align-items-lg-baseline{align-items:baseline !important}.align-items-lg-stretch{align-items:stretch !important}.align-content-lg-start{align-content:flex-start !important}.align-content-lg-end{align-content:flex-end !important}.align-content-lg-center{align-content:center !important}.align-content-lg-between{align-content:space-between !important}.align-content-lg-around{align-content:space-around !important}.align-content-lg-stretch{align-content:stretch !important}.align-self-lg-auto{align-self:auto !important}.align-self-lg-start{align-self:flex-start !important}.align-self-lg-end{align-self:flex-end !important}.align-self-lg-center{align-self:center !important}.align-self-lg-baseline{align-self:baseline !important}.align-self-lg-stretch{align-self:stretch !important}.order-lg-first{order:-1 !important}.order-lg-0{order:0 !important}.order-lg-1{order:1 !important}.order-lg-2{order:2 !important}.order-lg-3{order:3 !important}.order-lg-4{order:4 !important}.order-lg-5{order:5 !important}.order-lg-last{order:6 !important}.m-lg-0{margin:0 !important}.m-lg-1{margin:.25rem !important}.m-lg-2{margin:.5rem !important}.m-lg-3{margin:1rem !important}.m-lg-4{margin:1.5rem !important}.m-lg-5{margin:3rem !important}.m-lg-auto{margin:auto !important}.mx-lg-0{margin-right:0 !important;margin-left:0 !important}.mx-lg-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-lg-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-lg-3{margin-right:1rem !important;margin-left:1rem !important}.mx-lg-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-lg-5{margin-right:3rem !important;margin-left:3rem !important}.mx-lg-auto{margin-right:auto !important;margin-left:auto !important}.my-lg-0{margin-top:0 !important;margin-bottom:0 !important}.my-lg-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-lg-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-lg-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-lg-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-lg-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-lg-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-lg-0{margin-top:0 !important}.mt-lg-1{margin-top:.25rem !important}.mt-lg-2{margin-top:.5rem !important}.mt-lg-3{margin-top:1rem !important}.mt-lg-4{margin-top:1.5rem !important}.mt-lg-5{margin-top:3rem !important}.mt-lg-auto{margin-top:auto !important}.me-lg-0{margin-right:0 !important}.me-lg-1{margin-right:.25rem !important}.me-lg-2{margin-right:.5rem !important}.me-lg-3{margin-right:1rem !important}.me-lg-4{margin-right:1.5rem !important}.me-lg-5{margin-right:3rem !important}.me-lg-auto{margin-right:auto !important}.mb-lg-0{margin-bottom:0 !important}.mb-lg-1{margin-bottom:.25rem !important}.mb-lg-2{margin-bottom:.5rem !important}.mb-lg-3{margin-bottom:1rem !important}.mb-lg-4{margin-bottom:1.5rem !important}.mb-lg-5{margin-bottom:3rem !important}.mb-lg-auto{margin-bottom:auto !important}.ms-lg-0{margin-left:0 !important}.ms-lg-1{margin-left:.25rem !important}.ms-lg-2{margin-left:.5rem !important}.ms-lg-3{margin-left:1rem !important}.ms-lg-4{margin-left:1.5rem !important}.ms-lg-5{margin-left:3rem !important}.ms-lg-auto{margin-left:auto !important}.p-lg-0{padding:0 !important}.p-lg-1{padding:.25rem !important}.p-lg-2{padding:.5rem !important}.p-lg-3{padding:1rem !important}.p-lg-4{padding:1.5rem !important}.p-lg-5{padding:3rem !important}.px-lg-0{padding-right:0 !important;padding-left:0 !important}.px-lg-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-lg-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-lg-3{padding-right:1rem !important;padding-left:1rem !important}.px-lg-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-lg-5{padding-right:3rem !important;padding-left:3rem !important}.py-lg-0{padding-top:0 !important;padding-bottom:0 !important}.py-lg-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-lg-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-lg-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-lg-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-lg-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-lg-0{padding-top:0 !important}.pt-lg-1{padding-top:.25rem !important}.pt-lg-2{padding-top:.5rem !important}.pt-lg-3{padding-top:1rem !important}.pt-lg-4{padding-top:1.5rem !important}.pt-lg-5{padding-top:3rem !important}.pe-lg-0{padding-right:0 !important}.pe-lg-1{padding-right:.25rem !important}.pe-lg-2{padding-right:.5rem !important}.pe-lg-3{padding-right:1rem !important}.pe-lg-4{padding-right:1.5rem !important}.pe-lg-5{padding-right:3rem !important}.pb-lg-0{padding-bottom:0 !important}.pb-lg-1{padding-bottom:.25rem !important}.pb-lg-2{padding-bottom:.5rem !important}.pb-lg-3{padding-bottom:1rem !important}.pb-lg-4{padding-bottom:1.5rem !important}.pb-lg-5{padding-bottom:3rem !important}.ps-lg-0{padding-left:0 !important}.ps-lg-1{padding-left:.25rem !important}.ps-lg-2{padding-left:.5rem !important}.ps-lg-3{padding-left:1rem !important}.ps-lg-4{padding-left:1.5rem !important}.ps-lg-5{padding-left:3rem !important}.gap-lg-0{gap:0 !important}.gap-lg-1{gap:.25rem !important}.gap-lg-2{gap:.5rem !important}.gap-lg-3{gap:1rem !important}.gap-lg-4{gap:1.5rem !important}.gap-lg-5{gap:3rem !important}.row-gap-lg-0{row-gap:0 !important}.row-gap-lg-1{row-gap:.25rem !important}.row-gap-lg-2{row-gap:.5rem !important}.row-gap-lg-3{row-gap:1rem !important}.row-gap-lg-4{row-gap:1.5rem !important}.row-gap-lg-5{row-gap:3rem !important}.column-gap-lg-0{-moz-column-gap:0 !important;column-gap:0 !important}.column-gap-lg-1{-moz-column-gap:.25rem !important;column-gap:.25rem !important}.column-gap-lg-2{-moz-column-gap:.5rem !important;column-gap:.5rem !important}.column-gap-lg-3{-moz-column-gap:1rem !important;column-gap:1rem !important}.column-gap-lg-4{-moz-column-gap:1.5rem !important;column-gap:1.5rem !important}.column-gap-lg-5{-moz-column-gap:3rem !important;column-gap:3rem !important}.text-lg-start{text-align:left !important}.text-lg-end{text-align:right !important}.text-lg-center{text-align:center !important}}@media(min-width: 1200px){.float-xl-start{float:left !important}.float-xl-end{float:right !important}.float-xl-none{float:none !important}.object-fit-xl-contain{-o-object-fit:contain !important;object-fit:contain !important}.object-fit-xl-cover{-o-object-fit:cover !important;object-fit:cover !important}.object-fit-xl-fill{-o-object-fit:fill !important;object-fit:fill !important}.object-fit-xl-scale{-o-object-fit:scale-down !important;object-fit:scale-down !important}.object-fit-xl-none{-o-object-fit:none !important;object-fit:none !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-block{display:block !important}.d-xl-grid{display:grid !important}.d-xl-inline-grid{display:inline-grid !important}.d-xl-table{display:table !important}.d-xl-table-row{display:table-row !important}.d-xl-table-cell{display:table-cell !important}.d-xl-flex{display:flex !important}.d-xl-inline-flex{display:inline-flex !important}.d-xl-none{display:none !important}.flex-xl-fill{flex:1 1 auto !important}.flex-xl-row{flex-direction:row !important}.flex-xl-column{flex-direction:column !important}.flex-xl-row-reverse{flex-direction:row-reverse !important}.flex-xl-column-reverse{flex-direction:column-reverse !important}.flex-xl-grow-0{flex-grow:0 !important}.flex-xl-grow-1{flex-grow:1 !important}.flex-xl-shrink-0{flex-shrink:0 !important}.flex-xl-shrink-1{flex-shrink:1 !important}.flex-xl-wrap{flex-wrap:wrap !important}.flex-xl-nowrap{flex-wrap:nowrap !important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-xl-start{justify-content:flex-start !important}.justify-content-xl-end{justify-content:flex-end !important}.justify-content-xl-center{justify-content:center !important}.justify-content-xl-between{justify-content:space-between !important}.justify-content-xl-around{justify-content:space-around !important}.justify-content-xl-evenly{justify-content:space-evenly !important}.align-items-xl-start{align-items:flex-start !important}.align-items-xl-end{align-items:flex-end !important}.align-items-xl-center{align-items:center !important}.align-items-xl-baseline{align-items:baseline !important}.align-items-xl-stretch{align-items:stretch !important}.align-content-xl-start{align-content:flex-start !important}.align-content-xl-end{align-content:flex-end !important}.align-content-xl-center{align-content:center !important}.align-content-xl-between{align-content:space-between !important}.align-content-xl-around{align-content:space-around !important}.align-content-xl-stretch{align-content:stretch !important}.align-self-xl-auto{align-self:auto !important}.align-self-xl-start{align-self:flex-start !important}.align-self-xl-end{align-self:flex-end !important}.align-self-xl-center{align-self:center !important}.align-self-xl-baseline{align-self:baseline !important}.align-self-xl-stretch{align-self:stretch !important}.order-xl-first{order:-1 !important}.order-xl-0{order:0 !important}.order-xl-1{order:1 !important}.order-xl-2{order:2 !important}.order-xl-3{order:3 !important}.order-xl-4{order:4 !important}.order-xl-5{order:5 !important}.order-xl-last{order:6 !important}.m-xl-0{margin:0 !important}.m-xl-1{margin:.25rem !important}.m-xl-2{margin:.5rem !important}.m-xl-3{margin:1rem !important}.m-xl-4{margin:1.5rem !important}.m-xl-5{margin:3rem !important}.m-xl-auto{margin:auto !important}.mx-xl-0{margin-right:0 !important;margin-left:0 !important}.mx-xl-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-xl-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-xl-3{margin-right:1rem !important;margin-left:1rem !important}.mx-xl-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-xl-5{margin-right:3rem !important;margin-left:3rem !important}.mx-xl-auto{margin-right:auto !important;margin-left:auto !important}.my-xl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xl-0{margin-top:0 !important}.mt-xl-1{margin-top:.25rem !important}.mt-xl-2{margin-top:.5rem !important}.mt-xl-3{margin-top:1rem !important}.mt-xl-4{margin-top:1.5rem !important}.mt-xl-5{margin-top:3rem !important}.mt-xl-auto{margin-top:auto !important}.me-xl-0{margin-right:0 !important}.me-xl-1{margin-right:.25rem !important}.me-xl-2{margin-right:.5rem !important}.me-xl-3{margin-right:1rem !important}.me-xl-4{margin-right:1.5rem !important}.me-xl-5{margin-right:3rem !important}.me-xl-auto{margin-right:auto !important}.mb-xl-0{margin-bottom:0 !important}.mb-xl-1{margin-bottom:.25rem !important}.mb-xl-2{margin-bottom:.5rem !important}.mb-xl-3{margin-bottom:1rem !important}.mb-xl-4{margin-bottom:1.5rem !important}.mb-xl-5{margin-bottom:3rem !important}.mb-xl-auto{margin-bottom:auto !important}.ms-xl-0{margin-left:0 !important}.ms-xl-1{margin-left:.25rem !important}.ms-xl-2{margin-left:.5rem !important}.ms-xl-3{margin-left:1rem !important}.ms-xl-4{margin-left:1.5rem !important}.ms-xl-5{margin-left:3rem !important}.ms-xl-auto{margin-left:auto !important}.p-xl-0{padding:0 !important}.p-xl-1{padding:.25rem !important}.p-xl-2{padding:.5rem !important}.p-xl-3{padding:1rem !important}.p-xl-4{padding:1.5rem !important}.p-xl-5{padding:3rem !important}.px-xl-0{padding-right:0 !important;padding-left:0 !important}.px-xl-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-xl-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-xl-3{padding-right:1rem !important;padding-left:1rem !important}.px-xl-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-xl-5{padding-right:3rem !important;padding-left:3rem !important}.py-xl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xl-0{padding-top:0 !important}.pt-xl-1{padding-top:.25rem !important}.pt-xl-2{padding-top:.5rem !important}.pt-xl-3{padding-top:1rem !important}.pt-xl-4{padding-top:1.5rem !important}.pt-xl-5{padding-top:3rem !important}.pe-xl-0{padding-right:0 !important}.pe-xl-1{padding-right:.25rem !important}.pe-xl-2{padding-right:.5rem !important}.pe-xl-3{padding-right:1rem !important}.pe-xl-4{padding-right:1.5rem !important}.pe-xl-5{padding-right:3rem !important}.pb-xl-0{padding-bottom:0 !important}.pb-xl-1{padding-bottom:.25rem !important}.pb-xl-2{padding-bottom:.5rem !important}.pb-xl-3{padding-bottom:1rem !important}.pb-xl-4{padding-bottom:1.5rem !important}.pb-xl-5{padding-bottom:3rem !important}.ps-xl-0{padding-left:0 !important}.ps-xl-1{padding-left:.25rem !important}.ps-xl-2{padding-left:.5rem !important}.ps-xl-3{padding-left:1rem !important}.ps-xl-4{padding-left:1.5rem !important}.ps-xl-5{padding-left:3rem !important}.gap-xl-0{gap:0 !important}.gap-xl-1{gap:.25rem !important}.gap-xl-2{gap:.5rem !important}.gap-xl-3{gap:1rem !important}.gap-xl-4{gap:1.5rem !important}.gap-xl-5{gap:3rem !important}.row-gap-xl-0{row-gap:0 !important}.row-gap-xl-1{row-gap:.25rem !important}.row-gap-xl-2{row-gap:.5rem !important}.row-gap-xl-3{row-gap:1rem !important}.row-gap-xl-4{row-gap:1.5rem !important}.row-gap-xl-5{row-gap:3rem !important}.column-gap-xl-0{-moz-column-gap:0 !important;column-gap:0 !important}.column-gap-xl-1{-moz-column-gap:.25rem !important;column-gap:.25rem !important}.column-gap-xl-2{-moz-column-gap:.5rem !important;column-gap:.5rem !important}.column-gap-xl-3{-moz-column-gap:1rem !important;column-gap:1rem !important}.column-gap-xl-4{-moz-column-gap:1.5rem !important;column-gap:1.5rem !important}.column-gap-xl-5{-moz-column-gap:3rem !important;column-gap:3rem !important}.text-xl-start{text-align:left !important}.text-xl-end{text-align:right !important}.text-xl-center{text-align:center !important}}@media(min-width: 1400px){.float-xxl-start{float:left !important}.float-xxl-end{float:right !important}.float-xxl-none{float:none !important}.object-fit-xxl-contain{-o-object-fit:contain !important;object-fit:contain !important}.object-fit-xxl-cover{-o-object-fit:cover !important;object-fit:cover !important}.object-fit-xxl-fill{-o-object-fit:fill !important;object-fit:fill !important}.object-fit-xxl-scale{-o-object-fit:scale-down !important;object-fit:scale-down !important}.object-fit-xxl-none{-o-object-fit:none !important;object-fit:none !important}.d-xxl-inline{display:inline !important}.d-xxl-inline-block{display:inline-block !important}.d-xxl-block{display:block !important}.d-xxl-grid{display:grid !important}.d-xxl-inline-grid{display:inline-grid !important}.d-xxl-table{display:table !important}.d-xxl-table-row{display:table-row !important}.d-xxl-table-cell{display:table-cell !important}.d-xxl-flex{display:flex !important}.d-xxl-inline-flex{display:inline-flex !important}.d-xxl-none{display:none !important}.flex-xxl-fill{flex:1 1 auto !important}.flex-xxl-row{flex-direction:row !important}.flex-xxl-column{flex-direction:column !important}.flex-xxl-row-reverse{flex-direction:row-reverse !important}.flex-xxl-column-reverse{flex-direction:column-reverse !important}.flex-xxl-grow-0{flex-grow:0 !important}.flex-xxl-grow-1{flex-grow:1 !important}.flex-xxl-shrink-0{flex-shrink:0 !important}.flex-xxl-shrink-1{flex-shrink:1 !important}.flex-xxl-wrap{flex-wrap:wrap !important}.flex-xxl-nowrap{flex-wrap:nowrap !important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-xxl-start{justify-content:flex-start !important}.justify-content-xxl-end{justify-content:flex-end !important}.justify-content-xxl-center{justify-content:center !important}.justify-content-xxl-between{justify-content:space-between !important}.justify-content-xxl-around{justify-content:space-around !important}.justify-content-xxl-evenly{justify-content:space-evenly !important}.align-items-xxl-start{align-items:flex-start !important}.align-items-xxl-end{align-items:flex-end !important}.align-items-xxl-center{align-items:center !important}.align-items-xxl-baseline{align-items:baseline !important}.align-items-xxl-stretch{align-items:stretch !important}.align-content-xxl-start{align-content:flex-start !important}.align-content-xxl-end{align-content:flex-end !important}.align-content-xxl-center{align-content:center !important}.align-content-xxl-between{align-content:space-between !important}.align-content-xxl-around{align-content:space-around !important}.align-content-xxl-stretch{align-content:stretch !important}.align-self-xxl-auto{align-self:auto !important}.align-self-xxl-start{align-self:flex-start !important}.align-self-xxl-end{align-self:flex-end !important}.align-self-xxl-center{align-self:center !important}.align-self-xxl-baseline{align-self:baseline !important}.align-self-xxl-stretch{align-self:stretch !important}.order-xxl-first{order:-1 !important}.order-xxl-0{order:0 !important}.order-xxl-1{order:1 !important}.order-xxl-2{order:2 !important}.order-xxl-3{order:3 !important}.order-xxl-4{order:4 !important}.order-xxl-5{order:5 !important}.order-xxl-last{order:6 !important}.m-xxl-0{margin:0 !important}.m-xxl-1{margin:.25rem !important}.m-xxl-2{margin:.5rem !important}.m-xxl-3{margin:1rem !important}.m-xxl-4{margin:1.5rem !important}.m-xxl-5{margin:3rem !important}.m-xxl-auto{margin:auto !important}.mx-xxl-0{margin-right:0 !important;margin-left:0 !important}.mx-xxl-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-xxl-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-xxl-3{margin-right:1rem !important;margin-left:1rem !important}.mx-xxl-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-xxl-5{margin-right:3rem !important;margin-left:3rem !important}.mx-xxl-auto{margin-right:auto !important;margin-left:auto !important}.my-xxl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xxl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xxl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xxl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xxl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xxl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xxl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xxl-0{margin-top:0 !important}.mt-xxl-1{margin-top:.25rem !important}.mt-xxl-2{margin-top:.5rem !important}.mt-xxl-3{margin-top:1rem !important}.mt-xxl-4{margin-top:1.5rem !important}.mt-xxl-5{margin-top:3rem !important}.mt-xxl-auto{margin-top:auto !important}.me-xxl-0{margin-right:0 !important}.me-xxl-1{margin-right:.25rem !important}.me-xxl-2{margin-right:.5rem !important}.me-xxl-3{margin-right:1rem !important}.me-xxl-4{margin-right:1.5rem !important}.me-xxl-5{margin-right:3rem !important}.me-xxl-auto{margin-right:auto !important}.mb-xxl-0{margin-bottom:0 !important}.mb-xxl-1{margin-bottom:.25rem !important}.mb-xxl-2{margin-bottom:.5rem !important}.mb-xxl-3{margin-bottom:1rem !important}.mb-xxl-4{margin-bottom:1.5rem !important}.mb-xxl-5{margin-bottom:3rem !important}.mb-xxl-auto{margin-bottom:auto !important}.ms-xxl-0{margin-left:0 !important}.ms-xxl-1{margin-left:.25rem !important}.ms-xxl-2{margin-left:.5rem !important}.ms-xxl-3{margin-left:1rem !important}.ms-xxl-4{margin-left:1.5rem !important}.ms-xxl-5{margin-left:3rem !important}.ms-xxl-auto{margin-left:auto !important}.p-xxl-0{padding:0 !important}.p-xxl-1{padding:.25rem !important}.p-xxl-2{padding:.5rem !important}.p-xxl-3{padding:1rem !important}.p-xxl-4{padding:1.5rem !important}.p-xxl-5{padding:3rem !important}.px-xxl-0{padding-right:0 !important;padding-left:0 !important}.px-xxl-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-xxl-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-xxl-3{padding-right:1rem !important;padding-left:1rem !important}.px-xxl-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-xxl-5{padding-right:3rem !important;padding-left:3rem !important}.py-xxl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xxl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xxl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xxl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xxl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xxl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xxl-0{padding-top:0 !important}.pt-xxl-1{padding-top:.25rem !important}.pt-xxl-2{padding-top:.5rem !important}.pt-xxl-3{padding-top:1rem !important}.pt-xxl-4{padding-top:1.5rem !important}.pt-xxl-5{padding-top:3rem !important}.pe-xxl-0{padding-right:0 !important}.pe-xxl-1{padding-right:.25rem !important}.pe-xxl-2{padding-right:.5rem !important}.pe-xxl-3{padding-right:1rem !important}.pe-xxl-4{padding-right:1.5rem !important}.pe-xxl-5{padding-right:3rem !important}.pb-xxl-0{padding-bottom:0 !important}.pb-xxl-1{padding-bottom:.25rem !important}.pb-xxl-2{padding-bottom:.5rem !important}.pb-xxl-3{padding-bottom:1rem !important}.pb-xxl-4{padding-bottom:1.5rem !important}.pb-xxl-5{padding-bottom:3rem !important}.ps-xxl-0{padding-left:0 !important}.ps-xxl-1{padding-left:.25rem !important}.ps-xxl-2{padding-left:.5rem !important}.ps-xxl-3{padding-left:1rem !important}.ps-xxl-4{padding-left:1.5rem !important}.ps-xxl-5{padding-left:3rem !important}.gap-xxl-0{gap:0 !important}.gap-xxl-1{gap:.25rem !important}.gap-xxl-2{gap:.5rem !important}.gap-xxl-3{gap:1rem !important}.gap-xxl-4{gap:1.5rem !important}.gap-xxl-5{gap:3rem !important}.row-gap-xxl-0{row-gap:0 !important}.row-gap-xxl-1{row-gap:.25rem !important}.row-gap-xxl-2{row-gap:.5rem !important}.row-gap-xxl-3{row-gap:1rem !important}.row-gap-xxl-4{row-gap:1.5rem !important}.row-gap-xxl-5{row-gap:3rem !important}.column-gap-xxl-0{-moz-column-gap:0 !important;column-gap:0 !important}.column-gap-xxl-1{-moz-column-gap:.25rem !important;column-gap:.25rem !important}.column-gap-xxl-2{-moz-column-gap:.5rem !important;column-gap:.5rem !important}.column-gap-xxl-3{-moz-column-gap:1rem !important;column-gap:1rem !important}.column-gap-xxl-4{-moz-column-gap:1.5rem !important;column-gap:1.5rem !important}.column-gap-xxl-5{-moz-column-gap:3rem !important;column-gap:3rem !important}.text-xxl-start{text-align:left !important}.text-xxl-end{text-align:right !important}.text-xxl-center{text-align:center !important}}@media(min-width: 1200px){.fs-1{font-size:2.5rem !important}.fs-2{font-size:2rem !important}.fs-3{font-size:1.75rem !important}.fs-4{font-size:1.5rem !important}}@media print{.d-print-inline{display:inline !important}.d-print-inline-block{display:inline-block !important}.d-print-block{display:block !important}.d-print-grid{display:grid !important}.d-print-inline-grid{display:inline-grid !important}.d-print-table{display:table !important}.d-print-table-row{display:table-row !important}.d-print-table-cell{display:table-cell !important}.d-print-flex{display:flex !important}.d-print-inline-flex{display:inline-flex !important}.d-print-none{display:none !important}}*{text-align:center}html,body{width:100%;height:100%}body{background-color:#5f9ea0;text-align:center}.center{position:relative;left:50%;top:50%;transform:translate(-50%, -50%)}#main{height:-moz-min-content;height:min-content;z-index:3;overflow:hidden;overflow-y:scroll;min-width:-moz-fit-content;min-width:fit-content}#card-body{height:-moz-min-content;height:min-content;text-align:center;display:flex;justify-content:center;align-items:center;flex-direction:column;align-self:center;flex-wrap:wrap;max-width:100%}.us-types{justify-content:center} + +/*# sourceMappingURL=data:application/json;charset=utf-8;base64,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LE9BR0UsaUJBR0EsZ0JBQ0UsVUFPSiwwSUFDRSx3QkFRRixnREFJRSwwQkFHRSw0R0FDRSxlQU9OLG1CQUNFLFVBQ0Esa0JBS0YsU0FDRSxnQkFVRixTQUNFLFlBQ0EsVUFDQSxTQUNBLFNBUUYsT0FDRSxXQUNBLFdBQ0EsVUFDQSxtQkNtTjRCLENIcGF0QixpQ0VvTk4sb0JGaFhFLDBCRXlXSixPRnRNUSxrQkUrTU4sU0FDRSxXQU9KLCtPQU9FLFVBR0YsNEJBQ0UsWUFTRixjQUNFLDZCQUNBLG9CQW1CRiw0QkFDRSx3QkFLRiwrQkFDRSxVQU9GLHVCQUNFLGFBQ0EsMEJBS0YsT0FDRSxxQkFLRixPQUNFLFNBT0YsUUFDRSxrQkFDQSxlQVFGLFNBQ0Usd0JBUUYsU0FDRSx3Qkdya0JGLE1MbVFNLGlCQUxJLENLNVBSLGVGd29CNEIsQ0Vub0I1QixXTGdRTSxpQ0s1UEosZUZ5bkJrQixDRXhuQmxCLGVGd21CMEIsQ0h6Z0IxQiwwQktwR0YsV0x1UU0sZ0JLdlFOLFdMZ1FNLGlDSzVQSixlRnluQmtCLENFeG5CbEIsZUZ3bUIwQixDSHpnQjFCLDBCS3BHRixXTHVRTSxrQkt2UU4sV0xnUU0saUNLNVBKLGVGeW5Ca0IsQ0V4bkJsQixlRndtQjBCLENIemdCMUIsMEJLcEdGLFdMdVFNLGdCS3ZRTixXTGdRTSxpQ0s1UEosZUZ5bkJrQixDRXhuQmxCLGVGd21CMEIsQ0h6Z0IxQiwwQktwR0YsV0x1UU0sa0JLdlFOLFdMZ1FNLGlDSzVQSixlRnluQmtCLENFeG5CbEIsZUZ3bUIwQixDSHpnQjFCLDBCS3BHRixXTHVRTSxnQkt2UU4sV0xnUU0saUNLNVBKLGVGeW5Ca0IsQ0V4bkJsQixlRndtQjBCLENIemdCMUIsMEJLcEdGLFdMdVFNLGtCSy9PUixlQ3ZERSxlQUNBLGdCRDJERixhQzVERSxlQUNBLGdCRDhERixrQkFDRSxxQkFFQSxtQ0FDRSxrQkZzb0IwQixDRTVuQjlCLFlMOE1NLGlCQUxJLENLdk1SLHlCQUlGLFlBQ0Usa0JGaVVPLENIMUhILGlCQUxJLENLL0xSLHdCQUNFLGdCQUlKLG1CQUNFLGlC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R3lGQSxxQkFDRSxnQkFDQSxrQ0gzRkYsNkJHeUZBLHFCQUNFLGdCQUNBLGtDSDNGRiw2Qkd5RkEsc0JBQ0UsZ0JBQ0Esa0NFbktOLFlBQ0UsbUJidTJCc0MsQ2E5MUJ4QyxnQkFDRSxvREFDQSx1REFDQSxnQmhCOFFJLGlCQUxJLENnQnJRUixlYitsQjRCLENhM2xCOUIsbUJBQ0Usa0RBQ0EscURoQm9RSSxpQkFMSSxDZ0IzUFYsbUJBQ0UsbURBQ0Esc0RoQjhQSSxrQkFMSSxDaUJ0UlYsV0FDRSxpQmQrMUJzQyxDSHJrQmxDLGlCQUxJLENpQmpSUiwrQmQrMUJzQyxDZXAyQnhDLGNBQ0UsY0FDQSxXQUNBLHVCbEJ3UkksY0FMSSxDa0JoUlIsZWZrbUI0QixDZWptQjVCLGVmeW1CNEIsQ2V4bUI1QiwwQmY0M0JzQyxDZTMzQnRDLDZEQUNBLGtDZnEzQnNDLENlcDNCdEMsNEJBQ0EsMkRkR0Usc0NlSEUsb0VETUosQ0NGSSx1Q0RoQk4sY0NpQlEsaUJER04seUJBQ0UsZ0JBRUEsd0RBQ0UsZUFLSixvQkFDRSwwQmZzMkJvQyxDZXIyQnBDLGtDZmcyQm9DLENlLzFCcEMsb0JmODJCb0MsQ2U3MkJwQyxVQUtFLDRDZmtoQmtCLENlOWdCdEIsMkNBTUUsZUFNQSxhQUtBLFNBS0YscUNBQ0UsY0FDQSxVQUlGLGdDQUNFLCtCZjQwQm9DLENlMTBCcEMsVUFIRiwyQkFDRSwrQmY0MEJvQyxDZTEwQnBDLFVBUUYsdUJBRUUsdUNmOHlCb0MsQ2UzeUJwQyxVQUlGLG9DQUNFLHVCQUNBLDBCQUNBLHdCZm9yQjBCLENlbnJCMUIsMEJmc3lCb0MsQ2lCcDRCdEMsc0NqQnFpQ2dDLENlcjhCOUIsb0JBQ0EscUJBQ0EsbUJBQ0EsZUFDQSw4Q2Znc0IwQixDZS9yQjFCLGdCQ3pGRSw2SEQwRkYsQ0N0RkUsdUNEMEVKLG9DQ3pFTSxpQkR3Rk4seUVBQ0UsdUNmNDdCOEIsQ2VuN0JsQyx3QkFDRSxjQUNBLFdBQ0Esa0JBQ0EsZ0JBQ0EsZWZ3ZjRCLENldmY1QiwwQmYyeEJzQyxDZTF4QnRDLCtCQUNBLDJCQUNBLHNDQUVBLDhCQUNFLFVBR0YsZ0ZBRUUsZ0JBQ0EsZUFXSixpQkFDRSxrRWY0d0JzQyxDZTN3QnRDLHFCbEJ5SUksa0JBTEksQ0l2UU4seUNjdUlGLHVDQUNFLHFCQUNBLHdCQUNBLHVCZm9vQjBCLENlaG9COUIsaUJBQ0UsZ0VmZ3dCc0MsQ2UvdkJ0QyxtQmxCNEhJLGlCQUxJLENJdlFOLHlDY29KRix1Q0FDRSxtQkFDQSxxQkFDQSxzQmYybkIwQixDZW5uQjVCLHNCQUNFLG1FZjZ1Qm9DLENlMXVCdEMseUJBQ0Usa0VmMHVCb0MsQ2V2dUJ0Qyx5QkFDRSxnRWZ1dUJvQyxDZWx1QnhDLG9CQUNFLFVmcXVCc0MsQ2VwdUJ0QywrRGY4dEJzQyxDZTd0QnRDLGVmaWxCNEIsQ2Uva0I1QixtREFDRSxlQUdGLHVDQUNFLG9CZHZMQSxzQ2MyTEYsMENBQ0Usb0JkNUxBLHNDY2dNRixrR2Y4c0JzQyxDZTdzQnRDLGdHZjhzQnNDLENrQjc1QnhDLGFBQ0UsaUVBRUEsY0FDQSxXQUNBLHVDckJxUkksY0FMSSxDcUI3UVIsZWxCK2xCNEIsQ2tCOWxCNUIsZWxCc21CNEIsQ2tCcm1CNUIsMEJsQnkzQnNDLENrQngzQnRDLDZEQUNBLGtDbEJrM0JzQyxDa0JqM0J0QyxrRkFDQSw0QkFDQSx1Q2xCKzlCa0MsQ2tCOTlCbEMseUJsQis5QmtDLENrQjk5QmxDLDJEakJIRSxzQ2VIRSxvRUVTSixDRkxJLHVDRWZOLGFGZ0JRLGlCRU1OLG1CQUNFLG9CbEJzM0JvQyxDa0JyM0JwQyxVQUtFLDRDbEJpK0I0QixDa0I3OUJoQywwREFFRSxvQmxCNnVCMEIsQ2tCNXVCMUIsc0JBR0Ysc0JBRUUsdUNsQnUxQm9DLENrQmwxQnRDLDRCQUNFLG9CQUNBLHVDQUlKLGdCQUNFLGtCbEJzdUI0QixDa0JydUI1QixxQmxCcXVCNEIsQ2tCcHVCNUIsa0JsQnF1QjRCLENIbGdCeEIsa0JBTEksQ0l2UU4seUNpQjhDSixnQkFDRSxpQmxCa3VCNEIsQ2tCanVCNUIsb0JsQml1QjRCLENrQmh1QjVCLGlCbEJpdUI0QixDSHRnQnhCLGlCQUxJLENJdlFOLHlDaUJ3REEsa0NBQ0UsaUVDeEVOLFlBQ0UsY0FDQSxpQm5CcTZCd0MsQ21CcDZCeEMsa0JuQnE2QndDLENtQnA2QnhDLHFCbkJxNkJ3QyxDbUJuNkJ4Qyw4QkFDRSxXQUNBLG1CQUlKLG9CQUNFLG1CbkIyNUJ3QyxDbUIxNUJ4QyxlQUNBLGlCQUVBLHNDQUNFLFlBQ0Esb0JBQ0EsY0FJSixrQkFDRSxzQ0FFQSxjQUNBLFNuQjA0QndDLENtQno0QnhDLFVuQnk0QndDLENtQng0QnhDLGlCQUNBLG1CQUNBLDZEQUNBLHlDQUNBLCtDQUNBLDRCQUNBLDJCQUNBLHdCQUNBLDBEbkIyNEJ3QyxDbUIxNEJ4QywwREFHQSxpQ2xCM0JFLG9Ca0IrQkYsOEJBRUUsaUJuQm00QnNDLENtQmg0QnhDLHlCQUNFLHNCbkIwM0JzQyxDbUJ2M0J4Qyx3QkFDRSxvQm5CczFCb0MsQ21CcjFCcEMsVUFDQSw0Q25COGZvQixDbUIzZnRCLDBCQUNFLHdCbkI1Qk0sQ21CNkJOLG9CbkI3Qk0sQ21CK0JOLHlDQUlJLGtFQUlKLHNDQUlJLGtFQUtOLCtDQUNFLHdCbkJqRE0sQ21Ca0ROLG9CbkJsRE0sQ21CdURKLGtFQUlKLDJCQUNFLG9CQUNBLFlBQ0EsVW5CazJCdUMsQ21CMzFCdkMsMkZBQ0UsZUFDQSxVbkJ5MUJxQyxDbUIzMEIzQyxhQUNFLGtCbkJvMUJnQyxDbUJsMUJoQywrQkFDRSw2REFFQSxTbkI4MEI4QixDbUI3MEI5QixtQkFDQSwwQ0FDQSxnQ2xCakhBLGtCZUhFLCtDR3NIRixDSGxIRSx1Q0cwR0osK0JIekdNLGlCR21ISixxQ0FDRSw2REFHRix1Q0FDRSxnQ25CNjBCNEIsQ21CeDBCMUIsNkRBS04sZ0NBQ0UsbUJuQnd6QjhCLENtQnZ6QjlCLGVBRUEsa0RBQ0Usb0JBQ0EsY0FLTixtQkFDRSxxQkFDQSxpQm5Cc3lCZ0MsQ21CbnlCbEMsV0FDRSxrQkFDQSxzQkFDQSxvQkFJRSxtREFDRSxvQkFDQSxZQUNBLFduQnNwQndCLENtQi9vQjFCLDhFQUNFLDZEQ25MTixZQUNFLFdBQ0EsY0FDQSxVQUNBLDZEQUNBLCtCQUVBLGtCQUNFLFVBSUEsbUdwQjhnQ3VDLENvQjdnQ3ZDLCtGcEI2Z0N1QyxDb0IxZ0N6Qyw4QkFDRSxTQUdGLGtDQUNFLFVwQisvQnVDLENvQjkvQnZDLFdwQjgvQnVDLENvQjcvQnZDLG9CQUNBLHdDSDFCRix3QmpCa0NRLENvQk5OLFFwQjYvQnVDLENDMWdDdkMsbUJlSEUsOEdJbUJGLENKbkJFLHNHSW1CRixDSmZFLHVDSU1KLGtDSkxNLHlDSWdCSix5Q0hqQ0Ysd0JqQjhoQ3lDLENvQngvQnpDLDJDQUNFLFVwQncrQjhCLENvQnYrQjlCLFlwQncrQjhCLENvQnYrQjlCLG9CQUNBLGNwQnUrQjhCLENvQnQrQjlCLHVDcEJ1K0I4QixDb0J0K0I5QiwyQm5CN0JBLG1CbUJrQ0YsOEJBQ0UsVXBCbytCdUMsQ29CbitCdkMsV3BCbStCdUMsQ29CbCtCdkMscUNIcERGLHdCakJrQ1EsQ29Cb0JOLFFwQm0rQnVDLENDMWdDdkMsbUJlSEUsMkdJNkNGLENKN0NFLHNHSTZDRixDSnpDRSx1Q0lpQ0osOEJKaENNLHNDSTBDSixxQ0gzREYsd0JqQjhoQ3lDLENvQjk5QnpDLDhCQUNFLFVwQjg4QjhCLENvQjc4QjlCLFlwQjg4QjhCLENvQjc4QjlCLG9CQUNBLGNwQjY4QjhCLENvQjU4QjlCLHVDcEI2OEI4QixDb0I1OEI5QiwyQm5CdkRBLG1CbUI0REYscUJBQ0Usb0JBRUEsMkNBQ0UsMENwQmc5QnFDLENvQjc4QnZDLHVDQUNFLDBDcEI0OEJxQyxDcUJuaUMzQyxlQUNFLGtCQUVBLGdHQUdFLHNEckJ3aUNvQyxDcUJ2aUNwQywwRHJCdWlDb0MsQ3FCdGlDcEMsZ0JyQnVpQ29DLENxQnBpQ3RDLHFCQUNFLGtCQUNBLE1BQ0EsT0FDQSxVQUNBLFlBQ0Esb0JBQ0EsZ0JBQ0EsaUJBQ0EsdUJBQ0EsbUJBQ0Esb0JBQ0Esa0RBQ0EscUJMUkUsNERLU0YsQ0xMRSx1Q0tUSixxQkxVTSxpQktPTixvRUFFRSxvQkFFQSx5R0FDRSxvQkFERiw4RkFDRSxvQkFHRiwrSEFFRSxvQnJCNGdDa0MsQ3FCM2dDbEMsc0JyQjRnQ2tDLENxQi9nQ3BDLG9NQUVFLG9CckI0Z0NrQyxDcUIzZ0NsQyxzQnJCNGdDa0MsQ3FCemdDcEMsc0dBQ0Usb0JyQnVnQ2tDLENxQnRnQ2xDLHNCckJ1Z0NrQyxDcUJuZ0N0Qyw0QkFDRSxvQnJCaWdDb0MsQ3FCaGdDcEMsc0JyQmlnQ29DLENxQjEvQnBDLGdFQUNFLDJDQUNBLDZEckIyL0JrQyxDcUI3L0JwQyxtTEFDRSwyQ0FDQSw2RHJCMi9Ca0MsQ3FCei9CbEMsdUVBQ0Usa0JBQ0EsbUJBQ0EsV0FDQSxZckJtL0JnQyxDcUJsL0JoQyxXQUNBLGtDckJnMEJnQyxDQ2gzQnBDLHNDb0IwQ0UsK01BQ0Usa0JBQ0EsbUJBQ0EsV0FDQSxZckJtL0JnQyxDcUJsL0JoQyxXQUNBLGtDckJnMEJnQyxDQ2gzQnBDLHNDb0J1REEsb0RBQ0UsMkNBQ0EsNkRyQjArQmtDLENxQnIrQnBDLDZDQUNFLHNDQUlKLDJFQUVFLGFyQjFFTyxDcUI0RVAseUZBQ0UsdUNyQjB5QmtDLENzQmo0QnhDLGFBQ0Usa0JBQ0EsYUFDQSxlQUNBLG9CQUNBLFdBRUEsaUZBR0Usa0JBQ0EsY0FDQSxTQUNBLFlBSUYsMEdBR0UsVUFNRixrQkFDRSxrQkFDQSxVQUVBLHdCQUNFLFVBV04sa0JBQ0UsYUFDQSxtQkFDQSx1QnpCOE9JLGNBTEksQ3lCdk9SLGV0QnlqQjRCLENzQnhqQjVCLGV0QmdrQjRCLENzQi9qQjVCLDBCdEJtMUJzQyxDc0JsMUJ0QyxrQkFDQSxtQkFDQSxzQ3RCMDZCc0MsQ3NCejZCdEMsMkRyQnRDRSxzQ3FCZ0RKLGtIQUlFLG1CekJ3TkksaUJBTEksQ0l2UU4seUNxQnlESixrSEFJRSxxQnpCK01JLGtCQUxJLENJdlFOLHlDcUJrRUosMERBRUUsbUJBYUUsd1ZyQmpFQSwwQkFDQSw2QnFCeUVBLHlVckIxRUEsMEJBQ0EsNkJxQnNGRiwwSUFDRSw0Q3JCMUVBLHlCQUNBLDRCcUI2RUYsdUhyQjlFRSx5QkFDQSw0QnNCeEJGLGdCQUNFLGFBQ0EsV0FDQSxpQnZCdTBCb0MsQ0hya0JsQyxpQkFMSSxDMEIxUE4sZ0N2QmtqQ3FCLEN1Qi9pQ3ZCLGVBQ0Usa0JBQ0EsU0FDQSxVQUNBLGFBQ0EsZUFDQSxxQkFDQSxpQjFCcVBFLGtCQUxJLEMwQjdPTixVdkJxaUNxQixDdUJwaUNyQixrQ3ZCb2lDcUIsQ0MvakNyQixzQ3NCZ0NBLDhIQUVFLGNBL0NGLDBEQXFERSw4Q3ZCdWhDbUIsQ3VCcGhDakIsbUN2QjgxQmdDLEN1QjcxQmhDLHlEQUNBLDRCQUNBLDJEQUNBLGdFQUdGLHNFQUNFLDhDdkI0Z0NpQixDdUJ2Z0NmLHlEdkJ1Z0NlLEN1QjVrQ3JCLDBFQStFSSxtQ3ZCdTBCZ0MsQ3VCdDBCaEMsa0ZBaEZKLHdEQXVGRSw4Q3ZCcS9CbUIsQ3VCbC9CakIsNE5BRUUsa0VBQ0Esc0J2QnE1QjhCLEN1QnA1QjlCLDZEQUNBLDBFQUlKLG9FQUNFLDhDdkJ3K0JpQixDdUJuK0JmLHlEdkJtK0JlLEN1QjVrQ3JCLHNFQWtISSx5Q0FsSEosa0VBeUhFLDhDdkJtOUJtQixDdUJqOUJuQixrRkFDRSwyQ3ZCZzlCaUIsQ3VCNzhCbkIsOEVBQ0UseUR2QjQ4QmlCLEN1Qno4Qm5CLHNHQUNFLGdDdkJ3OEJpQixDdUJuOEJyQixxREFDRSxpQkExSUYsa1ZBb0pNLFVBaElSLGtCQUNFLGFBQ0EsV0FDQSxpQnZCdTBCb0MsQ0hya0JsQyxpQkFMSSxDMEIxUE4sa0N2QmtqQ3FCLEN1Qi9pQ3ZCLGlCQUNFLGtCQUNBLFNBQ0EsVUFDQSxhQUNBLGVBQ0EscUJBQ0EsaUIxQnFQRSxrQkFMSSxDMEI3T04sVXZCcWlDcUIsQ3VCcGlDckIsaUN2Qm9pQ3FCLENDL2pDckIsc0NzQmdDQSw4SUFFRSxjQS9DRiw4REFxREUsZ0R2QnVoQ21CLEN1QnBoQ2pCLG1DdkI4MUJnQyxDdUI3MUJoQywwREFDQSw0QkFDQSwyREFDQSxnRUFHRiwwRUFDRSxnRHZCNGdDaUIsQ3VCdmdDZix3RHZCdWdDZSxDdUI1a0NyQiw4RUErRUksbUN2QnUwQmdDLEN1QnQwQmhDLGtGQWhGSiw0REF1RkUsZ0R2QnEvQm1CLEN1QmwvQmpCLG9PQUVFLG1FQUNBLHNCdkJxNUI4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RCtDUSxNQU9JLDRCQVBKLE1BT0ksMEJBUEosTUFPSSw2QkFQSixNQU9JLDZCQ25DWixhRDRCUSxnQkFPSSwwQkFQSixzQkFPSSxnQ0FQSixlQU9JLHlCQVBKLGNBT0ksd0JBUEoscUJBT0ksK0JBUEosZUFPSSx5QkFQSixtQkFPSSw2QkFQSixvQkFPSSw4QkFQSixjQU9JLHdCQVBKLHFCQU9JLCtCQVBKLGNBT0kseUJ4RXZFWixFQUNJLGtCQUdKLFVBRUksV0FDQSxZQUdKLEtBQ0kseUJBQ0Esa0JBR0osUUFDSSxrQkFDQSxTQUNBLFFBQ0EsZ0NBR0osTUFDSSwyQ0FDQSxVQUNBLGdCQUNBLGtCQUNBLGlEQUdKLFdBQ0ksMkNBQ0Esa0JBQ0EsYUFDQSx1QkFDQSxtQkFDQSxzQkFDQSxrQkFDQSxlQUNBLGVBR0osVUFDSSx3eEoiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL3NyYy9zZXR0aW5ncy5zY3NzIiwid2VicGFjazovL21pa2V5bGFiLXFyLy4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fYmFubmVyLnNjc3MiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX3Jvb3Quc2NzcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy92ZW5kb3IvX3Jmcy5zY3NzIiwid2VicGFjazovL21pa2V5bGFiLXFyLy4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fY29sb3ItbW9kZS5zY3NzIiwid2VicGFjazovL21pa2V5bGFiLXFyLy4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19yZWJvb3Quc2NzcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fdmFyaWFibGVzLnNjc3MiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL19ib3JkZXItcmFkaXVzLnNjc3MiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX3R5cGUuc2NzcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX2xpc3RzLnNjc3MiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX2ltYWdlcy5zY3NzIiwid2VicGFjazovL21pa2V5bGFiLXFyLy4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9faW1hZ2Uuc2NzcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fY29udGFpbmVycy5zY3NzIiwid2VicGFjazovL21pa2V5bGFiLXFyLy4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fY29udGFpbmVyLnNjc3MiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL19icmVha3BvaW50cy5zY3NzIiwid2VicGFjazovL21pa2V5bGFiLXFyLy4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19ncmlkLnNjc3MiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL19ncmlkLnNjc3MiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX3RhYmxlcy5zY3NzIiwid2VicGFjazovL21pa2V5bGFiLXFyLy4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fdGFibGUtdmFyaWFudHMuc2NzcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9mb3Jtcy9fbGFiZWxzLnNjc3MiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvZm9ybXMvX2Zvcm0tdGV4dC5zY3NzIiwid2VicGFjazovL21pa2V5bGFiLXFyLy4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL2Zvcm1zL19mb3JtLWNvbnRyb2wuc2NzcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX3RyYW5zaXRpb24uc2NzcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX2dyYWRpZW50cy5zY3NzIiwid2VicGFjazovL21pa2V5bGFiLXFyLy4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL2Zvcm1zL19mb3JtLXNlbGVjdC5zY3NzIiwid2VicGFjazovL21pa2V5bGFiLXFyLy4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL2Zvcm1zL19mb3JtLWNoZWNrLnNjc3MiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvZm9ybXMvX2Zvcm0tcmFuZ2Uuc2NzcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9mb3Jtcy9fZmxvYXRpbmctbGFiZWxzLnNjc3MiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvZm9ybXMvX2lucHV0LWdyb3VwLnNjc3MiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL19mb3Jtcy5zY3NzIiwid2VicGFjazovL21pa2V5bGFiLXFyLy4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19idXR0b25zLnNjc3MiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL19idXR0b25zLnNjc3MiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX3RyYW5zaXRpb25zLnNjc3MiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX2Ryb3Bkb3duLnNjc3MiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL19jYXJldC5zY3NzIiwid2VicGFjazovL21pa2V5bGFiLXFyLy4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19idXR0b24tZ3JvdXAuc2NzcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fbmF2LnNjc3MiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX25hdmJhci5zY3NzIiwid2VicGFjazovL21pa2V5bGFiLXFyLy4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19jYXJkLnNjc3MiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX2FjY29yZGlvbi5zY3NzIiwid2VicGFjazovL21pa2V5bGFiLXFyLy4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19icmVhZGNydW1iLnNjc3MiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX3BhZ2luYXRpb24uc2NzcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX3BhZ2luYXRpb24uc2NzcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fYmFkZ2Uuc2NzcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fYWxlcnQuc2NzcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fcHJvZ3Jlc3Muc2NzcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fbGlzdC1ncm91cC5zY3NzIiwid2VicGFjazovL21pa2V5bGFiLXFyLy4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19jbG9zZS5zY3NzIiwid2VicGFjazovL21pa2V5bGFiLXFyLy4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL190b2FzdHMuc2NzcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fbW9kYWwuc2NzcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX2JhY2tkcm9wLnNjc3MiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX3Rvb2x0aXAuc2NzcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX3Jlc2V0LXRleHQuc2NzcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fcG9wb3Zlci5zY3NzIiwid2VicGFjazovL21pa2V5bGFiLXFyLy4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19jYXJvdXNlbC5zY3NzIiwid2VicGFjazovL21pa2V5bGFiLXFyLy4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fY2xlYXJmaXguc2NzcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fc3Bpbm5lcnMuc2NzcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fb2ZmY2FudmFzLnNjc3MiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX3BsYWNlaG9sZGVycy5zY3NzIiwid2VicGFjazovL21pa2V5bGFiLXFyLy4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL2hlbHBlcnMvX2NvbG9yLWJnLnNjc3MiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvaGVscGVycy9fY29sb3JlZC1saW5rcy5zY3NzIiwid2VicGFjazovL21pa2V5bGFiLXFyLy4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL2hlbHBlcnMvX2ZvY3VzLXJpbmcuc2NzcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9oZWxwZXJzL19pY29uLWxpbmsuc2NzcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9oZWxwZXJzL19yYXRpby5zY3NzIiwid2VicGFjazovL21pa2V5bGFiLXFyLy4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL2hlbHBlcnMvX3Bvc2l0aW9uLnNjc3MiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvaGVscGVycy9fc3RhY2tzLnNjc3MiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvaGVscGVycy9fdmlzdWFsbHktaGlkZGVuLnNjc3MiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL192aXN1YWxseS1oaWRkZW4uc2NzcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9oZWxwZXJzL19zdHJldGNoZWQtbGluay5zY3NzIiwid2VicGFjazovL21pa2V5bGFiLXFyLy4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL2hlbHBlcnMvX3RleHQtdHJ1bmNhdGlvbi5zY3NzIiwid2VicGFjazovL21pa2V5bGFiLXFyLy4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fdGV4dC10cnVuY2F0ZS5zY3NzIiwid2VicGFjazovL21pa2V5bGFiLXFyLy4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL2hlbHBlcnMvX3ZyLnNjc3MiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL191dGlsaXRpZXMuc2NzcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy91dGlsaXRpZXMvX2FwaS5zY3NzIl0sInNvdXJjZXNDb250ZW50IjpbIkBpbXBvcnQgXCJib290c3RyYXAvc2Nzcy9ib290c3RyYXBcIjtcblxuKiB7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG5odG1sLFxuYm9keSB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAxMDAlO1xufVxuXG5ib2R5IHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNWY5ZWEwO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuLmNlbnRlciB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGxlZnQ6IDUwJTtcbiAgICB0b3A6IDUwJTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbn1cblxuI21haW4ge1xuICAgIGhlaWdodDogbWluLWNvbnRlbnQ7XG4gICAgei1pbmRleDogMztcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgICBtaW4td2lkdGg6IGZpdC1jb250ZW50O1xufVxuXG4jY2FyZC1ib2R5IHtcbiAgICBoZWlnaHQ6IG1pbi1jb250ZW50O1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XG4gICAgZmxleC13cmFwOiB3cmFwO1xuICAgIG1heC13aWR0aDogMTAwJTtcbn1cblxuLnVzLXR5cGVzIHtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbn0iLCJAbWl4aW4gYnNCYW5uZXIoJGZpbGUpIHtcbiAgLyohXG4gICAqIEJvb3RzdHJhcCAjeyRmaWxlfSB2NS4zLjMgKGh0dHBzOi8vZ2V0Ym9vdHN0cmFwLmNvbS8pXG4gICAqIENvcHlyaWdodCAyMDExLTIwMjQgVGhlIEJvb3RzdHJhcCBBdXRob3JzXG4gICAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICAgKi9cbn1cbiIsIjpyb290LFxuW2RhdGEtYnMtdGhlbWU9XCJsaWdodFwiXSB7XG4gIC8vIE5vdGU6IEN1c3RvbSB2YXJpYWJsZSB2YWx1ZXMgb25seSBzdXBwb3J0IFNhc3NTY3JpcHQgaW5zaWRlIGAje31gLlxuXG4gIC8vIENvbG9yc1xuICAvL1xuICAvLyBHZW5lcmF0ZSBwYWxldHRlcyBmb3IgZnVsbCBjb2xvcnMsIGdyYXlzLCBhbmQgdGhlbWUgY29sb3JzLlxuXG4gIEBlYWNoICRjb2xvciwgJHZhbHVlIGluICRjb2xvcnMge1xuICAgIC0tI3skcHJlZml4fSN7JGNvbG9yfTogI3skdmFsdWV9O1xuICB9XG5cbiAgQGVhY2ggJGNvbG9yLCAkdmFsdWUgaW4gJGdyYXlzIHtcbiAgICAtLSN7JHByZWZpeH1ncmF5LSN7JGNvbG9yfTogI3skdmFsdWV9O1xuICB9XG5cbiAgQGVhY2ggJGNvbG9yLCAkdmFsdWUgaW4gJHRoZW1lLWNvbG9ycyB7XG4gICAgLS0jeyRwcmVmaXh9I3skY29sb3J9OiAjeyR2YWx1ZX07XG4gIH1cblxuICBAZWFjaCAkY29sb3IsICR2YWx1ZSBpbiAkdGhlbWUtY29sb3JzLXJnYiB7XG4gICAgLS0jeyRwcmVmaXh9I3skY29sb3J9LXJnYjogI3skdmFsdWV9O1xuICB9XG5cbiAgQGVhY2ggJGNvbG9yLCAkdmFsdWUgaW4gJHRoZW1lLWNvbG9ycy10ZXh0IHtcbiAgICAtLSN7JHByZWZpeH0jeyRjb2xvcn0tdGV4dC1lbXBoYXNpczogI3skdmFsdWV9O1xuICB9XG5cbiAgQGVhY2ggJGNvbG9yLCAkdmFsdWUgaW4gJHRoZW1lLWNvbG9ycy1iZy1zdWJ0bGUge1xuICAgIC0tI3skcHJlZml4fSN7JGNvbG9yfS1iZy1zdWJ0bGU6ICN7JHZhbHVlfTtcbiAgfVxuXG4gIEBlYWNoICRjb2xvciwgJHZhbHVlIGluICR0aGVtZS1jb2xvcnMtYm9yZGVyLXN1YnRsZSB7XG4gICAgLS0jeyRwcmVmaXh9I3skY29sb3J9LWJvcmRlci1zdWJ0bGU6ICN7JHZhbHVlfTtcbiAgfVxuXG4gIC0tI3skcHJlZml4fXdoaXRlLXJnYjogI3t0by1yZ2IoJHdoaXRlKX07XG4gIC0tI3skcHJlZml4fWJsYWNrLXJnYjogI3t0by1yZ2IoJGJsYWNrKX07XG5cbiAgLy8gRm9udHNcblxuICAvLyBOb3RlOiBVc2UgYGluc3BlY3RgIGZvciBsaXN0cyBzbyB0aGF0IHF1b3RlZCBpdGVtcyBrZWVwIHRoZSBxdW90ZXMuXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vc2Fzcy9zYXNzL2lzc3Vlcy8yMzgzI2lzc3VlY29tbWVudC0zMzYzNDkxNzJcbiAgLS0jeyRwcmVmaXh9Zm9udC1zYW5zLXNlcmlmOiAje2luc3BlY3QoJGZvbnQtZmFtaWx5LXNhbnMtc2VyaWYpfTtcbiAgLS0jeyRwcmVmaXh9Zm9udC1tb25vc3BhY2U6ICN7aW5zcGVjdCgkZm9udC1mYW1pbHktbW9ub3NwYWNlKX07XG4gIC0tI3skcHJlZml4fWdyYWRpZW50OiAjeyRncmFkaWVudH07XG5cbiAgLy8gUm9vdCBhbmQgYm9keVxuICAvLyBzY3NzLWRvY3Mtc3RhcnQgcm9vdC1ib2R5LXZhcmlhYmxlc1xuICBAaWYgJGZvbnQtc2l6ZS1yb290ICE9IG51bGwge1xuICAgIC0tI3skcHJlZml4fXJvb3QtZm9udC1zaXplOiAjeyRmb250LXNpemUtcm9vdH07XG4gIH1cbiAgLS0jeyRwcmVmaXh9Ym9keS1mb250LWZhbWlseTogI3tpbnNwZWN0KCRmb250LWZhbWlseS1iYXNlKX07XG4gIEBpbmNsdWRlIHJmcygkZm9udC1zaXplLWJhc2UsIC0tI3skcHJlZml4fWJvZHktZm9udC1zaXplKTtcbiAgLS0jeyRwcmVmaXh9Ym9keS1mb250LXdlaWdodDogI3skZm9udC13ZWlnaHQtYmFzZX07XG4gIC0tI3skcHJlZml4fWJvZHktbGluZS1oZWlnaHQ6ICN7JGxpbmUtaGVpZ2h0LWJhc2V9O1xuICBAaWYgJGJvZHktdGV4dC1hbGlnbiAhPSBudWxsIHtcbiAgICAtLSN7JHByZWZpeH1ib2R5LXRleHQtYWxpZ246ICN7JGJvZHktdGV4dC1hbGlnbn07XG4gIH1cblxuICAtLSN7JHByZWZpeH1ib2R5LWNvbG9yOiAjeyRib2R5LWNvbG9yfTtcbiAgLS0jeyRwcmVmaXh9Ym9keS1jb2xvci1yZ2I6ICN7dG8tcmdiKCRib2R5LWNvbG9yKX07XG4gIC0tI3skcHJlZml4fWJvZHktYmc6ICN7JGJvZHktYmd9O1xuICAtLSN7JHByZWZpeH1ib2R5LWJnLXJnYjogI3t0by1yZ2IoJGJvZHktYmcpfTtcblxuICAtLSN7JHByZWZpeH1lbXBoYXNpcy1jb2xvcjogI3skYm9keS1lbXBoYXNpcy1jb2xvcn07XG4gIC0tI3skcHJlZml4fWVtcGhhc2lzLWNvbG9yLXJnYjogI3t0by1yZ2IoJGJvZHktZW1waGFzaXMtY29sb3IpfTtcblxuICAtLSN7JHByZWZpeH1zZWNvbmRhcnktY29sb3I6ICN7JGJvZHktc2Vjb25kYXJ5LWNvbG9yfTtcbiAgLS0jeyRwcmVmaXh9c2Vjb25kYXJ5LWNvbG9yLXJnYjogI3t0by1yZ2IoJGJvZHktc2Vjb25kYXJ5LWNvbG9yKX07XG4gIC0tI3skcHJlZml4fXNlY29uZGFyeS1iZzogI3skYm9keS1zZWNvbmRhcnktYmd9O1xuICAtLSN7JHByZWZpeH1zZWNvbmRhcnktYmctcmdiOiAje3RvLXJnYigkYm9keS1zZWNvbmRhcnktYmcpfTtcblxuICAtLSN7JHByZWZpeH10ZXJ0aWFyeS1jb2xvcjogI3skYm9keS10ZXJ0aWFyeS1jb2xvcn07XG4gIC0tI3skcHJlZml4fXRlcnRpYXJ5LWNvbG9yLXJnYjogI3t0by1yZ2IoJGJvZHktdGVydGlhcnktY29sb3IpfTtcbiAgLS0jeyRwcmVmaXh9dGVydGlhcnktYmc6ICN7JGJvZHktdGVydGlhcnktYmd9O1xuICAtLSN7JHByZWZpeH10ZXJ0aWFyeS1iZy1yZ2I6ICN7dG8tcmdiKCRib2R5LXRlcnRpYXJ5LWJnKX07XG4gIC8vIHNjc3MtZG9jcy1lbmQgcm9vdC1ib2R5LXZhcmlhYmxlc1xuXG4gIC0tI3skcHJlZml4fWhlYWRpbmctY29sb3I6ICN7JGhlYWRpbmdzLWNvbG9yfTtcblxuICAtLSN7JHByZWZpeH1saW5rLWNvbG9yOiAjeyRsaW5rLWNvbG9yfTtcbiAgLS0jeyRwcmVmaXh9bGluay1jb2xvci1yZ2I6ICN7dG8tcmdiKCRsaW5rLWNvbG9yKX07XG4gIC0tI3skcHJlZml4fWxpbmstZGVjb3JhdGlvbjogI3skbGluay1kZWNvcmF0aW9ufTtcblxuICAtLSN7JHByZWZpeH1saW5rLWhvdmVyLWNvbG9yOiAjeyRsaW5rLWhvdmVyLWNvbG9yfTtcbiAgLS0jeyRwcmVmaXh9bGluay1ob3Zlci1jb2xvci1yZ2I6ICN7dG8tcmdiKCRsaW5rLWhvdmVyLWNvbG9yKX07XG5cbiAgQGlmICRsaW5rLWhvdmVyLWRlY29yYXRpb24gIT0gbnVsbCB7XG4gICAgLS0jeyRwcmVmaXh9bGluay1ob3Zlci1kZWNvcmF0aW9uOiAjeyRsaW5rLWhvdmVyLWRlY29yYXRpb259O1xuICB9XG5cbiAgLS0jeyRwcmVmaXh9Y29kZS1jb2xvcjogI3skY29kZS1jb2xvcn07XG4gIC0tI3skcHJlZml4fWhpZ2hsaWdodC1jb2xvcjogI3skbWFyay1jb2xvcn07XG4gIC0tI3skcHJlZml4fWhpZ2hsaWdodC1iZzogI3skbWFyay1iZ307XG5cbiAgLy8gc2Nzcy1kb2NzLXN0YXJ0IHJvb3QtYm9yZGVyLXZhclxuICAtLSN7JHByZWZpeH1ib3JkZXItd2lkdGg6ICN7JGJvcmRlci13aWR0aH07XG4gIC0tI3skcHJlZml4fWJvcmRlci1zdHlsZTogI3skYm9yZGVyLXN0eWxlfTtcbiAgLS0jeyRwcmVmaXh9Ym9yZGVyLWNvbG9yOiAjeyRib3JkZXItY29sb3J9O1xuICAtLSN7JHByZWZpeH1ib3JkZXItY29sb3ItdHJhbnNsdWNlbnQ6ICN7JGJvcmRlci1jb2xvci10cmFuc2x1Y2VudH07XG5cbiAgLS0jeyRwcmVmaXh9Ym9yZGVyLXJhZGl1czogI3skYm9yZGVyLXJhZGl1c307XG4gIC0tI3skcHJlZml4fWJvcmRlci1yYWRpdXMtc206ICN7JGJvcmRlci1yYWRpdXMtc219O1xuICAtLSN7JHByZWZpeH1ib3JkZXItcmFkaXVzLWxnOiAjeyRib3JkZXItcmFkaXVzLWxnfTtcbiAgLS0jeyRwcmVmaXh9Ym9yZGVyLXJhZGl1cy14bDogI3skYm9yZGVyLXJhZGl1cy14bH07XG4gIC0tI3skcHJlZml4fWJvcmRlci1yYWRpdXMteHhsOiAjeyRib3JkZXItcmFkaXVzLXh4bH07XG4gIC0tI3skcHJlZml4fWJvcmRlci1yYWRpdXMtMnhsOiB2YXIoLS0jeyRwcmVmaXh9Ym9yZGVyLXJhZGl1cy14eGwpOyAvLyBEZXByZWNhdGVkIGluIHY1LjMuMCBmb3IgY29uc2lzdGVuY3lcbiAgLS0jeyRwcmVmaXh9Ym9yZGVyLXJhZGl1cy1waWxsOiAjeyRib3JkZXItcmFkaXVzLXBpbGx9O1xuICAvLyBzY3NzLWRvY3MtZW5kIHJvb3QtYm9yZGVyLXZhclxuXG4gIC0tI3skcHJlZml4fWJveC1zaGFkb3c6ICN7JGJveC1zaGFkb3d9O1xuICAtLSN7JHByZWZpeH1ib3gtc2hhZG93LXNtOiAjeyRib3gtc2hhZG93LXNtfTtcbiAgLS0jeyRwcmVmaXh9Ym94LXNoYWRvdy1sZzogI3skYm94LXNoYWRvdy1sZ307XG4gIC0tI3skcHJlZml4fWJveC1zaGFkb3ctaW5zZXQ6ICN7JGJveC1zaGFkb3ctaW5zZXR9O1xuXG4gIC8vIEZvY3VzIHN0eWxlc1xuICAvLyBzY3NzLWRvY3Mtc3RhcnQgcm9vdC1mb2N1cy12YXJpYWJsZXNcbiAgLS0jeyRwcmVmaXh9Zm9jdXMtcmluZy13aWR0aDogI3skZm9jdXMtcmluZy13aWR0aH07XG4gIC0tI3skcHJlZml4fWZvY3VzLXJpbmctb3BhY2l0eTogI3skZm9jdXMtcmluZy1vcGFjaXR5fTtcbiAgLS0jeyRwcmVmaXh9Zm9jdXMtcmluZy1jb2xvcjogI3skZm9jdXMtcmluZy1jb2xvcn07XG4gIC8vIHNjc3MtZG9jcy1lbmQgcm9vdC1mb2N1cy12YXJpYWJsZXNcblxuICAvLyBzY3NzLWRvY3Mtc3RhcnQgcm9vdC1mb3JtLXZhbGlkYXRpb24tdmFyaWFibGVzXG4gIC0tI3skcHJlZml4fWZvcm0tdmFsaWQtY29sb3I6ICN7JGZvcm0tdmFsaWQtY29sb3J9O1xuICAtLSN7JHByZWZpeH1mb3JtLXZhbGlkLWJvcmRlci1jb2xvcjogI3skZm9ybS12YWxpZC1ib3JkZXItY29sb3J9O1xuICAtLSN7JHByZWZpeH1mb3JtLWludmFsaWQtY29sb3I6ICN7JGZvcm0taW52YWxpZC1jb2xvcn07XG4gIC0tI3skcHJlZml4fWZvcm0taW52YWxpZC1ib3JkZXItY29sb3I6ICN7JGZvcm0taW52YWxpZC1ib3JkZXItY29sb3J9O1xuICAvLyBzY3NzLWRvY3MtZW5kIHJvb3QtZm9ybS12YWxpZGF0aW9uLXZhcmlhYmxlc1xufVxuXG5AaWYgJGVuYWJsZS1kYXJrLW1vZGUge1xuICBAaW5jbHVkZSBjb2xvci1tb2RlKGRhcmssIHRydWUpIHtcbiAgICBjb2xvci1zY2hlbWU6IGRhcms7XG5cbiAgICAvLyBzY3NzLWRvY3Mtc3RhcnQgcm9vdC1kYXJrLW1vZGUtdmFyc1xuICAgIC0tI3skcHJlZml4fWJvZHktY29sb3I6ICN7JGJvZHktY29sb3ItZGFya307XG4gICAgLS0jeyRwcmVmaXh9Ym9keS1jb2xvci1yZ2I6ICN7dG8tcmdiKCRib2R5LWNvbG9yLWRhcmspfTtcbiAgICAtLSN7JHByZWZpeH1ib2R5LWJnOiAjeyRib2R5LWJnLWRhcmt9O1xuICAgIC0tI3skcHJlZml4fWJvZHktYmctcmdiOiAje3RvLXJnYigkYm9keS1iZy1kYXJrKX07XG5cbiAgICAtLSN7JHByZWZpeH1lbXBoYXNpcy1jb2xvcjogI3skYm9keS1lbXBoYXNpcy1jb2xvci1kYXJrfTtcbiAgICAtLSN7JHByZWZpeH1lbXBoYXNpcy1jb2xvci1yZ2I6ICN7dG8tcmdiKCRib2R5LWVtcGhhc2lzLWNvbG9yLWRhcmspfTtcblxuICAgIC0tI3skcHJlZml4fXNlY29uZGFyeS1jb2xvcjogI3skYm9keS1zZWNvbmRhcnktY29sb3ItZGFya307XG4gICAgLS0jeyRwcmVmaXh9c2Vjb25kYXJ5LWNvbG9yLXJnYjogI3t0by1yZ2IoJGJvZHktc2Vjb25kYXJ5LWNvbG9yLWRhcmspfTtcbiAgICAtLSN7JHByZWZpeH1zZWNvbmRhcnktYmc6ICN7JGJvZHktc2Vjb25kYXJ5LWJnLWRhcmt9O1xuICAgIC0tI3skcHJlZml4fXNlY29uZGFyeS1iZy1yZ2I6ICN7dG8tcmdiKCRib2R5LXNlY29uZGFyeS1iZy1kYXJrKX07XG5cbiAgICAtLSN7JHByZWZpeH10ZXJ0aWFyeS1jb2xvcjogI3skYm9keS10ZXJ0aWFyeS1jb2xvci1kYXJrfTtcbiAgICAtLSN7JHByZWZpeH10ZXJ0aWFyeS1jb2xvci1yZ2I6ICN7dG8tcmdiKCRib2R5LXRlcnRpYXJ5LWNvbG9yLWRhcmspfTtcbiAgICAtLSN7JHByZWZpeH10ZXJ0aWFyeS1iZzogI3skYm9keS10ZXJ0aWFyeS1iZy1kYXJrfTtcbiAgICAtLSN7JHByZWZpeH10ZXJ0aWFyeS1iZy1yZ2I6ICN7dG8tcmdiKCRib2R5LXRlcnRpYXJ5LWJnLWRhcmspfTtcblxuICAgIEBlYWNoICRjb2xvciwgJHZhbHVlIGluICR0aGVtZS1jb2xvcnMtdGV4dC1kYXJrIHtcbiAgICAgIC0tI3skcHJlZml4fSN7JGNvbG9yfS10ZXh0LWVtcGhhc2lzOiAjeyR2YWx1ZX07XG4gICAgfVxuXG4gICAgQGVhY2ggJGNvbG9yLCAkdmFsdWUgaW4gJHRoZW1lLWNvbG9ycy1iZy1zdWJ0bGUtZGFyayB7XG4gICAgICAtLSN7JHByZWZpeH0jeyRjb2xvcn0tYmctc3VidGxlOiAjeyR2YWx1ZX07XG4gICAgfVxuXG4gICAgQGVhY2ggJGNvbG9yLCAkdmFsdWUgaW4gJHRoZW1lLWNvbG9ycy1ib3JkZXItc3VidGxlLWRhcmsge1xuICAgICAgLS0jeyRwcmVmaXh9I3skY29sb3J9LWJvcmRlci1zdWJ0bGU6ICN7JHZhbHVlfTtcbiAgICB9XG5cbiAgICAtLSN7JHByZWZpeH1oZWFkaW5nLWNvbG9yOiAjeyRoZWFkaW5ncy1jb2xvci1kYXJrfTtcblxuICAgIC0tI3skcHJlZml4fWxpbmstY29sb3I6ICN7JGxpbmstY29sb3ItZGFya307XG4gICAgLS0jeyRwcmVmaXh9bGluay1ob3Zlci1jb2xvcjogI3skbGluay1ob3Zlci1jb2xvci1kYXJrfTtcbiAgICAtLSN7JHByZWZpeH1saW5rLWNvbG9yLXJnYjogI3t0by1yZ2IoJGxpbmstY29sb3ItZGFyayl9O1xuICAgIC0tI3skcHJlZml4fWxpbmstaG92ZXItY29sb3ItcmdiOiAje3RvLXJnYigkbGluay1ob3Zlci1jb2xvci1kYXJrKX07XG5cbiAgICAtLSN7JHByZWZpeH1jb2RlLWNvbG9yOiAjeyRjb2RlLWNvbG9yLWRhcmt9O1xuICAgIC0tI3skcHJlZml4fWhpZ2hsaWdodC1jb2xvcjogI3skbWFyay1jb2xvci1kYXJrfTtcbiAgICAtLSN7JHByZWZpeH1oaWdobGlnaHQtYmc6ICN7JG1hcmstYmctZGFya307XG5cbiAgICAtLSN7JHByZWZpeH1ib3JkZXItY29sb3I6ICN7JGJvcmRlci1jb2xvci1kYXJrfTtcbiAgICAtLSN7JHByZWZpeH1ib3JkZXItY29sb3ItdHJhbnNsdWNlbnQ6ICN7JGJvcmRlci1jb2xvci10cmFuc2x1Y2VudC1kYXJrfTtcblxuICAgIC0tI3skcHJlZml4fWZvcm0tdmFsaWQtY29sb3I6ICN7JGZvcm0tdmFsaWQtY29sb3ItZGFya307XG4gICAgLS0jeyRwcmVmaXh9Zm9ybS12YWxpZC1ib3JkZXItY29sb3I6ICN7JGZvcm0tdmFsaWQtYm9yZGVyLWNvbG9yLWRhcmt9O1xuICAgIC0tI3skcHJlZml4fWZvcm0taW52YWxpZC1jb2xvcjogI3skZm9ybS1pbnZhbGlkLWNvbG9yLWRhcmt9O1xuICAgIC0tI3skcHJlZml4fWZvcm0taW52YWxpZC1ib3JkZXItY29sb3I6ICN7JGZvcm0taW52YWxpZC1ib3JkZXItY29sb3ItZGFya307XG4gICAgLy8gc2Nzcy1kb2NzLWVuZCByb290LWRhcmstbW9kZS12YXJzXG4gIH1cbn1cbiIsIi8vIHN0eWxlbGludC1kaXNhYmxlIHNjc3MvZGltZW5zaW9uLW5vLW5vbi1udW1lcmljLXZhbHVlc1xuXG4vLyBTQ1NTIFJGUyBtaXhpblxuLy9cbi8vIEF1dG9tYXRlZCByZXNwb25zaXZlIHZhbHVlcyBmb3IgZm9udCBzaXplcywgcGFkZGluZ3MsIG1hcmdpbnMgYW5kIG11Y2ggbW9yZVxuLy9cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvcmZzL2Jsb2IvbWFpbi9MSUNFTlNFKVxuXG4vLyBDb25maWd1cmF0aW9uXG5cbi8vIEJhc2UgdmFsdWVcbiRyZnMtYmFzZS12YWx1ZTogMS4yNXJlbSAhZGVmYXVsdDtcbiRyZnMtdW5pdDogcmVtICFkZWZhdWx0O1xuXG5AaWYgJHJmcy11bml0ICE9IHJlbSBhbmQgJHJmcy11bml0ICE9IHB4IHtcbiAgQGVycm9yIFwiYCN7JHJmcy11bml0fWAgaXMgbm90IGEgdmFsaWQgdW5pdCBmb3IgJHJmcy11bml0LiBVc2UgYHB4YCBvciBgcmVtYC5cIjtcbn1cblxuLy8gQnJlYWtwb2ludCBhdCB3aGVyZSB2YWx1ZXMgc3RhcnQgZGVjcmVhc2luZyBpZiBzY3JlZW4gd2lkdGggaXMgc21hbGxlclxuJHJmcy1icmVha3BvaW50OiAxMjAwcHggIWRlZmF1bHQ7XG4kcmZzLWJyZWFrcG9pbnQtdW5pdDogcHggIWRlZmF1bHQ7XG5cbkBpZiAkcmZzLWJyZWFrcG9pbnQtdW5pdCAhPSBweCBhbmQgJHJmcy1icmVha3BvaW50LXVuaXQgIT0gZW0gYW5kICRyZnMtYnJlYWtwb2ludC11bml0ICE9IHJlbSB7XG4gIEBlcnJvciBcImAjeyRyZnMtYnJlYWtwb2ludC11bml0fWAgaXMgbm90IGEgdmFsaWQgdW5pdCBmb3IgJHJmcy1icmVha3BvaW50LXVuaXQuIFVzZSBgcHhgLCBgZW1gIG9yIGByZW1gLlwiO1xufVxuXG4vLyBSZXNpemUgdmFsdWVzIGJhc2VkIG9uIHNjcmVlbiBoZWlnaHQgYW5kIHdpZHRoXG4kcmZzLXR3by1kaW1lbnNpb25hbDogZmFsc2UgIWRlZmF1bHQ7XG5cbi8vIEZhY3RvciBvZiBkZWNyZWFzZVxuJHJmcy1mYWN0b3I6IDEwICFkZWZhdWx0O1xuXG5AaWYgdHlwZS1vZigkcmZzLWZhY3RvcikgIT0gbnVtYmVyIG9yICRyZnMtZmFjdG9yIDw9IDEge1xuICBAZXJyb3IgXCJgI3skcmZzLWZhY3Rvcn1gIGlzIG5vdCBhIHZhbGlkICAkcmZzLWZhY3RvciwgaXQgbXVzdCBiZSBncmVhdGVyIHRoYW4gMS5cIjtcbn1cblxuLy8gTW9kZS4gUG9zc2liaWxpdGllczogXCJtaW4tbWVkaWEtcXVlcnlcIiwgXCJtYXgtbWVkaWEtcXVlcnlcIlxuJHJmcy1tb2RlOiBtaW4tbWVkaWEtcXVlcnkgIWRlZmF1bHQ7XG5cbi8vIEdlbmVyYXRlIGVuYWJsZSBvciBkaXNhYmxlIGNsYXNzZXMuIFBvc3NpYmlsaXRpZXM6IGZhbHNlLCBcImVuYWJsZVwiIG9yIFwiZGlzYWJsZVwiXG4kcmZzLWNsYXNzOiBmYWxzZSAhZGVmYXVsdDtcblxuLy8gMSByZW0gPSAkcmZzLXJlbS12YWx1ZSBweFxuJHJmcy1yZW0tdmFsdWU6IDE2ICFkZWZhdWx0O1xuXG4vLyBTYWZhcmkgaWZyYW1lIHJlc2l6ZSBidWc6IGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL3Jmcy9pc3N1ZXMvMTRcbiRyZnMtc2FmYXJpLWlmcmFtZS1yZXNpemUtYnVnLWZpeDogZmFsc2UgIWRlZmF1bHQ7XG5cbi8vIERpc2FibGUgUkZTIGJ5IHNldHRpbmcgJGVuYWJsZS1yZnMgdG8gZmFsc2VcbiRlbmFibGUtcmZzOiB0cnVlICFkZWZhdWx0O1xuXG4vLyBDYWNoZSAkcmZzLWJhc2UtdmFsdWUgdW5pdFxuJHJmcy1iYXNlLXZhbHVlLXVuaXQ6IHVuaXQoJHJmcy1iYXNlLXZhbHVlKTtcblxuQGZ1bmN0aW9uIGRpdmlkZSgkZGl2aWRlbmQsICRkaXZpc29yLCAkcHJlY2lzaW9uOiAxMCkge1xuICAkc2lnbjogaWYoJGRpdmlkZW5kID4gMCBhbmQgJGRpdmlzb3IgPiAwIG9yICRkaXZpZGVuZCA8IDAgYW5kICRkaXZpc29yIDwgMCwgMSwgLTEpO1xuICAkZGl2aWRlbmQ6IGFicygkZGl2aWRlbmQpO1xuICAkZGl2aXNvcjogYWJzKCRkaXZpc29yKTtcbiAgQGlmICRkaXZpZGVuZCA9PSAwIHtcbiAgICBAcmV0dXJuIDA7XG4gIH1cbiAgQGlmICRkaXZpc29yID09IDAge1xuICAgIEBlcnJvciBcIkNhbm5vdCBkaXZpZGUgYnkgMFwiO1xuICB9XG4gICRyZW1haW5kZXI6ICRkaXZpZGVuZDtcbiAgJHJlc3VsdDogMDtcbiAgJGZhY3RvcjogMTA7XG4gIEB3aGlsZSAoJHJlbWFpbmRlciA+IDAgYW5kICRwcmVjaXNpb24gPj0gMCkge1xuICAgICRxdW90aWVudDogMDtcbiAgICBAd2hpbGUgKCRyZW1haW5kZXIgPj0gJGRpdmlzb3IpIHtcbiAgICAgICRyZW1haW5kZXI6ICRyZW1haW5kZXIgLSAkZGl2aXNvcjtcbiAgICAgICRxdW90aWVudDogJHF1b3RpZW50ICsgMTtcbiAgICB9XG4gICAgJHJlc3VsdDogJHJlc3VsdCAqIDEwICsgJHF1b3RpZW50O1xuICAgICRmYWN0b3I6ICRmYWN0b3IgKiAuMTtcbiAgICAkcmVtYWluZGVyOiAkcmVtYWluZGVyICogMTA7XG4gICAgJHByZWNpc2lvbjogJHByZWNpc2lvbiAtIDE7XG4gICAgQGlmICgkcHJlY2lzaW9uIDwgMCBhbmQgJHJlbWFpbmRlciA+PSAkZGl2aXNvciAqIDUpIHtcbiAgICAgICRyZXN1bHQ6ICRyZXN1bHQgKyAxO1xuICAgIH1cbiAgfVxuICAkcmVzdWx0OiAkcmVzdWx0ICogJGZhY3RvciAqICRzaWduO1xuICAkZGl2aWRlbmQtdW5pdDogdW5pdCgkZGl2aWRlbmQpO1xuICAkZGl2aXNvci11bml0OiB1bml0KCRkaXZpc29yKTtcbiAgJHVuaXQtbWFwOiAoXG4gICAgXCJweFwiOiAxcHgsXG4gICAgXCJyZW1cIjogMXJlbSxcbiAgICBcImVtXCI6IDFlbSxcbiAgICBcIiVcIjogMSVcbiAgKTtcbiAgQGlmICgkZGl2aWRlbmQtdW5pdCAhPSAkZGl2aXNvci11bml0IGFuZCBtYXAtaGFzLWtleSgkdW5pdC1tYXAsICRkaXZpZGVuZC11bml0KSkge1xuICAgICRyZXN1bHQ6ICRyZXN1bHQgKiBtYXAtZ2V0KCR1bml0LW1hcCwgJGRpdmlkZW5kLXVuaXQpO1xuICB9XG4gIEByZXR1cm4gJHJlc3VsdDtcbn1cblxuLy8gUmVtb3ZlIHB4LXVuaXQgZnJvbSAkcmZzLWJhc2UtdmFsdWUgZm9yIGNhbGN1bGF0aW9uc1xuQGlmICRyZnMtYmFzZS12YWx1ZS11bml0ID09IHB4IHtcbiAgJHJmcy1iYXNlLXZhbHVlOiBkaXZpZGUoJHJmcy1iYXNlLXZhbHVlLCAkcmZzLWJhc2UtdmFsdWUgKiAwICsgMSk7XG59XG5AZWxzZSBpZiAkcmZzLWJhc2UtdmFsdWUtdW5pdCA9PSByZW0ge1xuICAkcmZzLWJhc2UtdmFsdWU6IGRpdmlkZSgkcmZzLWJhc2UtdmFsdWUsIGRpdmlkZSgkcmZzLWJhc2UtdmFsdWUgKiAwICsgMSwgJHJmcy1yZW0tdmFsdWUpKTtcbn1cblxuLy8gQ2FjaGUgJHJmcy1icmVha3BvaW50IHVuaXQgdG8gcHJldmVudCBtdWx0aXBsZSBjYWxsc1xuJHJmcy1icmVha3BvaW50LXVuaXQtY2FjaGU6IHVuaXQoJHJmcy1icmVha3BvaW50KTtcblxuLy8gUmVtb3ZlIHVuaXQgZnJvbSAkcmZzLWJyZWFrcG9pbnQgZm9yIGNhbGN1bGF0aW9uc1xuQGlmICRyZnMtYnJlYWtwb2ludC11bml0LWNhY2hlID09IHB4IHtcbiAgJHJmcy1icmVha3BvaW50OiBkaXZpZGUoJHJmcy1icmVha3BvaW50LCAkcmZzLWJyZWFrcG9pbnQgKiAwICsgMSk7XG59XG5AZWxzZSBpZiAkcmZzLWJyZWFrcG9pbnQtdW5pdC1jYWNoZSA9PSByZW0gb3IgJHJmcy1icmVha3BvaW50LXVuaXQtY2FjaGUgPT0gXCJlbVwiIHtcbiAgJHJmcy1icmVha3BvaW50OiBkaXZpZGUoJHJmcy1icmVha3BvaW50LCBkaXZpZGUoJHJmcy1icmVha3BvaW50ICogMCArIDEsICRyZnMtcmVtLXZhbHVlKSk7XG59XG5cbi8vIENhbGN1bGF0ZSB0aGUgbWVkaWEgcXVlcnkgdmFsdWVcbiRyZnMtbXEtdmFsdWU6IGlmKCRyZnMtYnJlYWtwb2ludC11bml0ID09IHB4LCAjeyRyZnMtYnJlYWtwb2ludH1weCwgI3tkaXZpZGUoJHJmcy1icmVha3BvaW50LCAkcmZzLXJlbS12YWx1ZSl9I3skcmZzLWJyZWFrcG9pbnQtdW5pdH0pO1xuJHJmcy1tcS1wcm9wZXJ0eS13aWR0aDogaWYoJHJmcy1tb2RlID09IG1heC1tZWRpYS1xdWVyeSwgbWF4LXdpZHRoLCBtaW4td2lkdGgpO1xuJHJmcy1tcS1wcm9wZXJ0eS1oZWlnaHQ6IGlmKCRyZnMtbW9kZSA9PSBtYXgtbWVkaWEtcXVlcnksIG1heC1oZWlnaHQsIG1pbi1oZWlnaHQpO1xuXG4vLyBJbnRlcm5hbCBtaXhpbiB1c2VkIHRvIGRldGVybWluZSB3aGljaCBtZWRpYSBxdWVyeSBuZWVkcyB0byBiZSB1c2VkXG5AbWl4aW4gX3Jmcy1tZWRpYS1xdWVyeSB7XG4gIEBpZiAkcmZzLXR3by1kaW1lbnNpb25hbCB7XG4gICAgQGlmICRyZnMtbW9kZSA9PSBtYXgtbWVkaWEtcXVlcnkge1xuICAgICAgQG1lZGlhICgjeyRyZnMtbXEtcHJvcGVydHktd2lkdGh9OiAjeyRyZnMtbXEtdmFsdWV9KSwgKCN7JHJmcy1tcS1wcm9wZXJ0eS1oZWlnaHR9OiAjeyRyZnMtbXEtdmFsdWV9KSB7XG4gICAgICAgIEBjb250ZW50O1xuICAgICAgfVxuICAgIH1cbiAgICBAZWxzZSB7XG4gICAgICBAbWVkaWEgKCN7JHJmcy1tcS1wcm9wZXJ0eS13aWR0aH06ICN7JHJmcy1tcS12YWx1ZX0pIGFuZCAoI3skcmZzLW1xLXByb3BlcnR5LWhlaWdodH06ICN7JHJmcy1tcS12YWx1ZX0pIHtcbiAgICAgICAgQGNvbnRlbnQ7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIEBlbHNlIHtcbiAgICBAbWVkaWEgKCN7JHJmcy1tcS1wcm9wZXJ0eS13aWR0aH06ICN7JHJmcy1tcS12YWx1ZX0pIHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cbiAgfVxufVxuXG4vLyBJbnRlcm5hbCBtaXhpbiB0aGF0IGFkZHMgZGlzYWJsZSBjbGFzc2VzIHRvIHRoZSBzZWxlY3RvciBpZiBuZWVkZWQuXG5AbWl4aW4gX3Jmcy1ydWxlIHtcbiAgQGlmICRyZnMtY2xhc3MgPT0gZGlzYWJsZSBhbmQgJHJmcy1tb2RlID09IG1heC1tZWRpYS1xdWVyeSB7XG4gICAgLy8gQWRkaW5nIGFuIGV4dHJhIGNsYXNzIGluY3JlYXNlcyBzcGVjaWZpY2l0eSwgd2hpY2ggcHJldmVudHMgdGhlIG1lZGlhIHF1ZXJ5IHRvIG92ZXJyaWRlIHRoZSBwcm9wZXJ0eVxuICAgICYsXG4gICAgLmRpc2FibGUtcmZzICYsXG4gICAgJi5kaXNhYmxlLXJmcyB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG4gIH1cbiAgQGVsc2UgaWYgJHJmcy1jbGFzcyA9PSBlbmFibGUgYW5kICRyZnMtbW9kZSA9PSBtaW4tbWVkaWEtcXVlcnkge1xuICAgIC5lbmFibGUtcmZzICYsXG4gICAgJi5lbmFibGUtcmZzIHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cbiAgfSBAZWxzZSB7XG4gICAgQGNvbnRlbnQ7XG4gIH1cbn1cblxuLy8gSW50ZXJuYWwgbWl4aW4gdGhhdCBhZGRzIGVuYWJsZSBjbGFzc2VzIHRvIHRoZSBzZWxlY3RvciBpZiBuZWVkZWQuXG5AbWl4aW4gX3Jmcy1tZWRpYS1xdWVyeS1ydWxlIHtcblxuICBAaWYgJHJmcy1jbGFzcyA9PSBlbmFibGUge1xuICAgIEBpZiAkcmZzLW1vZGUgPT0gbWluLW1lZGlhLXF1ZXJ5IHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cblxuICAgIEBpbmNsdWRlIF9yZnMtbWVkaWEtcXVlcnkgKCkge1xuICAgICAgLmVuYWJsZS1yZnMgJixcbiAgICAgICYuZW5hYmxlLXJmcyB7XG4gICAgICAgIEBjb250ZW50O1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBAZWxzZSB7XG4gICAgQGlmICRyZnMtY2xhc3MgPT0gZGlzYWJsZSBhbmQgJHJmcy1tb2RlID09IG1pbi1tZWRpYS1xdWVyeSB7XG4gICAgICAuZGlzYWJsZS1yZnMgJixcbiAgICAgICYuZGlzYWJsZS1yZnMge1xuICAgICAgICBAY29udGVudDtcbiAgICAgIH1cbiAgICB9XG4gICAgQGluY2x1ZGUgX3Jmcy1tZWRpYS1xdWVyeSAoKSB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG4gIH1cbn1cblxuLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGdldCB0aGUgZm9ybWF0dGVkIG5vbi1yZXNwb25zaXZlIHZhbHVlXG5AZnVuY3Rpb24gcmZzLXZhbHVlKCR2YWx1ZXMpIHtcbiAgLy8gQ29udmVydCB0byBsaXN0XG4gICR2YWx1ZXM6IGlmKHR5cGUtb2YoJHZhbHVlcykgIT0gbGlzdCwgKCR2YWx1ZXMsKSwgJHZhbHVlcyk7XG5cbiAgJHZhbDogXCJcIjtcblxuICAvLyBMb29wIG92ZXIgZWFjaCB2YWx1ZSBhbmQgY2FsY3VsYXRlIHZhbHVlXG4gIEBlYWNoICR2YWx1ZSBpbiAkdmFsdWVzIHtcbiAgICBAaWYgJHZhbHVlID09IDAge1xuICAgICAgJHZhbDogJHZhbCArIFwiIDBcIjtcbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgLy8gQ2FjaGUgJHZhbHVlIHVuaXRcbiAgICAgICR1bml0OiBpZih0eXBlLW9mKCR2YWx1ZSkgPT0gXCJudW1iZXJcIiwgdW5pdCgkdmFsdWUpLCBmYWxzZSk7XG5cbiAgICAgIEBpZiAkdW5pdCA9PSBweCB7XG4gICAgICAgIC8vIENvbnZlcnQgdG8gcmVtIGlmIG5lZWRlZFxuICAgICAgICAkdmFsOiAkdmFsICsgXCIgXCIgKyBpZigkcmZzLXVuaXQgPT0gcmVtLCAje2RpdmlkZSgkdmFsdWUsICR2YWx1ZSAqIDAgKyAkcmZzLXJlbS12YWx1ZSl9cmVtLCAkdmFsdWUpO1xuICAgICAgfVxuICAgICAgQGVsc2UgaWYgJHVuaXQgPT0gcmVtIHtcbiAgICAgICAgLy8gQ29udmVydCB0byBweCBpZiBuZWVkZWRcbiAgICAgICAgJHZhbDogJHZhbCArIFwiIFwiICsgaWYoJHJmcy11bml0ID09IHB4LCAje2RpdmlkZSgkdmFsdWUsICR2YWx1ZSAqIDAgKyAxKSAqICRyZnMtcmVtLXZhbHVlfXB4LCAkdmFsdWUpO1xuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIC8vIElmICR2YWx1ZSBpc24ndCBhIG51bWJlciAobGlrZSBpbmhlcml0KSBvciAkdmFsdWUgaGFzIGEgdW5pdCAobm90IHB4IG9yIHJlbSwgbGlrZSAxLjVlbSkgb3IgJCBpcyAwLCBqdXN0IHByaW50IHRoZSB2YWx1ZVxuICAgICAgICAkdmFsOiAkdmFsICsgXCIgXCIgKyAkdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gUmVtb3ZlIGZpcnN0IHNwYWNlXG4gIEByZXR1cm4gdW5xdW90ZShzdHItc2xpY2UoJHZhbCwgMikpO1xufVxuXG4vLyBIZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IHRoZSByZXNwb25zaXZlIHZhbHVlIGNhbGN1bGF0ZWQgYnkgUkZTXG5AZnVuY3Rpb24gcmZzLWZsdWlkLXZhbHVlKCR2YWx1ZXMpIHtcbiAgLy8gQ29udmVydCB0byBsaXN0XG4gICR2YWx1ZXM6IGlmKHR5cGUtb2YoJHZhbHVlcykgIT0gbGlzdCwgKCR2YWx1ZXMsKSwgJHZhbHVlcyk7XG5cbiAgJHZhbDogXCJcIjtcblxuICAvLyBMb29wIG92ZXIgZWFjaCB2YWx1ZSBhbmQgY2FsY3VsYXRlIHZhbHVlXG4gIEBlYWNoICR2YWx1ZSBpbiAkdmFsdWVzIHtcbiAgICBAaWYgJHZhbHVlID09IDAge1xuICAgICAgJHZhbDogJHZhbCArIFwiIDBcIjtcbiAgICB9IEBlbHNlIHtcbiAgICAgIC8vIENhY2hlICR2YWx1ZSB1bml0XG4gICAgICAkdW5pdDogaWYodHlwZS1vZigkdmFsdWUpID09IFwibnVtYmVyXCIsIHVuaXQoJHZhbHVlKSwgZmFsc2UpO1xuXG4gICAgICAvLyBJZiAkdmFsdWUgaXNuJ3QgYSBudW1iZXIgKGxpa2UgaW5oZXJpdCkgb3IgJHZhbHVlIGhhcyBhIHVuaXQgKG5vdCBweCBvciByZW0sIGxpa2UgMS41ZW0pIG9yICQgaXMgMCwganVzdCBwcmludCB0aGUgdmFsdWVcbiAgICAgIEBpZiBub3QgJHVuaXQgb3IgJHVuaXQgIT0gcHggYW5kICR1bml0ICE9IHJlbSB7XG4gICAgICAgICR2YWw6ICR2YWwgKyBcIiBcIiArICR2YWx1ZTtcbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICAvLyBSZW1vdmUgdW5pdCBmcm9tICR2YWx1ZSBmb3IgY2FsY3VsYXRpb25zXG4gICAgICAgICR2YWx1ZTogZGl2aWRlKCR2YWx1ZSwgJHZhbHVlICogMCArIGlmKCR1bml0ID09IHB4LCAxLCBkaXZpZGUoMSwgJHJmcy1yZW0tdmFsdWUpKSk7XG5cbiAgICAgICAgLy8gT25seSBhZGQgdGhlIG1lZGlhIHF1ZXJ5IGlmIHRoZSB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gdGhlIG1pbmltdW0gdmFsdWVcbiAgICAgICAgQGlmIGFicygkdmFsdWUpIDw9ICRyZnMtYmFzZS12YWx1ZSBvciBub3QgJGVuYWJsZS1yZnMge1xuICAgICAgICAgICR2YWw6ICR2YWwgKyBcIiBcIiArIGlmKCRyZnMtdW5pdCA9PSByZW0sICN7ZGl2aWRlKCR2YWx1ZSwgJHJmcy1yZW0tdmFsdWUpfXJlbSwgI3skdmFsdWV9cHgpO1xuICAgICAgICB9XG4gICAgICAgIEBlbHNlIHtcbiAgICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIG1pbmltdW0gdmFsdWVcbiAgICAgICAgICAkdmFsdWUtbWluOiAkcmZzLWJhc2UtdmFsdWUgKyBkaXZpZGUoYWJzKCR2YWx1ZSkgLSAkcmZzLWJhc2UtdmFsdWUsICRyZnMtZmFjdG9yKTtcblxuICAgICAgICAgIC8vIENhbGN1bGF0ZSBkaWZmZXJlbmNlIGJldHdlZW4gJHZhbHVlIGFuZCB0aGUgbWluaW11bSB2YWx1ZVxuICAgICAgICAgICR2YWx1ZS1kaWZmOiBhYnMoJHZhbHVlKSAtICR2YWx1ZS1taW47XG5cbiAgICAgICAgICAvLyBCYXNlIHZhbHVlIGZvcm1hdHRpbmdcbiAgICAgICAgICAkbWluLXdpZHRoOiBpZigkcmZzLXVuaXQgPT0gcmVtLCAje2RpdmlkZSgkdmFsdWUtbWluLCAkcmZzLXJlbS12YWx1ZSl9cmVtLCAjeyR2YWx1ZS1taW59cHgpO1xuXG4gICAgICAgICAgLy8gVXNlIG5lZ2F0aXZlIHZhbHVlIGlmIG5lZWRlZFxuICAgICAgICAgICRtaW4td2lkdGg6IGlmKCR2YWx1ZSA8IDAsIC0kbWluLXdpZHRoLCAkbWluLXdpZHRoKTtcblxuICAgICAgICAgIC8vIFVzZSBgdm1pbmAgaWYgdHdvLWRpbWVuc2lvbmFsIGlzIGVuYWJsZWRcbiAgICAgICAgICAkdmFyaWFibGUtdW5pdDogaWYoJHJmcy10d28tZGltZW5zaW9uYWwsIHZtaW4sIHZ3KTtcblxuICAgICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgdmFyaWFibGUgd2lkdGggYmV0d2VlbiAwIGFuZCAkcmZzLWJyZWFrcG9pbnRcbiAgICAgICAgICAkdmFyaWFibGUtd2lkdGg6ICN7ZGl2aWRlKCR2YWx1ZS1kaWZmICogMTAwLCAkcmZzLWJyZWFrcG9pbnQpfSN7JHZhcmlhYmxlLXVuaXR9O1xuXG4gICAgICAgICAgLy8gUmV0dXJuIHRoZSBjYWxjdWxhdGVkIHZhbHVlXG4gICAgICAgICAgJHZhbDogJHZhbCArIFwiIGNhbGMoXCIgKyAkbWluLXdpZHRoICsgaWYoJHZhbHVlIDwgMCwgXCIgLSBcIiwgXCIgKyBcIikgKyAkdmFyaWFibGUtd2lkdGggKyBcIilcIjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFJlbW92ZSBmaXJzdCBzcGFjZVxuICBAcmV0dXJuIHVucXVvdGUoc3RyLXNsaWNlKCR2YWwsIDIpKTtcbn1cblxuLy8gUkZTIG1peGluXG5AbWl4aW4gcmZzKCR2YWx1ZXMsICRwcm9wZXJ0eTogZm9udC1zaXplKSB7XG4gIEBpZiAkdmFsdWVzICE9IG51bGwge1xuICAgICR2YWw6IHJmcy12YWx1ZSgkdmFsdWVzKTtcbiAgICAkZmx1aWQtdmFsOiByZnMtZmx1aWQtdmFsdWUoJHZhbHVlcyk7XG5cbiAgICAvLyBEbyBub3QgcHJpbnQgdGhlIG1lZGlhIHF1ZXJ5IGlmIHJlc3BvbnNpdmUgJiBub24tcmVzcG9uc2l2ZSB2YWx1ZXMgYXJlIHRoZSBzYW1lXG4gICAgQGlmICR2YWwgPT0gJGZsdWlkLXZhbCB7XG4gICAgICAjeyRwcm9wZXJ0eX06ICR2YWw7XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgIEBpbmNsdWRlIF9yZnMtcnVsZSAoKSB7XG4gICAgICAgICN7JHByb3BlcnR5fTogaWYoJHJmcy1tb2RlID09IG1heC1tZWRpYS1xdWVyeSwgJHZhbCwgJGZsdWlkLXZhbCk7XG5cbiAgICAgICAgLy8gSW5jbHVkZSBzYWZhcmkgaWZyYW1lIHJlc2l6ZSBmaXggaWYgbmVlZGVkXG4gICAgICAgIG1pbi13aWR0aDogaWYoJHJmcy1zYWZhcmktaWZyYW1lLXJlc2l6ZS1idWctZml4LCAoMCAqIDF2dyksIG51bGwpO1xuICAgICAgfVxuXG4gICAgICBAaW5jbHVkZSBfcmZzLW1lZGlhLXF1ZXJ5LXJ1bGUgKCkge1xuICAgICAgICAjeyRwcm9wZXJ0eX06IGlmKCRyZnMtbW9kZSA9PSBtYXgtbWVkaWEtcXVlcnksICRmbHVpZC12YWwsICR2YWwpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLyBTaG9ydGhhbmQgaGVscGVyIG1peGluc1xuQG1peGluIGZvbnQtc2l6ZSgkdmFsdWUpIHtcbiAgQGluY2x1ZGUgcmZzKCR2YWx1ZSk7XG59XG5cbkBtaXhpbiBwYWRkaW5nKCR2YWx1ZSkge1xuICBAaW5jbHVkZSByZnMoJHZhbHVlLCBwYWRkaW5nKTtcbn1cblxuQG1peGluIHBhZGRpbmctdG9wKCR2YWx1ZSkge1xuICBAaW5jbHVkZSByZnMoJHZhbHVlLCBwYWRkaW5nLXRvcCk7XG59XG5cbkBtaXhpbiBwYWRkaW5nLXJpZ2h0KCR2YWx1ZSkge1xuICBAaW5jbHVkZSByZnMoJHZhbHVlLCBwYWRkaW5nLXJpZ2h0KTtcbn1cblxuQG1peGluIHBhZGRpbmctYm90dG9tKCR2YWx1ZSkge1xuICBAaW5jbHVkZSByZnMoJHZhbHVlLCBwYWRkaW5nLWJvdHRvbSk7XG59XG5cbkBtaXhpbiBwYWRkaW5nLWxlZnQoJHZhbHVlKSB7XG4gIEBpbmNsdWRlIHJmcygkdmFsdWUsIHBhZGRpbmctbGVmdCk7XG59XG5cbkBtaXhpbiBtYXJnaW4oJHZhbHVlKSB7XG4gIEBpbmNsdWRlIHJmcygkdmFsdWUsIG1hcmdpbik7XG59XG5cbkBtaXhpbiBtYXJnaW4tdG9wKCR2YWx1ZSkge1xuICBAaW5jbHVkZSByZnMoJHZhbHVlLCBtYXJnaW4tdG9wKTtcbn1cblxuQG1peGluIG1hcmdpbi1yaWdodCgkdmFsdWUpIHtcbiAgQGluY2x1ZGUgcmZzKCR2YWx1ZSwgbWFyZ2luLXJpZ2h0KTtcbn1cblxuQG1peGluIG1hcmdpbi1ib3R0b20oJHZhbHVlKSB7XG4gIEBpbmNsdWRlIHJmcygkdmFsdWUsIG1hcmdpbi1ib3R0b20pO1xufVxuXG5AbWl4aW4gbWFyZ2luLWxlZnQoJHZhbHVlKSB7XG4gIEBpbmNsdWRlIHJmcygkdmFsdWUsIG1hcmdpbi1sZWZ0KTtcbn1cbiIsIi8vIHNjc3MtZG9jcy1zdGFydCBjb2xvci1tb2RlLW1peGluXG5AbWl4aW4gY29sb3ItbW9kZSgkbW9kZTogbGlnaHQsICRyb290OiBmYWxzZSkge1xuICBAaWYgJGNvbG9yLW1vZGUtdHlwZSA9PSBcIm1lZGlhLXF1ZXJ5XCIge1xuICAgIEBpZiAkcm9vdCA9PSB0cnVlIHtcbiAgICAgIEBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ICRtb2RlKSB7XG4gICAgICAgIDpyb290IHtcbiAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gQGVsc2Uge1xuICAgICAgQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogJG1vZGUpIHtcbiAgICAgICAgQGNvbnRlbnQ7XG4gICAgICB9XG4gICAgfVxuICB9IEBlbHNlIHtcbiAgICBbZGF0YS1icy10aGVtZT1cIiN7JG1vZGV9XCJdIHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cbiAgfVxufVxuLy8gc2Nzcy1kb2NzLWVuZCBjb2xvci1tb2RlLW1peGluXG4iLCIvLyBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQsIHNlbGVjdG9yLW5vLXF1YWxpZnlpbmctdHlwZSwgcHJvcGVydHktbm8tdmVuZG9yLXByZWZpeFxuXG5cbi8vIFJlYm9vdFxuLy9cbi8vIE5vcm1hbGl6YXRpb24gb2YgSFRNTCBlbGVtZW50cywgbWFudWFsbHkgZm9ya2VkIGZyb20gTm9ybWFsaXplLmNzcyB0byByZW1vdmVcbi8vIHN0eWxlcyB0YXJnZXRpbmcgaXJyZWxldmFudCBicm93c2VycyB3aGlsZSBhcHBseWluZyBuZXcgc3R5bGVzLlxuLy9cbi8vIE5vcm1hbGl6ZSBpcyBsaWNlbnNlZCBNSVQuIGh0dHBzOi8vZ2l0aHViLmNvbS9uZWNvbGFzL25vcm1hbGl6ZS5jc3NcblxuXG4vLyBEb2N1bWVudFxuLy9cbi8vIENoYW5nZSBmcm9tIGBib3gtc2l6aW5nOiBjb250ZW50LWJveGAgc28gdGhhdCBgd2lkdGhgIGlzIG5vdCBhZmZlY3RlZCBieSBgcGFkZGluZ2Agb3IgYGJvcmRlcmAuXG5cbiosXG4qOjpiZWZvcmUsXG4qOjphZnRlciB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG5cblxuLy8gUm9vdFxuLy9cbi8vIEFiaWxpdHkgdG8gdGhlIHZhbHVlIG9mIHRoZSByb290IGZvbnQgc2l6ZXMsIGFmZmVjdGluZyB0aGUgdmFsdWUgb2YgYHJlbWAuXG4vLyBudWxsIGJ5IGRlZmF1bHQsIHRodXMgbm90aGluZyBpcyBnZW5lcmF0ZWQuXG5cbjpyb290IHtcbiAgQGlmICRmb250LXNpemUtcm9vdCAhPSBudWxsIHtcbiAgICBAaW5jbHVkZSBmb250LXNpemUodmFyKC0tI3skcHJlZml4fXJvb3QtZm9udC1zaXplKSk7XG4gIH1cblxuICBAaWYgJGVuYWJsZS1zbW9vdGgtc2Nyb2xsIHtcbiAgICBAbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IG5vLXByZWZlcmVuY2UpIHtcbiAgICAgIHNjcm9sbC1iZWhhdmlvcjogc21vb3RoO1xuICAgIH1cbiAgfVxufVxuXG5cbi8vIEJvZHlcbi8vXG4vLyAxLiBSZW1vdmUgdGhlIG1hcmdpbiBpbiBhbGwgYnJvd3NlcnMuXG4vLyAyLiBBcyBhIGJlc3QgcHJhY3RpY2UsIGFwcGx5IGEgZGVmYXVsdCBgYmFja2dyb3VuZC1jb2xvcmAuXG4vLyAzLiBQcmV2ZW50IGFkanVzdG1lbnRzIG9mIGZvbnQgc2l6ZSBhZnRlciBvcmllbnRhdGlvbiBjaGFuZ2VzIGluIGlPUy5cbi8vIDQuIENoYW5nZSB0aGUgZGVmYXVsdCB0YXAgaGlnaGxpZ2h0IHRvIGJlIGNvbXBsZXRlbHkgdHJhbnNwYXJlbnQgaW4gaU9TLlxuXG4vLyBzY3NzLWRvY3Mtc3RhcnQgcmVib290LWJvZHktcnVsZXNcbmJvZHkge1xuICBtYXJnaW46IDA7IC8vIDFcbiAgZm9udC1mYW1pbHk6IHZhcigtLSN7JHByZWZpeH1ib2R5LWZvbnQtZmFtaWx5KTtcbiAgQGluY2x1ZGUgZm9udC1zaXplKHZhcigtLSN7JHByZWZpeH1ib2R5LWZvbnQtc2l6ZSkpO1xuICBmb250LXdlaWdodDogdmFyKC0tI3skcHJlZml4fWJvZHktZm9udC13ZWlnaHQpO1xuICBsaW5lLWhlaWdodDogdmFyKC0tI3skcHJlZml4fWJvZHktbGluZS1oZWlnaHQpO1xuICBjb2xvcjogdmFyKC0tI3skcHJlZml4fWJvZHktY29sb3IpO1xuICB0ZXh0LWFsaWduOiB2YXIoLS0jeyRwcmVmaXh9Ym9keS10ZXh0LWFsaWduKTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tI3skcHJlZml4fWJvZHktYmcpOyAvLyAyXG4gIC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLy8gM1xuICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHJnYmEoJGJsYWNrLCAwKTsgLy8gNFxufVxuLy8gc2Nzcy1kb2NzLWVuZCByZWJvb3QtYm9keS1ydWxlc1xuXG5cbi8vIENvbnRlbnQgZ3JvdXBpbmdcbi8vXG4vLyAxLiBSZXNldCBGaXJlZm94J3MgZ3JheSBjb2xvclxuXG5ociB7XG4gIG1hcmdpbjogJGhyLW1hcmdpbi15IDA7XG4gIGNvbG9yOiAkaHItY29sb3I7IC8vIDFcbiAgYm9yZGVyOiAwO1xuICBib3JkZXItdG9wOiAkaHItYm9yZGVyLXdpZHRoIHNvbGlkICRoci1ib3JkZXItY29sb3I7XG4gIG9wYWNpdHk6ICRoci1vcGFjaXR5O1xufVxuXG5cbi8vIFR5cG9ncmFwaHlcbi8vXG4vLyAxLiBSZW1vdmUgdG9wIG1hcmdpbnMgZnJvbSBoZWFkaW5nc1xuLy8gICAgQnkgZGVmYXVsdCwgYDxoMT5gLWA8aDY+YCBhbGwgcmVjZWl2ZSB0b3AgYW5kIGJvdHRvbSBtYXJnaW5zLiBXZSBudWtlIHRoZSB0b3Bcbi8vICAgIG1hcmdpbiBmb3IgZWFzaWVyIGNvbnRyb2wgd2l0aGluIHR5cGUgc2NhbGVzIGFzIGl0IGF2b2lkcyBtYXJnaW4gY29sbGFwc2luZy5cblxuJWhlYWRpbmcge1xuICBtYXJnaW4tdG9wOiAwOyAvLyAxXG4gIG1hcmdpbi1ib3R0b206ICRoZWFkaW5ncy1tYXJnaW4tYm90dG9tO1xuICBmb250LWZhbWlseTogJGhlYWRpbmdzLWZvbnQtZmFtaWx5O1xuICBmb250LXN0eWxlOiAkaGVhZGluZ3MtZm9udC1zdHlsZTtcbiAgZm9udC13ZWlnaHQ6ICRoZWFkaW5ncy1mb250LXdlaWdodDtcbiAgbGluZS1oZWlnaHQ6ICRoZWFkaW5ncy1saW5lLWhlaWdodDtcbiAgY29sb3I6IHZhcigtLSN7JHByZWZpeH1oZWFkaW5nLWNvbG9yKTtcbn1cblxuaDEge1xuICBAZXh0ZW5kICVoZWFkaW5nO1xuICBAaW5jbHVkZSBmb250LXNpemUoJGgxLWZvbnQtc2l6ZSk7XG59XG5cbmgyIHtcbiAgQGV4dGVuZCAlaGVhZGluZztcbiAgQGluY2x1ZGUgZm9udC1zaXplKCRoMi1mb250LXNpemUpO1xufVxuXG5oMyB7XG4gIEBleHRlbmQgJWhlYWRpbmc7XG4gIEBpbmNsdWRlIGZvbnQtc2l6ZSgkaDMtZm9udC1zaXplKTtcbn1cblxuaDQge1xuICBAZXh0ZW5kICVoZWFkaW5nO1xuICBAaW5jbHVkZSBmb250LXNpemUoJGg0LWZvbnQtc2l6ZSk7XG59XG5cbmg1IHtcbiAgQGV4dGVuZCAlaGVhZGluZztcbiAgQGluY2x1ZGUgZm9udC1zaXplKCRoNS1mb250LXNpemUpO1xufVxuXG5oNiB7XG4gIEBleHRlbmQgJWhlYWRpbmc7XG4gIEBpbmNsdWRlIGZvbnQtc2l6ZSgkaDYtZm9udC1zaXplKTtcbn1cblxuXG4vLyBSZXNldCBtYXJnaW5zIG9uIHBhcmFncmFwaHNcbi8vXG4vLyBTaW1pbGFybHksIHRoZSB0b3AgbWFyZ2luIG9uIGA8cD5gcyBnZXQgcmVzZXQuIEhvd2V2ZXIsIHdlIGFsc28gcmVzZXQgdGhlXG4vLyBib3R0b20gbWFyZ2luIHRvIHVzZSBgcmVtYCB1bml0cyBpbnN0ZWFkIG9mIGBlbWAuXG5cbnAge1xuICBtYXJnaW4tdG9wOiAwO1xuICBtYXJnaW4tYm90dG9tOiAkcGFyYWdyYXBoLW1hcmdpbi1ib3R0b207XG59XG5cblxuLy8gQWJicmV2aWF0aW9uc1xuLy9cbi8vIDEuIEFkZCB0aGUgY29ycmVjdCB0ZXh0IGRlY29yYXRpb24gaW4gQ2hyb21lLCBFZGdlLCBPcGVyYSwgYW5kIFNhZmFyaS5cbi8vIDIuIEFkZCBleHBsaWNpdCBjdXJzb3IgdG8gaW5kaWNhdGUgY2hhbmdlZCBiZWhhdmlvci5cbi8vIDMuIFByZXZlbnQgdGhlIHRleHQtZGVjb3JhdGlvbiB0byBiZSBza2lwcGVkLlxuXG5hYmJyW3RpdGxlXSB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lIGRvdHRlZDsgLy8gMVxuICBjdXJzb3I6IGhlbHA7IC8vIDJcbiAgdGV4dC1kZWNvcmF0aW9uLXNraXAtaW5rOiBub25lOyAvLyAzXG59XG5cblxuLy8gQWRkcmVzc1xuXG5hZGRyZXNzIHtcbiAgbWFyZ2luLWJvdHRvbTogMXJlbTtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICBsaW5lLWhlaWdodDogaW5oZXJpdDtcbn1cblxuXG4vLyBMaXN0c1xuXG5vbCxcbnVsIHtcbiAgcGFkZGluZy1sZWZ0OiAycmVtO1xufVxuXG5vbCxcbnVsLFxuZGwge1xuICBtYXJnaW4tdG9wOiAwO1xuICBtYXJnaW4tYm90dG9tOiAxcmVtO1xufVxuXG5vbCBvbCxcbnVsIHVsLFxub2wgdWwsXG51bCBvbCB7XG4gIG1hcmdpbi1ib3R0b206IDA7XG59XG5cbmR0IHtcbiAgZm9udC13ZWlnaHQ6ICRkdC1mb250LXdlaWdodDtcbn1cblxuLy8gMS4gVW5kbyBicm93c2VyIGRlZmF1bHRcblxuZGQge1xuICBtYXJnaW4tYm90dG9tOiAuNXJlbTtcbiAgbWFyZ2luLWxlZnQ6IDA7IC8vIDFcbn1cblxuXG4vLyBCbG9ja3F1b3RlXG5cbmJsb2NrcXVvdGUge1xuICBtYXJnaW46IDAgMCAxcmVtO1xufVxuXG5cbi8vIFN0cm9uZ1xuLy9cbi8vIEFkZCB0aGUgY29ycmVjdCBmb250IHdlaWdodCBpbiBDaHJvbWUsIEVkZ2UsIGFuZCBTYWZhcmlcblxuYixcbnN0cm9uZyB7XG4gIGZvbnQtd2VpZ2h0OiAkZm9udC13ZWlnaHQtYm9sZGVyO1xufVxuXG5cbi8vIFNtYWxsXG4vL1xuLy8gQWRkIHRoZSBjb3JyZWN0IGZvbnQgc2l6ZSBpbiBhbGwgYnJvd3NlcnNcblxuc21hbGwge1xuICBAaW5jbHVkZSBmb250LXNpemUoJHNtYWxsLWZvbnQtc2l6ZSk7XG59XG5cblxuLy8gTWFya1xuXG5tYXJrIHtcbiAgcGFkZGluZzogJG1hcmstcGFkZGluZztcbiAgY29sb3I6IHZhcigtLSN7JHByZWZpeH1oaWdobGlnaHQtY29sb3IpO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS0jeyRwcmVmaXh9aGlnaGxpZ2h0LWJnKTtcbn1cblxuXG4vLyBTdWIgYW5kIFN1cFxuLy9cbi8vIFByZXZlbnQgYHN1YmAgYW5kIGBzdXBgIGVsZW1lbnRzIGZyb20gYWZmZWN0aW5nIHRoZSBsaW5lIGhlaWdodCBpblxuLy8gYWxsIGJyb3dzZXJzLlxuXG5zdWIsXG5zdXAge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIEBpbmNsdWRlIGZvbnQtc2l6ZSgkc3ViLXN1cC1mb250LXNpemUpO1xuICBsaW5lLWhlaWdodDogMDtcbiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xufVxuXG5zdWIgeyBib3R0b206IC0uMjVlbTsgfVxuc3VwIHsgdG9wOiAtLjVlbTsgfVxuXG5cbi8vIExpbmtzXG5cbmEge1xuICBjb2xvcjogcmdiYSh2YXIoLS0jeyRwcmVmaXh9bGluay1jb2xvci1yZ2IpLCB2YXIoLS0jeyRwcmVmaXh9bGluay1vcGFjaXR5LCAxKSk7XG4gIHRleHQtZGVjb3JhdGlvbjogJGxpbmstZGVjb3JhdGlvbjtcblxuICAmOmhvdmVyIHtcbiAgICAtLSN7JHByZWZpeH1saW5rLWNvbG9yLXJnYjogdmFyKC0tI3skcHJlZml4fWxpbmstaG92ZXItY29sb3ItcmdiKTtcbiAgICB0ZXh0LWRlY29yYXRpb246ICRsaW5rLWhvdmVyLWRlY29yYXRpb247XG4gIH1cbn1cblxuLy8gQW5kIHVuZG8gdGhlc2Ugc3R5bGVzIGZvciBwbGFjZWhvbGRlciBsaW5rcy9uYW1lZCBhbmNob3JzICh3aXRob3V0IGhyZWYpLlxuLy8gSXQgd291bGQgYmUgbW9yZSBzdHJhaWdodGZvcndhcmQgdG8ganVzdCB1c2UgYVtocmVmXSBpbiBwcmV2aW91cyBibG9jaywgYnV0IHRoYXRcbi8vIGNhdXNlcyBzcGVjaWZpY2l0eSBpc3N1ZXMgaW4gbWFueSBvdGhlciBzdHlsZXMgdGhhdCBhcmUgdG9vIGNvbXBsZXggdG8gZml4LlxuLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9pc3N1ZXMvMTk0MDJcblxuYTpub3QoW2hyZWZdKTpub3QoW2NsYXNzXSkge1xuICAmLFxuICAmOmhvdmVyIHtcbiAgICBjb2xvcjogaW5oZXJpdDtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIH1cbn1cblxuXG4vLyBDb2RlXG5cbnByZSxcbmNvZGUsXG5rYmQsXG5zYW1wIHtcbiAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1jb2RlO1xuICBAaW5jbHVkZSBmb250LXNpemUoMWVtKTsgLy8gQ29ycmVjdCB0aGUgb2RkIGBlbWAgZm9udCBzaXppbmcgaW4gYWxsIGJyb3dzZXJzLlxufVxuXG4vLyAxLiBSZW1vdmUgYnJvd3NlciBkZWZhdWx0IHRvcCBtYXJnaW5cbi8vIDIuIFJlc2V0IGJyb3dzZXIgZGVmYXVsdCBvZiBgMWVtYCB0byB1c2UgYHJlbWBzXG4vLyAzLiBEb24ndCBhbGxvdyBjb250ZW50IHRvIGJyZWFrIG91dHNpZGVcblxucHJlIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG1hcmdpbi10b3A6IDA7IC8vIDFcbiAgbWFyZ2luLWJvdHRvbTogMXJlbTsgLy8gMlxuICBvdmVyZmxvdzogYXV0bzsgLy8gM1xuICBAaW5jbHVkZSBmb250LXNpemUoJGNvZGUtZm9udC1zaXplKTtcbiAgY29sb3I6ICRwcmUtY29sb3I7XG5cbiAgLy8gQWNjb3VudCBmb3Igc29tZSBjb2RlIG91dHB1dHMgdGhhdCBwbGFjZSBjb2RlIHRhZ3MgaW4gcHJlIHRhZ3NcbiAgY29kZSB7XG4gICAgQGluY2x1ZGUgZm9udC1zaXplKGluaGVyaXQpO1xuICAgIGNvbG9yOiBpbmhlcml0O1xuICAgIHdvcmQtYnJlYWs6IG5vcm1hbDtcbiAgfVxufVxuXG5jb2RlIHtcbiAgQGluY2x1ZGUgZm9udC1zaXplKCRjb2RlLWZvbnQtc2l6ZSk7XG4gIGNvbG9yOiB2YXIoLS0jeyRwcmVmaXh9Y29kZS1jb2xvcik7XG4gIHdvcmQtd3JhcDogYnJlYWstd29yZDtcblxuICAvLyBTdHJlYW1saW5lIHRoZSBzdHlsZSB3aGVuIGluc2lkZSBhbmNob3JzIHRvIGF2b2lkIGJyb2tlbiB1bmRlcmxpbmUgYW5kIG1vcmVcbiAgYSA+ICYge1xuICAgIGNvbG9yOiBpbmhlcml0O1xuICB9XG59XG5cbmtiZCB7XG4gIHBhZGRpbmc6ICRrYmQtcGFkZGluZy15ICRrYmQtcGFkZGluZy14O1xuICBAaW5jbHVkZSBmb250LXNpemUoJGtiZC1mb250LXNpemUpO1xuICBjb2xvcjogJGtiZC1jb2xvcjtcbiAgYmFja2dyb3VuZC1jb2xvcjogJGtiZC1iZztcbiAgQGluY2x1ZGUgYm9yZGVyLXJhZGl1cygkYm9yZGVyLXJhZGl1cy1zbSk7XG5cbiAga2JkIHtcbiAgICBwYWRkaW5nOiAwO1xuICAgIEBpbmNsdWRlIGZvbnQtc2l6ZSgxZW0pO1xuICAgIGZvbnQtd2VpZ2h0OiAkbmVzdGVkLWtiZC1mb250LXdlaWdodDtcbiAgfVxufVxuXG5cbi8vIEZpZ3VyZXNcbi8vXG4vLyBBcHBseSBhIGNvbnNpc3RlbnQgbWFyZ2luIHN0cmF0ZWd5IChtYXRjaGVzIG91ciB0eXBlIHN0eWxlcykuXG5cbmZpZ3VyZSB7XG4gIG1hcmdpbjogMCAwIDFyZW07XG59XG5cblxuLy8gSW1hZ2VzIGFuZCBjb250ZW50XG5cbmltZyxcbnN2ZyB7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG5cblxuLy8gVGFibGVzXG4vL1xuLy8gUHJldmVudCBkb3VibGUgYm9yZGVyc1xuXG50YWJsZSB7XG4gIGNhcHRpb24tc2lkZTogYm90dG9tO1xuICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xufVxuXG5jYXB0aW9uIHtcbiAgcGFkZGluZy10b3A6ICR0YWJsZS1jZWxsLXBhZGRpbmcteTtcbiAgcGFkZGluZy1ib3R0b206ICR0YWJsZS1jZWxsLXBhZGRpbmcteTtcbiAgY29sb3I6ICR0YWJsZS1jYXB0aW9uLWNvbG9yO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xufVxuXG4vLyAxLiBSZW1vdmVzIGZvbnQtd2VpZ2h0IGJvbGQgYnkgaW5oZXJpdGluZ1xuLy8gMi4gTWF0Y2hlcyBkZWZhdWx0IGA8dGQ+YCBhbGlnbm1lbnQgYnkgaW5oZXJpdGluZyBgdGV4dC1hbGlnbmAuXG4vLyAzLiBGaXggYWxpZ25tZW50IGZvciBTYWZhcmlcblxudGgge1xuICBmb250LXdlaWdodDogJHRhYmxlLXRoLWZvbnQtd2VpZ2h0OyAvLyAxXG4gIHRleHQtYWxpZ246IGluaGVyaXQ7IC8vIDJcbiAgdGV4dC1hbGlnbjogLXdlYmtpdC1tYXRjaC1wYXJlbnQ7IC8vIDNcbn1cblxudGhlYWQsXG50Ym9keSxcbnRmb290LFxudHIsXG50ZCxcbnRoIHtcbiAgYm9yZGVyLWNvbG9yOiBpbmhlcml0O1xuICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICBib3JkZXItd2lkdGg6IDA7XG59XG5cblxuLy8gRm9ybXNcbi8vXG4vLyAxLiBBbGxvdyBsYWJlbHMgdG8gdXNlIGBtYXJnaW5gIGZvciBzcGFjaW5nLlxuXG5sYWJlbCB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jazsgLy8gMVxufVxuXG4vLyBSZW1vdmUgdGhlIGRlZmF1bHQgYGJvcmRlci1yYWRpdXNgIHRoYXQgbWFjT1MgQ2hyb21lIGFkZHMuXG4vLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2lzc3Vlcy8yNDA5M1xuXG5idXR0b24ge1xuICAvLyBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJvcGVydHktZGlzYWxsb3dlZC1saXN0XG4gIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbi8vIEV4cGxpY2l0bHkgcmVtb3ZlIGZvY3VzIG91dGxpbmUgaW4gQ2hyb21pdW0gd2hlbiBpdCBzaG91bGRuJ3QgYmVcbi8vIHZpc2libGUgKGUuZy4gYXMgcmVzdWx0IG9mIG1vdXNlIGNsaWNrIG9yIHRvdWNoIHRhcCkuIEl0IGFscmVhZHlcbi8vIHNob3VsZCBiZSBkb2luZyB0aGlzIGF1dG9tYXRpY2FsbHksIGJ1dCBzZWVtcyB0byBjdXJyZW50bHkgYmVcbi8vIGNvbmZ1c2VkIGFuZCBhcHBsaWVzIGl0cyB2ZXJ5IHZpc2libGUgdHdvLXRvbmUgb3V0bGluZSBhbnl3YXkuXG5cbmJ1dHRvbjpmb2N1czpub3QoOmZvY3VzLXZpc2libGUpIHtcbiAgb3V0bGluZTogMDtcbn1cblxuLy8gMS4gUmVtb3ZlIHRoZSBtYXJnaW4gaW4gRmlyZWZveCBhbmQgU2FmYXJpXG5cbmlucHV0LFxuYnV0dG9uLFxuc2VsZWN0LFxub3B0Z3JvdXAsXG50ZXh0YXJlYSB7XG4gIG1hcmdpbjogMDsgLy8gMVxuICBmb250LWZhbWlseTogaW5oZXJpdDtcbiAgQGluY2x1ZGUgZm9udC1zaXplKGluaGVyaXQpO1xuICBsaW5lLWhlaWdodDogaW5oZXJpdDtcbn1cblxuLy8gUmVtb3ZlIHRoZSBpbmhlcml0YW5jZSBvZiB0ZXh0IHRyYW5zZm9ybSBpbiBGaXJlZm94XG5idXR0b24sXG5zZWxlY3Qge1xuICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcbn1cbi8vIFNldCB0aGUgY3Vyc29yIGZvciBub24tYDxidXR0b24+YCBidXR0b25zXG4vL1xuLy8gRGV0YWlscyBhdCBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvcHVsbC8zMDU2MlxuW3JvbGU9XCJidXR0b25cIl0ge1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbnNlbGVjdCB7XG4gIC8vIFJlbW92ZSB0aGUgaW5oZXJpdGFuY2Ugb2Ygd29yZC13cmFwIGluIFNhZmFyaS5cbiAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9pc3N1ZXMvMjQ5OTBcbiAgd29yZC13cmFwOiBub3JtYWw7XG5cbiAgLy8gVW5kbyB0aGUgb3BhY2l0eSBjaGFuZ2UgZnJvbSBDaHJvbWVcbiAgJjpkaXNhYmxlZCB7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxufVxuXG4vLyBSZW1vdmUgdGhlIGRyb3Bkb3duIGFycm93IG9ubHkgZnJvbSB0ZXh0IHR5cGUgaW5wdXRzIGJ1aWx0IHdpdGggZGF0YWxpc3RzIGluIENocm9tZS5cbi8vIFNlZSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNTQ5OTcxMThcblxuW2xpc3RdOm5vdChbdHlwZT1cImRhdGVcIl0pOm5vdChbdHlwZT1cImRhdGV0aW1lLWxvY2FsXCJdKTpub3QoW3R5cGU9XCJtb250aFwiXSk6bm90KFt0eXBlPVwid2Vla1wiXSk6bm90KFt0eXBlPVwidGltZVwiXSk6Oi13ZWJraXQtY2FsZW5kYXItcGlja2VyLWluZGljYXRvciB7XG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbn1cblxuLy8gMS4gUHJldmVudCBhIFdlYktpdCBidWcgd2hlcmUgKDIpIGRlc3Ryb3lzIG5hdGl2ZSBgYXVkaW9gIGFuZCBgdmlkZW9gXG4vLyAgICBjb250cm9scyBpbiBBbmRyb2lkIDQuXG4vLyAyLiBDb3JyZWN0IHRoZSBpbmFiaWxpdHkgdG8gc3R5bGUgY2xpY2thYmxlIHR5cGVzIGluIGlPUyBhbmQgU2FmYXJpLlxuLy8gMy4gT3BpbmlvbmF0ZWQ6IGFkZCBcImhhbmRcIiBjdXJzb3IgdG8gbm9uLWRpc2FibGVkIGJ1dHRvbiBlbGVtZW50cy5cblxuYnV0dG9uLFxuW3R5cGU9XCJidXR0b25cIl0sIC8vIDFcblt0eXBlPVwicmVzZXRcIl0sXG5bdHlwZT1cInN1Ym1pdFwiXSB7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogYnV0dG9uOyAvLyAyXG5cbiAgQGlmICRlbmFibGUtYnV0dG9uLXBvaW50ZXJzIHtcbiAgICAmOm5vdCg6ZGlzYWJsZWQpIHtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjsgLy8gM1xuICAgIH1cbiAgfVxufVxuXG4vLyBSZW1vdmUgaW5uZXIgYm9yZGVyIGFuZCBwYWRkaW5nIGZyb20gRmlyZWZveCwgYnV0IGRvbid0IHJlc3RvcmUgdGhlIG91dGxpbmUgbGlrZSBOb3JtYWxpemUuXG5cbjo6LW1vei1mb2N1cy1pbm5lciB7XG4gIHBhZGRpbmc6IDA7XG4gIGJvcmRlci1zdHlsZTogbm9uZTtcbn1cblxuLy8gMS4gVGV4dGFyZWFzIHNob3VsZCByZWFsbHkgb25seSByZXNpemUgdmVydGljYWxseSBzbyB0aGV5IGRvbid0IGJyZWFrIHRoZWlyIChob3Jpem9udGFsKSBjb250YWluZXJzLlxuXG50ZXh0YXJlYSB7XG4gIHJlc2l6ZTogdmVydGljYWw7IC8vIDFcbn1cblxuLy8gMS4gQnJvd3NlcnMgc2V0IGEgZGVmYXVsdCBgbWluLXdpZHRoOiBtaW4tY29udGVudDtgIG9uIGZpZWxkc2V0cyxcbi8vICAgIHVubGlrZSBlLmcuIGA8ZGl2PmBzLCB3aGljaCBoYXZlIGBtaW4td2lkdGg6IDA7YCBieSBkZWZhdWx0LlxuLy8gICAgU28gd2UgcmVzZXQgdGhhdCB0byBlbnN1cmUgZmllbGRzZXRzIGJlaGF2ZSBtb3JlIGxpa2UgYSBzdGFuZGFyZCBibG9jayBlbGVtZW50LlxuLy8gICAgU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9pc3N1ZXMvMTIzNTlcbi8vICAgIGFuZCBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS8jdGhlLWZpZWxkc2V0LWFuZC1sZWdlbmQtZWxlbWVudHNcbi8vIDIuIFJlc2V0IHRoZSBkZWZhdWx0IG91dGxpbmUgYmVoYXZpb3Igb2YgZmllbGRzZXRzIHNvIHRoZXkgZG9uJ3QgYWZmZWN0IHBhZ2UgbGF5b3V0LlxuXG5maWVsZHNldCB7XG4gIG1pbi13aWR0aDogMDsgLy8gMVxuICBwYWRkaW5nOiAwOyAvLyAyXG4gIG1hcmdpbjogMDsgLy8gMlxuICBib3JkZXI6IDA7IC8vIDJcbn1cblxuLy8gMS4gQnkgdXNpbmcgYGZsb2F0OiBsZWZ0YCwgdGhlIGxlZ2VuZCB3aWxsIGJlaGF2ZSBsaWtlIGEgYmxvY2sgZWxlbWVudC5cbi8vICAgIFRoaXMgd2F5IHRoZSBib3JkZXIgb2YgYSBmaWVsZHNldCB3cmFwcyBhcm91bmQgdGhlIGxlZ2VuZCBpZiBwcmVzZW50LlxuLy8gMi4gRml4IHdyYXBwaW5nIGJ1Zy5cbi8vICAgIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvaXNzdWVzLzI5NzEyXG5cbmxlZ2VuZCB7XG4gIGZsb2F0OiBsZWZ0OyAvLyAxXG4gIHdpZHRoOiAxMDAlO1xuICBwYWRkaW5nOiAwO1xuICBtYXJnaW4tYm90dG9tOiAkbGVnZW5kLW1hcmdpbi1ib3R0b207XG4gIEBpbmNsdWRlIGZvbnQtc2l6ZSgkbGVnZW5kLWZvbnQtc2l6ZSk7XG4gIGZvbnQtd2VpZ2h0OiAkbGVnZW5kLWZvbnQtd2VpZ2h0O1xuICBsaW5lLWhlaWdodDogaW5oZXJpdDtcblxuICArICoge1xuICAgIGNsZWFyOiBsZWZ0OyAvLyAyXG4gIH1cbn1cblxuLy8gRml4IGhlaWdodCBvZiBpbnB1dHMgd2l0aCBhIHR5cGUgb2YgZGF0ZXRpbWUtbG9jYWwsIGRhdGUsIG1vbnRoLCB3ZWVrLCBvciB0aW1lXG4vLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2lzc3Vlcy8xODg0MlxuXG46Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1maWVsZHMtd3JhcHBlcixcbjo6LXdlYmtpdC1kYXRldGltZS1lZGl0LXRleHQsXG46Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1taW51dGUsXG46Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1ob3VyLWZpZWxkLFxuOjotd2Via2l0LWRhdGV0aW1lLWVkaXQtZGF5LWZpZWxkLFxuOjotd2Via2l0LWRhdGV0aW1lLWVkaXQtbW9udGgtZmllbGQsXG46Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC15ZWFyLWZpZWxkIHtcbiAgcGFkZGluZzogMDtcbn1cblxuOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uIHtcbiAgaGVpZ2h0OiBhdXRvO1xufVxuXG4vLyAxLiBUaGlzIG92ZXJyaWRlcyB0aGUgZXh0cmEgcm91bmRlZCBjb3JuZXJzIG9uIHNlYXJjaCBpbnB1dHMgaW4gaU9TIHNvIHRoYXQgb3VyXG4vLyAgICBgLmZvcm0tY29udHJvbGAgY2xhc3MgY2FuIHByb3Blcmx5IHN0eWxlIHRoZW0uIE5vdGUgdGhhdCB0aGlzIGNhbm5vdCBzaW1wbHlcbi8vICAgIGJlIGFkZGVkIHRvIGAuZm9ybS1jb250cm9sYCBhcyBpdCdzIG5vdCBzcGVjaWZpYyBlbm91Z2guIEZvciBkZXRhaWxzLCBzZWVcbi8vICAgIGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9pc3N1ZXMvMTE1ODYuXG4vLyAyLiBDb3JyZWN0IHRoZSBvdXRsaW5lIHN0eWxlIGluIFNhZmFyaS5cblxuW3R5cGU9XCJzZWFyY2hcIl0ge1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IHRleHRmaWVsZDsgLy8gMVxuICBvdXRsaW5lLW9mZnNldDogLTJweDsgLy8gMlxufVxuXG4vLyAxLiBBIGZldyBpbnB1dCB0eXBlcyBzaG91bGQgc3RheSBMVFJcbi8vIFNlZSBodHRwczovL3J0bHN0eWxpbmcuY29tL3Bvc3RzL3J0bC1zdHlsaW5nI2Zvcm0taW5wdXRzXG4vLyAyLiBSVEwgb25seSBvdXRwdXRcbi8vIFNlZSBodHRwczovL3J0bGNzcy5jb20vbGVhcm4vdXNhZ2UtZ3VpZGUvY29udHJvbC1kaXJlY3RpdmVzLyNyYXdcblxuLyogcnRsOnJhdzpcblt0eXBlPVwidGVsXCJdLFxuW3R5cGU9XCJ1cmxcIl0sXG5bdHlwZT1cImVtYWlsXCJdLFxuW3R5cGU9XCJudW1iZXJcIl0ge1xuICBkaXJlY3Rpb246IGx0cjtcbn1cbiovXG5cbi8vIFJlbW92ZSB0aGUgaW5uZXIgcGFkZGluZyBpbiBDaHJvbWUgYW5kIFNhZmFyaSBvbiBtYWNPUy5cblxuOjotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uIHtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xufVxuXG4vLyBSZW1vdmUgcGFkZGluZyBhcm91bmQgY29sb3IgcGlja2VycyBpbiB3ZWJraXQgYnJvd3NlcnNcblxuOjotd2Via2l0LWNvbG9yLXN3YXRjaC13cmFwcGVyIHtcbiAgcGFkZGluZzogMDtcbn1cblxuXG4vLyAxLiBJbmhlcml0IGZvbnQgZmFtaWx5IGFuZCBsaW5lIGhlaWdodCBmb3IgZmlsZSBpbnB1dCBidXR0b25zXG4vLyAyLiBDb3JyZWN0IHRoZSBpbmFiaWxpdHkgdG8gc3R5bGUgY2xpY2thYmxlIHR5cGVzIGluIGlPUyBhbmQgU2FmYXJpLlxuXG46OmZpbGUtc2VsZWN0b3ItYnV0dG9uIHtcbiAgZm9udDogaW5oZXJpdDsgLy8gMVxuICAtd2Via2l0LWFwcGVhcmFuY2U6IGJ1dHRvbjsgLy8gMlxufVxuXG4vLyBDb3JyZWN0IGVsZW1lbnQgZGlzcGxheXNcblxub3V0cHV0IHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuXG4vLyBSZW1vdmUgYm9yZGVyIGZyb20gaWZyYW1lXG5cbmlmcmFtZSB7XG4gIGJvcmRlcjogMDtcbn1cblxuLy8gU3VtbWFyeVxuLy9cbi8vIDEuIEFkZCB0aGUgY29ycmVjdCBkaXNwbGF5IGluIGFsbCBicm93c2Vyc1xuXG5zdW1tYXJ5IHtcbiAgZGlzcGxheTogbGlzdC1pdGVtOyAvLyAxXG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuXG4vLyBQcm9ncmVzc1xuLy9cbi8vIEFkZCB0aGUgY29ycmVjdCB2ZXJ0aWNhbCBhbGlnbm1lbnQgaW4gQ2hyb21lLCBGaXJlZm94LCBhbmQgT3BlcmEuXG5cbnByb2dyZXNzIHtcbiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xufVxuXG5cbi8vIEhpZGRlbiBhdHRyaWJ1dGVcbi8vXG4vLyBBbHdheXMgaGlkZSBhbiBlbGVtZW50IHdpdGggdGhlIGBoaWRkZW5gIEhUTUwgYXR0cmlidXRlLlxuXG5baGlkZGVuXSB7XG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbn1cbiIsIi8vIFZhcmlhYmxlc1xuLy9cbi8vIFZhcmlhYmxlcyBzaG91bGQgZm9sbG93IHRoZSBgJGNvbXBvbmVudC1zdGF0ZS1wcm9wZXJ0eS1zaXplYCBmb3JtdWxhIGZvclxuLy8gY29uc2lzdGVudCBuYW1pbmcuIEV4OiAkbmF2LWxpbmstZGlzYWJsZWQtY29sb3IgYW5kICRtb2RhbC1jb250ZW50LWJveC1zaGFkb3cteHMuXG5cbi8vIENvbG9yIHN5c3RlbVxuXG4vLyBzY3NzLWRvY3Mtc3RhcnQgZ3JheS1jb2xvci12YXJpYWJsZXNcbiR3aGl0ZTogICAgI2ZmZiAhZGVmYXVsdDtcbiRncmF5LTEwMDogI2Y4ZjlmYSAhZGVmYXVsdDtcbiRncmF5LTIwMDogI2U5ZWNlZiAhZGVmYXVsdDtcbiRncmF5LTMwMDogI2RlZTJlNiAhZGVmYXVsdDtcbiRncmF5LTQwMDogI2NlZDRkYSAhZGVmYXVsdDtcbiRncmF5LTUwMDogI2FkYjViZCAhZGVmYXVsdDtcbiRncmF5LTYwMDogIzZjNzU3ZCAhZGVmYXVsdDtcbiRncmF5LTcwMDogIzQ5NTA1NyAhZGVmYXVsdDtcbiRncmF5LTgwMDogIzM0M2E0MCAhZGVmYXVsdDtcbiRncmF5LTkwMDogIzIxMjUyOSAhZGVmYXVsdDtcbiRibGFjazogICAgIzAwMCAhZGVmYXVsdDtcbi8vIHNjc3MtZG9jcy1lbmQgZ3JheS1jb2xvci12YXJpYWJsZXNcblxuLy8gZnVzdi1kaXNhYmxlXG4vLyBzY3NzLWRvY3Mtc3RhcnQgZ3JheS1jb2xvcnMtbWFwXG4kZ3JheXM6IChcbiAgXCIxMDBcIjogJGdyYXktMTAwLFxuICBcIjIwMFwiOiAkZ3JheS0yMDAsXG4gIFwiMzAwXCI6ICRncmF5LTMwMCxcbiAgXCI0MDBcIjogJGdyYXktNDAwLFxuICBcIjUwMFwiOiAkZ3JheS01MDAsXG4gIFwiNjAwXCI6ICRncmF5LTYwMCxcbiAgXCI3MDBcIjogJGdyYXktNzAwLFxuICBcIjgwMFwiOiAkZ3JheS04MDAsXG4gIFwiOTAwXCI6ICRncmF5LTkwMFxuKSAhZGVmYXVsdDtcbi8vIHNjc3MtZG9jcy1lbmQgZ3JheS1jb2xvcnMtbWFwXG4vLyBmdXN2LWVuYWJsZVxuXG4vLyBzY3NzLWRvY3Mtc3RhcnQgY29sb3ItdmFyaWFibGVzXG4kYmx1ZTogICAgIzBkNmVmZCAhZGVmYXVsdDtcbiRpbmRpZ286ICAjNjYxMGYyICFkZWZhdWx0O1xuJHB1cnBsZTogICM2ZjQyYzEgIWRlZmF1bHQ7XG4kcGluazogICAgI2Q2MzM4NCAhZGVmYXVsdDtcbiRyZWQ6ICAgICAjZGMzNTQ1ICFkZWZhdWx0O1xuJG9yYW5nZTogICNmZDdlMTQgIWRlZmF1bHQ7XG4keWVsbG93OiAgI2ZmYzEwNyAhZGVmYXVsdDtcbiRncmVlbjogICAjMTk4NzU0ICFkZWZhdWx0O1xuJHRlYWw6ICAgICMyMGM5OTcgIWRlZmF1bHQ7XG4kY3lhbjogICAgIzBkY2FmMCAhZGVmYXVsdDtcbi8vIHNjc3MtZG9jcy1lbmQgY29sb3ItdmFyaWFibGVzXG5cbi8vIHNjc3MtZG9jcy1zdGFydCBjb2xvcnMtbWFwXG4kY29sb3JzOiAoXG4gIFwiYmx1ZVwiOiAgICAgICAkYmx1ZSxcbiAgXCJpbmRpZ29cIjogICAgICRpbmRpZ28sXG4gIFwicHVycGxlXCI6ICAgICAkcHVycGxlLFxuICBcInBpbmtcIjogICAgICAgJHBpbmssXG4gIFwicmVkXCI6ICAgICAgICAkcmVkLFxuICBcIm9yYW5nZVwiOiAgICAgJG9yYW5nZSxcbiAgXCJ5ZWxsb3dcIjogICAgICR5ZWxsb3csXG4gIFwiZ3JlZW5cIjogICAgICAkZ3JlZW4sXG4gIFwidGVhbFwiOiAgICAgICAkdGVhbCxcbiAgXCJjeWFuXCI6ICAgICAgICRjeWFuLFxuICBcImJsYWNrXCI6ICAgICAgJGJsYWNrLFxuICBcIndoaXRlXCI6ICAgICAgJHdoaXRlLFxuICBcImdyYXlcIjogICAgICAgJGdyYXktNjAwLFxuICBcImdyYXktZGFya1wiOiAgJGdyYXktODAwXG4pICFkZWZhdWx0O1xuLy8gc2Nzcy1kb2NzLWVuZCBjb2xvcnMtbWFwXG5cbi8vIFRoZSBjb250cmFzdCByYXRpbyB0byByZWFjaCBhZ2FpbnN0IHdoaXRlLCB0byBkZXRlcm1pbmUgaWYgY29sb3IgY2hhbmdlcyBmcm9tIFwibGlnaHRcIiB0byBcImRhcmtcIi4gQWNjZXB0YWJsZSB2YWx1ZXMgZm9yIFdDQUcgMi4wIGFyZSAzLCA0LjUgYW5kIDcuXG4vLyBTZWUgaHR0cHM6Ly93d3cudzMub3JnL1RSL1dDQUcyMC8jdmlzdWFsLWF1ZGlvLWNvbnRyYXN0LWNvbnRyYXN0XG4kbWluLWNvbnRyYXN0LXJhdGlvOiAgIDQuNSAhZGVmYXVsdDtcblxuLy8gQ3VzdG9taXplIHRoZSBsaWdodCBhbmQgZGFyayB0ZXh0IGNvbG9ycyBmb3IgdXNlIGluIG91ciBjb2xvciBjb250cmFzdCBmdW5jdGlvbi5cbiRjb2xvci1jb250cmFzdC1kYXJrOiAgICAgICRibGFjayAhZGVmYXVsdDtcbiRjb2xvci1jb250cmFzdC1saWdodDogICAgICR3aGl0ZSAhZGVmYXVsdDtcblxuLy8gZnVzdi1kaXNhYmxlXG4kYmx1ZS0xMDA6IHRpbnQtY29sb3IoJGJsdWUsIDgwJSkgIWRlZmF1bHQ7XG4kYmx1ZS0yMDA6IHRpbnQtY29sb3IoJGJsdWUsIDYwJSkgIWRlZmF1bHQ7XG4kYmx1ZS0zMDA6IHRpbnQtY29sb3IoJGJsdWUsIDQwJSkgIWRlZmF1bHQ7XG4kYmx1ZS00MDA6IHRpbnQtY29sb3IoJGJsdWUsIDIwJSkgIWRlZmF1bHQ7XG4kYmx1ZS01MDA6ICRibHVlICFkZWZhdWx0O1xuJGJsdWUtNjAwOiBzaGFkZS1jb2xvcigkYmx1ZSwgMjAlKSAhZGVmYXVsdDtcbiRibHVlLTcwMDogc2hhZGUtY29sb3IoJGJsdWUsIDQwJSkgIWRlZmF1bHQ7XG4kYmx1ZS04MDA6IHNoYWRlLWNvbG9yKCRibHVlLCA2MCUpICFkZWZhdWx0O1xuJGJsdWUtOTAwOiBzaGFkZS1jb2xvcigkYmx1ZSwgODAlKSAhZGVmYXVsdDtcblxuJGluZGlnby0xMDA6IHRpbnQtY29sb3IoJGluZGlnbywgODAlKSAhZGVmYXVsdDtcbiRpbmRpZ28tMjAwOiB0aW50LWNvbG9yKCRpbmRpZ28sIDYwJSkgIWRlZmF1bHQ7XG4kaW5kaWdvLTMwMDogdGludC1jb2xvcigkaW5kaWdvLCA0MCUpICFkZWZhdWx0O1xuJGluZGlnby00MDA6IHRpbnQtY29sb3IoJGluZGlnbywgMjAlKSAhZGVmYXVsdDtcbiRpbmRpZ28tNTAwOiAkaW5kaWdvICFkZWZhdWx0O1xuJGluZGlnby02MDA6IHNoYWRlLWNvbG9yKCRpbmRpZ28sIDIwJSkgIWRlZmF1bHQ7XG4kaW5kaWdvLTcwMDogc2hhZGUtY29sb3IoJGluZGlnbywgNDAlKSAhZGVmYXVsdDtcbiRpbmRpZ28tODAwOiBzaGFkZS1jb2xvcigkaW5kaWdvLCA2MCUpICFkZWZhdWx0O1xuJGluZGlnby05MDA6IHNoYWRlLWNvbG9yKCRpbmRpZ28sIDgwJSkgIWRlZmF1bHQ7XG5cbiRwdXJwbGUtMTAwOiB0aW50LWNvbG9yKCRwdXJwbGUsIDgwJSkgIWRlZmF1bHQ7XG4kcHVycGxlLTIwMDogdGludC1jb2xvcigkcHVycGxlLCA2MCUpICFkZWZhdWx0O1xuJHB1cnBsZS0zMDA6IHRpbnQtY29sb3IoJHB1cnBsZSwgNDAlKSAhZGVmYXVsdDtcbiRwdXJwbGUtNDAwOiB0aW50LWNvbG9yKCRwdXJwbGUsIDIwJSkgIWRlZmF1bHQ7XG4kcHVycGxlLTUwMDogJHB1cnBsZSAhZGVmYXVsdDtcbiRwdXJwbGUtNjAwOiBzaGFkZS1jb2xvcigkcHVycGxlLCAyMCUpICFkZWZhdWx0O1xuJHB1cnBsZS03MDA6IHNoYWRlLWNvbG9yKCRwdXJwbGUsIDQwJSkgIWRlZmF1bHQ7XG4kcHVycGxlLTgwMDogc2hhZGUtY29sb3IoJHB1cnBsZSwgNjAlKSAhZGVmYXVsdDtcbiRwdXJwbGUtOTAwOiBzaGFkZS1jb2xvcigkcHVycGxlLCA4MCUpICFkZWZhdWx0O1xuXG4kcGluay0xMDA6IHRpbnQtY29sb3IoJHBpbmssIDgwJSkgIWRlZmF1bHQ7XG4kcGluay0yMDA6IHRpbnQtY29sb3IoJHBpbmssIDYwJSkgIWRlZmF1bHQ7XG4kcGluay0zMDA6IHRpbnQtY29sb3IoJHBpbmssIDQwJSkgIWRlZmF1bHQ7XG4kcGluay00MDA6IHRpbnQtY29sb3IoJHBpbmssIDIwJSkgIWRlZmF1bHQ7XG4kcGluay01MDA6ICRwaW5rICFkZWZhdWx0O1xuJHBpbmstNjAwOiBzaGFkZS1jb2xvcigkcGluaywgMjAlKSAhZGVmYXVsdDtcbiRwaW5rLTcwMDogc2hhZGUtY29sb3IoJHBpbmssIDQwJSkgIWRlZmF1bHQ7XG4kcGluay04MDA6IHNoYWRlLWNvbG9yKCRwaW5rLCA2MCUpICFkZWZhdWx0O1xuJHBpbmstOTAwOiBzaGFkZS1jb2xvcigkcGluaywgODAlKSAhZGVmYXVsdDtcblxuJHJlZC0xMDA6IHRpbnQtY29sb3IoJHJlZCwgODAlKSAhZGVmYXVsdDtcbiRyZWQtMjAwOiB0aW50LWNvbG9yKCRyZWQsIDYwJSkgIWRlZmF1bHQ7XG4kcmVkLTMwMDogdGludC1jb2xvcigkcmVkLCA0MCUpICFkZWZhdWx0O1xuJHJlZC00MDA6IHRpbnQtY29sb3IoJHJlZCwgMjAlKSAhZGVmYXVsdDtcbiRyZWQtNTAwOiAkcmVkICFkZWZhdWx0O1xuJHJlZC02MDA6IHNoYWRlLWNvbG9yKCRyZWQsIDIwJSkgIWRlZmF1bHQ7XG4kcmVkLTcwMDogc2hhZGUtY29sb3IoJHJlZCwgNDAlKSAhZGVmYXVsdDtcbiRyZWQtODAwOiBzaGFkZS1jb2xvcigkcmVkLCA2MCUpICFkZWZhdWx0O1xuJHJlZC05MDA6IHNoYWRlLWNvbG9yKCRyZWQsIDgwJSkgIWRlZmF1bHQ7XG5cbiRvcmFuZ2UtMTAwOiB0aW50LWNvbG9yKCRvcmFuZ2UsIDgwJSkgIWRlZmF1bHQ7XG4kb3JhbmdlLTIwMDogdGludC1jb2xvcigkb3JhbmdlLCA2MCUpICFkZWZhdWx0O1xuJG9yYW5nZS0zMDA6IHRpbnQtY29sb3IoJG9yYW5nZSwgNDAlKSAhZGVmYXVsdDtcbiRvcmFuZ2UtNDAwOiB0aW50LWNvbG9yKCRvcmFuZ2UsIDIwJSkgIWRlZmF1bHQ7XG4kb3JhbmdlLTUwMDogJG9yYW5nZSAhZGVmYXVsdDtcbiRvcmFuZ2UtNjAwOiBzaGFkZS1jb2xvcigkb3JhbmdlLCAyMCUpICFkZWZhdWx0O1xuJG9yYW5nZS03MDA6IHNoYWRlLWNvbG9yKCRvcmFuZ2UsIDQwJSkgIWRlZmF1bHQ7XG4kb3JhbmdlLTgwMDogc2hhZGUtY29sb3IoJG9yYW5nZSwgNjAlKSAhZGVmYXVsdDtcbiRvcmFuZ2UtOTAwOiBzaGFkZS1jb2xvcigkb3JhbmdlLCA4MCUpICFkZWZhdWx0O1xuXG4keWVsbG93LTEwMDogdGludC1jb2xvcigkeWVsbG93LCA4MCUpICFkZWZhdWx0O1xuJHllbGxvdy0yMDA6IHRpbnQtY29sb3IoJHllbGxvdywgNjAlKSAhZGVmYXVsdDtcbiR5ZWxsb3ctMzAwOiB0aW50LWNvbG9yKCR5ZWxsb3csIDQwJSkgIWRlZmF1bHQ7XG4keWVsbG93LTQwMDogdGludC1jb2xvcigkeWVsbG93LCAyMCUpICFkZWZhdWx0O1xuJHllbGxvdy01MDA6ICR5ZWxsb3cgIWRlZmF1bHQ7XG4keWVsbG93LTYwMDogc2hhZGUtY29sb3IoJHllbGxvdywgMjAlKSAhZGVmYXVsdDtcbiR5ZWxsb3ctNzAwOiBzaGFkZS1jb2xvcigkeWVsbG93LCA0MCUpICFkZWZhdWx0O1xuJHllbGxvdy04MDA6IHNoYWRlLWNvbG9yKCR5ZWxsb3csIDYwJSkgIWRlZmF1bHQ7XG4keWVsbG93LTkwMDogc2hhZGUtY29sb3IoJHllbGxvdywgODAlKSAhZGVmYXVsdDtcblxuJGdyZWVuLTEwMDogdGludC1jb2xvcigkZ3JlZW4sIDgwJSkgIWRlZmF1bHQ7XG4kZ3JlZW4tMjAwOiB0aW50LWNvbG9yKCRncmVlbiwgNjAlKSAhZGVmYXVsdDtcbiRncmVlbi0zMDA6IHRpbnQtY29sb3IoJGdyZWVuLCA0MCUpICFkZWZhdWx0O1xuJGdyZWVuLTQwMDogdGludC1jb2xvcigkZ3JlZW4sIDIwJSkgIWRlZmF1bHQ7XG4kZ3JlZW4tNTAwOiAkZ3JlZW4gIWRlZmF1bHQ7XG4kZ3JlZW4tNjAwOiBzaGFkZS1jb2xvcigkZ3JlZW4sIDIwJSkgIWRlZmF1bHQ7XG4kZ3JlZW4tNzAwOiBzaGFkZS1jb2xvcigkZ3JlZW4sIDQwJSkgIWRlZmF1bHQ7XG4kZ3JlZW4tODAwOiBzaGFkZS1jb2xvcigkZ3JlZW4sIDYwJSkgIWRlZmF1bHQ7XG4kZ3JlZW4tOTAwOiBzaGFkZS1jb2xvcigkZ3JlZW4sIDgwJSkgIWRlZmF1bHQ7XG5cbiR0ZWFsLTEwMDogdGludC1jb2xvcigkdGVhbCwgODAlKSAhZGVmYXVsdDtcbiR0ZWFsLTIwMDogdGludC1jb2xvcigkdGVhbCwgNjAlKSAhZGVmYXVsdDtcbiR0ZWFsLTMwMDogdGludC1jb2xvcigkdGVhbCwgNDAlKSAhZGVmYXVsdDtcbiR0ZWFsLTQwMDogdGludC1jb2xvcigkdGVhbCwgMjAlKSAhZGVmYXVsdDtcbiR0ZWFsLTUwMDogJHRlYWwgIWRlZmF1bHQ7XG4kdGVhbC02MDA6IHNoYWRlLWNvbG9yKCR0ZWFsLCAyMCUpICFkZWZhdWx0O1xuJHRlYWwtNzAwOiBzaGFkZS1jb2xvcigkdGVhbCwgNDAlKSAhZGVmYXVsdDtcbiR0ZWFsLTgwMDogc2hhZGUtY29sb3IoJHRlYWwsIDYwJSkgIWRlZmF1bHQ7XG4kdGVhbC05MDA6IHNoYWRlLWNvbG9yKCR0ZWFsLCA4MCUpICFkZWZhdWx0O1xuXG4kY3lhbi0xMDA6IHRpbnQtY29sb3IoJGN5YW4sIDgwJSkgIWRlZmF1bHQ7XG4kY3lhbi0yMDA6IHRpbnQtY29sb3IoJGN5YW4sIDYwJSkgIWRlZmF1bHQ7XG4kY3lhbi0zMDA6IHRpbnQtY29sb3IoJGN5YW4sIDQwJSkgIWRlZmF1bHQ7XG4kY3lhbi00MDA6IHRpbnQtY29sb3IoJGN5YW4sIDIwJSkgIWRlZmF1bHQ7XG4kY3lhbi01MDA6ICRjeWFuICFkZWZhdWx0O1xuJGN5YW4tNjAwOiBzaGFkZS1jb2xvcigkY3lhbiwgMjAlKSAhZGVmYXVsdDtcbiRjeWFuLTcwMDogc2hhZGUtY29sb3IoJGN5YW4sIDQwJSkgIWRlZmF1bHQ7XG4kY3lhbi04MDA6IHNoYWRlLWNvbG9yKCRjeWFuLCA2MCUpICFkZWZhdWx0O1xuJGN5YW4tOTAwOiBzaGFkZS1jb2xvcigkY3lhbiwgODAlKSAhZGVmYXVsdDtcblxuJGJsdWVzOiAoXG4gIFwiYmx1ZS0xMDBcIjogJGJsdWUtMTAwLFxuICBcImJsdWUtMjAwXCI6ICRibHVlLTIwMCxcbiAgXCJibHVlLTMwMFwiOiAkYmx1ZS0zMDAsXG4gIFwiYmx1ZS00MDBcIjogJGJsdWUtNDAwLFxuICBcImJsdWUtNTAwXCI6ICRibHVlLTUwMCxcbiAgXCJibHVlLTYwMFwiOiAkYmx1ZS02MDAsXG4gIFwiYmx1ZS03MDBcIjogJGJsdWUtNzAwLFxuICBcImJsdWUtODAwXCI6ICRibHVlLTgwMCxcbiAgXCJibHVlLTkwMFwiOiAkYmx1ZS05MDBcbikgIWRlZmF1bHQ7XG5cbiRpbmRpZ29zOiAoXG4gIFwiaW5kaWdvLTEwMFwiOiAkaW5kaWdvLTEwMCxcbiAgXCJpbmRpZ28tMjAwXCI6ICRpbmRpZ28tMjAwLFxuICBcImluZGlnby0zMDBcIjogJGluZGlnby0zMDAsXG4gIFwiaW5kaWdvLTQwMFwiOiAkaW5kaWdvLTQwMCxcbiAgXCJpbmRpZ28tNTAwXCI6ICRpbmRpZ28tNTAwLFxuICBcImluZGlnby02MDBcIjogJGluZGlnby02MDAsXG4gIFwiaW5kaWdvLTcwMFwiOiAkaW5kaWdvLTcwMCxcbiAgXCJpbmRpZ28tODAwXCI6ICRpbmRpZ28tODAwLFxuICBcImluZGlnby05MDBcIjogJGluZGlnby05MDBcbikgIWRlZmF1bHQ7XG5cbiRwdXJwbGVzOiAoXG4gIFwicHVycGxlLTEwMFwiOiAkcHVycGxlLTEwMCxcbiAgXCJwdXJwbGUtMjAwXCI6ICRwdXJwbGUtMjAwLFxuICBcInB1cnBsZS0zMDBcIjogJHB1cnBsZS0zMDAsXG4gIFwicHVycGxlLTQwMFwiOiAkcHVycGxlLTQwMCxcbiAgXCJwdXJwbGUtNTAwXCI6ICRwdXJwbGUtNTAwLFxuICBcInB1cnBsZS02MDBcIjogJHB1cnBsZS02MDAsXG4gIFwicHVycGxlLTcwMFwiOiAkcHVycGxlLTcwMCxcbiAgXCJwdXJwbGUtODAwXCI6ICRwdXJwbGUtODAwLFxuICBcInB1cnBsZS05MDBcIjogJHB1cnBsZS05MDBcbikgIWRlZmF1bHQ7XG5cbiRwaW5rczogKFxuICBcInBpbmstMTAwXCI6ICRwaW5rLTEwMCxcbiAgXCJwaW5rLTIwMFwiOiAkcGluay0yMDAsXG4gIFwicGluay0zMDBcIjogJHBpbmstMzAwLFxuICBcInBpbmstNDAwXCI6ICRwaW5rLTQwMCxcbiAgXCJwaW5rLTUwMFwiOiAkcGluay01MDAsXG4gIFwicGluay02MDBcIjogJHBpbmstNjAwLFxuICBcInBpbmstNzAwXCI6ICRwaW5rLTcwMCxcbiAgXCJwaW5rLTgwMFwiOiAkcGluay04MDAsXG4gIFwicGluay05MDBcIjogJHBpbmstOTAwXG4pICFkZWZhdWx0O1xuXG4kcmVkczogKFxuICBcInJlZC0xMDBcIjogJHJlZC0xMDAsXG4gIFwicmVkLTIwMFwiOiAkcmVkLTIwMCxcbiAgXCJyZWQtMzAwXCI6ICRyZWQtMzAwLFxuICBcInJlZC00MDBcIjogJHJlZC00MDAsXG4gIFwicmVkLTUwMFwiOiAkcmVkLTUwMCxcbiAgXCJyZWQtNjAwXCI6ICRyZWQtNjAwLFxuICBcInJlZC03MDBcIjogJHJlZC03MDAsXG4gIFwicmVkLTgwMFwiOiAkcmVkLTgwMCxcbiAgXCJyZWQtOTAwXCI6ICRyZWQtOTAwXG4pICFkZWZhdWx0O1xuXG4kb3JhbmdlczogKFxuICBcIm9yYW5nZS0xMDBcIjogJG9yYW5nZS0xMDAsXG4gIFwib3JhbmdlLTIwMFwiOiAkb3JhbmdlLTIwMCxcbiAgXCJvcmFuZ2UtMzAwXCI6ICRvcmFuZ2UtMzAwLFxuICBcIm9yYW5nZS00MDBcIjogJG9yYW5nZS00MDAsXG4gIFwib3JhbmdlLTUwMFwiOiAkb3JhbmdlLTUwMCxcbiAgXCJvcmFuZ2UtNjAwXCI6ICRvcmFuZ2UtNjAwLFxuICBcIm9yYW5nZS03MDBcIjogJG9yYW5nZS03MDAsXG4gIFwib3JhbmdlLTgwMFwiOiAkb3JhbmdlLTgwMCxcbiAgXCJvcmFuZ2UtOTAwXCI6ICRvcmFuZ2UtOTAwXG4pICFkZWZhdWx0O1xuXG4keWVsbG93czogKFxuICBcInllbGxvdy0xMDBcIjogJHllbGxvdy0xMDAsXG4gIFwieWVsbG93LTIwMFwiOiAkeWVsbG93LTIwMCxcbiAgXCJ5ZWxsb3ctMzAwXCI6ICR5ZWxsb3ctMzAwLFxuICBcInllbGxvdy00MDBcIjogJHllbGxvdy00MDAsXG4gIFwieWVsbG93LTUwMFwiOiAkeWVsbG93LTUwMCxcbiAgXCJ5ZWxsb3ctNjAwXCI6ICR5ZWxsb3ctNjAwLFxuICBcInllbGxvdy03MDBcIjogJHllbGxvdy03MDAsXG4gIFwieWVsbG93LTgwMFwiOiAkeWVsbG93LTgwMCxcbiAgXCJ5ZWxsb3ctOTAwXCI6ICR5ZWxsb3ctOTAwXG4pICFkZWZhdWx0O1xuXG4kZ3JlZW5zOiAoXG4gIFwiZ3JlZW4tMTAwXCI6ICRncmVlbi0xMDAsXG4gIFwiZ3JlZW4tMjAwXCI6ICRncmVlbi0yMDAsXG4gIFwiZ3JlZW4tMzAwXCI6ICRncmVlbi0zMDAsXG4gIFwiZ3JlZW4tNDAwXCI6ICRncmVlbi00MDAsXG4gIFwiZ3JlZW4tNTAwXCI6ICRncmVlbi01MDAsXG4gIFwiZ3JlZW4tNjAwXCI6ICRncmVlbi02MDAsXG4gIFwiZ3JlZW4tNzAwXCI6ICRncmVlbi03MDAsXG4gIFwiZ3JlZW4tODAwXCI6ICRncmVlbi04MDAsXG4gIFwiZ3JlZW4tOTAwXCI6ICRncmVlbi05MDBcbikgIWRlZmF1bHQ7XG5cbiR0ZWFsczogKFxuICBcInRlYWwtMTAwXCI6ICR0ZWFsLTEwMCxcbiAgXCJ0ZWFsLTIwMFwiOiAkdGVhbC0yMDAsXG4gIFwidGVhbC0zMDBcIjogJHRlYWwtMzAwLFxuICBcInRlYWwtNDAwXCI6ICR0ZWFsLTQwMCxcbiAgXCJ0ZWFsLTUwMFwiOiAkdGVhbC01MDAsXG4gIFwidGVhbC02MDBcIjogJHRlYWwtNjAwLFxuICBcInRlYWwtNzAwXCI6ICR0ZWFsLTcwMCxcbiAgXCJ0ZWFsLTgwMFwiOiAkdGVhbC04MDAsXG4gIFwidGVhbC05MDBcIjogJHRlYWwtOTAwXG4pICFkZWZhdWx0O1xuXG4kY3lhbnM6IChcbiAgXCJjeWFuLTEwMFwiOiAkY3lhbi0xMDAsXG4gIFwiY3lhbi0yMDBcIjogJGN5YW4tMjAwLFxuICBcImN5YW4tMzAwXCI6ICRjeWFuLTMwMCxcbiAgXCJjeWFuLTQwMFwiOiAkY3lhbi00MDAsXG4gIFwiY3lhbi01MDBcIjogJGN5YW4tNTAwLFxuICBcImN5YW4tNjAwXCI6ICRjeWFuLTYwMCxcbiAgXCJjeWFuLTcwMFwiOiAkY3lhbi03MDAsXG4gIFwiY3lhbi04MDBcIjogJGN5YW4tODAwLFxuICBcImN5YW4tOTAwXCI6ICRjeWFuLTkwMFxuKSAhZGVmYXVsdDtcbi8vIGZ1c3YtZW5hYmxlXG5cbi8vIHNjc3MtZG9jcy1zdGFydCB0aGVtZS1jb2xvci12YXJpYWJsZXNcbiRwcmltYXJ5OiAgICAgICAkYmx1ZSAhZGVmYXVsdDtcbiRzZWNvbmRhcnk6ICAgICAkZ3JheS02MDAgIWRlZmF1bHQ7XG4kc3VjY2VzczogICAgICAgJGdyZWVuICFkZWZhdWx0O1xuJGluZm86ICAgICAgICAgICRjeWFuICFkZWZhdWx0O1xuJHdhcm5pbmc6ICAgICAgICR5ZWxsb3cgIWRlZmF1bHQ7XG4kZGFuZ2VyOiAgICAgICAgJHJlZCAhZGVmYXVsdDtcbiRsaWdodDogICAgICAgICAkZ3JheS0xMDAgIWRlZmF1bHQ7XG4kZGFyazogICAgICAgICAgJGdyYXktOTAwICFkZWZhdWx0O1xuLy8gc2Nzcy1kb2NzLWVuZCB0aGVtZS1jb2xvci12YXJpYWJsZXNcblxuLy8gc2Nzcy1kb2NzLXN0YXJ0IHRoZW1lLWNvbG9ycy1tYXBcbiR0aGVtZS1jb2xvcnM6IChcbiAgXCJwcmltYXJ5XCI6ICAgICRwcmltYXJ5LFxuICBcInNlY29uZGFyeVwiOiAgJHNlY29uZGFyeSxcbiAgXCJzdWNjZXNzXCI6ICAgICRzdWNjZXNzLFxuICBcImluZm9cIjogICAgICAgJGluZm8sXG4gIFwid2FybmluZ1wiOiAgICAkd2FybmluZyxcbiAgXCJkYW5nZXJcIjogICAgICRkYW5nZXIsXG4gIFwibGlnaHRcIjogICAgICAkbGlnaHQsXG4gIFwiZGFya1wiOiAgICAgICAkZGFya1xuKSAhZGVmYXVsdDtcbi8vIHNjc3MtZG9jcy1lbmQgdGhlbWUtY29sb3JzLW1hcFxuXG4vLyBzY3NzLWRvY3Mtc3RhcnQgdGhlbWUtdGV4dC12YXJpYWJsZXNcbiRwcmltYXJ5LXRleHQtZW1waGFzaXM6ICAgc2hhZGUtY29sb3IoJHByaW1hcnksIDYwJSkgIWRlZmF1bHQ7XG4kc2Vjb25kYXJ5LXRleHQtZW1waGFzaXM6IHNoYWRlLWNvbG9yKCRzZWNvbmRhcnksIDYwJSkgIWRlZmF1bHQ7XG4kc3VjY2Vzcy10ZXh0LWVtcGhhc2lzOiAgIHNoYWRlLWNvbG9yKCRzdWNjZXNzLCA2MCUpICFkZWZhdWx0O1xuJGluZm8tdGV4dC1lbXBoYXNpczogICAgICBzaGFkZS1jb2xvcigkaW5mbywgNjAlKSAhZGVmYXVsdDtcbiR3YXJuaW5nLXRleHQtZW1waGFzaXM6ICAgc2hhZGUtY29sb3IoJHdhcm5pbmcsIDYwJSkgIWRlZmF1bHQ7XG4kZGFuZ2VyLXRleHQtZW1waGFzaXM6ICAgIHNoYWRlLWNvbG9yKCRkYW5nZXIsIDYwJSkgIWRlZmF1bHQ7XG4kbGlnaHQtdGV4dC1lbXBoYXNpczogICAgICRncmF5LTcwMCAhZGVmYXVsdDtcbiRkYXJrLXRleHQtZW1waGFzaXM6ICAgICAgJGdyYXktNzAwICFkZWZhdWx0O1xuLy8gc2Nzcy1kb2NzLWVuZCB0aGVtZS10ZXh0LXZhcmlhYmxlc1xuXG4vLyBzY3NzLWRvY3Mtc3RhcnQgdGhlbWUtYmctc3VidGxlLXZhcmlhYmxlc1xuJHByaW1hcnktYmctc3VidGxlOiAgICAgICB0aW50LWNvbG9yKCRwcmltYXJ5LCA4MCUpICFkZWZhdWx0O1xuJHNlY29uZGFyeS1iZy1zdWJ0bGU6ICAgICB0aW50LWNvbG9yKCRzZWNvbmRhcnksIDgwJSkgIWRlZmF1bHQ7XG4kc3VjY2Vzcy1iZy1zdWJ0bGU6ICAgICAgIHRpbnQtY29sb3IoJHN1Y2Nlc3MsIDgwJSkgIWRlZmF1bHQ7XG4kaW5mby1iZy1zdWJ0bGU6ICAgICAgICAgIHRpbnQtY29sb3IoJGluZm8sIDgwJSkgIWRlZmF1bHQ7XG4kd2FybmluZy1iZy1zdWJ0bGU6ICAgICAgIHRpbnQtY29sb3IoJHdhcm5pbmcsIDgwJSkgIWRlZmF1bHQ7XG4kZGFuZ2VyLWJnLXN1YnRsZTogICAgICAgIHRpbnQtY29sb3IoJGRhbmdlciwgODAlKSAhZGVmYXVsdDtcbiRsaWdodC1iZy1zdWJ0bGU6ICAgICAgICAgbWl4KCRncmF5LTEwMCwgJHdoaXRlKSAhZGVmYXVsdDtcbiRkYXJrLWJnLXN1YnRsZTogICAgICAgICAgJGdyYXktNDAwICFkZWZhdWx0O1xuLy8gc2Nzcy1kb2NzLWVuZCB0aGVtZS1iZy1zdWJ0bGUtdmFyaWFibGVzXG5cbi8vIHNjc3MtZG9jcy1zdGFydCB0aGVtZS1ib3JkZXItc3VidGxlLXZhcmlhYmxlc1xuJHByaW1hcnktYm9yZGVyLXN1YnRsZTogICB0aW50LWNvbG9yKCRwcmltYXJ5LCA2MCUpICFkZWZhdWx0O1xuJHNlY29uZGFyeS1ib3JkZXItc3VidGxlOiB0aW50LWNvbG9yKCRzZWNvbmRhcnksIDYwJSkgIWRlZmF1bHQ7XG4kc3VjY2Vzcy1ib3JkZXItc3VidGxlOiAgIHRpbnQtY29sb3IoJHN1Y2Nlc3MsIDYwJSkgIWRlZmF1bHQ7XG4kaW5mby1ib3JkZXItc3VidGxlOiAgICAgIHRpbnQtY29sb3IoJGluZm8sIDYwJSkgIWRlZmF1bHQ7XG4kd2FybmluZy1ib3JkZXItc3VidGxlOiAgIHRpbnQtY29sb3IoJHdhcm5pbmcsIDYwJSkgIWRlZmF1bHQ7XG4kZGFuZ2VyLWJvcmRlci1zdWJ0bGU6ICAgIHRpbnQtY29sb3IoJGRhbmdlciwgNjAlKSAhZGVmYXVsdDtcbiRsaWdodC1ib3JkZXItc3VidGxlOiAgICAgJGdyYXktMjAwICFkZWZhdWx0O1xuJGRhcmstYm9yZGVyLXN1YnRsZTogICAgICAkZ3JheS01MDAgIWRlZmF1bHQ7XG4vLyBzY3NzLWRvY3MtZW5kIHRoZW1lLWJvcmRlci1zdWJ0bGUtdmFyaWFibGVzXG5cbi8vIENoYXJhY3RlcnMgd2hpY2ggYXJlIGVzY2FwZWQgYnkgdGhlIGVzY2FwZS1zdmcgZnVuY3Rpb25cbiRlc2NhcGVkLWNoYXJhY3RlcnM6IChcbiAgKFwiPFwiLCBcIiUzY1wiKSxcbiAgKFwiPlwiLCBcIiUzZVwiKSxcbiAgKFwiI1wiLCBcIiUyM1wiKSxcbiAgKFwiKFwiLCBcIiUyOFwiKSxcbiAgKFwiKVwiLCBcIiUyOVwiKSxcbikgIWRlZmF1bHQ7XG5cbi8vIE9wdGlvbnNcbi8vXG4vLyBRdWlja2x5IG1vZGlmeSBnbG9iYWwgc3R5bGluZyBieSBlbmFibGluZyBvciBkaXNhYmxpbmcgb3B0aW9uYWwgZmVhdHVyZXMuXG5cbiRlbmFibGUtY2FyZXQ6ICAgICAgICAgICAgICAgIHRydWUgIWRlZmF1bHQ7XG4kZW5hYmxlLXJvdW5kZWQ6ICAgICAgICAgICAgICB0cnVlICFkZWZhdWx0O1xuJGVuYWJsZS1zaGFkb3dzOiAgICAgICAgICAgICAgZmFsc2UgIWRlZmF1bHQ7XG4kZW5hYmxlLWdyYWRpZW50czogICAgICAgICAgICBmYWxzZSAhZGVmYXVsdDtcbiRlbmFibGUtdHJhbnNpdGlvbnM6ICAgICAgICAgIHRydWUgIWRlZmF1bHQ7XG4kZW5hYmxlLXJlZHVjZWQtbW90aW9uOiAgICAgICB0cnVlICFkZWZhdWx0O1xuJGVuYWJsZS1zbW9vdGgtc2Nyb2xsOiAgICAgICAgdHJ1ZSAhZGVmYXVsdDtcbiRlbmFibGUtZ3JpZC1jbGFzc2VzOiAgICAgICAgIHRydWUgIWRlZmF1bHQ7XG4kZW5hYmxlLWNvbnRhaW5lci1jbGFzc2VzOiAgICB0cnVlICFkZWZhdWx0O1xuJGVuYWJsZS1jc3NncmlkOiAgICAgICAgICAgICAgZmFsc2UgIWRlZmF1bHQ7XG4kZW5hYmxlLWJ1dHRvbi1wb2ludGVyczogICAgICB0cnVlICFkZWZhdWx0O1xuJGVuYWJsZS1yZnM6ICAgICAgICAgICAgICAgICAgdHJ1ZSAhZGVmYXVsdDtcbiRlbmFibGUtdmFsaWRhdGlvbi1pY29uczogICAgIHRydWUgIWRlZmF1bHQ7XG4kZW5hYmxlLW5lZ2F0aXZlLW1hcmdpbnM6ICAgICBmYWxzZSAhZGVmYXVsdDtcbiRlbmFibGUtZGVwcmVjYXRpb24tbWVzc2FnZXM6IHRydWUgIWRlZmF1bHQ7XG4kZW5hYmxlLWltcG9ydGFudC11dGlsaXRpZXM6ICB0cnVlICFkZWZhdWx0O1xuXG4kZW5hYmxlLWRhcmstbW9kZTogICAgICAgICAgICB0cnVlICFkZWZhdWx0O1xuJGNvbG9yLW1vZGUtdHlwZTogICAgICAgICAgICAgZGF0YSAhZGVmYXVsdDsgLy8gYGRhdGFgIG9yIGBtZWRpYS1xdWVyeWBcblxuLy8gUHJlZml4IGZvciA6cm9vdCBDU1MgdmFyaWFibGVzXG5cbiR2YXJpYWJsZS1wcmVmaXg6ICAgICAgICAgICAgIGJzLSAhZGVmYXVsdDsgLy8gRGVwcmVjYXRlZCBpbiB2NS4yLjAgZm9yIHRoZSBzaG9ydGVyIGAkcHJlZml4YFxuJHByZWZpeDogICAgICAgICAgICAgICAgICAgICAgJHZhcmlhYmxlLXByZWZpeCAhZGVmYXVsdDtcblxuLy8gR3JhZGllbnRcbi8vXG4vLyBUaGUgZ3JhZGllbnQgd2hpY2ggaXMgYWRkZWQgdG8gY29tcG9uZW50cyBpZiBgJGVuYWJsZS1ncmFkaWVudHNgIGlzIGB0cnVlYFxuLy8gVGhpcyBncmFkaWVudCBpcyBhbHNvIGFkZGVkIHRvIGVsZW1lbnRzIHdpdGggYC5iZy1ncmFkaWVudGBcbi8vIHNjc3MtZG9jcy1zdGFydCB2YXJpYWJsZS1ncmFkaWVudFxuJGdyYWRpZW50OiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKCR3aGl0ZSwgLjE1KSwgcmdiYSgkd2hpdGUsIDApKSAhZGVmYXVsdDtcbi8vIHNjc3MtZG9jcy1lbmQgdmFyaWFibGUtZ3JhZGllbnRcblxuLy8gU3BhY2luZ1xuLy9cbi8vIENvbnRyb2wgdGhlIGRlZmF1bHQgc3R5bGluZyBvZiBtb3N0IEJvb3RzdHJhcCBlbGVtZW50cyBieSBtb2RpZnlpbmcgdGhlc2Vcbi8vIHZhcmlhYmxlcy4gTW9zdGx5IGZvY3VzZWQgb24gc3BhY2luZy5cbi8vIFlvdSBjYW4gYWRkIG1vcmUgZW50cmllcyB0byB0aGUgJHNwYWNlcnMgbWFwLCBzaG91bGQgeW91IG5lZWQgbW9yZSB2YXJpYXRpb24uXG5cbi8vIHNjc3MtZG9jcy1zdGFydCBzcGFjZXItdmFyaWFibGVzLW1hcHNcbiRzcGFjZXI6IDFyZW0gIWRlZmF1bHQ7XG4kc3BhY2VyczogKFxuICAwOiAwLFxuICAxOiAkc3BhY2VyICogLjI1LFxuICAyOiAkc3BhY2VyICogLjUsXG4gIDM6ICRzcGFjZXIsXG4gIDQ6ICRzcGFjZXIgKiAxLjUsXG4gIDU6ICRzcGFjZXIgKiAzLFxuKSAhZGVmYXVsdDtcbi8vIHNjc3MtZG9jcy1lbmQgc3BhY2VyLXZhcmlhYmxlcy1tYXBzXG5cbi8vIFBvc2l0aW9uXG4vL1xuLy8gRGVmaW5lIHRoZSBlZGdlIHBvc2l0aW9uaW5nIGFuY2hvcnMgb2YgdGhlIHBvc2l0aW9uIHV0aWxpdGllcy5cblxuLy8gc2Nzcy1kb2NzLXN0YXJ0IHBvc2l0aW9uLW1hcFxuJHBvc2l0aW9uLXZhbHVlczogKFxuICAwOiAwLFxuICA1MDogNTAlLFxuICAxMDA6IDEwMCVcbikgIWRlZmF1bHQ7XG4vLyBzY3NzLWRvY3MtZW5kIHBvc2l0aW9uLW1hcFxuXG4vLyBCb2R5XG4vL1xuLy8gU2V0dGluZ3MgZm9yIHRoZSBgPGJvZHk+YCBlbGVtZW50LlxuXG4kYm9keS10ZXh0LWFsaWduOiAgICAgICAgICAgbnVsbCAhZGVmYXVsdDtcbiRib2R5LWNvbG9yOiAgICAgICAgICAgICAgICAkZ3JheS05MDAgIWRlZmF1bHQ7XG4kYm9keS1iZzogICAgICAgICAgICAgICAgICAgJHdoaXRlICFkZWZhdWx0O1xuXG4kYm9keS1zZWNvbmRhcnktY29sb3I6ICAgICAgcmdiYSgkYm9keS1jb2xvciwgLjc1KSAhZGVmYXVsdDtcbiRib2R5LXNlY29uZGFyeS1iZzogICAgICAgICAkZ3JheS0yMDAgIWRlZmF1bHQ7XG5cbiRib2R5LXRlcnRpYXJ5LWNvbG9yOiAgICAgICByZ2JhKCRib2R5LWNvbG9yLCAuNSkgIWRlZmF1bHQ7XG4kYm9keS10ZXJ0aWFyeS1iZzogICAgICAgICAgJGdyYXktMTAwICFkZWZhdWx0O1xuXG4kYm9keS1lbXBoYXNpcy1jb2xvcjogICAgICAgJGJsYWNrICFkZWZhdWx0O1xuXG4vLyBMaW5rc1xuLy9cbi8vIFN0eWxlIGFuY2hvciBlbGVtZW50cy5cblxuJGxpbmstY29sb3I6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHByaW1hcnkgIWRlZmF1bHQ7XG4kbGluay1kZWNvcmF0aW9uOiAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlcmxpbmUgIWRlZmF1bHQ7XG4kbGluay1zaGFkZS1wZXJjZW50YWdlOiAgICAgICAgICAgICAgICAgICAyMCUgIWRlZmF1bHQ7XG4kbGluay1ob3Zlci1jb2xvcjogICAgICAgICAgICAgICAgICAgICAgICBzaGlmdC1jb2xvcigkbGluay1jb2xvciwgJGxpbmstc2hhZGUtcGVyY2VudGFnZSkgIWRlZmF1bHQ7XG4kbGluay1ob3Zlci1kZWNvcmF0aW9uOiAgICAgICAgICAgICAgICAgICBudWxsICFkZWZhdWx0O1xuXG4kc3RyZXRjaGVkLWxpbmstcHNldWRvLWVsZW1lbnQ6ICAgICAgICAgICBhZnRlciAhZGVmYXVsdDtcbiRzdHJldGNoZWQtbGluay16LWluZGV4OiAgICAgICAgICAgICAgICAgIDEgIWRlZmF1bHQ7XG5cbi8vIEljb24gbGlua3Ncbi8vIHNjc3MtZG9jcy1zdGFydCBpY29uLWxpbmstdmFyaWFibGVzXG4kaWNvbi1saW5rLWdhcDogICAgICAgICAgICAgICAuMzc1cmVtICFkZWZhdWx0O1xuJGljb24tbGluay11bmRlcmxpbmUtb2Zmc2V0OiAgLjI1ZW0gIWRlZmF1bHQ7XG4kaWNvbi1saW5rLWljb24tc2l6ZTogICAgICAgICAxZW0gIWRlZmF1bHQ7XG4kaWNvbi1saW5rLWljb24tdHJhbnNpdGlvbjogICAuMnMgZWFzZS1pbi1vdXQgdHJhbnNmb3JtICFkZWZhdWx0O1xuJGljb24tbGluay1pY29uLXRyYW5zZm9ybTogICAgdHJhbnNsYXRlM2QoLjI1ZW0sIDAsIDApICFkZWZhdWx0O1xuLy8gc2Nzcy1kb2NzLWVuZCBpY29uLWxpbmstdmFyaWFibGVzXG5cbi8vIFBhcmFncmFwaHNcbi8vXG4vLyBTdHlsZSBwIGVsZW1lbnQuXG5cbiRwYXJhZ3JhcGgtbWFyZ2luLWJvdHRvbTogICAxcmVtICFkZWZhdWx0O1xuXG5cbi8vIEdyaWQgYnJlYWtwb2ludHNcbi8vXG4vLyBEZWZpbmUgdGhlIG1pbmltdW0gZGltZW5zaW9ucyBhdCB3aGljaCB5b3VyIGxheW91dCB3aWxsIGNoYW5nZSxcbi8vIGFkYXB0aW5nIHRvIGRpZmZlcmVudCBzY3JlZW4gc2l6ZXMsIGZvciB1c2UgaW4gbWVkaWEgcXVlcmllcy5cblxuLy8gc2Nzcy1kb2NzLXN0YXJ0IGdyaWQtYnJlYWtwb2ludHNcbiRncmlkLWJyZWFrcG9pbnRzOiAoXG4gIHhzOiAwLFxuICBzbTogNTc2cHgsXG4gIG1kOiA3NjhweCxcbiAgbGc6IDk5MnB4LFxuICB4bDogMTIwMHB4LFxuICB4eGw6IDE0MDBweFxuKSAhZGVmYXVsdDtcbi8vIHNjc3MtZG9jcy1lbmQgZ3JpZC1icmVha3BvaW50c1xuXG5AaW5jbHVkZSBfYXNzZXJ0LWFzY2VuZGluZygkZ3JpZC1icmVha3BvaW50cywgXCIkZ3JpZC1icmVha3BvaW50c1wiKTtcbkBpbmNsdWRlIF9hc3NlcnQtc3RhcnRzLWF0LXplcm8oJGdyaWQtYnJlYWtwb2ludHMsIFwiJGdyaWQtYnJlYWtwb2ludHNcIik7XG5cblxuLy8gR3JpZCBjb250YWluZXJzXG4vL1xuLy8gRGVmaW5lIHRoZSBtYXhpbXVtIHdpZHRoIG9mIGAuY29udGFpbmVyYCBmb3IgZGlmZmVyZW50IHNjcmVlbiBzaXplcy5cblxuLy8gc2Nzcy1kb2NzLXN0YXJ0IGNvbnRhaW5lci1tYXgtd2lkdGhzXG4kY29udGFpbmVyLW1heC13aWR0aHM6IChcbiAgc206IDU0MHB4LFxuICBtZDogNzIwcHgsXG4gIGxnOiA5NjBweCxcbiAgeGw6IDExNDBweCxcbiAgeHhsOiAxMzIwcHhcbikgIWRlZmF1bHQ7XG4vLyBzY3NzLWRvY3MtZW5kIGNvbnRhaW5lci1tYXgtd2lkdGhzXG5cbkBpbmNsdWRlIF9hc3NlcnQtYXNjZW5kaW5nKCRjb250YWluZXItbWF4LXdpZHRocywgXCIkY29udGFpbmVyLW1heC13aWR0aHNcIik7XG5cblxuLy8gR3JpZCBjb2x1bW5zXG4vL1xuLy8gU2V0IHRoZSBudW1iZXIgb2YgY29sdW1ucyBhbmQgc3BlY2lmeSB0aGUgd2lkdGggb2YgdGhlIGd1dHRlcnMuXG5cbiRncmlkLWNvbHVtbnM6ICAgICAgICAgICAgICAgIDEyICFkZWZhdWx0O1xuJGdyaWQtZ3V0dGVyLXdpZHRoOiAgICAgICAgICAgMS41cmVtICFkZWZhdWx0O1xuJGdyaWQtcm93LWNvbHVtbnM6ICAgICAgICAgICAgNiAhZGVmYXVsdDtcblxuLy8gQ29udGFpbmVyIHBhZGRpbmdcblxuJGNvbnRhaW5lci1wYWRkaW5nLXg6ICRncmlkLWd1dHRlci13aWR0aCAhZGVmYXVsdDtcblxuXG4vLyBDb21wb25lbnRzXG4vL1xuLy8gRGVmaW5lIGNvbW1vbiBwYWRkaW5nIGFuZCBib3JkZXIgcmFkaXVzIHNpemVzIGFuZCBtb3JlLlxuXG4vLyBzY3NzLWRvY3Mtc3RhcnQgYm9yZGVyLXZhcmlhYmxlc1xuJGJvcmRlci13aWR0aDogICAgICAgICAgICAgICAgMXB4ICFkZWZhdWx0O1xuJGJvcmRlci13aWR0aHM6IChcbiAgMTogMXB4LFxuICAyOiAycHgsXG4gIDM6IDNweCxcbiAgNDogNHB4LFxuICA1OiA1cHhcbikgIWRlZmF1bHQ7XG4kYm9yZGVyLXN0eWxlOiAgICAgICAgICAgICAgICBzb2xpZCAhZGVmYXVsdDtcbiRib3JkZXItY29sb3I6ICAgICAgICAgICAgICAgICRncmF5LTMwMCAhZGVmYXVsdDtcbiRib3JkZXItY29sb3ItdHJhbnNsdWNlbnQ6ICAgIHJnYmEoJGJsYWNrLCAuMTc1KSAhZGVmYXVsdDtcbi8vIHNjc3MtZG9jcy1lbmQgYm9yZGVyLXZhcmlhYmxlc1xuXG4vLyBzY3NzLWRvY3Mtc3RhcnQgYm9yZGVyLXJhZGl1cy12YXJpYWJsZXNcbiRib3JkZXItcmFkaXVzOiAgICAgICAgICAgICAgIC4zNzVyZW0gIWRlZmF1bHQ7XG4kYm9yZGVyLXJhZGl1cy1zbTogICAgICAgICAgICAuMjVyZW0gIWRlZmF1bHQ7XG4kYm9yZGVyLXJhZGl1cy1sZzogICAgICAgICAgICAuNXJlbSAhZGVmYXVsdDtcbiRib3JkZXItcmFkaXVzLXhsOiAgICAgICAgICAgIDFyZW0gIWRlZmF1bHQ7XG4kYm9yZGVyLXJhZGl1cy14eGw6ICAgICAgICAgICAycmVtICFkZWZhdWx0O1xuJGJvcmRlci1yYWRpdXMtcGlsbDogICAgICAgICAgNTByZW0gIWRlZmF1bHQ7XG4vLyBzY3NzLWRvY3MtZW5kIGJvcmRlci1yYWRpdXMtdmFyaWFibGVzXG4vLyBmdXN2LWRpc2FibGVcbiRib3JkZXItcmFkaXVzLTJ4bDogICAgICAgICAgICRib3JkZXItcmFkaXVzLXh4bCAhZGVmYXVsdDsgLy8gRGVwcmVjYXRlZCBpbiB2NS4zLjBcbi8vIGZ1c3YtZW5hYmxlXG5cbi8vIHNjc3MtZG9jcy1zdGFydCBib3gtc2hhZG93LXZhcmlhYmxlc1xuJGJveC1zaGFkb3c6ICAgICAgICAgICAgICAgICAgMCAuNXJlbSAxcmVtIHJnYmEoJGJsYWNrLCAuMTUpICFkZWZhdWx0O1xuJGJveC1zaGFkb3ctc206ICAgICAgICAgICAgICAgMCAuMTI1cmVtIC4yNXJlbSByZ2JhKCRibGFjaywgLjA3NSkgIWRlZmF1bHQ7XG4kYm94LXNoYWRvdy1sZzogICAgICAgICAgICAgICAwIDFyZW0gM3JlbSByZ2JhKCRibGFjaywgLjE3NSkgIWRlZmF1bHQ7XG4kYm94LXNoYWRvdy1pbnNldDogICAgICAgICAgICBpbnNldCAwIDFweCAycHggcmdiYSgkYmxhY2ssIC4wNzUpICFkZWZhdWx0O1xuLy8gc2Nzcy1kb2NzLWVuZCBib3gtc2hhZG93LXZhcmlhYmxlc1xuXG4kY29tcG9uZW50LWFjdGl2ZS1jb2xvcjogICAgICAkd2hpdGUgIWRlZmF1bHQ7XG4kY29tcG9uZW50LWFjdGl2ZS1iZzogICAgICAgICAkcHJpbWFyeSAhZGVmYXVsdDtcblxuLy8gc2Nzcy1kb2NzLXN0YXJ0IGZvY3VzLXJpbmctdmFyaWFibGVzXG4kZm9jdXMtcmluZy13aWR0aDogICAgICAuMjVyZW0gIWRlZmF1bHQ7XG4kZm9jdXMtcmluZy1vcGFjaXR5OiAgICAuMjUgIWRlZmF1bHQ7XG4kZm9jdXMtcmluZy1jb2xvcjogICAgICByZ2JhKCRwcmltYXJ5LCAkZm9jdXMtcmluZy1vcGFjaXR5KSAhZGVmYXVsdDtcbiRmb2N1cy1yaW5nLWJsdXI6ICAgICAgIDAgIWRlZmF1bHQ7XG4kZm9jdXMtcmluZy1ib3gtc2hhZG93OiAwIDAgJGZvY3VzLXJpbmctYmx1ciAkZm9jdXMtcmluZy13aWR0aCAkZm9jdXMtcmluZy1jb2xvciAhZGVmYXVsdDtcbi8vIHNjc3MtZG9jcy1lbmQgZm9jdXMtcmluZy12YXJpYWJsZXNcblxuLy8gc2Nzcy1kb2NzLXN0YXJ0IGNhcmV0LXZhcmlhYmxlc1xuJGNhcmV0LXdpZHRoOiAgICAgICAgICAgICAgICAgLjNlbSAhZGVmYXVsdDtcbiRjYXJldC12ZXJ0aWNhbC1hbGlnbjogICAgICAgICRjYXJldC13aWR0aCAqIC44NSAhZGVmYXVsdDtcbiRjYXJldC1zcGFjaW5nOiAgICAgICAgICAgICAgICRjYXJldC13aWR0aCAqIC44NSAhZGVmYXVsdDtcbi8vIHNjc3MtZG9jcy1lbmQgY2FyZXQtdmFyaWFibGVzXG5cbiR0cmFuc2l0aW9uLWJhc2U6ICAgICAgICAgICAgIGFsbCAuMnMgZWFzZS1pbi1vdXQgIWRlZmF1bHQ7XG4kdHJhbnNpdGlvbi1mYWRlOiAgICAgICAgICAgICBvcGFjaXR5IC4xNXMgbGluZWFyICFkZWZhdWx0O1xuLy8gc2Nzcy1kb2NzLXN0YXJ0IGNvbGxhcHNlLXRyYW5zaXRpb25cbiR0cmFuc2l0aW9uLWNvbGxhcHNlOiAgICAgICAgIGhlaWdodCAuMzVzIGVhc2UgIWRlZmF1bHQ7XG4kdHJhbnNpdGlvbi1jb2xsYXBzZS13aWR0aDogICB3aWR0aCAuMzVzIGVhc2UgIWRlZmF1bHQ7XG4vLyBzY3NzLWRvY3MtZW5kIGNvbGxhcHNlLXRyYW5zaXRpb25cblxuLy8gc3R5bGVsaW50LWRpc2FibGUgZnVuY3Rpb24tZGlzYWxsb3dlZC1saXN0XG4vLyBzY3NzLWRvY3Mtc3RhcnQgYXNwZWN0LXJhdGlvc1xuJGFzcGVjdC1yYXRpb3M6IChcbiAgXCIxeDFcIjogMTAwJSxcbiAgXCI0eDNcIjogY2FsYygzIC8gNCAqIDEwMCUpLFxuICBcIjE2eDlcIjogY2FsYyg5IC8gMTYgKiAxMDAlKSxcbiAgXCIyMXg5XCI6IGNhbGMoOSAvIDIxICogMTAwJSlcbikgIWRlZmF1bHQ7XG4vLyBzY3NzLWRvY3MtZW5kIGFzcGVjdC1yYXRpb3Ncbi8vIHN0eWxlbGludC1lbmFibGUgZnVuY3Rpb24tZGlzYWxsb3dlZC1saXN0XG5cbi8vIFR5cG9ncmFwaHlcbi8vXG4vLyBGb250LCBsaW5lLWhlaWdodCwgYW5kIGNvbG9yIGZvciBib2R5IHRleHQsIGhlYWRpbmdzLCBhbmQgbW9yZS5cblxuLy8gc2Nzcy1kb2NzLXN0YXJ0IGZvbnQtdmFyaWFibGVzXG4vLyBzdHlsZWxpbnQtZGlzYWJsZSB2YWx1ZS1rZXl3b3JkLWNhc2VcbiRmb250LWZhbWlseS1zYW5zLXNlcmlmOiAgICAgIHN5c3RlbS11aSwgLWFwcGxlLXN5c3RlbSwgXCJTZWdvZSBVSVwiLCBSb2JvdG8sIFwiSGVsdmV0aWNhIE5ldWVcIiwgXCJOb3RvIFNhbnNcIiwgXCJMaWJlcmF0aW9uIFNhbnNcIiwgQXJpYWwsIHNhbnMtc2VyaWYsIFwiQXBwbGUgQ29sb3IgRW1vamlcIiwgXCJTZWdvZSBVSSBFbW9qaVwiLCBcIlNlZ29lIFVJIFN5bWJvbFwiLCBcIk5vdG8gQ29sb3IgRW1vamlcIiAhZGVmYXVsdDtcbiRmb250LWZhbWlseS1tb25vc3BhY2U6ICAgICAgIFNGTW9uby1SZWd1bGFyLCBNZW5sbywgTW9uYWNvLCBDb25zb2xhcywgXCJMaWJlcmF0aW9uIE1vbm9cIiwgXCJDb3VyaWVyIE5ld1wiLCBtb25vc3BhY2UgIWRlZmF1bHQ7XG4vLyBzdHlsZWxpbnQtZW5hYmxlIHZhbHVlLWtleXdvcmQtY2FzZVxuJGZvbnQtZmFtaWx5LWJhc2U6ICAgICAgICAgICAgdmFyKC0tI3skcHJlZml4fWZvbnQtc2Fucy1zZXJpZikgIWRlZmF1bHQ7XG4kZm9udC1mYW1pbHktY29kZTogICAgICAgICAgICB2YXIoLS0jeyRwcmVmaXh9Zm9udC1tb25vc3BhY2UpICFkZWZhdWx0O1xuXG4vLyAkZm9udC1zaXplLXJvb3QgYWZmZWN0cyB0aGUgdmFsdWUgb2YgYHJlbWAsIHdoaWNoIGlzIHVzZWQgZm9yIGFzIHdlbGwgZm9udCBzaXplcywgcGFkZGluZ3MsIGFuZCBtYXJnaW5zXG4vLyAkZm9udC1zaXplLWJhc2UgYWZmZWN0cyB0aGUgZm9udCBzaXplIG9mIHRoZSBib2R5IHRleHRcbiRmb250LXNpemUtcm9vdDogICAgICAgICAgICAgIG51bGwgIWRlZmF1bHQ7XG4kZm9udC1zaXplLWJhc2U6ICAgICAgICAgICAgICAxcmVtICFkZWZhdWx0OyAvLyBBc3N1bWVzIHRoZSBicm93c2VyIGRlZmF1bHQsIHR5cGljYWxseSBgMTZweGBcbiRmb250LXNpemUtc206ICAgICAgICAgICAgICAgICRmb250LXNpemUtYmFzZSAqIC44NzUgIWRlZmF1bHQ7XG4kZm9udC1zaXplLWxnOiAgICAgICAgICAgICAgICAkZm9udC1zaXplLWJhc2UgKiAxLjI1ICFkZWZhdWx0O1xuXG4kZm9udC13ZWlnaHQtbGlnaHRlcjogICAgICAgICBsaWdodGVyICFkZWZhdWx0O1xuJGZvbnQtd2VpZ2h0LWxpZ2h0OiAgICAgICAgICAgMzAwICFkZWZhdWx0O1xuJGZvbnQtd2VpZ2h0LW5vcm1hbDogICAgICAgICAgNDAwICFkZWZhdWx0O1xuJGZvbnQtd2VpZ2h0LW1lZGl1bTogICAgICAgICAgNTAwICFkZWZhdWx0O1xuJGZvbnQtd2VpZ2h0LXNlbWlib2xkOiAgICAgICAgNjAwICFkZWZhdWx0O1xuJGZvbnQtd2VpZ2h0LWJvbGQ6ICAgICAgICAgICAgNzAwICFkZWZhdWx0O1xuJGZvbnQtd2VpZ2h0LWJvbGRlcjogICAgICAgICAgYm9sZGVyICFkZWZhdWx0O1xuXG4kZm9udC13ZWlnaHQtYmFzZTogICAgICAgICAgICAkZm9udC13ZWlnaHQtbm9ybWFsICFkZWZhdWx0O1xuXG4kbGluZS1oZWlnaHQtYmFzZTogICAgICAgICAgICAxLjUgIWRlZmF1bHQ7XG4kbGluZS1oZWlnaHQtc206ICAgICAgICAgICAgICAxLjI1ICFkZWZhdWx0O1xuJGxpbmUtaGVpZ2h0LWxnOiAgICAgICAgICAgICAgMiAhZGVmYXVsdDtcblxuJGgxLWZvbnQtc2l6ZTogICAgICAgICAgICAgICAgJGZvbnQtc2l6ZS1iYXNlICogMi41ICFkZWZhdWx0O1xuJGgyLWZvbnQtc2l6ZTogICAgICAgICAgICAgICAgJGZvbnQtc2l6ZS1iYXNlICogMiAhZGVmYXVsdDtcbiRoMy1mb250LXNpemU6ICAgICAgICAgICAgICAgICRmb250LXNpemUtYmFzZSAqIDEuNzUgIWRlZmF1bHQ7XG4kaDQtZm9udC1zaXplOiAgICAgICAgICAgICAgICAkZm9udC1zaXplLWJhc2UgKiAxLjUgIWRlZmF1bHQ7XG4kaDUtZm9udC1zaXplOiAgICAgICAgICAgICAgICAkZm9udC1zaXplLWJhc2UgKiAxLjI1ICFkZWZhdWx0O1xuJGg2LWZvbnQtc2l6ZTogICAgICAgICAgICAgICAgJGZvbnQtc2l6ZS1iYXNlICFkZWZhdWx0O1xuLy8gc2Nzcy1kb2NzLWVuZCBmb250LXZhcmlhYmxlc1xuXG4vLyBzY3NzLWRvY3Mtc3RhcnQgZm9udC1zaXplc1xuJGZvbnQtc2l6ZXM6IChcbiAgMTogJGgxLWZvbnQtc2l6ZSxcbiAgMjogJGgyLWZvbnQtc2l6ZSxcbiAgMzogJGgzLWZvbnQtc2l6ZSxcbiAgNDogJGg0LWZvbnQtc2l6ZSxcbiAgNTogJGg1LWZvbnQtc2l6ZSxcbiAgNjogJGg2LWZvbnQtc2l6ZVxuKSAhZGVmYXVsdDtcbi8vIHNjc3MtZG9jcy1lbmQgZm9udC1zaXplc1xuXG4vLyBzY3NzLWRvY3Mtc3RhcnQgaGVhZGluZ3MtdmFyaWFibGVzXG4kaGVhZGluZ3MtbWFyZ2luLWJvdHRvbTogICAgICAkc3BhY2VyICogLjUgIWRlZmF1bHQ7XG4kaGVhZGluZ3MtZm9udC1mYW1pbHk6ICAgICAgICBudWxsICFkZWZhdWx0O1xuJGhlYWRpbmdzLWZvbnQtc3R5bGU6ICAgICAgICAgbnVsbCAhZGVmYXVsdDtcbiRoZWFkaW5ncy1mb250LXdlaWdodDogICAgICAgIDUwMCAhZGVmYXVsdDtcbiRoZWFkaW5ncy1saW5lLWhlaWdodDogICAgICAgIDEuMiAhZGVmYXVsdDtcbiRoZWFkaW5ncy1jb2xvcjogICAgICAgICAgICAgIGluaGVyaXQgIWRlZmF1bHQ7XG4vLyBzY3NzLWRvY3MtZW5kIGhlYWRpbmdzLXZhcmlhYmxlc1xuXG4vLyBzY3NzLWRvY3Mtc3RhcnQgZGlzcGxheS1oZWFkaW5nc1xuJGRpc3BsYXktZm9udC1zaXplczogKFxuICAxOiA1cmVtLFxuICAyOiA0LjVyZW0sXG4gIDM6IDRyZW0sXG4gIDQ6IDMuNXJlbSxcbiAgNTogM3JlbSxcbiAgNjogMi41cmVtXG4pICFkZWZhdWx0O1xuXG4kZGlzcGxheS1mb250LWZhbWlseTogbnVsbCAhZGVmYXVsdDtcbiRkaXNwbGF5LWZvbnQtc3R5bGU6ICBudWxsICFkZWZhdWx0O1xuJGRpc3BsYXktZm9udC13ZWlnaHQ6IDMwMCAhZGVmYXVsdDtcbiRkaXNwbGF5LWxpbmUtaGVpZ2h0OiAkaGVhZGluZ3MtbGluZS1oZWlnaHQgIWRlZmF1bHQ7XG4vLyBzY3NzLWRvY3MtZW5kIGRpc3BsYXktaGVhZGluZ3NcblxuLy8gc2Nzcy1kb2NzLXN0YXJ0IHR5cGUtdmFyaWFibGVzXG4kbGVhZC1mb250LXNpemU6ICAgICAgICAgICAgICAkZm9udC1zaXplLWJhc2UgKiAxLjI1ICFkZWZhdWx0O1xuJGxlYWQtZm9udC13ZWlnaHQ6ICAgICAgICAgICAgMzAwICFkZWZhdWx0O1xuXG4kc21hbGwtZm9udC1zaXplOiAgICAgICAgICAgICAuODc1ZW0gIWRlZmF1bHQ7XG5cbiRzdWItc3VwLWZvbnQtc2l6ZTogICAgICAgICAgIC43NWVtICFkZWZhdWx0O1xuXG4vLyBmdXN2LWRpc2FibGVcbiR0ZXh0LW11dGVkOiAgICAgICAgICAgICAgICAgIHZhcigtLSN7JHByZWZpeH1zZWNvbmRhcnktY29sb3IpICFkZWZhdWx0OyAvLyBEZXByZWNhdGVkIGluIDUuMy4wXG4vLyBmdXN2LWVuYWJsZVxuXG4kaW5pdGlhbGlzbS1mb250LXNpemU6ICAgICAgICAkc21hbGwtZm9udC1zaXplICFkZWZhdWx0O1xuXG4kYmxvY2txdW90ZS1tYXJnaW4teTogICAgICAgICAkc3BhY2VyICFkZWZhdWx0O1xuJGJsb2NrcXVvdGUtZm9udC1zaXplOiAgICAgICAgJGZvbnQtc2l6ZS1iYXNlICogMS4yNSAhZGVmYXVsdDtcbiRibG9ja3F1b3RlLWZvb3Rlci1jb2xvcjogICAgICRncmF5LTYwMCAhZGVmYXVsdDtcbiRibG9ja3F1b3RlLWZvb3Rlci1mb250LXNpemU6ICRzbWFsbC1mb250LXNpemUgIWRlZmF1bHQ7XG5cbiRoci1tYXJnaW4teTogICAgICAgICAgICAgICAgICRzcGFjZXIgIWRlZmF1bHQ7XG4kaHItY29sb3I6ICAgICAgICAgICAgICAgICAgICBpbmhlcml0ICFkZWZhdWx0O1xuXG4vLyBmdXN2LWRpc2FibGVcbiRoci1iZy1jb2xvcjogICAgICAgICAgICAgICAgIG51bGwgIWRlZmF1bHQ7IC8vIERlcHJlY2F0ZWQgaW4gdjUuMi4wXG4kaHItaGVpZ2h0OiAgICAgICAgICAgICAgICAgICBudWxsICFkZWZhdWx0OyAvLyBEZXByZWNhdGVkIGluIHY1LjIuMFxuLy8gZnVzdi1lbmFibGVcblxuJGhyLWJvcmRlci1jb2xvcjogICAgICAgICAgICAgbnVsbCAhZGVmYXVsdDsgLy8gQWxsb3dzIGZvciBpbmhlcml0ZWQgY29sb3JzXG4kaHItYm9yZGVyLXdpZHRoOiAgICAgICAgICAgICB2YXIoLS0jeyRwcmVmaXh9Ym9yZGVyLXdpZHRoKSAhZGVmYXVsdDtcbiRoci1vcGFjaXR5OiAgICAgICAgICAgICAgICAgIC4yNSAhZGVmYXVsdDtcblxuLy8gc2Nzcy1kb2NzLXN0YXJ0IHZyLXZhcmlhYmxlc1xuJHZyLWJvcmRlci13aWR0aDogICAgICAgICAgICAgdmFyKC0tI3skcHJlZml4fWJvcmRlci13aWR0aCkgIWRlZmF1bHQ7XG4vLyBzY3NzLWRvY3MtZW5kIHZyLXZhcmlhYmxlc1xuXG4kbGVnZW5kLW1hcmdpbi1ib3R0b206ICAgICAgICAuNXJlbSAhZGVmYXVsdDtcbiRsZWdlbmQtZm9udC1zaXplOiAgICAgICAgICAgIDEuNXJlbSAhZGVmYXVsdDtcbiRsZWdlbmQtZm9udC13ZWlnaHQ6ICAgICAgICAgIG51bGwgIWRlZmF1bHQ7XG5cbiRkdC1mb250LXdlaWdodDogICAgICAgICAgICAgICRmb250LXdlaWdodC1ib2xkICFkZWZhdWx0O1xuXG4kbGlzdC1pbmxpbmUtcGFkZGluZzogICAgICAgICAuNXJlbSAhZGVmYXVsdDtcblxuJG1hcmstcGFkZGluZzogICAgICAgICAgICAgICAgLjE4NzVlbSAhZGVmYXVsdDtcbiRtYXJrLWNvbG9yOiAgICAgICAgICAgICAgICAgICRib2R5LWNvbG9yICFkZWZhdWx0O1xuJG1hcmstYmc6ICAgICAgICAgICAgICAgICAgICAgJHllbGxvdy0xMDAgIWRlZmF1bHQ7XG4vLyBzY3NzLWRvY3MtZW5kIHR5cGUtdmFyaWFibGVzXG5cblxuLy8gVGFibGVzXG4vL1xuLy8gQ3VzdG9taXplcyB0aGUgYC50YWJsZWAgY29tcG9uZW50IHdpdGggYmFzaWMgdmFsdWVzLCBlYWNoIHVzZWQgYWNyb3NzIGFsbCB0YWJsZSB2YXJpYXRpb25zLlxuXG4vLyBzY3NzLWRvY3Mtc3RhcnQgdGFibGUtdmFyaWFibGVzXG4kdGFibGUtY2VsbC1wYWRkaW5nLXk6ICAgICAgICAuNXJlbSAhZGVmYXVsdDtcbiR0YWJsZS1jZWxsLXBhZGRpbmcteDogICAgICAgIC41cmVtICFkZWZhdWx0O1xuJHRhYmxlLWNlbGwtcGFkZGluZy15LXNtOiAgICAgLjI1cmVtICFkZWZhdWx0O1xuJHRhYmxlLWNlbGwtcGFkZGluZy14LXNtOiAgICAgLjI1cmVtICFkZWZhdWx0O1xuXG4kdGFibGUtY2VsbC12ZXJ0aWNhbC1hbGlnbjogICB0b3AgIWRlZmF1bHQ7XG5cbiR0YWJsZS1jb2xvcjogICAgICAgICAgICAgICAgIHZhcigtLSN7JHByZWZpeH1lbXBoYXNpcy1jb2xvcikgIWRlZmF1bHQ7XG4kdGFibGUtYmc6ICAgICAgICAgICAgICAgICAgICB2YXIoLS0jeyRwcmVmaXh9Ym9keS1iZykgIWRlZmF1bHQ7XG4kdGFibGUtYWNjZW50LWJnOiAgICAgICAgICAgICB0cmFuc3BhcmVudCAhZGVmYXVsdDtcblxuJHRhYmxlLXRoLWZvbnQtd2VpZ2h0OiAgICAgICAgbnVsbCAhZGVmYXVsdDtcblxuJHRhYmxlLXN0cmlwZWQtY29sb3I6ICAgICAgICAgJHRhYmxlLWNvbG9yICFkZWZhdWx0O1xuJHRhYmxlLXN0cmlwZWQtYmctZmFjdG9yOiAgICAgLjA1ICFkZWZhdWx0O1xuJHRhYmxlLXN0cmlwZWQtYmc6ICAgICAgICAgICAgcmdiYSh2YXIoLS0jeyRwcmVmaXh9ZW1waGFzaXMtY29sb3ItcmdiKSwgJHRhYmxlLXN0cmlwZWQtYmctZmFjdG9yKSAhZGVmYXVsdDtcblxuJHRhYmxlLWFjdGl2ZS1jb2xvcjogICAgICAgICAgJHRhYmxlLWNvbG9yICFkZWZhdWx0O1xuJHRhYmxlLWFjdGl2ZS1iZy1mYWN0b3I6ICAgICAgLjEgIWRlZmF1bHQ7XG4kdGFibGUtYWN0aXZlLWJnOiAgICAgICAgICAgICByZ2JhKHZhcigtLSN7JHByZWZpeH1lbXBoYXNpcy1jb2xvci1yZ2IpLCAkdGFibGUtYWN0aXZlLWJnLWZhY3RvcikgIWRlZmF1bHQ7XG5cbiR0YWJsZS1ob3Zlci1jb2xvcjogICAgICAgICAgICR0YWJsZS1jb2xvciAhZGVmYXVsdDtcbiR0YWJsZS1ob3Zlci1iZy1mYWN0b3I6ICAgICAgIC4wNzUgIWRlZmF1bHQ7XG4kdGFibGUtaG92ZXItYmc6ICAgICAgICAgICAgICByZ2JhKHZhcigtLSN7JHByZWZpeH1lbXBoYXNpcy1jb2xvci1yZ2IpLCAkdGFibGUtaG92ZXItYmctZmFjdG9yKSAhZGVmYXVsdDtcblxuJHRhYmxlLWJvcmRlci1mYWN0b3I6ICAgICAgICAgLjIgIWRlZmF1bHQ7XG4kdGFibGUtYm9yZGVyLXdpZHRoOiAgICAgICAgICB2YXIoLS0jeyRwcmVmaXh9Ym9yZGVyLXdpZHRoKSAhZGVmYXVsdDtcbiR0YWJsZS1ib3JkZXItY29sb3I6ICAgICAgICAgIHZhcigtLSN7JHByZWZpeH1ib3JkZXItY29sb3IpICFkZWZhdWx0O1xuXG4kdGFibGUtc3RyaXBlZC1vcmRlcjogICAgICAgICBvZGQgIWRlZmF1bHQ7XG4kdGFibGUtc3RyaXBlZC1jb2x1bW5zLW9yZGVyOiBldmVuICFkZWZhdWx0O1xuXG4kdGFibGUtZ3JvdXAtc2VwYXJhdG9yLWNvbG9yOiBjdXJyZW50Y29sb3IgIWRlZmF1bHQ7XG5cbiR0YWJsZS1jYXB0aW9uLWNvbG9yOiAgICAgICAgIHZhcigtLSN7JHByZWZpeH1zZWNvbmRhcnktY29sb3IpICFkZWZhdWx0O1xuXG4kdGFibGUtYmctc2NhbGU6ICAgICAgICAgICAgICAtODAlICFkZWZhdWx0O1xuLy8gc2Nzcy1kb2NzLWVuZCB0YWJsZS12YXJpYWJsZXNcblxuLy8gc2Nzcy1kb2NzLXN0YXJ0IHRhYmxlLWxvb3BcbiR0YWJsZS12YXJpYW50czogKFxuICBcInByaW1hcnlcIjogICAgc2hpZnQtY29sb3IoJHByaW1hcnksICR0YWJsZS1iZy1zY2FsZSksXG4gIFwic2Vjb25kYXJ5XCI6ICBzaGlmdC1jb2xvcigkc2Vjb25kYXJ5LCAkdGFibGUtYmctc2NhbGUpLFxuICBcInN1Y2Nlc3NcIjogICAgc2hpZnQtY29sb3IoJHN1Y2Nlc3MsICR0YWJsZS1iZy1zY2FsZSksXG4gIFwiaW5mb1wiOiAgICAgICBzaGlmdC1jb2xvcigkaW5mbywgJHRhYmxlLWJnLXNjYWxlKSxcbiAgXCJ3YXJuaW5nXCI6ICAgIHNoaWZ0LWNvbG9yKCR3YXJuaW5nLCAkdGFibGUtYmctc2NhbGUpLFxuICBcImRhbmdlclwiOiAgICAgc2hpZnQtY29sb3IoJGRhbmdlciwgJHRhYmxlLWJnLXNjYWxlKSxcbiAgXCJsaWdodFwiOiAgICAgICRsaWdodCxcbiAgXCJkYXJrXCI6ICAgICAgICRkYXJrLFxuKSAhZGVmYXVsdDtcbi8vIHNjc3MtZG9jcy1lbmQgdGFibGUtbG9vcFxuXG5cbi8vIEJ1dHRvbnMgKyBGb3Jtc1xuLy9cbi8vIFNoYXJlZCB2YXJpYWJsZXMgdGhhdCBhcmUgcmVhc3NpZ25lZCB0byBgJGlucHV0LWAgYW5kIGAkYnRuLWAgc3BlY2lmaWMgdmFyaWFibGVzLlxuXG4vLyBzY3NzLWRvY3Mtc3RhcnQgaW5wdXQtYnRuLXZhcmlhYmxlc1xuJGlucHV0LWJ0bi1wYWRkaW5nLXk6ICAgICAgICAgLjM3NXJlbSAhZGVmYXVsdDtcbiRpbnB1dC1idG4tcGFkZGluZy14OiAgICAgICAgIC43NXJlbSAhZGVmYXVsdDtcbiRpbnB1dC1idG4tZm9udC1mYW1pbHk6ICAgICAgIG51bGwgIWRlZmF1bHQ7XG4kaW5wdXQtYnRuLWZvbnQtc2l6ZTogICAgICAgICAkZm9udC1zaXplLWJhc2UgIWRlZmF1bHQ7XG4kaW5wdXQtYnRuLWxpbmUtaGVpZ2h0OiAgICAgICAkbGluZS1oZWlnaHQtYmFzZSAhZGVmYXVsdDtcblxuJGlucHV0LWJ0bi1mb2N1cy13aWR0aDogICAgICAgICAkZm9jdXMtcmluZy13aWR0aCAhZGVmYXVsdDtcbiRpbnB1dC1idG4tZm9jdXMtY29sb3Itb3BhY2l0eTogJGZvY3VzLXJpbmctb3BhY2l0eSAhZGVmYXVsdDtcbiRpbnB1dC1idG4tZm9jdXMtY29sb3I6ICAgICAgICAgJGZvY3VzLXJpbmctY29sb3IgIWRlZmF1bHQ7XG4kaW5wdXQtYnRuLWZvY3VzLWJsdXI6ICAgICAgICAgICRmb2N1cy1yaW5nLWJsdXIgIWRlZmF1bHQ7XG4kaW5wdXQtYnRuLWZvY3VzLWJveC1zaGFkb3c6ICAgICRmb2N1cy1yaW5nLWJveC1zaGFkb3cgIWRlZmF1bHQ7XG5cbiRpbnB1dC1idG4tcGFkZGluZy15LXNtOiAgICAgIC4yNXJlbSAhZGVmYXVsdDtcbiRpbnB1dC1idG4tcGFkZGluZy14LXNtOiAgICAgIC41cmVtICFkZWZhdWx0O1xuJGlucHV0LWJ0bi1mb250LXNpemUtc206ICAgICAgJGZvbnQtc2l6ZS1zbSAhZGVmYXVsdDtcblxuJGlucHV0LWJ0bi1wYWRkaW5nLXktbGc6ICAgICAgLjVyZW0gIWRlZmF1bHQ7XG4kaW5wdXQtYnRuLXBhZGRpbmcteC1sZzogICAgICAxcmVtICFkZWZhdWx0O1xuJGlucHV0LWJ0bi1mb250LXNpemUtbGc6ICAgICAgJGZvbnQtc2l6ZS1sZyAhZGVmYXVsdDtcblxuJGlucHV0LWJ0bi1ib3JkZXItd2lkdGg6ICAgICAgdmFyKC0tI3skcHJlZml4fWJvcmRlci13aWR0aCkgIWRlZmF1bHQ7XG4vLyBzY3NzLWRvY3MtZW5kIGlucHV0LWJ0bi12YXJpYWJsZXNcblxuXG4vLyBCdXR0b25zXG4vL1xuLy8gRm9yIGVhY2ggb2YgQm9vdHN0cmFwJ3MgYnV0dG9ucywgZGVmaW5lIHRleHQsIGJhY2tncm91bmQsIGFuZCBib3JkZXIgY29sb3IuXG5cbi8vIHNjc3MtZG9jcy1zdGFydCBidG4tdmFyaWFibGVzXG4kYnRuLWNvbG9yOiAgICAgICAgICAgICAgICAgICB2YXIoLS0jeyRwcmVmaXh9Ym9keS1jb2xvcikgIWRlZmF1bHQ7XG4kYnRuLXBhZGRpbmcteTogICAgICAgICAgICAgICAkaW5wdXQtYnRuLXBhZGRpbmcteSAhZGVmYXVsdDtcbiRidG4tcGFkZGluZy14OiAgICAgICAgICAgICAgICRpbnB1dC1idG4tcGFkZGluZy14ICFkZWZhdWx0O1xuJGJ0bi1mb250LWZhbWlseTogICAgICAgICAgICAgJGlucHV0LWJ0bi1mb250LWZhbWlseSAhZGVmYXVsdDtcbiRidG4tZm9udC1zaXplOiAgICAgICAgICAgICAgICRpbnB1dC1idG4tZm9udC1zaXplICFkZWZhdWx0O1xuJGJ0bi1saW5lLWhlaWdodDogICAgICAgICAgICAgJGlucHV0LWJ0bi1saW5lLWhlaWdodCAhZGVmYXVsdDtcbiRidG4td2hpdGUtc3BhY2U6ICAgICAgICAgICAgIG51bGwgIWRlZmF1bHQ7IC8vIFNldCB0byBgbm93cmFwYCB0byBwcmV2ZW50IHRleHQgd3JhcHBpbmdcblxuJGJ0bi1wYWRkaW5nLXktc206ICAgICAgICAgICAgJGlucHV0LWJ0bi1wYWRkaW5nLXktc20gIWRlZmF1bHQ7XG4kYnRuLXBhZGRpbmcteC1zbTogICAgICAgICAgICAkaW5wdXQtYnRuLXBhZGRpbmcteC1zbSAhZGVmYXVsdDtcbiRidG4tZm9udC1zaXplLXNtOiAgICAgICAgICAgICRpbnB1dC1idG4tZm9udC1zaXplLXNtICFkZWZhdWx0O1xuXG4kYnRuLXBhZGRpbmcteS1sZzogICAgICAgICAgICAkaW5wdXQtYnRuLXBhZGRpbmcteS1sZyAhZGVmYXVsdDtcbiRidG4tcGFkZGluZy14LWxnOiAgICAgICAgICAgICRpbnB1dC1idG4tcGFkZGluZy14LWxnICFkZWZhdWx0O1xuJGJ0bi1mb250LXNpemUtbGc6ICAgICAgICAgICAgJGlucHV0LWJ0bi1mb250LXNpemUtbGcgIWRlZmF1bHQ7XG5cbiRidG4tYm9yZGVyLXdpZHRoOiAgICAgICAgICAgICRpbnB1dC1idG4tYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xuXG4kYnRuLWZvbnQtd2VpZ2h0OiAgICAgICAgICAgICAkZm9udC13ZWlnaHQtbm9ybWFsICFkZWZhdWx0O1xuJGJ0bi1ib3gtc2hhZG93OiAgICAgICAgICAgICAgaW5zZXQgMCAxcHggMCByZ2JhKCR3aGl0ZSwgLjE1KSwgMCAxcHggMXB4IHJnYmEoJGJsYWNrLCAuMDc1KSAhZGVmYXVsdDtcbiRidG4tZm9jdXMtd2lkdGg6ICAgICAgICAgICAgICRpbnB1dC1idG4tZm9jdXMtd2lkdGggIWRlZmF1bHQ7XG4kYnRuLWZvY3VzLWJveC1zaGFkb3c6ICAgICAgICAkaW5wdXQtYnRuLWZvY3VzLWJveC1zaGFkb3cgIWRlZmF1bHQ7XG4kYnRuLWRpc2FibGVkLW9wYWNpdHk6ICAgICAgICAuNjUgIWRlZmF1bHQ7XG4kYnRuLWFjdGl2ZS1ib3gtc2hhZG93OiAgICAgICBpbnNldCAwIDNweCA1cHggcmdiYSgkYmxhY2ssIC4xMjUpICFkZWZhdWx0O1xuXG4kYnRuLWxpbmstY29sb3I6ICAgICAgICAgICAgICB2YXIoLS0jeyRwcmVmaXh9bGluay1jb2xvcikgIWRlZmF1bHQ7XG4kYnRuLWxpbmstaG92ZXItY29sb3I6ICAgICAgICB2YXIoLS0jeyRwcmVmaXh9bGluay1ob3Zlci1jb2xvcikgIWRlZmF1bHQ7XG4kYnRuLWxpbmstZGlzYWJsZWQtY29sb3I6ICAgICAkZ3JheS02MDAgIWRlZmF1bHQ7XG4kYnRuLWxpbmstZm9jdXMtc2hhZG93LXJnYjogICB0by1yZ2IobWl4KGNvbG9yLWNvbnRyYXN0KCRsaW5rLWNvbG9yKSwgJGxpbmstY29sb3IsIDE1JSkpICFkZWZhdWx0O1xuXG4vLyBBbGxvd3MgZm9yIGN1c3RvbWl6aW5nIGJ1dHRvbiByYWRpdXMgaW5kZXBlbmRlbnRseSBmcm9tIGdsb2JhbCBib3JkZXIgcmFkaXVzXG4kYnRuLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICB2YXIoLS0jeyRwcmVmaXh9Ym9yZGVyLXJhZGl1cykgIWRlZmF1bHQ7XG4kYnRuLWJvcmRlci1yYWRpdXMtc206ICAgICAgICB2YXIoLS0jeyRwcmVmaXh9Ym9yZGVyLXJhZGl1cy1zbSkgIWRlZmF1bHQ7XG4kYnRuLWJvcmRlci1yYWRpdXMtbGc6ICAgICAgICB2YXIoLS0jeyRwcmVmaXh9Ym9yZGVyLXJhZGl1cy1sZykgIWRlZmF1bHQ7XG5cbiRidG4tdHJhbnNpdGlvbjogICAgICAgICAgICAgIGNvbG9yIC4xNXMgZWFzZS1pbi1vdXQsIGJhY2tncm91bmQtY29sb3IgLjE1cyBlYXNlLWluLW91dCwgYm9yZGVyLWNvbG9yIC4xNXMgZWFzZS1pbi1vdXQsIGJveC1zaGFkb3cgLjE1cyBlYXNlLWluLW91dCAhZGVmYXVsdDtcblxuJGJ0bi1ob3Zlci1iZy1zaGFkZS1hbW91bnQ6ICAgICAgIDE1JSAhZGVmYXVsdDtcbiRidG4taG92ZXItYmctdGludC1hbW91bnQ6ICAgICAgICAxNSUgIWRlZmF1bHQ7XG4kYnRuLWhvdmVyLWJvcmRlci1zaGFkZS1hbW91bnQ6ICAgMjAlICFkZWZhdWx0O1xuJGJ0bi1ob3Zlci1ib3JkZXItdGludC1hbW91bnQ6ICAgIDEwJSAhZGVmYXVsdDtcbiRidG4tYWN0aXZlLWJnLXNoYWRlLWFtb3VudDogICAgICAyMCUgIWRlZmF1bHQ7XG4kYnRuLWFjdGl2ZS1iZy10aW50LWFtb3VudDogICAgICAgMjAlICFkZWZhdWx0O1xuJGJ0bi1hY3RpdmUtYm9yZGVyLXNoYWRlLWFtb3VudDogIDI1JSAhZGVmYXVsdDtcbiRidG4tYWN0aXZlLWJvcmRlci10aW50LWFtb3VudDogICAxMCUgIWRlZmF1bHQ7XG4vLyBzY3NzLWRvY3MtZW5kIGJ0bi12YXJpYWJsZXNcblxuXG4vLyBGb3Jtc1xuXG4vLyBzY3NzLWRvY3Mtc3RhcnQgZm9ybS10ZXh0LXZhcmlhYmxlc1xuJGZvcm0tdGV4dC1tYXJnaW4tdG9wOiAgICAgICAgICAgICAgICAgIC4yNXJlbSAhZGVmYXVsdDtcbiRmb3JtLXRleHQtZm9udC1zaXplOiAgICAgICAgICAgICAgICAgICAkc21hbGwtZm9udC1zaXplICFkZWZhdWx0O1xuJGZvcm0tdGV4dC1mb250LXN0eWxlOiAgICAgICAgICAgICAgICAgIG51bGwgIWRlZmF1bHQ7XG4kZm9ybS10ZXh0LWZvbnQtd2VpZ2h0OiAgICAgICAgICAgICAgICAgbnVsbCAhZGVmYXVsdDtcbiRmb3JtLXRleHQtY29sb3I6ICAgICAgICAgICAgICAgICAgICAgICB2YXIoLS0jeyRwcmVmaXh9c2Vjb25kYXJ5LWNvbG9yKSAhZGVmYXVsdDtcbi8vIHNjc3MtZG9jcy1lbmQgZm9ybS10ZXh0LXZhcmlhYmxlc1xuXG4vLyBzY3NzLWRvY3Mtc3RhcnQgZm9ybS1sYWJlbC12YXJpYWJsZXNcbiRmb3JtLWxhYmVsLW1hcmdpbi1ib3R0b206ICAgICAgICAgICAgICAuNXJlbSAhZGVmYXVsdDtcbiRmb3JtLWxhYmVsLWZvbnQtc2l6ZTogICAgICAgICAgICAgICAgICBudWxsICFkZWZhdWx0O1xuJGZvcm0tbGFiZWwtZm9udC1zdHlsZTogICAgICAgICAgICAgICAgIG51bGwgIWRlZmF1bHQ7XG4kZm9ybS1sYWJlbC1mb250LXdlaWdodDogICAgICAgICAgICAgICAgbnVsbCAhZGVmYXVsdDtcbiRmb3JtLWxhYmVsLWNvbG9yOiAgICAgICAgICAgICAgICAgICAgICBudWxsICFkZWZhdWx0O1xuLy8gc2Nzcy1kb2NzLWVuZCBmb3JtLWxhYmVsLXZhcmlhYmxlc1xuXG4vLyBzY3NzLWRvY3Mtc3RhcnQgZm9ybS1pbnB1dC12YXJpYWJsZXNcbiRpbnB1dC1wYWRkaW5nLXk6ICAgICAgICAgICAgICAgICAgICAgICAkaW5wdXQtYnRuLXBhZGRpbmcteSAhZGVmYXVsdDtcbiRpbnB1dC1wYWRkaW5nLXg6ICAgICAgICAgICAgICAgICAgICAgICAkaW5wdXQtYnRuLXBhZGRpbmcteCAhZGVmYXVsdDtcbiRpbnB1dC1mb250LWZhbWlseTogICAgICAgICAgICAgICAgICAgICAkaW5wdXQtYnRuLWZvbnQtZmFtaWx5ICFkZWZhdWx0O1xuJGlucHV0LWZvbnQtc2l6ZTogICAgICAgICAgICAgICAgICAgICAgICRpbnB1dC1idG4tZm9udC1zaXplICFkZWZhdWx0O1xuJGlucHV0LWZvbnQtd2VpZ2h0OiAgICAgICAgICAgICAgICAgICAgICRmb250LXdlaWdodC1iYXNlICFkZWZhdWx0O1xuJGlucHV0LWxpbmUtaGVpZ2h0OiAgICAgICAgICAgICAgICAgICAgICRpbnB1dC1idG4tbGluZS1oZWlnaHQgIWRlZmF1bHQ7XG5cbiRpbnB1dC1wYWRkaW5nLXktc206ICAgICAgICAgICAgICAgICAgICAkaW5wdXQtYnRuLXBhZGRpbmcteS1zbSAhZGVmYXVsdDtcbiRpbnB1dC1wYWRkaW5nLXgtc206ICAgICAgICAgICAgICAgICAgICAkaW5wdXQtYnRuLXBhZGRpbmcteC1zbSAhZGVmYXVsdDtcbiRpbnB1dC1mb250LXNpemUtc206ICAgICAgICAgICAgICAgICAgICAkaW5wdXQtYnRuLWZvbnQtc2l6ZS1zbSAhZGVmYXVsdDtcblxuJGlucHV0LXBhZGRpbmcteS1sZzogICAgICAgICAgICAgICAgICAgICRpbnB1dC1idG4tcGFkZGluZy15LWxnICFkZWZhdWx0O1xuJGlucHV0LXBhZGRpbmcteC1sZzogICAgICAgICAgICAgICAgICAgICRpbnB1dC1idG4tcGFkZGluZy14LWxnICFkZWZhdWx0O1xuJGlucHV0LWZvbnQtc2l6ZS1sZzogICAgICAgICAgICAgICAgICAgICRpbnB1dC1idG4tZm9udC1zaXplLWxnICFkZWZhdWx0O1xuXG4kaW5wdXQtYmc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyKC0tI3skcHJlZml4fWJvZHktYmcpICFkZWZhdWx0O1xuJGlucHV0LWRpc2FibGVkLWNvbG9yOiAgICAgICAgICAgICAgICAgIG51bGwgIWRlZmF1bHQ7XG4kaW5wdXQtZGlzYWJsZWQtYmc6ICAgICAgICAgICAgICAgICAgICAgdmFyKC0tI3skcHJlZml4fXNlY29uZGFyeS1iZykgIWRlZmF1bHQ7XG4kaW5wdXQtZGlzYWJsZWQtYm9yZGVyLWNvbG9yOiAgICAgICAgICAgbnVsbCAhZGVmYXVsdDtcblxuJGlucHV0LWNvbG9yOiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcigtLSN7JHByZWZpeH1ib2R5LWNvbG9yKSAhZGVmYXVsdDtcbiRpbnB1dC1ib3JkZXItY29sb3I6ICAgICAgICAgICAgICAgICAgICB2YXIoLS0jeyRwcmVmaXh9Ym9yZGVyLWNvbG9yKSAhZGVmYXVsdDtcbiRpbnB1dC1ib3JkZXItd2lkdGg6ICAgICAgICAgICAgICAgICAgICAkaW5wdXQtYnRuLWJvcmRlci13aWR0aCAhZGVmYXVsdDtcbiRpbnB1dC1ib3gtc2hhZG93OiAgICAgICAgICAgICAgICAgICAgICB2YXIoLS0jeyRwcmVmaXh9Ym94LXNoYWRvdy1pbnNldCkgIWRlZmF1bHQ7XG5cbiRpbnB1dC1ib3JkZXItcmFkaXVzOiAgICAgICAgICAgICAgICAgICB2YXIoLS0jeyRwcmVmaXh9Ym9yZGVyLXJhZGl1cykgIWRlZmF1bHQ7XG4kaW5wdXQtYm9yZGVyLXJhZGl1cy1zbTogICAgICAgICAgICAgICAgdmFyKC0tI3skcHJlZml4fWJvcmRlci1yYWRpdXMtc20pICFkZWZhdWx0O1xuJGlucHV0LWJvcmRlci1yYWRpdXMtbGc6ICAgICAgICAgICAgICAgIHZhcigtLSN7JHByZWZpeH1ib3JkZXItcmFkaXVzLWxnKSAhZGVmYXVsdDtcblxuJGlucHV0LWZvY3VzLWJnOiAgICAgICAgICAgICAgICAgICAgICAgICRpbnB1dC1iZyAhZGVmYXVsdDtcbiRpbnB1dC1mb2N1cy1ib3JkZXItY29sb3I6ICAgICAgICAgICAgICB0aW50LWNvbG9yKCRjb21wb25lbnQtYWN0aXZlLWJnLCA1MCUpICFkZWZhdWx0O1xuJGlucHV0LWZvY3VzLWNvbG9yOiAgICAgICAgICAgICAgICAgICAgICRpbnB1dC1jb2xvciAhZGVmYXVsdDtcbiRpbnB1dC1mb2N1cy13aWR0aDogICAgICAgICAgICAgICAgICAgICAkaW5wdXQtYnRuLWZvY3VzLXdpZHRoICFkZWZhdWx0O1xuJGlucHV0LWZvY3VzLWJveC1zaGFkb3c6ICAgICAgICAgICAgICAgICRpbnB1dC1idG4tZm9jdXMtYm94LXNoYWRvdyAhZGVmYXVsdDtcblxuJGlucHV0LXBsYWNlaG9sZGVyLWNvbG9yOiAgICAgICAgICAgICAgIHZhcigtLSN7JHByZWZpeH1zZWNvbmRhcnktY29sb3IpICFkZWZhdWx0O1xuJGlucHV0LXBsYWludGV4dC1jb2xvcjogICAgICAgICAgICAgICAgIHZhcigtLSN7JHByZWZpeH1ib2R5LWNvbG9yKSAhZGVmYXVsdDtcblxuJGlucHV0LWhlaWdodC1ib3JkZXI6ICAgICAgICAgICAgICAgICAgIGNhbGMoI3skaW5wdXQtYm9yZGVyLXdpZHRofSAqIDIpICFkZWZhdWx0OyAvLyBzdHlsZWxpbnQtZGlzYWJsZS1saW5lIGZ1bmN0aW9uLWRpc2FsbG93ZWQtbGlzdFxuXG4kaW5wdXQtaGVpZ2h0LWlubmVyOiAgICAgICAgICAgICAgICAgICAgYWRkKCRpbnB1dC1saW5lLWhlaWdodCAqIDFlbSwgJGlucHV0LXBhZGRpbmcteSAqIDIpICFkZWZhdWx0O1xuJGlucHV0LWhlaWdodC1pbm5lci1oYWxmOiAgICAgICAgICAgICAgIGFkZCgkaW5wdXQtbGluZS1oZWlnaHQgKiAuNWVtLCAkaW5wdXQtcGFkZGluZy15KSAhZGVmYXVsdDtcbiRpbnB1dC1oZWlnaHQtaW5uZXItcXVhcnRlcjogICAgICAgICAgICBhZGQoJGlucHV0LWxpbmUtaGVpZ2h0ICogLjI1ZW0sICRpbnB1dC1wYWRkaW5nLXkgKiAuNSkgIWRlZmF1bHQ7XG5cbiRpbnB1dC1oZWlnaHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICBhZGQoJGlucHV0LWxpbmUtaGVpZ2h0ICogMWVtLCBhZGQoJGlucHV0LXBhZGRpbmcteSAqIDIsICRpbnB1dC1oZWlnaHQtYm9yZGVyLCBmYWxzZSkpICFkZWZhdWx0O1xuJGlucHV0LWhlaWdodC1zbTogICAgICAgICAgICAgICAgICAgICAgIGFkZCgkaW5wdXQtbGluZS1oZWlnaHQgKiAxZW0sIGFkZCgkaW5wdXQtcGFkZGluZy15LXNtICogMiwgJGlucHV0LWhlaWdodC1ib3JkZXIsIGZhbHNlKSkgIWRlZmF1bHQ7XG4kaW5wdXQtaGVpZ2h0LWxnOiAgICAgICAgICAgICAgICAgICAgICAgYWRkKCRpbnB1dC1saW5lLWhlaWdodCAqIDFlbSwgYWRkKCRpbnB1dC1wYWRkaW5nLXktbGcgKiAyLCAkaW5wdXQtaGVpZ2h0LWJvcmRlciwgZmFsc2UpKSAhZGVmYXVsdDtcblxuJGlucHV0LXRyYW5zaXRpb246ICAgICAgICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvciAuMTVzIGVhc2UtaW4tb3V0LCBib3gtc2hhZG93IC4xNXMgZWFzZS1pbi1vdXQgIWRlZmF1bHQ7XG5cbiRmb3JtLWNvbG9yLXdpZHRoOiAgICAgICAgICAgICAgICAgICAgICAzcmVtICFkZWZhdWx0O1xuLy8gc2Nzcy1kb2NzLWVuZCBmb3JtLWlucHV0LXZhcmlhYmxlc1xuXG4vLyBzY3NzLWRvY3Mtc3RhcnQgZm9ybS1jaGVjay12YXJpYWJsZXNcbiRmb3JtLWNoZWNrLWlucHV0LXdpZHRoOiAgICAgICAgICAgICAgICAgIDFlbSAhZGVmYXVsdDtcbiRmb3JtLWNoZWNrLW1pbi1oZWlnaHQ6ICAgICAgICAgICAgICAgICAgICRmb250LXNpemUtYmFzZSAqICRsaW5lLWhlaWdodC1iYXNlICFkZWZhdWx0O1xuJGZvcm0tY2hlY2stcGFkZGluZy1zdGFydDogICAgICAgICAgICAgICAgJGZvcm0tY2hlY2staW5wdXQtd2lkdGggKyAuNWVtICFkZWZhdWx0O1xuJGZvcm0tY2hlY2stbWFyZ2luLWJvdHRvbTogICAgICAgICAgICAgICAgLjEyNXJlbSAhZGVmYXVsdDtcbiRmb3JtLWNoZWNrLWxhYmVsLWNvbG9yOiAgICAgICAgICAgICAgICAgIG51bGwgIWRlZmF1bHQ7XG4kZm9ybS1jaGVjay1sYWJlbC1jdXJzb3I6ICAgICAgICAgICAgICAgICBudWxsICFkZWZhdWx0O1xuJGZvcm0tY2hlY2stdHJhbnNpdGlvbjogICAgICAgICAgICAgICAgICAgbnVsbCAhZGVmYXVsdDtcblxuJGZvcm0tY2hlY2staW5wdXQtYWN0aXZlLWZpbHRlcjogICAgICAgICAgYnJpZ2h0bmVzcyg5MCUpICFkZWZhdWx0O1xuXG4kZm9ybS1jaGVjay1pbnB1dC1iZzogICAgICAgICAgICAgICAgICAgICAkaW5wdXQtYmcgIWRlZmF1bHQ7XG4kZm9ybS1jaGVjay1pbnB1dC1ib3JkZXI6ICAgICAgICAgICAgICAgICB2YXIoLS0jeyRwcmVmaXh9Ym9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS0jeyRwcmVmaXh9Ym9yZGVyLWNvbG9yKSAhZGVmYXVsdDtcbiRmb3JtLWNoZWNrLWlucHV0LWJvcmRlci1yYWRpdXM6ICAgICAgICAgIC4yNWVtICFkZWZhdWx0O1xuJGZvcm0tY2hlY2stcmFkaW8tYm9yZGVyLXJhZGl1czogICAgICAgICAgNTAlICFkZWZhdWx0O1xuJGZvcm0tY2hlY2staW5wdXQtZm9jdXMtYm9yZGVyOiAgICAgICAgICAgJGlucHV0LWZvY3VzLWJvcmRlci1jb2xvciAhZGVmYXVsdDtcbiRmb3JtLWNoZWNrLWlucHV0LWZvY3VzLWJveC1zaGFkb3c6ICAgICAgICRmb2N1cy1yaW5nLWJveC1zaGFkb3cgIWRlZmF1bHQ7XG5cbiRmb3JtLWNoZWNrLWlucHV0LWNoZWNrZWQtY29sb3I6ICAgICAgICAgICRjb21wb25lbnQtYWN0aXZlLWNvbG9yICFkZWZhdWx0O1xuJGZvcm0tY2hlY2staW5wdXQtY2hlY2tlZC1iZy1jb2xvcjogICAgICAgJGNvbXBvbmVudC1hY3RpdmUtYmcgIWRlZmF1bHQ7XG4kZm9ybS1jaGVjay1pbnB1dC1jaGVja2VkLWJvcmRlci1jb2xvcjogICAkZm9ybS1jaGVjay1pbnB1dC1jaGVja2VkLWJnLWNvbG9yICFkZWZhdWx0O1xuJGZvcm0tY2hlY2staW5wdXQtY2hlY2tlZC1iZy1pbWFnZTogICAgICAgdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLDxzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgMjAgMjAnPjxwYXRoIGZpbGw9J25vbmUnIHN0cm9rZT0nI3skZm9ybS1jaGVjay1pbnB1dC1jaGVja2VkLWNvbG9yfScgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyBzdHJva2Utd2lkdGg9JzMnIGQ9J202IDEwIDMgMyA2LTYnLz48L3N2Zz5cIikgIWRlZmF1bHQ7XG4kZm9ybS1jaGVjay1yYWRpby1jaGVja2VkLWJnLWltYWdlOiAgICAgICB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsPHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9Jy00IC00IDggOCc+PGNpcmNsZSByPScyJyBmaWxsPScjeyRmb3JtLWNoZWNrLWlucHV0LWNoZWNrZWQtY29sb3J9Jy8+PC9zdmc+XCIpICFkZWZhdWx0O1xuXG4kZm9ybS1jaGVjay1pbnB1dC1pbmRldGVybWluYXRlLWNvbG9yOiAgICAgICAgICAkY29tcG9uZW50LWFjdGl2ZS1jb2xvciAhZGVmYXVsdDtcbiRmb3JtLWNoZWNrLWlucHV0LWluZGV0ZXJtaW5hdGUtYmctY29sb3I6ICAgICAgICRjb21wb25lbnQtYWN0aXZlLWJnICFkZWZhdWx0O1xuJGZvcm0tY2hlY2staW5wdXQtaW5kZXRlcm1pbmF0ZS1ib3JkZXItY29sb3I6ICAgJGZvcm0tY2hlY2staW5wdXQtaW5kZXRlcm1pbmF0ZS1iZy1jb2xvciAhZGVmYXVsdDtcbiRmb3JtLWNoZWNrLWlucHV0LWluZGV0ZXJtaW5hdGUtYmctaW1hZ2U6ICAgICAgIHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCw8c3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nMCAwIDIwIDIwJz48cGF0aCBmaWxsPSdub25lJyBzdHJva2U9JyN7JGZvcm0tY2hlY2staW5wdXQtaW5kZXRlcm1pbmF0ZS1jb2xvcn0nIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLXdpZHRoPSczJyBkPSdNNiAxMGg4Jy8+PC9zdmc+XCIpICFkZWZhdWx0O1xuXG4kZm9ybS1jaGVjay1pbnB1dC1kaXNhYmxlZC1vcGFjaXR5OiAgICAgICAgLjUgIWRlZmF1bHQ7XG4kZm9ybS1jaGVjay1sYWJlbC1kaXNhYmxlZC1vcGFjaXR5OiAgICAgICAgJGZvcm0tY2hlY2staW5wdXQtZGlzYWJsZWQtb3BhY2l0eSAhZGVmYXVsdDtcbiRmb3JtLWNoZWNrLWJ0bi1jaGVjay1kaXNhYmxlZC1vcGFjaXR5OiAgICAkYnRuLWRpc2FibGVkLW9wYWNpdHkgIWRlZmF1bHQ7XG5cbiRmb3JtLWNoZWNrLWlubGluZS1tYXJnaW4tZW5kOiAgICAxcmVtICFkZWZhdWx0O1xuLy8gc2Nzcy1kb2NzLWVuZCBmb3JtLWNoZWNrLXZhcmlhYmxlc1xuXG4vLyBzY3NzLWRvY3Mtc3RhcnQgZm9ybS1zd2l0Y2gtdmFyaWFibGVzXG4kZm9ybS1zd2l0Y2gtY29sb3I6ICAgICAgICAgICAgICAgcmdiYSgkYmxhY2ssIC4yNSkgIWRlZmF1bHQ7XG4kZm9ybS1zd2l0Y2gtd2lkdGg6ICAgICAgICAgICAgICAgMmVtICFkZWZhdWx0O1xuJGZvcm0tc3dpdGNoLXBhZGRpbmctc3RhcnQ6ICAgICAgICRmb3JtLXN3aXRjaC13aWR0aCArIC41ZW0gIWRlZmF1bHQ7XG4kZm9ybS1zd2l0Y2gtYmctaW1hZ2U6ICAgICAgICAgICAgdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLDxzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PSctNCAtNCA4IDgnPjxjaXJjbGUgcj0nMycgZmlsbD0nI3skZm9ybS1zd2l0Y2gtY29sb3J9Jy8+PC9zdmc+XCIpICFkZWZhdWx0O1xuJGZvcm0tc3dpdGNoLWJvcmRlci1yYWRpdXM6ICAgICAgICRmb3JtLXN3aXRjaC13aWR0aCAhZGVmYXVsdDtcbiRmb3JtLXN3aXRjaC10cmFuc2l0aW9uOiAgICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uIC4xNXMgZWFzZS1pbi1vdXQgIWRlZmF1bHQ7XG5cbiRmb3JtLXN3aXRjaC1mb2N1cy1jb2xvcjogICAgICAgICAkaW5wdXQtZm9jdXMtYm9yZGVyLWNvbG9yICFkZWZhdWx0O1xuJGZvcm0tc3dpdGNoLWZvY3VzLWJnLWltYWdlOiAgICAgIHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCw8c3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nLTQgLTQgOCA4Jz48Y2lyY2xlIHI9JzMnIGZpbGw9JyN7JGZvcm0tc3dpdGNoLWZvY3VzLWNvbG9yfScvPjwvc3ZnPlwiKSAhZGVmYXVsdDtcblxuJGZvcm0tc3dpdGNoLWNoZWNrZWQtY29sb3I6ICAgICAgICRjb21wb25lbnQtYWN0aXZlLWNvbG9yICFkZWZhdWx0O1xuJGZvcm0tc3dpdGNoLWNoZWNrZWQtYmctaW1hZ2U6ICAgIHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCw8c3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nLTQgLTQgOCA4Jz48Y2lyY2xlIHI9JzMnIGZpbGw9JyN7JGZvcm0tc3dpdGNoLWNoZWNrZWQtY29sb3J9Jy8+PC9zdmc+XCIpICFkZWZhdWx0O1xuJGZvcm0tc3dpdGNoLWNoZWNrZWQtYmctcG9zaXRpb246IHJpZ2h0IGNlbnRlciAhZGVmYXVsdDtcbi8vIHNjc3MtZG9jcy1lbmQgZm9ybS1zd2l0Y2gtdmFyaWFibGVzXG5cbi8vIHNjc3MtZG9jcy1zdGFydCBpbnB1dC1ncm91cC12YXJpYWJsZXNcbiRpbnB1dC1ncm91cC1hZGRvbi1wYWRkaW5nLXk6ICAgICAgICAgICAkaW5wdXQtcGFkZGluZy15ICFkZWZhdWx0O1xuJGlucHV0LWdyb3VwLWFkZG9uLXBhZGRpbmcteDogICAgICAgICAgICRpbnB1dC1wYWRkaW5nLXggIWRlZmF1bHQ7XG4kaW5wdXQtZ3JvdXAtYWRkb24tZm9udC13ZWlnaHQ6ICAgICAgICAgJGlucHV0LWZvbnQtd2VpZ2h0ICFkZWZhdWx0O1xuJGlucHV0LWdyb3VwLWFkZG9uLWNvbG9yOiAgICAgICAgICAgICAgICRpbnB1dC1jb2xvciAhZGVmYXVsdDtcbiRpbnB1dC1ncm91cC1hZGRvbi1iZzogICAgICAgICAgICAgICAgICB2YXIoLS0jeyRwcmVmaXh9dGVydGlhcnktYmcpICFkZWZhdWx0O1xuJGlucHV0LWdyb3VwLWFkZG9uLWJvcmRlci1jb2xvcjogICAgICAgICRpbnB1dC1ib3JkZXItY29sb3IgIWRlZmF1bHQ7XG4vLyBzY3NzLWRvY3MtZW5kIGlucHV0LWdyb3VwLXZhcmlhYmxlc1xuXG4vLyBzY3NzLWRvY3Mtc3RhcnQgZm9ybS1zZWxlY3QtdmFyaWFibGVzXG4kZm9ybS1zZWxlY3QtcGFkZGluZy15OiAgICAgICAgICAgICAkaW5wdXQtcGFkZGluZy15ICFkZWZhdWx0O1xuJGZvcm0tc2VsZWN0LXBhZGRpbmcteDogICAgICAgICAgICAgJGlucHV0LXBhZGRpbmcteCAhZGVmYXVsdDtcbiRmb3JtLXNlbGVjdC1mb250LWZhbWlseTogICAgICAgICAgICRpbnB1dC1mb250LWZhbWlseSAhZGVmYXVsdDtcbiRmb3JtLXNlbGVjdC1mb250LXNpemU6ICAgICAgICAgICAgICRpbnB1dC1mb250LXNpemUgIWRlZmF1bHQ7XG4kZm9ybS1zZWxlY3QtaW5kaWNhdG9yLXBhZGRpbmc6ICAgICAkZm9ybS1zZWxlY3QtcGFkZGluZy14ICogMyAhZGVmYXVsdDsgLy8gRXh0cmEgcGFkZGluZyBmb3IgYmFja2dyb3VuZC1pbWFnZVxuJGZvcm0tc2VsZWN0LWZvbnQtd2VpZ2h0OiAgICAgICAgICAgJGlucHV0LWZvbnQtd2VpZ2h0ICFkZWZhdWx0O1xuJGZvcm0tc2VsZWN0LWxpbmUtaGVpZ2h0OiAgICAgICAgICAgJGlucHV0LWxpbmUtaGVpZ2h0ICFkZWZhdWx0O1xuJGZvcm0tc2VsZWN0LWNvbG9yOiAgICAgICAgICAgICAgICAgJGlucHV0LWNvbG9yICFkZWZhdWx0O1xuJGZvcm0tc2VsZWN0LWJnOiAgICAgICAgICAgICAgICAgICAgJGlucHV0LWJnICFkZWZhdWx0O1xuJGZvcm0tc2VsZWN0LWRpc2FibGVkLWNvbG9yOiAgICAgICAgbnVsbCAhZGVmYXVsdDtcbiRmb3JtLXNlbGVjdC1kaXNhYmxlZC1iZzogICAgICAgICAgICRpbnB1dC1kaXNhYmxlZC1iZyAhZGVmYXVsdDtcbiRmb3JtLXNlbGVjdC1kaXNhYmxlZC1ib3JkZXItY29sb3I6ICRpbnB1dC1kaXNhYmxlZC1ib3JkZXItY29sb3IgIWRlZmF1bHQ7XG4kZm9ybS1zZWxlY3QtYmctcG9zaXRpb246ICAgICAgICAgICByaWdodCAkZm9ybS1zZWxlY3QtcGFkZGluZy14IGNlbnRlciAhZGVmYXVsdDtcbiRmb3JtLXNlbGVjdC1iZy1zaXplOiAgICAgICAgICAgICAgIDE2cHggMTJweCAhZGVmYXVsdDsgLy8gSW4gcGl4ZWxzIGJlY2F1c2UgaW1hZ2UgZGltZW5zaW9uc1xuJGZvcm0tc2VsZWN0LWluZGljYXRvci1jb2xvcjogICAgICAgJGdyYXktODAwICFkZWZhdWx0O1xuJGZvcm0tc2VsZWN0LWluZGljYXRvcjogICAgICAgICAgICAgdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLDxzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgMTYgMTYnPjxwYXRoIGZpbGw9J25vbmUnIHN0cm9rZT0nI3skZm9ybS1zZWxlY3QtaW5kaWNhdG9yLWNvbG9yfScgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyBzdHJva2Utd2lkdGg9JzInIGQ9J20yIDUgNiA2IDYtNicvPjwvc3ZnPlwiKSAhZGVmYXVsdDtcblxuJGZvcm0tc2VsZWN0LWZlZWRiYWNrLWljb24tcGFkZGluZy1lbmQ6ICRmb3JtLXNlbGVjdC1wYWRkaW5nLXggKiAyLjUgKyAkZm9ybS1zZWxlY3QtaW5kaWNhdG9yLXBhZGRpbmcgIWRlZmF1bHQ7XG4kZm9ybS1zZWxlY3QtZmVlZGJhY2staWNvbi1wb3NpdGlvbjogICAgY2VudGVyIHJpZ2h0ICRmb3JtLXNlbGVjdC1pbmRpY2F0b3ItcGFkZGluZyAhZGVmYXVsdDtcbiRmb3JtLXNlbGVjdC1mZWVkYmFjay1pY29uLXNpemU6ICAgICAgICAkaW5wdXQtaGVpZ2h0LWlubmVyLWhhbGYgJGlucHV0LWhlaWdodC1pbm5lci1oYWxmICFkZWZhdWx0O1xuXG4kZm9ybS1zZWxlY3QtYm9yZGVyLXdpZHRoOiAgICAgICAgJGlucHV0LWJvcmRlci13aWR0aCAhZGVmYXVsdDtcbiRmb3JtLXNlbGVjdC1ib3JkZXItY29sb3I6ICAgICAgICAkaW5wdXQtYm9yZGVyLWNvbG9yICFkZWZhdWx0O1xuJGZvcm0tc2VsZWN0LWJvcmRlci1yYWRpdXM6ICAgICAgICRpbnB1dC1ib3JkZXItcmFkaXVzICFkZWZhdWx0O1xuJGZvcm0tc2VsZWN0LWJveC1zaGFkb3c6ICAgICAgICAgIHZhcigtLSN7JHByZWZpeH1ib3gtc2hhZG93LWluc2V0KSAhZGVmYXVsdDtcblxuJGZvcm0tc2VsZWN0LWZvY3VzLWJvcmRlci1jb2xvcjogICRpbnB1dC1mb2N1cy1ib3JkZXItY29sb3IgIWRlZmF1bHQ7XG4kZm9ybS1zZWxlY3QtZm9jdXMtd2lkdGg6ICAgICAgICAgJGlucHV0LWZvY3VzLXdpZHRoICFkZWZhdWx0O1xuJGZvcm0tc2VsZWN0LWZvY3VzLWJveC1zaGFkb3c6ICAgIDAgMCAwICRmb3JtLXNlbGVjdC1mb2N1cy13aWR0aCAkaW5wdXQtYnRuLWZvY3VzLWNvbG9yICFkZWZhdWx0O1xuXG4kZm9ybS1zZWxlY3QtcGFkZGluZy15LXNtOiAgICAgICAgJGlucHV0LXBhZGRpbmcteS1zbSAhZGVmYXVsdDtcbiRmb3JtLXNlbGVjdC1wYWRkaW5nLXgtc206ICAgICAgICAkaW5wdXQtcGFkZGluZy14LXNtICFkZWZhdWx0O1xuJGZvcm0tc2VsZWN0LWZvbnQtc2l6ZS1zbTogICAgICAgICRpbnB1dC1mb250LXNpemUtc20gIWRlZmF1bHQ7XG4kZm9ybS1zZWxlY3QtYm9yZGVyLXJhZGl1cy1zbTogICAgJGlucHV0LWJvcmRlci1yYWRpdXMtc20gIWRlZmF1bHQ7XG5cbiRmb3JtLXNlbGVjdC1wYWRkaW5nLXktbGc6ICAgICAgICAkaW5wdXQtcGFkZGluZy15LWxnICFkZWZhdWx0O1xuJGZvcm0tc2VsZWN0LXBhZGRpbmcteC1sZzogICAgICAgICRpbnB1dC1wYWRkaW5nLXgtbGcgIWRlZmF1bHQ7XG4kZm9ybS1zZWxlY3QtZm9udC1zaXplLWxnOiAgICAgICAgJGlucHV0LWZvbnQtc2l6ZS1sZyAhZGVmYXVsdDtcbiRmb3JtLXNlbGVjdC1ib3JkZXItcmFkaXVzLWxnOiAgICAkaW5wdXQtYm9yZGVyLXJhZGl1cy1sZyAhZGVmYXVsdDtcblxuJGZvcm0tc2VsZWN0LXRyYW5zaXRpb246ICAgICAgICAgICRpbnB1dC10cmFuc2l0aW9uICFkZWZhdWx0O1xuLy8gc2Nzcy1kb2NzLWVuZCBmb3JtLXNlbGVjdC12YXJpYWJsZXNcblxuLy8gc2Nzcy1kb2NzLXN0YXJ0IGZvcm0tcmFuZ2UtdmFyaWFibGVzXG4kZm9ybS1yYW5nZS10cmFjay13aWR0aDogICAgICAgICAgMTAwJSAhZGVmYXVsdDtcbiRmb3JtLXJhbmdlLXRyYWNrLWhlaWdodDogICAgICAgICAuNXJlbSAhZGVmYXVsdDtcbiRmb3JtLXJhbmdlLXRyYWNrLWN1cnNvcjogICAgICAgICBwb2ludGVyICFkZWZhdWx0O1xuJGZvcm0tcmFuZ2UtdHJhY2stYmc6ICAgICAgICAgICAgIHZhcigtLSN7JHByZWZpeH1zZWNvbmRhcnktYmcpICFkZWZhdWx0O1xuJGZvcm0tcmFuZ2UtdHJhY2stYm9yZGVyLXJhZGl1czogIDFyZW0gIWRlZmF1bHQ7XG4kZm9ybS1yYW5nZS10cmFjay1ib3gtc2hhZG93OiAgICAgdmFyKC0tI3skcHJlZml4fWJveC1zaGFkb3ctaW5zZXQpICFkZWZhdWx0O1xuXG4kZm9ybS1yYW5nZS10aHVtYi13aWR0aDogICAgICAgICAgICAgICAgICAgMXJlbSAhZGVmYXVsdDtcbiRmb3JtLXJhbmdlLXRodW1iLWhlaWdodDogICAgICAgICAgICAgICAgICAkZm9ybS1yYW5nZS10aHVtYi13aWR0aCAhZGVmYXVsdDtcbiRmb3JtLXJhbmdlLXRodW1iLWJnOiAgICAgICAgICAgICAgICAgICAgICAkY29tcG9uZW50LWFjdGl2ZS1iZyAhZGVmYXVsdDtcbiRmb3JtLXJhbmdlLXRodW1iLWJvcmRlcjogICAgICAgICAgICAgICAgICAwICFkZWZhdWx0O1xuJGZvcm0tcmFuZ2UtdGh1bWItYm9yZGVyLXJhZGl1czogICAgICAgICAgIDFyZW0gIWRlZmF1bHQ7XG4kZm9ybS1yYW5nZS10aHVtYi1ib3gtc2hhZG93OiAgICAgICAgICAgICAgMCAuMXJlbSAuMjVyZW0gcmdiYSgkYmxhY2ssIC4xKSAhZGVmYXVsdDtcbiRmb3JtLXJhbmdlLXRodW1iLWZvY3VzLWJveC1zaGFkb3c6ICAgICAgICAwIDAgMCAxcHggJGJvZHktYmcsICRpbnB1dC1mb2N1cy1ib3gtc2hhZG93ICFkZWZhdWx0O1xuJGZvcm0tcmFuZ2UtdGh1bWItZm9jdXMtYm94LXNoYWRvdy13aWR0aDogICRpbnB1dC1mb2N1cy13aWR0aCAhZGVmYXVsdDsgLy8gRm9yIGZvY3VzIGJveCBzaGFkb3cgaXNzdWUgaW4gRWRnZVxuJGZvcm0tcmFuZ2UtdGh1bWItYWN0aXZlLWJnOiAgICAgICAgICAgICAgIHRpbnQtY29sb3IoJGNvbXBvbmVudC1hY3RpdmUtYmcsIDcwJSkgIWRlZmF1bHQ7XG4kZm9ybS1yYW5nZS10aHVtYi1kaXNhYmxlZC1iZzogICAgICAgICAgICAgdmFyKC0tI3skcHJlZml4fXNlY29uZGFyeS1jb2xvcikgIWRlZmF1bHQ7XG4kZm9ybS1yYW5nZS10aHVtYi10cmFuc2l0aW9uOiAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvciAuMTVzIGVhc2UtaW4tb3V0LCBib3JkZXItY29sb3IgLjE1cyBlYXNlLWluLW91dCwgYm94LXNoYWRvdyAuMTVzIGVhc2UtaW4tb3V0ICFkZWZhdWx0O1xuLy8gc2Nzcy1kb2NzLWVuZCBmb3JtLXJhbmdlLXZhcmlhYmxlc1xuXG4vLyBzY3NzLWRvY3Mtc3RhcnQgZm9ybS1maWxlLXZhcmlhYmxlc1xuJGZvcm0tZmlsZS1idXR0b24tY29sb3I6ICAgICAgICAgICRpbnB1dC1jb2xvciAhZGVmYXVsdDtcbiRmb3JtLWZpbGUtYnV0dG9uLWJnOiAgICAgICAgICAgICB2YXIoLS0jeyRwcmVmaXh9dGVydGlhcnktYmcpICFkZWZhdWx0O1xuJGZvcm0tZmlsZS1idXR0b24taG92ZXItYmc6ICAgICAgIHZhcigtLSN7JHByZWZpeH1zZWNvbmRhcnktYmcpICFkZWZhdWx0O1xuLy8gc2Nzcy1kb2NzLWVuZCBmb3JtLWZpbGUtdmFyaWFibGVzXG5cbi8vIHNjc3MtZG9jcy1zdGFydCBmb3JtLWZsb2F0aW5nLXZhcmlhYmxlc1xuJGZvcm0tZmxvYXRpbmctaGVpZ2h0OiAgICAgICAgICAgICAgICAgIGFkZCgzLjVyZW0sICRpbnB1dC1oZWlnaHQtYm9yZGVyKSAhZGVmYXVsdDtcbiRmb3JtLWZsb2F0aW5nLWxpbmUtaGVpZ2h0OiAgICAgICAgICAgICAxLjI1ICFkZWZhdWx0O1xuJGZvcm0tZmxvYXRpbmctcGFkZGluZy14OiAgICAgICAgICAgICAgICRpbnB1dC1wYWRkaW5nLXggIWRlZmF1bHQ7XG4kZm9ybS1mbG9hdGluZy1wYWRkaW5nLXk6ICAgICAgICAgICAgICAgMXJlbSAhZGVmYXVsdDtcbiRmb3JtLWZsb2F0aW5nLWlucHV0LXBhZGRpbmctdDogICAgICAgICAxLjYyNXJlbSAhZGVmYXVsdDtcbiRmb3JtLWZsb2F0aW5nLWlucHV0LXBhZGRpbmctYjogICAgICAgICAuNjI1cmVtICFkZWZhdWx0O1xuJGZvcm0tZmxvYXRpbmctbGFiZWwtaGVpZ2h0OiAgICAgICAgICAgIDEuNWVtICFkZWZhdWx0O1xuJGZvcm0tZmxvYXRpbmctbGFiZWwtb3BhY2l0eTogICAgICAgICAgIC42NSAhZGVmYXVsdDtcbiRmb3JtLWZsb2F0aW5nLWxhYmVsLXRyYW5zZm9ybTogICAgICAgICBzY2FsZSguODUpIHRyYW5zbGF0ZVkoLS41cmVtKSB0cmFuc2xhdGVYKC4xNXJlbSkgIWRlZmF1bHQ7XG4kZm9ybS1mbG9hdGluZy1sYWJlbC1kaXNhYmxlZC1jb2xvcjogICAgJGdyYXktNjAwICFkZWZhdWx0O1xuJGZvcm0tZmxvYXRpbmctdHJhbnNpdGlvbjogICAgICAgICAgICAgIG9wYWNpdHkgLjFzIGVhc2UtaW4tb3V0LCB0cmFuc2Zvcm0gLjFzIGVhc2UtaW4tb3V0ICFkZWZhdWx0O1xuLy8gc2Nzcy1kb2NzLWVuZCBmb3JtLWZsb2F0aW5nLXZhcmlhYmxlc1xuXG4vLyBGb3JtIHZhbGlkYXRpb25cblxuLy8gc2Nzcy1kb2NzLXN0YXJ0IGZvcm0tZmVlZGJhY2stdmFyaWFibGVzXG4kZm9ybS1mZWVkYmFjay1tYXJnaW4tdG9wOiAgICAgICAgICAkZm9ybS10ZXh0LW1hcmdpbi10b3AgIWRlZmF1bHQ7XG4kZm9ybS1mZWVkYmFjay1mb250LXNpemU6ICAgICAgICAgICAkZm9ybS10ZXh0LWZvbnQtc2l6ZSAhZGVmYXVsdDtcbiRmb3JtLWZlZWRiYWNrLWZvbnQtc3R5bGU6ICAgICAgICAgICRmb3JtLXRleHQtZm9udC1zdHlsZSAhZGVmYXVsdDtcbiRmb3JtLWZlZWRiYWNrLXZhbGlkLWNvbG9yOiAgICAgICAgICRzdWNjZXNzICFkZWZhdWx0O1xuJGZvcm0tZmVlZGJhY2staW52YWxpZC1jb2xvcjogICAgICAgJGRhbmdlciAhZGVmYXVsdDtcblxuJGZvcm0tZmVlZGJhY2staWNvbi12YWxpZC1jb2xvcjogICAgJGZvcm0tZmVlZGJhY2stdmFsaWQtY29sb3IgIWRlZmF1bHQ7XG4kZm9ybS1mZWVkYmFjay1pY29uLXZhbGlkOiAgICAgICAgICB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsPHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCA4IDgnPjxwYXRoIGZpbGw9JyN7JGZvcm0tZmVlZGJhY2staWNvbi12YWxpZC1jb2xvcn0nIGQ9J00yLjMgNi43My42IDQuNTNjLS40LTEuMDQuNDYtMS40IDEuMS0uOGwxLjEgMS40IDMuNC0zLjhjLjYtLjYzIDEuNi0uMjcgMS4yLjdsLTQgNC42Yy0uNDMuNS0uOC40LTEuMS4xeicvPjwvc3ZnPlwiKSAhZGVmYXVsdDtcbiRmb3JtLWZlZWRiYWNrLWljb24taW52YWxpZC1jb2xvcjogICRmb3JtLWZlZWRiYWNrLWludmFsaWQtY29sb3IgIWRlZmF1bHQ7XG4kZm9ybS1mZWVkYmFjay1pY29uLWludmFsaWQ6ICAgICAgICB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsPHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCAxMiAxMicgd2lkdGg9JzEyJyBoZWlnaHQ9JzEyJyBmaWxsPSdub25lJyBzdHJva2U9JyN7JGZvcm0tZmVlZGJhY2staWNvbi1pbnZhbGlkLWNvbG9yfSc+PGNpcmNsZSBjeD0nNicgY3k9JzYnIHI9JzQuNScvPjxwYXRoIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIGQ9J001LjggMy42aC40TDYgNi41eicvPjxjaXJjbGUgY3g9JzYnIGN5PSc4LjInIHI9Jy42JyBmaWxsPScjeyRmb3JtLWZlZWRiYWNrLWljb24taW52YWxpZC1jb2xvcn0nIHN0cm9rZT0nbm9uZScvPjwvc3ZnPlwiKSAhZGVmYXVsdDtcbi8vIHNjc3MtZG9jcy1lbmQgZm9ybS1mZWVkYmFjay12YXJpYWJsZXNcblxuLy8gc2Nzcy1kb2NzLXN0YXJ0IGZvcm0tdmFsaWRhdGlvbi1jb2xvcnNcbiRmb3JtLXZhbGlkLWNvbG9yOiAgICAgICAgICAgICAgICAgICRmb3JtLWZlZWRiYWNrLXZhbGlkLWNvbG9yICFkZWZhdWx0O1xuJGZvcm0tdmFsaWQtYm9yZGVyLWNvbG9yOiAgICAgICAgICAgJGZvcm0tZmVlZGJhY2stdmFsaWQtY29sb3IgIWRlZmF1bHQ7XG4kZm9ybS1pbnZhbGlkLWNvbG9yOiAgICAgICAgICAgICAgICAkZm9ybS1mZWVkYmFjay1pbnZhbGlkLWNvbG9yICFkZWZhdWx0O1xuJGZvcm0taW52YWxpZC1ib3JkZXItY29sb3I6ICAgICAgICAgJGZvcm0tZmVlZGJhY2staW52YWxpZC1jb2xvciAhZGVmYXVsdDtcbi8vIHNjc3MtZG9jcy1lbmQgZm9ybS12YWxpZGF0aW9uLWNvbG9yc1xuXG4vLyBzY3NzLWRvY3Mtc3RhcnQgZm9ybS12YWxpZGF0aW9uLXN0YXRlc1xuJGZvcm0tdmFsaWRhdGlvbi1zdGF0ZXM6IChcbiAgXCJ2YWxpZFwiOiAoXG4gICAgXCJjb2xvclwiOiB2YXIoLS0jeyRwcmVmaXh9Zm9ybS12YWxpZC1jb2xvciksXG4gICAgXCJpY29uXCI6ICRmb3JtLWZlZWRiYWNrLWljb24tdmFsaWQsXG4gICAgXCJ0b29sdGlwLWNvbG9yXCI6ICNmZmYsXG4gICAgXCJ0b29sdGlwLWJnLWNvbG9yXCI6IHZhcigtLSN7JHByZWZpeH1zdWNjZXNzKSxcbiAgICBcImZvY3VzLWJveC1zaGFkb3dcIjogMCAwICRpbnB1dC1idG4tZm9jdXMtYmx1ciAkaW5wdXQtZm9jdXMtd2lkdGggcmdiYSh2YXIoLS0jeyRwcmVmaXh9c3VjY2Vzcy1yZ2IpLCAkaW5wdXQtYnRuLWZvY3VzLWNvbG9yLW9wYWNpdHkpLFxuICAgIFwiYm9yZGVyLWNvbG9yXCI6IHZhcigtLSN7JHByZWZpeH1mb3JtLXZhbGlkLWJvcmRlci1jb2xvciksXG4gICksXG4gIFwiaW52YWxpZFwiOiAoXG4gICAgXCJjb2xvclwiOiB2YXIoLS0jeyRwcmVmaXh9Zm9ybS1pbnZhbGlkLWNvbG9yKSxcbiAgICBcImljb25cIjogJGZvcm0tZmVlZGJhY2staWNvbi1pbnZhbGlkLFxuICAgIFwidG9vbHRpcC1jb2xvclwiOiAjZmZmLFxuICAgIFwidG9vbHRpcC1iZy1jb2xvclwiOiB2YXIoLS0jeyRwcmVmaXh9ZGFuZ2VyKSxcbiAgICBcImZvY3VzLWJveC1zaGFkb3dcIjogMCAwICRpbnB1dC1idG4tZm9jdXMtYmx1ciAkaW5wdXQtZm9jdXMtd2lkdGggcmdiYSh2YXIoLS0jeyRwcmVmaXh9ZGFuZ2VyLXJnYiksICRpbnB1dC1idG4tZm9jdXMtY29sb3Itb3BhY2l0eSksXG4gICAgXCJib3JkZXItY29sb3JcIjogdmFyKC0tI3skcHJlZml4fWZvcm0taW52YWxpZC1ib3JkZXItY29sb3IpLFxuICApXG4pICFkZWZhdWx0O1xuLy8gc2Nzcy1kb2NzLWVuZCBmb3JtLXZhbGlkYXRpb24tc3RhdGVzXG5cbi8vIFotaW5kZXggbWFzdGVyIGxpc3Rcbi8vXG4vLyBXYXJuaW5nOiBBdm9pZCBjdXN0b21pemluZyB0aGVzZSB2YWx1ZXMuIFRoZXkncmUgdXNlZCBmb3IgYSBiaXJkJ3MgZXllIHZpZXdcbi8vIG9mIGNvbXBvbmVudHMgZGVwZW5kZW50IG9uIHRoZSB6LWF4aXMgYW5kIGFyZSBkZXNpZ25lZCB0byBhbGwgd29yayB0b2dldGhlci5cblxuLy8gc2Nzcy1kb2NzLXN0YXJ0IHppbmRleC1zdGFja1xuJHppbmRleC1kcm9wZG93bjogICAgICAgICAgICAgICAgICAgMTAwMCAhZGVmYXVsdDtcbiR6aW5kZXgtc3RpY2t5OiAgICAgICAgICAgICAgICAgICAgIDEwMjAgIWRlZmF1bHQ7XG4kemluZGV4LWZpeGVkOiAgICAgICAgICAgICAgICAgICAgICAxMDMwICFkZWZhdWx0O1xuJHppbmRleC1vZmZjYW52YXMtYmFja2Ryb3A6ICAgICAgICAgMTA0MCAhZGVmYXVsdDtcbiR6aW5kZXgtb2ZmY2FudmFzOiAgICAgICAgICAgICAgICAgIDEwNDUgIWRlZmF1bHQ7XG4kemluZGV4LW1vZGFsLWJhY2tkcm9wOiAgICAgICAgICAgICAxMDUwICFkZWZhdWx0O1xuJHppbmRleC1tb2RhbDogICAgICAgICAgICAgICAgICAgICAgMTA1NSAhZGVmYXVsdDtcbiR6aW5kZXgtcG9wb3ZlcjogICAgICAgICAgICAgICAgICAgIDEwNzAgIWRlZmF1bHQ7XG4kemluZGV4LXRvb2x0aXA6ICAgICAgICAgICAgICAgICAgICAxMDgwICFkZWZhdWx0O1xuJHppbmRleC10b2FzdDogICAgICAgICAgICAgICAgICAgICAgMTA5MCAhZGVmYXVsdDtcbi8vIHNjc3MtZG9jcy1lbmQgemluZGV4LXN0YWNrXG5cbi8vIHNjc3MtZG9jcy1zdGFydCB6aW5kZXgtbGV2ZWxzLW1hcFxuJHppbmRleC1sZXZlbHM6IChcbiAgbjE6IC0xLFxuICAwOiAwLFxuICAxOiAxLFxuICAyOiAyLFxuICAzOiAzXG4pICFkZWZhdWx0O1xuLy8gc2Nzcy1kb2NzLWVuZCB6aW5kZXgtbGV2ZWxzLW1hcFxuXG5cbi8vIE5hdnNcblxuLy8gc2Nzcy1kb2NzLXN0YXJ0IG5hdi12YXJpYWJsZXNcbiRuYXYtbGluay1wYWRkaW5nLXk6ICAgICAgICAgICAgICAgIC41cmVtICFkZWZhdWx0O1xuJG5hdi1saW5rLXBhZGRpbmcteDogICAgICAgICAgICAgICAgMXJlbSAhZGVmYXVsdDtcbiRuYXYtbGluay1mb250LXNpemU6ICAgICAgICAgICAgICAgIG51bGwgIWRlZmF1bHQ7XG4kbmF2LWxpbmstZm9udC13ZWlnaHQ6ICAgICAgICAgICAgICBudWxsICFkZWZhdWx0O1xuJG5hdi1saW5rLWNvbG9yOiAgICAgICAgICAgICAgICAgICAgdmFyKC0tI3skcHJlZml4fWxpbmstY29sb3IpICFkZWZhdWx0O1xuJG5hdi1saW5rLWhvdmVyLWNvbG9yOiAgICAgICAgICAgICAgdmFyKC0tI3skcHJlZml4fWxpbmstaG92ZXItY29sb3IpICFkZWZhdWx0O1xuJG5hdi1saW5rLXRyYW5zaXRpb246ICAgICAgICAgICAgICAgY29sb3IgLjE1cyBlYXNlLWluLW91dCwgYmFja2dyb3VuZC1jb2xvciAuMTVzIGVhc2UtaW4tb3V0LCBib3JkZXItY29sb3IgLjE1cyBlYXNlLWluLW91dCAhZGVmYXVsdDtcbiRuYXYtbGluay1kaXNhYmxlZC1jb2xvcjogICAgICAgICAgIHZhcigtLSN7JHByZWZpeH1zZWNvbmRhcnktY29sb3IpICFkZWZhdWx0O1xuJG5hdi1saW5rLWZvY3VzLWJveC1zaGFkb3c6ICAgICAgICAgJGZvY3VzLXJpbmctYm94LXNoYWRvdyAhZGVmYXVsdDtcblxuJG5hdi10YWJzLWJvcmRlci1jb2xvcjogICAgICAgICAgICAgdmFyKC0tI3skcHJlZml4fWJvcmRlci1jb2xvcikgIWRlZmF1bHQ7XG4kbmF2LXRhYnMtYm9yZGVyLXdpZHRoOiAgICAgICAgICAgICB2YXIoLS0jeyRwcmVmaXh9Ym9yZGVyLXdpZHRoKSAhZGVmYXVsdDtcbiRuYXYtdGFicy1ib3JkZXItcmFkaXVzOiAgICAgICAgICAgIHZhcigtLSN7JHByZWZpeH1ib3JkZXItcmFkaXVzKSAhZGVmYXVsdDtcbiRuYXYtdGFicy1saW5rLWhvdmVyLWJvcmRlci1jb2xvcjogIHZhcigtLSN7JHByZWZpeH1zZWNvbmRhcnktYmcpIHZhcigtLSN7JHByZWZpeH1zZWNvbmRhcnktYmcpICRuYXYtdGFicy1ib3JkZXItY29sb3IgIWRlZmF1bHQ7XG4kbmF2LXRhYnMtbGluay1hY3RpdmUtY29sb3I6ICAgICAgICB2YXIoLS0jeyRwcmVmaXh9ZW1waGFzaXMtY29sb3IpICFkZWZhdWx0O1xuJG5hdi10YWJzLWxpbmstYWN0aXZlLWJnOiAgICAgICAgICAgdmFyKC0tI3skcHJlZml4fWJvZHktYmcpICFkZWZhdWx0O1xuJG5hdi10YWJzLWxpbmstYWN0aXZlLWJvcmRlci1jb2xvcjogdmFyKC0tI3skcHJlZml4fWJvcmRlci1jb2xvcikgdmFyKC0tI3skcHJlZml4fWJvcmRlci1jb2xvcikgJG5hdi10YWJzLWxpbmstYWN0aXZlLWJnICFkZWZhdWx0O1xuXG4kbmF2LXBpbGxzLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICB2YXIoLS0jeyRwcmVmaXh9Ym9yZGVyLXJhZGl1cykgIWRlZmF1bHQ7XG4kbmF2LXBpbGxzLWxpbmstYWN0aXZlLWNvbG9yOiAgICAgICAkY29tcG9uZW50LWFjdGl2ZS1jb2xvciAhZGVmYXVsdDtcbiRuYXYtcGlsbHMtbGluay1hY3RpdmUtYmc6ICAgICAgICAgICRjb21wb25lbnQtYWN0aXZlLWJnICFkZWZhdWx0O1xuXG4kbmF2LXVuZGVybGluZS1nYXA6ICAgICAgICAgICAgICAgICAxcmVtICFkZWZhdWx0O1xuJG5hdi11bmRlcmxpbmUtYm9yZGVyLXdpZHRoOiAgICAgICAgLjEyNXJlbSAhZGVmYXVsdDtcbiRuYXYtdW5kZXJsaW5lLWxpbmstYWN0aXZlLWNvbG9yOiAgIHZhcigtLSN7JHByZWZpeH1lbXBoYXNpcy1jb2xvcikgIWRlZmF1bHQ7XG4vLyBzY3NzLWRvY3MtZW5kIG5hdi12YXJpYWJsZXNcblxuXG4vLyBOYXZiYXJcblxuLy8gc2Nzcy1kb2NzLXN0YXJ0IG5hdmJhci12YXJpYWJsZXNcbiRuYXZiYXItcGFkZGluZy15OiAgICAgICAgICAgICAgICAgICRzcGFjZXIgKiAuNSAhZGVmYXVsdDtcbiRuYXZiYXItcGFkZGluZy14OiAgICAgICAgICAgICAgICAgIG51bGwgIWRlZmF1bHQ7XG5cbiRuYXZiYXItbmF2LWxpbmstcGFkZGluZy14OiAgICAgICAgIC41cmVtICFkZWZhdWx0O1xuXG4kbmF2YmFyLWJyYW5kLWZvbnQtc2l6ZTogICAgICAgICAgICAkZm9udC1zaXplLWxnICFkZWZhdWx0O1xuLy8gQ29tcHV0ZSB0aGUgbmF2YmFyLWJyYW5kIHBhZGRpbmcteSBzbyB0aGUgbmF2YmFyLWJyYW5kIHdpbGwgaGF2ZSB0aGUgc2FtZSBoZWlnaHQgYXMgbmF2YmFyLXRleHQgYW5kIG5hdi1saW5rXG4kbmF2LWxpbmstaGVpZ2h0OiAgICAgICAgICAgICAgICAgICAkZm9udC1zaXplLWJhc2UgKiAkbGluZS1oZWlnaHQtYmFzZSArICRuYXYtbGluay1wYWRkaW5nLXkgKiAyICFkZWZhdWx0O1xuJG5hdmJhci1icmFuZC1oZWlnaHQ6ICAgICAgICAgICAgICAgJG5hdmJhci1icmFuZC1mb250LXNpemUgKiAkbGluZS1oZWlnaHQtYmFzZSAhZGVmYXVsdDtcbiRuYXZiYXItYnJhbmQtcGFkZGluZy15OiAgICAgICAgICAgICgkbmF2LWxpbmstaGVpZ2h0IC0gJG5hdmJhci1icmFuZC1oZWlnaHQpICogLjUgIWRlZmF1bHQ7XG4kbmF2YmFyLWJyYW5kLW1hcmdpbi1lbmQ6ICAgICAgICAgICAxcmVtICFkZWZhdWx0O1xuXG4kbmF2YmFyLXRvZ2dsZXItcGFkZGluZy15OiAgICAgICAgICAuMjVyZW0gIWRlZmF1bHQ7XG4kbmF2YmFyLXRvZ2dsZXItcGFkZGluZy14OiAgICAgICAgICAuNzVyZW0gIWRlZmF1bHQ7XG4kbmF2YmFyLXRvZ2dsZXItZm9udC1zaXplOiAgICAgICAgICAkZm9udC1zaXplLWxnICFkZWZhdWx0O1xuJG5hdmJhci10b2dnbGVyLWJvcmRlci1yYWRpdXM6ICAgICAgJGJ0bi1ib3JkZXItcmFkaXVzICFkZWZhdWx0O1xuJG5hdmJhci10b2dnbGVyLWZvY3VzLXdpZHRoOiAgICAgICAgJGJ0bi1mb2N1cy13aWR0aCAhZGVmYXVsdDtcbiRuYXZiYXItdG9nZ2xlci10cmFuc2l0aW9uOiAgICAgICAgIGJveC1zaGFkb3cgLjE1cyBlYXNlLWluLW91dCAhZGVmYXVsdDtcblxuJG5hdmJhci1saWdodC1jb2xvcjogICAgICAgICAgICAgICAgcmdiYSh2YXIoLS0jeyRwcmVmaXh9ZW1waGFzaXMtY29sb3ItcmdiKSwgLjY1KSAhZGVmYXVsdDtcbiRuYXZiYXItbGlnaHQtaG92ZXItY29sb3I6ICAgICAgICAgIHJnYmEodmFyKC0tI3skcHJlZml4fWVtcGhhc2lzLWNvbG9yLXJnYiksIC44KSAhZGVmYXVsdDtcbiRuYXZiYXItbGlnaHQtYWN0aXZlLWNvbG9yOiAgICAgICAgIHJnYmEodmFyKC0tI3skcHJlZml4fWVtcGhhc2lzLWNvbG9yLXJnYiksIDEpICFkZWZhdWx0O1xuJG5hdmJhci1saWdodC1kaXNhYmxlZC1jb2xvcjogICAgICAgcmdiYSh2YXIoLS0jeyRwcmVmaXh9ZW1waGFzaXMtY29sb3ItcmdiKSwgLjMpICFkZWZhdWx0O1xuJG5hdmJhci1saWdodC1pY29uLWNvbG9yOiAgICAgICAgICAgcmdiYSgkYm9keS1jb2xvciwgLjc1KSAhZGVmYXVsdDtcbiRuYXZiYXItbGlnaHQtdG9nZ2xlci1pY29uLWJnOiAgICAgIHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCw8c3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nMCAwIDMwIDMwJz48cGF0aCBzdHJva2U9JyN7JG5hdmJhci1saWdodC1pY29uLWNvbG9yfScgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbWl0ZXJsaW1pdD0nMTAnIHN0cm9rZS13aWR0aD0nMicgZD0nTTQgN2gyMk00IDE1aDIyTTQgMjNoMjInLz48L3N2Zz5cIikgIWRlZmF1bHQ7XG4kbmF2YmFyLWxpZ2h0LXRvZ2dsZXItYm9yZGVyLWNvbG9yOiByZ2JhKHZhcigtLSN7JHByZWZpeH1lbXBoYXNpcy1jb2xvci1yZ2IpLCAuMTUpICFkZWZhdWx0O1xuJG5hdmJhci1saWdodC1icmFuZC1jb2xvcjogICAgICAgICAgJG5hdmJhci1saWdodC1hY3RpdmUtY29sb3IgIWRlZmF1bHQ7XG4kbmF2YmFyLWxpZ2h0LWJyYW5kLWhvdmVyLWNvbG9yOiAgICAkbmF2YmFyLWxpZ2h0LWFjdGl2ZS1jb2xvciAhZGVmYXVsdDtcbi8vIHNjc3MtZG9jcy1lbmQgbmF2YmFyLXZhcmlhYmxlc1xuXG4vLyBzY3NzLWRvY3Mtc3RhcnQgbmF2YmFyLWRhcmstdmFyaWFibGVzXG4kbmF2YmFyLWRhcmstY29sb3I6ICAgICAgICAgICAgICAgICByZ2JhKCR3aGl0ZSwgLjU1KSAhZGVmYXVsdDtcbiRuYXZiYXItZGFyay1ob3Zlci1jb2xvcjogICAgICAgICAgIHJnYmEoJHdoaXRlLCAuNzUpICFkZWZhdWx0O1xuJG5hdmJhci1kYXJrLWFjdGl2ZS1jb2xvcjogICAgICAgICAgJHdoaXRlICFkZWZhdWx0O1xuJG5hdmJhci1kYXJrLWRpc2FibGVkLWNvbG9yOiAgICAgICAgcmdiYSgkd2hpdGUsIC4yNSkgIWRlZmF1bHQ7XG4kbmF2YmFyLWRhcmstaWNvbi1jb2xvcjogICAgICAgICAgICAkbmF2YmFyLWRhcmstY29sb3IgIWRlZmF1bHQ7XG4kbmF2YmFyLWRhcmstdG9nZ2xlci1pY29uLWJnOiAgICAgICB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsPHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCAzMCAzMCc+PHBhdGggc3Ryb2tlPScjeyRuYXZiYXItZGFyay1pY29uLWNvbG9yfScgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbWl0ZXJsaW1pdD0nMTAnIHN0cm9rZS13aWR0aD0nMicgZD0nTTQgN2gyMk00IDE1aDIyTTQgMjNoMjInLz48L3N2Zz5cIikgIWRlZmF1bHQ7XG4kbmF2YmFyLWRhcmstdG9nZ2xlci1ib3JkZXItY29sb3I6ICByZ2JhKCR3aGl0ZSwgLjEpICFkZWZhdWx0O1xuJG5hdmJhci1kYXJrLWJyYW5kLWNvbG9yOiAgICAgICAgICAgJG5hdmJhci1kYXJrLWFjdGl2ZS1jb2xvciAhZGVmYXVsdDtcbiRuYXZiYXItZGFyay1icmFuZC1ob3Zlci1jb2xvcjogICAgICRuYXZiYXItZGFyay1hY3RpdmUtY29sb3IgIWRlZmF1bHQ7XG4vLyBzY3NzLWRvY3MtZW5kIG5hdmJhci1kYXJrLXZhcmlhYmxlc1xuXG5cbi8vIERyb3Bkb3duc1xuLy9cbi8vIERyb3Bkb3duIG1lbnUgY29udGFpbmVyIGFuZCBjb250ZW50cy5cblxuLy8gc2Nzcy1kb2NzLXN0YXJ0IGRyb3Bkb3duLXZhcmlhYmxlc1xuJGRyb3Bkb3duLW1pbi13aWR0aDogICAgICAgICAgICAgICAgMTByZW0gIWRlZmF1bHQ7XG4kZHJvcGRvd24tcGFkZGluZy14OiAgICAgICAgICAgICAgICAwICFkZWZhdWx0O1xuJGRyb3Bkb3duLXBhZGRpbmcteTogICAgICAgICAgICAgICAgLjVyZW0gIWRlZmF1bHQ7XG4kZHJvcGRvd24tc3BhY2VyOiAgICAgICAgICAgICAgICAgICAuMTI1cmVtICFkZWZhdWx0O1xuJGRyb3Bkb3duLWZvbnQtc2l6ZTogICAgICAgICAgICAgICAgJGZvbnQtc2l6ZS1iYXNlICFkZWZhdWx0O1xuJGRyb3Bkb3duLWNvbG9yOiAgICAgICAgICAgICAgICAgICAgdmFyKC0tI3skcHJlZml4fWJvZHktY29sb3IpICFkZWZhdWx0O1xuJGRyb3Bkb3duLWJnOiAgICAgICAgICAgICAgICAgICAgICAgdmFyKC0tI3skcHJlZml4fWJvZHktYmcpICFkZWZhdWx0O1xuJGRyb3Bkb3duLWJvcmRlci1jb2xvcjogICAgICAgICAgICAgdmFyKC0tI3skcHJlZml4fWJvcmRlci1jb2xvci10cmFuc2x1Y2VudCkgIWRlZmF1bHQ7XG4kZHJvcGRvd24tYm9yZGVyLXJhZGl1czogICAgICAgICAgICB2YXIoLS0jeyRwcmVmaXh9Ym9yZGVyLXJhZGl1cykgIWRlZmF1bHQ7XG4kZHJvcGRvd24tYm9yZGVyLXdpZHRoOiAgICAgICAgICAgICB2YXIoLS0jeyRwcmVmaXh9Ym9yZGVyLXdpZHRoKSAhZGVmYXVsdDtcbiRkcm9wZG93bi1pbm5lci1ib3JkZXItcmFkaXVzOiAgICAgIGNhbGMoI3skZHJvcGRvd24tYm9yZGVyLXJhZGl1c30gLSAjeyRkcm9wZG93bi1ib3JkZXItd2lkdGh9KSAhZGVmYXVsdDsgLy8gc3R5bGVsaW50LWRpc2FibGUtbGluZSBmdW5jdGlvbi1kaXNhbGxvd2VkLWxpc3RcbiRkcm9wZG93bi1kaXZpZGVyLWJnOiAgICAgICAgICAgICAgICRkcm9wZG93bi1ib3JkZXItY29sb3IgIWRlZmF1bHQ7XG4kZHJvcGRvd24tZGl2aWRlci1tYXJnaW4teTogICAgICAgICAkc3BhY2VyICogLjUgIWRlZmF1bHQ7XG4kZHJvcGRvd24tYm94LXNoYWRvdzogICAgICAgICAgICAgICB2YXIoLS0jeyRwcmVmaXh9Ym94LXNoYWRvdykgIWRlZmF1bHQ7XG5cbiRkcm9wZG93bi1saW5rLWNvbG9yOiAgICAgICAgICAgICAgIHZhcigtLSN7JHByZWZpeH1ib2R5LWNvbG9yKSAhZGVmYXVsdDtcbiRkcm9wZG93bi1saW5rLWhvdmVyLWNvbG9yOiAgICAgICAgICRkcm9wZG93bi1saW5rLWNvbG9yICFkZWZhdWx0O1xuJGRyb3Bkb3duLWxpbmstaG92ZXItYmc6ICAgICAgICAgICAgdmFyKC0tI3skcHJlZml4fXRlcnRpYXJ5LWJnKSAhZGVmYXVsdDtcblxuJGRyb3Bkb3duLWxpbmstYWN0aXZlLWNvbG9yOiAgICAgICAgJGNvbXBvbmVudC1hY3RpdmUtY29sb3IgIWRlZmF1bHQ7XG4kZHJvcGRvd24tbGluay1hY3RpdmUtYmc6ICAgICAgICAgICAkY29tcG9uZW50LWFjdGl2ZS1iZyAhZGVmYXVsdDtcblxuJGRyb3Bkb3duLWxpbmstZGlzYWJsZWQtY29sb3I6ICAgICAgdmFyKC0tI3skcHJlZml4fXRlcnRpYXJ5LWNvbG9yKSAhZGVmYXVsdDtcblxuJGRyb3Bkb3duLWl0ZW0tcGFkZGluZy15OiAgICAgICAgICAgJHNwYWNlciAqIC4yNSAhZGVmYXVsdDtcbiRkcm9wZG93bi1pdGVtLXBhZGRpbmcteDogICAgICAgICAgICRzcGFjZXIgIWRlZmF1bHQ7XG5cbiRkcm9wZG93bi1oZWFkZXItY29sb3I6ICAgICAgICAgICAgICRncmF5LTYwMCAhZGVmYXVsdDtcbiRkcm9wZG93bi1oZWFkZXItcGFkZGluZy14OiAgICAgICAgICRkcm9wZG93bi1pdGVtLXBhZGRpbmcteCAhZGVmYXVsdDtcbiRkcm9wZG93bi1oZWFkZXItcGFkZGluZy15OiAgICAgICAgICRkcm9wZG93bi1wYWRkaW5nLXkgIWRlZmF1bHQ7XG4vLyBmdXN2LWRpc2FibGVcbiRkcm9wZG93bi1oZWFkZXItcGFkZGluZzogICAgICAgICAgICRkcm9wZG93bi1oZWFkZXItcGFkZGluZy15ICRkcm9wZG93bi1oZWFkZXItcGFkZGluZy14ICFkZWZhdWx0OyAvLyBEZXByZWNhdGVkIGluIHY1LjIuMFxuLy8gZnVzdi1lbmFibGVcbi8vIHNjc3MtZG9jcy1lbmQgZHJvcGRvd24tdmFyaWFibGVzXG5cbi8vIHNjc3MtZG9jcy1zdGFydCBkcm9wZG93bi1kYXJrLXZhcmlhYmxlc1xuJGRyb3Bkb3duLWRhcmstY29sb3I6ICAgICAgICAgICAgICAgJGdyYXktMzAwICFkZWZhdWx0O1xuJGRyb3Bkb3duLWRhcmstYmc6ICAgICAgICAgICAgICAgICAgJGdyYXktODAwICFkZWZhdWx0O1xuJGRyb3Bkb3duLWRhcmstYm9yZGVyLWNvbG9yOiAgICAgICAgJGRyb3Bkb3duLWJvcmRlci1jb2xvciAhZGVmYXVsdDtcbiRkcm9wZG93bi1kYXJrLWRpdmlkZXItYmc6ICAgICAgICAgICRkcm9wZG93bi1kaXZpZGVyLWJnICFkZWZhdWx0O1xuJGRyb3Bkb3duLWRhcmstYm94LXNoYWRvdzogICAgICAgICAgbnVsbCAhZGVmYXVsdDtcbiRkcm9wZG93bi1kYXJrLWxpbmstY29sb3I6ICAgICAgICAgICRkcm9wZG93bi1kYXJrLWNvbG9yICFkZWZhdWx0O1xuJGRyb3Bkb3duLWRhcmstbGluay1ob3Zlci1jb2xvcjogICAgJHdoaXRlICFkZWZhdWx0O1xuJGRyb3Bkb3duLWRhcmstbGluay1ob3Zlci1iZzogICAgICAgcmdiYSgkd2hpdGUsIC4xNSkgIWRlZmF1bHQ7XG4kZHJvcGRvd24tZGFyay1saW5rLWFjdGl2ZS1jb2xvcjogICAkZHJvcGRvd24tbGluay1hY3RpdmUtY29sb3IgIWRlZmF1bHQ7XG4kZHJvcGRvd24tZGFyay1saW5rLWFjdGl2ZS1iZzogICAgICAkZHJvcGRvd24tbGluay1hY3RpdmUtYmcgIWRlZmF1bHQ7XG4kZHJvcGRvd24tZGFyay1saW5rLWRpc2FibGVkLWNvbG9yOiAkZ3JheS01MDAgIWRlZmF1bHQ7XG4kZHJvcGRvd24tZGFyay1oZWFkZXItY29sb3I6ICAgICAgICAkZ3JheS01MDAgIWRlZmF1bHQ7XG4vLyBzY3NzLWRvY3MtZW5kIGRyb3Bkb3duLWRhcmstdmFyaWFibGVzXG5cblxuLy8gUGFnaW5hdGlvblxuXG4vLyBzY3NzLWRvY3Mtc3RhcnQgcGFnaW5hdGlvbi12YXJpYWJsZXNcbiRwYWdpbmF0aW9uLXBhZGRpbmcteTogICAgICAgICAgICAgIC4zNzVyZW0gIWRlZmF1bHQ7XG4kcGFnaW5hdGlvbi1wYWRkaW5nLXg6ICAgICAgICAgICAgICAuNzVyZW0gIWRlZmF1bHQ7XG4kcGFnaW5hdGlvbi1wYWRkaW5nLXktc206ICAgICAgICAgICAuMjVyZW0gIWRlZmF1bHQ7XG4kcGFnaW5hdGlvbi1wYWRkaW5nLXgtc206ICAgICAgICAgICAuNXJlbSAhZGVmYXVsdDtcbiRwYWdpbmF0aW9uLXBhZGRpbmcteS1sZzogICAgICAgICAgIC43NXJlbSAhZGVmYXVsdDtcbiRwYWdpbmF0aW9uLXBhZGRpbmcteC1sZzogICAgICAgICAgIDEuNXJlbSAhZGVmYXVsdDtcblxuJHBhZ2luYXRpb24tZm9udC1zaXplOiAgICAgICAgICAgICAgJGZvbnQtc2l6ZS1iYXNlICFkZWZhdWx0O1xuXG4kcGFnaW5hdGlvbi1jb2xvcjogICAgICAgICAgICAgICAgICB2YXIoLS0jeyRwcmVmaXh9bGluay1jb2xvcikgIWRlZmF1bHQ7XG4kcGFnaW5hdGlvbi1iZzogICAgICAgICAgICAgICAgICAgICB2YXIoLS0jeyRwcmVmaXh9Ym9keS1iZykgIWRlZmF1bHQ7XG4kcGFnaW5hdGlvbi1ib3JkZXItcmFkaXVzOiAgICAgICAgICB2YXIoLS0jeyRwcmVmaXh9Ym9yZGVyLXJhZGl1cykgIWRlZmF1bHQ7XG4kcGFnaW5hdGlvbi1ib3JkZXItd2lkdGg6ICAgICAgICAgICB2YXIoLS0jeyRwcmVmaXh9Ym9yZGVyLXdpZHRoKSAhZGVmYXVsdDtcbiRwYWdpbmF0aW9uLW1hcmdpbi1zdGFydDogICAgICAgICAgIGNhbGMoI3skcGFnaW5hdGlvbi1ib3JkZXItd2lkdGh9ICogLTEpICFkZWZhdWx0OyAvLyBzdHlsZWxpbnQtZGlzYWJsZS1saW5lIGZ1bmN0aW9uLWRpc2FsbG93ZWQtbGlzdFxuJHBhZ2luYXRpb24tYm9yZGVyLWNvbG9yOiAgICAgICAgICAgdmFyKC0tI3skcHJlZml4fWJvcmRlci1jb2xvcikgIWRlZmF1bHQ7XG5cbiRwYWdpbmF0aW9uLWZvY3VzLWNvbG9yOiAgICAgICAgICAgIHZhcigtLSN7JHByZWZpeH1saW5rLWhvdmVyLWNvbG9yKSAhZGVmYXVsdDtcbiRwYWdpbmF0aW9uLWZvY3VzLWJnOiAgICAgICAgICAgICAgIHZhcigtLSN7JHByZWZpeH1zZWNvbmRhcnktYmcpICFkZWZhdWx0O1xuJHBhZ2luYXRpb24tZm9jdXMtYm94LXNoYWRvdzogICAgICAgJGZvY3VzLXJpbmctYm94LXNoYWRvdyAhZGVmYXVsdDtcbiRwYWdpbmF0aW9uLWZvY3VzLW91dGxpbmU6ICAgICAgICAgIDAgIWRlZmF1bHQ7XG5cbiRwYWdpbmF0aW9uLWhvdmVyLWNvbG9yOiAgICAgICAgICAgIHZhcigtLSN7JHByZWZpeH1saW5rLWhvdmVyLWNvbG9yKSAhZGVmYXVsdDtcbiRwYWdpbmF0aW9uLWhvdmVyLWJnOiAgICAgICAgICAgICAgIHZhcigtLSN7JHByZWZpeH10ZXJ0aWFyeS1iZykgIWRlZmF1bHQ7XG4kcGFnaW5hdGlvbi1ob3Zlci1ib3JkZXItY29sb3I6ICAgICB2YXIoLS0jeyRwcmVmaXh9Ym9yZGVyLWNvbG9yKSAhZGVmYXVsdDsgLy8gVG9kbyBpbiB2NjogcmVtb3ZlIHRoaXM/XG5cbiRwYWdpbmF0aW9uLWFjdGl2ZS1jb2xvcjogICAgICAgICAgICRjb21wb25lbnQtYWN0aXZlLWNvbG9yICFkZWZhdWx0O1xuJHBhZ2luYXRpb24tYWN0aXZlLWJnOiAgICAgICAgICAgICAgJGNvbXBvbmVudC1hY3RpdmUtYmcgIWRlZmF1bHQ7XG4kcGFnaW5hdGlvbi1hY3RpdmUtYm9yZGVyLWNvbG9yOiAgICAkY29tcG9uZW50LWFjdGl2ZS1iZyAhZGVmYXVsdDtcblxuJHBhZ2luYXRpb24tZGlzYWJsZWQtY29sb3I6ICAgICAgICAgdmFyKC0tI3skcHJlZml4fXNlY29uZGFyeS1jb2xvcikgIWRlZmF1bHQ7XG4kcGFnaW5hdGlvbi1kaXNhYmxlZC1iZzogICAgICAgICAgICB2YXIoLS0jeyRwcmVmaXh9c2Vjb25kYXJ5LWJnKSAhZGVmYXVsdDtcbiRwYWdpbmF0aW9uLWRpc2FibGVkLWJvcmRlci1jb2xvcjogIHZhcigtLSN7JHByZWZpeH1ib3JkZXItY29sb3IpICFkZWZhdWx0O1xuXG4kcGFnaW5hdGlvbi10cmFuc2l0aW9uOiAgICAgICAgICAgICAgY29sb3IgLjE1cyBlYXNlLWluLW91dCwgYmFja2dyb3VuZC1jb2xvciAuMTVzIGVhc2UtaW4tb3V0LCBib3JkZXItY29sb3IgLjE1cyBlYXNlLWluLW91dCwgYm94LXNoYWRvdyAuMTVzIGVhc2UtaW4tb3V0ICFkZWZhdWx0O1xuXG4kcGFnaW5hdGlvbi1ib3JkZXItcmFkaXVzLXNtOiAgICAgICB2YXIoLS0jeyRwcmVmaXh9Ym9yZGVyLXJhZGl1cy1zbSkgIWRlZmF1bHQ7XG4kcGFnaW5hdGlvbi1ib3JkZXItcmFkaXVzLWxnOiAgICAgICB2YXIoLS0jeyRwcmVmaXh9Ym9yZGVyLXJhZGl1cy1sZykgIWRlZmF1bHQ7XG4vLyBzY3NzLWRvY3MtZW5kIHBhZ2luYXRpb24tdmFyaWFibGVzXG5cblxuLy8gUGxhY2Vob2xkZXJzXG5cbi8vIHNjc3MtZG9jcy1zdGFydCBwbGFjZWhvbGRlcnNcbiRwbGFjZWhvbGRlci1vcGFjaXR5LW1heDogICAgICAgICAgIC41ICFkZWZhdWx0O1xuJHBsYWNlaG9sZGVyLW9wYWNpdHktbWluOiAgICAgICAgICAgLjIgIWRlZmF1bHQ7XG4vLyBzY3NzLWRvY3MtZW5kIHBsYWNlaG9sZGVyc1xuXG4vLyBDYXJkc1xuXG4vLyBzY3NzLWRvY3Mtc3RhcnQgY2FyZC12YXJpYWJsZXNcbiRjYXJkLXNwYWNlci15OiAgICAgICAgICAgICAgICAgICAgICRzcGFjZXIgIWRlZmF1bHQ7XG4kY2FyZC1zcGFjZXIteDogICAgICAgICAgICAgICAgICAgICAkc3BhY2VyICFkZWZhdWx0O1xuJGNhcmQtdGl0bGUtc3BhY2VyLXk6ICAgICAgICAgICAgICAgJHNwYWNlciAqIC41ICFkZWZhdWx0O1xuJGNhcmQtdGl0bGUtY29sb3I6ICAgICAgICAgICAgICAgICAgbnVsbCAhZGVmYXVsdDtcbiRjYXJkLXN1YnRpdGxlLWNvbG9yOiAgICAgICAgICAgICAgIG51bGwgIWRlZmF1bHQ7XG4kY2FyZC1ib3JkZXItd2lkdGg6ICAgICAgICAgICAgICAgICB2YXIoLS0jeyRwcmVmaXh9Ym9yZGVyLXdpZHRoKSAhZGVmYXVsdDtcbiRjYXJkLWJvcmRlci1jb2xvcjogICAgICAgICAgICAgICAgIHZhcigtLSN7JHByZWZpeH1ib3JkZXItY29sb3ItdHJhbnNsdWNlbnQpICFkZWZhdWx0O1xuJGNhcmQtYm9yZGVyLXJhZGl1czogICAgICAgICAgICAgICAgdmFyKC0tI3skcHJlZml4fWJvcmRlci1yYWRpdXMpICFkZWZhdWx0O1xuJGNhcmQtYm94LXNoYWRvdzogICAgICAgICAgICAgICAgICAgbnVsbCAhZGVmYXVsdDtcbiRjYXJkLWlubmVyLWJvcmRlci1yYWRpdXM6ICAgICAgICAgIHN1YnRyYWN0KCRjYXJkLWJvcmRlci1yYWRpdXMsICRjYXJkLWJvcmRlci13aWR0aCkgIWRlZmF1bHQ7XG4kY2FyZC1jYXAtcGFkZGluZy15OiAgICAgICAgICAgICAgICAkY2FyZC1zcGFjZXIteSAqIC41ICFkZWZhdWx0O1xuJGNhcmQtY2FwLXBhZGRpbmcteDogICAgICAgICAgICAgICAgJGNhcmQtc3BhY2VyLXggIWRlZmF1bHQ7XG4kY2FyZC1jYXAtYmc6ICAgICAgICAgICAgICAgICAgICAgICByZ2JhKHZhcigtLSN7JHByZWZpeH1ib2R5LWNvbG9yLXJnYiksIC4wMykgIWRlZmF1bHQ7XG4kY2FyZC1jYXAtY29sb3I6ICAgICAgICAgICAgICAgICAgICBudWxsICFkZWZhdWx0O1xuJGNhcmQtaGVpZ2h0OiAgICAgICAgICAgICAgICAgICAgICAgbnVsbCAhZGVmYXVsdDtcbiRjYXJkLWNvbG9yOiAgICAgICAgICAgICAgICAgICAgICAgIG51bGwgIWRlZmF1bHQ7XG4kY2FyZC1iZzogICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIoLS0jeyRwcmVmaXh9Ym9keS1iZykgIWRlZmF1bHQ7XG4kY2FyZC1pbWctb3ZlcmxheS1wYWRkaW5nOiAgICAgICAgICAkc3BhY2VyICFkZWZhdWx0O1xuJGNhcmQtZ3JvdXAtbWFyZ2luOiAgICAgICAgICAgICAgICAgJGdyaWQtZ3V0dGVyLXdpZHRoICogLjUgIWRlZmF1bHQ7XG4vLyBzY3NzLWRvY3MtZW5kIGNhcmQtdmFyaWFibGVzXG5cbi8vIEFjY29yZGlvblxuXG4vLyBzY3NzLWRvY3Mtc3RhcnQgYWNjb3JkaW9uLXZhcmlhYmxlc1xuJGFjY29yZGlvbi1wYWRkaW5nLXk6ICAgICAgICAgICAgICAgICAgICAgMXJlbSAhZGVmYXVsdDtcbiRhY2NvcmRpb24tcGFkZGluZy14OiAgICAgICAgICAgICAgICAgICAgIDEuMjVyZW0gIWRlZmF1bHQ7XG4kYWNjb3JkaW9uLWNvbG9yOiAgICAgICAgICAgICAgICAgICAgICAgICB2YXIoLS0jeyRwcmVmaXh9Ym9keS1jb2xvcikgIWRlZmF1bHQ7XG4kYWNjb3JkaW9uLWJnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIoLS0jeyRwcmVmaXh9Ym9keS1iZykgIWRlZmF1bHQ7XG4kYWNjb3JkaW9uLWJvcmRlci13aWR0aDogICAgICAgICAgICAgICAgICB2YXIoLS0jeyRwcmVmaXh9Ym9yZGVyLXdpZHRoKSAhZGVmYXVsdDtcbiRhY2NvcmRpb24tYm9yZGVyLWNvbG9yOiAgICAgICAgICAgICAgICAgIHZhcigtLSN7JHByZWZpeH1ib3JkZXItY29sb3IpICFkZWZhdWx0O1xuJGFjY29yZGlvbi1ib3JkZXItcmFkaXVzOiAgICAgICAgICAgICAgICAgdmFyKC0tI3skcHJlZml4fWJvcmRlci1yYWRpdXMpICFkZWZhdWx0O1xuJGFjY29yZGlvbi1pbm5lci1ib3JkZXItcmFkaXVzOiAgICAgICAgICAgc3VidHJhY3QoJGFjY29yZGlvbi1ib3JkZXItcmFkaXVzLCAkYWNjb3JkaW9uLWJvcmRlci13aWR0aCkgIWRlZmF1bHQ7XG5cbiRhY2NvcmRpb24tYm9keS1wYWRkaW5nLXk6ICAgICAgICAgICAgICAgICRhY2NvcmRpb24tcGFkZGluZy15ICFkZWZhdWx0O1xuJGFjY29yZGlvbi1ib2R5LXBhZGRpbmcteDogICAgICAgICAgICAgICAgJGFjY29yZGlvbi1wYWRkaW5nLXggIWRlZmF1bHQ7XG5cbiRhY2NvcmRpb24tYnV0dG9uLXBhZGRpbmcteTogICAgICAgICAgICAgICRhY2NvcmRpb24tcGFkZGluZy15ICFkZWZhdWx0O1xuJGFjY29yZGlvbi1idXR0b24tcGFkZGluZy14OiAgICAgICAgICAgICAgJGFjY29yZGlvbi1wYWRkaW5nLXggIWRlZmF1bHQ7XG4kYWNjb3JkaW9uLWJ1dHRvbi1jb2xvcjogICAgICAgICAgICAgICAgICB2YXIoLS0jeyRwcmVmaXh9Ym9keS1jb2xvcikgIWRlZmF1bHQ7XG4kYWNjb3JkaW9uLWJ1dHRvbi1iZzogICAgICAgICAgICAgICAgICAgICB2YXIoLS0jeyRwcmVmaXh9YWNjb3JkaW9uLWJnKSAhZGVmYXVsdDtcbiRhY2NvcmRpb24tdHJhbnNpdGlvbjogICAgICAgICAgICAgICAgICAgICRidG4tdHJhbnNpdGlvbiwgYm9yZGVyLXJhZGl1cyAuMTVzIGVhc2UgIWRlZmF1bHQ7XG4kYWNjb3JkaW9uLWJ1dHRvbi1hY3RpdmUtYmc6ICAgICAgICAgICAgICB2YXIoLS0jeyRwcmVmaXh9cHJpbWFyeS1iZy1zdWJ0bGUpICFkZWZhdWx0O1xuJGFjY29yZGlvbi1idXR0b24tYWN0aXZlLWNvbG9yOiAgICAgICAgICAgdmFyKC0tI3skcHJlZml4fXByaW1hcnktdGV4dC1lbXBoYXNpcykgIWRlZmF1bHQ7XG5cbi8vIGZ1c3YtZGlzYWJsZVxuJGFjY29yZGlvbi1idXR0b24tZm9jdXMtYm9yZGVyLWNvbG9yOiAgICAgJGlucHV0LWZvY3VzLWJvcmRlci1jb2xvciAhZGVmYXVsdDsgLy8gRGVwcmVjYXRlZCBpbiB2NS4zLjNcbi8vIGZ1c3YtZW5hYmxlXG4kYWNjb3JkaW9uLWJ1dHRvbi1mb2N1cy1ib3gtc2hhZG93OiAgICAgICAkYnRuLWZvY3VzLWJveC1zaGFkb3cgIWRlZmF1bHQ7XG5cbiRhY2NvcmRpb24taWNvbi13aWR0aDogICAgICAgICAgICAgICAgICAgIDEuMjVyZW0gIWRlZmF1bHQ7XG4kYWNjb3JkaW9uLWljb24tY29sb3I6ICAgICAgICAgICAgICAgICAgICAkYm9keS1jb2xvciAhZGVmYXVsdDtcbiRhY2NvcmRpb24taWNvbi1hY3RpdmUtY29sb3I6ICAgICAgICAgICAgICRwcmltYXJ5LXRleHQtZW1waGFzaXMgIWRlZmF1bHQ7XG4kYWNjb3JkaW9uLWljb24tdHJhbnNpdGlvbjogICAgICAgICAgICAgICB0cmFuc2Zvcm0gLjJzIGVhc2UtaW4tb3V0ICFkZWZhdWx0O1xuJGFjY29yZGlvbi1pY29uLXRyYW5zZm9ybTogICAgICAgICAgICAgICAgcm90YXRlKC0xODBkZWcpICFkZWZhdWx0O1xuXG4kYWNjb3JkaW9uLWJ1dHRvbi1pY29uOiAgICAgICAgIHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCw8c3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nMCAwIDE2IDE2JyBmaWxsPSdub25lJyBzdHJva2U9JyN7JGFjY29yZGlvbi1pY29uLWNvbG9yfScgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJz48cGF0aCBkPSdNMiA1TDggMTFMMTQgNScvPjwvc3ZnPlwiKSAhZGVmYXVsdDtcbiRhY2NvcmRpb24tYnV0dG9uLWFjdGl2ZS1pY29uOiAgdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLDxzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgMTYgMTYnIGZpbGw9J25vbmUnIHN0cm9rZT0nI3skYWNjb3JkaW9uLWljb24tYWN0aXZlLWNvbG9yfScgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJz48cGF0aCBkPSdNMiA1TDggMTFMMTQgNScvPjwvc3ZnPlwiKSAhZGVmYXVsdDtcbi8vIHNjc3MtZG9jcy1lbmQgYWNjb3JkaW9uLXZhcmlhYmxlc1xuXG4vLyBUb29sdGlwc1xuXG4vLyBzY3NzLWRvY3Mtc3RhcnQgdG9vbHRpcC12YXJpYWJsZXNcbiR0b29sdGlwLWZvbnQtc2l6ZTogICAgICAgICAgICAgICAgICRmb250LXNpemUtc20gIWRlZmF1bHQ7XG4kdG9vbHRpcC1tYXgtd2lkdGg6ICAgICAgICAgICAgICAgICAyMDBweCAhZGVmYXVsdDtcbiR0b29sdGlwLWNvbG9yOiAgICAgICAgICAgICAgICAgICAgIHZhcigtLSN7JHByZWZpeH1ib2R5LWJnKSAhZGVmYXVsdDtcbiR0b29sdGlwLWJnOiAgICAgICAgICAgICAgICAgICAgICAgIHZhcigtLSN7JHByZWZpeH1lbXBoYXNpcy1jb2xvcikgIWRlZmF1bHQ7XG4kdG9vbHRpcC1ib3JkZXItcmFkaXVzOiAgICAgICAgICAgICB2YXIoLS0jeyRwcmVmaXh9Ym9yZGVyLXJhZGl1cykgIWRlZmF1bHQ7XG4kdG9vbHRpcC1vcGFjaXR5OiAgICAgICAgICAgICAgICAgICAuOSAhZGVmYXVsdDtcbiR0b29sdGlwLXBhZGRpbmcteTogICAgICAgICAgICAgICAgICRzcGFjZXIgKiAuMjUgIWRlZmF1bHQ7XG4kdG9vbHRpcC1wYWRkaW5nLXg6ICAgICAgICAgICAgICAgICAkc3BhY2VyICogLjUgIWRlZmF1bHQ7XG4kdG9vbHRpcC1tYXJnaW46ICAgICAgICAgICAgICAgICAgICBudWxsICFkZWZhdWx0OyAvLyBUT0RPOiByZW1vdmUgdGhpcyBpbiB2NlxuXG4kdG9vbHRpcC1hcnJvdy13aWR0aDogICAgICAgICAgICAgICAuOHJlbSAhZGVmYXVsdDtcbiR0b29sdGlwLWFycm93LWhlaWdodDogICAgICAgICAgICAgIC40cmVtICFkZWZhdWx0O1xuLy8gZnVzdi1kaXNhYmxlXG4kdG9vbHRpcC1hcnJvdy1jb2xvcjogICAgICAgICAgICAgICBudWxsICFkZWZhdWx0OyAvLyBEZXByZWNhdGVkIGluIEJvb3RzdHJhcCA1LjIuMCBmb3IgQ1NTIHZhcmlhYmxlc1xuLy8gZnVzdi1lbmFibGVcbi8vIHNjc3MtZG9jcy1lbmQgdG9vbHRpcC12YXJpYWJsZXNcblxuLy8gRm9ybSB0b29sdGlwcyBtdXN0IGNvbWUgYWZ0ZXIgcmVndWxhciB0b29sdGlwc1xuLy8gc2Nzcy1kb2NzLXN0YXJ0IHRvb2x0aXAtZmVlZGJhY2stdmFyaWFibGVzXG4kZm9ybS1mZWVkYmFjay10b29sdGlwLXBhZGRpbmcteTogICAgICR0b29sdGlwLXBhZGRpbmcteSAhZGVmYXVsdDtcbiRmb3JtLWZlZWRiYWNrLXRvb2x0aXAtcGFkZGluZy14OiAgICAgJHRvb2x0aXAtcGFkZGluZy14ICFkZWZhdWx0O1xuJGZvcm0tZmVlZGJhY2stdG9vbHRpcC1mb250LXNpemU6ICAgICAkdG9vbHRpcC1mb250LXNpemUgIWRlZmF1bHQ7XG4kZm9ybS1mZWVkYmFjay10b29sdGlwLWxpbmUtaGVpZ2h0OiAgIG51bGwgIWRlZmF1bHQ7XG4kZm9ybS1mZWVkYmFjay10b29sdGlwLW9wYWNpdHk6ICAgICAgICR0b29sdGlwLW9wYWNpdHkgIWRlZmF1bHQ7XG4kZm9ybS1mZWVkYmFjay10b29sdGlwLWJvcmRlci1yYWRpdXM6ICR0b29sdGlwLWJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XG4vLyBzY3NzLWRvY3MtZW5kIHRvb2x0aXAtZmVlZGJhY2stdmFyaWFibGVzXG5cblxuLy8gUG9wb3ZlcnNcblxuLy8gc2Nzcy1kb2NzLXN0YXJ0IHBvcG92ZXItdmFyaWFibGVzXG4kcG9wb3Zlci1mb250LXNpemU6ICAgICAgICAgICAgICAgICAkZm9udC1zaXplLXNtICFkZWZhdWx0O1xuJHBvcG92ZXItYmc6ICAgICAgICAgICAgICAgICAgICAgICAgdmFyKC0tI3skcHJlZml4fWJvZHktYmcpICFkZWZhdWx0O1xuJHBvcG92ZXItbWF4LXdpZHRoOiAgICAgICAgICAgICAgICAgMjc2cHggIWRlZmF1bHQ7XG4kcG9wb3Zlci1ib3JkZXItd2lkdGg6ICAgICAgICAgICAgICB2YXIoLS0jeyRwcmVmaXh9Ym9yZGVyLXdpZHRoKSAhZGVmYXVsdDtcbiRwb3BvdmVyLWJvcmRlci1jb2xvcjogICAgICAgICAgICAgIHZhcigtLSN7JHByZWZpeH1ib3JkZXItY29sb3ItdHJhbnNsdWNlbnQpICFkZWZhdWx0O1xuJHBvcG92ZXItYm9yZGVyLXJhZGl1czogICAgICAgICAgICAgdmFyKC0tI3skcHJlZml4fWJvcmRlci1yYWRpdXMtbGcpICFkZWZhdWx0O1xuJHBvcG92ZXItaW5uZXItYm9yZGVyLXJhZGl1czogICAgICAgY2FsYygjeyRwb3BvdmVyLWJvcmRlci1yYWRpdXN9IC0gI3skcG9wb3Zlci1ib3JkZXItd2lkdGh9KSAhZGVmYXVsdDsgLy8gc3R5bGVsaW50LWRpc2FibGUtbGluZSBmdW5jdGlvbi1kaXNhbGxvd2VkLWxpc3RcbiRwb3BvdmVyLWJveC1zaGFkb3c6ICAgICAgICAgICAgICAgIHZhcigtLSN7JHByZWZpeH1ib3gtc2hhZG93KSAhZGVmYXVsdDtcblxuJHBvcG92ZXItaGVhZGVyLWZvbnQtc2l6ZTogICAgICAgICAgJGZvbnQtc2l6ZS1iYXNlICFkZWZhdWx0O1xuJHBvcG92ZXItaGVhZGVyLWJnOiAgICAgICAgICAgICAgICAgdmFyKC0tI3skcHJlZml4fXNlY29uZGFyeS1iZykgIWRlZmF1bHQ7XG4kcG9wb3Zlci1oZWFkZXItY29sb3I6ICAgICAgICAgICAgICAkaGVhZGluZ3MtY29sb3IgIWRlZmF1bHQ7XG4kcG9wb3Zlci1oZWFkZXItcGFkZGluZy15OiAgICAgICAgICAuNXJlbSAhZGVmYXVsdDtcbiRwb3BvdmVyLWhlYWRlci1wYWRkaW5nLXg6ICAgICAgICAgICRzcGFjZXIgIWRlZmF1bHQ7XG5cbiRwb3BvdmVyLWJvZHktY29sb3I6ICAgICAgICAgICAgICAgIHZhcigtLSN7JHByZWZpeH1ib2R5LWNvbG9yKSAhZGVmYXVsdDtcbiRwb3BvdmVyLWJvZHktcGFkZGluZy15OiAgICAgICAgICAgICRzcGFjZXIgIWRlZmF1bHQ7XG4kcG9wb3Zlci1ib2R5LXBhZGRpbmcteDogICAgICAgICAgICAkc3BhY2VyICFkZWZhdWx0O1xuXG4kcG9wb3Zlci1hcnJvdy13aWR0aDogICAgICAgICAgICAgICAxcmVtICFkZWZhdWx0O1xuJHBvcG92ZXItYXJyb3ctaGVpZ2h0OiAgICAgICAgICAgICAgLjVyZW0gIWRlZmF1bHQ7XG4vLyBzY3NzLWRvY3MtZW5kIHBvcG92ZXItdmFyaWFibGVzXG5cbi8vIGZ1c3YtZGlzYWJsZVxuLy8gRGVwcmVjYXRlZCBpbiBCb290c3RyYXAgNS4yLjAgZm9yIENTUyB2YXJpYWJsZXNcbiRwb3BvdmVyLWFycm93LWNvbG9yOiAgICAgICAgICAgICAgICRwb3BvdmVyLWJnICFkZWZhdWx0O1xuJHBvcG92ZXItYXJyb3ctb3V0ZXItY29sb3I6ICAgICAgICAgdmFyKC0tI3skcHJlZml4fWJvcmRlci1jb2xvci10cmFuc2x1Y2VudCkgIWRlZmF1bHQ7XG4vLyBmdXN2LWVuYWJsZVxuXG5cbi8vIFRvYXN0c1xuXG4vLyBzY3NzLWRvY3Mtc3RhcnQgdG9hc3QtdmFyaWFibGVzXG4kdG9hc3QtbWF4LXdpZHRoOiAgICAgICAgICAgICAgICAgICAzNTBweCAhZGVmYXVsdDtcbiR0b2FzdC1wYWRkaW5nLXg6ICAgICAgICAgICAgICAgICAgIC43NXJlbSAhZGVmYXVsdDtcbiR0b2FzdC1wYWRkaW5nLXk6ICAgICAgICAgICAgICAgICAgIC41cmVtICFkZWZhdWx0O1xuJHRvYXN0LWZvbnQtc2l6ZTogICAgICAgICAgICAgICAgICAgLjg3NXJlbSAhZGVmYXVsdDtcbiR0b2FzdC1jb2xvcjogICAgICAgICAgICAgICAgICAgICAgIG51bGwgIWRlZmF1bHQ7XG4kdG9hc3QtYmFja2dyb3VuZC1jb2xvcjogICAgICAgICAgICByZ2JhKHZhcigtLSN7JHByZWZpeH1ib2R5LWJnLXJnYiksIC44NSkgIWRlZmF1bHQ7XG4kdG9hc3QtYm9yZGVyLXdpZHRoOiAgICAgICAgICAgICAgICB2YXIoLS0jeyRwcmVmaXh9Ym9yZGVyLXdpZHRoKSAhZGVmYXVsdDtcbiR0b2FzdC1ib3JkZXItY29sb3I6ICAgICAgICAgICAgICAgIHZhcigtLSN7JHByZWZpeH1ib3JkZXItY29sb3ItdHJhbnNsdWNlbnQpICFkZWZhdWx0O1xuJHRvYXN0LWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAgICAgdmFyKC0tI3skcHJlZml4fWJvcmRlci1yYWRpdXMpICFkZWZhdWx0O1xuJHRvYXN0LWJveC1zaGFkb3c6ICAgICAgICAgICAgICAgICAgdmFyKC0tI3skcHJlZml4fWJveC1zaGFkb3cpICFkZWZhdWx0O1xuJHRvYXN0LXNwYWNpbmc6ICAgICAgICAgICAgICAgICAgICAgJGNvbnRhaW5lci1wYWRkaW5nLXggIWRlZmF1bHQ7XG5cbiR0b2FzdC1oZWFkZXItY29sb3I6ICAgICAgICAgICAgICAgIHZhcigtLSN7JHByZWZpeH1zZWNvbmRhcnktY29sb3IpICFkZWZhdWx0O1xuJHRvYXN0LWhlYWRlci1iYWNrZ3JvdW5kLWNvbG9yOiAgICAgcmdiYSh2YXIoLS0jeyRwcmVmaXh9Ym9keS1iZy1yZ2IpLCAuODUpICFkZWZhdWx0O1xuJHRvYXN0LWhlYWRlci1ib3JkZXItY29sb3I6ICAgICAgICAgJHRvYXN0LWJvcmRlci1jb2xvciAhZGVmYXVsdDtcbi8vIHNjc3MtZG9jcy1lbmQgdG9hc3QtdmFyaWFibGVzXG5cblxuLy8gQmFkZ2VzXG5cbi8vIHNjc3MtZG9jcy1zdGFydCBiYWRnZS12YXJpYWJsZXNcbiRiYWRnZS1mb250LXNpemU6ICAgICAgICAgICAgICAgICAgIC43NWVtICFkZWZhdWx0O1xuJGJhZGdlLWZvbnQtd2VpZ2h0OiAgICAgICAgICAgICAgICAgJGZvbnQtd2VpZ2h0LWJvbGQgIWRlZmF1bHQ7XG4kYmFkZ2UtY29sb3I6ICAgICAgICAgICAgICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XG4kYmFkZ2UtcGFkZGluZy15OiAgICAgICAgICAgICAgICAgICAuMzVlbSAhZGVmYXVsdDtcbiRiYWRnZS1wYWRkaW5nLXg6ICAgICAgICAgICAgICAgICAgIC42NWVtICFkZWZhdWx0O1xuJGJhZGdlLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAgICAgdmFyKC0tI3skcHJlZml4fWJvcmRlci1yYWRpdXMpICFkZWZhdWx0O1xuLy8gc2Nzcy1kb2NzLWVuZCBiYWRnZS12YXJpYWJsZXNcblxuXG4vLyBNb2RhbHNcblxuLy8gc2Nzcy1kb2NzLXN0YXJ0IG1vZGFsLXZhcmlhYmxlc1xuJG1vZGFsLWlubmVyLXBhZGRpbmc6ICAgICAgICAgICAgICAgJHNwYWNlciAhZGVmYXVsdDtcblxuJG1vZGFsLWZvb3Rlci1tYXJnaW4tYmV0d2VlbjogICAgICAgLjVyZW0gIWRlZmF1bHQ7XG5cbiRtb2RhbC1kaWFsb2ctbWFyZ2luOiAgICAgICAgICAgICAgIC41cmVtICFkZWZhdWx0O1xuJG1vZGFsLWRpYWxvZy1tYXJnaW4teS1zbS11cDogICAgICAgMS43NXJlbSAhZGVmYXVsdDtcblxuJG1vZGFsLXRpdGxlLWxpbmUtaGVpZ2h0OiAgICAgICAgICAgJGxpbmUtaGVpZ2h0LWJhc2UgIWRlZmF1bHQ7XG5cbiRtb2RhbC1jb250ZW50LWNvbG9yOiAgICAgICAgICAgICAgIG51bGwgIWRlZmF1bHQ7XG4kbW9kYWwtY29udGVudC1iZzogICAgICAgICAgICAgICAgICB2YXIoLS0jeyRwcmVmaXh9Ym9keS1iZykgIWRlZmF1bHQ7XG4kbW9kYWwtY29udGVudC1ib3JkZXItY29sb3I6ICAgICAgICB2YXIoLS0jeyRwcmVmaXh9Ym9yZGVyLWNvbG9yLXRyYW5zbHVjZW50KSAhZGVmYXVsdDtcbiRtb2RhbC1jb250ZW50LWJvcmRlci13aWR0aDogICAgICAgIHZhcigtLSN7JHByZWZpeH1ib3JkZXItd2lkdGgpICFkZWZhdWx0O1xuJG1vZGFsLWNvbnRlbnQtYm9yZGVyLXJhZGl1czogICAgICAgdmFyKC0tI3skcHJlZml4fWJvcmRlci1yYWRpdXMtbGcpICFkZWZhdWx0O1xuJG1vZGFsLWNvbnRlbnQtaW5uZXItYm9yZGVyLXJhZGl1czogc3VidHJhY3QoJG1vZGFsLWNvbnRlbnQtYm9yZGVyLXJhZGl1cywgJG1vZGFsLWNvbnRlbnQtYm9yZGVyLXdpZHRoKSAhZGVmYXVsdDtcbiRtb2RhbC1jb250ZW50LWJveC1zaGFkb3cteHM6ICAgICAgIHZhcigtLSN7JHByZWZpeH1ib3gtc2hhZG93LXNtKSAhZGVmYXVsdDtcbiRtb2RhbC1jb250ZW50LWJveC1zaGFkb3ctc20tdXA6ICAgIHZhcigtLSN7JHByZWZpeH1ib3gtc2hhZG93KSAhZGVmYXVsdDtcblxuJG1vZGFsLWJhY2tkcm9wLWJnOiAgICAgICAgICAgICAgICAgJGJsYWNrICFkZWZhdWx0O1xuJG1vZGFsLWJhY2tkcm9wLW9wYWNpdHk6ICAgICAgICAgICAgLjUgIWRlZmF1bHQ7XG5cbiRtb2RhbC1oZWFkZXItYm9yZGVyLWNvbG9yOiAgICAgICAgIHZhcigtLSN7JHByZWZpeH1ib3JkZXItY29sb3IpICFkZWZhdWx0O1xuJG1vZGFsLWhlYWRlci1ib3JkZXItd2lkdGg6ICAgICAgICAgJG1vZGFsLWNvbnRlbnQtYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xuJG1vZGFsLWhlYWRlci1wYWRkaW5nLXk6ICAgICAgICAgICAgJG1vZGFsLWlubmVyLXBhZGRpbmcgIWRlZmF1bHQ7XG4kbW9kYWwtaGVhZGVyLXBhZGRpbmcteDogICAgICAgICAgICAkbW9kYWwtaW5uZXItcGFkZGluZyAhZGVmYXVsdDtcbiRtb2RhbC1oZWFkZXItcGFkZGluZzogICAgICAgICAgICAgICRtb2RhbC1oZWFkZXItcGFkZGluZy15ICRtb2RhbC1oZWFkZXItcGFkZGluZy14ICFkZWZhdWx0OyAvLyBLZWVwIHRoaXMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG5cbiRtb2RhbC1mb290ZXItYmc6ICAgICAgICAgICAgICAgICAgIG51bGwgIWRlZmF1bHQ7XG4kbW9kYWwtZm9vdGVyLWJvcmRlci1jb2xvcjogICAgICAgICAkbW9kYWwtaGVhZGVyLWJvcmRlci1jb2xvciAhZGVmYXVsdDtcbiRtb2RhbC1mb290ZXItYm9yZGVyLXdpZHRoOiAgICAgICAgICRtb2RhbC1oZWFkZXItYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xuXG4kbW9kYWwtc206ICAgICAgICAgICAgICAgICAgICAgICAgICAzMDBweCAhZGVmYXVsdDtcbiRtb2RhbC1tZDogICAgICAgICAgICAgICAgICAgICAgICAgIDUwMHB4ICFkZWZhdWx0O1xuJG1vZGFsLWxnOiAgICAgICAgICAgICAgICAgICAgICAgICAgODAwcHggIWRlZmF1bHQ7XG4kbW9kYWwteGw6ICAgICAgICAgICAgICAgICAgICAgICAgICAxMTQwcHggIWRlZmF1bHQ7XG5cbiRtb2RhbC1mYWRlLXRyYW5zZm9ybTogICAgICAgICAgICAgIHRyYW5zbGF0ZSgwLCAtNTBweCkgIWRlZmF1bHQ7XG4kbW9kYWwtc2hvdy10cmFuc2Zvcm06ICAgICAgICAgICAgICBub25lICFkZWZhdWx0O1xuJG1vZGFsLXRyYW5zaXRpb246ICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtIC4zcyBlYXNlLW91dCAhZGVmYXVsdDtcbiRtb2RhbC1zY2FsZS10cmFuc2Zvcm06ICAgICAgICAgICAgIHNjYWxlKDEuMDIpICFkZWZhdWx0O1xuLy8gc2Nzcy1kb2NzLWVuZCBtb2RhbC12YXJpYWJsZXNcblxuXG4vLyBBbGVydHNcbi8vXG4vLyBEZWZpbmUgYWxlcnQgY29sb3JzLCBib3JkZXIgcmFkaXVzLCBhbmQgcGFkZGluZy5cblxuLy8gc2Nzcy1kb2NzLXN0YXJ0IGFsZXJ0LXZhcmlhYmxlc1xuJGFsZXJ0LXBhZGRpbmcteTogICAgICAgICAgICAgICAkc3BhY2VyICFkZWZhdWx0O1xuJGFsZXJ0LXBhZGRpbmcteDogICAgICAgICAgICAgICAkc3BhY2VyICFkZWZhdWx0O1xuJGFsZXJ0LW1hcmdpbi1ib3R0b206ICAgICAgICAgICAxcmVtICFkZWZhdWx0O1xuJGFsZXJ0LWJvcmRlci1yYWRpdXM6ICAgICAgICAgICB2YXIoLS0jeyRwcmVmaXh9Ym9yZGVyLXJhZGl1cykgIWRlZmF1bHQ7XG4kYWxlcnQtbGluay1mb250LXdlaWdodDogICAgICAgICRmb250LXdlaWdodC1ib2xkICFkZWZhdWx0O1xuJGFsZXJ0LWJvcmRlci13aWR0aDogICAgICAgICAgICB2YXIoLS0jeyRwcmVmaXh9Ym9yZGVyLXdpZHRoKSAhZGVmYXVsdDtcbiRhbGVydC1kaXNtaXNzaWJsZS1wYWRkaW5nLXI6ICAgJGFsZXJ0LXBhZGRpbmcteCAqIDMgIWRlZmF1bHQ7IC8vIDN4IGNvdmVycyB3aWR0aCBvZiB4IHBsdXMgZGVmYXVsdCBwYWRkaW5nIG9uIGVpdGhlciBzaWRlXG4vLyBzY3NzLWRvY3MtZW5kIGFsZXJ0LXZhcmlhYmxlc1xuXG4vLyBmdXN2LWRpc2FibGVcbiRhbGVydC1iZy1zY2FsZTogICAgICAgICAgICAgICAgLTgwJSAhZGVmYXVsdDsgLy8gRGVwcmVjYXRlZCBpbiB2NS4yLjAsIHRvIGJlIHJlbW92ZWQgaW4gdjZcbiRhbGVydC1ib3JkZXItc2NhbGU6ICAgICAgICAgICAgLTcwJSAhZGVmYXVsdDsgLy8gRGVwcmVjYXRlZCBpbiB2NS4yLjAsIHRvIGJlIHJlbW92ZWQgaW4gdjZcbiRhbGVydC1jb2xvci1zY2FsZTogICAgICAgICAgICAgNDAlICFkZWZhdWx0OyAvLyBEZXByZWNhdGVkIGluIHY1LjIuMCwgdG8gYmUgcmVtb3ZlZCBpbiB2NlxuLy8gZnVzdi1lbmFibGVcblxuLy8gUHJvZ3Jlc3MgYmFyc1xuXG4vLyBzY3NzLWRvY3Mtc3RhcnQgcHJvZ3Jlc3MtdmFyaWFibGVzXG4kcHJvZ3Jlc3MtaGVpZ2h0OiAgICAgICAgICAgICAgICAgICAxcmVtICFkZWZhdWx0O1xuJHByb2dyZXNzLWZvbnQtc2l6ZTogICAgICAgICAgICAgICAgJGZvbnQtc2l6ZS1iYXNlICogLjc1ICFkZWZhdWx0O1xuJHByb2dyZXNzLWJnOiAgICAgICAgICAgICAgICAgICAgICAgdmFyKC0tI3skcHJlZml4fXNlY29uZGFyeS1iZykgIWRlZmF1bHQ7XG4kcHJvZ3Jlc3MtYm9yZGVyLXJhZGl1czogICAgICAgICAgICB2YXIoLS0jeyRwcmVmaXh9Ym9yZGVyLXJhZGl1cykgIWRlZmF1bHQ7XG4kcHJvZ3Jlc3MtYm94LXNoYWRvdzogICAgICAgICAgICAgICB2YXIoLS0jeyRwcmVmaXh9Ym94LXNoYWRvdy1pbnNldCkgIWRlZmF1bHQ7XG4kcHJvZ3Jlc3MtYmFyLWNvbG9yOiAgICAgICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XG4kcHJvZ3Jlc3MtYmFyLWJnOiAgICAgICAgICAgICAgICAgICAkcHJpbWFyeSAhZGVmYXVsdDtcbiRwcm9ncmVzcy1iYXItYW5pbWF0aW9uLXRpbWluZzogICAgIDFzIGxpbmVhciBpbmZpbml0ZSAhZGVmYXVsdDtcbiRwcm9ncmVzcy1iYXItdHJhbnNpdGlvbjogICAgICAgICAgIHdpZHRoIC42cyBlYXNlICFkZWZhdWx0O1xuLy8gc2Nzcy1kb2NzLWVuZCBwcm9ncmVzcy12YXJpYWJsZXNcblxuXG4vLyBMaXN0IGdyb3VwXG5cbi8vIHNjc3MtZG9jcy1zdGFydCBsaXN0LWdyb3VwLXZhcmlhYmxlc1xuJGxpc3QtZ3JvdXAtY29sb3I6ICAgICAgICAgICAgICAgICAgdmFyKC0tI3skcHJlZml4fWJvZHktY29sb3IpICFkZWZhdWx0O1xuJGxpc3QtZ3JvdXAtYmc6ICAgICAgICAgICAgICAgICAgICAgdmFyKC0tI3skcHJlZml4fWJvZHktYmcpICFkZWZhdWx0O1xuJGxpc3QtZ3JvdXAtYm9yZGVyLWNvbG9yOiAgICAgICAgICAgdmFyKC0tI3skcHJlZml4fWJvcmRlci1jb2xvcikgIWRlZmF1bHQ7XG4kbGlzdC1ncm91cC1ib3JkZXItd2lkdGg6ICAgICAgICAgICB2YXIoLS0jeyRwcmVmaXh9Ym9yZGVyLXdpZHRoKSAhZGVmYXVsdDtcbiRsaXN0LWdyb3VwLWJvcmRlci1yYWRpdXM6ICAgICAgICAgIHZhcigtLSN7JHByZWZpeH1ib3JkZXItcmFkaXVzKSAhZGVmYXVsdDtcblxuJGxpc3QtZ3JvdXAtaXRlbS1wYWRkaW5nLXk6ICAgICAgICAgJHNwYWNlciAqIC41ICFkZWZhdWx0O1xuJGxpc3QtZ3JvdXAtaXRlbS1wYWRkaW5nLXg6ICAgICAgICAgJHNwYWNlciAhZGVmYXVsdDtcbi8vIGZ1c3YtZGlzYWJsZVxuJGxpc3QtZ3JvdXAtaXRlbS1iZy1zY2FsZTogICAgICAgICAgLTgwJSAhZGVmYXVsdDsgLy8gRGVwcmVjYXRlZCBpbiB2NS4zLjBcbiRsaXN0LWdyb3VwLWl0ZW0tY29sb3Itc2NhbGU6ICAgICAgIDQwJSAhZGVmYXVsdDsgLy8gRGVwcmVjYXRlZCBpbiB2NS4zLjBcbi8vIGZ1c3YtZW5hYmxlXG5cbiRsaXN0LWdyb3VwLWhvdmVyLWJnOiAgICAgICAgICAgICAgIHZhcigtLSN7JHByZWZpeH10ZXJ0aWFyeS1iZykgIWRlZmF1bHQ7XG4kbGlzdC1ncm91cC1hY3RpdmUtY29sb3I6ICAgICAgICAgICAkY29tcG9uZW50LWFjdGl2ZS1jb2xvciAhZGVmYXVsdDtcbiRsaXN0LWdyb3VwLWFjdGl2ZS1iZzogICAgICAgICAgICAgICRjb21wb25lbnQtYWN0aXZlLWJnICFkZWZhdWx0O1xuJGxpc3QtZ3JvdXAtYWN0aXZlLWJvcmRlci1jb2xvcjogICAgJGxpc3QtZ3JvdXAtYWN0aXZlLWJnICFkZWZhdWx0O1xuXG4kbGlzdC1ncm91cC1kaXNhYmxlZC1jb2xvcjogICAgICAgICB2YXIoLS0jeyRwcmVmaXh9c2Vjb25kYXJ5LWNvbG9yKSAhZGVmYXVsdDtcbiRsaXN0LWdyb3VwLWRpc2FibGVkLWJnOiAgICAgICAgICAgICRsaXN0LWdyb3VwLWJnICFkZWZhdWx0O1xuXG4kbGlzdC1ncm91cC1hY3Rpb24tY29sb3I6ICAgICAgICAgICB2YXIoLS0jeyRwcmVmaXh9c2Vjb25kYXJ5LWNvbG9yKSAhZGVmYXVsdDtcbiRsaXN0LWdyb3VwLWFjdGlvbi1ob3Zlci1jb2xvcjogICAgIHZhcigtLSN7JHByZWZpeH1lbXBoYXNpcy1jb2xvcikgIWRlZmF1bHQ7XG5cbiRsaXN0LWdyb3VwLWFjdGlvbi1hY3RpdmUtY29sb3I6ICAgIHZhcigtLSN7JHByZWZpeH1ib2R5LWNvbG9yKSAhZGVmYXVsdDtcbiRsaXN0LWdyb3VwLWFjdGlvbi1hY3RpdmUtYmc6ICAgICAgIHZhcigtLSN7JHByZWZpeH1zZWNvbmRhcnktYmcpICFkZWZhdWx0O1xuLy8gc2Nzcy1kb2NzLWVuZCBsaXN0LWdyb3VwLXZhcmlhYmxlc1xuXG5cbi8vIEltYWdlIHRodW1ibmFpbHNcblxuLy8gc2Nzcy1kb2NzLXN0YXJ0IHRodW1ibmFpbC12YXJpYWJsZXNcbiR0aHVtYm5haWwtcGFkZGluZzogICAgICAgICAgICAgICAgIC4yNXJlbSAhZGVmYXVsdDtcbiR0aHVtYm5haWwtYmc6ICAgICAgICAgICAgICAgICAgICAgIHZhcigtLSN7JHByZWZpeH1ib2R5LWJnKSAhZGVmYXVsdDtcbiR0aHVtYm5haWwtYm9yZGVyLXdpZHRoOiAgICAgICAgICAgIHZhcigtLSN7JHByZWZpeH1ib3JkZXItd2lkdGgpICFkZWZhdWx0O1xuJHRodW1ibmFpbC1ib3JkZXItY29sb3I6ICAgICAgICAgICAgdmFyKC0tI3skcHJlZml4fWJvcmRlci1jb2xvcikgIWRlZmF1bHQ7XG4kdGh1bWJuYWlsLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICB2YXIoLS0jeyRwcmVmaXh9Ym9yZGVyLXJhZGl1cykgIWRlZmF1bHQ7XG4kdGh1bWJuYWlsLWJveC1zaGFkb3c6ICAgICAgICAgICAgICB2YXIoLS0jeyRwcmVmaXh9Ym94LXNoYWRvdy1zbSkgIWRlZmF1bHQ7XG4vLyBzY3NzLWRvY3MtZW5kIHRodW1ibmFpbC12YXJpYWJsZXNcblxuXG4vLyBGaWd1cmVzXG5cbi8vIHNjc3MtZG9jcy1zdGFydCBmaWd1cmUtdmFyaWFibGVzXG4kZmlndXJlLWNhcHRpb24tZm9udC1zaXplOiAgICAgICAgICAkc21hbGwtZm9udC1zaXplICFkZWZhdWx0O1xuJGZpZ3VyZS1jYXB0aW9uLWNvbG9yOiAgICAgICAgICAgICAgdmFyKC0tI3skcHJlZml4fXNlY29uZGFyeS1jb2xvcikgIWRlZmF1bHQ7XG4vLyBzY3NzLWRvY3MtZW5kIGZpZ3VyZS12YXJpYWJsZXNcblxuXG4vLyBCcmVhZGNydW1ic1xuXG4vLyBzY3NzLWRvY3Mtc3RhcnQgYnJlYWRjcnVtYi12YXJpYWJsZXNcbiRicmVhZGNydW1iLWZvbnQtc2l6ZTogICAgICAgICAgICAgIG51bGwgIWRlZmF1bHQ7XG4kYnJlYWRjcnVtYi1wYWRkaW5nLXk6ICAgICAgICAgICAgICAwICFkZWZhdWx0O1xuJGJyZWFkY3J1bWItcGFkZGluZy14OiAgICAgICAgICAgICAgMCAhZGVmYXVsdDtcbiRicmVhZGNydW1iLWl0ZW0tcGFkZGluZy14OiAgICAgICAgIC41cmVtICFkZWZhdWx0O1xuJGJyZWFkY3J1bWItbWFyZ2luLWJvdHRvbTogICAgICAgICAgMXJlbSAhZGVmYXVsdDtcbiRicmVhZGNydW1iLWJnOiAgICAgICAgICAgICAgICAgICAgIG51bGwgIWRlZmF1bHQ7XG4kYnJlYWRjcnVtYi1kaXZpZGVyLWNvbG9yOiAgICAgICAgICB2YXIoLS0jeyRwcmVmaXh9c2Vjb25kYXJ5LWNvbG9yKSAhZGVmYXVsdDtcbiRicmVhZGNydW1iLWFjdGl2ZS1jb2xvcjogICAgICAgICAgIHZhcigtLSN7JHByZWZpeH1zZWNvbmRhcnktY29sb3IpICFkZWZhdWx0O1xuJGJyZWFkY3J1bWItZGl2aWRlcjogICAgICAgICAgICAgICAgcXVvdGUoXCIvXCIpICFkZWZhdWx0O1xuJGJyZWFkY3J1bWItZGl2aWRlci1mbGlwcGVkOiAgICAgICAgJGJyZWFkY3J1bWItZGl2aWRlciAhZGVmYXVsdDtcbiRicmVhZGNydW1iLWJvcmRlci1yYWRpdXM6ICAgICAgICAgIG51bGwgIWRlZmF1bHQ7XG4vLyBzY3NzLWRvY3MtZW5kIGJyZWFkY3J1bWItdmFyaWFibGVzXG5cbi8vIENhcm91c2VsXG5cbi8vIHNjc3MtZG9jcy1zdGFydCBjYXJvdXNlbC12YXJpYWJsZXNcbiRjYXJvdXNlbC1jb250cm9sLWNvbG9yOiAgICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XG4kY2Fyb3VzZWwtY29udHJvbC13aWR0aDogICAgICAgICAgICAgMTUlICFkZWZhdWx0O1xuJGNhcm91c2VsLWNvbnRyb2wtb3BhY2l0eTogICAgICAgICAgIC41ICFkZWZhdWx0O1xuJGNhcm91c2VsLWNvbnRyb2wtaG92ZXItb3BhY2l0eTogICAgIC45ICFkZWZhdWx0O1xuJGNhcm91c2VsLWNvbnRyb2wtdHJhbnNpdGlvbjogICAgICAgIG9wYWNpdHkgLjE1cyBlYXNlICFkZWZhdWx0O1xuXG4kY2Fyb3VzZWwtaW5kaWNhdG9yLXdpZHRoOiAgICAgICAgICAgMzBweCAhZGVmYXVsdDtcbiRjYXJvdXNlbC1pbmRpY2F0b3ItaGVpZ2h0OiAgICAgICAgICAzcHggIWRlZmF1bHQ7XG4kY2Fyb3VzZWwtaW5kaWNhdG9yLWhpdC1hcmVhLWhlaWdodDogMTBweCAhZGVmYXVsdDtcbiRjYXJvdXNlbC1pbmRpY2F0b3Itc3BhY2VyOiAgICAgICAgICAzcHggIWRlZmF1bHQ7XG4kY2Fyb3VzZWwtaW5kaWNhdG9yLW9wYWNpdHk6ICAgICAgICAgLjUgIWRlZmF1bHQ7XG4kY2Fyb3VzZWwtaW5kaWNhdG9yLWFjdGl2ZS1iZzogICAgICAgJHdoaXRlICFkZWZhdWx0O1xuJGNhcm91c2VsLWluZGljYXRvci1hY3RpdmUtb3BhY2l0eTogIDEgIWRlZmF1bHQ7XG4kY2Fyb3VzZWwtaW5kaWNhdG9yLXRyYW5zaXRpb246ICAgICAgb3BhY2l0eSAuNnMgZWFzZSAhZGVmYXVsdDtcblxuJGNhcm91c2VsLWNhcHRpb24td2lkdGg6ICAgICAgICAgICAgIDcwJSAhZGVmYXVsdDtcbiRjYXJvdXNlbC1jYXB0aW9uLWNvbG9yOiAgICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XG4kY2Fyb3VzZWwtY2FwdGlvbi1wYWRkaW5nLXk6ICAgICAgICAgMS4yNXJlbSAhZGVmYXVsdDtcbiRjYXJvdXNlbC1jYXB0aW9uLXNwYWNlcjogICAgICAgICAgICAxLjI1cmVtICFkZWZhdWx0O1xuXG4kY2Fyb3VzZWwtY29udHJvbC1pY29uLXdpZHRoOiAgICAgICAgMnJlbSAhZGVmYXVsdDtcblxuJGNhcm91c2VsLWNvbnRyb2wtcHJldi1pY29uLWJnOiAgICAgIHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCw8c3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nMCAwIDE2IDE2JyBmaWxsPScjeyRjYXJvdXNlbC1jb250cm9sLWNvbG9yfSc+PHBhdGggZD0nTTExLjM1NCAxLjY0NmEuNS41IDAgMCAxIDAgLjcwOEw1LjcwNyA4bDUuNjQ3IDUuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhsLTYtNmEuNS41IDAgMCAxIDAtLjcwOGw2LTZhLjUuNSAwIDAgMSAuNzA4IDB6Jy8+PC9zdmc+XCIpICFkZWZhdWx0O1xuJGNhcm91c2VsLWNvbnRyb2wtbmV4dC1pY29uLWJnOiAgICAgIHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCw8c3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nMCAwIDE2IDE2JyBmaWxsPScjeyRjYXJvdXNlbC1jb250cm9sLWNvbG9yfSc+PHBhdGggZD0nTTQuNjQ2IDEuNjQ2YS41LjUgMCAwIDEgLjcwOCAwbDYgNmEuNS41IDAgMCAxIDAgLjcwOGwtNiA2YS41LjUgMCAwIDEtLjcwOC0uNzA4TDEwLjI5MyA4IDQuNjQ2IDIuMzU0YS41LjUgMCAwIDEgMC0uNzA4eicvPjwvc3ZnPlwiKSAhZGVmYXVsdDtcblxuJGNhcm91c2VsLXRyYW5zaXRpb24tZHVyYXRpb246ICAgICAgIC42cyAhZGVmYXVsdDtcbiRjYXJvdXNlbC10cmFuc2l0aW9uOiAgICAgICAgICAgICAgICB0cmFuc2Zvcm0gJGNhcm91c2VsLXRyYW5zaXRpb24tZHVyYXRpb24gZWFzZS1pbi1vdXQgIWRlZmF1bHQ7IC8vIERlZmluZSB0cmFuc2Zvcm0gdHJhbnNpdGlvbiBmaXJzdCBpZiB1c2luZyBtdWx0aXBsZSB0cmFuc2l0aW9ucyAoZS5nLiwgYHRyYW5zZm9ybSAycyBlYXNlLCBvcGFjaXR5IC41cyBlYXNlLW91dGApXG4vLyBzY3NzLWRvY3MtZW5kIGNhcm91c2VsLXZhcmlhYmxlc1xuXG4vLyBzY3NzLWRvY3Mtc3RhcnQgY2Fyb3VzZWwtZGFyay12YXJpYWJsZXNcbiRjYXJvdXNlbC1kYXJrLWluZGljYXRvci1hY3RpdmUtYmc6ICAkYmxhY2sgIWRlZmF1bHQ7XG4kY2Fyb3VzZWwtZGFyay1jYXB0aW9uLWNvbG9yOiAgICAgICAgJGJsYWNrICFkZWZhdWx0O1xuJGNhcm91c2VsLWRhcmstY29udHJvbC1pY29uLWZpbHRlcjogIGludmVydCgxKSBncmF5c2NhbGUoMTAwKSAhZGVmYXVsdDtcbi8vIHNjc3MtZG9jcy1lbmQgY2Fyb3VzZWwtZGFyay12YXJpYWJsZXNcblxuXG4vLyBTcGlubmVyc1xuXG4vLyBzY3NzLWRvY3Mtc3RhcnQgc3Bpbm5lci12YXJpYWJsZXNcbiRzcGlubmVyLXdpZHRoOiAgICAgICAgICAgMnJlbSAhZGVmYXVsdDtcbiRzcGlubmVyLWhlaWdodDogICAgICAgICAgJHNwaW5uZXItd2lkdGggIWRlZmF1bHQ7XG4kc3Bpbm5lci12ZXJ0aWNhbC1hbGlnbjogIC0uMTI1ZW0gIWRlZmF1bHQ7XG4kc3Bpbm5lci1ib3JkZXItd2lkdGg6ICAgIC4yNWVtICFkZWZhdWx0O1xuJHNwaW5uZXItYW5pbWF0aW9uLXNwZWVkOiAuNzVzICFkZWZhdWx0O1xuXG4kc3Bpbm5lci13aWR0aC1zbTogICAgICAgIDFyZW0gIWRlZmF1bHQ7XG4kc3Bpbm5lci1oZWlnaHQtc206ICAgICAgICRzcGlubmVyLXdpZHRoLXNtICFkZWZhdWx0O1xuJHNwaW5uZXItYm9yZGVyLXdpZHRoLXNtOiAuMmVtICFkZWZhdWx0O1xuLy8gc2Nzcy1kb2NzLWVuZCBzcGlubmVyLXZhcmlhYmxlc1xuXG5cbi8vIENsb3NlXG5cbi8vIHNjc3MtZG9jcy1zdGFydCBjbG9zZS12YXJpYWJsZXNcbiRidG4tY2xvc2Utd2lkdGg6ICAgICAgICAgICAgMWVtICFkZWZhdWx0O1xuJGJ0bi1jbG9zZS1oZWlnaHQ6ICAgICAgICAgICAkYnRuLWNsb3NlLXdpZHRoICFkZWZhdWx0O1xuJGJ0bi1jbG9zZS1wYWRkaW5nLXg6ICAgICAgICAuMjVlbSAhZGVmYXVsdDtcbiRidG4tY2xvc2UtcGFkZGluZy15OiAgICAgICAgJGJ0bi1jbG9zZS1wYWRkaW5nLXggIWRlZmF1bHQ7XG4kYnRuLWNsb3NlLWNvbG9yOiAgICAgICAgICAgICRibGFjayAhZGVmYXVsdDtcbiRidG4tY2xvc2UtYmc6ICAgICAgICAgICAgICAgdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLDxzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgMTYgMTYnIGZpbGw9JyN7JGJ0bi1jbG9zZS1jb2xvcn0nPjxwYXRoIGQ9J00uMjkzLjI5M2ExIDEgMCAwIDEgMS40MTQgMEw4IDYuNTg2IDE0LjI5My4yOTNhMSAxIDAgMSAxIDEuNDE0IDEuNDE0TDkuNDE0IDhsNi4yOTMgNi4yOTNhMSAxIDAgMCAxLTEuNDE0IDEuNDE0TDggOS40MTRsLTYuMjkzIDYuMjkzYTEgMSAwIDAgMS0xLjQxNC0xLjQxNEw2LjU4NiA4IC4yOTMgMS43MDdhMSAxIDAgMCAxIDAtMS40MTR6Jy8+PC9zdmc+XCIpICFkZWZhdWx0O1xuJGJ0bi1jbG9zZS1mb2N1cy1zaGFkb3c6ICAgICAkZm9jdXMtcmluZy1ib3gtc2hhZG93ICFkZWZhdWx0O1xuJGJ0bi1jbG9zZS1vcGFjaXR5OiAgICAgICAgICAuNSAhZGVmYXVsdDtcbiRidG4tY2xvc2UtaG92ZXItb3BhY2l0eTogICAgLjc1ICFkZWZhdWx0O1xuJGJ0bi1jbG9zZS1mb2N1cy1vcGFjaXR5OiAgICAxICFkZWZhdWx0O1xuJGJ0bi1jbG9zZS1kaXNhYmxlZC1vcGFjaXR5OiAuMjUgIWRlZmF1bHQ7XG4kYnRuLWNsb3NlLXdoaXRlLWZpbHRlcjogICAgIGludmVydCgxKSBncmF5c2NhbGUoMTAwJSkgYnJpZ2h0bmVzcygyMDAlKSAhZGVmYXVsdDtcbi8vIHNjc3MtZG9jcy1lbmQgY2xvc2UtdmFyaWFibGVzXG5cblxuLy8gT2ZmY2FudmFzXG5cbi8vIHNjc3MtZG9jcy1zdGFydCBvZmZjYW52YXMtdmFyaWFibGVzXG4kb2ZmY2FudmFzLXBhZGRpbmcteTogICAgICAgICAgICAgICAkbW9kYWwtaW5uZXItcGFkZGluZyAhZGVmYXVsdDtcbiRvZmZjYW52YXMtcGFkZGluZy14OiAgICAgICAgICAgICAgICRtb2RhbC1pbm5lci1wYWRkaW5nICFkZWZhdWx0O1xuJG9mZmNhbnZhcy1ob3Jpem9udGFsLXdpZHRoOiAgICAgICAgNDAwcHggIWRlZmF1bHQ7XG4kb2ZmY2FudmFzLXZlcnRpY2FsLWhlaWdodDogICAgICAgICAzMHZoICFkZWZhdWx0O1xuJG9mZmNhbnZhcy10cmFuc2l0aW9uLWR1cmF0aW9uOiAgICAgLjNzICFkZWZhdWx0O1xuJG9mZmNhbnZhcy1ib3JkZXItY29sb3I6ICAgICAgICAgICAgJG1vZGFsLWNvbnRlbnQtYm9yZGVyLWNvbG9yICFkZWZhdWx0O1xuJG9mZmNhbnZhcy1ib3JkZXItd2lkdGg6ICAgICAgICAgICAgJG1vZGFsLWNvbnRlbnQtYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xuJG9mZmNhbnZhcy10aXRsZS1saW5lLWhlaWdodDogICAgICAgJG1vZGFsLXRpdGxlLWxpbmUtaGVpZ2h0ICFkZWZhdWx0O1xuJG9mZmNhbnZhcy1iZy1jb2xvcjogICAgICAgICAgICAgICAgdmFyKC0tI3skcHJlZml4fWJvZHktYmcpICFkZWZhdWx0O1xuJG9mZmNhbnZhcy1jb2xvcjogICAgICAgICAgICAgICAgICAgdmFyKC0tI3skcHJlZml4fWJvZHktY29sb3IpICFkZWZhdWx0O1xuJG9mZmNhbnZhcy1ib3gtc2hhZG93OiAgICAgICAgICAgICAgJG1vZGFsLWNvbnRlbnQtYm94LXNoYWRvdy14cyAhZGVmYXVsdDtcbiRvZmZjYW52YXMtYmFja2Ryb3AtYmc6ICAgICAgICAgICAgICRtb2RhbC1iYWNrZHJvcC1iZyAhZGVmYXVsdDtcbiRvZmZjYW52YXMtYmFja2Ryb3Atb3BhY2l0eTogICAgICAgICRtb2RhbC1iYWNrZHJvcC1vcGFjaXR5ICFkZWZhdWx0O1xuLy8gc2Nzcy1kb2NzLWVuZCBvZmZjYW52YXMtdmFyaWFibGVzXG5cbi8vIENvZGVcblxuJGNvZGUtZm9udC1zaXplOiAgICAgICAgICAgICAgICAgICAgJHNtYWxsLWZvbnQtc2l6ZSAhZGVmYXVsdDtcbiRjb2RlLWNvbG9yOiAgICAgICAgICAgICAgICAgICAgICAgICRwaW5rICFkZWZhdWx0O1xuXG4ka2JkLXBhZGRpbmcteTogICAgICAgICAgICAgICAgICAgICAuMTg3NXJlbSAhZGVmYXVsdDtcbiRrYmQtcGFkZGluZy14OiAgICAgICAgICAgICAgICAgICAgIC4zNzVyZW0gIWRlZmF1bHQ7XG4ka2JkLWZvbnQtc2l6ZTogICAgICAgICAgICAgICAgICAgICAkY29kZS1mb250LXNpemUgIWRlZmF1bHQ7XG4ka2JkLWNvbG9yOiAgICAgICAgICAgICAgICAgICAgICAgICB2YXIoLS0jeyRwcmVmaXh9Ym9keS1iZykgIWRlZmF1bHQ7XG4ka2JkLWJnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIoLS0jeyRwcmVmaXh9Ym9keS1jb2xvcikgIWRlZmF1bHQ7XG4kbmVzdGVkLWtiZC1mb250LXdlaWdodDogICAgICAgICAgICBudWxsICFkZWZhdWx0OyAvLyBEZXByZWNhdGVkIGluIHY1LjIuMCwgcmVtb3ZpbmcgaW4gdjZcblxuJHByZS1jb2xvcjogICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCAhZGVmYXVsdDtcblxuQGltcG9ydCBcInZhcmlhYmxlcy1kYXJrXCI7IC8vIFRPRE86IGNhbiBiZSByZW1vdmVkIHNhZmVseSBpbiB2Niwgb25seSBoZXJlIHRvIGF2b2lkIGJyZWFraW5nIGNoYW5nZXMgaW4gdjUuM1xuIiwiLy8gc3R5bGVsaW50LWRpc2FibGUgcHJvcGVydHktZGlzYWxsb3dlZC1saXN0XG4vLyBTaW5nbGUgc2lkZSBib3JkZXItcmFkaXVzXG5cbi8vIEhlbHBlciBmdW5jdGlvbiB0byByZXBsYWNlIG5lZ2F0aXZlIHZhbHVlcyB3aXRoIDBcbkBmdW5jdGlvbiB2YWxpZC1yYWRpdXMoJHJhZGl1cykge1xuICAkcmV0dXJuOiAoKTtcbiAgQGVhY2ggJHZhbHVlIGluICRyYWRpdXMge1xuICAgIEBpZiB0eXBlLW9mKCR2YWx1ZSkgPT0gbnVtYmVyIHtcbiAgICAgICRyZXR1cm46IGFwcGVuZCgkcmV0dXJuLCBtYXgoJHZhbHVlLCAwKSk7XG4gICAgfSBAZWxzZSB7XG4gICAgICAkcmV0dXJuOiBhcHBlbmQoJHJldHVybiwgJHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgQHJldHVybiAkcmV0dXJuO1xufVxuXG4vLyBzY3NzLWRvY3Mtc3RhcnQgYm9yZGVyLXJhZGl1cy1taXhpbnNcbkBtaXhpbiBib3JkZXItcmFkaXVzKCRyYWRpdXM6ICRib3JkZXItcmFkaXVzLCAkZmFsbGJhY2stYm9yZGVyLXJhZGl1czogZmFsc2UpIHtcbiAgQGlmICRlbmFibGUtcm91bmRlZCB7XG4gICAgYm9yZGVyLXJhZGl1czogdmFsaWQtcmFkaXVzKCRyYWRpdXMpO1xuICB9XG4gIEBlbHNlIGlmICRmYWxsYmFjay1ib3JkZXItcmFkaXVzICE9IGZhbHNlIHtcbiAgICBib3JkZXItcmFkaXVzOiAkZmFsbGJhY2stYm9yZGVyLXJhZGl1cztcbiAgfVxufVxuXG5AbWl4aW4gYm9yZGVyLXRvcC1yYWRpdXMoJHJhZGl1czogJGJvcmRlci1yYWRpdXMpIHtcbiAgQGlmICRlbmFibGUtcm91bmRlZCB7XG4gICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogdmFsaWQtcmFkaXVzKCRyYWRpdXMpO1xuICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiB2YWxpZC1yYWRpdXMoJHJhZGl1cyk7XG4gIH1cbn1cblxuQG1peGluIGJvcmRlci1lbmQtcmFkaXVzKCRyYWRpdXM6ICRib3JkZXItcmFkaXVzKSB7XG4gIEBpZiAkZW5hYmxlLXJvdW5kZWQge1xuICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiB2YWxpZC1yYWRpdXMoJHJhZGl1cyk7XG4gICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IHZhbGlkLXJhZGl1cygkcmFkaXVzKTtcbiAgfVxufVxuXG5AbWl4aW4gYm9yZGVyLWJvdHRvbS1yYWRpdXMoJHJhZGl1czogJGJvcmRlci1yYWRpdXMpIHtcbiAgQGlmICRlbmFibGUtcm91bmRlZCB7XG4gICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IHZhbGlkLXJhZGl1cygkcmFkaXVzKTtcbiAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiB2YWxpZC1yYWRpdXMoJHJhZGl1cyk7XG4gIH1cbn1cblxuQG1peGluIGJvcmRlci1zdGFydC1yYWRpdXMoJHJhZGl1czogJGJvcmRlci1yYWRpdXMpIHtcbiAgQGlmICRlbmFibGUtcm91bmRlZCB7XG4gICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogdmFsaWQtcmFkaXVzKCRyYWRpdXMpO1xuICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IHZhbGlkLXJhZGl1cygkcmFkaXVzKTtcbiAgfVxufVxuXG5AbWl4aW4gYm9yZGVyLXRvcC1zdGFydC1yYWRpdXMoJHJhZGl1czogJGJvcmRlci1yYWRpdXMpIHtcbiAgQGlmICRlbmFibGUtcm91bmRlZCB7XG4gICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogdmFsaWQtcmFkaXVzKCRyYWRpdXMpO1xuICB9XG59XG5cbkBtaXhpbiBib3JkZXItdG9wLWVuZC1yYWRpdXMoJHJhZGl1czogJGJvcmRlci1yYWRpdXMpIHtcbiAgQGlmICRlbmFibGUtcm91bmRlZCB7XG4gICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IHZhbGlkLXJhZGl1cygkcmFkaXVzKTtcbiAgfVxufVxuXG5AbWl4aW4gYm9yZGVyLWJvdHRvbS1lbmQtcmFkaXVzKCRyYWRpdXM6ICRib3JkZXItcmFkaXVzKSB7XG4gIEBpZiAkZW5hYmxlLXJvdW5kZWQge1xuICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiB2YWxpZC1yYWRpdXMoJHJhZGl1cyk7XG4gIH1cbn1cblxuQG1peGluIGJvcmRlci1ib3R0b20tc3RhcnQtcmFkaXVzKCRyYWRpdXM6ICRib3JkZXItcmFkaXVzKSB7XG4gIEBpZiAkZW5hYmxlLXJvdW5kZWQge1xuICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IHZhbGlkLXJhZGl1cygkcmFkaXVzKTtcbiAgfVxufVxuLy8gc2Nzcy1kb2NzLWVuZCBib3JkZXItcmFkaXVzLW1peGluc1xuIiwiLy9cbi8vIEhlYWRpbmdzXG4vL1xuLmgxIHtcbiAgQGV4dGVuZCBoMTtcbn1cblxuLmgyIHtcbiAgQGV4dGVuZCBoMjtcbn1cblxuLmgzIHtcbiAgQGV4dGVuZCBoMztcbn1cblxuLmg0IHtcbiAgQGV4dGVuZCBoNDtcbn1cblxuLmg1IHtcbiAgQGV4dGVuZCBoNTtcbn1cblxuLmg2IHtcbiAgQGV4dGVuZCBoNjtcbn1cblxuXG4ubGVhZCB7XG4gIEBpbmNsdWRlIGZvbnQtc2l6ZSgkbGVhZC1mb250LXNpemUpO1xuICBmb250LXdlaWdodDogJGxlYWQtZm9udC13ZWlnaHQ7XG59XG5cbi8vIFR5cGUgZGlzcGxheSBjbGFzc2VzXG5AZWFjaCAkZGlzcGxheSwgJGZvbnQtc2l6ZSBpbiAkZGlzcGxheS1mb250LXNpemVzIHtcbiAgLmRpc3BsYXktI3skZGlzcGxheX0ge1xuICAgIEBpbmNsdWRlIGZvbnQtc2l6ZSgkZm9udC1zaXplKTtcbiAgICBmb250LWZhbWlseTogJGRpc3BsYXktZm9udC1mYW1pbHk7XG4gICAgZm9udC1zdHlsZTogJGRpc3BsYXktZm9udC1zdHlsZTtcbiAgICBmb250LXdlaWdodDogJGRpc3BsYXktZm9udC13ZWlnaHQ7XG4gICAgbGluZS1oZWlnaHQ6ICRkaXNwbGF5LWxpbmUtaGVpZ2h0O1xuICB9XG59XG5cbi8vXG4vLyBFbXBoYXNpc1xuLy9cbi5zbWFsbCB7XG4gIEBleHRlbmQgc21hbGw7XG59XG5cbi5tYXJrIHtcbiAgQGV4dGVuZCBtYXJrO1xufVxuXG4vL1xuLy8gTGlzdHNcbi8vXG5cbi5saXN0LXVuc3R5bGVkIHtcbiAgQGluY2x1ZGUgbGlzdC11bnN0eWxlZCgpO1xufVxuXG4vLyBJbmxpbmUgdHVybnMgbGlzdCBpdGVtcyBpbnRvIGlubGluZS1ibG9ja1xuLmxpc3QtaW5saW5lIHtcbiAgQGluY2x1ZGUgbGlzdC11bnN0eWxlZCgpO1xufVxuLmxpc3QtaW5saW5lLWl0ZW0ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG5cbiAgJjpub3QoOmxhc3QtY2hpbGQpIHtcbiAgICBtYXJnaW4tcmlnaHQ6ICRsaXN0LWlubGluZS1wYWRkaW5nO1xuICB9XG59XG5cblxuLy9cbi8vIE1pc2Ncbi8vXG5cbi8vIEJ1aWxkcyBvbiBgYWJicmBcbi5pbml0aWFsaXNtIHtcbiAgQGluY2x1ZGUgZm9udC1zaXplKCRpbml0aWFsaXNtLWZvbnQtc2l6ZSk7XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG59XG5cbi8vIEJsb2NrcXVvdGVzXG4uYmxvY2txdW90ZSB7XG4gIG1hcmdpbi1ib3R0b206ICRibG9ja3F1b3RlLW1hcmdpbi15O1xuICBAaW5jbHVkZSBmb250LXNpemUoJGJsb2NrcXVvdGUtZm9udC1zaXplKTtcblxuICA+IDpsYXN0LWNoaWxkIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICB9XG59XG5cbi5ibG9ja3F1b3RlLWZvb3RlciB7XG4gIG1hcmdpbi10b3A6IC0kYmxvY2txdW90ZS1tYXJnaW4teTtcbiAgbWFyZ2luLWJvdHRvbTogJGJsb2NrcXVvdGUtbWFyZ2luLXk7XG4gIEBpbmNsdWRlIGZvbnQtc2l6ZSgkYmxvY2txdW90ZS1mb290ZXItZm9udC1zaXplKTtcbiAgY29sb3I6ICRibG9ja3F1b3RlLWZvb3Rlci1jb2xvcjtcblxuICAmOjpiZWZvcmUge1xuICAgIGNvbnRlbnQ6IFwiXFwyMDE0XFwwMEEwXCI7IC8vIGVtIGRhc2gsIG5ic3BcbiAgfVxufVxuIiwiLy8gTGlzdHNcblxuLy8gVW5zdHlsZWQga2VlcHMgbGlzdCBpdGVtcyBibG9jayBsZXZlbCwganVzdCByZW1vdmVzIGRlZmF1bHQgYnJvd3NlciBwYWRkaW5nIGFuZCBsaXN0LXN0eWxlXG5AbWl4aW4gbGlzdC11bnN0eWxlZCB7XG4gIHBhZGRpbmctbGVmdDogMDtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbn1cbiIsIi8vIFJlc3BvbnNpdmUgaW1hZ2VzIChlbnN1cmUgaW1hZ2VzIGRvbid0IHNjYWxlIGJleW9uZCB0aGVpciBwYXJlbnRzKVxuLy9cbi8vIFRoaXMgaXMgcHVycG9zZWZ1bGx5IG9wdC1pbiB2aWEgYW4gZXhwbGljaXQgY2xhc3MgcmF0aGVyIHRoYW4gYmVpbmcgdGhlIGRlZmF1bHQgZm9yIGFsbCBgPGltZz5gcy5cbi8vIFdlIHByZXZpb3VzbHkgdHJpZWQgdGhlIFwiaW1hZ2VzIGFyZSByZXNwb25zaXZlIGJ5IGRlZmF1bHRcIiBhcHByb2FjaCBpbiBCb290c3RyYXAgdjIsXG4vLyBhbmQgYWJhbmRvbmVkIGl0IGluIEJvb3RzdHJhcCB2MyBiZWNhdXNlIGl0IGJyZWFrcyBsb3RzIG9mIHRoaXJkLXBhcnR5IHdpZGdldHMgKGluY2x1ZGluZyBHb29nbGUgTWFwcylcbi8vIHdoaWNoIHdlcmVuJ3QgZXhwZWN0aW5nIHRoZSBpbWFnZXMgd2l0aGluIHRoZW1zZWx2ZXMgdG8gYmUgaW52b2x1bnRhcmlseSByZXNpemVkLlxuLy8gU2VlIGFsc28gaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2lzc3Vlcy8xODE3OFxuLmltZy1mbHVpZCB7XG4gIEBpbmNsdWRlIGltZy1mbHVpZCgpO1xufVxuXG5cbi8vIEltYWdlIHRodW1ibmFpbHNcbi5pbWctdGh1bWJuYWlsIHtcbiAgcGFkZGluZzogJHRodW1ibmFpbC1wYWRkaW5nO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkdGh1bWJuYWlsLWJnO1xuICBib3JkZXI6ICR0aHVtYm5haWwtYm9yZGVyLXdpZHRoIHNvbGlkICR0aHVtYm5haWwtYm9yZGVyLWNvbG9yO1xuICBAaW5jbHVkZSBib3JkZXItcmFkaXVzKCR0aHVtYm5haWwtYm9yZGVyLXJhZGl1cyk7XG4gIEBpbmNsdWRlIGJveC1zaGFkb3coJHRodW1ibmFpbC1ib3gtc2hhZG93KTtcblxuICAvLyBLZWVwIHRoZW0gYXQgbW9zdCAxMDAlIHdpZGVcbiAgQGluY2x1ZGUgaW1nLWZsdWlkKCk7XG59XG5cbi8vXG4vLyBGaWd1cmVzXG4vL1xuXG4uZmlndXJlIHtcbiAgLy8gRW5zdXJlcyB0aGUgY2FwdGlvbidzIHRleHQgYWxpZ25zIHdpdGggdGhlIGltYWdlLlxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG59XG5cbi5maWd1cmUtaW1nIHtcbiAgbWFyZ2luLWJvdHRvbTogJHNwYWNlciAqIC41O1xuICBsaW5lLWhlaWdodDogMTtcbn1cblxuLmZpZ3VyZS1jYXB0aW9uIHtcbiAgQGluY2x1ZGUgZm9udC1zaXplKCRmaWd1cmUtY2FwdGlvbi1mb250LXNpemUpO1xuICBjb2xvcjogJGZpZ3VyZS1jYXB0aW9uLWNvbG9yO1xufVxuIiwiLy8gSW1hZ2UgTWl4aW5zXG4vLyAtIFJlc3BvbnNpdmUgaW1hZ2Vcbi8vIC0gUmV0aW5hIGltYWdlXG5cblxuLy8gUmVzcG9uc2l2ZSBpbWFnZVxuLy9cbi8vIEtlZXAgaW1hZ2VzIGZyb20gc2NhbGluZyBiZXlvbmQgdGhlIHdpZHRoIG9mIHRoZWlyIHBhcmVudHMuXG5cbkBtaXhpbiBpbWctZmx1aWQge1xuICAvLyBQYXJ0IDE6IFNldCBhIG1heGltdW0gcmVsYXRpdmUgdG8gdGhlIHBhcmVudFxuICBtYXgtd2lkdGg6IDEwMCU7XG4gIC8vIFBhcnQgMjogT3ZlcnJpZGUgdGhlIGhlaWdodCB0byBhdXRvLCBvdGhlcndpc2UgaW1hZ2VzIHdpbGwgYmUgc3RyZXRjaGVkXG4gIC8vIHdoZW4gc2V0dGluZyBhIHdpZHRoIGFuZCBoZWlnaHQgYXR0cmlidXRlIG9uIHRoZSBpbWcgZWxlbWVudC5cbiAgaGVpZ2h0OiBhdXRvO1xufVxuIiwiLy8gQ29udGFpbmVyIHdpZHRoc1xuLy9cbi8vIFNldCB0aGUgY29udGFpbmVyIHdpZHRoLCBhbmQgb3ZlcnJpZGUgaXQgZm9yIGZpeGVkIG5hdmJhcnMgaW4gbWVkaWEgcXVlcmllcy5cblxuQGlmICRlbmFibGUtY29udGFpbmVyLWNsYXNzZXMge1xuICAvLyBTaW5nbGUgY29udGFpbmVyIGNsYXNzIHdpdGggYnJlYWtwb2ludCBtYXgtd2lkdGhzXG4gIC5jb250YWluZXIsXG4gIC8vIDEwMCUgd2lkZSBjb250YWluZXIgYXQgYWxsIGJyZWFrcG9pbnRzXG4gIC5jb250YWluZXItZmx1aWQge1xuICAgIEBpbmNsdWRlIG1ha2UtY29udGFpbmVyKCk7XG4gIH1cblxuICAvLyBSZXNwb25zaXZlIGNvbnRhaW5lcnMgdGhhdCBhcmUgMTAwJSB3aWRlIHVudGlsIGEgYnJlYWtwb2ludFxuICBAZWFjaCAkYnJlYWtwb2ludCwgJGNvbnRhaW5lci1tYXgtd2lkdGggaW4gJGNvbnRhaW5lci1tYXgtd2lkdGhzIHtcbiAgICAuY29udGFpbmVyLSN7JGJyZWFrcG9pbnR9IHtcbiAgICAgIEBleHRlbmQgLmNvbnRhaW5lci1mbHVpZDtcbiAgICB9XG5cbiAgICBAaW5jbHVkZSBtZWRpYS1icmVha3BvaW50LXVwKCRicmVha3BvaW50LCAkZ3JpZC1icmVha3BvaW50cykge1xuICAgICAgJXJlc3BvbnNpdmUtY29udGFpbmVyLSN7JGJyZWFrcG9pbnR9IHtcbiAgICAgICAgbWF4LXdpZHRoOiAkY29udGFpbmVyLW1heC13aWR0aDtcbiAgICAgIH1cblxuICAgICAgLy8gRXh0ZW5kIGVhY2ggYnJlYWtwb2ludCB3aGljaCBpcyBzbWFsbGVyIG9yIGVxdWFsIHRvIHRoZSBjdXJyZW50IGJyZWFrcG9pbnRcbiAgICAgICRleHRlbmQtYnJlYWtwb2ludDogdHJ1ZTtcblxuICAgICAgQGVhY2ggJG5hbWUsICR3aWR0aCBpbiAkZ3JpZC1icmVha3BvaW50cyB7XG4gICAgICAgIEBpZiAoJGV4dGVuZC1icmVha3BvaW50KSB7XG4gICAgICAgICAgLmNvbnRhaW5lciN7YnJlYWtwb2ludC1pbmZpeCgkbmFtZSwgJGdyaWQtYnJlYWtwb2ludHMpfSB7XG4gICAgICAgICAgICBAZXh0ZW5kICVyZXNwb25zaXZlLWNvbnRhaW5lci0jeyRicmVha3BvaW50fTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBPbmNlIHRoZSBjdXJyZW50IGJyZWFrcG9pbnQgaXMgcmVhY2hlZCwgc3RvcCBleHRlbmRpbmdcbiAgICAgICAgICBAaWYgKCRicmVha3BvaW50ID09ICRuYW1lKSB7XG4gICAgICAgICAgICAkZXh0ZW5kLWJyZWFrcG9pbnQ6IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLy8gQ29udGFpbmVyIG1peGluc1xuXG5AbWl4aW4gbWFrZS1jb250YWluZXIoJGd1dHRlcjogJGNvbnRhaW5lci1wYWRkaW5nLXgpIHtcbiAgLS0jeyRwcmVmaXh9Z3V0dGVyLXg6ICN7JGd1dHRlcn07XG4gIC0tI3skcHJlZml4fWd1dHRlci15OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgcGFkZGluZy1yaWdodDogY2FsYyh2YXIoLS0jeyRwcmVmaXh9Z3V0dGVyLXgpICogLjUpOyAvLyBzdHlsZWxpbnQtZGlzYWJsZS1saW5lIGZ1bmN0aW9uLWRpc2FsbG93ZWQtbGlzdFxuICBwYWRkaW5nLWxlZnQ6IGNhbGModmFyKC0tI3skcHJlZml4fWd1dHRlci14KSAqIC41KTsgLy8gc3R5bGVsaW50LWRpc2FibGUtbGluZSBmdW5jdGlvbi1kaXNhbGxvd2VkLWxpc3RcbiAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xuICBtYXJnaW4tbGVmdDogYXV0bztcbn1cbiIsIi8vIEJyZWFrcG9pbnQgdmlld3BvcnQgc2l6ZXMgYW5kIG1lZGlhIHF1ZXJpZXMuXG4vL1xuLy8gQnJlYWtwb2ludHMgYXJlIGRlZmluZWQgYXMgYSBtYXAgb2YgKG5hbWU6IG1pbmltdW0gd2lkdGgpLCBvcmRlciBmcm9tIHNtYWxsIHRvIGxhcmdlOlxuLy9cbi8vICAgICh4czogMCwgc206IDU3NnB4LCBtZDogNzY4cHgsIGxnOiA5OTJweCwgeGw6IDEyMDBweCwgeHhsOiAxNDAwcHgpXG4vL1xuLy8gVGhlIG1hcCBkZWZpbmVkIGluIHRoZSBgJGdyaWQtYnJlYWtwb2ludHNgIGdsb2JhbCB2YXJpYWJsZSBpcyB1c2VkIGFzIHRoZSBgJGJyZWFrcG9pbnRzYCBhcmd1bWVudCBieSBkZWZhdWx0LlxuXG4vLyBOYW1lIG9mIHRoZSBuZXh0IGJyZWFrcG9pbnQsIG9yIG51bGwgZm9yIHRoZSBsYXN0IGJyZWFrcG9pbnQuXG4vL1xuLy8gICAgPj4gYnJlYWtwb2ludC1uZXh0KHNtKVxuLy8gICAgbWRcbi8vICAgID4+IGJyZWFrcG9pbnQtbmV4dChzbSwgKHhzOiAwLCBzbTogNTc2cHgsIG1kOiA3NjhweCwgbGc6IDk5MnB4LCB4bDogMTIwMHB4LCB4eGw6IDE0MDBweCkpXG4vLyAgICBtZFxuLy8gICAgPj4gYnJlYWtwb2ludC1uZXh0KHNtLCAkYnJlYWtwb2ludC1uYW1lczogKHhzIHNtIG1kIGxnIHhsIHh4bCkpXG4vLyAgICBtZFxuQGZ1bmN0aW9uIGJyZWFrcG9pbnQtbmV4dCgkbmFtZSwgJGJyZWFrcG9pbnRzOiAkZ3JpZC1icmVha3BvaW50cywgJGJyZWFrcG9pbnQtbmFtZXM6IG1hcC1rZXlzKCRicmVha3BvaW50cykpIHtcbiAgJG46IGluZGV4KCRicmVha3BvaW50LW5hbWVzLCAkbmFtZSk7XG4gIEBpZiBub3QgJG4ge1xuICAgIEBlcnJvciBcImJyZWFrcG9pbnQgYCN7JG5hbWV9YCBub3QgZm91bmQgaW4gYCN7JGJyZWFrcG9pbnRzfWBcIjtcbiAgfVxuICBAcmV0dXJuIGlmKCRuIDwgbGVuZ3RoKCRicmVha3BvaW50LW5hbWVzKSwgbnRoKCRicmVha3BvaW50LW5hbWVzLCAkbiArIDEpLCBudWxsKTtcbn1cblxuLy8gTWluaW11bSBicmVha3BvaW50IHdpZHRoLiBOdWxsIGZvciB0aGUgc21hbGxlc3QgKGZpcnN0KSBicmVha3BvaW50LlxuLy9cbi8vICAgID4+IGJyZWFrcG9pbnQtbWluKHNtLCAoeHM6IDAsIHNtOiA1NzZweCwgbWQ6IDc2OHB4LCBsZzogOTkycHgsIHhsOiAxMjAwcHgsIHh4bDogMTQwMHB4KSlcbi8vICAgIDU3NnB4XG5AZnVuY3Rpb24gYnJlYWtwb2ludC1taW4oJG5hbWUsICRicmVha3BvaW50czogJGdyaWQtYnJlYWtwb2ludHMpIHtcbiAgJG1pbjogbWFwLWdldCgkYnJlYWtwb2ludHMsICRuYW1lKTtcbiAgQHJldHVybiBpZigkbWluICE9IDAsICRtaW4sIG51bGwpO1xufVxuXG4vLyBNYXhpbXVtIGJyZWFrcG9pbnQgd2lkdGguXG4vLyBUaGUgbWF4aW11bSB2YWx1ZSBpcyByZWR1Y2VkIGJ5IDAuMDJweCB0byB3b3JrIGFyb3VuZCB0aGUgbGltaXRhdGlvbnMgb2Zcbi8vIGBtaW4tYCBhbmQgYG1heC1gIHByZWZpeGVzIGFuZCB2aWV3cG9ydHMgd2l0aCBmcmFjdGlvbmFsIHdpZHRocy5cbi8vIFNlZSBodHRwczovL3d3dy53My5vcmcvVFIvbWVkaWFxdWVyaWVzLTQvI21xLW1pbi1tYXhcbi8vIFVzZXMgMC4wMnB4IHJhdGhlciB0aGFuIDAuMDFweCB0byB3b3JrIGFyb3VuZCBhIGN1cnJlbnQgcm91bmRpbmcgYnVnIGluIFNhZmFyaS5cbi8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc4MjYxXG4vL1xuLy8gICAgPj4gYnJlYWtwb2ludC1tYXgobWQsICh4czogMCwgc206IDU3NnB4LCBtZDogNzY4cHgsIGxnOiA5OTJweCwgeGw6IDEyMDBweCwgeHhsOiAxNDAwcHgpKVxuLy8gICAgNzY3Ljk4cHhcbkBmdW5jdGlvbiBicmVha3BvaW50LW1heCgkbmFtZSwgJGJyZWFrcG9pbnRzOiAkZ3JpZC1icmVha3BvaW50cykge1xuICAkbWF4OiBtYXAtZ2V0KCRicmVha3BvaW50cywgJG5hbWUpO1xuICBAcmV0dXJuIGlmKCRtYXggYW5kICRtYXggPiAwLCAkbWF4IC0gLjAyLCBudWxsKTtcbn1cblxuLy8gUmV0dXJucyBhIGJsYW5rIHN0cmluZyBpZiBzbWFsbGVzdCBicmVha3BvaW50LCBvdGhlcndpc2UgcmV0dXJucyB0aGUgbmFtZSB3aXRoIGEgZGFzaCBpbiBmcm9udC5cbi8vIFVzZWZ1bCBmb3IgbWFraW5nIHJlc3BvbnNpdmUgdXRpbGl0aWVzLlxuLy9cbi8vICAgID4+IGJyZWFrcG9pbnQtaW5maXgoeHMsICh4czogMCwgc206IDU3NnB4LCBtZDogNzY4cHgsIGxnOiA5OTJweCwgeGw6IDEyMDBweCwgeHhsOiAxNDAwcHgpKVxuLy8gICAgXCJcIiAgKFJldHVybnMgYSBibGFuayBzdHJpbmcpXG4vLyAgICA+PiBicmVha3BvaW50LWluZml4KHNtLCAoeHM6IDAsIHNtOiA1NzZweCwgbWQ6IDc2OHB4LCBsZzogOTkycHgsIHhsOiAxMjAwcHgsIHh4bDogMTQwMHB4KSlcbi8vICAgIFwiLXNtXCJcbkBmdW5jdGlvbiBicmVha3BvaW50LWluZml4KCRuYW1lLCAkYnJlYWtwb2ludHM6ICRncmlkLWJyZWFrcG9pbnRzKSB7XG4gIEByZXR1cm4gaWYoYnJlYWtwb2ludC1taW4oJG5hbWUsICRicmVha3BvaW50cykgPT0gbnVsbCwgXCJcIiwgXCItI3skbmFtZX1cIik7XG59XG5cbi8vIE1lZGlhIG9mIGF0IGxlYXN0IHRoZSBtaW5pbXVtIGJyZWFrcG9pbnQgd2lkdGguIE5vIHF1ZXJ5IGZvciB0aGUgc21hbGxlc3QgYnJlYWtwb2ludC5cbi8vIE1ha2VzIHRoZSBAY29udGVudCBhcHBseSB0byB0aGUgZ2l2ZW4gYnJlYWtwb2ludCBhbmQgd2lkZXIuXG5AbWl4aW4gbWVkaWEtYnJlYWtwb2ludC11cCgkbmFtZSwgJGJyZWFrcG9pbnRzOiAkZ3JpZC1icmVha3BvaW50cykge1xuICAkbWluOiBicmVha3BvaW50LW1pbigkbmFtZSwgJGJyZWFrcG9pbnRzKTtcbiAgQGlmICRtaW4ge1xuICAgIEBtZWRpYSAobWluLXdpZHRoOiAkbWluKSB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG4gIH0gQGVsc2Uge1xuICAgIEBjb250ZW50O1xuICB9XG59XG5cbi8vIE1lZGlhIG9mIGF0IG1vc3QgdGhlIG1heGltdW0gYnJlYWtwb2ludCB3aWR0aC4gTm8gcXVlcnkgZm9yIHRoZSBsYXJnZXN0IGJyZWFrcG9pbnQuXG4vLyBNYWtlcyB0aGUgQGNvbnRlbnQgYXBwbHkgdG8gdGhlIGdpdmVuIGJyZWFrcG9pbnQgYW5kIG5hcnJvd2VyLlxuQG1peGluIG1lZGlhLWJyZWFrcG9pbnQtZG93bigkbmFtZSwgJGJyZWFrcG9pbnRzOiAkZ3JpZC1icmVha3BvaW50cykge1xuICAkbWF4OiBicmVha3BvaW50LW1heCgkbmFtZSwgJGJyZWFrcG9pbnRzKTtcbiAgQGlmICRtYXgge1xuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkbWF4KSB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG4gIH0gQGVsc2Uge1xuICAgIEBjb250ZW50O1xuICB9XG59XG5cbi8vIE1lZGlhIHRoYXQgc3BhbnMgbXVsdGlwbGUgYnJlYWtwb2ludCB3aWR0aHMuXG4vLyBNYWtlcyB0aGUgQGNvbnRlbnQgYXBwbHkgYmV0d2VlbiB0aGUgbWluIGFuZCBtYXggYnJlYWtwb2ludHNcbkBtaXhpbiBtZWRpYS1icmVha3BvaW50LWJldHdlZW4oJGxvd2VyLCAkdXBwZXIsICRicmVha3BvaW50czogJGdyaWQtYnJlYWtwb2ludHMpIHtcbiAgJG1pbjogYnJlYWtwb2ludC1taW4oJGxvd2VyLCAkYnJlYWtwb2ludHMpO1xuICAkbWF4OiBicmVha3BvaW50LW1heCgkdXBwZXIsICRicmVha3BvaW50cyk7XG5cbiAgQGlmICRtaW4gIT0gbnVsbCBhbmQgJG1heCAhPSBudWxsIHtcbiAgICBAbWVkaWEgKG1pbi13aWR0aDogJG1pbikgYW5kIChtYXgtd2lkdGg6ICRtYXgpIHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cbiAgfSBAZWxzZSBpZiAkbWF4ID09IG51bGwge1xuICAgIEBpbmNsdWRlIG1lZGlhLWJyZWFrcG9pbnQtdXAoJGxvd2VyLCAkYnJlYWtwb2ludHMpIHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cbiAgfSBAZWxzZSBpZiAkbWluID09IG51bGwge1xuICAgIEBpbmNsdWRlIG1lZGlhLWJyZWFrcG9pbnQtZG93bigkdXBwZXIsICRicmVha3BvaW50cykge1xuICAgICAgQGNvbnRlbnQ7XG4gICAgfVxuICB9XG59XG5cbi8vIE1lZGlhIGJldHdlZW4gdGhlIGJyZWFrcG9pbnQncyBtaW5pbXVtIGFuZCBtYXhpbXVtIHdpZHRocy5cbi8vIE5vIG1pbmltdW0gZm9yIHRoZSBzbWFsbGVzdCBicmVha3BvaW50LCBhbmQgbm8gbWF4aW11bSBmb3IgdGhlIGxhcmdlc3Qgb25lLlxuLy8gTWFrZXMgdGhlIEBjb250ZW50IGFwcGx5IG9ubHkgdG8gdGhlIGdpdmVuIGJyZWFrcG9pbnQsIG5vdCB2aWV3cG9ydHMgYW55IHdpZGVyIG9yIG5hcnJvd2VyLlxuQG1peGluIG1lZGlhLWJyZWFrcG9pbnQtb25seSgkbmFtZSwgJGJyZWFrcG9pbnRzOiAkZ3JpZC1icmVha3BvaW50cykge1xuICAkbWluOiAgYnJlYWtwb2ludC1taW4oJG5hbWUsICRicmVha3BvaW50cyk7XG4gICRuZXh0OiBicmVha3BvaW50LW5leHQoJG5hbWUsICRicmVha3BvaW50cyk7XG4gICRtYXg6ICBicmVha3BvaW50LW1heCgkbmV4dCwgJGJyZWFrcG9pbnRzKTtcblxuICBAaWYgJG1pbiAhPSBudWxsIGFuZCAkbWF4ICE9IG51bGwge1xuICAgIEBtZWRpYSAobWluLXdpZHRoOiAkbWluKSBhbmQgKG1heC13aWR0aDogJG1heCkge1xuICAgICAgQGNvbnRlbnQ7XG4gICAgfVxuICB9IEBlbHNlIGlmICRtYXggPT0gbnVsbCB7XG4gICAgQGluY2x1ZGUgbWVkaWEtYnJlYWtwb2ludC11cCgkbmFtZSwgJGJyZWFrcG9pbnRzKSB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG4gIH0gQGVsc2UgaWYgJG1pbiA9PSBudWxsIHtcbiAgICBAaW5jbHVkZSBtZWRpYS1icmVha3BvaW50LWRvd24oJG5leHQsICRicmVha3BvaW50cykge1xuICAgICAgQGNvbnRlbnQ7XG4gICAgfVxuICB9XG59XG4iLCIvLyBSb3dcbi8vXG4vLyBSb3dzIGNvbnRhaW4geW91ciBjb2x1bW5zLlxuXG46cm9vdCB7XG4gIEBlYWNoICRuYW1lLCAkdmFsdWUgaW4gJGdyaWQtYnJlYWtwb2ludHMge1xuICAgIC0tI3skcHJlZml4fWJyZWFrcG9pbnQtI3skbmFtZX06ICN7JHZhbHVlfTtcbiAgfVxufVxuXG5AaWYgJGVuYWJsZS1ncmlkLWNsYXNzZXMge1xuICAucm93IHtcbiAgICBAaW5jbHVkZSBtYWtlLXJvdygpO1xuXG4gICAgPiAqIHtcbiAgICAgIEBpbmNsdWRlIG1ha2UtY29sLXJlYWR5KCk7XG4gICAgfVxuICB9XG59XG5cbkBpZiAkZW5hYmxlLWNzc2dyaWQge1xuICAuZ3JpZCB7XG4gICAgZGlzcGxheTogZ3JpZDtcbiAgICBncmlkLXRlbXBsYXRlLXJvd3M6IHJlcGVhdCh2YXIoLS0jeyRwcmVmaXh9cm93cywgMSksIDFmcik7XG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQodmFyKC0tI3skcHJlZml4fWNvbHVtbnMsICN7JGdyaWQtY29sdW1uc30pLCAxZnIpO1xuICAgIGdhcDogdmFyKC0tI3skcHJlZml4fWdhcCwgI3skZ3JpZC1ndXR0ZXItd2lkdGh9KTtcblxuICAgIEBpbmNsdWRlIG1ha2UtY3NzZ3JpZCgpO1xuICB9XG59XG5cblxuLy8gQ29sdW1uc1xuLy9cbi8vIENvbW1vbiBzdHlsZXMgZm9yIHNtYWxsIGFuZCBsYXJnZSBncmlkIGNvbHVtbnNcblxuQGlmICRlbmFibGUtZ3JpZC1jbGFzc2VzIHtcbiAgQGluY2x1ZGUgbWFrZS1ncmlkLWNvbHVtbnMoKTtcbn1cbiIsIi8vIEdyaWQgc3lzdGVtXG4vL1xuLy8gR2VuZXJhdGUgc2VtYW50aWMgZ3JpZCBjb2x1bW5zIHdpdGggdGhlc2UgbWl4aW5zLlxuXG5AbWl4aW4gbWFrZS1yb3coJGd1dHRlcjogJGdyaWQtZ3V0dGVyLXdpZHRoKSB7XG4gIC0tI3skcHJlZml4fWd1dHRlci14OiAjeyRndXR0ZXJ9O1xuICAtLSN7JHByZWZpeH1ndXR0ZXIteTogMDtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC13cmFwOiB3cmFwO1xuICAvLyBUT0RPOiBSZXZpc2l0IGNhbGMgb3JkZXIgYWZ0ZXIgaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0LWJvb3RzdHJhcC9yZWFjdC1ib290c3RyYXAvaXNzdWVzLzYwMzkgaXMgZml4ZWRcbiAgbWFyZ2luLXRvcDogY2FsYygtMSAqIHZhcigtLSN7JHByZWZpeH1ndXR0ZXIteSkpOyAvLyBzdHlsZWxpbnQtZGlzYWJsZS1saW5lIGZ1bmN0aW9uLWRpc2FsbG93ZWQtbGlzdFxuICBtYXJnaW4tcmlnaHQ6IGNhbGMoLS41ICogdmFyKC0tI3skcHJlZml4fWd1dHRlci14KSk7IC8vIHN0eWxlbGludC1kaXNhYmxlLWxpbmUgZnVuY3Rpb24tZGlzYWxsb3dlZC1saXN0XG4gIG1hcmdpbi1sZWZ0OiBjYWxjKC0uNSAqIHZhcigtLSN7JHByZWZpeH1ndXR0ZXIteCkpOyAvLyBzdHlsZWxpbnQtZGlzYWJsZS1saW5lIGZ1bmN0aW9uLWRpc2FsbG93ZWQtbGlzdFxufVxuXG5AbWl4aW4gbWFrZS1jb2wtcmVhZHkoKSB7XG4gIC8vIEFkZCBib3ggc2l6aW5nIGlmIG9ubHkgdGhlIGdyaWQgaXMgbG9hZGVkXG4gIGJveC1zaXppbmc6IGlmKHZhcmlhYmxlLWV4aXN0cyhpbmNsdWRlLWNvbHVtbi1ib3gtc2l6aW5nKSBhbmQgJGluY2x1ZGUtY29sdW1uLWJveC1zaXppbmcsIGJvcmRlci1ib3gsIG51bGwpO1xuICAvLyBQcmV2ZW50IGNvbHVtbnMgZnJvbSBiZWNvbWluZyB0b28gbmFycm93IHdoZW4gYXQgc21hbGxlciBncmlkIHRpZXJzIGJ5XG4gIC8vIGFsd2F5cyBzZXR0aW5nIGB3aWR0aDogMTAwJTtgLiBUaGlzIHdvcmtzIGJlY2F1c2Ugd2Ugc2V0IHRoZSB3aWR0aFxuICAvLyBsYXRlciBvbiB0byBvdmVycmlkZSB0aGlzIGluaXRpYWwgd2lkdGguXG4gIGZsZXgtc2hyaW5rOiAwO1xuICB3aWR0aDogMTAwJTtcbiAgbWF4LXdpZHRoOiAxMDAlOyAvLyBQcmV2ZW50IGAuY29sLWF1dG9gLCBgLmNvbGAgKCYgcmVzcG9uc2l2ZSB2YXJpYW50cykgZnJvbSBicmVha2luZyBvdXQgdGhlIGdyaWRcbiAgcGFkZGluZy1yaWdodDogY2FsYyh2YXIoLS0jeyRwcmVmaXh9Z3V0dGVyLXgpICogLjUpOyAvLyBzdHlsZWxpbnQtZGlzYWJsZS1saW5lIGZ1bmN0aW9uLWRpc2FsbG93ZWQtbGlzdFxuICBwYWRkaW5nLWxlZnQ6IGNhbGModmFyKC0tI3skcHJlZml4fWd1dHRlci14KSAqIC41KTsgLy8gc3R5bGVsaW50LWRpc2FibGUtbGluZSBmdW5jdGlvbi1kaXNhbGxvd2VkLWxpc3RcbiAgbWFyZ2luLXRvcDogdmFyKC0tI3skcHJlZml4fWd1dHRlci15KTtcbn1cblxuQG1peGluIG1ha2UtY29sKCRzaXplOiBmYWxzZSwgJGNvbHVtbnM6ICRncmlkLWNvbHVtbnMpIHtcbiAgQGlmICRzaXplIHtcbiAgICBmbGV4OiAwIDAgYXV0bztcbiAgICB3aWR0aDogcGVyY2VudGFnZShkaXZpZGUoJHNpemUsICRjb2x1bW5zKSk7XG5cbiAgfSBAZWxzZSB7XG4gICAgZmxleDogMSAxIDA7XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xuICB9XG59XG5cbkBtaXhpbiBtYWtlLWNvbC1hdXRvKCkge1xuICBmbGV4OiAwIDAgYXV0bztcbiAgd2lkdGg6IGF1dG87XG59XG5cbkBtaXhpbiBtYWtlLWNvbC1vZmZzZXQoJHNpemUsICRjb2x1bW5zOiAkZ3JpZC1jb2x1bW5zKSB7XG4gICRudW06IGRpdmlkZSgkc2l6ZSwgJGNvbHVtbnMpO1xuICBtYXJnaW4tbGVmdDogaWYoJG51bSA9PSAwLCAwLCBwZXJjZW50YWdlKCRudW0pKTtcbn1cblxuLy8gUm93IGNvbHVtbnNcbi8vXG4vLyBTcGVjaWZ5IG9uIGEgcGFyZW50IGVsZW1lbnQoZS5nLiwgLnJvdykgdG8gZm9yY2UgaW1tZWRpYXRlIGNoaWxkcmVuIGludG8gTk5cbi8vIG51bWJlciBvZiBjb2x1bW5zLiBTdXBwb3J0cyB3cmFwcGluZyB0byBuZXcgbGluZXMsIGJ1dCBkb2VzIG5vdCBkbyBhIE1hc29ucnlcbi8vIHN0eWxlIGdyaWQuXG5AbWl4aW4gcm93LWNvbHMoJGNvdW50KSB7XG4gID4gKiB7XG4gICAgZmxleDogMCAwIGF1dG87XG4gICAgd2lkdGg6IHBlcmNlbnRhZ2UoZGl2aWRlKDEsICRjb3VudCkpO1xuICB9XG59XG5cbi8vIEZyYW1ld29yayBncmlkIGdlbmVyYXRpb25cbi8vXG4vLyBVc2VkIG9ubHkgYnkgQm9vdHN0cmFwIHRvIGdlbmVyYXRlIHRoZSBjb3JyZWN0IG51bWJlciBvZiBncmlkIGNsYXNzZXMgZ2l2ZW5cbi8vIGFueSB2YWx1ZSBvZiBgJGdyaWQtY29sdW1uc2AuXG5cbkBtaXhpbiBtYWtlLWdyaWQtY29sdW1ucygkY29sdW1uczogJGdyaWQtY29sdW1ucywgJGd1dHRlcjogJGdyaWQtZ3V0dGVyLXdpZHRoLCAkYnJlYWtwb2ludHM6ICRncmlkLWJyZWFrcG9pbnRzKSB7XG4gIEBlYWNoICRicmVha3BvaW50IGluIG1hcC1rZXlzKCRicmVha3BvaW50cykge1xuICAgICRpbmZpeDogYnJlYWtwb2ludC1pbmZpeCgkYnJlYWtwb2ludCwgJGJyZWFrcG9pbnRzKTtcblxuICAgIEBpbmNsdWRlIG1lZGlhLWJyZWFrcG9pbnQtdXAoJGJyZWFrcG9pbnQsICRicmVha3BvaW50cykge1xuICAgICAgLy8gUHJvdmlkZSBiYXNpYyBgLmNvbC17YnB9YCBjbGFzc2VzIGZvciBlcXVhbC13aWR0aCBmbGV4Ym94IGNvbHVtbnNcbiAgICAgIC5jb2wjeyRpbmZpeH0ge1xuICAgICAgICBmbGV4OiAxIDAgMCU7IC8vIEZsZXhidWdzICM0OiBodHRwczovL2dpdGh1Yi5jb20vcGhpbGlwd2FsdG9uL2ZsZXhidWdzI2ZsZXhidWctNFxuICAgICAgfVxuXG4gICAgICAucm93LWNvbHMjeyRpbmZpeH0tYXV0byA+ICoge1xuICAgICAgICBAaW5jbHVkZSBtYWtlLWNvbC1hdXRvKCk7XG4gICAgICB9XG5cbiAgICAgIEBpZiAkZ3JpZC1yb3ctY29sdW1ucyA+IDAge1xuICAgICAgICBAZm9yICRpIGZyb20gMSB0aHJvdWdoICRncmlkLXJvdy1jb2x1bW5zIHtcbiAgICAgICAgICAucm93LWNvbHMjeyRpbmZpeH0tI3skaX0ge1xuICAgICAgICAgICAgQGluY2x1ZGUgcm93LWNvbHMoJGkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAuY29sI3skaW5maXh9LWF1dG8ge1xuICAgICAgICBAaW5jbHVkZSBtYWtlLWNvbC1hdXRvKCk7XG4gICAgICB9XG5cbiAgICAgIEBpZiAkY29sdW1ucyA+IDAge1xuICAgICAgICBAZm9yICRpIGZyb20gMSB0aHJvdWdoICRjb2x1bW5zIHtcbiAgICAgICAgICAuY29sI3skaW5maXh9LSN7JGl9IHtcbiAgICAgICAgICAgIEBpbmNsdWRlIG1ha2UtY29sKCRpLCAkY29sdW1ucyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gYCRjb2x1bW5zIC0gMWAgYmVjYXVzZSBvZmZzZXR0aW5nIGJ5IHRoZSB3aWR0aCBvZiBhbiBlbnRpcmUgcm93IGlzbid0IHBvc3NpYmxlXG4gICAgICAgIEBmb3IgJGkgZnJvbSAwIHRocm91Z2ggKCRjb2x1bW5zIC0gMSkge1xuICAgICAgICAgIEBpZiBub3QgKCRpbmZpeCA9PSBcIlwiIGFuZCAkaSA9PSAwKSB7IC8vIEF2b2lkIGVtaXR0aW5nIHVzZWxlc3MgLm9mZnNldC0wXG4gICAgICAgICAgICAub2Zmc2V0I3skaW5maXh9LSN7JGl9IHtcbiAgICAgICAgICAgICAgQGluY2x1ZGUgbWFrZS1jb2wtb2Zmc2V0KCRpLCAkY29sdW1ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEd1dHRlcnNcbiAgICAgIC8vXG4gICAgICAvLyBNYWtlIHVzZSBvZiBgLmctKmAsIGAuZ3gtKmAgb3IgYC5neS0qYCB1dGlsaXRpZXMgdG8gY2hhbmdlIHNwYWNpbmcgYmV0d2VlbiB0aGUgY29sdW1ucy5cbiAgICAgIEBlYWNoICRrZXksICR2YWx1ZSBpbiAkZ3V0dGVycyB7XG4gICAgICAgIC5nI3skaW5maXh9LSN7JGtleX0sXG4gICAgICAgIC5neCN7JGluZml4fS0jeyRrZXl9IHtcbiAgICAgICAgICAtLSN7JHByZWZpeH1ndXR0ZXIteDogI3skdmFsdWV9O1xuICAgICAgICB9XG5cbiAgICAgICAgLmcjeyRpbmZpeH0tI3ska2V5fSxcbiAgICAgICAgLmd5I3skaW5maXh9LSN7JGtleX0ge1xuICAgICAgICAgIC0tI3skcHJlZml4fWd1dHRlci15OiAjeyR2YWx1ZX07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuQG1peGluIG1ha2UtY3NzZ3JpZCgkY29sdW1uczogJGdyaWQtY29sdW1ucywgJGJyZWFrcG9pbnRzOiAkZ3JpZC1icmVha3BvaW50cykge1xuICBAZWFjaCAkYnJlYWtwb2ludCBpbiBtYXAta2V5cygkYnJlYWtwb2ludHMpIHtcbiAgICAkaW5maXg6IGJyZWFrcG9pbnQtaW5maXgoJGJyZWFrcG9pbnQsICRicmVha3BvaW50cyk7XG5cbiAgICBAaW5jbHVkZSBtZWRpYS1icmVha3BvaW50LXVwKCRicmVha3BvaW50LCAkYnJlYWtwb2ludHMpIHtcbiAgICAgIEBpZiAkY29sdW1ucyA+IDAge1xuICAgICAgICBAZm9yICRpIGZyb20gMSB0aHJvdWdoICRjb2x1bW5zIHtcbiAgICAgICAgICAuZy1jb2wjeyRpbmZpeH0tI3skaX0ge1xuICAgICAgICAgICAgZ3JpZC1jb2x1bW46IGF1dG8gLyBzcGFuICRpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFN0YXJ0IHdpdGggYDFgIGJlY2F1c2UgYDBgIGlzIGFuIGludmFsaWQgdmFsdWUuXG4gICAgICAgIC8vIEVuZHMgd2l0aCBgJGNvbHVtbnMgLSAxYCBiZWNhdXNlIG9mZnNldHRpbmcgYnkgdGhlIHdpZHRoIG9mIGFuIGVudGlyZSByb3cgaXNuJ3QgcG9zc2libGUuXG4gICAgICAgIEBmb3IgJGkgZnJvbSAxIHRocm91Z2ggKCRjb2x1bW5zIC0gMSkge1xuICAgICAgICAgIC5nLXN0YXJ0I3skaW5maXh9LSN7JGl9IHtcbiAgICAgICAgICAgIGdyaWQtY29sdW1uLXN0YXJ0OiAkaTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIi8vXG4vLyBCYXNpYyBCb290c3RyYXAgdGFibGVcbi8vXG5cbi50YWJsZSB7XG4gIC8vIFJlc2V0IG5lZWRlZCBmb3IgbmVzdGluZyB0YWJsZXNcbiAgLS0jeyRwcmVmaXh9dGFibGUtY29sb3ItdHlwZTogaW5pdGlhbDtcbiAgLS0jeyRwcmVmaXh9dGFibGUtYmctdHlwZTogaW5pdGlhbDtcbiAgLS0jeyRwcmVmaXh9dGFibGUtY29sb3Itc3RhdGU6IGluaXRpYWw7XG4gIC0tI3skcHJlZml4fXRhYmxlLWJnLXN0YXRlOiBpbml0aWFsO1xuICAvLyBFbmQgb2YgcmVzZXRcbiAgLS0jeyRwcmVmaXh9dGFibGUtY29sb3I6ICN7JHRhYmxlLWNvbG9yfTtcbiAgLS0jeyRwcmVmaXh9dGFibGUtYmc6ICN7JHRhYmxlLWJnfTtcbiAgLS0jeyRwcmVmaXh9dGFibGUtYm9yZGVyLWNvbG9yOiAjeyR0YWJsZS1ib3JkZXItY29sb3J9O1xuICAtLSN7JHByZWZpeH10YWJsZS1hY2NlbnQtYmc6ICN7JHRhYmxlLWFjY2VudC1iZ307XG4gIC0tI3skcHJlZml4fXRhYmxlLXN0cmlwZWQtY29sb3I6ICN7JHRhYmxlLXN0cmlwZWQtY29sb3J9O1xuICAtLSN7JHByZWZpeH10YWJsZS1zdHJpcGVkLWJnOiAjeyR0YWJsZS1zdHJpcGVkLWJnfTtcbiAgLS0jeyRwcmVmaXh9dGFibGUtYWN0aXZlLWNvbG9yOiAjeyR0YWJsZS1hY3RpdmUtY29sb3J9O1xuICAtLSN7JHByZWZpeH10YWJsZS1hY3RpdmUtYmc6ICN7JHRhYmxlLWFjdGl2ZS1iZ307XG4gIC0tI3skcHJlZml4fXRhYmxlLWhvdmVyLWNvbG9yOiAjeyR0YWJsZS1ob3Zlci1jb2xvcn07XG4gIC0tI3skcHJlZml4fXRhYmxlLWhvdmVyLWJnOiAjeyR0YWJsZS1ob3Zlci1iZ307XG5cbiAgd2lkdGg6IDEwMCU7XG4gIG1hcmdpbi1ib3R0b206ICRzcGFjZXI7XG4gIHZlcnRpY2FsLWFsaWduOiAkdGFibGUtY2VsbC12ZXJ0aWNhbC1hbGlnbjtcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS0jeyRwcmVmaXh9dGFibGUtYm9yZGVyLWNvbG9yKTtcblxuICAvLyBUYXJnZXQgdGggJiB0ZFxuICAvLyBXZSBuZWVkIHRoZSBjaGlsZCBjb21iaW5hdG9yIHRvIHByZXZlbnQgc3R5bGVzIGxlYWtpbmcgdG8gbmVzdGVkIHRhYmxlcyB3aGljaCBkb2Vzbid0IGhhdmUgYSBgLnRhYmxlYCBjbGFzcy5cbiAgLy8gV2UgdXNlIHRoZSB1bml2ZXJzYWwgc2VsZWN0b3JzIGhlcmUgdG8gc2ltcGxpZnkgdGhlIHNlbGVjdG9yIChlbHNlIHdlIHdvdWxkIG5lZWQgNiBkaWZmZXJlbnQgc2VsZWN0b3JzKS5cbiAgLy8gQW5vdGhlciBhZHZhbnRhZ2UgaXMgdGhhdCB0aGlzIGdlbmVyYXRlcyBsZXNzIGNvZGUgYW5kIG1ha2VzIHRoZSBzZWxlY3RvciBsZXNzIHNwZWNpZmljIG1ha2luZyBpdCBlYXNpZXIgdG8gb3ZlcnJpZGUuXG4gIC8vIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBzZWxlY3Rvci1tYXgtdW5pdmVyc2FsXG4gID4gOm5vdChjYXB0aW9uKSA+ICogPiAqIHtcbiAgICBwYWRkaW5nOiAkdGFibGUtY2VsbC1wYWRkaW5nLXkgJHRhYmxlLWNlbGwtcGFkZGluZy14O1xuICAgIC8vIEZvbGxvd2luZyB0aGUgcHJlY2VwdCBvZiBjYXNjYWRlczogaHR0cHM6Ly9jb2RlcGVuLmlvL21pcmlhbXN1emFubmUvZnVsbC92WU5nb2RiXG4gICAgY29sb3I6IHZhcigtLSN7JHByZWZpeH10YWJsZS1jb2xvci1zdGF0ZSwgdmFyKC0tI3skcHJlZml4fXRhYmxlLWNvbG9yLXR5cGUsIHZhcigtLSN7JHByZWZpeH10YWJsZS1jb2xvcikpKTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS0jeyRwcmVmaXh9dGFibGUtYmcpO1xuICAgIGJvcmRlci1ib3R0b20td2lkdGg6ICR0YWJsZS1ib3JkZXItd2lkdGg7XG4gICAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgOTk5OXB4IHZhcigtLSN7JHByZWZpeH10YWJsZS1iZy1zdGF0ZSwgdmFyKC0tI3skcHJlZml4fXRhYmxlLWJnLXR5cGUsIHZhcigtLSN7JHByZWZpeH10YWJsZS1hY2NlbnQtYmcpKSk7XG4gIH1cblxuICA+IHRib2R5IHtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogaW5oZXJpdDtcbiAgfVxuXG4gID4gdGhlYWQge1xuICAgIHZlcnRpY2FsLWFsaWduOiBib3R0b207XG4gIH1cbn1cblxuLnRhYmxlLWdyb3VwLWRpdmlkZXIge1xuICBib3JkZXItdG9wOiBjYWxjKCN7JHRhYmxlLWJvcmRlci13aWR0aH0gKiAyKSBzb2xpZCAkdGFibGUtZ3JvdXAtc2VwYXJhdG9yLWNvbG9yOyAvLyBzdHlsZWxpbnQtZGlzYWJsZS1saW5lIGZ1bmN0aW9uLWRpc2FsbG93ZWQtbGlzdFxufVxuXG4vL1xuLy8gQ2hhbmdlIHBsYWNlbWVudCBvZiBjYXB0aW9ucyB3aXRoIGEgY2xhc3Ncbi8vXG5cbi5jYXB0aW9uLXRvcCB7XG4gIGNhcHRpb24tc2lkZTogdG9wO1xufVxuXG5cbi8vXG4vLyBDb25kZW5zZWQgdGFibGUgdy8gaGFsZiBwYWRkaW5nXG4vL1xuXG4udGFibGUtc20ge1xuICAvLyBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc2VsZWN0b3ItbWF4LXVuaXZlcnNhbFxuICA+IDpub3QoY2FwdGlvbikgPiAqID4gKiB7XG4gICAgcGFkZGluZzogJHRhYmxlLWNlbGwtcGFkZGluZy15LXNtICR0YWJsZS1jZWxsLXBhZGRpbmcteC1zbTtcbiAgfVxufVxuXG5cbi8vIEJvcmRlciB2ZXJzaW9uc1xuLy9cbi8vIEFkZCBvciByZW1vdmUgYm9yZGVycyBhbGwgYXJvdW5kIHRoZSB0YWJsZSBhbmQgYmV0d2VlbiBhbGwgdGhlIGNvbHVtbnMuXG4vL1xuLy8gV2hlbiBib3JkZXJzIGFyZSBhZGRlZCBvbiBhbGwgc2lkZXMgb2YgdGhlIGNlbGxzLCB0aGUgY29ybmVycyBjYW4gcmVuZGVyIG9kZCB3aGVuXG4vLyB0aGVzZSBib3JkZXJzIGRvIG5vdCBoYXZlIHRoZSBzYW1lIGNvbG9yIG9yIGlmIHRoZXkgYXJlIHNlbWktdHJhbnNwYXJlbnQuXG4vLyBUaGVyZWZvcmUgd2UgYWRkIHRvcCBhbmQgYm9yZGVyIGJvdHRvbXMgdG8gdGhlIGB0cmBzIGFuZCBsZWZ0IGFuZCByaWdodCBib3JkZXJzXG4vLyB0byB0aGUgYHRkYHMgb3IgYHRoYHNcblxuLnRhYmxlLWJvcmRlcmVkIHtcbiAgPiA6bm90KGNhcHRpb24pID4gKiB7XG4gICAgYm9yZGVyLXdpZHRoOiAkdGFibGUtYm9yZGVyLXdpZHRoIDA7XG5cbiAgICAvLyBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc2VsZWN0b3ItbWF4LXVuaXZlcnNhbFxuICAgID4gKiB7XG4gICAgICBib3JkZXItd2lkdGg6IDAgJHRhYmxlLWJvcmRlci13aWR0aDtcbiAgICB9XG4gIH1cbn1cblxuLnRhYmxlLWJvcmRlcmxlc3Mge1xuICAvLyBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc2VsZWN0b3ItbWF4LXVuaXZlcnNhbFxuICA+IDpub3QoY2FwdGlvbikgPiAqID4gKiB7XG4gICAgYm9yZGVyLWJvdHRvbS13aWR0aDogMDtcbiAgfVxuXG4gID4gOm5vdCg6Zmlyc3QtY2hpbGQpIHtcbiAgICBib3JkZXItdG9wLXdpZHRoOiAwO1xuICB9XG59XG5cbi8vIFplYnJhLXN0cmlwaW5nXG4vL1xuLy8gRGVmYXVsdCB6ZWJyYS1zdHJpcGUgc3R5bGVzIChhbHRlcm5hdGluZyBncmF5IGFuZCB0cmFuc3BhcmVudCBiYWNrZ3JvdW5kcylcblxuLy8gRm9yIHJvd3Ncbi50YWJsZS1zdHJpcGVkIHtcbiAgPiB0Ym9keSA+IHRyOm50aC1vZi10eXBlKCN7JHRhYmxlLXN0cmlwZWQtb3JkZXJ9KSA+ICoge1xuICAgIC0tI3skcHJlZml4fXRhYmxlLWNvbG9yLXR5cGU6IHZhcigtLSN7JHByZWZpeH10YWJsZS1zdHJpcGVkLWNvbG9yKTtcbiAgICAtLSN7JHByZWZpeH10YWJsZS1iZy10eXBlOiB2YXIoLS0jeyRwcmVmaXh9dGFibGUtc3RyaXBlZC1iZyk7XG4gIH1cbn1cblxuLy8gRm9yIGNvbHVtbnNcbi50YWJsZS1zdHJpcGVkLWNvbHVtbnMge1xuICA+IDpub3QoY2FwdGlvbikgPiB0ciA+IDpudGgtY2hpbGQoI3skdGFibGUtc3RyaXBlZC1jb2x1bW5zLW9yZGVyfSkge1xuICAgIC0tI3skcHJlZml4fXRhYmxlLWNvbG9yLXR5cGU6IHZhcigtLSN7JHByZWZpeH10YWJsZS1zdHJpcGVkLWNvbG9yKTtcbiAgICAtLSN7JHByZWZpeH10YWJsZS1iZy10eXBlOiB2YXIoLS0jeyRwcmVmaXh9dGFibGUtc3RyaXBlZC1iZyk7XG4gIH1cbn1cblxuLy8gQWN0aXZlIHRhYmxlXG4vL1xuLy8gVGhlIGAudGFibGUtYWN0aXZlYCBjbGFzcyBjYW4gYmUgYWRkZWQgdG8gaGlnaGxpZ2h0IHJvd3Mgb3IgY2VsbHNcblxuLnRhYmxlLWFjdGl2ZSB7XG4gIC0tI3skcHJlZml4fXRhYmxlLWNvbG9yLXN0YXRlOiB2YXIoLS0jeyRwcmVmaXh9dGFibGUtYWN0aXZlLWNvbG9yKTtcbiAgLS0jeyRwcmVmaXh9dGFibGUtYmctc3RhdGU6IHZhcigtLSN7JHByZWZpeH10YWJsZS1hY3RpdmUtYmcpO1xufVxuXG4vLyBIb3ZlciBlZmZlY3Rcbi8vXG4vLyBQbGFjZWQgaGVyZSBzaW5jZSBpdCBoYXMgdG8gY29tZSBhZnRlciB0aGUgcG90ZW50aWFsIHplYnJhIHN0cmlwaW5nXG5cbi50YWJsZS1ob3ZlciB7XG4gID4gdGJvZHkgPiB0cjpob3ZlciA+ICoge1xuICAgIC0tI3skcHJlZml4fXRhYmxlLWNvbG9yLXN0YXRlOiB2YXIoLS0jeyRwcmVmaXh9dGFibGUtaG92ZXItY29sb3IpO1xuICAgIC0tI3skcHJlZml4fXRhYmxlLWJnLXN0YXRlOiB2YXIoLS0jeyRwcmVmaXh9dGFibGUtaG92ZXItYmcpO1xuICB9XG59XG5cblxuLy8gVGFibGUgdmFyaWFudHNcbi8vXG4vLyBUYWJsZSB2YXJpYW50cyBzZXQgdGhlIHRhYmxlIGNlbGwgYmFja2dyb3VuZHMsIGJvcmRlciBjb2xvcnNcbi8vIGFuZCB0aGUgY29sb3JzIG9mIHRoZSBzdHJpcGVkLCBob3ZlcmVkICYgYWN0aXZlIHRhYmxlc1xuXG5AZWFjaCAkY29sb3IsICR2YWx1ZSBpbiAkdGFibGUtdmFyaWFudHMge1xuICBAaW5jbHVkZSB0YWJsZS12YXJpYW50KCRjb2xvciwgJHZhbHVlKTtcbn1cblxuLy8gUmVzcG9uc2l2ZSB0YWJsZXNcbi8vXG4vLyBHZW5lcmF0ZSBzZXJpZXMgb2YgYC50YWJsZS1yZXNwb25zaXZlLSpgIGNsYXNzZXMgZm9yIGNvbmZpZ3VyaW5nIHRoZSBzY3JlZW5cbi8vIHNpemUgb2Ygd2hlcmUgeW91ciB0YWJsZSB3aWxsIG92ZXJmbG93LlxuXG5AZWFjaCAkYnJlYWtwb2ludCBpbiBtYXAta2V5cygkZ3JpZC1icmVha3BvaW50cykge1xuICAkaW5maXg6IGJyZWFrcG9pbnQtaW5maXgoJGJyZWFrcG9pbnQsICRncmlkLWJyZWFrcG9pbnRzKTtcblxuICBAaW5jbHVkZSBtZWRpYS1icmVha3BvaW50LWRvd24oJGJyZWFrcG9pbnQpIHtcbiAgICAudGFibGUtcmVzcG9uc2l2ZSN7JGluZml4fSB7XG4gICAgICBvdmVyZmxvdy14OiBhdXRvO1xuICAgICAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gc2Nzcy1kb2NzLXN0YXJ0IHRhYmxlLXZhcmlhbnRcbkBtaXhpbiB0YWJsZS12YXJpYW50KCRzdGF0ZSwgJGJhY2tncm91bmQpIHtcbiAgLnRhYmxlLSN7JHN0YXRlfSB7XG4gICAgJGNvbG9yOiBjb2xvci1jb250cmFzdChvcGFxdWUoJGJvZHktYmcsICRiYWNrZ3JvdW5kKSk7XG4gICAgJGhvdmVyLWJnOiBtaXgoJGNvbG9yLCAkYmFja2dyb3VuZCwgcGVyY2VudGFnZSgkdGFibGUtaG92ZXItYmctZmFjdG9yKSk7XG4gICAgJHN0cmlwZWQtYmc6IG1peCgkY29sb3IsICRiYWNrZ3JvdW5kLCBwZXJjZW50YWdlKCR0YWJsZS1zdHJpcGVkLWJnLWZhY3RvcikpO1xuICAgICRhY3RpdmUtYmc6IG1peCgkY29sb3IsICRiYWNrZ3JvdW5kLCBwZXJjZW50YWdlKCR0YWJsZS1hY3RpdmUtYmctZmFjdG9yKSk7XG4gICAgJHRhYmxlLWJvcmRlci1jb2xvcjogbWl4KCRjb2xvciwgJGJhY2tncm91bmQsIHBlcmNlbnRhZ2UoJHRhYmxlLWJvcmRlci1mYWN0b3IpKTtcblxuICAgIC0tI3skcHJlZml4fXRhYmxlLWNvbG9yOiAjeyRjb2xvcn07XG4gICAgLS0jeyRwcmVmaXh9dGFibGUtYmc6ICN7JGJhY2tncm91bmR9O1xuICAgIC0tI3skcHJlZml4fXRhYmxlLWJvcmRlci1jb2xvcjogI3skdGFibGUtYm9yZGVyLWNvbG9yfTtcbiAgICAtLSN7JHByZWZpeH10YWJsZS1zdHJpcGVkLWJnOiAjeyRzdHJpcGVkLWJnfTtcbiAgICAtLSN7JHByZWZpeH10YWJsZS1zdHJpcGVkLWNvbG9yOiAje2NvbG9yLWNvbnRyYXN0KCRzdHJpcGVkLWJnKX07XG4gICAgLS0jeyRwcmVmaXh9dGFibGUtYWN0aXZlLWJnOiAjeyRhY3RpdmUtYmd9O1xuICAgIC0tI3skcHJlZml4fXRhYmxlLWFjdGl2ZS1jb2xvcjogI3tjb2xvci1jb250cmFzdCgkYWN0aXZlLWJnKX07XG4gICAgLS0jeyRwcmVmaXh9dGFibGUtaG92ZXItYmc6ICN7JGhvdmVyLWJnfTtcbiAgICAtLSN7JHByZWZpeH10YWJsZS1ob3Zlci1jb2xvcjogI3tjb2xvci1jb250cmFzdCgkaG92ZXItYmcpfTtcblxuICAgIGNvbG9yOiB2YXIoLS0jeyRwcmVmaXh9dGFibGUtY29sb3IpO1xuICAgIGJvcmRlci1jb2xvcjogdmFyKC0tI3skcHJlZml4fXRhYmxlLWJvcmRlci1jb2xvcik7XG4gIH1cbn1cbi8vIHNjc3MtZG9jcy1lbmQgdGFibGUtdmFyaWFudFxuIiwiLy9cbi8vIExhYmVsc1xuLy9cblxuLmZvcm0tbGFiZWwge1xuICBtYXJnaW4tYm90dG9tOiAkZm9ybS1sYWJlbC1tYXJnaW4tYm90dG9tO1xuICBAaW5jbHVkZSBmb250LXNpemUoJGZvcm0tbGFiZWwtZm9udC1zaXplKTtcbiAgZm9udC1zdHlsZTogJGZvcm0tbGFiZWwtZm9udC1zdHlsZTtcbiAgZm9udC13ZWlnaHQ6ICRmb3JtLWxhYmVsLWZvbnQtd2VpZ2h0O1xuICBjb2xvcjogJGZvcm0tbGFiZWwtY29sb3I7XG59XG5cbi8vIEZvciB1c2Ugd2l0aCBob3Jpem9udGFsIGFuZCBpbmxpbmUgZm9ybXMsIHdoZW4geW91IG5lZWQgdGhlIGxhYmVsIChvciBsZWdlbmQpXG4vLyB0ZXh0IHRvIGFsaWduIHdpdGggdGhlIGZvcm0gY29udHJvbHMuXG4uY29sLWZvcm0tbGFiZWwge1xuICBwYWRkaW5nLXRvcDogYWRkKCRpbnB1dC1wYWRkaW5nLXksICRpbnB1dC1ib3JkZXItd2lkdGgpO1xuICBwYWRkaW5nLWJvdHRvbTogYWRkKCRpbnB1dC1wYWRkaW5nLXksICRpbnB1dC1ib3JkZXItd2lkdGgpO1xuICBtYXJnaW4tYm90dG9tOiAwOyAvLyBPdmVycmlkZSB0aGUgYDxsZWdlbmQ+YCBkZWZhdWx0XG4gIEBpbmNsdWRlIGZvbnQtc2l6ZShpbmhlcml0KTsgLy8gT3ZlcnJpZGUgdGhlIGA8bGVnZW5kPmAgZGVmYXVsdFxuICBmb250LXN0eWxlOiAkZm9ybS1sYWJlbC1mb250LXN0eWxlO1xuICBmb250LXdlaWdodDogJGZvcm0tbGFiZWwtZm9udC13ZWlnaHQ7XG4gIGxpbmUtaGVpZ2h0OiAkaW5wdXQtbGluZS1oZWlnaHQ7XG4gIGNvbG9yOiAkZm9ybS1sYWJlbC1jb2xvcjtcbn1cblxuLmNvbC1mb3JtLWxhYmVsLWxnIHtcbiAgcGFkZGluZy10b3A6IGFkZCgkaW5wdXQtcGFkZGluZy15LWxnLCAkaW5wdXQtYm9yZGVyLXdpZHRoKTtcbiAgcGFkZGluZy1ib3R0b206IGFkZCgkaW5wdXQtcGFkZGluZy15LWxnLCAkaW5wdXQtYm9yZGVyLXdpZHRoKTtcbiAgQGluY2x1ZGUgZm9udC1zaXplKCRpbnB1dC1mb250LXNpemUtbGcpO1xufVxuXG4uY29sLWZvcm0tbGFiZWwtc20ge1xuICBwYWRkaW5nLXRvcDogYWRkKCRpbnB1dC1wYWRkaW5nLXktc20sICRpbnB1dC1ib3JkZXItd2lkdGgpO1xuICBwYWRkaW5nLWJvdHRvbTogYWRkKCRpbnB1dC1wYWRkaW5nLXktc20sICRpbnB1dC1ib3JkZXItd2lkdGgpO1xuICBAaW5jbHVkZSBmb250LXNpemUoJGlucHV0LWZvbnQtc2l6ZS1zbSk7XG59XG4iLCIvL1xuLy8gRm9ybSB0ZXh0XG4vL1xuXG4uZm9ybS10ZXh0IHtcbiAgbWFyZ2luLXRvcDogJGZvcm0tdGV4dC1tYXJnaW4tdG9wO1xuICBAaW5jbHVkZSBmb250LXNpemUoJGZvcm0tdGV4dC1mb250LXNpemUpO1xuICBmb250LXN0eWxlOiAkZm9ybS10ZXh0LWZvbnQtc3R5bGU7XG4gIGZvbnQtd2VpZ2h0OiAkZm9ybS10ZXh0LWZvbnQtd2VpZ2h0O1xuICBjb2xvcjogJGZvcm0tdGV4dC1jb2xvcjtcbn1cbiIsIi8vXG4vLyBHZW5lcmFsIGZvcm0gY29udHJvbHMgKHBsdXMgYSBmZXcgc3BlY2lmaWMgaGlnaC1sZXZlbCBpbnRlcnZlbnRpb25zKVxuLy9cblxuLmZvcm0tY29udHJvbCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMTAwJTtcbiAgcGFkZGluZzogJGlucHV0LXBhZGRpbmcteSAkaW5wdXQtcGFkZGluZy14O1xuICBmb250LWZhbWlseTogJGlucHV0LWZvbnQtZmFtaWx5O1xuICBAaW5jbHVkZSBmb250LXNpemUoJGlucHV0LWZvbnQtc2l6ZSk7XG4gIGZvbnQtd2VpZ2h0OiAkaW5wdXQtZm9udC13ZWlnaHQ7XG4gIGxpbmUtaGVpZ2h0OiAkaW5wdXQtbGluZS1oZWlnaHQ7XG4gIGNvbG9yOiAkaW5wdXQtY29sb3I7XG4gIGFwcGVhcmFuY2U6IG5vbmU7IC8vIEZpeCBhcHBlYXJhbmNlIGZvciBkYXRlIGlucHV0cyBpbiBTYWZhcmlcbiAgYmFja2dyb3VuZC1jb2xvcjogJGlucHV0LWJnO1xuICBiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94O1xuICBib3JkZXI6ICRpbnB1dC1ib3JkZXItd2lkdGggc29saWQgJGlucHV0LWJvcmRlci1jb2xvcjtcblxuICAvLyBOb3RlOiBUaGlzIGhhcyBubyBlZmZlY3Qgb24gPHNlbGVjdD5zIGluIHNvbWUgYnJvd3NlcnMsIGR1ZSB0byB0aGUgbGltaXRlZCBzdHlsYWJpbGl0eSBvZiBgPHNlbGVjdD5gcyBpbiBDU1MuXG4gIEBpbmNsdWRlIGJvcmRlci1yYWRpdXMoJGlucHV0LWJvcmRlci1yYWRpdXMsIDApO1xuXG4gIEBpbmNsdWRlIGJveC1zaGFkb3coJGlucHV0LWJveC1zaGFkb3cpO1xuICBAaW5jbHVkZSB0cmFuc2l0aW9uKCRpbnB1dC10cmFuc2l0aW9uKTtcblxuICAmW3R5cGU9XCJmaWxlXCJdIHtcbiAgICBvdmVyZmxvdzogaGlkZGVuOyAvLyBwcmV2ZW50IHBzZXVkbyBlbGVtZW50IGJ1dHRvbiBvdmVybGFwXG5cbiAgICAmOm5vdCg6ZGlzYWJsZWQpOm5vdChbcmVhZG9ubHldKSB7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgfVxuICB9XG5cbiAgLy8gQ3VzdG9taXplIHRoZSBgOmZvY3VzYCBzdGF0ZSB0byBpbWl0YXRlIG5hdGl2ZSBXZWJLaXQgc3R5bGVzLlxuICAmOmZvY3VzIHtcbiAgICBjb2xvcjogJGlucHV0LWZvY3VzLWNvbG9yO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRpbnB1dC1mb2N1cy1iZztcbiAgICBib3JkZXItY29sb3I6ICRpbnB1dC1mb2N1cy1ib3JkZXItY29sb3I7XG4gICAgb3V0bGluZTogMDtcbiAgICBAaWYgJGVuYWJsZS1zaGFkb3dzIHtcbiAgICAgIEBpbmNsdWRlIGJveC1zaGFkb3coJGlucHV0LWJveC1zaGFkb3csICRpbnB1dC1mb2N1cy1ib3gtc2hhZG93KTtcbiAgICB9IEBlbHNlIHtcbiAgICAgIC8vIEF2b2lkIHVzaW5nIG1peGluIHNvIHdlIGNhbiBwYXNzIGN1c3RvbSBmb2N1cyBzaGFkb3cgcHJvcGVybHlcbiAgICAgIGJveC1zaGFkb3c6ICRpbnB1dC1mb2N1cy1ib3gtc2hhZG93O1xuICAgIH1cbiAgfVxuXG4gICY6Oi13ZWJraXQtZGF0ZS1hbmQtdGltZS12YWx1ZSB7XG4gICAgLy8gT24gQW5kcm9pZCBDaHJvbWUsIGZvcm0tY29udHJvbCdzIFwid2lkdGg6IDEwMCVcIiBtYWtlcyB0aGUgaW5wdXQgd2lkdGggdG9vIHNtYWxsXG4gICAgLy8gVGVzdGVkIHVuZGVyIEFuZHJvaWQgMTEgLyBDaHJvbWUgODksIEFuZHJvaWQgMTIgLyBDaHJvbWUgMTAwLCBBbmRyb2lkIDEzIC8gQ2hyb21lIDEwOVxuICAgIC8vXG4gICAgLy8gT24gaU9TIFNhZmFyaSwgZm9ybS1jb250cm9sJ3MgXCJhcHBlYXJhbmNlOiBub25lXCIgKyBcIndpZHRoOiAxMDAlXCIgbWFrZXMgdGhlIGlucHV0IHdpZHRoIHRvbyBzbWFsbFxuICAgIC8vIFRlc3RlZCB1bmRlciBpT1MgMTYuMiAvIFNhZmFyaSAxNi4yXG4gICAgbWluLXdpZHRoOiA4NXB4OyAvLyBTZWVtcyB0byBiZSBhIGdvb2QgbWluaW11bSBzYWZlIHdpZHRoXG5cbiAgICAvLyBBZGQgc29tZSBoZWlnaHQgdG8gZGF0ZSBpbnB1dHMgb24gaU9TXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2lzc3Vlcy8yMzMwN1xuICAgIC8vIFRPRE86IHdlIGNhbiByZW1vdmUgdGhpcyB3b3JrYXJvdW5kIG9uY2UgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODk1OSBpcyByZXNvbHZlZFxuICAgIC8vIE11bHRpcGx5IGxpbmUtaGVpZ2h0IGJ5IDFlbSBpZiBpdCBoYXMgbm8gdW5pdFxuICAgIGhlaWdodDogaWYodW5pdCgkaW5wdXQtbGluZS1oZWlnaHQpID09IFwiXCIsICRpbnB1dC1saW5lLWhlaWdodCAqIDFlbSwgJGlucHV0LWxpbmUtaGVpZ2h0KTtcblxuICAgIC8vIEFuZHJvaWQgQ2hyb21lIHR5cGU9XCJkYXRlXCIgaXMgdGFsbGVyIHRoYW4gdGhlIG90aGVyIGlucHV0c1xuICAgIC8vIGJlY2F1c2Ugb2YgXCJtYXJnaW46IDFweCAyNHB4IDFweCA0cHhcIiBpbnNpZGUgdGhlIHNoYWRvdyBET01cbiAgICAvLyBUZXN0ZWQgdW5kZXIgQW5kcm9pZCAxMSAvIENocm9tZSA4OSwgQW5kcm9pZCAxMiAvIENocm9tZSAxMDAsIEFuZHJvaWQgMTMgLyBDaHJvbWUgMTA5XG4gICAgbWFyZ2luOiAwO1xuICB9XG5cbiAgLy8gUHJldmVudCBleGNlc3NpdmUgZGF0ZSBpbnB1dCBoZWlnaHQgaW4gV2Via2l0XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9pc3N1ZXMvMzQ0MzNcbiAgJjo6LXdlYmtpdC1kYXRldGltZS1lZGl0IHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwYWRkaW5nOiAwO1xuICB9XG5cbiAgLy8gUGxhY2Vob2xkZXJcbiAgJjo6cGxhY2Vob2xkZXIge1xuICAgIGNvbG9yOiAkaW5wdXQtcGxhY2Vob2xkZXItY29sb3I7XG4gICAgLy8gT3ZlcnJpZGUgRmlyZWZveCdzIHVudXN1YWwgZGVmYXVsdCBvcGFjaXR5OyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL3B1bGwvMTE1MjYuXG4gICAgb3BhY2l0eTogMTtcbiAgfVxuXG4gIC8vIERpc2FibGVkIGlucHV0c1xuICAvL1xuICAvLyBIVE1MNSBzYXlzIHRoYXQgY29udHJvbHMgdW5kZXIgYSBmaWVsZHNldCA+IGxlZ2VuZDpmaXJzdC1jaGlsZCB3b24ndCBiZVxuICAvLyBkaXNhYmxlZCBpZiB0aGUgZmllbGRzZXQgaXMgZGlzYWJsZWQuIER1ZSB0byBpbXBsZW1lbnRhdGlvbiBkaWZmaWN1bHR5LCB3ZVxuICAvLyBkb24ndCBob25vciB0aGF0IGVkZ2UgY2FzZTsgd2Ugc3R5bGUgdGhlbSBhcyBkaXNhYmxlZCBhbnl3YXkuXG4gICY6ZGlzYWJsZWQge1xuICAgIGNvbG9yOiAkaW5wdXQtZGlzYWJsZWQtY29sb3I7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGlucHV0LWRpc2FibGVkLWJnO1xuICAgIGJvcmRlci1jb2xvcjogJGlucHV0LWRpc2FibGVkLWJvcmRlci1jb2xvcjtcbiAgICAvLyBpT1MgZml4IGZvciB1bnJlYWRhYmxlIGRpc2FibGVkIGNvbnRlbnQ7IHNlZSBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvaXNzdWVzLzExNjU1LlxuICAgIG9wYWNpdHk6IDE7XG4gIH1cblxuICAvLyBGaWxlIGlucHV0IGJ1dHRvbnMgdGhlbWluZ1xuICAmOjpmaWxlLXNlbGVjdG9yLWJ1dHRvbiB7XG4gICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmcteSAkaW5wdXQtcGFkZGluZy14O1xuICAgIG1hcmdpbjogKC0kaW5wdXQtcGFkZGluZy15KSAoLSRpbnB1dC1wYWRkaW5nLXgpO1xuICAgIG1hcmdpbi1pbmxpbmUtZW5kOiAkaW5wdXQtcGFkZGluZy14O1xuICAgIGNvbG9yOiAkZm9ybS1maWxlLWJ1dHRvbi1jb2xvcjtcbiAgICBAaW5jbHVkZSBncmFkaWVudC1iZygkZm9ybS1maWxlLWJ1dHRvbi1iZyk7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgYm9yZGVyLWNvbG9yOiBpbmhlcml0O1xuICAgIGJvcmRlci1zdHlsZTogc29saWQ7XG4gICAgYm9yZGVyLXdpZHRoOiAwO1xuICAgIGJvcmRlci1pbmxpbmUtZW5kLXdpZHRoOiAkaW5wdXQtYm9yZGVyLXdpZHRoO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7IC8vIHN0eWxlbGludC1kaXNhYmxlLWxpbmUgcHJvcGVydHktZGlzYWxsb3dlZC1saXN0XG4gICAgQGluY2x1ZGUgdHJhbnNpdGlvbigkYnRuLXRyYW5zaXRpb24pO1xuICB9XG5cbiAgJjpob3Zlcjpub3QoOmRpc2FibGVkKTpub3QoW3JlYWRvbmx5XSk6OmZpbGUtc2VsZWN0b3ItYnV0dG9uIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkZm9ybS1maWxlLWJ1dHRvbi1ob3Zlci1iZztcbiAgfVxufVxuXG4vLyBSZWFkb25seSBjb250cm9scyBhcyBwbGFpbiB0ZXh0XG4vL1xuLy8gQXBwbHkgY2xhc3MgdG8gYSByZWFkb25seSBpbnB1dCB0byBtYWtlIGl0IGFwcGVhciBsaWtlIHJlZ3VsYXIgcGxhaW5cbi8vIHRleHQgKHdpdGhvdXQgYW55IGJvcmRlciwgYmFja2dyb3VuZCBjb2xvciwgZm9jdXMgaW5kaWNhdG9yKVxuXG4uZm9ybS1jb250cm9sLXBsYWludGV4dCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMTAwJTtcbiAgcGFkZGluZzogJGlucHV0LXBhZGRpbmcteSAwO1xuICBtYXJnaW4tYm90dG9tOiAwOyAvLyBtYXRjaCBpbnB1dHMgaWYgdGhpcyBjbGFzcyBjb21lcyBvbiBpbnB1dHMgd2l0aCBkZWZhdWx0IG1hcmdpbnNcbiAgbGluZS1oZWlnaHQ6ICRpbnB1dC1saW5lLWhlaWdodDtcbiAgY29sb3I6ICRpbnB1dC1wbGFpbnRleHQtY29sb3I7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBib3JkZXI6IHNvbGlkIHRyYW5zcGFyZW50O1xuICBib3JkZXItd2lkdGg6ICRpbnB1dC1ib3JkZXItd2lkdGggMDtcblxuICAmOmZvY3VzIHtcbiAgICBvdXRsaW5lOiAwO1xuICB9XG5cbiAgJi5mb3JtLWNvbnRyb2wtc20sXG4gICYuZm9ybS1jb250cm9sLWxnIHtcbiAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuICAgIHBhZGRpbmctbGVmdDogMDtcbiAgfVxufVxuXG4vLyBGb3JtIGNvbnRyb2wgc2l6aW5nXG4vL1xuLy8gQnVpbGQgb24gYC5mb3JtLWNvbnRyb2xgIHdpdGggbW9kaWZpZXIgY2xhc3NlcyB0byBkZWNyZWFzZSBvciBpbmNyZWFzZSB0aGVcbi8vIGhlaWdodCBhbmQgZm9udC1zaXplIG9mIGZvcm0gY29udHJvbHMuXG4vL1xuLy8gUmVwZWF0ZWQgaW4gYF9pbnB1dF9ncm91cC5zY3NzYCB0byBhdm9pZCBTYXNzIGV4dGVuZCBpc3N1ZXMuXG5cbi5mb3JtLWNvbnRyb2wtc20ge1xuICBtaW4taGVpZ2h0OiAkaW5wdXQtaGVpZ2h0LXNtO1xuICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZy15LXNtICRpbnB1dC1wYWRkaW5nLXgtc207XG4gIEBpbmNsdWRlIGZvbnQtc2l6ZSgkaW5wdXQtZm9udC1zaXplLXNtKTtcbiAgQGluY2x1ZGUgYm9yZGVyLXJhZGl1cygkaW5wdXQtYm9yZGVyLXJhZGl1cy1zbSk7XG5cbiAgJjo6ZmlsZS1zZWxlY3Rvci1idXR0b24ge1xuICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nLXktc20gJGlucHV0LXBhZGRpbmcteC1zbTtcbiAgICBtYXJnaW46ICgtJGlucHV0LXBhZGRpbmcteS1zbSkgKC0kaW5wdXQtcGFkZGluZy14LXNtKTtcbiAgICBtYXJnaW4taW5saW5lLWVuZDogJGlucHV0LXBhZGRpbmcteC1zbTtcbiAgfVxufVxuXG4uZm9ybS1jb250cm9sLWxnIHtcbiAgbWluLWhlaWdodDogJGlucHV0LWhlaWdodC1sZztcbiAgcGFkZGluZzogJGlucHV0LXBhZGRpbmcteS1sZyAkaW5wdXQtcGFkZGluZy14LWxnO1xuICBAaW5jbHVkZSBmb250LXNpemUoJGlucHV0LWZvbnQtc2l6ZS1sZyk7XG4gIEBpbmNsdWRlIGJvcmRlci1yYWRpdXMoJGlucHV0LWJvcmRlci1yYWRpdXMtbGcpO1xuXG4gICY6OmZpbGUtc2VsZWN0b3ItYnV0dG9uIHtcbiAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZy15LWxnICRpbnB1dC1wYWRkaW5nLXgtbGc7XG4gICAgbWFyZ2luOiAoLSRpbnB1dC1wYWRkaW5nLXktbGcpICgtJGlucHV0LXBhZGRpbmcteC1sZyk7XG4gICAgbWFyZ2luLWlubGluZS1lbmQ6ICRpbnB1dC1wYWRkaW5nLXgtbGc7XG4gIH1cbn1cblxuLy8gTWFrZSBzdXJlIHRleHRhcmVhcyBkb24ndCBzaHJpbmsgdG9vIG11Y2ggd2hlbiByZXNpemVkXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvcHVsbC8yOTEyNFxuLy8gc3R5bGVsaW50LWRpc2FibGUgc2VsZWN0b3Itbm8tcXVhbGlmeWluZy10eXBlXG50ZXh0YXJlYSB7XG4gICYuZm9ybS1jb250cm9sIHtcbiAgICBtaW4taGVpZ2h0OiAkaW5wdXQtaGVpZ2h0O1xuICB9XG5cbiAgJi5mb3JtLWNvbnRyb2wtc20ge1xuICAgIG1pbi1oZWlnaHQ6ICRpbnB1dC1oZWlnaHQtc207XG4gIH1cblxuICAmLmZvcm0tY29udHJvbC1sZyB7XG4gICAgbWluLWhlaWdodDogJGlucHV0LWhlaWdodC1sZztcbiAgfVxufVxuLy8gc3R5bGVsaW50LWVuYWJsZSBzZWxlY3Rvci1uby1xdWFsaWZ5aW5nLXR5cGVcblxuLmZvcm0tY29udHJvbC1jb2xvciB7XG4gIHdpZHRoOiAkZm9ybS1jb2xvci13aWR0aDtcbiAgaGVpZ2h0OiAkaW5wdXQtaGVpZ2h0O1xuICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZy15O1xuXG4gICY6bm90KDpkaXNhYmxlZCk6bm90KFtyZWFkb25seV0pIHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gIH1cblxuICAmOjotbW96LWNvbG9yLXN3YXRjaCB7XG4gICAgYm9yZGVyOiAwICFpbXBvcnRhbnQ7IC8vIHN0eWxlbGludC1kaXNhYmxlLWxpbmUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50XG4gICAgQGluY2x1ZGUgYm9yZGVyLXJhZGl1cygkaW5wdXQtYm9yZGVyLXJhZGl1cyk7XG4gIH1cblxuICAmOjotd2Via2l0LWNvbG9yLXN3YXRjaCB7XG4gICAgYm9yZGVyOiAwICFpbXBvcnRhbnQ7IC8vIHN0eWxlbGludC1kaXNhYmxlLWxpbmUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50XG4gICAgQGluY2x1ZGUgYm9yZGVyLXJhZGl1cygkaW5wdXQtYm9yZGVyLXJhZGl1cyk7XG4gIH1cblxuICAmLmZvcm0tY29udHJvbC1zbSB7IGhlaWdodDogJGlucHV0LWhlaWdodC1zbTsgfVxuICAmLmZvcm0tY29udHJvbC1sZyB7IGhlaWdodDogJGlucHV0LWhlaWdodC1sZzsgfVxufVxuIiwiLy8gc3R5bGVsaW50LWRpc2FibGUgcHJvcGVydHktZGlzYWxsb3dlZC1saXN0XG5AbWl4aW4gdHJhbnNpdGlvbigkdHJhbnNpdGlvbi4uLikge1xuICBAaWYgbGVuZ3RoKCR0cmFuc2l0aW9uKSA9PSAwIHtcbiAgICAkdHJhbnNpdGlvbjogJHRyYW5zaXRpb24tYmFzZTtcbiAgfVxuXG4gIEBpZiBsZW5ndGgoJHRyYW5zaXRpb24pID4gMSB7XG4gICAgQGVhY2ggJHZhbHVlIGluICR0cmFuc2l0aW9uIHtcbiAgICAgIEBpZiAkdmFsdWUgPT0gbnVsbCBvciAkdmFsdWUgPT0gbm9uZSB7XG4gICAgICAgIEB3YXJuIFwiVGhlIGtleXdvcmQgJ25vbmUnIG9yICdudWxsJyBtdXN0IGJlIHVzZWQgYXMgYSBzaW5nbGUgYXJndW1lbnQuXCI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQGlmICRlbmFibGUtdHJhbnNpdGlvbnMge1xuICAgIEBpZiBudGgoJHRyYW5zaXRpb24sIDEpICE9IG51bGwge1xuICAgICAgdHJhbnNpdGlvbjogJHRyYW5zaXRpb247XG4gICAgfVxuXG4gICAgQGlmICRlbmFibGUtcmVkdWNlZC1tb3Rpb24gYW5kIG50aCgkdHJhbnNpdGlvbiwgMSkgIT0gbnVsbCBhbmQgbnRoKCR0cmFuc2l0aW9uLCAxKSAhPSBub25lIHtcbiAgICAgIEBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7XG4gICAgICAgIHRyYW5zaXRpb246IG5vbmU7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIvLyBHcmFkaWVudHNcblxuLy8gc2Nzcy1kb2NzLXN0YXJ0IGdyYWRpZW50LWJnLW1peGluXG5AbWl4aW4gZ3JhZGllbnQtYmcoJGNvbG9yOiBudWxsKSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICRjb2xvcjtcblxuICBAaWYgJGVuYWJsZS1ncmFkaWVudHMge1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHZhcigtLSN7JHByZWZpeH1ncmFkaWVudCk7XG4gIH1cbn1cbi8vIHNjc3MtZG9jcy1lbmQgZ3JhZGllbnQtYmctbWl4aW5cblxuLy8gc2Nzcy1kb2NzLXN0YXJ0IGdyYWRpZW50LW1peGluc1xuLy8gSG9yaXpvbnRhbCBncmFkaWVudCwgZnJvbSBsZWZ0IHRvIHJpZ2h0XG4vL1xuLy8gQ3JlYXRlcyB0d28gY29sb3Igc3RvcHMsIHN0YXJ0IGFuZCBlbmQsIGJ5IHNwZWNpZnlpbmcgYSBjb2xvciBhbmQgcG9zaXRpb24gZm9yIGVhY2ggY29sb3Igc3RvcC5cbkBtaXhpbiBncmFkaWVudC14KCRzdGFydC1jb2xvcjogJGdyYXktNzAwLCAkZW5kLWNvbG9yOiAkZ3JheS04MDAsICRzdGFydC1wZXJjZW50OiAwJSwgJGVuZC1wZXJjZW50OiAxMDAlKSB7XG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgJHN0YXJ0LWNvbG9yICRzdGFydC1wZXJjZW50LCAkZW5kLWNvbG9yICRlbmQtcGVyY2VudCk7XG59XG5cbi8vIFZlcnRpY2FsIGdyYWRpZW50LCBmcm9tIHRvcCB0byBib3R0b21cbi8vXG4vLyBDcmVhdGVzIHR3byBjb2xvciBzdG9wcywgc3RhcnQgYW5kIGVuZCwgYnkgc3BlY2lmeWluZyBhIGNvbG9yIGFuZCBwb3NpdGlvbiBmb3IgZWFjaCBjb2xvciBzdG9wLlxuQG1peGluIGdyYWRpZW50LXkoJHN0YXJ0LWNvbG9yOiAkZ3JheS03MDAsICRlbmQtY29sb3I6ICRncmF5LTgwMCwgJHN0YXJ0LXBlcmNlbnQ6IG51bGwsICRlbmQtcGVyY2VudDogbnVsbCkge1xuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAkc3RhcnQtY29sb3IgJHN0YXJ0LXBlcmNlbnQsICRlbmQtY29sb3IgJGVuZC1wZXJjZW50KTtcbn1cblxuQG1peGluIGdyYWRpZW50LWRpcmVjdGlvbmFsKCRzdGFydC1jb2xvcjogJGdyYXktNzAwLCAkZW5kLWNvbG9yOiAkZ3JheS04MDAsICRkZWc6IDQ1ZGVnKSB7XG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCgkZGVnLCAkc3RhcnQtY29sb3IsICRlbmQtY29sb3IpO1xufVxuXG5AbWl4aW4gZ3JhZGllbnQteC10aHJlZS1jb2xvcnMoJHN0YXJ0LWNvbG9yOiAkYmx1ZSwgJG1pZC1jb2xvcjogJHB1cnBsZSwgJGNvbG9yLXN0b3A6IDUwJSwgJGVuZC1jb2xvcjogJHJlZCkge1xuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICRzdGFydC1jb2xvciwgJG1pZC1jb2xvciAkY29sb3Itc3RvcCwgJGVuZC1jb2xvcik7XG59XG5cbkBtaXhpbiBncmFkaWVudC15LXRocmVlLWNvbG9ycygkc3RhcnQtY29sb3I6ICRibHVlLCAkbWlkLWNvbG9yOiAkcHVycGxlLCAkY29sb3Itc3RvcDogNTAlLCAkZW5kLWNvbG9yOiAkcmVkKSB7XG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCgkc3RhcnQtY29sb3IsICRtaWQtY29sb3IgJGNvbG9yLXN0b3AsICRlbmQtY29sb3IpO1xufVxuXG5AbWl4aW4gZ3JhZGllbnQtcmFkaWFsKCRpbm5lci1jb2xvcjogJGdyYXktNzAwLCAkb3V0ZXItY29sb3I6ICRncmF5LTgwMCkge1xuICBiYWNrZ3JvdW5kLWltYWdlOiByYWRpYWwtZ3JhZGllbnQoY2lyY2xlLCAkaW5uZXItY29sb3IsICRvdXRlci1jb2xvcik7XG59XG5cbkBtaXhpbiBncmFkaWVudC1zdHJpcGVkKCRjb2xvcjogcmdiYSgkd2hpdGUsIC4xNSksICRhbmdsZTogNDVkZWcpIHtcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KCRhbmdsZSwgJGNvbG9yIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA1MCUsICRjb2xvciA1MCUsICRjb2xvciA3NSUsIHRyYW5zcGFyZW50IDc1JSwgdHJhbnNwYXJlbnQpO1xufVxuLy8gc2Nzcy1kb2NzLWVuZCBncmFkaWVudC1taXhpbnNcbiIsIi8vIFNlbGVjdFxuLy9cbi8vIFJlcGxhY2VzIHRoZSBicm93c2VyIGRlZmF1bHQgc2VsZWN0IHdpdGggYSBjdXN0b20gb25lLCBtb3N0bHkgcHVsbGVkIGZyb21cbi8vIGh0dHBzOi8vcHJpbWVyLmdpdGh1Yi5pby8uXG5cbi5mb3JtLXNlbGVjdCB7XG4gIC0tI3skcHJlZml4fWZvcm0tc2VsZWN0LWJnLWltZzogI3tlc2NhcGUtc3ZnKCRmb3JtLXNlbGVjdC1pbmRpY2F0b3IpfTtcblxuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDEwMCU7XG4gIHBhZGRpbmc6ICRmb3JtLXNlbGVjdC1wYWRkaW5nLXkgJGZvcm0tc2VsZWN0LWluZGljYXRvci1wYWRkaW5nICRmb3JtLXNlbGVjdC1wYWRkaW5nLXkgJGZvcm0tc2VsZWN0LXBhZGRpbmcteDtcbiAgZm9udC1mYW1pbHk6ICRmb3JtLXNlbGVjdC1mb250LWZhbWlseTtcbiAgQGluY2x1ZGUgZm9udC1zaXplKCRmb3JtLXNlbGVjdC1mb250LXNpemUpO1xuICBmb250LXdlaWdodDogJGZvcm0tc2VsZWN0LWZvbnQtd2VpZ2h0O1xuICBsaW5lLWhlaWdodDogJGZvcm0tc2VsZWN0LWxpbmUtaGVpZ2h0O1xuICBjb2xvcjogJGZvcm0tc2VsZWN0LWNvbG9yO1xuICBhcHBlYXJhbmNlOiBub25lO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkZm9ybS1zZWxlY3QtYmc7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHZhcigtLSN7JHByZWZpeH1mb3JtLXNlbGVjdC1iZy1pbWcpLCB2YXIoLS0jeyRwcmVmaXh9Zm9ybS1zZWxlY3QtYmctaWNvbiwgbm9uZSk7XG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gIGJhY2tncm91bmQtcG9zaXRpb246ICRmb3JtLXNlbGVjdC1iZy1wb3NpdGlvbjtcbiAgYmFja2dyb3VuZC1zaXplOiAkZm9ybS1zZWxlY3QtYmctc2l6ZTtcbiAgYm9yZGVyOiAkZm9ybS1zZWxlY3QtYm9yZGVyLXdpZHRoIHNvbGlkICRmb3JtLXNlbGVjdC1ib3JkZXItY29sb3I7XG4gIEBpbmNsdWRlIGJvcmRlci1yYWRpdXMoJGZvcm0tc2VsZWN0LWJvcmRlci1yYWRpdXMsIDApO1xuICBAaW5jbHVkZSBib3gtc2hhZG93KCRmb3JtLXNlbGVjdC1ib3gtc2hhZG93KTtcbiAgQGluY2x1ZGUgdHJhbnNpdGlvbigkZm9ybS1zZWxlY3QtdHJhbnNpdGlvbik7XG5cbiAgJjpmb2N1cyB7XG4gICAgYm9yZGVyLWNvbG9yOiAkZm9ybS1zZWxlY3QtZm9jdXMtYm9yZGVyLWNvbG9yO1xuICAgIG91dGxpbmU6IDA7XG4gICAgQGlmICRlbmFibGUtc2hhZG93cyB7XG4gICAgICBAaW5jbHVkZSBib3gtc2hhZG93KCRmb3JtLXNlbGVjdC1ib3gtc2hhZG93LCAkZm9ybS1zZWxlY3QtZm9jdXMtYm94LXNoYWRvdyk7XG4gICAgfSBAZWxzZSB7XG4gICAgICAvLyBBdm9pZCB1c2luZyBtaXhpbiBzbyB3ZSBjYW4gcGFzcyBjdXN0b20gZm9jdXMgc2hhZG93IHByb3Blcmx5XG4gICAgICBib3gtc2hhZG93OiAkZm9ybS1zZWxlY3QtZm9jdXMtYm94LXNoYWRvdztcbiAgICB9XG4gIH1cblxuICAmW211bHRpcGxlXSxcbiAgJltzaXplXTpub3QoW3NpemU9XCIxXCJdKSB7XG4gICAgcGFkZGluZy1yaWdodDogJGZvcm0tc2VsZWN0LXBhZGRpbmcteDtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xuICB9XG5cbiAgJjpkaXNhYmxlZCB7XG4gICAgY29sb3I6ICRmb3JtLXNlbGVjdC1kaXNhYmxlZC1jb2xvcjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkZm9ybS1zZWxlY3QtZGlzYWJsZWQtYmc7XG4gICAgYm9yZGVyLWNvbG9yOiAkZm9ybS1zZWxlY3QtZGlzYWJsZWQtYm9yZGVyLWNvbG9yO1xuICB9XG5cbiAgLy8gUmVtb3ZlIG91dGxpbmUgZnJvbSBzZWxlY3QgYm94IGluIEZGXG4gICY6LW1vei1mb2N1c3Jpbmcge1xuICAgIGNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICB0ZXh0LXNoYWRvdzogMCAwIDAgJGZvcm0tc2VsZWN0LWNvbG9yO1xuICB9XG59XG5cbi5mb3JtLXNlbGVjdC1zbSB7XG4gIHBhZGRpbmctdG9wOiAkZm9ybS1zZWxlY3QtcGFkZGluZy15LXNtO1xuICBwYWRkaW5nLWJvdHRvbTogJGZvcm0tc2VsZWN0LXBhZGRpbmcteS1zbTtcbiAgcGFkZGluZy1sZWZ0OiAkZm9ybS1zZWxlY3QtcGFkZGluZy14LXNtO1xuICBAaW5jbHVkZSBmb250LXNpemUoJGZvcm0tc2VsZWN0LWZvbnQtc2l6ZS1zbSk7XG4gIEBpbmNsdWRlIGJvcmRlci1yYWRpdXMoJGZvcm0tc2VsZWN0LWJvcmRlci1yYWRpdXMtc20pO1xufVxuXG4uZm9ybS1zZWxlY3QtbGcge1xuICBwYWRkaW5nLXRvcDogJGZvcm0tc2VsZWN0LXBhZGRpbmcteS1sZztcbiAgcGFkZGluZy1ib3R0b206ICRmb3JtLXNlbGVjdC1wYWRkaW5nLXktbGc7XG4gIHBhZGRpbmctbGVmdDogJGZvcm0tc2VsZWN0LXBhZGRpbmcteC1sZztcbiAgQGluY2x1ZGUgZm9udC1zaXplKCRmb3JtLXNlbGVjdC1mb250LXNpemUtbGcpO1xuICBAaW5jbHVkZSBib3JkZXItcmFkaXVzKCRmb3JtLXNlbGVjdC1ib3JkZXItcmFkaXVzLWxnKTtcbn1cblxuQGlmICRlbmFibGUtZGFyay1tb2RlIHtcbiAgQGluY2x1ZGUgY29sb3ItbW9kZShkYXJrKSB7XG4gICAgLmZvcm0tc2VsZWN0IHtcbiAgICAgIC0tI3skcHJlZml4fWZvcm0tc2VsZWN0LWJnLWltZzogI3tlc2NhcGUtc3ZnKCRmb3JtLXNlbGVjdC1pbmRpY2F0b3ItZGFyayl9O1xuICAgIH1cbiAgfVxufVxuIiwiLy9cbi8vIENoZWNrL3JhZGlvXG4vL1xuXG4uZm9ybS1jaGVjayB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtaW4taGVpZ2h0OiAkZm9ybS1jaGVjay1taW4taGVpZ2h0O1xuICBwYWRkaW5nLWxlZnQ6ICRmb3JtLWNoZWNrLXBhZGRpbmctc3RhcnQ7XG4gIG1hcmdpbi1ib3R0b206ICRmb3JtLWNoZWNrLW1hcmdpbi1ib3R0b207XG5cbiAgLmZvcm0tY2hlY2staW5wdXQge1xuICAgIGZsb2F0OiBsZWZ0O1xuICAgIG1hcmdpbi1sZWZ0OiAkZm9ybS1jaGVjay1wYWRkaW5nLXN0YXJ0ICogLTE7XG4gIH1cbn1cblxuLmZvcm0tY2hlY2stcmV2ZXJzZSB7XG4gIHBhZGRpbmctcmlnaHQ6ICRmb3JtLWNoZWNrLXBhZGRpbmctc3RhcnQ7XG4gIHBhZGRpbmctbGVmdDogMDtcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XG5cbiAgLmZvcm0tY2hlY2staW5wdXQge1xuICAgIGZsb2F0OiByaWdodDtcbiAgICBtYXJnaW4tcmlnaHQ6ICRmb3JtLWNoZWNrLXBhZGRpbmctc3RhcnQgKiAtMTtcbiAgICBtYXJnaW4tbGVmdDogMDtcbiAgfVxufVxuXG4uZm9ybS1jaGVjay1pbnB1dCB7XG4gIC0tI3skcHJlZml4fWZvcm0tY2hlY2stYmc6ICN7JGZvcm0tY2hlY2staW5wdXQtYmd9O1xuXG4gIGZsZXgtc2hyaW5rOiAwO1xuICB3aWR0aDogJGZvcm0tY2hlY2staW5wdXQtd2lkdGg7XG4gIGhlaWdodDogJGZvcm0tY2hlY2staW5wdXQtd2lkdGg7XG4gIG1hcmdpbi10b3A6ICgkbGluZS1oZWlnaHQtYmFzZSAtICRmb3JtLWNoZWNrLWlucHV0LXdpZHRoKSAqIC41OyAvLyBsaW5lLWhlaWdodCBtaW51cyBjaGVjayBoZWlnaHRcbiAgdmVydGljYWwtYWxpZ246IHRvcDtcbiAgYXBwZWFyYW5jZTogbm9uZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tI3skcHJlZml4fWZvcm0tY2hlY2stYmcpO1xuICBiYWNrZ3JvdW5kLWltYWdlOiB2YXIoLS0jeyRwcmVmaXh9Zm9ybS1jaGVjay1iZy1pbWFnZSk7XG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjtcbiAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xuICBib3JkZXI6ICRmb3JtLWNoZWNrLWlucHV0LWJvcmRlcjtcbiAgcHJpbnQtY29sb3ItYWRqdXN0OiBleGFjdDsgLy8gS2VlcCB0aGVtZWQgYXBwZWFyYW5jZSBmb3IgcHJpbnRcbiAgQGluY2x1ZGUgdHJhbnNpdGlvbigkZm9ybS1jaGVjay10cmFuc2l0aW9uKTtcblxuICAmW3R5cGU9XCJjaGVja2JveFwiXSB7XG4gICAgQGluY2x1ZGUgYm9yZGVyLXJhZGl1cygkZm9ybS1jaGVjay1pbnB1dC1ib3JkZXItcmFkaXVzKTtcbiAgfVxuXG4gICZbdHlwZT1cInJhZGlvXCJdIHtcbiAgICAvLyBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJvcGVydHktZGlzYWxsb3dlZC1saXN0XG4gICAgYm9yZGVyLXJhZGl1czogJGZvcm0tY2hlY2stcmFkaW8tYm9yZGVyLXJhZGl1cztcbiAgfVxuXG4gICY6YWN0aXZlIHtcbiAgICBmaWx0ZXI6ICRmb3JtLWNoZWNrLWlucHV0LWFjdGl2ZS1maWx0ZXI7XG4gIH1cblxuICAmOmZvY3VzIHtcbiAgICBib3JkZXItY29sb3I6ICRmb3JtLWNoZWNrLWlucHV0LWZvY3VzLWJvcmRlcjtcbiAgICBvdXRsaW5lOiAwO1xuICAgIGJveC1zaGFkb3c6ICRmb3JtLWNoZWNrLWlucHV0LWZvY3VzLWJveC1zaGFkb3c7XG4gIH1cblxuICAmOmNoZWNrZWQge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRmb3JtLWNoZWNrLWlucHV0LWNoZWNrZWQtYmctY29sb3I7XG4gICAgYm9yZGVyLWNvbG9yOiAkZm9ybS1jaGVjay1pbnB1dC1jaGVja2VkLWJvcmRlci1jb2xvcjtcblxuICAgICZbdHlwZT1cImNoZWNrYm94XCJdIHtcbiAgICAgIEBpZiAkZW5hYmxlLWdyYWRpZW50cyB7XG4gICAgICAgIC0tI3skcHJlZml4fWZvcm0tY2hlY2stYmctaW1hZ2U6ICN7ZXNjYXBlLXN2ZygkZm9ybS1jaGVjay1pbnB1dC1jaGVja2VkLWJnLWltYWdlKX0sIHZhcigtLSN7JHByZWZpeH1ncmFkaWVudCk7XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgLS0jeyRwcmVmaXh9Zm9ybS1jaGVjay1iZy1pbWFnZTogI3tlc2NhcGUtc3ZnKCRmb3JtLWNoZWNrLWlucHV0LWNoZWNrZWQtYmctaW1hZ2UpfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmW3R5cGU9XCJyYWRpb1wiXSB7XG4gICAgICBAaWYgJGVuYWJsZS1ncmFkaWVudHMge1xuICAgICAgICAtLSN7JHByZWZpeH1mb3JtLWNoZWNrLWJnLWltYWdlOiAje2VzY2FwZS1zdmcoJGZvcm0tY2hlY2stcmFkaW8tY2hlY2tlZC1iZy1pbWFnZSl9LCB2YXIoLS0jeyRwcmVmaXh9Z3JhZGllbnQpO1xuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIC0tI3skcHJlZml4fWZvcm0tY2hlY2stYmctaW1hZ2U6ICN7ZXNjYXBlLXN2ZygkZm9ybS1jaGVjay1yYWRpby1jaGVja2VkLWJnLWltYWdlKX07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgJlt0eXBlPVwiY2hlY2tib3hcIl06aW5kZXRlcm1pbmF0ZSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGZvcm0tY2hlY2staW5wdXQtaW5kZXRlcm1pbmF0ZS1iZy1jb2xvcjtcbiAgICBib3JkZXItY29sb3I6ICRmb3JtLWNoZWNrLWlucHV0LWluZGV0ZXJtaW5hdGUtYm9yZGVyLWNvbG9yO1xuXG4gICAgQGlmICRlbmFibGUtZ3JhZGllbnRzIHtcbiAgICAgIC0tI3skcHJlZml4fWZvcm0tY2hlY2stYmctaW1hZ2U6ICN7ZXNjYXBlLXN2ZygkZm9ybS1jaGVjay1pbnB1dC1pbmRldGVybWluYXRlLWJnLWltYWdlKX0sIHZhcigtLSN7JHByZWZpeH1ncmFkaWVudCk7XG4gICAgfSBAZWxzZSB7XG4gICAgICAtLSN7JHByZWZpeH1mb3JtLWNoZWNrLWJnLWltYWdlOiAje2VzY2FwZS1zdmcoJGZvcm0tY2hlY2staW5wdXQtaW5kZXRlcm1pbmF0ZS1iZy1pbWFnZSl9O1xuICAgIH1cbiAgfVxuXG4gICY6ZGlzYWJsZWQge1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgIGZpbHRlcjogbm9uZTtcbiAgICBvcGFjaXR5OiAkZm9ybS1jaGVjay1pbnB1dC1kaXNhYmxlZC1vcGFjaXR5O1xuICB9XG5cbiAgLy8gVXNlIGRpc2FibGVkIGF0dHJpYnV0ZSBpbiBhZGRpdGlvbiBvZiA6ZGlzYWJsZWQgcHNldWRvLWNsYXNzXG4gIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2lzc3Vlcy8yODI0N1xuICAmW2Rpc2FibGVkXSxcbiAgJjpkaXNhYmxlZCB7XG4gICAgfiAuZm9ybS1jaGVjay1sYWJlbCB7XG4gICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgICBvcGFjaXR5OiAkZm9ybS1jaGVjay1sYWJlbC1kaXNhYmxlZC1vcGFjaXR5O1xuICAgIH1cbiAgfVxufVxuXG4uZm9ybS1jaGVjay1sYWJlbCB7XG4gIGNvbG9yOiAkZm9ybS1jaGVjay1sYWJlbC1jb2xvcjtcbiAgY3Vyc29yOiAkZm9ybS1jaGVjay1sYWJlbC1jdXJzb3I7XG59XG5cbi8vXG4vLyBTd2l0Y2hcbi8vXG5cbi5mb3JtLXN3aXRjaCB7XG4gIHBhZGRpbmctbGVmdDogJGZvcm0tc3dpdGNoLXBhZGRpbmctc3RhcnQ7XG5cbiAgLmZvcm0tY2hlY2staW5wdXQge1xuICAgIC0tI3skcHJlZml4fWZvcm0tc3dpdGNoLWJnOiAje2VzY2FwZS1zdmcoJGZvcm0tc3dpdGNoLWJnLWltYWdlKX07XG5cbiAgICB3aWR0aDogJGZvcm0tc3dpdGNoLXdpZHRoO1xuICAgIG1hcmdpbi1sZWZ0OiAkZm9ybS1zd2l0Y2gtcGFkZGluZy1zdGFydCAqIC0xO1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHZhcigtLSN7JHByZWZpeH1mb3JtLXN3aXRjaC1iZyk7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogbGVmdCBjZW50ZXI7XG4gICAgQGluY2x1ZGUgYm9yZGVyLXJhZGl1cygkZm9ybS1zd2l0Y2gtYm9yZGVyLXJhZGl1cywgMCk7XG4gICAgQGluY2x1ZGUgdHJhbnNpdGlvbigkZm9ybS1zd2l0Y2gtdHJhbnNpdGlvbik7XG5cbiAgICAmOmZvY3VzIHtcbiAgICAgIC0tI3skcHJlZml4fWZvcm0tc3dpdGNoLWJnOiAje2VzY2FwZS1zdmcoJGZvcm0tc3dpdGNoLWZvY3VzLWJnLWltYWdlKX07XG4gICAgfVxuXG4gICAgJjpjaGVja2VkIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246ICRmb3JtLXN3aXRjaC1jaGVja2VkLWJnLXBvc2l0aW9uO1xuXG4gICAgICBAaWYgJGVuYWJsZS1ncmFkaWVudHMge1xuICAgICAgICAtLSN7JHByZWZpeH1mb3JtLXN3aXRjaC1iZzogI3tlc2NhcGUtc3ZnKCRmb3JtLXN3aXRjaC1jaGVja2VkLWJnLWltYWdlKX0sIHZhcigtLSN7JHByZWZpeH1ncmFkaWVudCk7XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgLS0jeyRwcmVmaXh9Zm9ybS1zd2l0Y2gtYmc6ICN7ZXNjYXBlLXN2ZygkZm9ybS1zd2l0Y2gtY2hlY2tlZC1iZy1pbWFnZSl9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICYuZm9ybS1jaGVjay1yZXZlcnNlIHtcbiAgICBwYWRkaW5nLXJpZ2h0OiAkZm9ybS1zd2l0Y2gtcGFkZGluZy1zdGFydDtcbiAgICBwYWRkaW5nLWxlZnQ6IDA7XG5cbiAgICAuZm9ybS1jaGVjay1pbnB1dCB7XG4gICAgICBtYXJnaW4tcmlnaHQ6ICRmb3JtLXN3aXRjaC1wYWRkaW5nLXN0YXJ0ICogLTE7XG4gICAgICBtYXJnaW4tbGVmdDogMDtcbiAgICB9XG4gIH1cbn1cblxuLmZvcm0tY2hlY2staW5saW5lIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtYXJnaW4tcmlnaHQ6ICRmb3JtLWNoZWNrLWlubGluZS1tYXJnaW4tZW5kO1xufVxuXG4uYnRuLWNoZWNrIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBjbGlwOiByZWN0KDAsIDAsIDAsIDApO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcblxuICAmW2Rpc2FibGVkXSxcbiAgJjpkaXNhYmxlZCB7XG4gICAgKyAuYnRuIHtcbiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgZmlsdGVyOiBub25lO1xuICAgICAgb3BhY2l0eTogJGZvcm0tY2hlY2stYnRuLWNoZWNrLWRpc2FibGVkLW9wYWNpdHk7XG4gICAgfVxuICB9XG59XG5cbkBpZiAkZW5hYmxlLWRhcmstbW9kZSB7XG4gIEBpbmNsdWRlIGNvbG9yLW1vZGUoZGFyaykge1xuICAgIC5mb3JtLXN3aXRjaCAuZm9ybS1jaGVjay1pbnB1dDpub3QoOmNoZWNrZWQpOm5vdCg6Zm9jdXMpIHtcbiAgICAgIC0tI3skcHJlZml4fWZvcm0tc3dpdGNoLWJnOiAje2VzY2FwZS1zdmcoJGZvcm0tc3dpdGNoLWJnLWltYWdlLWRhcmspfTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIFJhbmdlXG4vL1xuLy8gU3R5bGUgcmFuZ2UgaW5wdXRzIHRoZSBzYW1lIGFjcm9zcyBicm93c2Vycy4gVmVuZG9yLXNwZWNpZmljIHJ1bGVzIGZvciBwc2V1ZG9cbi8vIGVsZW1lbnRzIGNhbm5vdCBiZSBtaXhlZC4gQXMgc3VjaCwgdGhlcmUgYXJlIG5vIHNoYXJlZCBzdHlsZXMgZm9yIGZvY3VzIG9yXG4vLyBhY3RpdmUgc3RhdGVzIG9uIHByZWZpeGVkIHNlbGVjdG9ycy5cblxuLmZvcm0tcmFuZ2Uge1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiBhZGQoJGZvcm0tcmFuZ2UtdGh1bWItaGVpZ2h0LCAkZm9ybS1yYW5nZS10aHVtYi1mb2N1cy1ib3gtc2hhZG93LXdpZHRoICogMik7XG4gIHBhZGRpbmc6IDA7IC8vIE5lZWQgdG8gcmVzZXQgcGFkZGluZ1xuICBhcHBlYXJhbmNlOiBub25lO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcblxuICAmOmZvY3VzIHtcbiAgICBvdXRsaW5lOiAwO1xuXG4gICAgLy8gUHNldWRvLWVsZW1lbnRzIG11c3QgYmUgc3BsaXQgYWNyb3NzIG11bHRpcGxlIHJ1bGVzZXRzIHRvIGhhdmUgYW4gZWZmZWN0LlxuICAgIC8vIE5vIGJveC1zaGFkb3coKSBtaXhpbiBmb3IgZm9jdXMgYWNjZXNzaWJpbGl0eS5cbiAgICAmOjotd2Via2l0LXNsaWRlci10aHVtYiB7IGJveC1zaGFkb3c6ICRmb3JtLXJhbmdlLXRodW1iLWZvY3VzLWJveC1zaGFkb3c7IH1cbiAgICAmOjotbW96LXJhbmdlLXRodW1iICAgICB7IGJveC1zaGFkb3c6ICRmb3JtLXJhbmdlLXRodW1iLWZvY3VzLWJveC1zaGFkb3c7IH1cbiAgfVxuXG4gICY6Oi1tb3otZm9jdXMtb3V0ZXIge1xuICAgIGJvcmRlcjogMDtcbiAgfVxuXG4gICY6Oi13ZWJraXQtc2xpZGVyLXRodW1iIHtcbiAgICB3aWR0aDogJGZvcm0tcmFuZ2UtdGh1bWItd2lkdGg7XG4gICAgaGVpZ2h0OiAkZm9ybS1yYW5nZS10aHVtYi1oZWlnaHQ7XG4gICAgbWFyZ2luLXRvcDogKCRmb3JtLXJhbmdlLXRyYWNrLWhlaWdodCAtICRmb3JtLXJhbmdlLXRodW1iLWhlaWdodCkgKiAuNTsgLy8gV2Via2l0IHNwZWNpZmljXG4gICAgYXBwZWFyYW5jZTogbm9uZTtcbiAgICBAaW5jbHVkZSBncmFkaWVudC1iZygkZm9ybS1yYW5nZS10aHVtYi1iZyk7XG4gICAgYm9yZGVyOiAkZm9ybS1yYW5nZS10aHVtYi1ib3JkZXI7XG4gICAgQGluY2x1ZGUgYm9yZGVyLXJhZGl1cygkZm9ybS1yYW5nZS10aHVtYi1ib3JkZXItcmFkaXVzKTtcbiAgICBAaW5jbHVkZSBib3gtc2hhZG93KCRmb3JtLXJhbmdlLXRodW1iLWJveC1zaGFkb3cpO1xuICAgIEBpbmNsdWRlIHRyYW5zaXRpb24oJGZvcm0tcmFuZ2UtdGh1bWItdHJhbnNpdGlvbik7XG5cbiAgICAmOmFjdGl2ZSB7XG4gICAgICBAaW5jbHVkZSBncmFkaWVudC1iZygkZm9ybS1yYW5nZS10aHVtYi1hY3RpdmUtYmcpO1xuICAgIH1cbiAgfVxuXG4gICY6Oi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNrIHtcbiAgICB3aWR0aDogJGZvcm0tcmFuZ2UtdHJhY2std2lkdGg7XG4gICAgaGVpZ2h0OiAkZm9ybS1yYW5nZS10cmFjay1oZWlnaHQ7XG4gICAgY29sb3I6IHRyYW5zcGFyZW50OyAvLyBXaHk/XG4gICAgY3Vyc29yOiAkZm9ybS1yYW5nZS10cmFjay1jdXJzb3I7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGZvcm0tcmFuZ2UtdHJhY2stYmc7XG4gICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICBAaW5jbHVkZSBib3JkZXItcmFkaXVzKCRmb3JtLXJhbmdlLXRyYWNrLWJvcmRlci1yYWRpdXMpO1xuICAgIEBpbmNsdWRlIGJveC1zaGFkb3coJGZvcm0tcmFuZ2UtdHJhY2stYm94LXNoYWRvdyk7XG4gIH1cblxuICAmOjotbW96LXJhbmdlLXRodW1iIHtcbiAgICB3aWR0aDogJGZvcm0tcmFuZ2UtdGh1bWItd2lkdGg7XG4gICAgaGVpZ2h0OiAkZm9ybS1yYW5nZS10aHVtYi1oZWlnaHQ7XG4gICAgYXBwZWFyYW5jZTogbm9uZTtcbiAgICBAaW5jbHVkZSBncmFkaWVudC1iZygkZm9ybS1yYW5nZS10aHVtYi1iZyk7XG4gICAgYm9yZGVyOiAkZm9ybS1yYW5nZS10aHVtYi1ib3JkZXI7XG4gICAgQGluY2x1ZGUgYm9yZGVyLXJhZGl1cygkZm9ybS1yYW5nZS10aHVtYi1ib3JkZXItcmFkaXVzKTtcbiAgICBAaW5jbHVkZSBib3gtc2hhZG93KCRmb3JtLXJhbmdlLXRodW1iLWJveC1zaGFkb3cpO1xuICAgIEBpbmNsdWRlIHRyYW5zaXRpb24oJGZvcm0tcmFuZ2UtdGh1bWItdHJhbnNpdGlvbik7XG5cbiAgICAmOmFjdGl2ZSB7XG4gICAgICBAaW5jbHVkZSBncmFkaWVudC1iZygkZm9ybS1yYW5nZS10aHVtYi1hY3RpdmUtYmcpO1xuICAgIH1cbiAgfVxuXG4gICY6Oi1tb3otcmFuZ2UtdHJhY2sge1xuICAgIHdpZHRoOiAkZm9ybS1yYW5nZS10cmFjay13aWR0aDtcbiAgICBoZWlnaHQ6ICRmb3JtLXJhbmdlLXRyYWNrLWhlaWdodDtcbiAgICBjb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgY3Vyc29yOiAkZm9ybS1yYW5nZS10cmFjay1jdXJzb3I7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGZvcm0tcmFuZ2UtdHJhY2stYmc7XG4gICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDsgLy8gRmlyZWZveCBzcGVjaWZpYz9cbiAgICBAaW5jbHVkZSBib3JkZXItcmFkaXVzKCRmb3JtLXJhbmdlLXRyYWNrLWJvcmRlci1yYWRpdXMpO1xuICAgIEBpbmNsdWRlIGJveC1zaGFkb3coJGZvcm0tcmFuZ2UtdHJhY2stYm94LXNoYWRvdyk7XG4gIH1cblxuICAmOmRpc2FibGVkIHtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcblxuICAgICY6Oi13ZWJraXQtc2xpZGVyLXRodW1iIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRmb3JtLXJhbmdlLXRodW1iLWRpc2FibGVkLWJnO1xuICAgIH1cblxuICAgICY6Oi1tb3otcmFuZ2UtdGh1bWIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGZvcm0tcmFuZ2UtdGh1bWItZGlzYWJsZWQtYmc7XG4gICAgfVxuICB9XG59XG4iLCIuZm9ybS1mbG9hdGluZyB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICA+IC5mb3JtLWNvbnRyb2wsXG4gID4gLmZvcm0tY29udHJvbC1wbGFpbnRleHQsXG4gID4gLmZvcm0tc2VsZWN0IHtcbiAgICBoZWlnaHQ6ICRmb3JtLWZsb2F0aW5nLWhlaWdodDtcbiAgICBtaW4taGVpZ2h0OiAkZm9ybS1mbG9hdGluZy1oZWlnaHQ7XG4gICAgbGluZS1oZWlnaHQ6ICRmb3JtLWZsb2F0aW5nLWxpbmUtaGVpZ2h0O1xuICB9XG5cbiAgPiBsYWJlbCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAwO1xuICAgIHotaW5kZXg6IDI7XG4gICAgaGVpZ2h0OiAxMDAlOyAvLyBhbGxvdyB0ZXh0YXJlYXNcbiAgICBwYWRkaW5nOiAkZm9ybS1mbG9hdGluZy1wYWRkaW5nLXkgJGZvcm0tZmxvYXRpbmctcGFkZGluZy14O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1hbGlnbjogc3RhcnQ7XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICBib3JkZXI6ICRpbnB1dC1ib3JkZXItd2lkdGggc29saWQgdHJhbnNwYXJlbnQ7IC8vIFJlcXVpcmVkIGZvciBhbGlnbmluZyBsYWJlbCdzIHRleHQgd2l0aCB0aGUgaW5wdXQgYXMgaXQgYWZmZWN0cyBpbm5lciBib3ggbW9kZWxcbiAgICB0cmFuc2Zvcm0tb3JpZ2luOiAwIDA7XG4gICAgQGluY2x1ZGUgdHJhbnNpdGlvbigkZm9ybS1mbG9hdGluZy10cmFuc2l0aW9uKTtcbiAgfVxuXG4gID4gLmZvcm0tY29udHJvbCxcbiAgPiAuZm9ybS1jb250cm9sLXBsYWludGV4dCB7XG4gICAgcGFkZGluZzogJGZvcm0tZmxvYXRpbmctcGFkZGluZy15ICRmb3JtLWZsb2F0aW5nLXBhZGRpbmcteDtcblxuICAgICY6OnBsYWNlaG9sZGVyIHtcbiAgICAgIGNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICB9XG5cbiAgICAmOmZvY3VzLFxuICAgICY6bm90KDpwbGFjZWhvbGRlci1zaG93bikge1xuICAgICAgcGFkZGluZy10b3A6ICRmb3JtLWZsb2F0aW5nLWlucHV0LXBhZGRpbmctdDtcbiAgICAgIHBhZGRpbmctYm90dG9tOiAkZm9ybS1mbG9hdGluZy1pbnB1dC1wYWRkaW5nLWI7XG4gICAgfVxuICAgIC8vIER1cGxpY2F0ZWQgYmVjYXVzZSBgOi13ZWJraXQtYXV0b2ZpbGxgIGludmFsaWRhdGVzIG90aGVyIHNlbGVjdG9ycyB3aGVuIGdyb3VwZWRcbiAgICAmOi13ZWJraXQtYXV0b2ZpbGwge1xuICAgICAgcGFkZGluZy10b3A6ICRmb3JtLWZsb2F0aW5nLWlucHV0LXBhZGRpbmctdDtcbiAgICAgIHBhZGRpbmctYm90dG9tOiAkZm9ybS1mbG9hdGluZy1pbnB1dC1wYWRkaW5nLWI7XG4gICAgfVxuICB9XG5cbiAgPiAuZm9ybS1zZWxlY3Qge1xuICAgIHBhZGRpbmctdG9wOiAkZm9ybS1mbG9hdGluZy1pbnB1dC1wYWRkaW5nLXQ7XG4gICAgcGFkZGluZy1ib3R0b206ICRmb3JtLWZsb2F0aW5nLWlucHV0LXBhZGRpbmctYjtcbiAgfVxuXG4gID4gLmZvcm0tY29udHJvbDpmb2N1cyxcbiAgPiAuZm9ybS1jb250cm9sOm5vdCg6cGxhY2Vob2xkZXItc2hvd24pLFxuICA+IC5mb3JtLWNvbnRyb2wtcGxhaW50ZXh0LFxuICA+IC5mb3JtLXNlbGVjdCB7XG4gICAgfiBsYWJlbCB7XG4gICAgICBjb2xvcjogcmdiYSh2YXIoLS0jeyRwcmVmaXh9Ym9keS1jb2xvci1yZ2IpLCAjeyRmb3JtLWZsb2F0aW5nLWxhYmVsLW9wYWNpdHl9KTtcbiAgICAgIHRyYW5zZm9ybTogJGZvcm0tZmxvYXRpbmctbGFiZWwtdHJhbnNmb3JtO1xuXG4gICAgICAmOjphZnRlciB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgaW5zZXQ6ICRmb3JtLWZsb2F0aW5nLXBhZGRpbmcteSAoJGZvcm0tZmxvYXRpbmctcGFkZGluZy14ICogLjUpO1xuICAgICAgICB6LWluZGV4OiAtMTtcbiAgICAgICAgaGVpZ2h0OiAkZm9ybS1mbG9hdGluZy1sYWJlbC1oZWlnaHQ7XG4gICAgICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRpbnB1dC1iZztcbiAgICAgICAgQGluY2x1ZGUgYm9yZGVyLXJhZGl1cygkaW5wdXQtYm9yZGVyLXJhZGl1cyk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8vIER1cGxpY2F0ZWQgYmVjYXVzZSBgOi13ZWJraXQtYXV0b2ZpbGxgIGludmFsaWRhdGVzIG90aGVyIHNlbGVjdG9ycyB3aGVuIGdyb3VwZWRcbiAgPiAuZm9ybS1jb250cm9sOi13ZWJraXQtYXV0b2ZpbGwge1xuICAgIH4gbGFiZWwge1xuICAgICAgY29sb3I6IHJnYmEodmFyKC0tI3skcHJlZml4fWJvZHktY29sb3ItcmdiKSwgI3skZm9ybS1mbG9hdGluZy1sYWJlbC1vcGFjaXR5fSk7XG4gICAgICB0cmFuc2Zvcm06ICRmb3JtLWZsb2F0aW5nLWxhYmVsLXRyYW5zZm9ybTtcbiAgICB9XG4gIH1cblxuICA+IC5mb3JtLWNvbnRyb2wtcGxhaW50ZXh0IHtcbiAgICB+IGxhYmVsIHtcbiAgICAgIGJvcmRlci13aWR0aDogJGlucHV0LWJvcmRlci13aWR0aCAwOyAvLyBSZXF1aXJlZCB0byBwcm9wZXJseSBwb3NpdGlvbiBsYWJlbCB0ZXh0IC0gYXMgZXhwbGFpbmVkIGFib3ZlXG4gICAgfVxuICB9XG5cbiAgPiA6ZGlzYWJsZWQgfiBsYWJlbCxcbiAgPiAuZm9ybS1jb250cm9sOmRpc2FibGVkIH4gbGFiZWwgeyAvLyBSZXF1aXJlZCBmb3IgYC5mb3JtLWNvbnRyb2xgcyBiZWNhdXNlIG9mIHNwZWNpZmljaXR5XG4gICAgY29sb3I6ICRmb3JtLWZsb2F0aW5nLWxhYmVsLWRpc2FibGVkLWNvbG9yO1xuXG4gICAgJjo6YWZ0ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGlucHV0LWRpc2FibGVkLWJnO1xuICAgIH1cbiAgfVxufVxuIiwiLy9cbi8vIEJhc2Ugc3R5bGVzXG4vL1xuXG4uaW5wdXQtZ3JvdXAge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtd3JhcDogd3JhcDsgLy8gRm9yIGZvcm0gdmFsaWRhdGlvbiBmZWVkYmFja1xuICBhbGlnbi1pdGVtczogc3RyZXRjaDtcbiAgd2lkdGg6IDEwMCU7XG5cbiAgPiAuZm9ybS1jb250cm9sLFxuICA+IC5mb3JtLXNlbGVjdCxcbiAgPiAuZm9ybS1mbG9hdGluZyB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlOyAvLyBGb3IgZm9jdXMgc3RhdGUncyB6LWluZGV4XG4gICAgZmxleDogMSAxIGF1dG87XG4gICAgd2lkdGg6IDElO1xuICAgIG1pbi13aWR0aDogMDsgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzYyNDcxNDAvd2h5LWRvbnQtZmxleC1pdGVtcy1zaHJpbmstcGFzdC1jb250ZW50LXNpemVcbiAgfVxuXG4gIC8vIEJyaW5nIHRoZSBcImFjdGl2ZVwiIGZvcm0gY29udHJvbCB0byB0aGUgdG9wIG9mIHN1cnJvdW5kaW5nIGVsZW1lbnRzXG4gID4gLmZvcm0tY29udHJvbDpmb2N1cyxcbiAgPiAuZm9ybS1zZWxlY3Q6Zm9jdXMsXG4gID4gLmZvcm0tZmxvYXRpbmc6Zm9jdXMtd2l0aGluIHtcbiAgICB6LWluZGV4OiA1O1xuICB9XG5cbiAgLy8gRW5zdXJlIGJ1dHRvbnMgYXJlIGFsd2F5cyBhYm92ZSBpbnB1dHMgZm9yIG1vcmUgdmlzdWFsbHkgcGxlYXNpbmcgYm9yZGVycy5cbiAgLy8gVGhpcyBpc24ndCBuZWVkZWQgZm9yIGAuaW5wdXQtZ3JvdXAtdGV4dGAgc2luY2UgaXQgc2hhcmVzIHRoZSBzYW1lIGJvcmRlci1jb2xvclxuICAvLyBhcyBvdXIgaW5wdXRzLlxuICAuYnRuIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgei1pbmRleDogMjtcblxuICAgICY6Zm9jdXMge1xuICAgICAgei1pbmRleDogNTtcbiAgICB9XG4gIH1cbn1cblxuXG4vLyBUZXh0dWFsIGFkZG9uc1xuLy9cbi8vIFNlcnZlcyBhcyBhIGNhdGNoLWFsbCBlbGVtZW50IGZvciBhbnkgdGV4dCBvciByYWRpby9jaGVja2JveCBpbnB1dCB5b3Ugd2lzaFxuLy8gdG8gcHJlcGVuZCBvciBhcHBlbmQgdG8gYW4gaW5wdXQuXG5cbi5pbnB1dC1ncm91cC10ZXh0IHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgcGFkZGluZzogJGlucHV0LWdyb3VwLWFkZG9uLXBhZGRpbmcteSAkaW5wdXQtZ3JvdXAtYWRkb24tcGFkZGluZy14O1xuICBAaW5jbHVkZSBmb250LXNpemUoJGlucHV0LWZvbnQtc2l6ZSk7IC8vIE1hdGNoIGlucHV0c1xuICBmb250LXdlaWdodDogJGlucHV0LWdyb3VwLWFkZG9uLWZvbnQtd2VpZ2h0O1xuICBsaW5lLWhlaWdodDogJGlucHV0LWxpbmUtaGVpZ2h0O1xuICBjb2xvcjogJGlucHV0LWdyb3VwLWFkZG9uLWNvbG9yO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIGJhY2tncm91bmQtY29sb3I6ICRpbnB1dC1ncm91cC1hZGRvbi1iZztcbiAgYm9yZGVyOiAkaW5wdXQtYm9yZGVyLXdpZHRoIHNvbGlkICRpbnB1dC1ncm91cC1hZGRvbi1ib3JkZXItY29sb3I7XG4gIEBpbmNsdWRlIGJvcmRlci1yYWRpdXMoJGlucHV0LWJvcmRlci1yYWRpdXMpO1xufVxuXG5cbi8vIFNpemluZ1xuLy9cbi8vIFJlbWl4IHRoZSBkZWZhdWx0IGZvcm0gY29udHJvbCBzaXppbmcgY2xhc3NlcyBpbnRvIG5ldyBvbmVzIGZvciBlYXNpZXJcbi8vIG1hbmlwdWxhdGlvbi5cblxuLmlucHV0LWdyb3VwLWxnID4gLmZvcm0tY29udHJvbCxcbi5pbnB1dC1ncm91cC1sZyA+IC5mb3JtLXNlbGVjdCxcbi5pbnB1dC1ncm91cC1sZyA+IC5pbnB1dC1ncm91cC10ZXh0LFxuLmlucHV0LWdyb3VwLWxnID4gLmJ0biB7XG4gIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nLXktbGcgJGlucHV0LXBhZGRpbmcteC1sZztcbiAgQGluY2x1ZGUgZm9udC1zaXplKCRpbnB1dC1mb250LXNpemUtbGcpO1xuICBAaW5jbHVkZSBib3JkZXItcmFkaXVzKCRpbnB1dC1ib3JkZXItcmFkaXVzLWxnKTtcbn1cblxuLmlucHV0LWdyb3VwLXNtID4gLmZvcm0tY29udHJvbCxcbi5pbnB1dC1ncm91cC1zbSA+IC5mb3JtLXNlbGVjdCxcbi5pbnB1dC1ncm91cC1zbSA+IC5pbnB1dC1ncm91cC10ZXh0LFxuLmlucHV0LWdyb3VwLXNtID4gLmJ0biB7XG4gIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nLXktc20gJGlucHV0LXBhZGRpbmcteC1zbTtcbiAgQGluY2x1ZGUgZm9udC1zaXplKCRpbnB1dC1mb250LXNpemUtc20pO1xuICBAaW5jbHVkZSBib3JkZXItcmFkaXVzKCRpbnB1dC1ib3JkZXItcmFkaXVzLXNtKTtcbn1cblxuLmlucHV0LWdyb3VwLWxnID4gLmZvcm0tc2VsZWN0LFxuLmlucHV0LWdyb3VwLXNtID4gLmZvcm0tc2VsZWN0IHtcbiAgcGFkZGluZy1yaWdodDogJGZvcm0tc2VsZWN0LXBhZGRpbmcteCArICRmb3JtLXNlbGVjdC1pbmRpY2F0b3ItcGFkZGluZztcbn1cblxuXG4vLyBSb3VuZGVkIGNvcm5lcnNcbi8vXG4vLyBUaGVzZSBydWxlc2V0cyBtdXN0IGNvbWUgYWZ0ZXIgdGhlIHNpemluZyBvbmVzIHRvIHByb3Blcmx5IG92ZXJyaWRlIHNtIGFuZCBsZ1xuLy8gYm9yZGVyLXJhZGl1cyB2YWx1ZXMgd2hlbiBleHRlbmRpbmcuIFRoZXkncmUgbW9yZSBzcGVjaWZpYyB0aGFuIHdlJ2QgbGlrZVxuLy8gd2l0aCB0aGUgYC5pbnB1dC1ncm91cCA+YCBwYXJ0LCBidXQgd2l0aG91dCBpdCwgd2UgY2Fubm90IG92ZXJyaWRlIHRoZSBzaXppbmcuXG5cbi8vIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1kdXBsaWNhdGUtc2VsZWN0b3JzXG4uaW5wdXQtZ3JvdXAge1xuICAmOm5vdCguaGFzLXZhbGlkYXRpb24pIHtcbiAgICA+IDpub3QoOmxhc3QtY2hpbGQpOm5vdCguZHJvcGRvd24tdG9nZ2xlKTpub3QoLmRyb3Bkb3duLW1lbnUpOm5vdCguZm9ybS1mbG9hdGluZyksXG4gICAgPiAuZHJvcGRvd24tdG9nZ2xlOm50aC1sYXN0LWNoaWxkKG4gKyAzKSxcbiAgICA+IC5mb3JtLWZsb2F0aW5nOm5vdCg6bGFzdC1jaGlsZCkgPiAuZm9ybS1jb250cm9sLFxuICAgID4gLmZvcm0tZmxvYXRpbmc6bm90KDpsYXN0LWNoaWxkKSA+IC5mb3JtLXNlbGVjdCB7XG4gICAgICBAaW5jbHVkZSBib3JkZXItZW5kLXJhZGl1cygwKTtcbiAgICB9XG4gIH1cblxuICAmLmhhcy12YWxpZGF0aW9uIHtcbiAgICA+IDpudGgtbGFzdC1jaGlsZChuICsgMyk6bm90KC5kcm9wZG93bi10b2dnbGUpOm5vdCguZHJvcGRvd24tbWVudSk6bm90KC5mb3JtLWZsb2F0aW5nKSxcbiAgICA+IC5kcm9wZG93bi10b2dnbGU6bnRoLWxhc3QtY2hpbGQobiArIDQpLFxuICAgID4gLmZvcm0tZmxvYXRpbmc6bnRoLWxhc3QtY2hpbGQobiArIDMpID4gLmZvcm0tY29udHJvbCxcbiAgICA+IC5mb3JtLWZsb2F0aW5nOm50aC1sYXN0LWNoaWxkKG4gKyAzKSA+IC5mb3JtLXNlbGVjdCB7XG4gICAgICBAaW5jbHVkZSBib3JkZXItZW5kLXJhZGl1cygwKTtcbiAgICB9XG4gIH1cblxuICAkdmFsaWRhdGlvbi1tZXNzYWdlczogXCJcIjtcbiAgQGVhY2ggJHN0YXRlIGluIG1hcC1rZXlzKCRmb3JtLXZhbGlkYXRpb24tc3RhdGVzKSB7XG4gICAgJHZhbGlkYXRpb24tbWVzc2FnZXM6ICR2YWxpZGF0aW9uLW1lc3NhZ2VzICsgXCI6bm90KC5cIiArIHVucXVvdGUoJHN0YXRlKSArIFwiLXRvb2x0aXApXCIgKyBcIjpub3QoLlwiICsgdW5xdW90ZSgkc3RhdGUpICsgXCItZmVlZGJhY2spXCI7XG4gIH1cblxuICA+IDpub3QoOmZpcnN0LWNoaWxkKTpub3QoLmRyb3Bkb3duLW1lbnUpI3skdmFsaWRhdGlvbi1tZXNzYWdlc30ge1xuICAgIG1hcmdpbi1sZWZ0OiBjYWxjKCN7JGlucHV0LWJvcmRlci13aWR0aH0gKiAtMSk7IC8vIHN0eWxlbGludC1kaXNhYmxlLWxpbmUgZnVuY3Rpb24tZGlzYWxsb3dlZC1saXN0XG4gICAgQGluY2x1ZGUgYm9yZGVyLXN0YXJ0LXJhZGl1cygwKTtcbiAgfVxuXG4gID4gLmZvcm0tZmxvYXRpbmc6bm90KDpmaXJzdC1jaGlsZCkgPiAuZm9ybS1jb250cm9sLFxuICA+IC5mb3JtLWZsb2F0aW5nOm5vdCg6Zmlyc3QtY2hpbGQpID4gLmZvcm0tc2VsZWN0IHtcbiAgICBAaW5jbHVkZSBib3JkZXItc3RhcnQtcmFkaXVzKDApO1xuICB9XG59XG4iLCIvLyBUaGlzIG1peGluIHVzZXMgYW4gYGlmKClgIHRlY2huaXF1ZSB0byBiZSBjb21wYXRpYmxlIHdpdGggRGFydCBTYXNzXG4vLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3Nhc3Mvc2Fzcy9pc3N1ZXMvMTg3MyNpc3N1ZWNvbW1lbnQtMTUyMjkzNzI1IGZvciBtb3JlIGRldGFpbHNcblxuLy8gc2Nzcy1kb2NzLXN0YXJ0IGZvcm0tdmFsaWRhdGlvbi1taXhpbnNcbkBtaXhpbiBmb3JtLXZhbGlkYXRpb24tc3RhdGUtc2VsZWN0b3IoJHN0YXRlKSB7XG4gIEBpZiAoJHN0YXRlID09IFwidmFsaWRcIiBvciAkc3RhdGUgPT0gXCJpbnZhbGlkXCIpIHtcbiAgICAud2FzLXZhbGlkYXRlZCAje2lmKCYsIFwiJlwiLCBcIlwiKX06I3skc3RhdGV9LFxuICAgICN7aWYoJiwgXCImXCIsIFwiXCIpfS5pcy0jeyRzdGF0ZX0ge1xuICAgICAgQGNvbnRlbnQ7XG4gICAgfVxuICB9IEBlbHNlIHtcbiAgICAje2lmKCYsIFwiJlwiLCBcIlwiKX0uaXMtI3skc3RhdGV9IHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gZm9ybS12YWxpZGF0aW9uLXN0YXRlKFxuICAkc3RhdGUsXG4gICRjb2xvcixcbiAgJGljb24sXG4gICR0b29sdGlwLWNvbG9yOiBjb2xvci1jb250cmFzdCgkY29sb3IpLFxuICAkdG9vbHRpcC1iZy1jb2xvcjogcmdiYSgkY29sb3IsICRmb3JtLWZlZWRiYWNrLXRvb2x0aXAtb3BhY2l0eSksXG4gICRmb2N1cy1ib3gtc2hhZG93OiAwIDAgJGlucHV0LWJ0bi1mb2N1cy1ibHVyICRpbnB1dC1mb2N1cy13aWR0aCByZ2JhKCRjb2xvciwgJGlucHV0LWJ0bi1mb2N1cy1jb2xvci1vcGFjaXR5KSxcbiAgJGJvcmRlci1jb2xvcjogJGNvbG9yXG4pIHtcbiAgLiN7JHN0YXRlfS1mZWVkYmFjayB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtYXJnaW4tdG9wOiAkZm9ybS1mZWVkYmFjay1tYXJnaW4tdG9wO1xuICAgIEBpbmNsdWRlIGZvbnQtc2l6ZSgkZm9ybS1mZWVkYmFjay1mb250LXNpemUpO1xuICAgIGZvbnQtc3R5bGU6ICRmb3JtLWZlZWRiYWNrLWZvbnQtc3R5bGU7XG4gICAgY29sb3I6ICRjb2xvcjtcbiAgfVxuXG4gIC4jeyRzdGF0ZX0tdG9vbHRpcCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMTAwJTtcbiAgICB6LWluZGV4OiA1O1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgbWF4LXdpZHRoOiAxMDAlOyAvLyBDb250YWluIHRvIHBhcmVudCB3aGVuIHBvc3NpYmxlXG4gICAgcGFkZGluZzogJGZvcm0tZmVlZGJhY2stdG9vbHRpcC1wYWRkaW5nLXkgJGZvcm0tZmVlZGJhY2stdG9vbHRpcC1wYWRkaW5nLXg7XG4gICAgbWFyZ2luLXRvcDogLjFyZW07XG4gICAgQGluY2x1ZGUgZm9udC1zaXplKCRmb3JtLWZlZWRiYWNrLXRvb2x0aXAtZm9udC1zaXplKTtcbiAgICBsaW5lLWhlaWdodDogJGZvcm0tZmVlZGJhY2stdG9vbHRpcC1saW5lLWhlaWdodDtcbiAgICBjb2xvcjogJHRvb2x0aXAtY29sb3I7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHRvb2x0aXAtYmctY29sb3I7XG4gICAgQGluY2x1ZGUgYm9yZGVyLXJhZGl1cygkZm9ybS1mZWVkYmFjay10b29sdGlwLWJvcmRlci1yYWRpdXMpO1xuICB9XG5cbiAgQGluY2x1ZGUgZm9ybS12YWxpZGF0aW9uLXN0YXRlLXNlbGVjdG9yKCRzdGF0ZSkge1xuICAgIH4gLiN7JHN0YXRlfS1mZWVkYmFjayxcbiAgICB+IC4jeyRzdGF0ZX0tdG9vbHRpcCB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG4gIH1cblxuICAuZm9ybS1jb250cm9sIHtcbiAgICBAaW5jbHVkZSBmb3JtLXZhbGlkYXRpb24tc3RhdGUtc2VsZWN0b3IoJHN0YXRlKSB7XG4gICAgICBib3JkZXItY29sb3I6ICRib3JkZXItY29sb3I7XG5cbiAgICAgIEBpZiAkZW5hYmxlLXZhbGlkYXRpb24taWNvbnMge1xuICAgICAgICBwYWRkaW5nLXJpZ2h0OiAkaW5wdXQtaGVpZ2h0LWlubmVyO1xuICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiBlc2NhcGUtc3ZnKCRpY29uKTtcbiAgICAgICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogcmlnaHQgJGlucHV0LWhlaWdodC1pbm5lci1xdWFydGVyIGNlbnRlcjtcbiAgICAgICAgYmFja2dyb3VuZC1zaXplOiAkaW5wdXQtaGVpZ2h0LWlubmVyLWhhbGYgJGlucHV0LWhlaWdodC1pbm5lci1oYWxmO1xuICAgICAgfVxuXG4gICAgICAmOmZvY3VzIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAkYm9yZGVyLWNvbG9yO1xuICAgICAgICBAaWYgJGVuYWJsZS1zaGFkb3dzIHtcbiAgICAgICAgICBAaW5jbHVkZSBib3gtc2hhZG93KCRpbnB1dC1ib3gtc2hhZG93LCAkZm9jdXMtYm94LXNoYWRvdyk7XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIC8vIEF2b2lkIHVzaW5nIG1peGluIHNvIHdlIGNhbiBwYXNzIGN1c3RvbSBmb2N1cyBzaGFkb3cgcHJvcGVybHlcbiAgICAgICAgICBib3gtc2hhZG93OiAkZm9jdXMtYm94LXNoYWRvdztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBzZWxlY3Rvci1uby1xdWFsaWZ5aW5nLXR5cGVcbiAgdGV4dGFyZWEuZm9ybS1jb250cm9sIHtcbiAgICBAaW5jbHVkZSBmb3JtLXZhbGlkYXRpb24tc3RhdGUtc2VsZWN0b3IoJHN0YXRlKSB7XG4gICAgICBAaWYgJGVuYWJsZS12YWxpZGF0aW9uLWljb25zIHtcbiAgICAgICAgcGFkZGluZy1yaWdodDogJGlucHV0LWhlaWdodC1pbm5lcjtcbiAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogdG9wICRpbnB1dC1oZWlnaHQtaW5uZXItcXVhcnRlciByaWdodCAkaW5wdXQtaGVpZ2h0LWlubmVyLXF1YXJ0ZXI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLmZvcm0tc2VsZWN0IHtcbiAgICBAaW5jbHVkZSBmb3JtLXZhbGlkYXRpb24tc3RhdGUtc2VsZWN0b3IoJHN0YXRlKSB7XG4gICAgICBib3JkZXItY29sb3I6ICRib3JkZXItY29sb3I7XG5cbiAgICAgIEBpZiAkZW5hYmxlLXZhbGlkYXRpb24taWNvbnMge1xuICAgICAgICAmOm5vdChbbXVsdGlwbGVdKTpub3QoW3NpemVdKSxcbiAgICAgICAgJjpub3QoW211bHRpcGxlXSlbc2l6ZT1cIjFcIl0ge1xuICAgICAgICAgIC0tI3skcHJlZml4fWZvcm0tc2VsZWN0LWJnLWljb246ICN7ZXNjYXBlLXN2ZygkaWNvbil9O1xuICAgICAgICAgIHBhZGRpbmctcmlnaHQ6ICRmb3JtLXNlbGVjdC1mZWVkYmFjay1pY29uLXBhZGRpbmctZW5kO1xuICAgICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246ICRmb3JtLXNlbGVjdC1iZy1wb3NpdGlvbiwgJGZvcm0tc2VsZWN0LWZlZWRiYWNrLWljb24tcG9zaXRpb247XG4gICAgICAgICAgYmFja2dyb3VuZC1zaXplOiAkZm9ybS1zZWxlY3QtYmctc2l6ZSwgJGZvcm0tc2VsZWN0LWZlZWRiYWNrLWljb24tc2l6ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAmOmZvY3VzIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAkYm9yZGVyLWNvbG9yO1xuICAgICAgICBAaWYgJGVuYWJsZS1zaGFkb3dzIHtcbiAgICAgICAgICBAaW5jbHVkZSBib3gtc2hhZG93KCRmb3JtLXNlbGVjdC1ib3gtc2hhZG93LCAkZm9jdXMtYm94LXNoYWRvdyk7XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIC8vIEF2b2lkIHVzaW5nIG1peGluIHNvIHdlIGNhbiBwYXNzIGN1c3RvbSBmb2N1cyBzaGFkb3cgcHJvcGVybHlcbiAgICAgICAgICBib3gtc2hhZG93OiAkZm9jdXMtYm94LXNoYWRvdztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5mb3JtLWNvbnRyb2wtY29sb3Ige1xuICAgIEBpbmNsdWRlIGZvcm0tdmFsaWRhdGlvbi1zdGF0ZS1zZWxlY3Rvcigkc3RhdGUpIHtcbiAgICAgIEBpZiAkZW5hYmxlLXZhbGlkYXRpb24taWNvbnMge1xuICAgICAgICB3aWR0aDogYWRkKCRmb3JtLWNvbG9yLXdpZHRoLCAkaW5wdXQtaGVpZ2h0LWlubmVyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAuZm9ybS1jaGVjay1pbnB1dCB7XG4gICAgQGluY2x1ZGUgZm9ybS12YWxpZGF0aW9uLXN0YXRlLXNlbGVjdG9yKCRzdGF0ZSkge1xuICAgICAgYm9yZGVyLWNvbG9yOiAkYm9yZGVyLWNvbG9yO1xuXG4gICAgICAmOmNoZWNrZWQge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29sb3I7XG4gICAgICB9XG5cbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBib3gtc2hhZG93OiAkZm9jdXMtYm94LXNoYWRvdztcbiAgICAgIH1cblxuICAgICAgfiAuZm9ybS1jaGVjay1sYWJlbCB7XG4gICAgICAgIGNvbG9yOiAkY29sb3I7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC5mb3JtLWNoZWNrLWlubGluZSAuZm9ybS1jaGVjay1pbnB1dCB7XG4gICAgfiAuI3skc3RhdGV9LWZlZWRiYWNrIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAuNWVtO1xuICAgIH1cbiAgfVxuXG4gIC5pbnB1dC1ncm91cCB7XG4gICAgPiAuZm9ybS1jb250cm9sOm5vdCg6Zm9jdXMpLFxuICAgID4gLmZvcm0tc2VsZWN0Om5vdCg6Zm9jdXMpLFxuICAgID4gLmZvcm0tZmxvYXRpbmc6bm90KDpmb2N1cy13aXRoaW4pIHtcbiAgICAgIEBpbmNsdWRlIGZvcm0tdmFsaWRhdGlvbi1zdGF0ZS1zZWxlY3Rvcigkc3RhdGUpIHtcbiAgICAgICAgQGlmICRzdGF0ZSA9PSBcInZhbGlkXCIge1xuICAgICAgICAgIHotaW5kZXg6IDM7XG4gICAgICAgIH0gQGVsc2UgaWYgJHN0YXRlID09IFwiaW52YWxpZFwiIHtcbiAgICAgICAgICB6LWluZGV4OiA0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4vLyBzY3NzLWRvY3MtZW5kIGZvcm0tdmFsaWRhdGlvbi1taXhpbnNcbiIsIi8vXG4vLyBCYXNlIHN0eWxlc1xuLy9cblxuLmJ0biB7XG4gIC8vIHNjc3MtZG9jcy1zdGFydCBidG4tY3NzLXZhcnNcbiAgLS0jeyRwcmVmaXh9YnRuLXBhZGRpbmcteDogI3skYnRuLXBhZGRpbmcteH07XG4gIC0tI3skcHJlZml4fWJ0bi1wYWRkaW5nLXk6ICN7JGJ0bi1wYWRkaW5nLXl9O1xuICAtLSN7JHByZWZpeH1idG4tZm9udC1mYW1pbHk6ICN7JGJ0bi1mb250LWZhbWlseX07XG4gIEBpbmNsdWRlIHJmcygkYnRuLWZvbnQtc2l6ZSwgLS0jeyRwcmVmaXh9YnRuLWZvbnQtc2l6ZSk7XG4gIC0tI3skcHJlZml4fWJ0bi1mb250LXdlaWdodDogI3skYnRuLWZvbnQtd2VpZ2h0fTtcbiAgLS0jeyRwcmVmaXh9YnRuLWxpbmUtaGVpZ2h0OiAjeyRidG4tbGluZS1oZWlnaHR9O1xuICAtLSN7JHByZWZpeH1idG4tY29sb3I6ICN7JGJ0bi1jb2xvcn07XG4gIC0tI3skcHJlZml4fWJ0bi1iZzogdHJhbnNwYXJlbnQ7XG4gIC0tI3skcHJlZml4fWJ0bi1ib3JkZXItd2lkdGg6ICN7JGJ0bi1ib3JkZXItd2lkdGh9O1xuICAtLSN7JHByZWZpeH1idG4tYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgLS0jeyRwcmVmaXh9YnRuLWJvcmRlci1yYWRpdXM6ICN7JGJ0bi1ib3JkZXItcmFkaXVzfTtcbiAgLS0jeyRwcmVmaXh9YnRuLWhvdmVyLWJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIC0tI3skcHJlZml4fWJ0bi1ib3gtc2hhZG93OiAjeyRidG4tYm94LXNoYWRvd307XG4gIC0tI3skcHJlZml4fWJ0bi1kaXNhYmxlZC1vcGFjaXR5OiAjeyRidG4tZGlzYWJsZWQtb3BhY2l0eX07XG4gIC0tI3skcHJlZml4fWJ0bi1mb2N1cy1ib3gtc2hhZG93OiAwIDAgMCAjeyRidG4tZm9jdXMtd2lkdGh9IHJnYmEodmFyKC0tI3skcHJlZml4fWJ0bi1mb2N1cy1zaGFkb3ctcmdiKSwgLjUpO1xuICAvLyBzY3NzLWRvY3MtZW5kIGJ0bi1jc3MtdmFyc1xuXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcGFkZGluZzogdmFyKC0tI3skcHJlZml4fWJ0bi1wYWRkaW5nLXkpIHZhcigtLSN7JHByZWZpeH1idG4tcGFkZGluZy14KTtcbiAgZm9udC1mYW1pbHk6IHZhcigtLSN7JHByZWZpeH1idG4tZm9udC1mYW1pbHkpO1xuICBAaW5jbHVkZSBmb250LXNpemUodmFyKC0tI3skcHJlZml4fWJ0bi1mb250LXNpemUpKTtcbiAgZm9udC13ZWlnaHQ6IHZhcigtLSN7JHByZWZpeH1idG4tZm9udC13ZWlnaHQpO1xuICBsaW5lLWhlaWdodDogdmFyKC0tI3skcHJlZml4fWJ0bi1saW5lLWhlaWdodCk7XG4gIGNvbG9yOiB2YXIoLS0jeyRwcmVmaXh9YnRuLWNvbG9yKTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB0ZXh0LWRlY29yYXRpb246IGlmKCRsaW5rLWRlY29yYXRpb24gPT0gbm9uZSwgbnVsbCwgbm9uZSk7XG4gIHdoaXRlLXNwYWNlOiAkYnRuLXdoaXRlLXNwYWNlO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBjdXJzb3I6IGlmKCRlbmFibGUtYnV0dG9uLXBvaW50ZXJzLCBwb2ludGVyLCBudWxsKTtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gIGJvcmRlcjogdmFyKC0tI3skcHJlZml4fWJ0bi1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLSN7JHByZWZpeH1idG4tYm9yZGVyLWNvbG9yKTtcbiAgQGluY2x1ZGUgYm9yZGVyLXJhZGl1cyh2YXIoLS0jeyRwcmVmaXh9YnRuLWJvcmRlci1yYWRpdXMpKTtcbiAgQGluY2x1ZGUgZ3JhZGllbnQtYmcodmFyKC0tI3skcHJlZml4fWJ0bi1iZykpO1xuICBAaW5jbHVkZSBib3gtc2hhZG93KHZhcigtLSN7JHByZWZpeH1idG4tYm94LXNoYWRvdykpO1xuICBAaW5jbHVkZSB0cmFuc2l0aW9uKCRidG4tdHJhbnNpdGlvbik7XG5cbiAgJjpob3ZlciB7XG4gICAgY29sb3I6IHZhcigtLSN7JHByZWZpeH1idG4taG92ZXItY29sb3IpO1xuICAgIHRleHQtZGVjb3JhdGlvbjogaWYoJGxpbmstaG92ZXItZGVjb3JhdGlvbiA9PSB1bmRlcmxpbmUsIG5vbmUsIG51bGwpO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLSN7JHByZWZpeH1idG4taG92ZXItYmcpO1xuICAgIGJvcmRlci1jb2xvcjogdmFyKC0tI3skcHJlZml4fWJ0bi1ob3Zlci1ib3JkZXItY29sb3IpO1xuICB9XG5cbiAgLmJ0bi1jaGVjayArICY6aG92ZXIge1xuICAgIC8vIG92ZXJyaWRlIGZvciB0aGUgY2hlY2tib3gvcmFkaW8gYnV0dG9uc1xuICAgIGNvbG9yOiB2YXIoLS0jeyRwcmVmaXh9YnRuLWNvbG9yKTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS0jeyRwcmVmaXh9YnRuLWJnKTtcbiAgICBib3JkZXItY29sb3I6IHZhcigtLSN7JHByZWZpeH1idG4tYm9yZGVyLWNvbG9yKTtcbiAgfVxuXG4gICY6Zm9jdXMtdmlzaWJsZSB7XG4gICAgY29sb3I6IHZhcigtLSN7JHByZWZpeH1idG4taG92ZXItY29sb3IpO1xuICAgIEBpbmNsdWRlIGdyYWRpZW50LWJnKHZhcigtLSN7JHByZWZpeH1idG4taG92ZXItYmcpKTtcbiAgICBib3JkZXItY29sb3I6IHZhcigtLSN7JHByZWZpeH1idG4taG92ZXItYm9yZGVyLWNvbG9yKTtcbiAgICBvdXRsaW5lOiAwO1xuICAgIC8vIEF2b2lkIHVzaW5nIG1peGluIHNvIHdlIGNhbiBwYXNzIGN1c3RvbSBmb2N1cyBzaGFkb3cgcHJvcGVybHlcbiAgICBAaWYgJGVuYWJsZS1zaGFkb3dzIHtcbiAgICAgIGJveC1zaGFkb3c6IHZhcigtLSN7JHByZWZpeH1idG4tYm94LXNoYWRvdyksIHZhcigtLSN7JHByZWZpeH1idG4tZm9jdXMtYm94LXNoYWRvdyk7XG4gICAgfSBAZWxzZSB7XG4gICAgICBib3gtc2hhZG93OiB2YXIoLS0jeyRwcmVmaXh9YnRuLWZvY3VzLWJveC1zaGFkb3cpO1xuICAgIH1cbiAgfVxuXG4gIC5idG4tY2hlY2s6Zm9jdXMtdmlzaWJsZSArICYge1xuICAgIGJvcmRlci1jb2xvcjogdmFyKC0tI3skcHJlZml4fWJ0bi1ob3Zlci1ib3JkZXItY29sb3IpO1xuICAgIG91dGxpbmU6IDA7XG4gICAgLy8gQXZvaWQgdXNpbmcgbWl4aW4gc28gd2UgY2FuIHBhc3MgY3VzdG9tIGZvY3VzIHNoYWRvdyBwcm9wZXJseVxuICAgIEBpZiAkZW5hYmxlLXNoYWRvd3Mge1xuICAgICAgYm94LXNoYWRvdzogdmFyKC0tI3skcHJlZml4fWJ0bi1ib3gtc2hhZG93KSwgdmFyKC0tI3skcHJlZml4fWJ0bi1mb2N1cy1ib3gtc2hhZG93KTtcbiAgICB9IEBlbHNlIHtcbiAgICAgIGJveC1zaGFkb3c6IHZhcigtLSN7JHByZWZpeH1idG4tZm9jdXMtYm94LXNoYWRvdyk7XG4gICAgfVxuICB9XG5cbiAgLmJ0bi1jaGVjazpjaGVja2VkICsgJixcbiAgOm5vdCguYnRuLWNoZWNrKSArICY6YWN0aXZlLFxuICAmOmZpcnN0LWNoaWxkOmFjdGl2ZSxcbiAgJi5hY3RpdmUsXG4gICYuc2hvdyB7XG4gICAgY29sb3I6IHZhcigtLSN7JHByZWZpeH1idG4tYWN0aXZlLWNvbG9yKTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS0jeyRwcmVmaXh9YnRuLWFjdGl2ZS1iZyk7XG4gICAgLy8gUmVtb3ZlIENTUyBncmFkaWVudHMgaWYgdGhleSdyZSBlbmFibGVkXG4gICAgYmFja2dyb3VuZC1pbWFnZTogaWYoJGVuYWJsZS1ncmFkaWVudHMsIG5vbmUsIG51bGwpO1xuICAgIGJvcmRlci1jb2xvcjogdmFyKC0tI3skcHJlZml4fWJ0bi1hY3RpdmUtYm9yZGVyLWNvbG9yKTtcbiAgICBAaW5jbHVkZSBib3gtc2hhZG93KHZhcigtLSN7JHByZWZpeH1idG4tYWN0aXZlLXNoYWRvdykpO1xuXG4gICAgJjpmb2N1cy12aXNpYmxlIHtcbiAgICAgIC8vIEF2b2lkIHVzaW5nIG1peGluIHNvIHdlIGNhbiBwYXNzIGN1c3RvbSBmb2N1cyBzaGFkb3cgcHJvcGVybHlcbiAgICAgIEBpZiAkZW5hYmxlLXNoYWRvd3Mge1xuICAgICAgICBib3gtc2hhZG93OiB2YXIoLS0jeyRwcmVmaXh9YnRuLWFjdGl2ZS1zaGFkb3cpLCB2YXIoLS0jeyRwcmVmaXh9YnRuLWZvY3VzLWJveC1zaGFkb3cpO1xuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIGJveC1zaGFkb3c6IHZhcigtLSN7JHByZWZpeH1idG4tZm9jdXMtYm94LXNoYWRvdyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLmJ0bi1jaGVjazpjaGVja2VkOmZvY3VzLXZpc2libGUgKyAmIHtcbiAgICAvLyBBdm9pZCB1c2luZyBtaXhpbiBzbyB3ZSBjYW4gcGFzcyBjdXN0b20gZm9jdXMgc2hhZG93IHByb3Blcmx5XG4gICAgQGlmICRlbmFibGUtc2hhZG93cyB7XG4gICAgICBib3gtc2hhZG93OiB2YXIoLS0jeyRwcmVmaXh9YnRuLWFjdGl2ZS1zaGFkb3cpLCB2YXIoLS0jeyRwcmVmaXh9YnRuLWZvY3VzLWJveC1zaGFkb3cpO1xuICAgIH0gQGVsc2Uge1xuICAgICAgYm94LXNoYWRvdzogdmFyKC0tI3skcHJlZml4fWJ0bi1mb2N1cy1ib3gtc2hhZG93KTtcbiAgICB9XG4gIH1cblxuICAmOmRpc2FibGVkLFxuICAmLmRpc2FibGVkLFxuICBmaWVsZHNldDpkaXNhYmxlZCAmIHtcbiAgICBjb2xvcjogdmFyKC0tI3skcHJlZml4fWJ0bi1kaXNhYmxlZC1jb2xvcik7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tI3skcHJlZml4fWJ0bi1kaXNhYmxlZC1iZyk7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogaWYoJGVuYWJsZS1ncmFkaWVudHMsIG5vbmUsIG51bGwpO1xuICAgIGJvcmRlci1jb2xvcjogdmFyKC0tI3skcHJlZml4fWJ0bi1kaXNhYmxlZC1ib3JkZXItY29sb3IpO1xuICAgIG9wYWNpdHk6IHZhcigtLSN7JHByZWZpeH1idG4tZGlzYWJsZWQtb3BhY2l0eSk7XG4gICAgQGluY2x1ZGUgYm94LXNoYWRvdyhub25lKTtcbiAgfVxufVxuXG5cbi8vXG4vLyBBbHRlcm5hdGUgYnV0dG9uc1xuLy9cblxuLy8gc2Nzcy1kb2NzLXN0YXJ0IGJ0bi12YXJpYW50LWxvb3BzXG5AZWFjaCAkY29sb3IsICR2YWx1ZSBpbiAkdGhlbWUtY29sb3JzIHtcbiAgLmJ0bi0jeyRjb2xvcn0ge1xuICAgIEBpZiAkY29sb3IgPT0gXCJsaWdodFwiIHtcbiAgICAgIEBpbmNsdWRlIGJ1dHRvbi12YXJpYW50KFxuICAgICAgICAkdmFsdWUsXG4gICAgICAgICR2YWx1ZSxcbiAgICAgICAgJGhvdmVyLWJhY2tncm91bmQ6IHNoYWRlLWNvbG9yKCR2YWx1ZSwgJGJ0bi1ob3Zlci1iZy1zaGFkZS1hbW91bnQpLFxuICAgICAgICAkaG92ZXItYm9yZGVyOiBzaGFkZS1jb2xvcigkdmFsdWUsICRidG4taG92ZXItYm9yZGVyLXNoYWRlLWFtb3VudCksXG4gICAgICAgICRhY3RpdmUtYmFja2dyb3VuZDogc2hhZGUtY29sb3IoJHZhbHVlLCAkYnRuLWFjdGl2ZS1iZy1zaGFkZS1hbW91bnQpLFxuICAgICAgICAkYWN0aXZlLWJvcmRlcjogc2hhZGUtY29sb3IoJHZhbHVlLCAkYnRuLWFjdGl2ZS1ib3JkZXItc2hhZGUtYW1vdW50KVxuICAgICAgKTtcbiAgICB9IEBlbHNlIGlmICRjb2xvciA9PSBcImRhcmtcIiB7XG4gICAgICBAaW5jbHVkZSBidXR0b24tdmFyaWFudChcbiAgICAgICAgJHZhbHVlLFxuICAgICAgICAkdmFsdWUsXG4gICAgICAgICRob3Zlci1iYWNrZ3JvdW5kOiB0aW50LWNvbG9yKCR2YWx1ZSwgJGJ0bi1ob3Zlci1iZy10aW50LWFtb3VudCksXG4gICAgICAgICRob3Zlci1ib3JkZXI6IHRpbnQtY29sb3IoJHZhbHVlLCAkYnRuLWhvdmVyLWJvcmRlci10aW50LWFtb3VudCksXG4gICAgICAgICRhY3RpdmUtYmFja2dyb3VuZDogdGludC1jb2xvcigkdmFsdWUsICRidG4tYWN0aXZlLWJnLXRpbnQtYW1vdW50KSxcbiAgICAgICAgJGFjdGl2ZS1ib3JkZXI6IHRpbnQtY29sb3IoJHZhbHVlLCAkYnRuLWFjdGl2ZS1ib3JkZXItdGludC1hbW91bnQpXG4gICAgICApO1xuICAgIH0gQGVsc2Uge1xuICAgICAgQGluY2x1ZGUgYnV0dG9uLXZhcmlhbnQoJHZhbHVlLCAkdmFsdWUpO1xuICAgIH1cbiAgfVxufVxuXG5AZWFjaCAkY29sb3IsICR2YWx1ZSBpbiAkdGhlbWUtY29sb3JzIHtcbiAgLmJ0bi1vdXRsaW5lLSN7JGNvbG9yfSB7XG4gICAgQGluY2x1ZGUgYnV0dG9uLW91dGxpbmUtdmFyaWFudCgkdmFsdWUpO1xuICB9XG59XG4vLyBzY3NzLWRvY3MtZW5kIGJ0bi12YXJpYW50LWxvb3BzXG5cblxuLy9cbi8vIExpbmsgYnV0dG9uc1xuLy9cblxuLy8gTWFrZSBhIGJ1dHRvbiBsb29rIGFuZCBiZWhhdmUgbGlrZSBhIGxpbmtcbi5idG4tbGluayB7XG4gIC0tI3skcHJlZml4fWJ0bi1mb250LXdlaWdodDogI3skZm9udC13ZWlnaHQtbm9ybWFsfTtcbiAgLS0jeyRwcmVmaXh9YnRuLWNvbG9yOiAjeyRidG4tbGluay1jb2xvcn07XG4gIC0tI3skcHJlZml4fWJ0bi1iZzogdHJhbnNwYXJlbnQ7XG4gIC0tI3skcHJlZml4fWJ0bi1ib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xuICAtLSN7JHByZWZpeH1idG4taG92ZXItY29sb3I6ICN7JGJ0bi1saW5rLWhvdmVyLWNvbG9yfTtcbiAgLS0jeyRwcmVmaXh9YnRuLWhvdmVyLWJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIC0tI3skcHJlZml4fWJ0bi1hY3RpdmUtY29sb3I6ICN7JGJ0bi1saW5rLWhvdmVyLWNvbG9yfTtcbiAgLS0jeyRwcmVmaXh9YnRuLWFjdGl2ZS1ib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xuICAtLSN7JHByZWZpeH1idG4tZGlzYWJsZWQtY29sb3I6ICN7JGJ0bi1saW5rLWRpc2FibGVkLWNvbG9yfTtcbiAgLS0jeyRwcmVmaXh9YnRuLWRpc2FibGVkLWJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIC0tI3skcHJlZml4fWJ0bi1ib3gtc2hhZG93OiAwIDAgMCAjMDAwOyAvLyBDYW4ndCB1c2UgYG5vbmVgIGFzIGtleXdvcmQgbmVnYXRlcyBhbGwgdmFsdWVzIHdoZW4gdXNlZCB3aXRoIG11bHRpcGxlIHNoYWRvd3NcbiAgLS0jeyRwcmVmaXh9YnRuLWZvY3VzLXNoYWRvdy1yZ2I6ICN7JGJ0bi1saW5rLWZvY3VzLXNoYWRvdy1yZ2J9O1xuXG4gIHRleHQtZGVjb3JhdGlvbjogJGxpbmstZGVjb3JhdGlvbjtcbiAgQGlmICRlbmFibGUtZ3JhZGllbnRzIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xuICB9XG5cbiAgJjpob3ZlcixcbiAgJjpmb2N1cy12aXNpYmxlIHtcbiAgICB0ZXh0LWRlY29yYXRpb246ICRsaW5rLWhvdmVyLWRlY29yYXRpb247XG4gIH1cblxuICAmOmZvY3VzLXZpc2libGUge1xuICAgIGNvbG9yOiB2YXIoLS0jeyRwcmVmaXh9YnRuLWNvbG9yKTtcbiAgfVxuXG4gICY6aG92ZXIge1xuICAgIGNvbG9yOiB2YXIoLS0jeyRwcmVmaXh9YnRuLWhvdmVyLWNvbG9yKTtcbiAgfVxuXG4gIC8vIE5vIG5lZWQgZm9yIGFuIGFjdGl2ZSBzdGF0ZSBoZXJlXG59XG5cblxuLy9cbi8vIEJ1dHRvbiBTaXplc1xuLy9cblxuLmJ0bi1sZyB7XG4gIEBpbmNsdWRlIGJ1dHRvbi1zaXplKCRidG4tcGFkZGluZy15LWxnLCAkYnRuLXBhZGRpbmcteC1sZywgJGJ0bi1mb250LXNpemUtbGcsICRidG4tYm9yZGVyLXJhZGl1cy1sZyk7XG59XG5cbi5idG4tc20ge1xuICBAaW5jbHVkZSBidXR0b24tc2l6ZSgkYnRuLXBhZGRpbmcteS1zbSwgJGJ0bi1wYWRkaW5nLXgtc20sICRidG4tZm9udC1zaXplLXNtLCAkYnRuLWJvcmRlci1yYWRpdXMtc20pO1xufVxuIiwiLy8gQnV0dG9uIHZhcmlhbnRzXG4vL1xuLy8gRWFzaWx5IHB1bXAgb3V0IGRlZmF1bHQgc3R5bGVzLCBhcyB3ZWxsIGFzIDpob3ZlciwgOmZvY3VzLCA6YWN0aXZlLFxuLy8gYW5kIGRpc2FibGVkIG9wdGlvbnMgZm9yIGFsbCBidXR0b25zXG5cbi8vIHNjc3MtZG9jcy1zdGFydCBidG4tdmFyaWFudC1taXhpblxuQG1peGluIGJ1dHRvbi12YXJpYW50KFxuICAkYmFja2dyb3VuZCxcbiAgJGJvcmRlcixcbiAgJGNvbG9yOiBjb2xvci1jb250cmFzdCgkYmFja2dyb3VuZCksXG4gICRob3Zlci1iYWNrZ3JvdW5kOiBpZigkY29sb3IgPT0gJGNvbG9yLWNvbnRyYXN0LWxpZ2h0LCBzaGFkZS1jb2xvcigkYmFja2dyb3VuZCwgJGJ0bi1ob3Zlci1iZy1zaGFkZS1hbW91bnQpLCB0aW50LWNvbG9yKCRiYWNrZ3JvdW5kLCAkYnRuLWhvdmVyLWJnLXRpbnQtYW1vdW50KSksXG4gICRob3Zlci1ib3JkZXI6IGlmKCRjb2xvciA9PSAkY29sb3ItY29udHJhc3QtbGlnaHQsIHNoYWRlLWNvbG9yKCRib3JkZXIsICRidG4taG92ZXItYm9yZGVyLXNoYWRlLWFtb3VudCksIHRpbnQtY29sb3IoJGJvcmRlciwgJGJ0bi1ob3Zlci1ib3JkZXItdGludC1hbW91bnQpKSxcbiAgJGhvdmVyLWNvbG9yOiBjb2xvci1jb250cmFzdCgkaG92ZXItYmFja2dyb3VuZCksXG4gICRhY3RpdmUtYmFja2dyb3VuZDogaWYoJGNvbG9yID09ICRjb2xvci1jb250cmFzdC1saWdodCwgc2hhZGUtY29sb3IoJGJhY2tncm91bmQsICRidG4tYWN0aXZlLWJnLXNoYWRlLWFtb3VudCksIHRpbnQtY29sb3IoJGJhY2tncm91bmQsICRidG4tYWN0aXZlLWJnLXRpbnQtYW1vdW50KSksXG4gICRhY3RpdmUtYm9yZGVyOiBpZigkY29sb3IgPT0gJGNvbG9yLWNvbnRyYXN0LWxpZ2h0LCBzaGFkZS1jb2xvcigkYm9yZGVyLCAkYnRuLWFjdGl2ZS1ib3JkZXItc2hhZGUtYW1vdW50KSwgdGludC1jb2xvcigkYm9yZGVyLCAkYnRuLWFjdGl2ZS1ib3JkZXItdGludC1hbW91bnQpKSxcbiAgJGFjdGl2ZS1jb2xvcjogY29sb3ItY29udHJhc3QoJGFjdGl2ZS1iYWNrZ3JvdW5kKSxcbiAgJGRpc2FibGVkLWJhY2tncm91bmQ6ICRiYWNrZ3JvdW5kLFxuICAkZGlzYWJsZWQtYm9yZGVyOiAkYm9yZGVyLFxuICAkZGlzYWJsZWQtY29sb3I6IGNvbG9yLWNvbnRyYXN0KCRkaXNhYmxlZC1iYWNrZ3JvdW5kKVxuKSB7XG4gIC0tI3skcHJlZml4fWJ0bi1jb2xvcjogI3skY29sb3J9O1xuICAtLSN7JHByZWZpeH1idG4tYmc6ICN7JGJhY2tncm91bmR9O1xuICAtLSN7JHByZWZpeH1idG4tYm9yZGVyLWNvbG9yOiAjeyRib3JkZXJ9O1xuICAtLSN7JHByZWZpeH1idG4taG92ZXItY29sb3I6ICN7JGhvdmVyLWNvbG9yfTtcbiAgLS0jeyRwcmVmaXh9YnRuLWhvdmVyLWJnOiAjeyRob3Zlci1iYWNrZ3JvdW5kfTtcbiAgLS0jeyRwcmVmaXh9YnRuLWhvdmVyLWJvcmRlci1jb2xvcjogI3skaG92ZXItYm9yZGVyfTtcbiAgLS0jeyRwcmVmaXh9YnRuLWZvY3VzLXNoYWRvdy1yZ2I6ICN7dG8tcmdiKG1peCgkY29sb3IsICRib3JkZXIsIDE1JSkpfTtcbiAgLS0jeyRwcmVmaXh9YnRuLWFjdGl2ZS1jb2xvcjogI3skYWN0aXZlLWNvbG9yfTtcbiAgLS0jeyRwcmVmaXh9YnRuLWFjdGl2ZS1iZzogI3skYWN0aXZlLWJhY2tncm91bmR9O1xuICAtLSN7JHByZWZpeH1idG4tYWN0aXZlLWJvcmRlci1jb2xvcjogI3skYWN0aXZlLWJvcmRlcn07XG4gIC0tI3skcHJlZml4fWJ0bi1hY3RpdmUtc2hhZG93OiAjeyRidG4tYWN0aXZlLWJveC1zaGFkb3d9O1xuICAtLSN7JHByZWZpeH1idG4tZGlzYWJsZWQtY29sb3I6ICN7JGRpc2FibGVkLWNvbG9yfTtcbiAgLS0jeyRwcmVmaXh9YnRuLWRpc2FibGVkLWJnOiAjeyRkaXNhYmxlZC1iYWNrZ3JvdW5kfTtcbiAgLS0jeyRwcmVmaXh9YnRuLWRpc2FibGVkLWJvcmRlci1jb2xvcjogI3skZGlzYWJsZWQtYm9yZGVyfTtcbn1cbi8vIHNjc3MtZG9jcy1lbmQgYnRuLXZhcmlhbnQtbWl4aW5cblxuLy8gc2Nzcy1kb2NzLXN0YXJ0IGJ0bi1vdXRsaW5lLXZhcmlhbnQtbWl4aW5cbkBtaXhpbiBidXR0b24tb3V0bGluZS12YXJpYW50KFxuICAkY29sb3IsXG4gICRjb2xvci1ob3ZlcjogY29sb3ItY29udHJhc3QoJGNvbG9yKSxcbiAgJGFjdGl2ZS1iYWNrZ3JvdW5kOiAkY29sb3IsXG4gICRhY3RpdmUtYm9yZGVyOiAkY29sb3IsXG4gICRhY3RpdmUtY29sb3I6IGNvbG9yLWNvbnRyYXN0KCRhY3RpdmUtYmFja2dyb3VuZClcbikge1xuICAtLSN7JHByZWZpeH1idG4tY29sb3I6ICN7JGNvbG9yfTtcbiAgLS0jeyRwcmVmaXh9YnRuLWJvcmRlci1jb2xvcjogI3skY29sb3J9O1xuICAtLSN7JHByZWZpeH1idG4taG92ZXItY29sb3I6ICN7JGNvbG9yLWhvdmVyfTtcbiAgLS0jeyRwcmVmaXh9YnRuLWhvdmVyLWJnOiAjeyRhY3RpdmUtYmFja2dyb3VuZH07XG4gIC0tI3skcHJlZml4fWJ0bi1ob3Zlci1ib3JkZXItY29sb3I6ICN7JGFjdGl2ZS1ib3JkZXJ9O1xuICAtLSN7JHByZWZpeH1idG4tZm9jdXMtc2hhZG93LXJnYjogI3t0by1yZ2IoJGNvbG9yKX07XG4gIC0tI3skcHJlZml4fWJ0bi1hY3RpdmUtY29sb3I6ICN7JGFjdGl2ZS1jb2xvcn07XG4gIC0tI3skcHJlZml4fWJ0bi1hY3RpdmUtYmc6ICN7JGFjdGl2ZS1iYWNrZ3JvdW5kfTtcbiAgLS0jeyRwcmVmaXh9YnRuLWFjdGl2ZS1ib3JkZXItY29sb3I6ICN7JGFjdGl2ZS1ib3JkZXJ9O1xuICAtLSN7JHByZWZpeH1idG4tYWN0aXZlLXNoYWRvdzogI3skYnRuLWFjdGl2ZS1ib3gtc2hhZG93fTtcbiAgLS0jeyRwcmVmaXh9YnRuLWRpc2FibGVkLWNvbG9yOiAjeyRjb2xvcn07XG4gIC0tI3skcHJlZml4fWJ0bi1kaXNhYmxlZC1iZzogdHJhbnNwYXJlbnQ7XG4gIC0tI3skcHJlZml4fWJ0bi1kaXNhYmxlZC1ib3JkZXItY29sb3I6ICN7JGNvbG9yfTtcbiAgLS0jeyRwcmVmaXh9Z3JhZGllbnQ6IG5vbmU7XG59XG4vLyBzY3NzLWRvY3MtZW5kIGJ0bi1vdXRsaW5lLXZhcmlhbnQtbWl4aW5cblxuLy8gc2Nzcy1kb2NzLXN0YXJ0IGJ0bi1zaXplLW1peGluXG5AbWl4aW4gYnV0dG9uLXNpemUoJHBhZGRpbmcteSwgJHBhZGRpbmcteCwgJGZvbnQtc2l6ZSwgJGJvcmRlci1yYWRpdXMpIHtcbiAgLS0jeyRwcmVmaXh9YnRuLXBhZGRpbmcteTogI3skcGFkZGluZy15fTtcbiAgLS0jeyRwcmVmaXh9YnRuLXBhZGRpbmcteDogI3skcGFkZGluZy14fTtcbiAgQGluY2x1ZGUgcmZzKCRmb250LXNpemUsIC0tI3skcHJlZml4fWJ0bi1mb250LXNpemUpO1xuICAtLSN7JHByZWZpeH1idG4tYm9yZGVyLXJhZGl1czogI3skYm9yZGVyLXJhZGl1c307XG59XG4vLyBzY3NzLWRvY3MtZW5kIGJ0bi1zaXplLW1peGluXG4iLCIuZmFkZSB7XG4gIEBpbmNsdWRlIHRyYW5zaXRpb24oJHRyYW5zaXRpb24tZmFkZSk7XG5cbiAgJjpub3QoLnNob3cpIHtcbiAgICBvcGFjaXR5OiAwO1xuICB9XG59XG5cbi8vIHNjc3MtZG9jcy1zdGFydCBjb2xsYXBzZS1jbGFzc2VzXG4uY29sbGFwc2Uge1xuICAmOm5vdCguc2hvdykge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cblxuLmNvbGxhcHNpbmcge1xuICBoZWlnaHQ6IDA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIEBpbmNsdWRlIHRyYW5zaXRpb24oJHRyYW5zaXRpb24tY29sbGFwc2UpO1xuXG4gICYuY29sbGFwc2UtaG9yaXpvbnRhbCB7XG4gICAgd2lkdGg6IDA7XG4gICAgaGVpZ2h0OiBhdXRvO1xuICAgIEBpbmNsdWRlIHRyYW5zaXRpb24oJHRyYW5zaXRpb24tY29sbGFwc2Utd2lkdGgpO1xuICB9XG59XG4vLyBzY3NzLWRvY3MtZW5kIGNvbGxhcHNlLWNsYXNzZXNcbiIsIi8vIFRoZSBkcm9wZG93biB3cmFwcGVyIChgPGRpdj5gKVxuLmRyb3B1cCxcbi5kcm9wZW5kLFxuLmRyb3Bkb3duLFxuLmRyb3BzdGFydCxcbi5kcm9wdXAtY2VudGVyLFxuLmRyb3Bkb3duLWNlbnRlciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLmRyb3Bkb3duLXRvZ2dsZSB7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG5cbiAgLy8gR2VuZXJhdGUgdGhlIGNhcmV0IGF1dG9tYXRpY2FsbHlcbiAgQGluY2x1ZGUgY2FyZXQoKTtcbn1cblxuLy8gVGhlIGRyb3Bkb3duIG1lbnVcbi5kcm9wZG93bi1tZW51IHtcbiAgLy8gc2Nzcy1kb2NzLXN0YXJ0IGRyb3Bkb3duLWNzcy12YXJzXG4gIC0tI3skcHJlZml4fWRyb3Bkb3duLXppbmRleDogI3skemluZGV4LWRyb3Bkb3dufTtcbiAgLS0jeyRwcmVmaXh9ZHJvcGRvd24tbWluLXdpZHRoOiAjeyRkcm9wZG93bi1taW4td2lkdGh9O1xuICAtLSN7JHByZWZpeH1kcm9wZG93bi1wYWRkaW5nLXg6ICN7JGRyb3Bkb3duLXBhZGRpbmcteH07XG4gIC0tI3skcHJlZml4fWRyb3Bkb3duLXBhZGRpbmcteTogI3skZHJvcGRvd24tcGFkZGluZy15fTtcbiAgLS0jeyRwcmVmaXh9ZHJvcGRvd24tc3BhY2VyOiAjeyRkcm9wZG93bi1zcGFjZXJ9O1xuICBAaW5jbHVkZSByZnMoJGRyb3Bkb3duLWZvbnQtc2l6ZSwgLS0jeyRwcmVmaXh9ZHJvcGRvd24tZm9udC1zaXplKTtcbiAgLS0jeyRwcmVmaXh9ZHJvcGRvd24tY29sb3I6ICN7JGRyb3Bkb3duLWNvbG9yfTtcbiAgLS0jeyRwcmVmaXh9ZHJvcGRvd24tYmc6ICN7JGRyb3Bkb3duLWJnfTtcbiAgLS0jeyRwcmVmaXh9ZHJvcGRvd24tYm9yZGVyLWNvbG9yOiAjeyRkcm9wZG93bi1ib3JkZXItY29sb3J9O1xuICAtLSN7JHByZWZpeH1kcm9wZG93bi1ib3JkZXItcmFkaXVzOiAjeyRkcm9wZG93bi1ib3JkZXItcmFkaXVzfTtcbiAgLS0jeyRwcmVmaXh9ZHJvcGRvd24tYm9yZGVyLXdpZHRoOiAjeyRkcm9wZG93bi1ib3JkZXItd2lkdGh9O1xuICAtLSN7JHByZWZpeH1kcm9wZG93bi1pbm5lci1ib3JkZXItcmFkaXVzOiAjeyRkcm9wZG93bi1pbm5lci1ib3JkZXItcmFkaXVzfTtcbiAgLS0jeyRwcmVmaXh9ZHJvcGRvd24tZGl2aWRlci1iZzogI3skZHJvcGRvd24tZGl2aWRlci1iZ307XG4gIC0tI3skcHJlZml4fWRyb3Bkb3duLWRpdmlkZXItbWFyZ2luLXk6ICN7JGRyb3Bkb3duLWRpdmlkZXItbWFyZ2luLXl9O1xuICAtLSN7JHByZWZpeH1kcm9wZG93bi1ib3gtc2hhZG93OiAjeyRkcm9wZG93bi1ib3gtc2hhZG93fTtcbiAgLS0jeyRwcmVmaXh9ZHJvcGRvd24tbGluay1jb2xvcjogI3skZHJvcGRvd24tbGluay1jb2xvcn07XG4gIC0tI3skcHJlZml4fWRyb3Bkb3duLWxpbmstaG92ZXItY29sb3I6ICN7JGRyb3Bkb3duLWxpbmstaG92ZXItY29sb3J9O1xuICAtLSN7JHByZWZpeH1kcm9wZG93bi1saW5rLWhvdmVyLWJnOiAjeyRkcm9wZG93bi1saW5rLWhvdmVyLWJnfTtcbiAgLS0jeyRwcmVmaXh9ZHJvcGRvd24tbGluay1hY3RpdmUtY29sb3I6ICN7JGRyb3Bkb3duLWxpbmstYWN0aXZlLWNvbG9yfTtcbiAgLS0jeyRwcmVmaXh9ZHJvcGRvd24tbGluay1hY3RpdmUtYmc6ICN7JGRyb3Bkb3duLWxpbmstYWN0aXZlLWJnfTtcbiAgLS0jeyRwcmVmaXh9ZHJvcGRvd24tbGluay1kaXNhYmxlZC1jb2xvcjogI3skZHJvcGRvd24tbGluay1kaXNhYmxlZC1jb2xvcn07XG4gIC0tI3skcHJlZml4fWRyb3Bkb3duLWl0ZW0tcGFkZGluZy14OiAjeyRkcm9wZG93bi1pdGVtLXBhZGRpbmcteH07XG4gIC0tI3skcHJlZml4fWRyb3Bkb3duLWl0ZW0tcGFkZGluZy15OiAjeyRkcm9wZG93bi1pdGVtLXBhZGRpbmcteX07XG4gIC0tI3skcHJlZml4fWRyb3Bkb3duLWhlYWRlci1jb2xvcjogI3skZHJvcGRvd24taGVhZGVyLWNvbG9yfTtcbiAgLS0jeyRwcmVmaXh9ZHJvcGRvd24taGVhZGVyLXBhZGRpbmcteDogI3skZHJvcGRvd24taGVhZGVyLXBhZGRpbmcteH07XG4gIC0tI3skcHJlZml4fWRyb3Bkb3duLWhlYWRlci1wYWRkaW5nLXk6ICN7JGRyb3Bkb3duLWhlYWRlci1wYWRkaW5nLXl9O1xuICAvLyBzY3NzLWRvY3MtZW5kIGRyb3Bkb3duLWNzcy12YXJzXG5cbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB6LWluZGV4OiB2YXIoLS0jeyRwcmVmaXh9ZHJvcGRvd24temluZGV4KTtcbiAgZGlzcGxheTogbm9uZTsgLy8gbm9uZSBieSBkZWZhdWx0LCBidXQgYmxvY2sgb24gXCJvcGVuXCIgb2YgdGhlIG1lbnVcbiAgbWluLXdpZHRoOiB2YXIoLS0jeyRwcmVmaXh9ZHJvcGRvd24tbWluLXdpZHRoKTtcbiAgcGFkZGluZzogdmFyKC0tI3skcHJlZml4fWRyb3Bkb3duLXBhZGRpbmcteSkgdmFyKC0tI3skcHJlZml4fWRyb3Bkb3duLXBhZGRpbmcteCk7XG4gIG1hcmdpbjogMDsgLy8gT3ZlcnJpZGUgZGVmYXVsdCBtYXJnaW4gb2YgdWxcbiAgQGluY2x1ZGUgZm9udC1zaXplKHZhcigtLSN7JHByZWZpeH1kcm9wZG93bi1mb250LXNpemUpKTtcbiAgY29sb3I6IHZhcigtLSN7JHByZWZpeH1kcm9wZG93bi1jb2xvcik7XG4gIHRleHQtYWxpZ246IGxlZnQ7IC8vIEVuc3VyZXMgcHJvcGVyIGFsaWdubWVudCBpZiBwYXJlbnQgaGFzIGl0IGNoYW5nZWQgKGUuZy4sIG1vZGFsIGZvb3RlcilcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tI3skcHJlZml4fWRyb3Bkb3duLWJnKTtcbiAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcbiAgYm9yZGVyOiB2YXIoLS0jeyRwcmVmaXh9ZHJvcGRvd24tYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS0jeyRwcmVmaXh9ZHJvcGRvd24tYm9yZGVyLWNvbG9yKTtcbiAgQGluY2x1ZGUgYm9yZGVyLXJhZGl1cyh2YXIoLS0jeyRwcmVmaXh9ZHJvcGRvd24tYm9yZGVyLXJhZGl1cykpO1xuICBAaW5jbHVkZSBib3gtc2hhZG93KHZhcigtLSN7JHByZWZpeH1kcm9wZG93bi1ib3gtc2hhZG93KSk7XG5cbiAgJltkYXRhLWJzLXBvcHBlcl0ge1xuICAgIHRvcDogMTAwJTtcbiAgICBsZWZ0OiAwO1xuICAgIG1hcmdpbi10b3A6IHZhcigtLSN7JHByZWZpeH1kcm9wZG93bi1zcGFjZXIpO1xuICB9XG5cbiAgQGlmICRkcm9wZG93bi1wYWRkaW5nLXkgPT0gMCB7XG4gICAgPiAuZHJvcGRvd24taXRlbTpmaXJzdC1jaGlsZCxcbiAgICA+IGxpOmZpcnN0LWNoaWxkIC5kcm9wZG93bi1pdGVtIHtcbiAgICAgIEBpbmNsdWRlIGJvcmRlci10b3AtcmFkaXVzKHZhcigtLSN7JHByZWZpeH1kcm9wZG93bi1pbm5lci1ib3JkZXItcmFkaXVzKSk7XG4gICAgfVxuICAgID4gLmRyb3Bkb3duLWl0ZW06bGFzdC1jaGlsZCxcbiAgICA+IGxpOmxhc3QtY2hpbGQgLmRyb3Bkb3duLWl0ZW0ge1xuICAgICAgQGluY2x1ZGUgYm9yZGVyLWJvdHRvbS1yYWRpdXModmFyKC0tI3skcHJlZml4fWRyb3Bkb3duLWlubmVyLWJvcmRlci1yYWRpdXMpKTtcbiAgICB9XG5cbiAgfVxufVxuXG4vLyBzY3NzLWRvY3Mtc3RhcnQgcmVzcG9uc2l2ZS1icmVha3BvaW50c1xuLy8gV2UgZGVsaWJlcmF0ZWx5IGhhcmRjb2RlIHRoZSBgYnMtYCBwcmVmaXggYmVjYXVzZSB3ZSBjaGVja1xuLy8gdGhpcyBjdXN0b20gcHJvcGVydHkgaW4gSlMgdG8gZGV0ZXJtaW5lIFBvcHBlcidzIHBvc2l0aW9uaW5nXG5cbkBlYWNoICRicmVha3BvaW50IGluIG1hcC1rZXlzKCRncmlkLWJyZWFrcG9pbnRzKSB7XG4gIEBpbmNsdWRlIG1lZGlhLWJyZWFrcG9pbnQtdXAoJGJyZWFrcG9pbnQpIHtcbiAgICAkaW5maXg6IGJyZWFrcG9pbnQtaW5maXgoJGJyZWFrcG9pbnQsICRncmlkLWJyZWFrcG9pbnRzKTtcblxuICAgIC5kcm9wZG93bi1tZW51I3skaW5maXh9LXN0YXJ0IHtcbiAgICAgIC0tYnMtcG9zaXRpb246IHN0YXJ0O1xuXG4gICAgICAmW2RhdGEtYnMtcG9wcGVyXSB7XG4gICAgICAgIHJpZ2h0OiBhdXRvO1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIC5kcm9wZG93bi1tZW51I3skaW5maXh9LWVuZCB7XG4gICAgICAtLWJzLXBvc2l0aW9uOiBlbmQ7XG5cbiAgICAgICZbZGF0YS1icy1wb3BwZXJdIHtcbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIGxlZnQ6IGF1dG87XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4vLyBzY3NzLWRvY3MtZW5kIHJlc3BvbnNpdmUtYnJlYWtwb2ludHNcblxuLy8gQWxsb3cgZm9yIGRyb3Bkb3ducyB0byBnbyBib3R0b20gdXAgKGFrYSwgZHJvcHVwLW1lbnUpXG4vLyBKdXN0IGFkZCAuZHJvcHVwIGFmdGVyIHRoZSBzdGFuZGFyZCAuZHJvcGRvd24gY2xhc3MgYW5kIHlvdSdyZSBzZXQuXG4uZHJvcHVwIHtcbiAgLmRyb3Bkb3duLW1lbnVbZGF0YS1icy1wb3BwZXJdIHtcbiAgICB0b3A6IGF1dG87XG4gICAgYm90dG9tOiAxMDAlO1xuICAgIG1hcmdpbi10b3A6IDA7XG4gICAgbWFyZ2luLWJvdHRvbTogdmFyKC0tI3skcHJlZml4fWRyb3Bkb3duLXNwYWNlcik7XG4gIH1cblxuICAuZHJvcGRvd24tdG9nZ2xlIHtcbiAgICBAaW5jbHVkZSBjYXJldCh1cCk7XG4gIH1cbn1cblxuLmRyb3BlbmQge1xuICAuZHJvcGRvd24tbWVudVtkYXRhLWJzLXBvcHBlcl0ge1xuICAgIHRvcDogMDtcbiAgICByaWdodDogYXV0bztcbiAgICBsZWZ0OiAxMDAlO1xuICAgIG1hcmdpbi10b3A6IDA7XG4gICAgbWFyZ2luLWxlZnQ6IHZhcigtLSN7JHByZWZpeH1kcm9wZG93bi1zcGFjZXIpO1xuICB9XG5cbiAgLmRyb3Bkb3duLXRvZ2dsZSB7XG4gICAgQGluY2x1ZGUgY2FyZXQoZW5kKTtcbiAgICAmOjphZnRlciB7XG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogMDtcbiAgICB9XG4gIH1cbn1cblxuLmRyb3BzdGFydCB7XG4gIC5kcm9wZG93bi1tZW51W2RhdGEtYnMtcG9wcGVyXSB7XG4gICAgdG9wOiAwO1xuICAgIHJpZ2h0OiAxMDAlO1xuICAgIGxlZnQ6IGF1dG87XG4gICAgbWFyZ2luLXRvcDogMDtcbiAgICBtYXJnaW4tcmlnaHQ6IHZhcigtLSN7JHByZWZpeH1kcm9wZG93bi1zcGFjZXIpO1xuICB9XG5cbiAgLmRyb3Bkb3duLXRvZ2dsZSB7XG4gICAgQGluY2x1ZGUgY2FyZXQoc3RhcnQpO1xuICAgICY6OmJlZm9yZSB7XG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogMDtcbiAgICB9XG4gIH1cbn1cblxuXG4vLyBEaXZpZGVycyAoYmFzaWNhbGx5IGFuIGA8aHI+YCkgd2l0aGluIHRoZSBkcm9wZG93blxuLmRyb3Bkb3duLWRpdmlkZXIge1xuICBoZWlnaHQ6IDA7XG4gIG1hcmdpbjogdmFyKC0tI3skcHJlZml4fWRyb3Bkb3duLWRpdmlkZXItbWFyZ2luLXkpIDA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS0jeyRwcmVmaXh9ZHJvcGRvd24tZGl2aWRlci1iZyk7XG4gIG9wYWNpdHk6IDE7IC8vIFJldmlzaXQgaW4gdjYgdG8gZGUtZHVwZSBzdHlsZXMgdGhhdCBjb25mbGljdCB3aXRoIDxocj4gZWxlbWVudFxufVxuXG4vLyBMaW5rcywgYnV0dG9ucywgYW5kIG1vcmUgd2l0aGluIHRoZSBkcm9wZG93biBtZW51XG4vL1xuLy8gYDxidXR0b24+YC1zcGVjaWZpYyBzdHlsZXMgYXJlIGRlbm90ZWQgd2l0aCBgLy8gRm9yIDxidXR0b24+c2Bcbi5kcm9wZG93bi1pdGVtIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHdpZHRoOiAxMDAlOyAvLyBGb3IgYDxidXR0b24+YHNcbiAgcGFkZGluZzogdmFyKC0tI3skcHJlZml4fWRyb3Bkb3duLWl0ZW0tcGFkZGluZy15KSB2YXIoLS0jeyRwcmVmaXh9ZHJvcGRvd24taXRlbS1wYWRkaW5nLXgpO1xuICBjbGVhcjogYm90aDtcbiAgZm9udC13ZWlnaHQ6ICRmb250LXdlaWdodC1ub3JtYWw7XG4gIGNvbG9yOiB2YXIoLS0jeyRwcmVmaXh9ZHJvcGRvd24tbGluay1jb2xvcik7XG4gIHRleHQtYWxpZ246IGluaGVyaXQ7IC8vIEZvciBgPGJ1dHRvbj5gc1xuICB0ZXh0LWRlY29yYXRpb246IGlmKCRsaW5rLWRlY29yYXRpb24gPT0gbm9uZSwgbnVsbCwgbm9uZSk7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7IC8vIHByZXZlbnQgbGlua3MgZnJvbSByYW5kb21seSBicmVha2luZyBvbnRvIG5ldyBsaW5lc1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsgLy8gRm9yIGA8YnV0dG9uPmBzXG4gIGJvcmRlcjogMDsgLy8gRm9yIGA8YnV0dG9uPmBzXG4gIEBpbmNsdWRlIGJvcmRlci1yYWRpdXModmFyKC0tI3skcHJlZml4fWRyb3Bkb3duLWl0ZW0tYm9yZGVyLXJhZGl1cywgMCkpO1xuXG4gICY6aG92ZXIsXG4gICY6Zm9jdXMge1xuICAgIGNvbG9yOiB2YXIoLS0jeyRwcmVmaXh9ZHJvcGRvd24tbGluay1ob3Zlci1jb2xvcik7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBpZigkbGluay1ob3Zlci1kZWNvcmF0aW9uID09IHVuZGVybGluZSwgbm9uZSwgbnVsbCk7XG4gICAgQGluY2x1ZGUgZ3JhZGllbnQtYmcodmFyKC0tI3skcHJlZml4fWRyb3Bkb3duLWxpbmstaG92ZXItYmcpKTtcbiAgfVxuXG4gICYuYWN0aXZlLFxuICAmOmFjdGl2ZSB7XG4gICAgY29sb3I6IHZhcigtLSN7JHByZWZpeH1kcm9wZG93bi1saW5rLWFjdGl2ZS1jb2xvcik7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgIEBpbmNsdWRlIGdyYWRpZW50LWJnKHZhcigtLSN7JHByZWZpeH1kcm9wZG93bi1saW5rLWFjdGl2ZS1iZykpO1xuICB9XG5cbiAgJi5kaXNhYmxlZCxcbiAgJjpkaXNhYmxlZCB7XG4gICAgY29sb3I6IHZhcigtLSN7JHByZWZpeH1kcm9wZG93bi1saW5rLWRpc2FibGVkLWNvbG9yKTtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAvLyBSZW1vdmUgQ1NTIGdyYWRpZW50cyBpZiB0aGV5J3JlIGVuYWJsZWRcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiBpZigkZW5hYmxlLWdyYWRpZW50cywgbm9uZSwgbnVsbCk7XG4gIH1cbn1cblxuLmRyb3Bkb3duLW1lbnUuc2hvdyB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuXG4vLyBEcm9wZG93biBzZWN0aW9uIGhlYWRlcnNcbi5kcm9wZG93bi1oZWFkZXIge1xuICBkaXNwbGF5OiBibG9jaztcbiAgcGFkZGluZzogdmFyKC0tI3skcHJlZml4fWRyb3Bkb3duLWhlYWRlci1wYWRkaW5nLXkpIHZhcigtLSN7JHByZWZpeH1kcm9wZG93bi1oZWFkZXItcGFkZGluZy14KTtcbiAgbWFyZ2luLWJvdHRvbTogMDsgLy8gZm9yIHVzZSB3aXRoIGhlYWRpbmcgZWxlbWVudHNcbiAgQGluY2x1ZGUgZm9udC1zaXplKCRmb250LXNpemUtc20pO1xuICBjb2xvcjogdmFyKC0tI3skcHJlZml4fWRyb3Bkb3duLWhlYWRlci1jb2xvcik7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7IC8vIGFzIHdpdGggPiBsaSA+IGFcbn1cblxuLy8gRHJvcGRvd24gdGV4dFxuLmRyb3Bkb3duLWl0ZW0tdGV4dCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwYWRkaW5nOiB2YXIoLS0jeyRwcmVmaXh9ZHJvcGRvd24taXRlbS1wYWRkaW5nLXkpIHZhcigtLSN7JHByZWZpeH1kcm9wZG93bi1pdGVtLXBhZGRpbmcteCk7XG4gIGNvbG9yOiB2YXIoLS0jeyRwcmVmaXh9ZHJvcGRvd24tbGluay1jb2xvcik7XG59XG5cbi8vIERhcmsgZHJvcGRvd25zXG4uZHJvcGRvd24tbWVudS1kYXJrIHtcbiAgLy8gc2Nzcy1kb2NzLXN0YXJ0IGRyb3Bkb3duLWRhcmstY3NzLXZhcnNcbiAgLS0jeyRwcmVmaXh9ZHJvcGRvd24tY29sb3I6ICN7JGRyb3Bkb3duLWRhcmstY29sb3J9O1xuICAtLSN7JHByZWZpeH1kcm9wZG93bi1iZzogI3skZHJvcGRvd24tZGFyay1iZ307XG4gIC0tI3skcHJlZml4fWRyb3Bkb3duLWJvcmRlci1jb2xvcjogI3skZHJvcGRvd24tZGFyay1ib3JkZXItY29sb3J9O1xuICAtLSN7JHByZWZpeH1kcm9wZG93bi1ib3gtc2hhZG93OiAjeyRkcm9wZG93bi1kYXJrLWJveC1zaGFkb3d9O1xuICAtLSN7JHByZWZpeH1kcm9wZG93bi1saW5rLWNvbG9yOiAjeyRkcm9wZG93bi1kYXJrLWxpbmstY29sb3J9O1xuICAtLSN7JHByZWZpeH1kcm9wZG93bi1saW5rLWhvdmVyLWNvbG9yOiAjeyRkcm9wZG93bi1kYXJrLWxpbmstaG92ZXItY29sb3J9O1xuICAtLSN7JHByZWZpeH1kcm9wZG93bi1kaXZpZGVyLWJnOiAjeyRkcm9wZG93bi1kYXJrLWRpdmlkZXItYmd9O1xuICAtLSN7JHByZWZpeH1kcm9wZG93bi1saW5rLWhvdmVyLWJnOiAjeyRkcm9wZG93bi1kYXJrLWxpbmstaG92ZXItYmd9O1xuICAtLSN7JHByZWZpeH1kcm9wZG93bi1saW5rLWFjdGl2ZS1jb2xvcjogI3skZHJvcGRvd24tZGFyay1saW5rLWFjdGl2ZS1jb2xvcn07XG4gIC0tI3skcHJlZml4fWRyb3Bkb3duLWxpbmstYWN0aXZlLWJnOiAjeyRkcm9wZG93bi1kYXJrLWxpbmstYWN0aXZlLWJnfTtcbiAgLS0jeyRwcmVmaXh9ZHJvcGRvd24tbGluay1kaXNhYmxlZC1jb2xvcjogI3skZHJvcGRvd24tZGFyay1saW5rLWRpc2FibGVkLWNvbG9yfTtcbiAgLS0jeyRwcmVmaXh9ZHJvcGRvd24taGVhZGVyLWNvbG9yOiAjeyRkcm9wZG93bi1kYXJrLWhlYWRlci1jb2xvcn07XG4gIC8vIHNjc3MtZG9jcy1lbmQgZHJvcGRvd24tZGFyay1jc3MtdmFyc1xufVxuIiwiLy8gc2Nzcy1kb2NzLXN0YXJ0IGNhcmV0LW1peGluc1xuQG1peGluIGNhcmV0LWRvd24oJHdpZHRoOiAkY2FyZXQtd2lkdGgpIHtcbiAgYm9yZGVyLXRvcDogJHdpZHRoIHNvbGlkO1xuICBib3JkZXItcmlnaHQ6ICR3aWR0aCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLWJvdHRvbTogMDtcbiAgYm9yZGVyLWxlZnQ6ICR3aWR0aCBzb2xpZCB0cmFuc3BhcmVudDtcbn1cblxuQG1peGluIGNhcmV0LXVwKCR3aWR0aDogJGNhcmV0LXdpZHRoKSB7XG4gIGJvcmRlci10b3A6IDA7XG4gIGJvcmRlci1yaWdodDogJHdpZHRoIHNvbGlkIHRyYW5zcGFyZW50O1xuICBib3JkZXItYm90dG9tOiAkd2lkdGggc29saWQ7XG4gIGJvcmRlci1sZWZ0OiAkd2lkdGggc29saWQgdHJhbnNwYXJlbnQ7XG59XG5cbkBtaXhpbiBjYXJldC1lbmQoJHdpZHRoOiAkY2FyZXQtd2lkdGgpIHtcbiAgYm9yZGVyLXRvcDogJHdpZHRoIHNvbGlkIHRyYW5zcGFyZW50O1xuICBib3JkZXItcmlnaHQ6IDA7XG4gIGJvcmRlci1ib3R0b206ICR3aWR0aCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLWxlZnQ6ICR3aWR0aCBzb2xpZDtcbn1cblxuQG1peGluIGNhcmV0LXN0YXJ0KCR3aWR0aDogJGNhcmV0LXdpZHRoKSB7XG4gIGJvcmRlci10b3A6ICR3aWR0aCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLXJpZ2h0OiAkd2lkdGggc29saWQ7XG4gIGJvcmRlci1ib3R0b206ICR3aWR0aCBzb2xpZCB0cmFuc3BhcmVudDtcbn1cblxuQG1peGluIGNhcmV0KFxuICAkZGlyZWN0aW9uOiBkb3duLFxuICAkd2lkdGg6ICRjYXJldC13aWR0aCxcbiAgJHNwYWNpbmc6ICRjYXJldC1zcGFjaW5nLFxuICAkdmVydGljYWwtYWxpZ246ICRjYXJldC12ZXJ0aWNhbC1hbGlnblxuKSB7XG4gIEBpZiAkZW5hYmxlLWNhcmV0IHtcbiAgICAmOjphZnRlciB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICBtYXJnaW4tbGVmdDogJHNwYWNpbmc7XG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogJHZlcnRpY2FsLWFsaWduO1xuICAgICAgY29udGVudDogXCJcIjtcbiAgICAgIEBpZiAkZGlyZWN0aW9uID09IGRvd24ge1xuICAgICAgICBAaW5jbHVkZSBjYXJldC1kb3duKCR3aWR0aCk7XG4gICAgICB9IEBlbHNlIGlmICRkaXJlY3Rpb24gPT0gdXAge1xuICAgICAgICBAaW5jbHVkZSBjYXJldC11cCgkd2lkdGgpO1xuICAgICAgfSBAZWxzZSBpZiAkZGlyZWN0aW9uID09IGVuZCB7XG4gICAgICAgIEBpbmNsdWRlIGNhcmV0LWVuZCgkd2lkdGgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIEBpZiAkZGlyZWN0aW9uID09IHN0YXJ0IHtcbiAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH1cblxuICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICBtYXJnaW4tcmlnaHQ6ICRzcGFjaW5nO1xuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogJHZlcnRpY2FsLWFsaWduO1xuICAgICAgICBjb250ZW50OiBcIlwiO1xuICAgICAgICBAaW5jbHVkZSBjYXJldC1zdGFydCgkd2lkdGgpO1xuICAgICAgfVxuICAgIH1cblxuICAgICY6ZW1wdHk6OmFmdGVyIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgIH1cbiAgfVxufVxuLy8gc2Nzcy1kb2NzLWVuZCBjYXJldC1taXhpbnNcbiIsIi8vIE1ha2UgdGhlIGRpdiBiZWhhdmUgbGlrZSBhIGJ1dHRvblxuLmJ0bi1ncm91cCxcbi5idG4tZ3JvdXAtdmVydGljYWwge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyAvLyBtYXRjaCAuYnRuIGFsaWdubWVudCBnaXZlbiBmb250LXNpemUgaGFjayBhYm92ZVxuXG4gID4gLmJ0biB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGZsZXg6IDEgMSBhdXRvO1xuICB9XG5cbiAgLy8gQnJpbmcgdGhlIGhvdmVyLCBmb2N1c2VkLCBhbmQgXCJhY3RpdmVcIiBidXR0b25zIHRvIHRoZSBmcm9udCB0byBvdmVybGF5XG4gIC8vIHRoZSBib3JkZXJzIHByb3Blcmx5XG4gID4gLmJ0bi1jaGVjazpjaGVja2VkICsgLmJ0bixcbiAgPiAuYnRuLWNoZWNrOmZvY3VzICsgLmJ0bixcbiAgPiAuYnRuOmhvdmVyLFxuICA+IC5idG46Zm9jdXMsXG4gID4gLmJ0bjphY3RpdmUsXG4gID4gLmJ0bi5hY3RpdmUge1xuICAgIHotaW5kZXg6IDE7XG4gIH1cbn1cblxuLy8gT3B0aW9uYWw6IEdyb3VwIG11bHRpcGxlIGJ1dHRvbiBncm91cHMgdG9nZXRoZXIgZm9yIGEgdG9vbGJhclxuLmJ0bi10b29sYmFyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC13cmFwOiB3cmFwO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG5cbiAgLmlucHV0LWdyb3VwIHtcbiAgICB3aWR0aDogYXV0bztcbiAgfVxufVxuXG4uYnRuLWdyb3VwIHtcbiAgQGluY2x1ZGUgYm9yZGVyLXJhZGl1cygkYnRuLWJvcmRlci1yYWRpdXMpO1xuXG4gIC8vIFByZXZlbnQgZG91YmxlIGJvcmRlcnMgd2hlbiBidXR0b25zIGFyZSBuZXh0IHRvIGVhY2ggb3RoZXJcbiAgPiA6bm90KC5idG4tY2hlY2s6Zmlyc3QtY2hpbGQpICsgLmJ0bixcbiAgPiAuYnRuLWdyb3VwOm5vdCg6Zmlyc3QtY2hpbGQpIHtcbiAgICBtYXJnaW4tbGVmdDogY2FsYygjeyRidG4tYm9yZGVyLXdpZHRofSAqIC0xKTsgLy8gc3R5bGVsaW50LWRpc2FibGUtbGluZSBmdW5jdGlvbi1kaXNhbGxvd2VkLWxpc3RcbiAgfVxuXG4gIC8vIFJlc2V0IHJvdW5kZWQgY29ybmVyc1xuICA+IC5idG46bm90KDpsYXN0LWNoaWxkKTpub3QoLmRyb3Bkb3duLXRvZ2dsZSksXG4gID4gLmJ0bi5kcm9wZG93bi10b2dnbGUtc3BsaXQ6Zmlyc3QtY2hpbGQsXG4gID4gLmJ0bi1ncm91cDpub3QoOmxhc3QtY2hpbGQpID4gLmJ0biB7XG4gICAgQGluY2x1ZGUgYm9yZGVyLWVuZC1yYWRpdXMoMCk7XG4gIH1cblxuICAvLyBUaGUgbGVmdCByYWRpdXMgc2hvdWxkIGJlIDAgaWYgdGhlIGJ1dHRvbiBpczpcbiAgLy8gLSB0aGUgXCJ0aGlyZCBvciBtb3JlXCIgY2hpbGRcbiAgLy8gLSB0aGUgc2Vjb25kIGNoaWxkIGFuZCB0aGUgcHJldmlvdXMgZWxlbWVudCBpc24ndCBgLmJ0bi1jaGVja2AgKG1ha2luZyBpdCB0aGUgZmlyc3QgY2hpbGQgdmlzdWFsbHkpXG4gIC8vIC0gcGFydCBvZiBhIGJ0bi1ncm91cCB3aGljaCBpc24ndCB0aGUgZmlyc3QgY2hpbGRcbiAgPiAuYnRuOm50aC1jaGlsZChuICsgMyksXG4gID4gOm5vdCguYnRuLWNoZWNrKSArIC5idG4sXG4gID4gLmJ0bi1ncm91cDpub3QoOmZpcnN0LWNoaWxkKSA+IC5idG4ge1xuICAgIEBpbmNsdWRlIGJvcmRlci1zdGFydC1yYWRpdXMoMCk7XG4gIH1cbn1cblxuLy8gU2l6aW5nXG4vL1xuLy8gUmVtaXggdGhlIGRlZmF1bHQgYnV0dG9uIHNpemluZyBjbGFzc2VzIGludG8gbmV3IG9uZXMgZm9yIGVhc2llciBtYW5pcHVsYXRpb24uXG5cbi5idG4tZ3JvdXAtc20gPiAuYnRuIHsgQGV4dGVuZCAuYnRuLXNtOyB9XG4uYnRuLWdyb3VwLWxnID4gLmJ0biB7IEBleHRlbmQgLmJ0bi1sZzsgfVxuXG5cbi8vXG4vLyBTcGxpdCBidXR0b24gZHJvcGRvd25zXG4vL1xuXG4uZHJvcGRvd24tdG9nZ2xlLXNwbGl0IHtcbiAgcGFkZGluZy1yaWdodDogJGJ0bi1wYWRkaW5nLXggKiAuNzU7XG4gIHBhZGRpbmctbGVmdDogJGJ0bi1wYWRkaW5nLXggKiAuNzU7XG5cbiAgJjo6YWZ0ZXIsXG4gIC5kcm9wdXAgJjo6YWZ0ZXIsXG4gIC5kcm9wZW5kICY6OmFmdGVyIHtcbiAgICBtYXJnaW4tbGVmdDogMDtcbiAgfVxuXG4gIC5kcm9wc3RhcnQgJjo6YmVmb3JlIHtcbiAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gIH1cbn1cblxuLmJ0bi1zbSArIC5kcm9wZG93bi10b2dnbGUtc3BsaXQge1xuICBwYWRkaW5nLXJpZ2h0OiAkYnRuLXBhZGRpbmcteC1zbSAqIC43NTtcbiAgcGFkZGluZy1sZWZ0OiAkYnRuLXBhZGRpbmcteC1zbSAqIC43NTtcbn1cblxuLmJ0bi1sZyArIC5kcm9wZG93bi10b2dnbGUtc3BsaXQge1xuICBwYWRkaW5nLXJpZ2h0OiAkYnRuLXBhZGRpbmcteC1sZyAqIC43NTtcbiAgcGFkZGluZy1sZWZ0OiAkYnRuLXBhZGRpbmcteC1sZyAqIC43NTtcbn1cblxuXG4vLyBUaGUgY2xpY2thYmxlIGJ1dHRvbiBmb3IgdG9nZ2xpbmcgdGhlIG1lbnVcbi8vIFNldCB0aGUgc2FtZSBpbnNldCBzaGFkb3cgYXMgdGhlIDphY3RpdmUgc3RhdGVcbi5idG4tZ3JvdXAuc2hvdyAuZHJvcGRvd24tdG9nZ2xlIHtcbiAgQGluY2x1ZGUgYm94LXNoYWRvdygkYnRuLWFjdGl2ZS1ib3gtc2hhZG93KTtcblxuICAvLyBTaG93IG5vIHNoYWRvdyBmb3IgYC5idG4tbGlua2Agc2luY2UgaXQgaGFzIG5vIG90aGVyIGJ1dHRvbiBzdHlsZXMuXG4gICYuYnRuLWxpbmsge1xuICAgIEBpbmNsdWRlIGJveC1zaGFkb3cobm9uZSk7XG4gIH1cbn1cblxuXG4vL1xuLy8gVmVydGljYWwgYnV0dG9uIGdyb3Vwc1xuLy9cblxuLmJ0bi1ncm91cC12ZXJ0aWNhbCB7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblxuICA+IC5idG4sXG4gID4gLmJ0bi1ncm91cCB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cblxuICA+IC5idG46bm90KDpmaXJzdC1jaGlsZCksXG4gID4gLmJ0bi1ncm91cDpub3QoOmZpcnN0LWNoaWxkKSB7XG4gICAgbWFyZ2luLXRvcDogY2FsYygjeyRidG4tYm9yZGVyLXdpZHRofSAqIC0xKTsgLy8gc3R5bGVsaW50LWRpc2FibGUtbGluZSBmdW5jdGlvbi1kaXNhbGxvd2VkLWxpc3RcbiAgfVxuXG4gIC8vIFJlc2V0IHJvdW5kZWQgY29ybmVyc1xuICA+IC5idG46bm90KDpsYXN0LWNoaWxkKTpub3QoLmRyb3Bkb3duLXRvZ2dsZSksXG4gID4gLmJ0bi1ncm91cDpub3QoOmxhc3QtY2hpbGQpID4gLmJ0biB7XG4gICAgQGluY2x1ZGUgYm9yZGVyLWJvdHRvbS1yYWRpdXMoMCk7XG4gIH1cblxuICA+IC5idG4gfiAuYnRuLFxuICA+IC5idG4tZ3JvdXA6bm90KDpmaXJzdC1jaGlsZCkgPiAuYnRuIHtcbiAgICBAaW5jbHVkZSBib3JkZXItdG9wLXJhZGl1cygwKTtcbiAgfVxufVxuIiwiLy8gQmFzZSBjbGFzc1xuLy9cbi8vIEtpY2tzdGFydCBhbnkgbmF2aWdhdGlvbiBjb21wb25lbnQgd2l0aCBhIHNldCBvZiBzdHlsZSByZXNldHMuIFdvcmtzIHdpdGhcbi8vIGA8bmF2PmBzLCBgPHVsPmBzIG9yIGA8b2w+YHMuXG5cbi5uYXYge1xuICAvLyBzY3NzLWRvY3Mtc3RhcnQgbmF2LWNzcy12YXJzXG4gIC0tI3skcHJlZml4fW5hdi1saW5rLXBhZGRpbmcteDogI3skbmF2LWxpbmstcGFkZGluZy14fTtcbiAgLS0jeyRwcmVmaXh9bmF2LWxpbmstcGFkZGluZy15OiAjeyRuYXYtbGluay1wYWRkaW5nLXl9O1xuICBAaW5jbHVkZSByZnMoJG5hdi1saW5rLWZvbnQtc2l6ZSwgLS0jeyRwcmVmaXh9bmF2LWxpbmstZm9udC1zaXplKTtcbiAgLS0jeyRwcmVmaXh9bmF2LWxpbmstZm9udC13ZWlnaHQ6ICN7JG5hdi1saW5rLWZvbnQtd2VpZ2h0fTtcbiAgLS0jeyRwcmVmaXh9bmF2LWxpbmstY29sb3I6ICN7JG5hdi1saW5rLWNvbG9yfTtcbiAgLS0jeyRwcmVmaXh9bmF2LWxpbmstaG92ZXItY29sb3I6ICN7JG5hdi1saW5rLWhvdmVyLWNvbG9yfTtcbiAgLS0jeyRwcmVmaXh9bmF2LWxpbmstZGlzYWJsZWQtY29sb3I6ICN7JG5hdi1saW5rLWRpc2FibGVkLWNvbG9yfTtcbiAgLy8gc2Nzcy1kb2NzLWVuZCBuYXYtY3NzLXZhcnNcblxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIHBhZGRpbmctbGVmdDogMDtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbn1cblxuLm5hdi1saW5rIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBhZGRpbmc6IHZhcigtLSN7JHByZWZpeH1uYXYtbGluay1wYWRkaW5nLXkpIHZhcigtLSN7JHByZWZpeH1uYXYtbGluay1wYWRkaW5nLXgpO1xuICBAaW5jbHVkZSBmb250LXNpemUodmFyKC0tI3skcHJlZml4fW5hdi1saW5rLWZvbnQtc2l6ZSkpO1xuICBmb250LXdlaWdodDogdmFyKC0tI3skcHJlZml4fW5hdi1saW5rLWZvbnQtd2VpZ2h0KTtcbiAgY29sb3I6IHZhcigtLSN7JHByZWZpeH1uYXYtbGluay1jb2xvcik7XG4gIHRleHQtZGVjb3JhdGlvbjogaWYoJGxpbmstZGVjb3JhdGlvbiA9PSBub25lLCBudWxsLCBub25lKTtcbiAgYmFja2dyb3VuZDogbm9uZTtcbiAgYm9yZGVyOiAwO1xuICBAaW5jbHVkZSB0cmFuc2l0aW9uKCRuYXYtbGluay10cmFuc2l0aW9uKTtcblxuICAmOmhvdmVyLFxuICAmOmZvY3VzIHtcbiAgICBjb2xvcjogdmFyKC0tI3skcHJlZml4fW5hdi1saW5rLWhvdmVyLWNvbG9yKTtcbiAgICB0ZXh0LWRlY29yYXRpb246IGlmKCRsaW5rLWhvdmVyLWRlY29yYXRpb24gPT0gdW5kZXJsaW5lLCBub25lLCBudWxsKTtcbiAgfVxuXG4gICY6Zm9jdXMtdmlzaWJsZSB7XG4gICAgb3V0bGluZTogMDtcbiAgICBib3gtc2hhZG93OiAkbmF2LWxpbmstZm9jdXMtYm94LXNoYWRvdztcbiAgfVxuXG4gIC8vIERpc2FibGVkIHN0YXRlIGxpZ2h0ZW5zIHRleHRcbiAgJi5kaXNhYmxlZCxcbiAgJjpkaXNhYmxlZCB7XG4gICAgY29sb3I6IHZhcigtLSN7JHByZWZpeH1uYXYtbGluay1kaXNhYmxlZC1jb2xvcik7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgY3Vyc29yOiBkZWZhdWx0O1xuICB9XG59XG5cbi8vXG4vLyBUYWJzXG4vL1xuXG4ubmF2LXRhYnMge1xuICAvLyBzY3NzLWRvY3Mtc3RhcnQgbmF2LXRhYnMtY3NzLXZhcnNcbiAgLS0jeyRwcmVmaXh9bmF2LXRhYnMtYm9yZGVyLXdpZHRoOiAjeyRuYXYtdGFicy1ib3JkZXItd2lkdGh9O1xuICAtLSN7JHByZWZpeH1uYXYtdGFicy1ib3JkZXItY29sb3I6ICN7JG5hdi10YWJzLWJvcmRlci1jb2xvcn07XG4gIC0tI3skcHJlZml4fW5hdi10YWJzLWJvcmRlci1yYWRpdXM6ICN7JG5hdi10YWJzLWJvcmRlci1yYWRpdXN9O1xuICAtLSN7JHByZWZpeH1uYXYtdGFicy1saW5rLWhvdmVyLWJvcmRlci1jb2xvcjogI3skbmF2LXRhYnMtbGluay1ob3Zlci1ib3JkZXItY29sb3J9O1xuICAtLSN7JHByZWZpeH1uYXYtdGFicy1saW5rLWFjdGl2ZS1jb2xvcjogI3skbmF2LXRhYnMtbGluay1hY3RpdmUtY29sb3J9O1xuICAtLSN7JHByZWZpeH1uYXYtdGFicy1saW5rLWFjdGl2ZS1iZzogI3skbmF2LXRhYnMtbGluay1hY3RpdmUtYmd9O1xuICAtLSN7JHByZWZpeH1uYXYtdGFicy1saW5rLWFjdGl2ZS1ib3JkZXItY29sb3I6ICN7JG5hdi10YWJzLWxpbmstYWN0aXZlLWJvcmRlci1jb2xvcn07XG4gIC8vIHNjc3MtZG9jcy1lbmQgbmF2LXRhYnMtY3NzLXZhcnNcblxuICBib3JkZXItYm90dG9tOiB2YXIoLS0jeyRwcmVmaXh9bmF2LXRhYnMtYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS0jeyRwcmVmaXh9bmF2LXRhYnMtYm9yZGVyLWNvbG9yKTtcblxuICAubmF2LWxpbmsge1xuICAgIG1hcmdpbi1ib3R0b206IGNhbGMoLTEgKiB2YXIoLS0jeyRwcmVmaXh9bmF2LXRhYnMtYm9yZGVyLXdpZHRoKSk7IC8vIHN0eWxlbGludC1kaXNhYmxlLWxpbmUgZnVuY3Rpb24tZGlzYWxsb3dlZC1saXN0XG4gICAgYm9yZGVyOiB2YXIoLS0jeyRwcmVmaXh9bmF2LXRhYnMtYm9yZGVyLXdpZHRoKSBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICBAaW5jbHVkZSBib3JkZXItdG9wLXJhZGl1cyh2YXIoLS0jeyRwcmVmaXh9bmF2LXRhYnMtYm9yZGVyLXJhZGl1cykpO1xuXG4gICAgJjpob3ZlcixcbiAgICAmOmZvY3VzIHtcbiAgICAgIC8vIFByZXZlbnRzIGFjdGl2ZSAubmF2LWxpbmsgdGFiIG92ZXJsYXBwaW5nIGZvY3VzIG91dGxpbmUgb2YgcHJldmlvdXMvbmV4dCAubmF2LWxpbmtcbiAgICAgIGlzb2xhdGlvbjogaXNvbGF0ZTtcbiAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tI3skcHJlZml4fW5hdi10YWJzLWxpbmstaG92ZXItYm9yZGVyLWNvbG9yKTtcbiAgICB9XG4gIH1cblxuICAubmF2LWxpbmsuYWN0aXZlLFxuICAubmF2LWl0ZW0uc2hvdyAubmF2LWxpbmsge1xuICAgIGNvbG9yOiB2YXIoLS0jeyRwcmVmaXh9bmF2LXRhYnMtbGluay1hY3RpdmUtY29sb3IpO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLSN7JHByZWZpeH1uYXYtdGFicy1saW5rLWFjdGl2ZS1iZyk7XG4gICAgYm9yZGVyLWNvbG9yOiB2YXIoLS0jeyRwcmVmaXh9bmF2LXRhYnMtbGluay1hY3RpdmUtYm9yZGVyLWNvbG9yKTtcbiAgfVxuXG4gIC5kcm9wZG93bi1tZW51IHtcbiAgICAvLyBNYWtlIGRyb3Bkb3duIGJvcmRlciBvdmVybGFwIHRhYiBib3JkZXJcbiAgICBtYXJnaW4tdG9wOiBjYWxjKC0xICogdmFyKC0tI3skcHJlZml4fW5hdi10YWJzLWJvcmRlci13aWR0aCkpOyAvLyBzdHlsZWxpbnQtZGlzYWJsZS1saW5lIGZ1bmN0aW9uLWRpc2FsbG93ZWQtbGlzdFxuICAgIC8vIFJlbW92ZSB0aGUgdG9wIHJvdW5kZWQgY29ybmVycyBoZXJlIHNpbmNlIHRoZXJlIGlzIGEgaGFyZCBlZGdlIGFib3ZlIHRoZSBtZW51XG4gICAgQGluY2x1ZGUgYm9yZGVyLXRvcC1yYWRpdXMoMCk7XG4gIH1cbn1cblxuXG4vL1xuLy8gUGlsbHNcbi8vXG5cbi5uYXYtcGlsbHMge1xuICAvLyBzY3NzLWRvY3Mtc3RhcnQgbmF2LXBpbGxzLWNzcy12YXJzXG4gIC0tI3skcHJlZml4fW5hdi1waWxscy1ib3JkZXItcmFkaXVzOiAjeyRuYXYtcGlsbHMtYm9yZGVyLXJhZGl1c307XG4gIC0tI3skcHJlZml4fW5hdi1waWxscy1saW5rLWFjdGl2ZS1jb2xvcjogI3skbmF2LXBpbGxzLWxpbmstYWN0aXZlLWNvbG9yfTtcbiAgLS0jeyRwcmVmaXh9bmF2LXBpbGxzLWxpbmstYWN0aXZlLWJnOiAjeyRuYXYtcGlsbHMtbGluay1hY3RpdmUtYmd9O1xuICAvLyBzY3NzLWRvY3MtZW5kIG5hdi1waWxscy1jc3MtdmFyc1xuXG4gIC5uYXYtbGluayB7XG4gICAgQGluY2x1ZGUgYm9yZGVyLXJhZGl1cyh2YXIoLS0jeyRwcmVmaXh9bmF2LXBpbGxzLWJvcmRlci1yYWRpdXMpKTtcbiAgfVxuXG4gIC5uYXYtbGluay5hY3RpdmUsXG4gIC5zaG93ID4gLm5hdi1saW5rIHtcbiAgICBjb2xvcjogdmFyKC0tI3skcHJlZml4fW5hdi1waWxscy1saW5rLWFjdGl2ZS1jb2xvcik7XG4gICAgQGluY2x1ZGUgZ3JhZGllbnQtYmcodmFyKC0tI3skcHJlZml4fW5hdi1waWxscy1saW5rLWFjdGl2ZS1iZykpO1xuICB9XG59XG5cblxuLy9cbi8vIFVuZGVybGluZVxuLy9cblxuLm5hdi11bmRlcmxpbmUge1xuICAvLyBzY3NzLWRvY3Mtc3RhcnQgbmF2LXVuZGVybGluZS1jc3MtdmFyc1xuICAtLSN7JHByZWZpeH1uYXYtdW5kZXJsaW5lLWdhcDogI3skbmF2LXVuZGVybGluZS1nYXB9O1xuICAtLSN7JHByZWZpeH1uYXYtdW5kZXJsaW5lLWJvcmRlci13aWR0aDogI3skbmF2LXVuZGVybGluZS1ib3JkZXItd2lkdGh9O1xuICAtLSN7JHByZWZpeH1uYXYtdW5kZXJsaW5lLWxpbmstYWN0aXZlLWNvbG9yOiAjeyRuYXYtdW5kZXJsaW5lLWxpbmstYWN0aXZlLWNvbG9yfTtcbiAgLy8gc2Nzcy1kb2NzLWVuZCBuYXYtdW5kZXJsaW5lLWNzcy12YXJzXG5cbiAgZ2FwOiB2YXIoLS0jeyRwcmVmaXh9bmF2LXVuZGVybGluZS1nYXApO1xuXG4gIC5uYXYtbGluayB7XG4gICAgcGFkZGluZy1yaWdodDogMDtcbiAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgYm9yZGVyLWJvdHRvbTogdmFyKC0tI3skcHJlZml4fW5hdi11bmRlcmxpbmUtYm9yZGVyLXdpZHRoKSBzb2xpZCB0cmFuc3BhcmVudDtcblxuICAgICY6aG92ZXIsXG4gICAgJjpmb2N1cyB7XG4gICAgICBib3JkZXItYm90dG9tLWNvbG9yOiBjdXJyZW50Y29sb3I7XG4gICAgfVxuICB9XG5cbiAgLm5hdi1saW5rLmFjdGl2ZSxcbiAgLnNob3cgPiAubmF2LWxpbmsge1xuICAgIGZvbnQtd2VpZ2h0OiAkZm9udC13ZWlnaHQtYm9sZDtcbiAgICBjb2xvcjogdmFyKC0tI3skcHJlZml4fW5hdi11bmRlcmxpbmUtbGluay1hY3RpdmUtY29sb3IpO1xuICAgIGJvcmRlci1ib3R0b20tY29sb3I6IGN1cnJlbnRjb2xvcjtcbiAgfVxufVxuXG5cbi8vXG4vLyBKdXN0aWZpZWQgdmFyaWFudHNcbi8vXG5cbi5uYXYtZmlsbCB7XG4gID4gLm5hdi1saW5rLFxuICAubmF2LWl0ZW0ge1xuICAgIGZsZXg6IDEgMSBhdXRvO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgfVxufVxuXG4ubmF2LWp1c3RpZmllZCB7XG4gID4gLm5hdi1saW5rLFxuICAubmF2LWl0ZW0ge1xuICAgIGZsZXgtYmFzaXM6IDA7XG4gICAgZmxleC1ncm93OiAxO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgfVxufVxuXG4ubmF2LWZpbGwsXG4ubmF2LWp1c3RpZmllZCB7XG4gIC5uYXYtaXRlbSAubmF2LWxpbmsge1xuICAgIHdpZHRoOiAxMDAlOyAvLyBNYWtlIHN1cmUgYnV0dG9uIHdpbGwgZ3Jvd1xuICB9XG59XG5cblxuLy8gVGFiYmFibGUgdGFic1xuLy9cbi8vIEhpZGUgdGFiYmFibGUgcGFuZXMgdG8gc3RhcnQsIHNob3cgdGhlbSB3aGVuIGAuYWN0aXZlYFxuXG4udGFiLWNvbnRlbnQge1xuICA+IC50YWItcGFuZSB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuICA+IC5hY3RpdmUge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG59XG4iLCIvLyBOYXZiYXJcbi8vXG4vLyBQcm92aWRlIGEgc3RhdGljIG5hdmJhciBmcm9tIHdoaWNoIHdlIGV4cGFuZCB0byBjcmVhdGUgZnVsbC13aWR0aCwgZml4ZWQsIGFuZFxuLy8gb3RoZXIgbmF2YmFyIHZhcmlhdGlvbnMuXG5cbi5uYXZiYXIge1xuICAvLyBzY3NzLWRvY3Mtc3RhcnQgbmF2YmFyLWNzcy12YXJzXG4gIC0tI3skcHJlZml4fW5hdmJhci1wYWRkaW5nLXg6ICN7aWYoJG5hdmJhci1wYWRkaW5nLXggPT0gbnVsbCwgMCwgJG5hdmJhci1wYWRkaW5nLXgpfTtcbiAgLS0jeyRwcmVmaXh9bmF2YmFyLXBhZGRpbmcteTogI3skbmF2YmFyLXBhZGRpbmcteX07XG4gIC0tI3skcHJlZml4fW5hdmJhci1jb2xvcjogI3skbmF2YmFyLWxpZ2h0LWNvbG9yfTtcbiAgLS0jeyRwcmVmaXh9bmF2YmFyLWhvdmVyLWNvbG9yOiAjeyRuYXZiYXItbGlnaHQtaG92ZXItY29sb3J9O1xuICAtLSN7JHByZWZpeH1uYXZiYXItZGlzYWJsZWQtY29sb3I6ICN7JG5hdmJhci1saWdodC1kaXNhYmxlZC1jb2xvcn07XG4gIC0tI3skcHJlZml4fW5hdmJhci1hY3RpdmUtY29sb3I6ICN7JG5hdmJhci1saWdodC1hY3RpdmUtY29sb3J9O1xuICAtLSN7JHByZWZpeH1uYXZiYXItYnJhbmQtcGFkZGluZy15OiAjeyRuYXZiYXItYnJhbmQtcGFkZGluZy15fTtcbiAgLS0jeyRwcmVmaXh9bmF2YmFyLWJyYW5kLW1hcmdpbi1lbmQ6ICN7JG5hdmJhci1icmFuZC1tYXJnaW4tZW5kfTtcbiAgLS0jeyRwcmVmaXh9bmF2YmFyLWJyYW5kLWZvbnQtc2l6ZTogI3skbmF2YmFyLWJyYW5kLWZvbnQtc2l6ZX07XG4gIC0tI3skcHJlZml4fW5hdmJhci1icmFuZC1jb2xvcjogI3skbmF2YmFyLWxpZ2h0LWJyYW5kLWNvbG9yfTtcbiAgLS0jeyRwcmVmaXh9bmF2YmFyLWJyYW5kLWhvdmVyLWNvbG9yOiAjeyRuYXZiYXItbGlnaHQtYnJhbmQtaG92ZXItY29sb3J9O1xuICAtLSN7JHByZWZpeH1uYXZiYXItbmF2LWxpbmstcGFkZGluZy14OiAjeyRuYXZiYXItbmF2LWxpbmstcGFkZGluZy14fTtcbiAgLS0jeyRwcmVmaXh9bmF2YmFyLXRvZ2dsZXItcGFkZGluZy15OiAjeyRuYXZiYXItdG9nZ2xlci1wYWRkaW5nLXl9O1xuICAtLSN7JHByZWZpeH1uYXZiYXItdG9nZ2xlci1wYWRkaW5nLXg6ICN7JG5hdmJhci10b2dnbGVyLXBhZGRpbmcteH07XG4gIC0tI3skcHJlZml4fW5hdmJhci10b2dnbGVyLWZvbnQtc2l6ZTogI3skbmF2YmFyLXRvZ2dsZXItZm9udC1zaXplfTtcbiAgLS0jeyRwcmVmaXh9bmF2YmFyLXRvZ2dsZXItaWNvbi1iZzogI3tlc2NhcGUtc3ZnKCRuYXZiYXItbGlnaHQtdG9nZ2xlci1pY29uLWJnKX07XG4gIC0tI3skcHJlZml4fW5hdmJhci10b2dnbGVyLWJvcmRlci1jb2xvcjogI3skbmF2YmFyLWxpZ2h0LXRvZ2dsZXItYm9yZGVyLWNvbG9yfTtcbiAgLS0jeyRwcmVmaXh9bmF2YmFyLXRvZ2dsZXItYm9yZGVyLXJhZGl1czogI3skbmF2YmFyLXRvZ2dsZXItYm9yZGVyLXJhZGl1c307XG4gIC0tI3skcHJlZml4fW5hdmJhci10b2dnbGVyLWZvY3VzLXdpZHRoOiAjeyRuYXZiYXItdG9nZ2xlci1mb2N1cy13aWR0aH07XG4gIC0tI3skcHJlZml4fW5hdmJhci10b2dnbGVyLXRyYW5zaXRpb246ICN7JG5hdmJhci10b2dnbGVyLXRyYW5zaXRpb259O1xuICAvLyBzY3NzLWRvY3MtZW5kIG5hdmJhci1jc3MtdmFyc1xuXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC13cmFwOiB3cmFwOyAvLyBhbGxvdyB1cyB0byBkbyB0aGUgbGluZSBicmVhayBmb3IgY29sbGFwc2luZyBjb250ZW50XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsgLy8gc3BhY2Ugb3V0IGJyYW5kIGZyb20gbG9nb1xuICBwYWRkaW5nOiB2YXIoLS0jeyRwcmVmaXh9bmF2YmFyLXBhZGRpbmcteSkgdmFyKC0tI3skcHJlZml4fW5hdmJhci1wYWRkaW5nLXgpO1xuICBAaW5jbHVkZSBncmFkaWVudC1iZygpO1xuXG4gIC8vIEJlY2F1c2UgZmxleCBwcm9wZXJ0aWVzIGFyZW4ndCBpbmhlcml0ZWQsIHdlIG5lZWQgdG8gcmVkZWNsYXJlIHRoZXNlIGZpcnN0XG4gIC8vIGZldyBwcm9wZXJ0aWVzIHNvIHRoYXQgY29udGVudCBuZXN0ZWQgd2l0aGluIGJlaGF2ZSBwcm9wZXJseS5cbiAgLy8gVGhlIGBmbGV4LXdyYXBgIHByb3BlcnR5IGlzIGluaGVyaXRlZCB0byBzaW1wbGlmeSB0aGUgZXhwYW5kZWQgbmF2YmFyc1xuICAlY29udGFpbmVyLWZsZXgtcHJvcGVydGllcyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LXdyYXA6IGluaGVyaXQ7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIH1cblxuICA+IC5jb250YWluZXIsXG4gID4gLmNvbnRhaW5lci1mbHVpZCB7XG4gICAgQGV4dGVuZCAlY29udGFpbmVyLWZsZXgtcHJvcGVydGllcztcbiAgfVxuXG4gIEBlYWNoICRicmVha3BvaW50LCAkY29udGFpbmVyLW1heC13aWR0aCBpbiAkY29udGFpbmVyLW1heC13aWR0aHMge1xuICAgID4gLmNvbnRhaW5lciN7YnJlYWtwb2ludC1pbmZpeCgkYnJlYWtwb2ludCwgJGNvbnRhaW5lci1tYXgtd2lkdGhzKX0ge1xuICAgICAgQGV4dGVuZCAlY29udGFpbmVyLWZsZXgtcHJvcGVydGllcztcbiAgICB9XG4gIH1cbn1cblxuXG4vLyBOYXZiYXIgYnJhbmRcbi8vXG4vLyBVc2VkIGZvciBicmFuZCwgcHJvamVjdCwgb3Igc2l0ZSBuYW1lcy5cblxuLm5hdmJhci1icmFuZCB7XG4gIHBhZGRpbmctdG9wOiB2YXIoLS0jeyRwcmVmaXh9bmF2YmFyLWJyYW5kLXBhZGRpbmcteSk7XG4gIHBhZGRpbmctYm90dG9tOiB2YXIoLS0jeyRwcmVmaXh9bmF2YmFyLWJyYW5kLXBhZGRpbmcteSk7XG4gIG1hcmdpbi1yaWdodDogdmFyKC0tI3skcHJlZml4fW5hdmJhci1icmFuZC1tYXJnaW4tZW5kKTtcbiAgQGluY2x1ZGUgZm9udC1zaXplKHZhcigtLSN7JHByZWZpeH1uYXZiYXItYnJhbmQtZm9udC1zaXplKSk7XG4gIGNvbG9yOiB2YXIoLS0jeyRwcmVmaXh9bmF2YmFyLWJyYW5kLWNvbG9yKTtcbiAgdGV4dC1kZWNvcmF0aW9uOiBpZigkbGluay1kZWNvcmF0aW9uID09IG5vbmUsIG51bGwsIG5vbmUpO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuXG4gICY6aG92ZXIsXG4gICY6Zm9jdXMge1xuICAgIGNvbG9yOiB2YXIoLS0jeyRwcmVmaXh9bmF2YmFyLWJyYW5kLWhvdmVyLWNvbG9yKTtcbiAgICB0ZXh0LWRlY29yYXRpb246IGlmKCRsaW5rLWhvdmVyLWRlY29yYXRpb24gPT0gdW5kZXJsaW5lLCBub25lLCBudWxsKTtcbiAgfVxufVxuXG5cbi8vIE5hdmJhciBuYXZcbi8vXG4vLyBDdXN0b20gbmF2YmFyIG5hdmlnYXRpb24gKGRvZXNuJ3QgcmVxdWlyZSBgLm5hdmAsIGJ1dCBkb2VzIG1ha2UgdXNlIG9mIGAubmF2LWxpbmtgKS5cblxuLm5hdmJhci1uYXYge1xuICAvLyBzY3NzLWRvY3Mtc3RhcnQgbmF2YmFyLW5hdi1jc3MtdmFyc1xuICAtLSN7JHByZWZpeH1uYXYtbGluay1wYWRkaW5nLXg6IDA7XG4gIC0tI3skcHJlZml4fW5hdi1saW5rLXBhZGRpbmcteTogI3skbmF2LWxpbmstcGFkZGluZy15fTtcbiAgQGluY2x1ZGUgcmZzKCRuYXYtbGluay1mb250LXNpemUsIC0tI3skcHJlZml4fW5hdi1saW5rLWZvbnQtc2l6ZSk7XG4gIC0tI3skcHJlZml4fW5hdi1saW5rLWZvbnQtd2VpZ2h0OiAjeyRuYXYtbGluay1mb250LXdlaWdodH07XG4gIC0tI3skcHJlZml4fW5hdi1saW5rLWNvbG9yOiB2YXIoLS0jeyRwcmVmaXh9bmF2YmFyLWNvbG9yKTtcbiAgLS0jeyRwcmVmaXh9bmF2LWxpbmstaG92ZXItY29sb3I6IHZhcigtLSN7JHByZWZpeH1uYXZiYXItaG92ZXItY29sb3IpO1xuICAtLSN7JHByZWZpeH1uYXYtbGluay1kaXNhYmxlZC1jb2xvcjogdmFyKC0tI3skcHJlZml4fW5hdmJhci1kaXNhYmxlZC1jb2xvcik7XG4gIC8vIHNjc3MtZG9jcy1lbmQgbmF2YmFyLW5hdi1jc3MtdmFyc1xuXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IC8vIGNhbm5vdCB1c2UgYGluaGVyaXRgIHRvIGdldCB0aGUgYC5uYXZiYXJgcyB2YWx1ZVxuICBwYWRkaW5nLWxlZnQ6IDA7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG5cbiAgLm5hdi1saW5rIHtcbiAgICAmLmFjdGl2ZSxcbiAgICAmLnNob3cge1xuICAgICAgY29sb3I6IHZhcigtLSN7JHByZWZpeH1uYXZiYXItYWN0aXZlLWNvbG9yKTtcbiAgICB9XG4gIH1cblxuICAuZHJvcGRvd24tbWVudSB7XG4gICAgcG9zaXRpb246IHN0YXRpYztcbiAgfVxufVxuXG5cbi8vIE5hdmJhciB0ZXh0XG4vL1xuLy9cblxuLm5hdmJhci10ZXh0IHtcbiAgcGFkZGluZy10b3A6ICRuYXYtbGluay1wYWRkaW5nLXk7XG4gIHBhZGRpbmctYm90dG9tOiAkbmF2LWxpbmstcGFkZGluZy15O1xuICBjb2xvcjogdmFyKC0tI3skcHJlZml4fW5hdmJhci1jb2xvcik7XG5cbiAgYSxcbiAgYTpob3ZlcixcbiAgYTpmb2N1cyAge1xuICAgIGNvbG9yOiB2YXIoLS0jeyRwcmVmaXh9bmF2YmFyLWFjdGl2ZS1jb2xvcik7XG4gIH1cbn1cblxuXG4vLyBSZXNwb25zaXZlIG5hdmJhclxuLy9cbi8vIEN1c3RvbSBzdHlsZXMgZm9yIHJlc3BvbnNpdmUgY29sbGFwc2luZyBhbmQgdG9nZ2xpbmcgb2YgbmF2YmFyIGNvbnRlbnRzLlxuLy8gUG93ZXJlZCBieSB0aGUgY29sbGFwc2UgQm9vdHN0cmFwIEphdmFTY3JpcHQgcGx1Z2luLlxuXG4vLyBXaGVuIGNvbGxhcHNlZCwgcHJldmVudCB0aGUgdG9nZ2xlYWJsZSBuYXZiYXIgY29udGVudHMgZnJvbSBhcHBlYXJpbmcgaW5cbi8vIHRoZSBkZWZhdWx0IGZsZXhib3ggcm93IG9yaWVudGF0aW9uLiBSZXF1aXJlcyB0aGUgdXNlIG9mIGBmbGV4LXdyYXA6IHdyYXBgXG4vLyBvbiB0aGUgYC5uYXZiYXJgIHBhcmVudC5cbi5uYXZiYXItY29sbGFwc2Uge1xuICBmbGV4LWJhc2lzOiAxMDAlO1xuICBmbGV4LWdyb3c6IDE7XG4gIC8vIEZvciBhbHdheXMgZXhwYW5kZWQgb3IgZXh0cmEgZnVsbCBuYXZiYXJzLCBlbnN1cmUgY29udGVudCBhbGlnbnMgaXRzZWxmXG4gIC8vIHByb3Blcmx5IHZlcnRpY2FsbHkuIENhbiBiZSBlYXNpbHkgb3ZlcnJpZGRlbiB3aXRoIGZsZXggdXRpbGl0aWVzLlxuICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuXG4vLyBCdXR0b24gZm9yIHRvZ2dsaW5nIHRoZSBuYXZiYXIgd2hlbiBpbiBpdHMgY29sbGFwc2VkIHN0YXRlXG4ubmF2YmFyLXRvZ2dsZXIge1xuICBwYWRkaW5nOiB2YXIoLS0jeyRwcmVmaXh9bmF2YmFyLXRvZ2dsZXItcGFkZGluZy15KSB2YXIoLS0jeyRwcmVmaXh9bmF2YmFyLXRvZ2dsZXItcGFkZGluZy14KTtcbiAgQGluY2x1ZGUgZm9udC1zaXplKHZhcigtLSN7JHByZWZpeH1uYXZiYXItdG9nZ2xlci1mb250LXNpemUpKTtcbiAgbGluZS1oZWlnaHQ6IDE7XG4gIGNvbG9yOiB2YXIoLS0jeyRwcmVmaXh9bmF2YmFyLWNvbG9yKTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IC8vIHJlbW92ZSBkZWZhdWx0IGJ1dHRvbiBzdHlsZVxuICBib3JkZXI6IHZhcigtLSN7JHByZWZpeH1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLSN7JHByZWZpeH1uYXZiYXItdG9nZ2xlci1ib3JkZXItY29sb3IpOyAvLyByZW1vdmUgZGVmYXVsdCBidXR0b24gc3R5bGVcbiAgQGluY2x1ZGUgYm9yZGVyLXJhZGl1cyh2YXIoLS0jeyRwcmVmaXh9bmF2YmFyLXRvZ2dsZXItYm9yZGVyLXJhZGl1cykpO1xuICBAaW5jbHVkZSB0cmFuc2l0aW9uKHZhcigtLSN7JHByZWZpeH1uYXZiYXItdG9nZ2xlci10cmFuc2l0aW9uKSk7XG5cbiAgJjpob3ZlciB7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICB9XG5cbiAgJjpmb2N1cyB7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgIG91dGxpbmU6IDA7XG4gICAgYm94LXNoYWRvdzogMCAwIDAgdmFyKC0tI3skcHJlZml4fW5hdmJhci10b2dnbGVyLWZvY3VzLXdpZHRoKTtcbiAgfVxufVxuXG4vLyBLZWVwIGFzIGEgc2VwYXJhdGUgZWxlbWVudCBzbyBmb2xrcyBjYW4gZWFzaWx5IG92ZXJyaWRlIGl0IHdpdGggYW5vdGhlciBpY29uXG4vLyBvciBpbWFnZSBmaWxlIGFzIG5lZWRlZC5cbi5uYXZiYXItdG9nZ2xlci1pY29uIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB3aWR0aDogMS41ZW07XG4gIGhlaWdodDogMS41ZW07XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHZhcigtLSN7JHByZWZpeH1uYXZiYXItdG9nZ2xlci1pY29uLWJnKTtcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyO1xuICBiYWNrZ3JvdW5kLXNpemU6IDEwMCU7XG59XG5cbi5uYXZiYXItbmF2LXNjcm9sbCB7XG4gIG1heC1oZWlnaHQ6IHZhcigtLSN7JHByZWZpeH1zY3JvbGwtaGVpZ2h0LCA3NXZoKTtcbiAgb3ZlcmZsb3cteTogYXV0bztcbn1cblxuLy8gc2Nzcy1kb2NzLXN0YXJ0IG5hdmJhci1leHBhbmQtbG9vcFxuLy8gR2VuZXJhdGUgc2VyaWVzIG9mIGAubmF2YmFyLWV4cGFuZC0qYCByZXNwb25zaXZlIGNsYXNzZXMgZm9yIGNvbmZpZ3VyaW5nXG4vLyB3aGVyZSB5b3VyIG5hdmJhciBjb2xsYXBzZXMuXG4ubmF2YmFyLWV4cGFuZCB7XG4gIEBlYWNoICRicmVha3BvaW50IGluIG1hcC1rZXlzKCRncmlkLWJyZWFrcG9pbnRzKSB7XG4gICAgJG5leHQ6IGJyZWFrcG9pbnQtbmV4dCgkYnJlYWtwb2ludCwgJGdyaWQtYnJlYWtwb2ludHMpO1xuICAgICRpbmZpeDogYnJlYWtwb2ludC1pbmZpeCgkbmV4dCwgJGdyaWQtYnJlYWtwb2ludHMpO1xuXG4gICAgLy8gc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIHNjc3Mvc2VsZWN0b3Itbm8tdW5pb24tY2xhc3MtbmFtZVxuICAgICYjeyRpbmZpeH0ge1xuICAgICAgQGluY2x1ZGUgbWVkaWEtYnJlYWtwb2ludC11cCgkbmV4dCkge1xuICAgICAgICBmbGV4LXdyYXA6IG5vd3JhcDtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuXG4gICAgICAgIC5uYXZiYXItbmF2IHtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuXG4gICAgICAgICAgLmRyb3Bkb3duLW1lbnUge1xuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC5uYXYtbGluayB7XG4gICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiB2YXIoLS0jeyRwcmVmaXh9bmF2YmFyLW5hdi1saW5rLXBhZGRpbmcteCk7XG4gICAgICAgICAgICBwYWRkaW5nLWxlZnQ6IHZhcigtLSN7JHByZWZpeH1uYXZiYXItbmF2LWxpbmstcGFkZGluZy14KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAubmF2YmFyLW5hdi1zY3JvbGwge1xuICAgICAgICAgIG92ZXJmbG93OiB2aXNpYmxlO1xuICAgICAgICB9XG5cbiAgICAgICAgLm5hdmJhci1jb2xsYXBzZSB7XG4gICAgICAgICAgZGlzcGxheTogZmxleCAhaW1wb3J0YW50OyAvLyBzdHlsZWxpbnQtZGlzYWJsZS1saW5lIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudFxuICAgICAgICAgIGZsZXgtYmFzaXM6IGF1dG87XG4gICAgICAgIH1cblxuICAgICAgICAubmF2YmFyLXRvZ2dsZXIge1xuICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgIH1cblxuICAgICAgICAub2ZmY2FudmFzIHtcbiAgICAgICAgICAvLyBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnRcbiAgICAgICAgICBwb3NpdGlvbjogc3RhdGljO1xuICAgICAgICAgIHotaW5kZXg6IGF1dG87XG4gICAgICAgICAgZmxleC1ncm93OiAxO1xuICAgICAgICAgIHdpZHRoOiBhdXRvICFpbXBvcnRhbnQ7XG4gICAgICAgICAgaGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7XG4gICAgICAgICAgdmlzaWJpbGl0eTogdmlzaWJsZSAhaW1wb3J0YW50O1xuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG4gICAgICAgICAgYm9yZGVyOiAwICFpbXBvcnRhbnQ7XG4gICAgICAgICAgdHJhbnNmb3JtOiBub25lICFpbXBvcnRhbnQ7XG4gICAgICAgICAgQGluY2x1ZGUgYm94LXNoYWRvdyhub25lKTtcbiAgICAgICAgICBAaW5jbHVkZSB0cmFuc2l0aW9uKG5vbmUpO1xuICAgICAgICAgIC8vIHN0eWxlbGludC1lbmFibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50XG5cbiAgICAgICAgICAub2ZmY2FudmFzLWhlYWRlciB7XG4gICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC5vZmZjYW52YXMtYm9keSB7XG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgZmxleC1ncm93OiAwO1xuICAgICAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgICAgIG92ZXJmbG93LXk6IHZpc2libGU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4vLyBzY3NzLWRvY3MtZW5kIG5hdmJhci1leHBhbmQtbG9vcFxuXG4vLyBOYXZiYXIgdGhlbWVzXG4vL1xuLy8gU3R5bGVzIGZvciBzd2l0Y2hpbmcgYmV0d2VlbiBuYXZiYXJzIHdpdGggbGlnaHQgb3IgZGFyayBiYWNrZ3JvdW5kLlxuXG4ubmF2YmFyLWxpZ2h0IHtcbiAgQGluY2x1ZGUgZGVwcmVjYXRlKFwiYC5uYXZiYXItbGlnaHRgXCIsIFwidjUuMi4wXCIsIFwidjYuMC4wXCIsIHRydWUpO1xufVxuXG4ubmF2YmFyLWRhcmssXG4ubmF2YmFyW2RhdGEtYnMtdGhlbWU9XCJkYXJrXCJdIHtcbiAgLy8gc2Nzcy1kb2NzLXN0YXJ0IG5hdmJhci1kYXJrLWNzcy12YXJzXG4gIC0tI3skcHJlZml4fW5hdmJhci1jb2xvcjogI3skbmF2YmFyLWRhcmstY29sb3J9O1xuICAtLSN7JHByZWZpeH1uYXZiYXItaG92ZXItY29sb3I6ICN7JG5hdmJhci1kYXJrLWhvdmVyLWNvbG9yfTtcbiAgLS0jeyRwcmVmaXh9bmF2YmFyLWRpc2FibGVkLWNvbG9yOiAjeyRuYXZiYXItZGFyay1kaXNhYmxlZC1jb2xvcn07XG4gIC0tI3skcHJlZml4fW5hdmJhci1hY3RpdmUtY29sb3I6ICN7JG5hdmJhci1kYXJrLWFjdGl2ZS1jb2xvcn07XG4gIC0tI3skcHJlZml4fW5hdmJhci1icmFuZC1jb2xvcjogI3skbmF2YmFyLWRhcmstYnJhbmQtY29sb3J9O1xuICAtLSN7JHByZWZpeH1uYXZiYXItYnJhbmQtaG92ZXItY29sb3I6ICN7JG5hdmJhci1kYXJrLWJyYW5kLWhvdmVyLWNvbG9yfTtcbiAgLS0jeyRwcmVmaXh9bmF2YmFyLXRvZ2dsZXItYm9yZGVyLWNvbG9yOiAjeyRuYXZiYXItZGFyay10b2dnbGVyLWJvcmRlci1jb2xvcn07XG4gIC0tI3skcHJlZml4fW5hdmJhci10b2dnbGVyLWljb24tYmc6ICN7ZXNjYXBlLXN2ZygkbmF2YmFyLWRhcmstdG9nZ2xlci1pY29uLWJnKX07XG4gIC8vIHNjc3MtZG9jcy1lbmQgbmF2YmFyLWRhcmstY3NzLXZhcnNcbn1cblxuQGlmICRlbmFibGUtZGFyay1tb2RlIHtcbiAgQGluY2x1ZGUgY29sb3ItbW9kZShkYXJrKSB7XG4gICAgLm5hdmJhci10b2dnbGVyLWljb24ge1xuICAgICAgLS0jeyRwcmVmaXh9bmF2YmFyLXRvZ2dsZXItaWNvbi1iZzogI3tlc2NhcGUtc3ZnKCRuYXZiYXItZGFyay10b2dnbGVyLWljb24tYmcpfTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vXG4vLyBCYXNlIHN0eWxlc1xuLy9cblxuLmNhcmQge1xuICAvLyBzY3NzLWRvY3Mtc3RhcnQgY2FyZC1jc3MtdmFyc1xuICAtLSN7JHByZWZpeH1jYXJkLXNwYWNlci15OiAjeyRjYXJkLXNwYWNlci15fTtcbiAgLS0jeyRwcmVmaXh9Y2FyZC1zcGFjZXIteDogI3skY2FyZC1zcGFjZXIteH07XG4gIC0tI3skcHJlZml4fWNhcmQtdGl0bGUtc3BhY2VyLXk6ICN7JGNhcmQtdGl0bGUtc3BhY2VyLXl9O1xuICAtLSN7JHByZWZpeH1jYXJkLXRpdGxlLWNvbG9yOiAjeyRjYXJkLXRpdGxlLWNvbG9yfTtcbiAgLS0jeyRwcmVmaXh9Y2FyZC1zdWJ0aXRsZS1jb2xvcjogI3skY2FyZC1zdWJ0aXRsZS1jb2xvcn07XG4gIC0tI3skcHJlZml4fWNhcmQtYm9yZGVyLXdpZHRoOiAjeyRjYXJkLWJvcmRlci13aWR0aH07XG4gIC0tI3skcHJlZml4fWNhcmQtYm9yZGVyLWNvbG9yOiAjeyRjYXJkLWJvcmRlci1jb2xvcn07XG4gIC0tI3skcHJlZml4fWNhcmQtYm9yZGVyLXJhZGl1czogI3skY2FyZC1ib3JkZXItcmFkaXVzfTtcbiAgLS0jeyRwcmVmaXh9Y2FyZC1ib3gtc2hhZG93OiAjeyRjYXJkLWJveC1zaGFkb3d9O1xuICAtLSN7JHByZWZpeH1jYXJkLWlubmVyLWJvcmRlci1yYWRpdXM6ICN7JGNhcmQtaW5uZXItYm9yZGVyLXJhZGl1c307XG4gIC0tI3skcHJlZml4fWNhcmQtY2FwLXBhZGRpbmcteTogI3skY2FyZC1jYXAtcGFkZGluZy15fTtcbiAgLS0jeyRwcmVmaXh9Y2FyZC1jYXAtcGFkZGluZy14OiAjeyRjYXJkLWNhcC1wYWRkaW5nLXh9O1xuICAtLSN7JHByZWZpeH1jYXJkLWNhcC1iZzogI3skY2FyZC1jYXAtYmd9O1xuICAtLSN7JHByZWZpeH1jYXJkLWNhcC1jb2xvcjogI3skY2FyZC1jYXAtY29sb3J9O1xuICAtLSN7JHByZWZpeH1jYXJkLWhlaWdodDogI3skY2FyZC1oZWlnaHR9O1xuICAtLSN7JHByZWZpeH1jYXJkLWNvbG9yOiAjeyRjYXJkLWNvbG9yfTtcbiAgLS0jeyRwcmVmaXh9Y2FyZC1iZzogI3skY2FyZC1iZ307XG4gIC0tI3skcHJlZml4fWNhcmQtaW1nLW92ZXJsYXktcGFkZGluZzogI3skY2FyZC1pbWctb3ZlcmxheS1wYWRkaW5nfTtcbiAgLS0jeyRwcmVmaXh9Y2FyZC1ncm91cC1tYXJnaW46ICN7JGNhcmQtZ3JvdXAtbWFyZ2lufTtcbiAgLy8gc2Nzcy1kb2NzLWVuZCBjYXJkLWNzcy12YXJzXG5cbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBtaW4td2lkdGg6IDA7IC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvcHVsbC8yMjc0MCNpc3N1ZWNvbW1lbnQtMzA1ODY4MTA2XG4gIGhlaWdodDogdmFyKC0tI3skcHJlZml4fWNhcmQtaGVpZ2h0KTtcbiAgY29sb3I6IHZhcigtLSN7JHByZWZpeH1ib2R5LWNvbG9yKTtcbiAgd29yZC13cmFwOiBicmVhay13b3JkO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS0jeyRwcmVmaXh9Y2FyZC1iZyk7XG4gIGJhY2tncm91bmQtY2xpcDogYm9yZGVyLWJveDtcbiAgYm9yZGVyOiB2YXIoLS0jeyRwcmVmaXh9Y2FyZC1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLSN7JHByZWZpeH1jYXJkLWJvcmRlci1jb2xvcik7XG4gIEBpbmNsdWRlIGJvcmRlci1yYWRpdXModmFyKC0tI3skcHJlZml4fWNhcmQtYm9yZGVyLXJhZGl1cykpO1xuICBAaW5jbHVkZSBib3gtc2hhZG93KHZhcigtLSN7JHByZWZpeH1jYXJkLWJveC1zaGFkb3cpKTtcblxuICA+IGhyIHtcbiAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgbWFyZ2luLWxlZnQ6IDA7XG4gIH1cblxuICA+IC5saXN0LWdyb3VwIHtcbiAgICBib3JkZXItdG9wOiBpbmhlcml0O1xuICAgIGJvcmRlci1ib3R0b206IGluaGVyaXQ7XG5cbiAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgIGJvcmRlci10b3Atd2lkdGg6IDA7XG4gICAgICBAaW5jbHVkZSBib3JkZXItdG9wLXJhZGl1cyh2YXIoLS0jeyRwcmVmaXh9Y2FyZC1pbm5lci1ib3JkZXItcmFkaXVzKSk7XG4gICAgfVxuXG4gICAgJjpsYXN0LWNoaWxkICB7XG4gICAgICBib3JkZXItYm90dG9tLXdpZHRoOiAwO1xuICAgICAgQGluY2x1ZGUgYm9yZGVyLWJvdHRvbS1yYWRpdXModmFyKC0tI3skcHJlZml4fWNhcmQtaW5uZXItYm9yZGVyLXJhZGl1cykpO1xuICAgIH1cbiAgfVxuXG4gIC8vIER1ZSB0byBzcGVjaWZpY2l0eSBvZiB0aGUgYWJvdmUgc2VsZWN0b3IgKGAuY2FyZCA+IC5saXN0LWdyb3VwYCksIHdlIG11c3RcbiAgLy8gdXNlIGEgY2hpbGQgc2VsZWN0b3IgaGVyZSB0byBwcmV2ZW50IGRvdWJsZSBib3JkZXJzLlxuICA+IC5jYXJkLWhlYWRlciArIC5saXN0LWdyb3VwLFxuICA+IC5saXN0LWdyb3VwICsgLmNhcmQtZm9vdGVyIHtcbiAgICBib3JkZXItdG9wOiAwO1xuICB9XG59XG5cbi5jYXJkLWJvZHkge1xuICAvLyBFbmFibGUgYGZsZXgtZ3JvdzogMWAgZm9yIGRlY2tzIGFuZCBncm91cHMgc28gdGhhdCBjYXJkIGJsb2NrcyB0YWtlIHVwXG4gIC8vIGFzIG11Y2ggc3BhY2UgYXMgcG9zc2libGUsIGVuc3VyaW5nIGZvb3RlcnMgYXJlIGFsaWduZWQgdG8gdGhlIGJvdHRvbS5cbiAgZmxleDogMSAxIGF1dG87XG4gIHBhZGRpbmc6IHZhcigtLSN7JHByZWZpeH1jYXJkLXNwYWNlci15KSB2YXIoLS0jeyRwcmVmaXh9Y2FyZC1zcGFjZXIteCk7XG4gIGNvbG9yOiB2YXIoLS0jeyRwcmVmaXh9Y2FyZC1jb2xvcik7XG59XG5cbi5jYXJkLXRpdGxlIHtcbiAgbWFyZ2luLWJvdHRvbTogdmFyKC0tI3skcHJlZml4fWNhcmQtdGl0bGUtc3BhY2VyLXkpO1xuICBjb2xvcjogdmFyKC0tI3skcHJlZml4fWNhcmQtdGl0bGUtY29sb3IpO1xufVxuXG4uY2FyZC1zdWJ0aXRsZSB7XG4gIG1hcmdpbi10b3A6IGNhbGMoLS41ICogdmFyKC0tI3skcHJlZml4fWNhcmQtdGl0bGUtc3BhY2VyLXkpKTsgLy8gc3R5bGVsaW50LWRpc2FibGUtbGluZSBmdW5jdGlvbi1kaXNhbGxvd2VkLWxpc3RcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgY29sb3I6IHZhcigtLSN7JHByZWZpeH1jYXJkLXN1YnRpdGxlLWNvbG9yKTtcbn1cblxuLmNhcmQtdGV4dDpsYXN0LWNoaWxkIHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbn1cblxuLmNhcmQtbGluayB7XG4gICY6aG92ZXIge1xuICAgIHRleHQtZGVjb3JhdGlvbjogaWYoJGxpbmstaG92ZXItZGVjb3JhdGlvbiA9PSB1bmRlcmxpbmUsIG5vbmUsIG51bGwpO1xuICB9XG5cbiAgKyAuY2FyZC1saW5rIHtcbiAgICBtYXJnaW4tbGVmdDogdmFyKC0tI3skcHJlZml4fWNhcmQtc3BhY2VyLXgpO1xuICB9XG59XG5cbi8vXG4vLyBPcHRpb25hbCB0ZXh0dWFsIGNhcHNcbi8vXG5cbi5jYXJkLWhlYWRlciB7XG4gIHBhZGRpbmc6IHZhcigtLSN7JHByZWZpeH1jYXJkLWNhcC1wYWRkaW5nLXkpIHZhcigtLSN7JHByZWZpeH1jYXJkLWNhcC1wYWRkaW5nLXgpO1xuICBtYXJnaW4tYm90dG9tOiAwOyAvLyBSZW1vdmVzIHRoZSBkZWZhdWx0IG1hcmdpbi1ib3R0b20gb2YgPGhOPlxuICBjb2xvcjogdmFyKC0tI3skcHJlZml4fWNhcmQtY2FwLWNvbG9yKTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tI3skcHJlZml4fWNhcmQtY2FwLWJnKTtcbiAgYm9yZGVyLWJvdHRvbTogdmFyKC0tI3skcHJlZml4fWNhcmQtYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS0jeyRwcmVmaXh9Y2FyZC1ib3JkZXItY29sb3IpO1xuXG4gICY6Zmlyc3QtY2hpbGQge1xuICAgIEBpbmNsdWRlIGJvcmRlci1yYWRpdXModmFyKC0tI3skcHJlZml4fWNhcmQtaW5uZXItYm9yZGVyLXJhZGl1cykgdmFyKC0tI3skcHJlZml4fWNhcmQtaW5uZXItYm9yZGVyLXJhZGl1cykgMCAwKTtcbiAgfVxufVxuXG4uY2FyZC1mb290ZXIge1xuICBwYWRkaW5nOiB2YXIoLS0jeyRwcmVmaXh9Y2FyZC1jYXAtcGFkZGluZy15KSB2YXIoLS0jeyRwcmVmaXh9Y2FyZC1jYXAtcGFkZGluZy14KTtcbiAgY29sb3I6IHZhcigtLSN7JHByZWZpeH1jYXJkLWNhcC1jb2xvcik7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLSN7JHByZWZpeH1jYXJkLWNhcC1iZyk7XG4gIGJvcmRlci10b3A6IHZhcigtLSN7JHByZWZpeH1jYXJkLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tI3skcHJlZml4fWNhcmQtYm9yZGVyLWNvbG9yKTtcblxuICAmOmxhc3QtY2hpbGQge1xuICAgIEBpbmNsdWRlIGJvcmRlci1yYWRpdXMoMCAwIHZhcigtLSN7JHByZWZpeH1jYXJkLWlubmVyLWJvcmRlci1yYWRpdXMpIHZhcigtLSN7JHByZWZpeH1jYXJkLWlubmVyLWJvcmRlci1yYWRpdXMpKTtcbiAgfVxufVxuXG5cbi8vXG4vLyBIZWFkZXIgbmF2c1xuLy9cblxuLmNhcmQtaGVhZGVyLXRhYnMge1xuICBtYXJnaW4tcmlnaHQ6IGNhbGMoLS41ICogdmFyKC0tI3skcHJlZml4fWNhcmQtY2FwLXBhZGRpbmcteCkpOyAvLyBzdHlsZWxpbnQtZGlzYWJsZS1saW5lIGZ1bmN0aW9uLWRpc2FsbG93ZWQtbGlzdFxuICBtYXJnaW4tYm90dG9tOiBjYWxjKC0xICogdmFyKC0tI3skcHJlZml4fWNhcmQtY2FwLXBhZGRpbmcteSkpOyAvLyBzdHlsZWxpbnQtZGlzYWJsZS1saW5lIGZ1bmN0aW9uLWRpc2FsbG93ZWQtbGlzdFxuICBtYXJnaW4tbGVmdDogY2FsYygtLjUgKiB2YXIoLS0jeyRwcmVmaXh9Y2FyZC1jYXAtcGFkZGluZy14KSk7IC8vIHN0eWxlbGludC1kaXNhYmxlLWxpbmUgZnVuY3Rpb24tZGlzYWxsb3dlZC1saXN0XG4gIGJvcmRlci1ib3R0b206IDA7XG5cbiAgLm5hdi1saW5rLmFjdGl2ZSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tI3skcHJlZml4fWNhcmQtYmcpO1xuICAgIGJvcmRlci1ib3R0b20tY29sb3I6IHZhcigtLSN7JHByZWZpeH1jYXJkLWJnKTtcbiAgfVxufVxuXG4uY2FyZC1oZWFkZXItcGlsbHMge1xuICBtYXJnaW4tcmlnaHQ6IGNhbGMoLS41ICogdmFyKC0tI3skcHJlZml4fWNhcmQtY2FwLXBhZGRpbmcteCkpOyAvLyBzdHlsZWxpbnQtZGlzYWJsZS1saW5lIGZ1bmN0aW9uLWRpc2FsbG93ZWQtbGlzdFxuICBtYXJnaW4tbGVmdDogY2FsYygtLjUgKiB2YXIoLS0jeyRwcmVmaXh9Y2FyZC1jYXAtcGFkZGluZy14KSk7IC8vIHN0eWxlbGludC1kaXNhYmxlLWxpbmUgZnVuY3Rpb24tZGlzYWxsb3dlZC1saXN0XG59XG5cbi8vIENhcmQgaW1hZ2Vcbi5jYXJkLWltZy1vdmVybGF5IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIHJpZ2h0OiAwO1xuICBib3R0b206IDA7XG4gIGxlZnQ6IDA7XG4gIHBhZGRpbmc6IHZhcigtLSN7JHByZWZpeH1jYXJkLWltZy1vdmVybGF5LXBhZGRpbmcpO1xuICBAaW5jbHVkZSBib3JkZXItcmFkaXVzKHZhcigtLSN7JHByZWZpeH1jYXJkLWlubmVyLWJvcmRlci1yYWRpdXMpKTtcbn1cblxuLmNhcmQtaW1nLFxuLmNhcmQtaW1nLXRvcCxcbi5jYXJkLWltZy1ib3R0b20ge1xuICB3aWR0aDogMTAwJTsgLy8gUmVxdWlyZWQgYmVjYXVzZSB3ZSB1c2UgZmxleGJveCBhbmQgdGhpcyBpbmhlcmVudGx5IGFwcGxpZXMgYWxpZ24tc2VsZjogc3RyZXRjaFxufVxuXG4uY2FyZC1pbWcsXG4uY2FyZC1pbWctdG9wIHtcbiAgQGluY2x1ZGUgYm9yZGVyLXRvcC1yYWRpdXModmFyKC0tI3skcHJlZml4fWNhcmQtaW5uZXItYm9yZGVyLXJhZGl1cykpO1xufVxuXG4uY2FyZC1pbWcsXG4uY2FyZC1pbWctYm90dG9tIHtcbiAgQGluY2x1ZGUgYm9yZGVyLWJvdHRvbS1yYWRpdXModmFyKC0tI3skcHJlZml4fWNhcmQtaW5uZXItYm9yZGVyLXJhZGl1cykpO1xufVxuXG5cbi8vXG4vLyBDYXJkIGdyb3Vwc1xuLy9cblxuLmNhcmQtZ3JvdXAge1xuICAvLyBUaGUgY2hpbGQgc2VsZWN0b3IgYWxsb3dzIG5lc3RlZCBgLmNhcmRgIHdpdGhpbiBgLmNhcmQtZ3JvdXBgXG4gIC8vIHRvIGRpc3BsYXkgcHJvcGVybHkuXG4gID4gLmNhcmQge1xuICAgIG1hcmdpbi1ib3R0b206IHZhcigtLSN7JHByZWZpeH1jYXJkLWdyb3VwLW1hcmdpbik7XG4gIH1cblxuICBAaW5jbHVkZSBtZWRpYS1icmVha3BvaW50LXVwKHNtKSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWZsb3c6IHJvdyB3cmFwO1xuICAgIC8vIFRoZSBjaGlsZCBzZWxlY3RvciBhbGxvd3MgbmVzdGVkIGAuY2FyZGAgd2l0aGluIGAuY2FyZC1ncm91cGBcbiAgICAvLyB0byBkaXNwbGF5IHByb3Blcmx5LlxuICAgID4gLmNhcmQge1xuICAgICAgLy8gRmxleGJ1Z3MgIzQ6IGh0dHBzOi8vZ2l0aHViLmNvbS9waGlsaXB3YWx0b24vZmxleGJ1Z3MjZmxleGJ1Zy00XG4gICAgICBmbGV4OiAxIDAgMCU7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwO1xuXG4gICAgICArIC5jYXJkIHtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgICAgIGJvcmRlci1sZWZ0OiAwO1xuICAgICAgfVxuXG4gICAgICAvLyBIYW5kbGUgcm91bmRlZCBjb3JuZXJzXG4gICAgICBAaWYgJGVuYWJsZS1yb3VuZGVkIHtcbiAgICAgICAgJjpub3QoOmxhc3QtY2hpbGQpIHtcbiAgICAgICAgICBAaW5jbHVkZSBib3JkZXItZW5kLXJhZGl1cygwKTtcblxuICAgICAgICAgIC5jYXJkLWltZy10b3AsXG4gICAgICAgICAgLmNhcmQtaGVhZGVyIHtcbiAgICAgICAgICAgIC8vIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBwcm9wZXJ0eS1kaXNhbGxvd2VkLWxpc3RcbiAgICAgICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwO1xuICAgICAgICAgIH1cbiAgICAgICAgICAuY2FyZC1pbWctYm90dG9tLFxuICAgICAgICAgIC5jYXJkLWZvb3RlciB7XG4gICAgICAgICAgICAvLyBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJvcGVydHktZGlzYWxsb3dlZC1saXN0XG4gICAgICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmOm5vdCg6Zmlyc3QtY2hpbGQpIHtcbiAgICAgICAgICBAaW5jbHVkZSBib3JkZXItc3RhcnQtcmFkaXVzKDApO1xuXG4gICAgICAgICAgLmNhcmQtaW1nLXRvcCxcbiAgICAgICAgICAuY2FyZC1oZWFkZXIge1xuICAgICAgICAgICAgLy8gc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIHByb3BlcnR5LWRpc2FsbG93ZWQtbGlzdFxuICAgICAgICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDtcbiAgICAgICAgICB9XG4gICAgICAgICAgLmNhcmQtaW1nLWJvdHRvbSxcbiAgICAgICAgICAuY2FyZC1mb290ZXIge1xuICAgICAgICAgICAgLy8gc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIHByb3BlcnR5LWRpc2FsbG93ZWQtbGlzdFxuICAgICAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIi8vXG4vLyBCYXNlIHN0eWxlc1xuLy9cblxuLmFjY29yZGlvbiB7XG4gIC8vIHNjc3MtZG9jcy1zdGFydCBhY2NvcmRpb24tY3NzLXZhcnNcbiAgLS0jeyRwcmVmaXh9YWNjb3JkaW9uLWNvbG9yOiAjeyRhY2NvcmRpb24tY29sb3J9O1xuICAtLSN7JHByZWZpeH1hY2NvcmRpb24tYmc6ICN7JGFjY29yZGlvbi1iZ307XG4gIC0tI3skcHJlZml4fWFjY29yZGlvbi10cmFuc2l0aW9uOiAjeyRhY2NvcmRpb24tdHJhbnNpdGlvbn07XG4gIC0tI3skcHJlZml4fWFjY29yZGlvbi1ib3JkZXItY29sb3I6ICN7JGFjY29yZGlvbi1ib3JkZXItY29sb3J9O1xuICAtLSN7JHByZWZpeH1hY2NvcmRpb24tYm9yZGVyLXdpZHRoOiAjeyRhY2NvcmRpb24tYm9yZGVyLXdpZHRofTtcbiAgLS0jeyRwcmVmaXh9YWNjb3JkaW9uLWJvcmRlci1yYWRpdXM6ICN7JGFjY29yZGlvbi1ib3JkZXItcmFkaXVzfTtcbiAgLS0jeyRwcmVmaXh9YWNjb3JkaW9uLWlubmVyLWJvcmRlci1yYWRpdXM6ICN7JGFjY29yZGlvbi1pbm5lci1ib3JkZXItcmFkaXVzfTtcbiAgLS0jeyRwcmVmaXh9YWNjb3JkaW9uLWJ0bi1wYWRkaW5nLXg6ICN7JGFjY29yZGlvbi1idXR0b24tcGFkZGluZy14fTtcbiAgLS0jeyRwcmVmaXh9YWNjb3JkaW9uLWJ0bi1wYWRkaW5nLXk6ICN7JGFjY29yZGlvbi1idXR0b24tcGFkZGluZy15fTtcbiAgLS0jeyRwcmVmaXh9YWNjb3JkaW9uLWJ0bi1jb2xvcjogI3skYWNjb3JkaW9uLWJ1dHRvbi1jb2xvcn07XG4gIC0tI3skcHJlZml4fWFjY29yZGlvbi1idG4tYmc6ICN7JGFjY29yZGlvbi1idXR0b24tYmd9O1xuICAtLSN7JHByZWZpeH1hY2NvcmRpb24tYnRuLWljb246ICN7ZXNjYXBlLXN2ZygkYWNjb3JkaW9uLWJ1dHRvbi1pY29uKX07XG4gIC0tI3skcHJlZml4fWFjY29yZGlvbi1idG4taWNvbi13aWR0aDogI3skYWNjb3JkaW9uLWljb24td2lkdGh9O1xuICAtLSN7JHByZWZpeH1hY2NvcmRpb24tYnRuLWljb24tdHJhbnNmb3JtOiAjeyRhY2NvcmRpb24taWNvbi10cmFuc2Zvcm19O1xuICAtLSN7JHByZWZpeH1hY2NvcmRpb24tYnRuLWljb24tdHJhbnNpdGlvbjogI3skYWNjb3JkaW9uLWljb24tdHJhbnNpdGlvbn07XG4gIC0tI3skcHJlZml4fWFjY29yZGlvbi1idG4tYWN0aXZlLWljb246ICN7ZXNjYXBlLXN2ZygkYWNjb3JkaW9uLWJ1dHRvbi1hY3RpdmUtaWNvbil9O1xuICAtLSN7JHByZWZpeH1hY2NvcmRpb24tYnRuLWZvY3VzLWJveC1zaGFkb3c6ICN7JGFjY29yZGlvbi1idXR0b24tZm9jdXMtYm94LXNoYWRvd307XG4gIC0tI3skcHJlZml4fWFjY29yZGlvbi1ib2R5LXBhZGRpbmcteDogI3skYWNjb3JkaW9uLWJvZHktcGFkZGluZy14fTtcbiAgLS0jeyRwcmVmaXh9YWNjb3JkaW9uLWJvZHktcGFkZGluZy15OiAjeyRhY2NvcmRpb24tYm9keS1wYWRkaW5nLXl9O1xuICAtLSN7JHByZWZpeH1hY2NvcmRpb24tYWN0aXZlLWNvbG9yOiAjeyRhY2NvcmRpb24tYnV0dG9uLWFjdGl2ZS1jb2xvcn07XG4gIC0tI3skcHJlZml4fWFjY29yZGlvbi1hY3RpdmUtYmc6ICN7JGFjY29yZGlvbi1idXR0b24tYWN0aXZlLWJnfTtcbiAgLy8gc2Nzcy1kb2NzLWVuZCBhY2NvcmRpb24tY3NzLXZhcnNcbn1cblxuLmFjY29yZGlvbi1idXR0b24ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHdpZHRoOiAxMDAlO1xuICBwYWRkaW5nOiB2YXIoLS0jeyRwcmVmaXh9YWNjb3JkaW9uLWJ0bi1wYWRkaW5nLXkpIHZhcigtLSN7JHByZWZpeH1hY2NvcmRpb24tYnRuLXBhZGRpbmcteCk7XG4gIEBpbmNsdWRlIGZvbnQtc2l6ZSgkZm9udC1zaXplLWJhc2UpO1xuICBjb2xvcjogdmFyKC0tI3skcHJlZml4fWFjY29yZGlvbi1idG4tY29sb3IpO1xuICB0ZXh0LWFsaWduOiBsZWZ0OyAvLyBSZXNldCBidXR0b24gc3R5bGVcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tI3skcHJlZml4fWFjY29yZGlvbi1idG4tYmcpO1xuICBib3JkZXI6IDA7XG4gIEBpbmNsdWRlIGJvcmRlci1yYWRpdXMoMCk7XG4gIG92ZXJmbG93LWFuY2hvcjogbm9uZTtcbiAgQGluY2x1ZGUgdHJhbnNpdGlvbih2YXIoLS0jeyRwcmVmaXh9YWNjb3JkaW9uLXRyYW5zaXRpb24pKTtcblxuICAmOm5vdCguY29sbGFwc2VkKSB7XG4gICAgY29sb3I6IHZhcigtLSN7JHByZWZpeH1hY2NvcmRpb24tYWN0aXZlLWNvbG9yKTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS0jeyRwcmVmaXh9YWNjb3JkaW9uLWFjdGl2ZS1iZyk7XG4gICAgYm94LXNoYWRvdzogaW5zZXQgMCBjYWxjKC0xICogdmFyKC0tI3skcHJlZml4fWFjY29yZGlvbi1ib3JkZXItd2lkdGgpKSAwIHZhcigtLSN7JHByZWZpeH1hY2NvcmRpb24tYm9yZGVyLWNvbG9yKTsgLy8gc3R5bGVsaW50LWRpc2FibGUtbGluZSBmdW5jdGlvbi1kaXNhbGxvd2VkLWxpc3RcblxuICAgICY6OmFmdGVyIHtcbiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHZhcigtLSN7JHByZWZpeH1hY2NvcmRpb24tYnRuLWFjdGl2ZS1pY29uKTtcbiAgICAgIHRyYW5zZm9ybTogdmFyKC0tI3skcHJlZml4fWFjY29yZGlvbi1idG4taWNvbi10cmFuc2Zvcm0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIEFjY29yZGlvbiBpY29uXG4gICY6OmFmdGVyIHtcbiAgICBmbGV4LXNocmluazogMDtcbiAgICB3aWR0aDogdmFyKC0tI3skcHJlZml4fWFjY29yZGlvbi1idG4taWNvbi13aWR0aCk7XG4gICAgaGVpZ2h0OiB2YXIoLS0jeyRwcmVmaXh9YWNjb3JkaW9uLWJ0bi1pY29uLXdpZHRoKTtcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgICBjb250ZW50OiBcIlwiO1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHZhcigtLSN7JHByZWZpeH1hY2NvcmRpb24tYnRuLWljb24pO1xuICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgYmFja2dyb3VuZC1zaXplOiB2YXIoLS0jeyRwcmVmaXh9YWNjb3JkaW9uLWJ0bi1pY29uLXdpZHRoKTtcbiAgICBAaW5jbHVkZSB0cmFuc2l0aW9uKHZhcigtLSN7JHByZWZpeH1hY2NvcmRpb24tYnRuLWljb24tdHJhbnNpdGlvbikpO1xuICB9XG5cbiAgJjpob3ZlciB7XG4gICAgei1pbmRleDogMjtcbiAgfVxuXG4gICY6Zm9jdXMge1xuICAgIHotaW5kZXg6IDM7XG4gICAgb3V0bGluZTogMDtcbiAgICBib3gtc2hhZG93OiB2YXIoLS0jeyRwcmVmaXh9YWNjb3JkaW9uLWJ0bi1mb2N1cy1ib3gtc2hhZG93KTtcbiAgfVxufVxuXG4uYWNjb3JkaW9uLWhlYWRlciB7XG4gIG1hcmdpbi1ib3R0b206IDA7XG59XG5cbi5hY2NvcmRpb24taXRlbSB7XG4gIGNvbG9yOiB2YXIoLS0jeyRwcmVmaXh9YWNjb3JkaW9uLWNvbG9yKTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tI3skcHJlZml4fWFjY29yZGlvbi1iZyk7XG4gIGJvcmRlcjogdmFyKC0tI3skcHJlZml4fWFjY29yZGlvbi1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLSN7JHByZWZpeH1hY2NvcmRpb24tYm9yZGVyLWNvbG9yKTtcblxuICAmOmZpcnN0LW9mLXR5cGUge1xuICAgIEBpbmNsdWRlIGJvcmRlci10b3AtcmFkaXVzKHZhcigtLSN7JHByZWZpeH1hY2NvcmRpb24tYm9yZGVyLXJhZGl1cykpO1xuXG4gICAgPiAuYWNjb3JkaW9uLWhlYWRlciAuYWNjb3JkaW9uLWJ1dHRvbiB7XG4gICAgICBAaW5jbHVkZSBib3JkZXItdG9wLXJhZGl1cyh2YXIoLS0jeyRwcmVmaXh9YWNjb3JkaW9uLWlubmVyLWJvcmRlci1yYWRpdXMpKTtcbiAgICB9XG4gIH1cblxuICAmOm5vdCg6Zmlyc3Qtb2YtdHlwZSkge1xuICAgIGJvcmRlci10b3A6IDA7XG4gIH1cblxuICAvLyBPbmx5IHNldCBhIGJvcmRlci1yYWRpdXMgb24gdGhlIGxhc3QgaXRlbSBpZiB0aGUgYWNjb3JkaW9uIGlzIGNvbGxhcHNlZFxuICAmOmxhc3Qtb2YtdHlwZSB7XG4gICAgQGluY2x1ZGUgYm9yZGVyLWJvdHRvbS1yYWRpdXModmFyKC0tI3skcHJlZml4fWFjY29yZGlvbi1ib3JkZXItcmFkaXVzKSk7XG5cbiAgICA+IC5hY2NvcmRpb24taGVhZGVyIC5hY2NvcmRpb24tYnV0dG9uIHtcbiAgICAgICYuY29sbGFwc2VkIHtcbiAgICAgICAgQGluY2x1ZGUgYm9yZGVyLWJvdHRvbS1yYWRpdXModmFyKC0tI3skcHJlZml4fWFjY29yZGlvbi1pbm5lci1ib3JkZXItcmFkaXVzKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgPiAuYWNjb3JkaW9uLWNvbGxhcHNlIHtcbiAgICAgIEBpbmNsdWRlIGJvcmRlci1ib3R0b20tcmFkaXVzKHZhcigtLSN7JHByZWZpeH1hY2NvcmRpb24tYm9yZGVyLXJhZGl1cykpO1xuICAgIH1cbiAgfVxufVxuXG4uYWNjb3JkaW9uLWJvZHkge1xuICBwYWRkaW5nOiB2YXIoLS0jeyRwcmVmaXh9YWNjb3JkaW9uLWJvZHktcGFkZGluZy15KSB2YXIoLS0jeyRwcmVmaXh9YWNjb3JkaW9uLWJvZHktcGFkZGluZy14KTtcbn1cblxuXG4vLyBGbHVzaCBhY2NvcmRpb24gaXRlbXNcbi8vXG4vLyBSZW1vdmUgYm9yZGVycyBhbmQgYm9yZGVyLXJhZGl1cyB0byBrZWVwIGFjY29yZGlvbiBpdGVtcyBlZGdlLXRvLWVkZ2UuXG5cbi5hY2NvcmRpb24tZmx1c2gge1xuICA+IC5hY2NvcmRpb24taXRlbSB7XG4gICAgYm9yZGVyLXJpZ2h0OiAwO1xuICAgIGJvcmRlci1sZWZ0OiAwO1xuICAgIEBpbmNsdWRlIGJvcmRlci1yYWRpdXMoMCk7XG5cbiAgICAmOmZpcnN0LWNoaWxkIHsgYm9yZGVyLXRvcDogMDsgfVxuICAgICY6bGFzdC1jaGlsZCB7IGJvcmRlci1ib3R0b206IDA7IH1cblxuICAgIC8vIHN0eWxlbGludC1kaXNhYmxlIHNlbGVjdG9yLW1heC1jbGFzc1xuICAgID4gLmFjY29yZGlvbi1oZWFkZXIgLmFjY29yZGlvbi1idXR0b24ge1xuICAgICAgJixcbiAgICAgICYuY29sbGFwc2VkIHtcbiAgICAgICAgQGluY2x1ZGUgYm9yZGVyLXJhZGl1cygwKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gc3R5bGVsaW50LWVuYWJsZSBzZWxlY3Rvci1tYXgtY2xhc3NcblxuICAgID4gLmFjY29yZGlvbi1jb2xsYXBzZSB7XG4gICAgICBAaW5jbHVkZSBib3JkZXItcmFkaXVzKDApO1xuICAgIH1cbiAgfVxufVxuXG5AaWYgJGVuYWJsZS1kYXJrLW1vZGUge1xuICBAaW5jbHVkZSBjb2xvci1tb2RlKGRhcmspIHtcbiAgICAuYWNjb3JkaW9uLWJ1dHRvbjo6YWZ0ZXIge1xuICAgICAgLS0jeyRwcmVmaXh9YWNjb3JkaW9uLWJ0bi1pY29uOiAje2VzY2FwZS1zdmcoJGFjY29yZGlvbi1idXR0b24taWNvbi1kYXJrKX07XG4gICAgICAtLSN7JHByZWZpeH1hY2NvcmRpb24tYnRuLWFjdGl2ZS1pY29uOiAje2VzY2FwZS1zdmcoJGFjY29yZGlvbi1idXR0b24tYWN0aXZlLWljb24tZGFyayl9O1xuICAgIH1cbiAgfVxufVxuIiwiLmJyZWFkY3J1bWIge1xuICAvLyBzY3NzLWRvY3Mtc3RhcnQgYnJlYWRjcnVtYi1jc3MtdmFyc1xuICAtLSN7JHByZWZpeH1icmVhZGNydW1iLXBhZGRpbmcteDogI3skYnJlYWRjcnVtYi1wYWRkaW5nLXh9O1xuICAtLSN7JHByZWZpeH1icmVhZGNydW1iLXBhZGRpbmcteTogI3skYnJlYWRjcnVtYi1wYWRkaW5nLXl9O1xuICAtLSN7JHByZWZpeH1icmVhZGNydW1iLW1hcmdpbi1ib3R0b206ICN7JGJyZWFkY3J1bWItbWFyZ2luLWJvdHRvbX07XG4gIEBpbmNsdWRlIHJmcygkYnJlYWRjcnVtYi1mb250LXNpemUsIC0tI3skcHJlZml4fWJyZWFkY3J1bWItZm9udC1zaXplKTtcbiAgLS0jeyRwcmVmaXh9YnJlYWRjcnVtYi1iZzogI3skYnJlYWRjcnVtYi1iZ307XG4gIC0tI3skcHJlZml4fWJyZWFkY3J1bWItYm9yZGVyLXJhZGl1czogI3skYnJlYWRjcnVtYi1ib3JkZXItcmFkaXVzfTtcbiAgLS0jeyRwcmVmaXh9YnJlYWRjcnVtYi1kaXZpZGVyLWNvbG9yOiAjeyRicmVhZGNydW1iLWRpdmlkZXItY29sb3J9O1xuICAtLSN7JHByZWZpeH1icmVhZGNydW1iLWl0ZW0tcGFkZGluZy14OiAjeyRicmVhZGNydW1iLWl0ZW0tcGFkZGluZy14fTtcbiAgLS0jeyRwcmVmaXh9YnJlYWRjcnVtYi1pdGVtLWFjdGl2ZS1jb2xvcjogI3skYnJlYWRjcnVtYi1hY3RpdmUtY29sb3J9O1xuICAvLyBzY3NzLWRvY3MtZW5kIGJyZWFkY3J1bWItY3NzLXZhcnNcblxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIHBhZGRpbmc6IHZhcigtLSN7JHByZWZpeH1icmVhZGNydW1iLXBhZGRpbmcteSkgdmFyKC0tI3skcHJlZml4fWJyZWFkY3J1bWItcGFkZGluZy14KTtcbiAgbWFyZ2luLWJvdHRvbTogdmFyKC0tI3skcHJlZml4fWJyZWFkY3J1bWItbWFyZ2luLWJvdHRvbSk7XG4gIEBpbmNsdWRlIGZvbnQtc2l6ZSh2YXIoLS0jeyRwcmVmaXh9YnJlYWRjcnVtYi1mb250LXNpemUpKTtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tI3skcHJlZml4fWJyZWFkY3J1bWItYmcpO1xuICBAaW5jbHVkZSBib3JkZXItcmFkaXVzKHZhcigtLSN7JHByZWZpeH1icmVhZGNydW1iLWJvcmRlci1yYWRpdXMpKTtcbn1cblxuLmJyZWFkY3J1bWItaXRlbSB7XG4gIC8vIFRoZSBzZXBhcmF0b3IgYmV0d2VlbiBicmVhZGNydW1icyAoYnkgZGVmYXVsdCwgYSBmb3J3YXJkLXNsYXNoOiBcIi9cIilcbiAgKyAuYnJlYWRjcnVtYi1pdGVtIHtcbiAgICBwYWRkaW5nLWxlZnQ6IHZhcigtLSN7JHByZWZpeH1icmVhZGNydW1iLWl0ZW0tcGFkZGluZy14KTtcblxuICAgICY6OmJlZm9yZSB7XG4gICAgICBmbG9hdDogbGVmdDsgLy8gU3VwcHJlc3MgaW5saW5lIHNwYWNpbmdzIGFuZCB1bmRlcmxpbmluZyBvZiB0aGUgc2VwYXJhdG9yXG4gICAgICBwYWRkaW5nLXJpZ2h0OiB2YXIoLS0jeyRwcmVmaXh9YnJlYWRjcnVtYi1pdGVtLXBhZGRpbmcteCk7XG4gICAgICBjb2xvcjogdmFyKC0tI3skcHJlZml4fWJyZWFkY3J1bWItZGl2aWRlci1jb2xvcik7XG4gICAgICBjb250ZW50OiB2YXIoLS0jeyRwcmVmaXh9YnJlYWRjcnVtYi1kaXZpZGVyLCBlc2NhcGUtc3ZnKCRicmVhZGNydW1iLWRpdmlkZXIpKSAje1wiLyogcnRsOlwifSB2YXIoLS0jeyRwcmVmaXh9YnJlYWRjcnVtYi1kaXZpZGVyLCBlc2NhcGUtc3ZnKCRicmVhZGNydW1iLWRpdmlkZXItZmxpcHBlZCkpICN7XCIqL1wifTtcbiAgICB9XG4gIH1cblxuICAmLmFjdGl2ZSB7XG4gICAgY29sb3I6IHZhcigtLSN7JHByZWZpeH1icmVhZGNydW1iLWl0ZW0tYWN0aXZlLWNvbG9yKTtcbiAgfVxufVxuIiwiLnBhZ2luYXRpb24ge1xuICAvLyBzY3NzLWRvY3Mtc3RhcnQgcGFnaW5hdGlvbi1jc3MtdmFyc1xuICAtLSN7JHByZWZpeH1wYWdpbmF0aW9uLXBhZGRpbmcteDogI3skcGFnaW5hdGlvbi1wYWRkaW5nLXh9O1xuICAtLSN7JHByZWZpeH1wYWdpbmF0aW9uLXBhZGRpbmcteTogI3skcGFnaW5hdGlvbi1wYWRkaW5nLXl9O1xuICBAaW5jbHVkZSByZnMoJHBhZ2luYXRpb24tZm9udC1zaXplLCAtLSN7JHByZWZpeH1wYWdpbmF0aW9uLWZvbnQtc2l6ZSk7XG4gIC0tI3skcHJlZml4fXBhZ2luYXRpb24tY29sb3I6ICN7JHBhZ2luYXRpb24tY29sb3J9O1xuICAtLSN7JHByZWZpeH1wYWdpbmF0aW9uLWJnOiAjeyRwYWdpbmF0aW9uLWJnfTtcbiAgLS0jeyRwcmVmaXh9cGFnaW5hdGlvbi1ib3JkZXItd2lkdGg6ICN7JHBhZ2luYXRpb24tYm9yZGVyLXdpZHRofTtcbiAgLS0jeyRwcmVmaXh9cGFnaW5hdGlvbi1ib3JkZXItY29sb3I6ICN7JHBhZ2luYXRpb24tYm9yZGVyLWNvbG9yfTtcbiAgLS0jeyRwcmVmaXh9cGFnaW5hdGlvbi1ib3JkZXItcmFkaXVzOiAjeyRwYWdpbmF0aW9uLWJvcmRlci1yYWRpdXN9O1xuICAtLSN7JHByZWZpeH1wYWdpbmF0aW9uLWhvdmVyLWNvbG9yOiAjeyRwYWdpbmF0aW9uLWhvdmVyLWNvbG9yfTtcbiAgLS0jeyRwcmVmaXh9cGFnaW5hdGlvbi1ob3Zlci1iZzogI3skcGFnaW5hdGlvbi1ob3Zlci1iZ307XG4gIC0tI3skcHJlZml4fXBhZ2luYXRpb24taG92ZXItYm9yZGVyLWNvbG9yOiAjeyRwYWdpbmF0aW9uLWhvdmVyLWJvcmRlci1jb2xvcn07XG4gIC0tI3skcHJlZml4fXBhZ2luYXRpb24tZm9jdXMtY29sb3I6ICN7JHBhZ2luYXRpb24tZm9jdXMtY29sb3J9O1xuICAtLSN7JHByZWZpeH1wYWdpbmF0aW9uLWZvY3VzLWJnOiAjeyRwYWdpbmF0aW9uLWZvY3VzLWJnfTtcbiAgLS0jeyRwcmVmaXh9cGFnaW5hdGlvbi1mb2N1cy1ib3gtc2hhZG93OiAjeyRwYWdpbmF0aW9uLWZvY3VzLWJveC1zaGFkb3d9O1xuICAtLSN7JHByZWZpeH1wYWdpbmF0aW9uLWFjdGl2ZS1jb2xvcjogI3skcGFnaW5hdGlvbi1hY3RpdmUtY29sb3J9O1xuICAtLSN7JHByZWZpeH1wYWdpbmF0aW9uLWFjdGl2ZS1iZzogI3skcGFnaW5hdGlvbi1hY3RpdmUtYmd9O1xuICAtLSN7JHByZWZpeH1wYWdpbmF0aW9uLWFjdGl2ZS1ib3JkZXItY29sb3I6ICN7JHBhZ2luYXRpb24tYWN0aXZlLWJvcmRlci1jb2xvcn07XG4gIC0tI3skcHJlZml4fXBhZ2luYXRpb24tZGlzYWJsZWQtY29sb3I6ICN7JHBhZ2luYXRpb24tZGlzYWJsZWQtY29sb3J9O1xuICAtLSN7JHByZWZpeH1wYWdpbmF0aW9uLWRpc2FibGVkLWJnOiAjeyRwYWdpbmF0aW9uLWRpc2FibGVkLWJnfTtcbiAgLS0jeyRwcmVmaXh9cGFnaW5hdGlvbi1kaXNhYmxlZC1ib3JkZXItY29sb3I6ICN7JHBhZ2luYXRpb24tZGlzYWJsZWQtYm9yZGVyLWNvbG9yfTtcbiAgLy8gc2Nzcy1kb2NzLWVuZCBwYWdpbmF0aW9uLWNzcy12YXJzXG5cbiAgZGlzcGxheTogZmxleDtcbiAgQGluY2x1ZGUgbGlzdC11bnN0eWxlZCgpO1xufVxuXG4ucGFnZS1saW5rIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBibG9jaztcbiAgcGFkZGluZzogdmFyKC0tI3skcHJlZml4fXBhZ2luYXRpb24tcGFkZGluZy15KSB2YXIoLS0jeyRwcmVmaXh9cGFnaW5hdGlvbi1wYWRkaW5nLXgpO1xuICBAaW5jbHVkZSBmb250LXNpemUodmFyKC0tI3skcHJlZml4fXBhZ2luYXRpb24tZm9udC1zaXplKSk7XG4gIGNvbG9yOiB2YXIoLS0jeyRwcmVmaXh9cGFnaW5hdGlvbi1jb2xvcik7XG4gIHRleHQtZGVjb3JhdGlvbjogaWYoJGxpbmstZGVjb3JhdGlvbiA9PSBub25lLCBudWxsLCBub25lKTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tI3skcHJlZml4fXBhZ2luYXRpb24tYmcpO1xuICBib3JkZXI6IHZhcigtLSN7JHByZWZpeH1wYWdpbmF0aW9uLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tI3skcHJlZml4fXBhZ2luYXRpb24tYm9yZGVyLWNvbG9yKTtcbiAgQGluY2x1ZGUgdHJhbnNpdGlvbigkcGFnaW5hdGlvbi10cmFuc2l0aW9uKTtcblxuICAmOmhvdmVyIHtcbiAgICB6LWluZGV4OiAyO1xuICAgIGNvbG9yOiB2YXIoLS0jeyRwcmVmaXh9cGFnaW5hdGlvbi1ob3Zlci1jb2xvcik7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBpZigkbGluay1ob3Zlci1kZWNvcmF0aW9uID09IHVuZGVybGluZSwgbm9uZSwgbnVsbCk7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tI3skcHJlZml4fXBhZ2luYXRpb24taG92ZXItYmcpO1xuICAgIGJvcmRlci1jb2xvcjogdmFyKC0tI3skcHJlZml4fXBhZ2luYXRpb24taG92ZXItYm9yZGVyLWNvbG9yKTtcbiAgfVxuXG4gICY6Zm9jdXMge1xuICAgIHotaW5kZXg6IDM7XG4gICAgY29sb3I6IHZhcigtLSN7JHByZWZpeH1wYWdpbmF0aW9uLWZvY3VzLWNvbG9yKTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS0jeyRwcmVmaXh9cGFnaW5hdGlvbi1mb2N1cy1iZyk7XG4gICAgb3V0bGluZTogJHBhZ2luYXRpb24tZm9jdXMtb3V0bGluZTtcbiAgICBib3gtc2hhZG93OiB2YXIoLS0jeyRwcmVmaXh9cGFnaW5hdGlvbi1mb2N1cy1ib3gtc2hhZG93KTtcbiAgfVxuXG4gICYuYWN0aXZlLFxuICAuYWN0aXZlID4gJiB7XG4gICAgei1pbmRleDogMztcbiAgICBjb2xvcjogdmFyKC0tI3skcHJlZml4fXBhZ2luYXRpb24tYWN0aXZlLWNvbG9yKTtcbiAgICBAaW5jbHVkZSBncmFkaWVudC1iZyh2YXIoLS0jeyRwcmVmaXh9cGFnaW5hdGlvbi1hY3RpdmUtYmcpKTtcbiAgICBib3JkZXItY29sb3I6IHZhcigtLSN7JHByZWZpeH1wYWdpbmF0aW9uLWFjdGl2ZS1ib3JkZXItY29sb3IpO1xuICB9XG5cbiAgJi5kaXNhYmxlZCxcbiAgLmRpc2FibGVkID4gJiB7XG4gICAgY29sb3I6IHZhcigtLSN7JHByZWZpeH1wYWdpbmF0aW9uLWRpc2FibGVkLWNvbG9yKTtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS0jeyRwcmVmaXh9cGFnaW5hdGlvbi1kaXNhYmxlZC1iZyk7XG4gICAgYm9yZGVyLWNvbG9yOiB2YXIoLS0jeyRwcmVmaXh9cGFnaW5hdGlvbi1kaXNhYmxlZC1ib3JkZXItY29sb3IpO1xuICB9XG59XG5cbi5wYWdlLWl0ZW0ge1xuICAmOm5vdCg6Zmlyc3QtY2hpbGQpIC5wYWdlLWxpbmsge1xuICAgIG1hcmdpbi1sZWZ0OiAkcGFnaW5hdGlvbi1tYXJnaW4tc3RhcnQ7XG4gIH1cblxuICBAaWYgJHBhZ2luYXRpb24tbWFyZ2luLXN0YXJ0ID09IGNhbGMoI3skcGFnaW5hdGlvbi1ib3JkZXItd2lkdGh9ICogLTEpIHtcbiAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgIC5wYWdlLWxpbmsge1xuICAgICAgICBAaW5jbHVkZSBib3JkZXItc3RhcnQtcmFkaXVzKHZhcigtLSN7JHByZWZpeH1wYWdpbmF0aW9uLWJvcmRlci1yYWRpdXMpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgLnBhZ2UtbGluayB7XG4gICAgICAgIEBpbmNsdWRlIGJvcmRlci1lbmQtcmFkaXVzKHZhcigtLSN7JHByZWZpeH1wYWdpbmF0aW9uLWJvcmRlci1yYWRpdXMpKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gQGVsc2Uge1xuICAgIC8vIEFkZCBib3JkZXItcmFkaXVzIHRvIGFsbCBwYWdlTGlua3MgaW4gY2FzZSB0aGV5IGhhdmUgbGVmdCBtYXJnaW5cbiAgICAucGFnZS1saW5rIHtcbiAgICAgIEBpbmNsdWRlIGJvcmRlci1yYWRpdXModmFyKC0tI3skcHJlZml4fXBhZ2luYXRpb24tYm9yZGVyLXJhZGl1cykpO1xuICAgIH1cbiAgfVxufVxuXG5cbi8vXG4vLyBTaXppbmdcbi8vXG5cbi5wYWdpbmF0aW9uLWxnIHtcbiAgQGluY2x1ZGUgcGFnaW5hdGlvbi1zaXplKCRwYWdpbmF0aW9uLXBhZGRpbmcteS1sZywgJHBhZ2luYXRpb24tcGFkZGluZy14LWxnLCAkZm9udC1zaXplLWxnLCAkcGFnaW5hdGlvbi1ib3JkZXItcmFkaXVzLWxnKTtcbn1cblxuLnBhZ2luYXRpb24tc20ge1xuICBAaW5jbHVkZSBwYWdpbmF0aW9uLXNpemUoJHBhZ2luYXRpb24tcGFkZGluZy15LXNtLCAkcGFnaW5hdGlvbi1wYWRkaW5nLXgtc20sICRmb250LXNpemUtc20sICRwYWdpbmF0aW9uLWJvcmRlci1yYWRpdXMtc20pO1xufVxuIiwiLy8gUGFnaW5hdGlvblxuXG4vLyBzY3NzLWRvY3Mtc3RhcnQgcGFnaW5hdGlvbi1taXhpblxuQG1peGluIHBhZ2luYXRpb24tc2l6ZSgkcGFkZGluZy15LCAkcGFkZGluZy14LCAkZm9udC1zaXplLCAkYm9yZGVyLXJhZGl1cykge1xuICAtLSN7JHByZWZpeH1wYWdpbmF0aW9uLXBhZGRpbmcteDogI3skcGFkZGluZy14fTtcbiAgLS0jeyRwcmVmaXh9cGFnaW5hdGlvbi1wYWRkaW5nLXk6ICN7JHBhZGRpbmcteX07XG4gIEBpbmNsdWRlIHJmcygkZm9udC1zaXplLCAtLSN7JHByZWZpeH1wYWdpbmF0aW9uLWZvbnQtc2l6ZSk7XG4gIC0tI3skcHJlZml4fXBhZ2luYXRpb24tYm9yZGVyLXJhZGl1czogI3skYm9yZGVyLXJhZGl1c307XG59XG4vLyBzY3NzLWRvY3MtZW5kIHBhZ2luYXRpb24tbWl4aW5cbiIsIi8vIEJhc2UgY2xhc3Ncbi8vXG4vLyBSZXF1aXJlcyBvbmUgb2YgdGhlIGNvbnRleHR1YWwsIGNvbG9yIG1vZGlmaWVyIGNsYXNzZXMgZm9yIGBjb2xvcmAgYW5kXG4vLyBgYmFja2dyb3VuZC1jb2xvcmAuXG5cbi5iYWRnZSB7XG4gIC8vIHNjc3MtZG9jcy1zdGFydCBiYWRnZS1jc3MtdmFyc1xuICAtLSN7JHByZWZpeH1iYWRnZS1wYWRkaW5nLXg6ICN7JGJhZGdlLXBhZGRpbmcteH07XG4gIC0tI3skcHJlZml4fWJhZGdlLXBhZGRpbmcteTogI3skYmFkZ2UtcGFkZGluZy15fTtcbiAgQGluY2x1ZGUgcmZzKCRiYWRnZS1mb250LXNpemUsIC0tI3skcHJlZml4fWJhZGdlLWZvbnQtc2l6ZSk7XG4gIC0tI3skcHJlZml4fWJhZGdlLWZvbnQtd2VpZ2h0OiAjeyRiYWRnZS1mb250LXdlaWdodH07XG4gIC0tI3skcHJlZml4fWJhZGdlLWNvbG9yOiAjeyRiYWRnZS1jb2xvcn07XG4gIC0tI3skcHJlZml4fWJhZGdlLWJvcmRlci1yYWRpdXM6ICN7JGJhZGdlLWJvcmRlci1yYWRpdXN9O1xuICAvLyBzY3NzLWRvY3MtZW5kIGJhZGdlLWNzcy12YXJzXG5cbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwYWRkaW5nOiB2YXIoLS0jeyRwcmVmaXh9YmFkZ2UtcGFkZGluZy15KSB2YXIoLS0jeyRwcmVmaXh9YmFkZ2UtcGFkZGluZy14KTtcbiAgQGluY2x1ZGUgZm9udC1zaXplKHZhcigtLSN7JHByZWZpeH1iYWRnZS1mb250LXNpemUpKTtcbiAgZm9udC13ZWlnaHQ6IHZhcigtLSN7JHByZWZpeH1iYWRnZS1mb250LXdlaWdodCk7XG4gIGxpbmUtaGVpZ2h0OiAxO1xuICBjb2xvcjogdmFyKC0tI3skcHJlZml4fWJhZGdlLWNvbG9yKTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XG4gIEBpbmNsdWRlIGJvcmRlci1yYWRpdXModmFyKC0tI3skcHJlZml4fWJhZGdlLWJvcmRlci1yYWRpdXMpKTtcbiAgQGluY2x1ZGUgZ3JhZGllbnQtYmcoKTtcblxuICAvLyBFbXB0eSBiYWRnZXMgY29sbGFwc2UgYXV0b21hdGljYWxseVxuICAmOmVtcHR5IHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG5cbi8vIFF1aWNrIGZpeCBmb3IgYmFkZ2VzIGluIGJ1dHRvbnNcbi5idG4gLmJhZGdlIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB0b3A6IC0xcHg7XG59XG4iLCIvL1xuLy8gQmFzZSBzdHlsZXNcbi8vXG5cbi5hbGVydCB7XG4gIC8vIHNjc3MtZG9jcy1zdGFydCBhbGVydC1jc3MtdmFyc1xuICAtLSN7JHByZWZpeH1hbGVydC1iZzogdHJhbnNwYXJlbnQ7XG4gIC0tI3skcHJlZml4fWFsZXJ0LXBhZGRpbmcteDogI3skYWxlcnQtcGFkZGluZy14fTtcbiAgLS0jeyRwcmVmaXh9YWxlcnQtcGFkZGluZy15OiAjeyRhbGVydC1wYWRkaW5nLXl9O1xuICAtLSN7JHByZWZpeH1hbGVydC1tYXJnaW4tYm90dG9tOiAjeyRhbGVydC1tYXJnaW4tYm90dG9tfTtcbiAgLS0jeyRwcmVmaXh9YWxlcnQtY29sb3I6IGluaGVyaXQ7XG4gIC0tI3skcHJlZml4fWFsZXJ0LWJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIC0tI3skcHJlZml4fWFsZXJ0LWJvcmRlcjogI3skYWxlcnQtYm9yZGVyLXdpZHRofSBzb2xpZCB2YXIoLS0jeyRwcmVmaXh9YWxlcnQtYm9yZGVyLWNvbG9yKTtcbiAgLS0jeyRwcmVmaXh9YWxlcnQtYm9yZGVyLXJhZGl1czogI3skYWxlcnQtYm9yZGVyLXJhZGl1c307XG4gIC0tI3skcHJlZml4fWFsZXJ0LWxpbmstY29sb3I6IGluaGVyaXQ7XG4gIC8vIHNjc3MtZG9jcy1lbmQgYWxlcnQtY3NzLXZhcnNcblxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHBhZGRpbmc6IHZhcigtLSN7JHByZWZpeH1hbGVydC1wYWRkaW5nLXkpIHZhcigtLSN7JHByZWZpeH1hbGVydC1wYWRkaW5nLXgpO1xuICBtYXJnaW4tYm90dG9tOiB2YXIoLS0jeyRwcmVmaXh9YWxlcnQtbWFyZ2luLWJvdHRvbSk7XG4gIGNvbG9yOiB2YXIoLS0jeyRwcmVmaXh9YWxlcnQtY29sb3IpO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS0jeyRwcmVmaXh9YWxlcnQtYmcpO1xuICBib3JkZXI6IHZhcigtLSN7JHByZWZpeH1hbGVydC1ib3JkZXIpO1xuICBAaW5jbHVkZSBib3JkZXItcmFkaXVzKHZhcigtLSN7JHByZWZpeH1hbGVydC1ib3JkZXItcmFkaXVzKSk7XG59XG5cbi8vIEhlYWRpbmdzIGZvciBsYXJnZXIgYWxlcnRzXG4uYWxlcnQtaGVhZGluZyB7XG4gIC8vIFNwZWNpZmllZCB0byBwcmV2ZW50IGNvbmZsaWN0cyBvZiBjaGFuZ2luZyAkaGVhZGluZ3MtY29sb3JcbiAgY29sb3I6IGluaGVyaXQ7XG59XG5cbi8vIFByb3ZpZGUgY2xhc3MgZm9yIGxpbmtzIHRoYXQgbWF0Y2ggYWxlcnRzXG4uYWxlcnQtbGluayB7XG4gIGZvbnQtd2VpZ2h0OiAkYWxlcnQtbGluay1mb250LXdlaWdodDtcbiAgY29sb3I6IHZhcigtLSN7JHByZWZpeH1hbGVydC1saW5rLWNvbG9yKTtcbn1cblxuXG4vLyBEaXNtaXNzaWJsZSBhbGVydHNcbi8vXG4vLyBFeHBhbmQgdGhlIHJpZ2h0IHBhZGRpbmcgYW5kIGFjY291bnQgZm9yIHRoZSBjbG9zZSBidXR0b24ncyBwb3NpdGlvbmluZy5cblxuLmFsZXJ0LWRpc21pc3NpYmxlIHtcbiAgcGFkZGluZy1yaWdodDogJGFsZXJ0LWRpc21pc3NpYmxlLXBhZGRpbmctcjtcblxuICAvLyBBZGp1c3QgY2xvc2UgbGluayBwb3NpdGlvblxuICAuYnRuLWNsb3NlIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIHJpZ2h0OiAwO1xuICAgIHotaW5kZXg6ICRzdHJldGNoZWQtbGluay16LWluZGV4ICsgMTtcbiAgICBwYWRkaW5nOiAkYWxlcnQtcGFkZGluZy15ICogMS4yNSAkYWxlcnQtcGFkZGluZy14O1xuICB9XG59XG5cblxuLy8gc2Nzcy1kb2NzLXN0YXJ0IGFsZXJ0LW1vZGlmaWVyc1xuLy8gR2VuZXJhdGUgY29udGV4dHVhbCBtb2RpZmllciBjbGFzc2VzIGZvciBjb2xvcml6aW5nIHRoZSBhbGVydFxuQGVhY2ggJHN0YXRlIGluIG1hcC1rZXlzKCR0aGVtZS1jb2xvcnMpIHtcbiAgLmFsZXJ0LSN7JHN0YXRlfSB7XG4gICAgLS0jeyRwcmVmaXh9YWxlcnQtY29sb3I6IHZhcigtLSN7JHByZWZpeH0jeyRzdGF0ZX0tdGV4dC1lbXBoYXNpcyk7XG4gICAgLS0jeyRwcmVmaXh9YWxlcnQtYmc6IHZhcigtLSN7JHByZWZpeH0jeyRzdGF0ZX0tYmctc3VidGxlKTtcbiAgICAtLSN7JHByZWZpeH1hbGVydC1ib3JkZXItY29sb3I6IHZhcigtLSN7JHByZWZpeH0jeyRzdGF0ZX0tYm9yZGVyLXN1YnRsZSk7XG4gICAgLS0jeyRwcmVmaXh9YWxlcnQtbGluay1jb2xvcjogdmFyKC0tI3skcHJlZml4fSN7JHN0YXRlfS10ZXh0LWVtcGhhc2lzKTtcbiAgfVxufVxuLy8gc2Nzcy1kb2NzLWVuZCBhbGVydC1tb2RpZmllcnNcbiIsIi8vIERpc2FibGUgYW5pbWF0aW9uIGlmIHRyYW5zaXRpb25zIGFyZSBkaXNhYmxlZFxuXG4vLyBzY3NzLWRvY3Mtc3RhcnQgcHJvZ3Jlc3Mta2V5ZnJhbWVzXG5AaWYgJGVuYWJsZS10cmFuc2l0aW9ucyB7XG4gIEBrZXlmcmFtZXMgcHJvZ3Jlc3MtYmFyLXN0cmlwZXMge1xuICAgIDAlIHsgYmFja2dyb3VuZC1wb3NpdGlvbi14OiAkcHJvZ3Jlc3MtaGVpZ2h0OyB9XG4gIH1cbn1cbi8vIHNjc3MtZG9jcy1lbmQgcHJvZ3Jlc3Mta2V5ZnJhbWVzXG5cbi5wcm9ncmVzcyxcbi5wcm9ncmVzcy1zdGFja2VkIHtcbiAgLy8gc2Nzcy1kb2NzLXN0YXJ0IHByb2dyZXNzLWNzcy12YXJzXG4gIC0tI3skcHJlZml4fXByb2dyZXNzLWhlaWdodDogI3skcHJvZ3Jlc3MtaGVpZ2h0fTtcbiAgQGluY2x1ZGUgcmZzKCRwcm9ncmVzcy1mb250LXNpemUsIC0tI3skcHJlZml4fXByb2dyZXNzLWZvbnQtc2l6ZSk7XG4gIC0tI3skcHJlZml4fXByb2dyZXNzLWJnOiAjeyRwcm9ncmVzcy1iZ307XG4gIC0tI3skcHJlZml4fXByb2dyZXNzLWJvcmRlci1yYWRpdXM6ICN7JHByb2dyZXNzLWJvcmRlci1yYWRpdXN9O1xuICAtLSN7JHByZWZpeH1wcm9ncmVzcy1ib3gtc2hhZG93OiAjeyRwcm9ncmVzcy1ib3gtc2hhZG93fTtcbiAgLS0jeyRwcmVmaXh9cHJvZ3Jlc3MtYmFyLWNvbG9yOiAjeyRwcm9ncmVzcy1iYXItY29sb3J9O1xuICAtLSN7JHByZWZpeH1wcm9ncmVzcy1iYXItYmc6ICN7JHByb2dyZXNzLWJhci1iZ307XG4gIC0tI3skcHJlZml4fXByb2dyZXNzLWJhci10cmFuc2l0aW9uOiAjeyRwcm9ncmVzcy1iYXItdHJhbnNpdGlvbn07XG4gIC8vIHNjc3MtZG9jcy1lbmQgcHJvZ3Jlc3MtY3NzLXZhcnNcblxuICBkaXNwbGF5OiBmbGV4O1xuICBoZWlnaHQ6IHZhcigtLSN7JHByZWZpeH1wcm9ncmVzcy1oZWlnaHQpO1xuICBvdmVyZmxvdzogaGlkZGVuOyAvLyBmb3JjZSByb3VuZGVkIGNvcm5lcnMgYnkgY3JvcHBpbmcgaXRcbiAgQGluY2x1ZGUgZm9udC1zaXplKHZhcigtLSN7JHByZWZpeH1wcm9ncmVzcy1mb250LXNpemUpKTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tI3skcHJlZml4fXByb2dyZXNzLWJnKTtcbiAgQGluY2x1ZGUgYm9yZGVyLXJhZGl1cyh2YXIoLS0jeyRwcmVmaXh9cHJvZ3Jlc3MtYm9yZGVyLXJhZGl1cykpO1xuICBAaW5jbHVkZSBib3gtc2hhZG93KHZhcigtLSN7JHByZWZpeH1wcm9ncmVzcy1ib3gtc2hhZG93KSk7XG59XG5cbi5wcm9ncmVzcy1iYXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgY29sb3I6IHZhcigtLSN7JHByZWZpeH1wcm9ncmVzcy1iYXItY29sb3IpO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLSN7JHByZWZpeH1wcm9ncmVzcy1iYXItYmcpO1xuICBAaW5jbHVkZSB0cmFuc2l0aW9uKHZhcigtLSN7JHByZWZpeH1wcm9ncmVzcy1iYXItdHJhbnNpdGlvbikpO1xufVxuXG4ucHJvZ3Jlc3MtYmFyLXN0cmlwZWQge1xuICBAaW5jbHVkZSBncmFkaWVudC1zdHJpcGVkKCk7XG4gIGJhY2tncm91bmQtc2l6ZTogdmFyKC0tI3skcHJlZml4fXByb2dyZXNzLWhlaWdodCkgdmFyKC0tI3skcHJlZml4fXByb2dyZXNzLWhlaWdodCk7XG59XG5cbi5wcm9ncmVzcy1zdGFja2VkID4gLnByb2dyZXNzIHtcbiAgb3ZlcmZsb3c6IHZpc2libGU7XG59XG5cbi5wcm9ncmVzcy1zdGFja2VkID4gLnByb2dyZXNzID4gLnByb2dyZXNzLWJhciB7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG5AaWYgJGVuYWJsZS10cmFuc2l0aW9ucyB7XG4gIC5wcm9ncmVzcy1iYXItYW5pbWF0ZWQge1xuICAgIGFuaW1hdGlvbjogJHByb2dyZXNzLWJhci1hbmltYXRpb24tdGltaW5nIHByb2dyZXNzLWJhci1zdHJpcGVzO1xuXG4gICAgQGlmICRlbmFibGUtcmVkdWNlZC1tb3Rpb24ge1xuICAgICAgQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIHtcbiAgICAgICAgYW5pbWF0aW9uOiBub25lO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLy8gQmFzZSBjbGFzc1xuLy9cbi8vIEVhc2lseSB1c2FibGUgb24gPHVsPiwgPG9sPiwgb3IgPGRpdj4uXG5cbi5saXN0LWdyb3VwIHtcbiAgLy8gc2Nzcy1kb2NzLXN0YXJ0IGxpc3QtZ3JvdXAtY3NzLXZhcnNcbiAgLS0jeyRwcmVmaXh9bGlzdC1ncm91cC1jb2xvcjogI3skbGlzdC1ncm91cC1jb2xvcn07XG4gIC0tI3skcHJlZml4fWxpc3QtZ3JvdXAtYmc6ICN7JGxpc3QtZ3JvdXAtYmd9O1xuICAtLSN7JHByZWZpeH1saXN0LWdyb3VwLWJvcmRlci1jb2xvcjogI3skbGlzdC1ncm91cC1ib3JkZXItY29sb3J9O1xuICAtLSN7JHByZWZpeH1saXN0LWdyb3VwLWJvcmRlci13aWR0aDogI3skbGlzdC1ncm91cC1ib3JkZXItd2lkdGh9O1xuICAtLSN7JHByZWZpeH1saXN0LWdyb3VwLWJvcmRlci1yYWRpdXM6ICN7JGxpc3QtZ3JvdXAtYm9yZGVyLXJhZGl1c307XG4gIC0tI3skcHJlZml4fWxpc3QtZ3JvdXAtaXRlbS1wYWRkaW5nLXg6ICN7JGxpc3QtZ3JvdXAtaXRlbS1wYWRkaW5nLXh9O1xuICAtLSN7JHByZWZpeH1saXN0LWdyb3VwLWl0ZW0tcGFkZGluZy15OiAjeyRsaXN0LWdyb3VwLWl0ZW0tcGFkZGluZy15fTtcbiAgLS0jeyRwcmVmaXh9bGlzdC1ncm91cC1hY3Rpb24tY29sb3I6ICN7JGxpc3QtZ3JvdXAtYWN0aW9uLWNvbG9yfTtcbiAgLS0jeyRwcmVmaXh9bGlzdC1ncm91cC1hY3Rpb24taG92ZXItY29sb3I6ICN7JGxpc3QtZ3JvdXAtYWN0aW9uLWhvdmVyLWNvbG9yfTtcbiAgLS0jeyRwcmVmaXh9bGlzdC1ncm91cC1hY3Rpb24taG92ZXItYmc6ICN7JGxpc3QtZ3JvdXAtaG92ZXItYmd9O1xuICAtLSN7JHByZWZpeH1saXN0LWdyb3VwLWFjdGlvbi1hY3RpdmUtY29sb3I6ICN7JGxpc3QtZ3JvdXAtYWN0aW9uLWFjdGl2ZS1jb2xvcn07XG4gIC0tI3skcHJlZml4fWxpc3QtZ3JvdXAtYWN0aW9uLWFjdGl2ZS1iZzogI3skbGlzdC1ncm91cC1hY3Rpb24tYWN0aXZlLWJnfTtcbiAgLS0jeyRwcmVmaXh9bGlzdC1ncm91cC1kaXNhYmxlZC1jb2xvcjogI3skbGlzdC1ncm91cC1kaXNhYmxlZC1jb2xvcn07XG4gIC0tI3skcHJlZml4fWxpc3QtZ3JvdXAtZGlzYWJsZWQtYmc6ICN7JGxpc3QtZ3JvdXAtZGlzYWJsZWQtYmd9O1xuICAtLSN7JHByZWZpeH1saXN0LWdyb3VwLWFjdGl2ZS1jb2xvcjogI3skbGlzdC1ncm91cC1hY3RpdmUtY29sb3J9O1xuICAtLSN7JHByZWZpeH1saXN0LWdyb3VwLWFjdGl2ZS1iZzogI3skbGlzdC1ncm91cC1hY3RpdmUtYmd9O1xuICAtLSN7JHByZWZpeH1saXN0LWdyb3VwLWFjdGl2ZS1ib3JkZXItY29sb3I6ICN7JGxpc3QtZ3JvdXAtYWN0aXZlLWJvcmRlci1jb2xvcn07XG4gIC8vIHNjc3MtZG9jcy1lbmQgbGlzdC1ncm91cC1jc3MtdmFyc1xuXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cbiAgLy8gTm8gbmVlZCB0byBzZXQgbGlzdC1zdHlsZTogbm9uZTsgc2luY2UgLmxpc3QtZ3JvdXAtaXRlbSBpcyBibG9jayBsZXZlbFxuICBwYWRkaW5nLWxlZnQ6IDA7IC8vIHJlc2V0IHBhZGRpbmcgYmVjYXVzZSB1bCBhbmQgb2xcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgQGluY2x1ZGUgYm9yZGVyLXJhZGl1cyh2YXIoLS0jeyRwcmVmaXh9bGlzdC1ncm91cC1ib3JkZXItcmFkaXVzKSk7XG59XG5cbi5saXN0LWdyb3VwLW51bWJlcmVkIHtcbiAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xuICBjb3VudGVyLXJlc2V0OiBzZWN0aW9uO1xuXG4gID4gLmxpc3QtZ3JvdXAtaXRlbTo6YmVmb3JlIHtcbiAgICAvLyBJbmNyZW1lbnRzIG9ubHkgdGhpcyBpbnN0YW5jZSBvZiB0aGUgc2VjdGlvbiBjb3VudGVyXG4gICAgY29udGVudDogY291bnRlcnMoc2VjdGlvbiwgXCIuXCIpIFwiLiBcIjtcbiAgICBjb3VudGVyLWluY3JlbWVudDogc2VjdGlvbjtcbiAgfVxufVxuXG4vLyBJbnRlcmFjdGl2ZSBsaXN0IGl0ZW1zXG4vL1xuLy8gVXNlIGFuY2hvciBvciBidXR0b24gZWxlbWVudHMgaW5zdGVhZCBvZiBgbGlgcyBvciBgZGl2YHMgdG8gY3JlYXRlIGludGVyYWN0aXZlXG4vLyBsaXN0IGl0ZW1zLiBJbmNsdWRlcyBhbiBleHRyYSBgLmFjdGl2ZWAgbW9kaWZpZXIgY2xhc3MgZm9yIHNlbGVjdGVkIGl0ZW1zLlxuXG4ubGlzdC1ncm91cC1pdGVtLWFjdGlvbiB7XG4gIHdpZHRoOiAxMDAlOyAvLyBGb3IgYDxidXR0b24+YHMgKGFuY2hvcnMgYmVjb21lIDEwMCUgYnkgZGVmYXVsdCB0aG91Z2gpXG4gIGNvbG9yOiB2YXIoLS0jeyRwcmVmaXh9bGlzdC1ncm91cC1hY3Rpb24tY29sb3IpO1xuICB0ZXh0LWFsaWduOiBpbmhlcml0OyAvLyBGb3IgYDxidXR0b24+YHMgKGFuY2hvcnMgaW5oZXJpdClcblxuICAvLyBIb3ZlciBzdGF0ZVxuICAmOmhvdmVyLFxuICAmOmZvY3VzIHtcbiAgICB6LWluZGV4OiAxOyAvLyBQbGFjZSBob3Zlci9mb2N1cyBpdGVtcyBhYm92ZSB0aGVpciBzaWJsaW5ncyBmb3IgcHJvcGVyIGJvcmRlciBzdHlsaW5nXG4gICAgY29sb3I6IHZhcigtLSN7JHByZWZpeH1saXN0LWdyb3VwLWFjdGlvbi1ob3Zlci1jb2xvcik7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLSN7JHByZWZpeH1saXN0LWdyb3VwLWFjdGlvbi1ob3Zlci1iZyk7XG4gIH1cblxuICAmOmFjdGl2ZSB7XG4gICAgY29sb3I6IHZhcigtLSN7JHByZWZpeH1saXN0LWdyb3VwLWFjdGlvbi1hY3RpdmUtY29sb3IpO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLSN7JHByZWZpeH1saXN0LWdyb3VwLWFjdGlvbi1hY3RpdmUtYmcpO1xuICB9XG59XG5cbi8vIEluZGl2aWR1YWwgbGlzdCBpdGVtc1xuLy9cbi8vIFVzZSBvbiBgbGlgcyBvciBgZGl2YHMgd2l0aGluIHRoZSBgLmxpc3QtZ3JvdXBgIHBhcmVudC5cblxuLmxpc3QtZ3JvdXAtaXRlbSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBhZGRpbmc6IHZhcigtLSN7JHByZWZpeH1saXN0LWdyb3VwLWl0ZW0tcGFkZGluZy15KSB2YXIoLS0jeyRwcmVmaXh9bGlzdC1ncm91cC1pdGVtLXBhZGRpbmcteCk7XG4gIGNvbG9yOiB2YXIoLS0jeyRwcmVmaXh9bGlzdC1ncm91cC1jb2xvcik7XG4gIHRleHQtZGVjb3JhdGlvbjogaWYoJGxpbmstZGVjb3JhdGlvbiA9PSBub25lLCBudWxsLCBub25lKTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tI3skcHJlZml4fWxpc3QtZ3JvdXAtYmcpO1xuICBib3JkZXI6IHZhcigtLSN7JHByZWZpeH1saXN0LWdyb3VwLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tI3skcHJlZml4fWxpc3QtZ3JvdXAtYm9yZGVyLWNvbG9yKTtcblxuICAmOmZpcnN0LWNoaWxkIHtcbiAgICBAaW5jbHVkZSBib3JkZXItdG9wLXJhZGl1cyhpbmhlcml0KTtcbiAgfVxuXG4gICY6bGFzdC1jaGlsZCB7XG4gICAgQGluY2x1ZGUgYm9yZGVyLWJvdHRvbS1yYWRpdXMoaW5oZXJpdCk7XG4gIH1cblxuICAmLmRpc2FibGVkLFxuICAmOmRpc2FibGVkIHtcbiAgICBjb2xvcjogdmFyKC0tI3skcHJlZml4fWxpc3QtZ3JvdXAtZGlzYWJsZWQtY29sb3IpO1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLSN7JHByZWZpeH1saXN0LWdyb3VwLWRpc2FibGVkLWJnKTtcbiAgfVxuXG4gIC8vIEluY2x1ZGUgYm90aCBoZXJlIGZvciBgPGE+YHMgYW5kIGA8YnV0dG9uPmBzXG4gICYuYWN0aXZlIHtcbiAgICB6LWluZGV4OiAyOyAvLyBQbGFjZSBhY3RpdmUgaXRlbXMgYWJvdmUgdGhlaXIgc2libGluZ3MgZm9yIHByb3BlciBib3JkZXIgc3R5bGluZ1xuICAgIGNvbG9yOiB2YXIoLS0jeyRwcmVmaXh9bGlzdC1ncm91cC1hY3RpdmUtY29sb3IpO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLSN7JHByZWZpeH1saXN0LWdyb3VwLWFjdGl2ZS1iZyk7XG4gICAgYm9yZGVyLWNvbG9yOiB2YXIoLS0jeyRwcmVmaXh9bGlzdC1ncm91cC1hY3RpdmUtYm9yZGVyLWNvbG9yKTtcbiAgfVxuXG4gIC8vIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBzY3NzL3NlbGVjdG9yLW5vLXJlZHVuZGFudC1uZXN0aW5nLXNlbGVjdG9yXG4gICYgKyAubGlzdC1ncm91cC1pdGVtIHtcbiAgICBib3JkZXItdG9wLXdpZHRoOiAwO1xuXG4gICAgJi5hY3RpdmUge1xuICAgICAgbWFyZ2luLXRvcDogY2FsYygtMSAqIHZhcigtLSN7JHByZWZpeH1saXN0LWdyb3VwLWJvcmRlci13aWR0aCkpOyAvLyBzdHlsZWxpbnQtZGlzYWJsZS1saW5lIGZ1bmN0aW9uLWRpc2FsbG93ZWQtbGlzdFxuICAgICAgYm9yZGVyLXRvcC13aWR0aDogdmFyKC0tI3skcHJlZml4fWxpc3QtZ3JvdXAtYm9yZGVyLXdpZHRoKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gSG9yaXpvbnRhbFxuLy9cbi8vIENoYW5nZSB0aGUgbGF5b3V0IG9mIGxpc3QgZ3JvdXAgaXRlbXMgZnJvbSB2ZXJ0aWNhbCAoZGVmYXVsdCkgdG8gaG9yaXpvbnRhbC5cblxuQGVhY2ggJGJyZWFrcG9pbnQgaW4gbWFwLWtleXMoJGdyaWQtYnJlYWtwb2ludHMpIHtcbiAgQGluY2x1ZGUgbWVkaWEtYnJlYWtwb2ludC11cCgkYnJlYWtwb2ludCkge1xuICAgICRpbmZpeDogYnJlYWtwb2ludC1pbmZpeCgkYnJlYWtwb2ludCwgJGdyaWQtYnJlYWtwb2ludHMpO1xuXG4gICAgLmxpc3QtZ3JvdXAtaG9yaXpvbnRhbCN7JGluZml4fSB7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuXG4gICAgICA+IC5saXN0LWdyb3VwLWl0ZW0ge1xuICAgICAgICAmOmZpcnN0LWNoaWxkOm5vdCg6bGFzdC1jaGlsZCkge1xuICAgICAgICAgIEBpbmNsdWRlIGJvcmRlci1ib3R0b20tc3RhcnQtcmFkaXVzKHZhcigtLSN7JHByZWZpeH1saXN0LWdyb3VwLWJvcmRlci1yYWRpdXMpKTtcbiAgICAgICAgICBAaW5jbHVkZSBib3JkZXItdG9wLWVuZC1yYWRpdXMoMCk7XG4gICAgICAgIH1cblxuICAgICAgICAmOmxhc3QtY2hpbGQ6bm90KDpmaXJzdC1jaGlsZCkge1xuICAgICAgICAgIEBpbmNsdWRlIGJvcmRlci10b3AtZW5kLXJhZGl1cyh2YXIoLS0jeyRwcmVmaXh9bGlzdC1ncm91cC1ib3JkZXItcmFkaXVzKSk7XG4gICAgICAgICAgQGluY2x1ZGUgYm9yZGVyLWJvdHRvbS1zdGFydC1yYWRpdXMoMCk7XG4gICAgICAgIH1cblxuICAgICAgICAmLmFjdGl2ZSB7XG4gICAgICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICAgICAgfVxuXG4gICAgICAgICsgLmxpc3QtZ3JvdXAtaXRlbSB7XG4gICAgICAgICAgYm9yZGVyLXRvcC13aWR0aDogdmFyKC0tI3skcHJlZml4fWxpc3QtZ3JvdXAtYm9yZGVyLXdpZHRoKTtcbiAgICAgICAgICBib3JkZXItbGVmdC13aWR0aDogMDtcblxuICAgICAgICAgICYuYWN0aXZlIHtcbiAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiBjYWxjKC0xICogdmFyKC0tI3skcHJlZml4fWxpc3QtZ3JvdXAtYm9yZGVyLXdpZHRoKSk7IC8vIHN0eWxlbGludC1kaXNhYmxlLWxpbmUgZnVuY3Rpb24tZGlzYWxsb3dlZC1saXN0XG4gICAgICAgICAgICBib3JkZXItbGVmdC13aWR0aDogdmFyKC0tI3skcHJlZml4fWxpc3QtZ3JvdXAtYm9yZGVyLXdpZHRoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuXG4vLyBGbHVzaCBsaXN0IGl0ZW1zXG4vL1xuLy8gUmVtb3ZlIGJvcmRlcnMgYW5kIGJvcmRlci1yYWRpdXMgdG8ga2VlcCBsaXN0IGdyb3VwIGl0ZW1zIGVkZ2UtdG8tZWRnZS4gTW9zdFxuLy8gdXNlZnVsIHdpdGhpbiBvdGhlciBjb21wb25lbnRzIChlLmcuLCBjYXJkcykuXG5cbi5saXN0LWdyb3VwLWZsdXNoIHtcbiAgQGluY2x1ZGUgYm9yZGVyLXJhZGl1cygwKTtcblxuICA+IC5saXN0LWdyb3VwLWl0ZW0ge1xuICAgIGJvcmRlci13aWR0aDogMCAwIHZhcigtLSN7JHByZWZpeH1saXN0LWdyb3VwLWJvcmRlci13aWR0aCk7XG5cbiAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgYm9yZGVyLWJvdHRvbS13aWR0aDogMDtcbiAgICB9XG4gIH1cbn1cblxuXG4vLyBzY3NzLWRvY3Mtc3RhcnQgbGlzdC1ncm91cC1tb2RpZmllcnNcbi8vIExpc3QgZ3JvdXAgY29udGV4dHVhbCB2YXJpYW50c1xuLy9cbi8vIEFkZCBtb2RpZmllciBjbGFzc2VzIHRvIGNoYW5nZSB0ZXh0IGFuZCBiYWNrZ3JvdW5kIGNvbG9yIG9uIGluZGl2aWR1YWwgaXRlbXMuXG4vLyBPcmdhbml6YXRpb25hbGx5LCB0aGlzIG11c3QgY29tZSBhZnRlciB0aGUgYDpob3ZlcmAgc3RhdGVzLlxuXG5AZWFjaCAkc3RhdGUgaW4gbWFwLWtleXMoJHRoZW1lLWNvbG9ycykge1xuICAubGlzdC1ncm91cC1pdGVtLSN7JHN0YXRlfSB7XG4gICAgLS0jeyRwcmVmaXh9bGlzdC1ncm91cC1jb2xvcjogdmFyKC0tI3skcHJlZml4fSN7JHN0YXRlfS10ZXh0LWVtcGhhc2lzKTtcbiAgICAtLSN7JHByZWZpeH1saXN0LWdyb3VwLWJnOiB2YXIoLS0jeyRwcmVmaXh9I3skc3RhdGV9LWJnLXN1YnRsZSk7XG4gICAgLS0jeyRwcmVmaXh9bGlzdC1ncm91cC1ib3JkZXItY29sb3I6IHZhcigtLSN7JHByZWZpeH0jeyRzdGF0ZX0tYm9yZGVyLXN1YnRsZSk7XG4gICAgLS0jeyRwcmVmaXh9bGlzdC1ncm91cC1hY3Rpb24taG92ZXItY29sb3I6IHZhcigtLSN7JHByZWZpeH1lbXBoYXNpcy1jb2xvcik7XG4gICAgLS0jeyRwcmVmaXh9bGlzdC1ncm91cC1hY3Rpb24taG92ZXItYmc6IHZhcigtLSN7JHByZWZpeH0jeyRzdGF0ZX0tYm9yZGVyLXN1YnRsZSk7XG4gICAgLS0jeyRwcmVmaXh9bGlzdC1ncm91cC1hY3Rpb24tYWN0aXZlLWNvbG9yOiB2YXIoLS0jeyRwcmVmaXh9ZW1waGFzaXMtY29sb3IpO1xuICAgIC0tI3skcHJlZml4fWxpc3QtZ3JvdXAtYWN0aW9uLWFjdGl2ZS1iZzogdmFyKC0tI3skcHJlZml4fSN7JHN0YXRlfS1ib3JkZXItc3VidGxlKTtcbiAgICAtLSN7JHByZWZpeH1saXN0LWdyb3VwLWFjdGl2ZS1jb2xvcjogdmFyKC0tI3skcHJlZml4fSN7JHN0YXRlfS1iZy1zdWJ0bGUpO1xuICAgIC0tI3skcHJlZml4fWxpc3QtZ3JvdXAtYWN0aXZlLWJnOiB2YXIoLS0jeyRwcmVmaXh9I3skc3RhdGV9LXRleHQtZW1waGFzaXMpO1xuICAgIC0tI3skcHJlZml4fWxpc3QtZ3JvdXAtYWN0aXZlLWJvcmRlci1jb2xvcjogdmFyKC0tI3skcHJlZml4fSN7JHN0YXRlfS10ZXh0LWVtcGhhc2lzKTtcbiAgfVxufVxuLy8gc2Nzcy1kb2NzLWVuZCBsaXN0LWdyb3VwLW1vZGlmaWVyc1xuIiwiLy8gVHJhbnNwYXJlbnQgYmFja2dyb3VuZCBhbmQgYm9yZGVyIHByb3BlcnRpZXMgaW5jbHVkZWQgZm9yIGJ1dHRvbiB2ZXJzaW9uLlxuLy8gaU9TIHJlcXVpcmVzIHRoZSBidXR0b24gZWxlbWVudCBpbnN0ZWFkIG9mIGFuIGFuY2hvciB0YWcuXG4vLyBJZiB5b3Ugd2FudCB0aGUgYW5jaG9yIHZlcnNpb24sIGl0IHJlcXVpcmVzIGBocmVmPVwiI1wiYC5cbi8vIFNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9FdmVudHMvY2xpY2sjU2FmYXJpX01vYmlsZVxuXG4uYnRuLWNsb3NlIHtcbiAgLy8gc2Nzcy1kb2NzLXN0YXJ0IGNsb3NlLWNzcy12YXJzXG4gIC0tI3skcHJlZml4fWJ0bi1jbG9zZS1jb2xvcjogI3skYnRuLWNsb3NlLWNvbG9yfTtcbiAgLS0jeyRwcmVmaXh9YnRuLWNsb3NlLWJnOiAjeyBlc2NhcGUtc3ZnKCRidG4tY2xvc2UtYmcpIH07XG4gIC0tI3skcHJlZml4fWJ0bi1jbG9zZS1vcGFjaXR5OiAjeyRidG4tY2xvc2Utb3BhY2l0eX07XG4gIC0tI3skcHJlZml4fWJ0bi1jbG9zZS1ob3Zlci1vcGFjaXR5OiAjeyRidG4tY2xvc2UtaG92ZXItb3BhY2l0eX07XG4gIC0tI3skcHJlZml4fWJ0bi1jbG9zZS1mb2N1cy1zaGFkb3c6ICN7JGJ0bi1jbG9zZS1mb2N1cy1zaGFkb3d9O1xuICAtLSN7JHByZWZpeH1idG4tY2xvc2UtZm9jdXMtb3BhY2l0eTogI3skYnRuLWNsb3NlLWZvY3VzLW9wYWNpdHl9O1xuICAtLSN7JHByZWZpeH1idG4tY2xvc2UtZGlzYWJsZWQtb3BhY2l0eTogI3skYnRuLWNsb3NlLWRpc2FibGVkLW9wYWNpdHl9O1xuICAtLSN7JHByZWZpeH1idG4tY2xvc2Utd2hpdGUtZmlsdGVyOiAjeyRidG4tY2xvc2Utd2hpdGUtZmlsdGVyfTtcbiAgLy8gc2Nzcy1kb2NzLWVuZCBjbG9zZS1jc3MtdmFyc1xuXG4gIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xuICB3aWR0aDogJGJ0bi1jbG9zZS13aWR0aDtcbiAgaGVpZ2h0OiAkYnRuLWNsb3NlLWhlaWdodDtcbiAgcGFkZGluZzogJGJ0bi1jbG9zZS1wYWRkaW5nLXkgJGJ0bi1jbG9zZS1wYWRkaW5nLXg7XG4gIGNvbG9yOiB2YXIoLS0jeyRwcmVmaXh9YnRuLWNsb3NlLWNvbG9yKTtcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgdmFyKC0tI3skcHJlZml4fWJ0bi1jbG9zZS1iZykgY2VudGVyIC8gJGJ0bi1jbG9zZS13aWR0aCBhdXRvIG5vLXJlcGVhdDsgLy8gaW5jbHVkZSB0cmFuc3BhcmVudCBmb3IgYnV0dG9uIGVsZW1lbnRzXG4gIGJvcmRlcjogMDsgLy8gZm9yIGJ1dHRvbiBlbGVtZW50c1xuICBAaW5jbHVkZSBib3JkZXItcmFkaXVzKCk7XG4gIG9wYWNpdHk6IHZhcigtLSN7JHByZWZpeH1idG4tY2xvc2Utb3BhY2l0eSk7XG5cbiAgLy8gT3ZlcnJpZGUgPGE+J3MgaG92ZXIgc3R5bGVcbiAgJjpob3ZlciB7XG4gICAgY29sb3I6IHZhcigtLSN7JHByZWZpeH1idG4tY2xvc2UtY29sb3IpO1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICBvcGFjaXR5OiB2YXIoLS0jeyRwcmVmaXh9YnRuLWNsb3NlLWhvdmVyLW9wYWNpdHkpO1xuICB9XG5cbiAgJjpmb2N1cyB7XG4gICAgb3V0bGluZTogMDtcbiAgICBib3gtc2hhZG93OiB2YXIoLS0jeyRwcmVmaXh9YnRuLWNsb3NlLWZvY3VzLXNoYWRvdyk7XG4gICAgb3BhY2l0eTogdmFyKC0tI3skcHJlZml4fWJ0bi1jbG9zZS1mb2N1cy1vcGFjaXR5KTtcbiAgfVxuXG4gICY6ZGlzYWJsZWQsXG4gICYuZGlzYWJsZWQge1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgIHVzZXItc2VsZWN0OiBub25lO1xuICAgIG9wYWNpdHk6IHZhcigtLSN7JHByZWZpeH1idG4tY2xvc2UtZGlzYWJsZWQtb3BhY2l0eSk7XG4gIH1cbn1cblxuQG1peGluIGJ0bi1jbG9zZS13aGl0ZSgpIHtcbiAgZmlsdGVyOiB2YXIoLS0jeyRwcmVmaXh9YnRuLWNsb3NlLXdoaXRlLWZpbHRlcik7XG59XG5cbi5idG4tY2xvc2Utd2hpdGUge1xuICBAaW5jbHVkZSBidG4tY2xvc2Utd2hpdGUoKTtcbn1cblxuQGlmICRlbmFibGUtZGFyay1tb2RlIHtcbiAgQGluY2x1ZGUgY29sb3ItbW9kZShkYXJrKSB7XG4gICAgLmJ0bi1jbG9zZSB7XG4gICAgICBAaW5jbHVkZSBidG4tY2xvc2Utd2hpdGUoKTtcbiAgICB9XG4gIH1cbn1cbiIsIi50b2FzdCB7XG4gIC8vIHNjc3MtZG9jcy1zdGFydCB0b2FzdC1jc3MtdmFyc1xuICAtLSN7JHByZWZpeH10b2FzdC16aW5kZXg6ICN7JHppbmRleC10b2FzdH07XG4gIC0tI3skcHJlZml4fXRvYXN0LXBhZGRpbmcteDogI3skdG9hc3QtcGFkZGluZy14fTtcbiAgLS0jeyRwcmVmaXh9dG9hc3QtcGFkZGluZy15OiAjeyR0b2FzdC1wYWRkaW5nLXl9O1xuICAtLSN7JHByZWZpeH10b2FzdC1zcGFjaW5nOiAjeyR0b2FzdC1zcGFjaW5nfTtcbiAgLS0jeyRwcmVmaXh9dG9hc3QtbWF4LXdpZHRoOiAjeyR0b2FzdC1tYXgtd2lkdGh9O1xuICBAaW5jbHVkZSByZnMoJHRvYXN0LWZvbnQtc2l6ZSwgLS0jeyRwcmVmaXh9dG9hc3QtZm9udC1zaXplKTtcbiAgLS0jeyRwcmVmaXh9dG9hc3QtY29sb3I6ICN7JHRvYXN0LWNvbG9yfTtcbiAgLS0jeyRwcmVmaXh9dG9hc3QtYmc6ICN7JHRvYXN0LWJhY2tncm91bmQtY29sb3J9O1xuICAtLSN7JHByZWZpeH10b2FzdC1ib3JkZXItd2lkdGg6ICN7JHRvYXN0LWJvcmRlci13aWR0aH07XG4gIC0tI3skcHJlZml4fXRvYXN0LWJvcmRlci1jb2xvcjogI3skdG9hc3QtYm9yZGVyLWNvbG9yfTtcbiAgLS0jeyRwcmVmaXh9dG9hc3QtYm9yZGVyLXJhZGl1czogI3skdG9hc3QtYm9yZGVyLXJhZGl1c307XG4gIC0tI3skcHJlZml4fXRvYXN0LWJveC1zaGFkb3c6ICN7JHRvYXN0LWJveC1zaGFkb3d9O1xuICAtLSN7JHByZWZpeH10b2FzdC1oZWFkZXItY29sb3I6ICN7JHRvYXN0LWhlYWRlci1jb2xvcn07XG4gIC0tI3skcHJlZml4fXRvYXN0LWhlYWRlci1iZzogI3skdG9hc3QtaGVhZGVyLWJhY2tncm91bmQtY29sb3J9O1xuICAtLSN7JHByZWZpeH10b2FzdC1oZWFkZXItYm9yZGVyLWNvbG9yOiAjeyR0b2FzdC1oZWFkZXItYm9yZGVyLWNvbG9yfTtcbiAgLy8gc2Nzcy1kb2NzLWVuZCB0b2FzdC1jc3MtdmFyc1xuXG4gIHdpZHRoOiB2YXIoLS0jeyRwcmVmaXh9dG9hc3QtbWF4LXdpZHRoKTtcbiAgbWF4LXdpZHRoOiAxMDAlO1xuICBAaW5jbHVkZSBmb250LXNpemUodmFyKC0tI3skcHJlZml4fXRvYXN0LWZvbnQtc2l6ZSkpO1xuICBjb2xvcjogdmFyKC0tI3skcHJlZml4fXRvYXN0LWNvbG9yKTtcbiAgcG9pbnRlci1ldmVudHM6IGF1dG87XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLSN7JHByZWZpeH10b2FzdC1iZyk7XG4gIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XG4gIGJvcmRlcjogdmFyKC0tI3skcHJlZml4fXRvYXN0LWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tI3skcHJlZml4fXRvYXN0LWJvcmRlci1jb2xvcik7XG4gIGJveC1zaGFkb3c6IHZhcigtLSN7JHByZWZpeH10b2FzdC1ib3gtc2hhZG93KTtcbiAgQGluY2x1ZGUgYm9yZGVyLXJhZGl1cyh2YXIoLS0jeyRwcmVmaXh9dG9hc3QtYm9yZGVyLXJhZGl1cykpO1xuXG4gICYuc2hvd2luZyB7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuXG4gICY6bm90KC5zaG93KSB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuXG4udG9hc3QtY29udGFpbmVyIHtcbiAgLS0jeyRwcmVmaXh9dG9hc3QtemluZGV4OiAjeyR6aW5kZXgtdG9hc3R9O1xuXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgei1pbmRleDogdmFyKC0tI3skcHJlZml4fXRvYXN0LXppbmRleCk7XG4gIHdpZHRoOiBtYXgtY29udGVudDtcbiAgbWF4LXdpZHRoOiAxMDAlO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcblxuICA+IDpub3QoOmxhc3QtY2hpbGQpIHtcbiAgICBtYXJnaW4tYm90dG9tOiB2YXIoLS0jeyRwcmVmaXh9dG9hc3Qtc3BhY2luZyk7XG4gIH1cbn1cblxuLnRvYXN0LWhlYWRlciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHBhZGRpbmc6IHZhcigtLSN7JHByZWZpeH10b2FzdC1wYWRkaW5nLXkpIHZhcigtLSN7JHByZWZpeH10b2FzdC1wYWRkaW5nLXgpO1xuICBjb2xvcjogdmFyKC0tI3skcHJlZml4fXRvYXN0LWhlYWRlci1jb2xvcik7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLSN7JHByZWZpeH10b2FzdC1oZWFkZXItYmcpO1xuICBiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94O1xuICBib3JkZXItYm90dG9tOiB2YXIoLS0jeyRwcmVmaXh9dG9hc3QtYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS0jeyRwcmVmaXh9dG9hc3QtaGVhZGVyLWJvcmRlci1jb2xvcik7XG4gIEBpbmNsdWRlIGJvcmRlci10b3AtcmFkaXVzKGNhbGModmFyKC0tI3skcHJlZml4fXRvYXN0LWJvcmRlci1yYWRpdXMpIC0gdmFyKC0tI3skcHJlZml4fXRvYXN0LWJvcmRlci13aWR0aCkpKTtcblxuICAuYnRuLWNsb3NlIHtcbiAgICBtYXJnaW4tcmlnaHQ6IGNhbGMoLS41ICogdmFyKC0tI3skcHJlZml4fXRvYXN0LXBhZGRpbmcteCkpOyAvLyBzdHlsZWxpbnQtZGlzYWJsZS1saW5lIGZ1bmN0aW9uLWRpc2FsbG93ZWQtbGlzdFxuICAgIG1hcmdpbi1sZWZ0OiB2YXIoLS0jeyRwcmVmaXh9dG9hc3QtcGFkZGluZy14KTtcbiAgfVxufVxuXG4udG9hc3QtYm9keSB7XG4gIHBhZGRpbmc6IHZhcigtLSN7JHByZWZpeH10b2FzdC1wYWRkaW5nLXgpO1xuICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XG59XG4iLCIvLyBzdHlsZWxpbnQtZGlzYWJsZSBmdW5jdGlvbi1kaXNhbGxvd2VkLWxpc3RcblxuLy8gLm1vZGFsLW9wZW4gICAgICAtIGJvZHkgY2xhc3MgZm9yIGtpbGxpbmcgdGhlIHNjcm9sbFxuLy8gLm1vZGFsICAgICAgICAgICAtIGNvbnRhaW5lciB0byBzY3JvbGwgd2l0aGluXG4vLyAubW9kYWwtZGlhbG9nICAgIC0gcG9zaXRpb25pbmcgc2hlbGwgZm9yIHRoZSBhY3R1YWwgbW9kYWxcbi8vIC5tb2RhbC1jb250ZW50ICAgLSBhY3R1YWwgbW9kYWwgdy8gYmcgYW5kIGNvcm5lcnMgYW5kIHN0dWZmXG5cblxuLy8gQ29udGFpbmVyIHRoYXQgdGhlIG1vZGFsIHNjcm9sbHMgd2l0aGluXG4ubW9kYWwge1xuICAvLyBzY3NzLWRvY3Mtc3RhcnQgbW9kYWwtY3NzLXZhcnNcbiAgLS0jeyRwcmVmaXh9bW9kYWwtemluZGV4OiAjeyR6aW5kZXgtbW9kYWx9O1xuICAtLSN7JHByZWZpeH1tb2RhbC13aWR0aDogI3skbW9kYWwtbWR9O1xuICAtLSN7JHByZWZpeH1tb2RhbC1wYWRkaW5nOiAjeyRtb2RhbC1pbm5lci1wYWRkaW5nfTtcbiAgLS0jeyRwcmVmaXh9bW9kYWwtbWFyZ2luOiAjeyRtb2RhbC1kaWFsb2ctbWFyZ2lufTtcbiAgLS0jeyRwcmVmaXh9bW9kYWwtY29sb3I6ICN7JG1vZGFsLWNvbnRlbnQtY29sb3J9O1xuICAtLSN7JHByZWZpeH1tb2RhbC1iZzogI3skbW9kYWwtY29udGVudC1iZ307XG4gIC0tI3skcHJlZml4fW1vZGFsLWJvcmRlci1jb2xvcjogI3skbW9kYWwtY29udGVudC1ib3JkZXItY29sb3J9O1xuICAtLSN7JHByZWZpeH1tb2RhbC1ib3JkZXItd2lkdGg6ICN7JG1vZGFsLWNvbnRlbnQtYm9yZGVyLXdpZHRofTtcbiAgLS0jeyRwcmVmaXh9bW9kYWwtYm9yZGVyLXJhZGl1czogI3skbW9kYWwtY29udGVudC1ib3JkZXItcmFkaXVzfTtcbiAgLS0jeyRwcmVmaXh9bW9kYWwtYm94LXNoYWRvdzogI3skbW9kYWwtY29udGVudC1ib3gtc2hhZG93LXhzfTtcbiAgLS0jeyRwcmVmaXh9bW9kYWwtaW5uZXItYm9yZGVyLXJhZGl1czogI3skbW9kYWwtY29udGVudC1pbm5lci1ib3JkZXItcmFkaXVzfTtcbiAgLS0jeyRwcmVmaXh9bW9kYWwtaGVhZGVyLXBhZGRpbmcteDogI3skbW9kYWwtaGVhZGVyLXBhZGRpbmcteH07XG4gIC0tI3skcHJlZml4fW1vZGFsLWhlYWRlci1wYWRkaW5nLXk6ICN7JG1vZGFsLWhlYWRlci1wYWRkaW5nLXl9O1xuICAtLSN7JHByZWZpeH1tb2RhbC1oZWFkZXItcGFkZGluZzogI3skbW9kYWwtaGVhZGVyLXBhZGRpbmd9OyAvLyBUb2RvIGluIHY2OiBTcGxpdCB0aGlzIHBhZGRpbmcgaW50byB4IGFuZCB5XG4gIC0tI3skcHJlZml4fW1vZGFsLWhlYWRlci1ib3JkZXItY29sb3I6ICN7JG1vZGFsLWhlYWRlci1ib3JkZXItY29sb3J9O1xuICAtLSN7JHByZWZpeH1tb2RhbC1oZWFkZXItYm9yZGVyLXdpZHRoOiAjeyRtb2RhbC1oZWFkZXItYm9yZGVyLXdpZHRofTtcbiAgLS0jeyRwcmVmaXh9bW9kYWwtdGl0bGUtbGluZS1oZWlnaHQ6ICN7JG1vZGFsLXRpdGxlLWxpbmUtaGVpZ2h0fTtcbiAgLS0jeyRwcmVmaXh9bW9kYWwtZm9vdGVyLWdhcDogI3skbW9kYWwtZm9vdGVyLW1hcmdpbi1iZXR3ZWVufTtcbiAgLS0jeyRwcmVmaXh9bW9kYWwtZm9vdGVyLWJnOiAjeyRtb2RhbC1mb290ZXItYmd9O1xuICAtLSN7JHByZWZpeH1tb2RhbC1mb290ZXItYm9yZGVyLWNvbG9yOiAjeyRtb2RhbC1mb290ZXItYm9yZGVyLWNvbG9yfTtcbiAgLS0jeyRwcmVmaXh9bW9kYWwtZm9vdGVyLWJvcmRlci13aWR0aDogI3skbW9kYWwtZm9vdGVyLWJvcmRlci13aWR0aH07XG4gIC8vIHNjc3MtZG9jcy1lbmQgbW9kYWwtY3NzLXZhcnNcblxuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgei1pbmRleDogdmFyKC0tI3skcHJlZml4fW1vZGFsLXppbmRleCk7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIG92ZXJmbG93LXg6IGhpZGRlbjtcbiAgb3ZlcmZsb3cteTogYXV0bztcbiAgLy8gUHJldmVudCBDaHJvbWUgb24gV2luZG93cyBmcm9tIGFkZGluZyBhIGZvY3VzIG91dGxpbmUuIEZvciBkZXRhaWxzLCBzZWVcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL3B1bGwvMTA5NTEuXG4gIG91dGxpbmU6IDA7XG4gIC8vIFdlIGRlbGliZXJhdGVseSBkb24ndCB1c2UgYC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDtgIGR1ZSB0byBhXG4gIC8vIGduYXJseSBpT1MgU2FmYXJpIGJ1ZzogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1ODM0MlxuICAvLyBTZWUgYWxzbyBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvaXNzdWVzLzE3Njk1XG59XG5cbi8vIFNoZWxsIGRpdiB0byBwb3NpdGlvbiB0aGUgbW9kYWwgd2l0aCBib3R0b20gcGFkZGluZ1xuLm1vZGFsLWRpYWxvZyB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgd2lkdGg6IGF1dG87XG4gIG1hcmdpbjogdmFyKC0tI3skcHJlZml4fW1vZGFsLW1hcmdpbik7XG4gIC8vIGFsbG93IGNsaWNrcyB0byBwYXNzIHRocm91Z2ggZm9yIGN1c3RvbSBjbGljayBoYW5kbGluZyB0byBjbG9zZSBtb2RhbFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcblxuICAvLyBXaGVuIGZhZGluZyBpbiB0aGUgbW9kYWwsIGFuaW1hdGUgaXQgdG8gc2xpZGUgZG93blxuICAubW9kYWwuZmFkZSAmIHtcbiAgICBAaW5jbHVkZSB0cmFuc2l0aW9uKCRtb2RhbC10cmFuc2l0aW9uKTtcbiAgICB0cmFuc2Zvcm06ICRtb2RhbC1mYWRlLXRyYW5zZm9ybTtcbiAgfVxuICAubW9kYWwuc2hvdyAmIHtcbiAgICB0cmFuc2Zvcm06ICRtb2RhbC1zaG93LXRyYW5zZm9ybTtcbiAgfVxuXG4gIC8vIFdoZW4gdHJ5aW5nIHRvIGNsb3NlLCBhbmltYXRlIGZvY3VzIHRvIHNjYWxlXG4gIC5tb2RhbC5tb2RhbC1zdGF0aWMgJiB7XG4gICAgdHJhbnNmb3JtOiAkbW9kYWwtc2NhbGUtdHJhbnNmb3JtO1xuICB9XG59XG5cbi5tb2RhbC1kaWFsb2ctc2Nyb2xsYWJsZSB7XG4gIGhlaWdodDogY2FsYygxMDAlIC0gdmFyKC0tI3skcHJlZml4fW1vZGFsLW1hcmdpbikgKiAyKTtcblxuICAubW9kYWwtY29udGVudCB7XG4gICAgbWF4LWhlaWdodDogMTAwJTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICB9XG5cbiAgLm1vZGFsLWJvZHkge1xuICAgIG92ZXJmbG93LXk6IGF1dG87XG4gIH1cbn1cblxuLm1vZGFsLWRpYWxvZy1jZW50ZXJlZCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIG1pbi1oZWlnaHQ6IGNhbGMoMTAwJSAtIHZhcigtLSN7JHByZWZpeH1tb2RhbC1tYXJnaW4pICogMik7XG59XG5cbi8vIEFjdHVhbCBtb2RhbFxuLm1vZGFsLWNvbnRlbnQge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIHdpZHRoOiAxMDAlOyAvLyBFbnN1cmUgYC5tb2RhbC1jb250ZW50YCBleHRlbmRzIHRoZSBmdWxsIHdpZHRoIG9mIHRoZSBwYXJlbnQgYC5tb2RhbC1kaWFsb2dgXG4gIC8vIGNvdW50ZXJhY3QgdGhlIHBvaW50ZXItZXZlbnRzOiBub25lOyBpbiB0aGUgLm1vZGFsLWRpYWxvZ1xuICBjb2xvcjogdmFyKC0tI3skcHJlZml4fW1vZGFsLWNvbG9yKTtcbiAgcG9pbnRlci1ldmVudHM6IGF1dG87XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLSN7JHByZWZpeH1tb2RhbC1iZyk7XG4gIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XG4gIGJvcmRlcjogdmFyKC0tI3skcHJlZml4fW1vZGFsLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tI3skcHJlZml4fW1vZGFsLWJvcmRlci1jb2xvcik7XG4gIEBpbmNsdWRlIGJvcmRlci1yYWRpdXModmFyKC0tI3skcHJlZml4fW1vZGFsLWJvcmRlci1yYWRpdXMpKTtcbiAgQGluY2x1ZGUgYm94LXNoYWRvdyh2YXIoLS0jeyRwcmVmaXh9bW9kYWwtYm94LXNoYWRvdykpO1xuICAvLyBSZW1vdmUgZm9jdXMgb3V0bGluZSBmcm9tIG9wZW5lZCBtb2RhbFxuICBvdXRsaW5lOiAwO1xufVxuXG4vLyBNb2RhbCBiYWNrZ3JvdW5kXG4ubW9kYWwtYmFja2Ryb3Age1xuICAvLyBzY3NzLWRvY3Mtc3RhcnQgbW9kYWwtYmFja2Ryb3AtY3NzLXZhcnNcbiAgLS0jeyRwcmVmaXh9YmFja2Ryb3AtemluZGV4OiAjeyR6aW5kZXgtbW9kYWwtYmFja2Ryb3B9O1xuICAtLSN7JHByZWZpeH1iYWNrZHJvcC1iZzogI3skbW9kYWwtYmFja2Ryb3AtYmd9O1xuICAtLSN7JHByZWZpeH1iYWNrZHJvcC1vcGFjaXR5OiAjeyRtb2RhbC1iYWNrZHJvcC1vcGFjaXR5fTtcbiAgLy8gc2Nzcy1kb2NzLWVuZCBtb2RhbC1iYWNrZHJvcC1jc3MtdmFyc1xuXG4gIEBpbmNsdWRlIG92ZXJsYXktYmFja2Ryb3AodmFyKC0tI3skcHJlZml4fWJhY2tkcm9wLXppbmRleCksIHZhcigtLSN7JHByZWZpeH1iYWNrZHJvcC1iZyksIHZhcigtLSN7JHByZWZpeH1iYWNrZHJvcC1vcGFjaXR5KSk7XG59XG5cbi8vIE1vZGFsIGhlYWRlclxuLy8gVG9wIHNlY3Rpb24gb2YgdGhlIG1vZGFsIHcvIHRpdGxlIGFuZCBkaXNtaXNzXG4ubW9kYWwtaGVhZGVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1zaHJpbms6IDA7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHBhZGRpbmc6IHZhcigtLSN7JHByZWZpeH1tb2RhbC1oZWFkZXItcGFkZGluZyk7XG4gIGJvcmRlci1ib3R0b206IHZhcigtLSN7JHByZWZpeH1tb2RhbC1oZWFkZXItYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS0jeyRwcmVmaXh9bW9kYWwtaGVhZGVyLWJvcmRlci1jb2xvcik7XG4gIEBpbmNsdWRlIGJvcmRlci10b3AtcmFkaXVzKHZhcigtLSN7JHByZWZpeH1tb2RhbC1pbm5lci1ib3JkZXItcmFkaXVzKSk7XG5cbiAgLmJ0bi1jbG9zZSB7XG4gICAgcGFkZGluZzogY2FsYyh2YXIoLS0jeyRwcmVmaXh9bW9kYWwtaGVhZGVyLXBhZGRpbmcteSkgKiAuNSkgY2FsYyh2YXIoLS0jeyRwcmVmaXh9bW9kYWwtaGVhZGVyLXBhZGRpbmcteCkgKiAuNSk7XG4gICAgbWFyZ2luOiBjYWxjKC0uNSAqIHZhcigtLSN7JHByZWZpeH1tb2RhbC1oZWFkZXItcGFkZGluZy15KSkgY2FsYygtLjUgKiB2YXIoLS0jeyRwcmVmaXh9bW9kYWwtaGVhZGVyLXBhZGRpbmcteCkpIGNhbGMoLS41ICogdmFyKC0tI3skcHJlZml4fW1vZGFsLWhlYWRlci1wYWRkaW5nLXkpKSBhdXRvO1xuICB9XG59XG5cbi8vIFRpdGxlIHRleHQgd2l0aGluIGhlYWRlclxuLm1vZGFsLXRpdGxlIHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgbGluZS1oZWlnaHQ6IHZhcigtLSN7JHByZWZpeH1tb2RhbC10aXRsZS1saW5lLWhlaWdodCk7XG59XG5cbi8vIE1vZGFsIGJvZHlcbi8vIFdoZXJlIGFsbCBtb2RhbCBjb250ZW50IHJlc2lkZXMgKHNpYmxpbmcgb2YgLm1vZGFsLWhlYWRlciBhbmQgLm1vZGFsLWZvb3Rlcilcbi5tb2RhbC1ib2R5IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAvLyBFbmFibGUgYGZsZXgtZ3JvdzogMWAgc28gdGhhdCB0aGUgYm9keSB0YWtlIHVwIGFzIG11Y2ggc3BhY2UgYXMgcG9zc2libGVcbiAgLy8gd2hlbiB0aGVyZSBzaG91bGQgYmUgYSBmaXhlZCBoZWlnaHQgb24gYC5tb2RhbC1kaWFsb2dgLlxuICBmbGV4OiAxIDEgYXV0bztcbiAgcGFkZGluZzogdmFyKC0tI3skcHJlZml4fW1vZGFsLXBhZGRpbmcpO1xufVxuXG4vLyBGb290ZXIgKGZvciBhY3Rpb25zKVxuLm1vZGFsLWZvb3RlciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtc2hyaW5rOiAwO1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7IC8vIHZlcnRpY2FsbHkgY2VudGVyXG4gIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7IC8vIFJpZ2h0IGFsaWduIGJ1dHRvbnMgd2l0aCBmbGV4IHByb3BlcnR5IGJlY2F1c2UgdGV4dC1hbGlnbiBkb2Vzbid0IHdvcmsgb24gZmxleCBpdGVtc1xuICBwYWRkaW5nOiBjYWxjKHZhcigtLSN7JHByZWZpeH1tb2RhbC1wYWRkaW5nKSAtIHZhcigtLSN7JHByZWZpeH1tb2RhbC1mb290ZXItZ2FwKSAqIC41KTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tI3skcHJlZml4fW1vZGFsLWZvb3Rlci1iZyk7XG4gIGJvcmRlci10b3A6IHZhcigtLSN7JHByZWZpeH1tb2RhbC1mb290ZXItYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS0jeyRwcmVmaXh9bW9kYWwtZm9vdGVyLWJvcmRlci1jb2xvcik7XG4gIEBpbmNsdWRlIGJvcmRlci1ib3R0b20tcmFkaXVzKHZhcigtLSN7JHByZWZpeH1tb2RhbC1pbm5lci1ib3JkZXItcmFkaXVzKSk7XG5cbiAgLy8gUGxhY2UgbWFyZ2luIGJldHdlZW4gZm9vdGVyIGVsZW1lbnRzXG4gIC8vIFRoaXMgc29sdXRpb24gaXMgZmFyIGZyb20gaWRlYWwgYmVjYXVzZSBvZiB0aGUgdW5pdmVyc2FsIHNlbGVjdG9yIHVzYWdlLFxuICAvLyBidXQgaXMgbmVlZGVkIHRvIGZpeCBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvaXNzdWVzLzI0ODAwXG4gID4gKiB7XG4gICAgbWFyZ2luOiBjYWxjKHZhcigtLSN7JHByZWZpeH1tb2RhbC1mb290ZXItZ2FwKSAqIC41KTsgLy8gVG9kbyBpbiB2NjogcmVwbGFjZSB3aXRoIGdhcCBvbiBwYXJlbnQgY2xhc3NcbiAgfVxufVxuXG4vLyBTY2FsZSB1cCB0aGUgbW9kYWxcbkBpbmNsdWRlIG1lZGlhLWJyZWFrcG9pbnQtdXAoc20pIHtcbiAgLm1vZGFsIHtcbiAgICAtLSN7JHByZWZpeH1tb2RhbC1tYXJnaW46ICN7JG1vZGFsLWRpYWxvZy1tYXJnaW4teS1zbS11cH07XG4gICAgLS0jeyRwcmVmaXh9bW9kYWwtYm94LXNoYWRvdzogI3skbW9kYWwtY29udGVudC1ib3gtc2hhZG93LXNtLXVwfTtcbiAgfVxuXG4gIC8vIEF1dG9tYXRpY2FsbHkgc2V0IG1vZGFsJ3Mgd2lkdGggZm9yIGxhcmdlciB2aWV3cG9ydHNcbiAgLm1vZGFsLWRpYWxvZyB7XG4gICAgbWF4LXdpZHRoOiB2YXIoLS0jeyRwcmVmaXh9bW9kYWwtd2lkdGgpO1xuICAgIG1hcmdpbi1yaWdodDogYXV0bztcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgfVxuXG4gIC5tb2RhbC1zbSB7XG4gICAgLS0jeyRwcmVmaXh9bW9kYWwtd2lkdGg6ICN7JG1vZGFsLXNtfTtcbiAgfVxufVxuXG5AaW5jbHVkZSBtZWRpYS1icmVha3BvaW50LXVwKGxnKSB7XG4gIC5tb2RhbC1sZyxcbiAgLm1vZGFsLXhsIHtcbiAgICAtLSN7JHByZWZpeH1tb2RhbC13aWR0aDogI3skbW9kYWwtbGd9O1xuICB9XG59XG5cbkBpbmNsdWRlIG1lZGlhLWJyZWFrcG9pbnQtdXAoeGwpIHtcbiAgLm1vZGFsLXhsIHtcbiAgICAtLSN7JHByZWZpeH1tb2RhbC13aWR0aDogI3skbW9kYWwteGx9O1xuICB9XG59XG5cbi8vIHNjc3MtZG9jcy1zdGFydCBtb2RhbC1mdWxsc2NyZWVuLWxvb3BcbkBlYWNoICRicmVha3BvaW50IGluIG1hcC1rZXlzKCRncmlkLWJyZWFrcG9pbnRzKSB7XG4gICRpbmZpeDogYnJlYWtwb2ludC1pbmZpeCgkYnJlYWtwb2ludCwgJGdyaWQtYnJlYWtwb2ludHMpO1xuICAkcG9zdGZpeDogaWYoJGluZml4ICE9IFwiXCIsICRpbmZpeCArIFwiLWRvd25cIiwgXCJcIik7XG5cbiAgQGluY2x1ZGUgbWVkaWEtYnJlYWtwb2ludC1kb3duKCRicmVha3BvaW50KSB7XG4gICAgLm1vZGFsLWZ1bGxzY3JlZW4jeyRwb3N0Zml4fSB7XG4gICAgICB3aWR0aDogMTAwdnc7XG4gICAgICBtYXgtd2lkdGg6IG5vbmU7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBtYXJnaW46IDA7XG5cbiAgICAgIC5tb2RhbC1jb250ZW50IHtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgIEBpbmNsdWRlIGJvcmRlci1yYWRpdXMoMCk7XG4gICAgICB9XG5cbiAgICAgIC5tb2RhbC1oZWFkZXIsXG4gICAgICAubW9kYWwtZm9vdGVyIHtcbiAgICAgICAgQGluY2x1ZGUgYm9yZGVyLXJhZGl1cygwKTtcbiAgICAgIH1cblxuICAgICAgLm1vZGFsLWJvZHkge1xuICAgICAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuLy8gc2Nzcy1kb2NzLWVuZCBtb2RhbC1mdWxsc2NyZWVuLWxvb3BcbiIsIi8vIFNoYXJlZCBiZXR3ZWVuIG1vZGFscyBhbmQgb2ZmY2FudmFzZXNcbkBtaXhpbiBvdmVybGF5LWJhY2tkcm9wKCR6aW5kZXgsICRiYWNrZHJvcC1iZywgJGJhY2tkcm9wLW9wYWNpdHkpIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHotaW5kZXg6ICR6aW5kZXg7XG4gIHdpZHRoOiAxMDB2dztcbiAgaGVpZ2h0OiAxMDB2aDtcbiAgYmFja2dyb3VuZC1jb2xvcjogJGJhY2tkcm9wLWJnO1xuXG4gIC8vIEZhZGUgZm9yIGJhY2tkcm9wXG4gICYuZmFkZSB7IG9wYWNpdHk6IDA7IH1cbiAgJi5zaG93IHsgb3BhY2l0eTogJGJhY2tkcm9wLW9wYWNpdHk7IH1cbn1cbiIsIi8vIEJhc2UgY2xhc3Ncbi50b29sdGlwIHtcbiAgLy8gc2Nzcy1kb2NzLXN0YXJ0IHRvb2x0aXAtY3NzLXZhcnNcbiAgLS0jeyRwcmVmaXh9dG9vbHRpcC16aW5kZXg6ICN7JHppbmRleC10b29sdGlwfTtcbiAgLS0jeyRwcmVmaXh9dG9vbHRpcC1tYXgtd2lkdGg6ICN7JHRvb2x0aXAtbWF4LXdpZHRofTtcbiAgLS0jeyRwcmVmaXh9dG9vbHRpcC1wYWRkaW5nLXg6ICN7JHRvb2x0aXAtcGFkZGluZy14fTtcbiAgLS0jeyRwcmVmaXh9dG9vbHRpcC1wYWRkaW5nLXk6ICN7JHRvb2x0aXAtcGFkZGluZy15fTtcbiAgLS0jeyRwcmVmaXh9dG9vbHRpcC1tYXJnaW46ICN7JHRvb2x0aXAtbWFyZ2lufTtcbiAgQGluY2x1ZGUgcmZzKCR0b29sdGlwLWZvbnQtc2l6ZSwgLS0jeyRwcmVmaXh9dG9vbHRpcC1mb250LXNpemUpO1xuICAtLSN7JHByZWZpeH10b29sdGlwLWNvbG9yOiAjeyR0b29sdGlwLWNvbG9yfTtcbiAgLS0jeyRwcmVmaXh9dG9vbHRpcC1iZzogI3skdG9vbHRpcC1iZ307XG4gIC0tI3skcHJlZml4fXRvb2x0aXAtYm9yZGVyLXJhZGl1czogI3skdG9vbHRpcC1ib3JkZXItcmFkaXVzfTtcbiAgLS0jeyRwcmVmaXh9dG9vbHRpcC1vcGFjaXR5OiAjeyR0b29sdGlwLW9wYWNpdHl9O1xuICAtLSN7JHByZWZpeH10b29sdGlwLWFycm93LXdpZHRoOiAjeyR0b29sdGlwLWFycm93LXdpZHRofTtcbiAgLS0jeyRwcmVmaXh9dG9vbHRpcC1hcnJvdy1oZWlnaHQ6ICN7JHRvb2x0aXAtYXJyb3ctaGVpZ2h0fTtcbiAgLy8gc2Nzcy1kb2NzLWVuZCB0b29sdGlwLWNzcy12YXJzXG5cbiAgei1pbmRleDogdmFyKC0tI3skcHJlZml4fXRvb2x0aXAtemluZGV4KTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG1hcmdpbjogdmFyKC0tI3skcHJlZml4fXRvb2x0aXAtbWFyZ2luKTtcbiAgQGluY2x1ZGUgZGVwcmVjYXRlKFwiYCR0b29sdGlwLW1hcmdpbmBcIiwgXCJ2NVwiLCBcInY1LnhcIiwgdHJ1ZSk7XG4gIC8vIE91ciBwYXJlbnQgZWxlbWVudCBjYW4gYmUgYXJiaXRyYXJ5IHNpbmNlIHRvb2x0aXBzIGFyZSBieSBkZWZhdWx0IGluc2VydGVkIGFzIGEgc2libGluZyBvZiB0aGVpciB0YXJnZXQgZWxlbWVudC5cbiAgLy8gU28gcmVzZXQgb3VyIGZvbnQgYW5kIHRleHQgcHJvcGVydGllcyB0byBhdm9pZCBpbmhlcml0aW5nIHdlaXJkIHZhbHVlcy5cbiAgQGluY2x1ZGUgcmVzZXQtdGV4dCgpO1xuICBAaW5jbHVkZSBmb250LXNpemUodmFyKC0tI3skcHJlZml4fXRvb2x0aXAtZm9udC1zaXplKSk7XG4gIC8vIEFsbG93IGJyZWFraW5nIHZlcnkgbG9uZyB3b3JkcyBzbyB0aGV5IGRvbid0IG92ZXJmbG93IHRoZSB0b29sdGlwJ3MgYm91bmRzXG4gIHdvcmQtd3JhcDogYnJlYWstd29yZDtcbiAgb3BhY2l0eTogMDtcblxuICAmLnNob3cgeyBvcGFjaXR5OiB2YXIoLS0jeyRwcmVmaXh9dG9vbHRpcC1vcGFjaXR5KTsgfVxuXG4gIC50b29sdGlwLWFycm93IHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICB3aWR0aDogdmFyKC0tI3skcHJlZml4fXRvb2x0aXAtYXJyb3ctd2lkdGgpO1xuICAgIGhlaWdodDogdmFyKC0tI3skcHJlZml4fXRvb2x0aXAtYXJyb3ctaGVpZ2h0KTtcblxuICAgICY6OmJlZm9yZSB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBjb250ZW50OiBcIlwiO1xuICAgICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgIGJvcmRlci1zdHlsZTogc29saWQ7XG4gICAgfVxuICB9XG59XG5cbi5icy10b29sdGlwLXRvcCAudG9vbHRpcC1hcnJvdyB7XG4gIGJvdHRvbTogY2FsYygtMSAqIHZhcigtLSN7JHByZWZpeH10b29sdGlwLWFycm93LWhlaWdodCkpOyAvLyBzdHlsZWxpbnQtZGlzYWJsZS1saW5lIGZ1bmN0aW9uLWRpc2FsbG93ZWQtbGlzdFxuXG4gICY6OmJlZm9yZSB7XG4gICAgdG9wOiAtMXB4O1xuICAgIGJvcmRlci13aWR0aDogdmFyKC0tI3skcHJlZml4fXRvb2x0aXAtYXJyb3ctaGVpZ2h0KSBjYWxjKHZhcigtLSN7JHByZWZpeH10b29sdGlwLWFycm93LXdpZHRoKSAqIC41KSAwOyAvLyBzdHlsZWxpbnQtZGlzYWJsZS1saW5lIGZ1bmN0aW9uLWRpc2FsbG93ZWQtbGlzdFxuICAgIGJvcmRlci10b3AtY29sb3I6IHZhcigtLSN7JHByZWZpeH10b29sdGlwLWJnKTtcbiAgfVxufVxuXG4vKiBydGw6YmVnaW46aWdub3JlICovXG4uYnMtdG9vbHRpcC1lbmQgLnRvb2x0aXAtYXJyb3cge1xuICBsZWZ0OiBjYWxjKC0xICogdmFyKC0tI3skcHJlZml4fXRvb2x0aXAtYXJyb3ctaGVpZ2h0KSk7IC8vIHN0eWxlbGludC1kaXNhYmxlLWxpbmUgZnVuY3Rpb24tZGlzYWxsb3dlZC1saXN0XG4gIHdpZHRoOiB2YXIoLS0jeyRwcmVmaXh9dG9vbHRpcC1hcnJvdy1oZWlnaHQpO1xuICBoZWlnaHQ6IHZhcigtLSN7JHByZWZpeH10b29sdGlwLWFycm93LXdpZHRoKTtcblxuICAmOjpiZWZvcmUge1xuICAgIHJpZ2h0OiAtMXB4O1xuICAgIGJvcmRlci13aWR0aDogY2FsYyh2YXIoLS0jeyRwcmVmaXh9dG9vbHRpcC1hcnJvdy13aWR0aCkgKiAuNSkgdmFyKC0tI3skcHJlZml4fXRvb2x0aXAtYXJyb3ctaGVpZ2h0KSBjYWxjKHZhcigtLSN7JHByZWZpeH10b29sdGlwLWFycm93LXdpZHRoKSAqIC41KSAwOyAvLyBzdHlsZWxpbnQtZGlzYWJsZS1saW5lIGZ1bmN0aW9uLWRpc2FsbG93ZWQtbGlzdFxuICAgIGJvcmRlci1yaWdodC1jb2xvcjogdmFyKC0tI3skcHJlZml4fXRvb2x0aXAtYmcpO1xuICB9XG59XG5cbi8qIHJ0bDplbmQ6aWdub3JlICovXG5cbi5icy10b29sdGlwLWJvdHRvbSAudG9vbHRpcC1hcnJvdyB7XG4gIHRvcDogY2FsYygtMSAqIHZhcigtLSN7JHByZWZpeH10b29sdGlwLWFycm93LWhlaWdodCkpOyAvLyBzdHlsZWxpbnQtZGlzYWJsZS1saW5lIGZ1bmN0aW9uLWRpc2FsbG93ZWQtbGlzdFxuXG4gICY6OmJlZm9yZSB7XG4gICAgYm90dG9tOiAtMXB4O1xuICAgIGJvcmRlci13aWR0aDogMCBjYWxjKHZhcigtLSN7JHByZWZpeH10b29sdGlwLWFycm93LXdpZHRoKSAqIC41KSB2YXIoLS0jeyRwcmVmaXh9dG9vbHRpcC1hcnJvdy1oZWlnaHQpOyAvLyBzdHlsZWxpbnQtZGlzYWJsZS1saW5lIGZ1bmN0aW9uLWRpc2FsbG93ZWQtbGlzdFxuICAgIGJvcmRlci1ib3R0b20tY29sb3I6IHZhcigtLSN7JHByZWZpeH10b29sdGlwLWJnKTtcbiAgfVxufVxuXG4vKiBydGw6YmVnaW46aWdub3JlICovXG4uYnMtdG9vbHRpcC1zdGFydCAudG9vbHRpcC1hcnJvdyB7XG4gIHJpZ2h0OiBjYWxjKC0xICogdmFyKC0tI3skcHJlZml4fXRvb2x0aXAtYXJyb3ctaGVpZ2h0KSk7IC8vIHN0eWxlbGludC1kaXNhYmxlLWxpbmUgZnVuY3Rpb24tZGlzYWxsb3dlZC1saXN0XG4gIHdpZHRoOiB2YXIoLS0jeyRwcmVmaXh9dG9vbHRpcC1hcnJvdy1oZWlnaHQpO1xuICBoZWlnaHQ6IHZhcigtLSN7JHByZWZpeH10b29sdGlwLWFycm93LXdpZHRoKTtcblxuICAmOjpiZWZvcmUge1xuICAgIGxlZnQ6IC0xcHg7XG4gICAgYm9yZGVyLXdpZHRoOiBjYWxjKHZhcigtLSN7JHByZWZpeH10b29sdGlwLWFycm93LXdpZHRoKSAqIC41KSAwIGNhbGModmFyKC0tI3skcHJlZml4fXRvb2x0aXAtYXJyb3ctd2lkdGgpICogLjUpIHZhcigtLSN7JHByZWZpeH10b29sdGlwLWFycm93LWhlaWdodCk7IC8vIHN0eWxlbGludC1kaXNhYmxlLWxpbmUgZnVuY3Rpb24tZGlzYWxsb3dlZC1saXN0XG4gICAgYm9yZGVyLWxlZnQtY29sb3I6IHZhcigtLSN7JHByZWZpeH10b29sdGlwLWJnKTtcbiAgfVxufVxuXG4vKiBydGw6ZW5kOmlnbm9yZSAqL1xuXG4uYnMtdG9vbHRpcC1hdXRvIHtcbiAgJltkYXRhLXBvcHBlci1wbGFjZW1lbnRePVwidG9wXCJdIHtcbiAgICBAZXh0ZW5kIC5icy10b29sdGlwLXRvcDtcbiAgfVxuICAmW2RhdGEtcG9wcGVyLXBsYWNlbWVudF49XCJyaWdodFwiXSB7XG4gICAgQGV4dGVuZCAuYnMtdG9vbHRpcC1lbmQ7XG4gIH1cbiAgJltkYXRhLXBvcHBlci1wbGFjZW1lbnRePVwiYm90dG9tXCJdIHtcbiAgICBAZXh0ZW5kIC5icy10b29sdGlwLWJvdHRvbTtcbiAgfVxuICAmW2RhdGEtcG9wcGVyLXBsYWNlbWVudF49XCJsZWZ0XCJdIHtcbiAgICBAZXh0ZW5kIC5icy10b29sdGlwLXN0YXJ0O1xuICB9XG59XG5cbi8vIFdyYXBwZXIgZm9yIHRoZSB0b29sdGlwIGNvbnRlbnRcbi50b29sdGlwLWlubmVyIHtcbiAgbWF4LXdpZHRoOiB2YXIoLS0jeyRwcmVmaXh9dG9vbHRpcC1tYXgtd2lkdGgpO1xuICBwYWRkaW5nOiB2YXIoLS0jeyRwcmVmaXh9dG9vbHRpcC1wYWRkaW5nLXkpIHZhcigtLSN7JHByZWZpeH10b29sdGlwLXBhZGRpbmcteCk7XG4gIGNvbG9yOiB2YXIoLS0jeyRwcmVmaXh9dG9vbHRpcC1jb2xvcik7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tI3skcHJlZml4fXRvb2x0aXAtYmcpO1xuICBAaW5jbHVkZSBib3JkZXItcmFkaXVzKHZhcigtLSN7JHByZWZpeH10b29sdGlwLWJvcmRlci1yYWRpdXMpKTtcbn1cbiIsIkBtaXhpbiByZXNldC10ZXh0IHtcbiAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1iYXNlO1xuICAvLyBXZSBkZWxpYmVyYXRlbHkgZG8gTk9UIHJlc2V0IGZvbnQtc2l6ZSBvciBvdmVyZmxvdy13cmFwIC8gd29yZC13cmFwLlxuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIGZvbnQtd2VpZ2h0OiAkZm9udC13ZWlnaHQtbm9ybWFsO1xuICBsaW5lLWhlaWdodDogJGxpbmUtaGVpZ2h0LWJhc2U7XG4gIHRleHQtYWxpZ246IGxlZnQ7IC8vIEZhbGxiYWNrIGZvciB3aGVyZSBgc3RhcnRgIGlzIG5vdCBzdXBwb3J0ZWRcbiAgdGV4dC1hbGlnbjogc3RhcnQ7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgdGV4dC1zaGFkb3c6IG5vbmU7XG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xuICBsZXR0ZXItc3BhY2luZzogbm9ybWFsO1xuICB3b3JkLWJyZWFrOiBub3JtYWw7XG4gIHdoaXRlLXNwYWNlOiBub3JtYWw7XG4gIHdvcmQtc3BhY2luZzogbm9ybWFsO1xuICBsaW5lLWJyZWFrOiBhdXRvO1xufVxuIiwiLnBvcG92ZXIge1xuICAvLyBzY3NzLWRvY3Mtc3RhcnQgcG9wb3Zlci1jc3MtdmFyc1xuICAtLSN7JHByZWZpeH1wb3BvdmVyLXppbmRleDogI3skemluZGV4LXBvcG92ZXJ9O1xuICAtLSN7JHByZWZpeH1wb3BvdmVyLW1heC13aWR0aDogI3skcG9wb3Zlci1tYXgtd2lkdGh9O1xuICBAaW5jbHVkZSByZnMoJHBvcG92ZXItZm9udC1zaXplLCAtLSN7JHByZWZpeH1wb3BvdmVyLWZvbnQtc2l6ZSk7XG4gIC0tI3skcHJlZml4fXBvcG92ZXItYmc6ICN7JHBvcG92ZXItYmd9O1xuICAtLSN7JHByZWZpeH1wb3BvdmVyLWJvcmRlci13aWR0aDogI3skcG9wb3Zlci1ib3JkZXItd2lkdGh9O1xuICAtLSN7JHByZWZpeH1wb3BvdmVyLWJvcmRlci1jb2xvcjogI3skcG9wb3Zlci1ib3JkZXItY29sb3J9O1xuICAtLSN7JHByZWZpeH1wb3BvdmVyLWJvcmRlci1yYWRpdXM6ICN7JHBvcG92ZXItYm9yZGVyLXJhZGl1c307XG4gIC0tI3skcHJlZml4fXBvcG92ZXItaW5uZXItYm9yZGVyLXJhZGl1czogI3skcG9wb3Zlci1pbm5lci1ib3JkZXItcmFkaXVzfTtcbiAgLS0jeyRwcmVmaXh9cG9wb3Zlci1ib3gtc2hhZG93OiAjeyRwb3BvdmVyLWJveC1zaGFkb3d9O1xuICAtLSN7JHByZWZpeH1wb3BvdmVyLWhlYWRlci1wYWRkaW5nLXg6ICN7JHBvcG92ZXItaGVhZGVyLXBhZGRpbmcteH07XG4gIC0tI3skcHJlZml4fXBvcG92ZXItaGVhZGVyLXBhZGRpbmcteTogI3skcG9wb3Zlci1oZWFkZXItcGFkZGluZy15fTtcbiAgQGluY2x1ZGUgcmZzKCRwb3BvdmVyLWhlYWRlci1mb250LXNpemUsIC0tI3skcHJlZml4fXBvcG92ZXItaGVhZGVyLWZvbnQtc2l6ZSk7XG4gIC0tI3skcHJlZml4fXBvcG92ZXItaGVhZGVyLWNvbG9yOiAjeyRwb3BvdmVyLWhlYWRlci1jb2xvcn07XG4gIC0tI3skcHJlZml4fXBvcG92ZXItaGVhZGVyLWJnOiAjeyRwb3BvdmVyLWhlYWRlci1iZ307XG4gIC0tI3skcHJlZml4fXBvcG92ZXItYm9keS1wYWRkaW5nLXg6ICN7JHBvcG92ZXItYm9keS1wYWRkaW5nLXh9O1xuICAtLSN7JHByZWZpeH1wb3BvdmVyLWJvZHktcGFkZGluZy15OiAjeyRwb3BvdmVyLWJvZHktcGFkZGluZy15fTtcbiAgLS0jeyRwcmVmaXh9cG9wb3Zlci1ib2R5LWNvbG9yOiAjeyRwb3BvdmVyLWJvZHktY29sb3J9O1xuICAtLSN7JHByZWZpeH1wb3BvdmVyLWFycm93LXdpZHRoOiAjeyRwb3BvdmVyLWFycm93LXdpZHRofTtcbiAgLS0jeyRwcmVmaXh9cG9wb3Zlci1hcnJvdy1oZWlnaHQ6ICN7JHBvcG92ZXItYXJyb3ctaGVpZ2h0fTtcbiAgLS0jeyRwcmVmaXh9cG9wb3Zlci1hcnJvdy1ib3JkZXI6IHZhcigtLSN7JHByZWZpeH1wb3BvdmVyLWJvcmRlci1jb2xvcik7XG4gIC8vIHNjc3MtZG9jcy1lbmQgcG9wb3Zlci1jc3MtdmFyc1xuXG4gIHotaW5kZXg6IHZhcigtLSN7JHByZWZpeH1wb3BvdmVyLXppbmRleCk7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXgtd2lkdGg6IHZhcigtLSN7JHByZWZpeH1wb3BvdmVyLW1heC13aWR0aCk7XG4gIC8vIE91ciBwYXJlbnQgZWxlbWVudCBjYW4gYmUgYXJiaXRyYXJ5IHNpbmNlIHRvb2x0aXBzIGFyZSBieSBkZWZhdWx0IGluc2VydGVkIGFzIGEgc2libGluZyBvZiB0aGVpciB0YXJnZXQgZWxlbWVudC5cbiAgLy8gU28gcmVzZXQgb3VyIGZvbnQgYW5kIHRleHQgcHJvcGVydGllcyB0byBhdm9pZCBpbmhlcml0aW5nIHdlaXJkIHZhbHVlcy5cbiAgQGluY2x1ZGUgcmVzZXQtdGV4dCgpO1xuICBAaW5jbHVkZSBmb250LXNpemUodmFyKC0tI3skcHJlZml4fXBvcG92ZXItZm9udC1zaXplKSk7XG4gIC8vIEFsbG93IGJyZWFraW5nIHZlcnkgbG9uZyB3b3JkcyBzbyB0aGV5IGRvbid0IG92ZXJmbG93IHRoZSBwb3BvdmVyJ3MgYm91bmRzXG4gIHdvcmQtd3JhcDogYnJlYWstd29yZDtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tI3skcHJlZml4fXBvcG92ZXItYmcpO1xuICBiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94O1xuICBib3JkZXI6IHZhcigtLSN7JHByZWZpeH1wb3BvdmVyLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tI3skcHJlZml4fXBvcG92ZXItYm9yZGVyLWNvbG9yKTtcbiAgQGluY2x1ZGUgYm9yZGVyLXJhZGl1cyh2YXIoLS0jeyRwcmVmaXh9cG9wb3Zlci1ib3JkZXItcmFkaXVzKSk7XG4gIEBpbmNsdWRlIGJveC1zaGFkb3codmFyKC0tI3skcHJlZml4fXBvcG92ZXItYm94LXNoYWRvdykpO1xuXG4gIC5wb3BvdmVyLWFycm93IHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICB3aWR0aDogdmFyKC0tI3skcHJlZml4fXBvcG92ZXItYXJyb3ctd2lkdGgpO1xuICAgIGhlaWdodDogdmFyKC0tI3skcHJlZml4fXBvcG92ZXItYXJyb3ctaGVpZ2h0KTtcblxuICAgICY6OmJlZm9yZSxcbiAgICAmOjphZnRlciB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgICAgIGJvcmRlci13aWR0aDogMDtcbiAgICB9XG4gIH1cbn1cblxuLmJzLXBvcG92ZXItdG9wIHtcbiAgPiAucG9wb3Zlci1hcnJvdyB7XG4gICAgYm90dG9tOiBjYWxjKC0xICogKHZhcigtLSN7JHByZWZpeH1wb3BvdmVyLWFycm93LWhlaWdodCkpIC0gdmFyKC0tI3skcHJlZml4fXBvcG92ZXItYm9yZGVyLXdpZHRoKSk7IC8vIHN0eWxlbGludC1kaXNhYmxlLWxpbmUgZnVuY3Rpb24tZGlzYWxsb3dlZC1saXN0XG5cbiAgICAmOjpiZWZvcmUsXG4gICAgJjo6YWZ0ZXIge1xuICAgICAgYm9yZGVyLXdpZHRoOiB2YXIoLS0jeyRwcmVmaXh9cG9wb3Zlci1hcnJvdy1oZWlnaHQpIGNhbGModmFyKC0tI3skcHJlZml4fXBvcG92ZXItYXJyb3ctd2lkdGgpICogLjUpIDA7IC8vIHN0eWxlbGludC1kaXNhYmxlLWxpbmUgZnVuY3Rpb24tZGlzYWxsb3dlZC1saXN0XG4gICAgfVxuXG4gICAgJjo6YmVmb3JlIHtcbiAgICAgIGJvdHRvbTogMDtcbiAgICAgIGJvcmRlci10b3AtY29sb3I6IHZhcigtLSN7JHByZWZpeH1wb3BvdmVyLWFycm93LWJvcmRlcik7XG4gICAgfVxuXG4gICAgJjo6YWZ0ZXIge1xuICAgICAgYm90dG9tOiB2YXIoLS0jeyRwcmVmaXh9cG9wb3Zlci1ib3JkZXItd2lkdGgpO1xuICAgICAgYm9yZGVyLXRvcC1jb2xvcjogdmFyKC0tI3skcHJlZml4fXBvcG92ZXItYmcpO1xuICAgIH1cbiAgfVxufVxuXG4vKiBydGw6YmVnaW46aWdub3JlICovXG4uYnMtcG9wb3Zlci1lbmQge1xuICA+IC5wb3BvdmVyLWFycm93IHtcbiAgICBsZWZ0OiBjYWxjKC0xICogKHZhcigtLSN7JHByZWZpeH1wb3BvdmVyLWFycm93LWhlaWdodCkpIC0gdmFyKC0tI3skcHJlZml4fXBvcG92ZXItYm9yZGVyLXdpZHRoKSk7IC8vIHN0eWxlbGludC1kaXNhYmxlLWxpbmUgZnVuY3Rpb24tZGlzYWxsb3dlZC1saXN0XG4gICAgd2lkdGg6IHZhcigtLSN7JHByZWZpeH1wb3BvdmVyLWFycm93LWhlaWdodCk7XG4gICAgaGVpZ2h0OiB2YXIoLS0jeyRwcmVmaXh9cG9wb3Zlci1hcnJvdy13aWR0aCk7XG5cbiAgICAmOjpiZWZvcmUsXG4gICAgJjo6YWZ0ZXIge1xuICAgICAgYm9yZGVyLXdpZHRoOiBjYWxjKHZhcigtLSN7JHByZWZpeH1wb3BvdmVyLWFycm93LXdpZHRoKSAqIC41KSB2YXIoLS0jeyRwcmVmaXh9cG9wb3Zlci1hcnJvdy1oZWlnaHQpIGNhbGModmFyKC0tI3skcHJlZml4fXBvcG92ZXItYXJyb3ctd2lkdGgpICogLjUpIDA7IC8vIHN0eWxlbGludC1kaXNhYmxlLWxpbmUgZnVuY3Rpb24tZGlzYWxsb3dlZC1saXN0XG4gICAgfVxuXG4gICAgJjo6YmVmb3JlIHtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICBib3JkZXItcmlnaHQtY29sb3I6IHZhcigtLSN7JHByZWZpeH1wb3BvdmVyLWFycm93LWJvcmRlcik7XG4gICAgfVxuXG4gICAgJjo6YWZ0ZXIge1xuICAgICAgbGVmdDogdmFyKC0tI3skcHJlZml4fXBvcG92ZXItYm9yZGVyLXdpZHRoKTtcbiAgICAgIGJvcmRlci1yaWdodC1jb2xvcjogdmFyKC0tI3skcHJlZml4fXBvcG92ZXItYmcpO1xuICAgIH1cbiAgfVxufVxuXG4vKiBydGw6ZW5kOmlnbm9yZSAqL1xuXG4uYnMtcG9wb3Zlci1ib3R0b20ge1xuICA+IC5wb3BvdmVyLWFycm93IHtcbiAgICB0b3A6IGNhbGMoLTEgKiAodmFyKC0tI3skcHJlZml4fXBvcG92ZXItYXJyb3ctaGVpZ2h0KSkgLSB2YXIoLS0jeyRwcmVmaXh9cG9wb3Zlci1ib3JkZXItd2lkdGgpKTsgLy8gc3R5bGVsaW50LWRpc2FibGUtbGluZSBmdW5jdGlvbi1kaXNhbGxvd2VkLWxpc3RcblxuICAgICY6OmJlZm9yZSxcbiAgICAmOjphZnRlciB7XG4gICAgICBib3JkZXItd2lkdGg6IDAgY2FsYyh2YXIoLS0jeyRwcmVmaXh9cG9wb3Zlci1hcnJvdy13aWR0aCkgKiAuNSkgdmFyKC0tI3skcHJlZml4fXBvcG92ZXItYXJyb3ctaGVpZ2h0KTsgLy8gc3R5bGVsaW50LWRpc2FibGUtbGluZSBmdW5jdGlvbi1kaXNhbGxvd2VkLWxpc3RcbiAgICB9XG5cbiAgICAmOjpiZWZvcmUge1xuICAgICAgdG9wOiAwO1xuICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogdmFyKC0tI3skcHJlZml4fXBvcG92ZXItYXJyb3ctYm9yZGVyKTtcbiAgICB9XG5cbiAgICAmOjphZnRlciB7XG4gICAgICB0b3A6IHZhcigtLSN7JHByZWZpeH1wb3BvdmVyLWJvcmRlci13aWR0aCk7XG4gICAgICBib3JkZXItYm90dG9tLWNvbG9yOiB2YXIoLS0jeyRwcmVmaXh9cG9wb3Zlci1iZyk7XG4gICAgfVxuICB9XG5cbiAgLy8gVGhpcyB3aWxsIHJlbW92ZSB0aGUgcG9wb3Zlci1oZWFkZXIncyBib3JkZXIganVzdCBiZWxvdyB0aGUgYXJyb3dcbiAgLnBvcG92ZXItaGVhZGVyOjpiZWZvcmUge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgbGVmdDogNTAlO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHdpZHRoOiB2YXIoLS0jeyRwcmVmaXh9cG9wb3Zlci1hcnJvdy13aWR0aCk7XG4gICAgbWFyZ2luLWxlZnQ6IGNhbGMoLS41ICogdmFyKC0tI3skcHJlZml4fXBvcG92ZXItYXJyb3ctd2lkdGgpKTsgLy8gc3R5bGVsaW50LWRpc2FibGUtbGluZSBmdW5jdGlvbi1kaXNhbGxvd2VkLWxpc3RcbiAgICBjb250ZW50OiBcIlwiO1xuICAgIGJvcmRlci1ib3R0b206IHZhcigtLSN7JHByZWZpeH1wb3BvdmVyLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tI3skcHJlZml4fXBvcG92ZXItaGVhZGVyLWJnKTtcbiAgfVxufVxuXG4vKiBydGw6YmVnaW46aWdub3JlICovXG4uYnMtcG9wb3Zlci1zdGFydCB7XG4gID4gLnBvcG92ZXItYXJyb3cge1xuICAgIHJpZ2h0OiBjYWxjKC0xICogKHZhcigtLSN7JHByZWZpeH1wb3BvdmVyLWFycm93LWhlaWdodCkpIC0gdmFyKC0tI3skcHJlZml4fXBvcG92ZXItYm9yZGVyLXdpZHRoKSk7IC8vIHN0eWxlbGludC1kaXNhYmxlLWxpbmUgZnVuY3Rpb24tZGlzYWxsb3dlZC1saXN0XG4gICAgd2lkdGg6IHZhcigtLSN7JHByZWZpeH1wb3BvdmVyLWFycm93LWhlaWdodCk7XG4gICAgaGVpZ2h0OiB2YXIoLS0jeyRwcmVmaXh9cG9wb3Zlci1hcnJvdy13aWR0aCk7XG5cbiAgICAmOjpiZWZvcmUsXG4gICAgJjo6YWZ0ZXIge1xuICAgICAgYm9yZGVyLXdpZHRoOiBjYWxjKHZhcigtLSN7JHByZWZpeH1wb3BvdmVyLWFycm93LXdpZHRoKSAqIC41KSAwIGNhbGModmFyKC0tI3skcHJlZml4fXBvcG92ZXItYXJyb3ctd2lkdGgpICogLjUpIHZhcigtLSN7JHByZWZpeH1wb3BvdmVyLWFycm93LWhlaWdodCk7IC8vIHN0eWxlbGludC1kaXNhYmxlLWxpbmUgZnVuY3Rpb24tZGlzYWxsb3dlZC1saXN0XG4gICAgfVxuXG4gICAgJjo6YmVmb3JlIHtcbiAgICAgIHJpZ2h0OiAwO1xuICAgICAgYm9yZGVyLWxlZnQtY29sb3I6IHZhcigtLSN7JHByZWZpeH1wb3BvdmVyLWFycm93LWJvcmRlcik7XG4gICAgfVxuXG4gICAgJjo6YWZ0ZXIge1xuICAgICAgcmlnaHQ6IHZhcigtLSN7JHByZWZpeH1wb3BvdmVyLWJvcmRlci13aWR0aCk7XG4gICAgICBib3JkZXItbGVmdC1jb2xvcjogdmFyKC0tI3skcHJlZml4fXBvcG92ZXItYmcpO1xuICAgIH1cbiAgfVxufVxuXG4vKiBydGw6ZW5kOmlnbm9yZSAqL1xuXG4uYnMtcG9wb3Zlci1hdXRvIHtcbiAgJltkYXRhLXBvcHBlci1wbGFjZW1lbnRePVwidG9wXCJdIHtcbiAgICBAZXh0ZW5kIC5icy1wb3BvdmVyLXRvcDtcbiAgfVxuICAmW2RhdGEtcG9wcGVyLXBsYWNlbWVudF49XCJyaWdodFwiXSB7XG4gICAgQGV4dGVuZCAuYnMtcG9wb3Zlci1lbmQ7XG4gIH1cbiAgJltkYXRhLXBvcHBlci1wbGFjZW1lbnRePVwiYm90dG9tXCJdIHtcbiAgICBAZXh0ZW5kIC5icy1wb3BvdmVyLWJvdHRvbTtcbiAgfVxuICAmW2RhdGEtcG9wcGVyLXBsYWNlbWVudF49XCJsZWZ0XCJdIHtcbiAgICBAZXh0ZW5kIC5icy1wb3BvdmVyLXN0YXJ0O1xuICB9XG59XG5cbi8vIE9mZnNldCB0aGUgcG9wb3ZlciB0byBhY2NvdW50IGZvciB0aGUgcG9wb3ZlciBhcnJvd1xuLnBvcG92ZXItaGVhZGVyIHtcbiAgcGFkZGluZzogdmFyKC0tI3skcHJlZml4fXBvcG92ZXItaGVhZGVyLXBhZGRpbmcteSkgdmFyKC0tI3skcHJlZml4fXBvcG92ZXItaGVhZGVyLXBhZGRpbmcteCk7XG4gIG1hcmdpbi1ib3R0b206IDA7IC8vIFJlc2V0IHRoZSBkZWZhdWx0IGZyb20gUmVib290XG4gIEBpbmNsdWRlIGZvbnQtc2l6ZSh2YXIoLS0jeyRwcmVmaXh9cG9wb3Zlci1oZWFkZXItZm9udC1zaXplKSk7XG4gIGNvbG9yOiB2YXIoLS0jeyRwcmVmaXh9cG9wb3Zlci1oZWFkZXItY29sb3IpO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS0jeyRwcmVmaXh9cG9wb3Zlci1oZWFkZXItYmcpO1xuICBib3JkZXItYm90dG9tOiB2YXIoLS0jeyRwcmVmaXh9cG9wb3Zlci1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLSN7JHByZWZpeH1wb3BvdmVyLWJvcmRlci1jb2xvcik7XG4gIEBpbmNsdWRlIGJvcmRlci10b3AtcmFkaXVzKHZhcigtLSN7JHByZWZpeH1wb3BvdmVyLWlubmVyLWJvcmRlci1yYWRpdXMpKTtcblxuICAmOmVtcHR5IHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG5cbi5wb3BvdmVyLWJvZHkge1xuICBwYWRkaW5nOiB2YXIoLS0jeyRwcmVmaXh9cG9wb3Zlci1ib2R5LXBhZGRpbmcteSkgdmFyKC0tI3skcHJlZml4fXBvcG92ZXItYm9keS1wYWRkaW5nLXgpO1xuICBjb2xvcjogdmFyKC0tI3skcHJlZml4fXBvcG92ZXItYm9keS1jb2xvcik7XG59XG4iLCIvLyBOb3RlcyBvbiB0aGUgY2xhc3Nlczpcbi8vXG4vLyAxLiAuY2Fyb3VzZWwucG9pbnRlci1ldmVudCBzaG91bGQgaWRlYWxseSBiZSBwYW4teSAodG8gYWxsb3cgZm9yIHVzZXJzIHRvIHNjcm9sbCB2ZXJ0aWNhbGx5KVxuLy8gICAgZXZlbiB3aGVuIHRoZWlyIHNjcm9sbCBhY3Rpb24gc3RhcnRlZCBvbiBhIGNhcm91c2VsLCBidXQgZm9yIGNvbXBhdGliaWxpdHkgKHdpdGggRmlyZWZveClcbi8vICAgIHdlJ3JlIHByZXZlbnRpbmcgYWxsIGFjdGlvbnMgaW5zdGVhZFxuLy8gMi4gVGhlIC5jYXJvdXNlbC1pdGVtLXN0YXJ0IGFuZCAuY2Fyb3VzZWwtaXRlbS1lbmQgaXMgdXNlZCB0byBpbmRpY2F0ZSB3aGVyZVxuLy8gICAgdGhlIGFjdGl2ZSBzbGlkZSBpcyBoZWFkaW5nLlxuLy8gMy4gLmFjdGl2ZS5jYXJvdXNlbC1pdGVtIGlzIHRoZSBjdXJyZW50IHNsaWRlLlxuLy8gNC4gLmFjdGl2ZS5jYXJvdXNlbC1pdGVtLXN0YXJ0IGFuZCAuYWN0aXZlLmNhcm91c2VsLWl0ZW0tZW5kIGlzIHRoZSBjdXJyZW50XG4vLyAgICBzbGlkZSBpbiBpdHMgaW4tdHJhbnNpdGlvbiBzdGF0ZS4gT25seSBvbmUgb2YgdGhlc2Ugb2NjdXJzIGF0IGEgdGltZS5cbi8vIDUuIC5jYXJvdXNlbC1pdGVtLW5leHQuY2Fyb3VzZWwtaXRlbS1zdGFydCBhbmQgLmNhcm91c2VsLWl0ZW0tcHJldi5jYXJvdXNlbC1pdGVtLWVuZFxuLy8gICAgaXMgdGhlIHVwY29taW5nIHNsaWRlIGluIHRyYW5zaXRpb24uXG5cbi5jYXJvdXNlbCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLmNhcm91c2VsLnBvaW50ZXItZXZlbnQge1xuICB0b3VjaC1hY3Rpb246IHBhbi15O1xufVxuXG4uY2Fyb3VzZWwtaW5uZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHdpZHRoOiAxMDAlO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBAaW5jbHVkZSBjbGVhcmZpeCgpO1xufVxuXG4uY2Fyb3VzZWwtaXRlbSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogbm9uZTtcbiAgZmxvYXQ6IGxlZnQ7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXJnaW4tcmlnaHQ6IC0xMDAlO1xuICBiYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XG4gIEBpbmNsdWRlIHRyYW5zaXRpb24oJGNhcm91c2VsLXRyYW5zaXRpb24pO1xufVxuXG4uY2Fyb3VzZWwtaXRlbS5hY3RpdmUsXG4uY2Fyb3VzZWwtaXRlbS1uZXh0LFxuLmNhcm91c2VsLWl0ZW0tcHJldiB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuXG4uY2Fyb3VzZWwtaXRlbS1uZXh0Om5vdCguY2Fyb3VzZWwtaXRlbS1zdGFydCksXG4uYWN0aXZlLmNhcm91c2VsLWl0ZW0tZW5kIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEwMCUpO1xufVxuXG4uY2Fyb3VzZWwtaXRlbS1wcmV2Om5vdCguY2Fyb3VzZWwtaXRlbS1lbmQpLFxuLmFjdGl2ZS5jYXJvdXNlbC1pdGVtLXN0YXJ0IHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0xMDAlKTtcbn1cblxuXG4vL1xuLy8gQWx0ZXJuYXRlIHRyYW5zaXRpb25zXG4vL1xuXG4uY2Fyb3VzZWwtZmFkZSB7XG4gIC5jYXJvdXNlbC1pdGVtIHtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zaXRpb24tcHJvcGVydHk6IG9wYWNpdHk7XG4gICAgdHJhbnNmb3JtOiBub25lO1xuICB9XG5cbiAgLmNhcm91c2VsLWl0ZW0uYWN0aXZlLFxuICAuY2Fyb3VzZWwtaXRlbS1uZXh0LmNhcm91c2VsLWl0ZW0tc3RhcnQsXG4gIC5jYXJvdXNlbC1pdGVtLXByZXYuY2Fyb3VzZWwtaXRlbS1lbmQge1xuICAgIHotaW5kZXg6IDE7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxuXG4gIC5hY3RpdmUuY2Fyb3VzZWwtaXRlbS1zdGFydCxcbiAgLmFjdGl2ZS5jYXJvdXNlbC1pdGVtLWVuZCB7XG4gICAgei1pbmRleDogMDtcbiAgICBvcGFjaXR5OiAwO1xuICAgIEBpbmNsdWRlIHRyYW5zaXRpb24ob3BhY2l0eSAwcyAkY2Fyb3VzZWwtdHJhbnNpdGlvbi1kdXJhdGlvbik7XG4gIH1cbn1cblxuXG4vL1xuLy8gTGVmdC9yaWdodCBjb250cm9scyBmb3IgbmF2XG4vL1xuXG4uY2Fyb3VzZWwtY29udHJvbC1wcmV2LFxuLmNhcm91c2VsLWNvbnRyb2wtbmV4dCB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICBib3R0b206IDA7XG4gIHotaW5kZXg6IDE7XG4gIC8vIFVzZSBmbGV4IGZvciBhbGlnbm1lbnQgKDEtMylcbiAgZGlzcGxheTogZmxleDsgLy8gMS4gYWxsb3cgZmxleCBzdHlsZXNcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjsgLy8gMi4gdmVydGljYWxseSBjZW50ZXIgY29udGVudHNcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IC8vIDMuIGhvcml6b250YWxseSBjZW50ZXIgY29udGVudHNcbiAgd2lkdGg6ICRjYXJvdXNlbC1jb250cm9sLXdpZHRoO1xuICBwYWRkaW5nOiAwO1xuICBjb2xvcjogJGNhcm91c2VsLWNvbnRyb2wtY29sb3I7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgYmFja2dyb3VuZDogbm9uZTtcbiAgYm9yZGVyOiAwO1xuICBvcGFjaXR5OiAkY2Fyb3VzZWwtY29udHJvbC1vcGFjaXR5O1xuICBAaW5jbHVkZSB0cmFuc2l0aW9uKCRjYXJvdXNlbC1jb250cm9sLXRyYW5zaXRpb24pO1xuXG4gIC8vIEhvdmVyL2ZvY3VzIHN0YXRlXG4gICY6aG92ZXIsXG4gICY6Zm9jdXMge1xuICAgIGNvbG9yOiAkY2Fyb3VzZWwtY29udHJvbC1jb2xvcjtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgb3V0bGluZTogMDtcbiAgICBvcGFjaXR5OiAkY2Fyb3VzZWwtY29udHJvbC1ob3Zlci1vcGFjaXR5O1xuICB9XG59XG4uY2Fyb3VzZWwtY29udHJvbC1wcmV2IHtcbiAgbGVmdDogMDtcbiAgYmFja2dyb3VuZC1pbWFnZTogaWYoJGVuYWJsZS1ncmFkaWVudHMsIGxpbmVhci1ncmFkaWVudCg5MGRlZywgcmdiYSgkYmxhY2ssIC4yNSksIHJnYmEoJGJsYWNrLCAuMDAxKSksIG51bGwpO1xufVxuLmNhcm91c2VsLWNvbnRyb2wtbmV4dCB7XG4gIHJpZ2h0OiAwO1xuICBiYWNrZ3JvdW5kLWltYWdlOiBpZigkZW5hYmxlLWdyYWRpZW50cywgbGluZWFyLWdyYWRpZW50KDI3MGRlZywgcmdiYSgkYmxhY2ssIC4yNSksIHJnYmEoJGJsYWNrLCAuMDAxKSksIG51bGwpO1xufVxuXG4vLyBJY29ucyBmb3Igd2l0aGluXG4uY2Fyb3VzZWwtY29udHJvbC1wcmV2LWljb24sXG4uY2Fyb3VzZWwtY29udHJvbC1uZXh0LWljb24ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHdpZHRoOiAkY2Fyb3VzZWwtY29udHJvbC1pY29uLXdpZHRoO1xuICBoZWlnaHQ6ICRjYXJvdXNlbC1jb250cm9sLWljb24td2lkdGg7XG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IDUwJTtcbiAgYmFja2dyb3VuZC1zaXplOiAxMDAlIDEwMCU7XG59XG5cbi5jYXJvdXNlbC1jb250cm9sLXByZXYtaWNvbiB7XG4gIGJhY2tncm91bmQtaW1hZ2U6IGVzY2FwZS1zdmcoJGNhcm91c2VsLWNvbnRyb2wtcHJldi1pY29uLWJnKSAje1wiLypydGw6XCIgKyBlc2NhcGUtc3ZnKCRjYXJvdXNlbC1jb250cm9sLW5leHQtaWNvbi1iZykgKyBcIiovXCJ9O1xufVxuLmNhcm91c2VsLWNvbnRyb2wtbmV4dC1pY29uIHtcbiAgYmFja2dyb3VuZC1pbWFnZTogZXNjYXBlLXN2ZygkY2Fyb3VzZWwtY29udHJvbC1uZXh0LWljb24tYmcpICN7XCIvKnJ0bDpcIiArIGVzY2FwZS1zdmcoJGNhcm91c2VsLWNvbnRyb2wtcHJldi1pY29uLWJnKSArIFwiKi9cIn07XG59XG5cbi8vIE9wdGlvbmFsIGluZGljYXRvciBwaXBzL2NvbnRyb2xzXG4vL1xuLy8gQWRkIGEgY29udGFpbmVyIChzdWNoIGFzIGEgbGlzdCkgd2l0aCB0aGUgZm9sbG93aW5nIGNsYXNzIGFuZCBhZGQgYW4gaXRlbSAoaWRlYWxseSBhIGZvY3VzYWJsZSBjb250cm9sLFxuLy8gbGlrZSBhIGJ1dHRvbikgd2l0aCBkYXRhLWJzLXRhcmdldCBmb3IgZWFjaCBzbGlkZSB5b3VyIGNhcm91c2VsIGhvbGRzLlxuXG4uY2Fyb3VzZWwtaW5kaWNhdG9ycyB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgcmlnaHQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgbGVmdDogMDtcbiAgei1pbmRleDogMjtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIHBhZGRpbmc6IDA7XG4gIC8vIFVzZSB0aGUgLmNhcm91c2VsLWNvbnRyb2wncyB3aWR0aCBhcyBtYXJnaW4gc28gd2UgZG9uJ3Qgb3ZlcmxheSB0aG9zZVxuICBtYXJnaW4tcmlnaHQ6ICRjYXJvdXNlbC1jb250cm9sLXdpZHRoO1xuICBtYXJnaW4tYm90dG9tOiAxcmVtO1xuICBtYXJnaW4tbGVmdDogJGNhcm91c2VsLWNvbnRyb2wtd2lkdGg7XG5cbiAgW2RhdGEtYnMtdGFyZ2V0XSB7XG4gICAgYm94LXNpemluZzogY29udGVudC1ib3g7XG4gICAgZmxleDogMCAxIGF1dG87XG4gICAgd2lkdGg6ICRjYXJvdXNlbC1pbmRpY2F0b3Itd2lkdGg7XG4gICAgaGVpZ2h0OiAkY2Fyb3VzZWwtaW5kaWNhdG9yLWhlaWdodDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIG1hcmdpbi1yaWdodDogJGNhcm91c2VsLWluZGljYXRvci1zcGFjZXI7XG4gICAgbWFyZ2luLWxlZnQ6ICRjYXJvdXNlbC1pbmRpY2F0b3Itc3BhY2VyO1xuICAgIHRleHQtaW5kZW50OiAtOTk5cHg7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRjYXJvdXNlbC1pbmRpY2F0b3ItYWN0aXZlLWJnO1xuICAgIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XG4gICAgYm9yZGVyOiAwO1xuICAgIC8vIFVzZSB0cmFuc3BhcmVudCBib3JkZXJzIHRvIGluY3JlYXNlIHRoZSBoaXQgYXJlYSBieSAxMHB4IG9uIHRvcCBhbmQgYm90dG9tLlxuICAgIGJvcmRlci10b3A6ICRjYXJvdXNlbC1pbmRpY2F0b3ItaGl0LWFyZWEtaGVpZ2h0IHNvbGlkIHRyYW5zcGFyZW50O1xuICAgIGJvcmRlci1ib3R0b206ICRjYXJvdXNlbC1pbmRpY2F0b3ItaGl0LWFyZWEtaGVpZ2h0IHNvbGlkIHRyYW5zcGFyZW50O1xuICAgIG9wYWNpdHk6ICRjYXJvdXNlbC1pbmRpY2F0b3Itb3BhY2l0eTtcbiAgICBAaW5jbHVkZSB0cmFuc2l0aW9uKCRjYXJvdXNlbC1pbmRpY2F0b3ItdHJhbnNpdGlvbik7XG4gIH1cblxuICAuYWN0aXZlIHtcbiAgICBvcGFjaXR5OiAkY2Fyb3VzZWwtaW5kaWNhdG9yLWFjdGl2ZS1vcGFjaXR5O1xuICB9XG59XG5cblxuLy8gT3B0aW9uYWwgY2FwdGlvbnNcbi8vXG4vL1xuXG4uY2Fyb3VzZWwtY2FwdGlvbiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgcmlnaHQ6ICgxMDAlIC0gJGNhcm91c2VsLWNhcHRpb24td2lkdGgpICogLjU7XG4gIGJvdHRvbTogJGNhcm91c2VsLWNhcHRpb24tc3BhY2VyO1xuICBsZWZ0OiAoMTAwJSAtICRjYXJvdXNlbC1jYXB0aW9uLXdpZHRoKSAqIC41O1xuICBwYWRkaW5nLXRvcDogJGNhcm91c2VsLWNhcHRpb24tcGFkZGluZy15O1xuICBwYWRkaW5nLWJvdHRvbTogJGNhcm91c2VsLWNhcHRpb24tcGFkZGluZy15O1xuICBjb2xvcjogJGNhcm91c2VsLWNhcHRpb24tY29sb3I7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuLy8gRGFyayBtb2RlIGNhcm91c2VsXG5cbkBtaXhpbiBjYXJvdXNlbC1kYXJrKCkge1xuICAuY2Fyb3VzZWwtY29udHJvbC1wcmV2LWljb24sXG4gIC5jYXJvdXNlbC1jb250cm9sLW5leHQtaWNvbiB7XG4gICAgZmlsdGVyOiAkY2Fyb3VzZWwtZGFyay1jb250cm9sLWljb24tZmlsdGVyO1xuICB9XG5cbiAgLmNhcm91c2VsLWluZGljYXRvcnMgW2RhdGEtYnMtdGFyZ2V0XSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGNhcm91c2VsLWRhcmstaW5kaWNhdG9yLWFjdGl2ZS1iZztcbiAgfVxuXG4gIC5jYXJvdXNlbC1jYXB0aW9uIHtcbiAgICBjb2xvcjogJGNhcm91c2VsLWRhcmstY2FwdGlvbi1jb2xvcjtcbiAgfVxufVxuXG4uY2Fyb3VzZWwtZGFyayB7XG4gIEBpbmNsdWRlIGNhcm91c2VsLWRhcmsoKTtcbn1cblxuQGlmICRlbmFibGUtZGFyay1tb2RlIHtcbiAgQGluY2x1ZGUgY29sb3ItbW9kZShkYXJrKSB7XG4gICAgQGlmICRjb2xvci1tb2RlLXR5cGUgPT0gXCJtZWRpYS1xdWVyeVwiIHtcbiAgICAgIC5jYXJvdXNlbCB7XG4gICAgICAgIEBpbmNsdWRlIGNhcm91c2VsLWRhcmsoKTtcbiAgICAgIH1cbiAgICB9IEBlbHNlIHtcbiAgICAgIC5jYXJvdXNlbCxcbiAgICAgICYuY2Fyb3VzZWwge1xuICAgICAgICBAaW5jbHVkZSBjYXJvdXNlbC1kYXJrKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIvLyBzY3NzLWRvY3Mtc3RhcnQgY2xlYXJmaXhcbkBtaXhpbiBjbGVhcmZpeCgpIHtcbiAgJjo6YWZ0ZXIge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGNsZWFyOiBib3RoO1xuICAgIGNvbnRlbnQ6IFwiXCI7XG4gIH1cbn1cbi8vIHNjc3MtZG9jcy1lbmQgY2xlYXJmaXhcbiIsIi8vXG4vLyBSb3RhdGluZyBib3JkZXJcbi8vXG5cbi5zcGlubmVyLWdyb3csXG4uc3Bpbm5lci1ib3JkZXIge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHdpZHRoOiB2YXIoLS0jeyRwcmVmaXh9c3Bpbm5lci13aWR0aCk7XG4gIGhlaWdodDogdmFyKC0tI3skcHJlZml4fXNwaW5uZXItaGVpZ2h0KTtcbiAgdmVydGljYWwtYWxpZ246IHZhcigtLSN7JHByZWZpeH1zcGlubmVyLXZlcnRpY2FsLWFsaWduKTtcbiAgLy8gc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIHByb3BlcnR5LWRpc2FsbG93ZWQtbGlzdFxuICBib3JkZXItcmFkaXVzOiA1MCU7XG4gIGFuaW1hdGlvbjogdmFyKC0tI3skcHJlZml4fXNwaW5uZXItYW5pbWF0aW9uLXNwZWVkKSBsaW5lYXIgaW5maW5pdGUgdmFyKC0tI3skcHJlZml4fXNwaW5uZXItYW5pbWF0aW9uLW5hbWUpO1xufVxuXG4vLyBzY3NzLWRvY3Mtc3RhcnQgc3Bpbm5lci1ib3JkZXIta2V5ZnJhbWVzXG5Aa2V5ZnJhbWVzIHNwaW5uZXItYm9yZGVyIHtcbiAgdG8geyB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpICN7XCIvKiBydGw6aWdub3JlICovXCJ9OyB9XG59XG4vLyBzY3NzLWRvY3MtZW5kIHNwaW5uZXItYm9yZGVyLWtleWZyYW1lc1xuXG4uc3Bpbm5lci1ib3JkZXIge1xuICAvLyBzY3NzLWRvY3Mtc3RhcnQgc3Bpbm5lci1ib3JkZXItY3NzLXZhcnNcbiAgLS0jeyRwcmVmaXh9c3Bpbm5lci13aWR0aDogI3skc3Bpbm5lci13aWR0aH07XG4gIC0tI3skcHJlZml4fXNwaW5uZXItaGVpZ2h0OiAjeyRzcGlubmVyLWhlaWdodH07XG4gIC0tI3skcHJlZml4fXNwaW5uZXItdmVydGljYWwtYWxpZ246ICN7JHNwaW5uZXItdmVydGljYWwtYWxpZ259O1xuICAtLSN7JHByZWZpeH1zcGlubmVyLWJvcmRlci13aWR0aDogI3skc3Bpbm5lci1ib3JkZXItd2lkdGh9O1xuICAtLSN7JHByZWZpeH1zcGlubmVyLWFuaW1hdGlvbi1zcGVlZDogI3skc3Bpbm5lci1hbmltYXRpb24tc3BlZWR9O1xuICAtLSN7JHByZWZpeH1zcGlubmVyLWFuaW1hdGlvbi1uYW1lOiBzcGlubmVyLWJvcmRlcjtcbiAgLy8gc2Nzcy1kb2NzLWVuZCBzcGlubmVyLWJvcmRlci1jc3MtdmFyc1xuXG4gIGJvcmRlcjogdmFyKC0tI3skcHJlZml4fXNwaW5uZXItYm9yZGVyLXdpZHRoKSBzb2xpZCBjdXJyZW50Y29sb3I7XG4gIGJvcmRlci1yaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7XG59XG5cbi5zcGlubmVyLWJvcmRlci1zbSB7XG4gIC8vIHNjc3MtZG9jcy1zdGFydCBzcGlubmVyLWJvcmRlci1zbS1jc3MtdmFyc1xuICAtLSN7JHByZWZpeH1zcGlubmVyLXdpZHRoOiAjeyRzcGlubmVyLXdpZHRoLXNtfTtcbiAgLS0jeyRwcmVmaXh9c3Bpbm5lci1oZWlnaHQ6ICN7JHNwaW5uZXItaGVpZ2h0LXNtfTtcbiAgLS0jeyRwcmVmaXh9c3Bpbm5lci1ib3JkZXItd2lkdGg6ICN7JHNwaW5uZXItYm9yZGVyLXdpZHRoLXNtfTtcbiAgLy8gc2Nzcy1kb2NzLWVuZCBzcGlubmVyLWJvcmRlci1zbS1jc3MtdmFyc1xufVxuXG4vL1xuLy8gR3Jvd2luZyBjaXJjbGVcbi8vXG5cbi8vIHNjc3MtZG9jcy1zdGFydCBzcGlubmVyLWdyb3cta2V5ZnJhbWVzXG5Aa2V5ZnJhbWVzIHNwaW5uZXItZ3JvdyB7XG4gIDAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDApO1xuICB9XG4gIDUwJSB7XG4gICAgb3BhY2l0eTogMTtcbiAgICB0cmFuc2Zvcm06IG5vbmU7XG4gIH1cbn1cbi8vIHNjc3MtZG9jcy1lbmQgc3Bpbm5lci1ncm93LWtleWZyYW1lc1xuXG4uc3Bpbm5lci1ncm93IHtcbiAgLy8gc2Nzcy1kb2NzLXN0YXJ0IHNwaW5uZXItZ3Jvdy1jc3MtdmFyc1xuICAtLSN7JHByZWZpeH1zcGlubmVyLXdpZHRoOiAjeyRzcGlubmVyLXdpZHRofTtcbiAgLS0jeyRwcmVmaXh9c3Bpbm5lci1oZWlnaHQ6ICN7JHNwaW5uZXItaGVpZ2h0fTtcbiAgLS0jeyRwcmVmaXh9c3Bpbm5lci12ZXJ0aWNhbC1hbGlnbjogI3skc3Bpbm5lci12ZXJ0aWNhbC1hbGlnbn07XG4gIC0tI3skcHJlZml4fXNwaW5uZXItYW5pbWF0aW9uLXNwZWVkOiAjeyRzcGlubmVyLWFuaW1hdGlvbi1zcGVlZH07XG4gIC0tI3skcHJlZml4fXNwaW5uZXItYW5pbWF0aW9uLW5hbWU6IHNwaW5uZXItZ3JvdztcbiAgLy8gc2Nzcy1kb2NzLWVuZCBzcGlubmVyLWdyb3ctY3NzLXZhcnNcblxuICBiYWNrZ3JvdW5kLWNvbG9yOiBjdXJyZW50Y29sb3I7XG4gIG9wYWNpdHk6IDA7XG59XG5cbi5zcGlubmVyLWdyb3ctc20ge1xuICAtLSN7JHByZWZpeH1zcGlubmVyLXdpZHRoOiAjeyRzcGlubmVyLXdpZHRoLXNtfTtcbiAgLS0jeyRwcmVmaXh9c3Bpbm5lci1oZWlnaHQ6ICN7JHNwaW5uZXItaGVpZ2h0LXNtfTtcbn1cblxuQGlmICRlbmFibGUtcmVkdWNlZC1tb3Rpb24ge1xuICBAbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkge1xuICAgIC5zcGlubmVyLWJvcmRlcixcbiAgICAuc3Bpbm5lci1ncm93IHtcbiAgICAgIC0tI3skcHJlZml4fXNwaW5uZXItYW5pbWF0aW9uLXNwZWVkOiAjeyRzcGlubmVyLWFuaW1hdGlvbi1zcGVlZCAqIDJ9O1xuICAgIH1cbiAgfVxufVxuIiwiLy8gc3R5bGVsaW50LWRpc2FibGUgZnVuY3Rpb24tZGlzYWxsb3dlZC1saXN0XG5cbiVvZmZjYW52YXMtY3NzLXZhcnMge1xuICAvLyBzY3NzLWRvY3Mtc3RhcnQgb2ZmY2FudmFzLWNzcy12YXJzXG4gIC0tI3skcHJlZml4fW9mZmNhbnZhcy16aW5kZXg6ICN7JHppbmRleC1vZmZjYW52YXN9O1xuICAtLSN7JHByZWZpeH1vZmZjYW52YXMtd2lkdGg6ICN7JG9mZmNhbnZhcy1ob3Jpem9udGFsLXdpZHRofTtcbiAgLS0jeyRwcmVmaXh9b2ZmY2FudmFzLWhlaWdodDogI3skb2ZmY2FudmFzLXZlcnRpY2FsLWhlaWdodH07XG4gIC0tI3skcHJlZml4fW9mZmNhbnZhcy1wYWRkaW5nLXg6ICN7JG9mZmNhbnZhcy1wYWRkaW5nLXh9O1xuICAtLSN7JHByZWZpeH1vZmZjYW52YXMtcGFkZGluZy15OiAjeyRvZmZjYW52YXMtcGFkZGluZy15fTtcbiAgLS0jeyRwcmVmaXh9b2ZmY2FudmFzLWNvbG9yOiAjeyRvZmZjYW52YXMtY29sb3J9O1xuICAtLSN7JHByZWZpeH1vZmZjYW52YXMtYmc6ICN7JG9mZmNhbnZhcy1iZy1jb2xvcn07XG4gIC0tI3skcHJlZml4fW9mZmNhbnZhcy1ib3JkZXItd2lkdGg6ICN7JG9mZmNhbnZhcy1ib3JkZXItd2lkdGh9O1xuICAtLSN7JHByZWZpeH1vZmZjYW52YXMtYm9yZGVyLWNvbG9yOiAjeyRvZmZjYW52YXMtYm9yZGVyLWNvbG9yfTtcbiAgLS0jeyRwcmVmaXh9b2ZmY2FudmFzLWJveC1zaGFkb3c6ICN7JG9mZmNhbnZhcy1ib3gtc2hhZG93fTtcbiAgLS0jeyRwcmVmaXh9b2ZmY2FudmFzLXRyYW5zaXRpb246ICN7dHJhbnNmb3JtICRvZmZjYW52YXMtdHJhbnNpdGlvbi1kdXJhdGlvbiBlYXNlLWluLW91dH07XG4gIC0tI3skcHJlZml4fW9mZmNhbnZhcy10aXRsZS1saW5lLWhlaWdodDogI3skb2ZmY2FudmFzLXRpdGxlLWxpbmUtaGVpZ2h0fTtcbiAgLy8gc2Nzcy1kb2NzLWVuZCBvZmZjYW52YXMtY3NzLXZhcnNcbn1cblxuQGVhY2ggJGJyZWFrcG9pbnQgaW4gbWFwLWtleXMoJGdyaWQtYnJlYWtwb2ludHMpIHtcbiAgJG5leHQ6IGJyZWFrcG9pbnQtbmV4dCgkYnJlYWtwb2ludCwgJGdyaWQtYnJlYWtwb2ludHMpO1xuICAkaW5maXg6IGJyZWFrcG9pbnQtaW5maXgoJG5leHQsICRncmlkLWJyZWFrcG9pbnRzKTtcblxuICAub2ZmY2FudmFzI3skaW5maXh9IHtcbiAgICBAZXh0ZW5kICVvZmZjYW52YXMtY3NzLXZhcnM7XG4gIH1cbn1cblxuQGVhY2ggJGJyZWFrcG9pbnQgaW4gbWFwLWtleXMoJGdyaWQtYnJlYWtwb2ludHMpIHtcbiAgJG5leHQ6IGJyZWFrcG9pbnQtbmV4dCgkYnJlYWtwb2ludCwgJGdyaWQtYnJlYWtwb2ludHMpO1xuICAkaW5maXg6IGJyZWFrcG9pbnQtaW5maXgoJG5leHQsICRncmlkLWJyZWFrcG9pbnRzKTtcblxuICAub2ZmY2FudmFzI3skaW5maXh9IHtcbiAgICBAaW5jbHVkZSBtZWRpYS1icmVha3BvaW50LWRvd24oJG5leHQpIHtcbiAgICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICAgIGJvdHRvbTogMDtcbiAgICAgIHotaW5kZXg6IHZhcigtLSN7JHByZWZpeH1vZmZjYW52YXMtemluZGV4KTtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgICAgY29sb3I6IHZhcigtLSN7JHByZWZpeH1vZmZjYW52YXMtY29sb3IpO1xuICAgICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tI3skcHJlZml4fW9mZmNhbnZhcy1iZyk7XG4gICAgICBiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94O1xuICAgICAgb3V0bGluZTogMDtcbiAgICAgIEBpbmNsdWRlIGJveC1zaGFkb3codmFyKC0tI3skcHJlZml4fW9mZmNhbnZhcy1ib3gtc2hhZG93KSk7XG4gICAgICBAaW5jbHVkZSB0cmFuc2l0aW9uKHZhcigtLSN7JHByZWZpeH1vZmZjYW52YXMtdHJhbnNpdGlvbikpO1xuXG4gICAgICAmLm9mZmNhbnZhcy1zdGFydCB7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgd2lkdGg6IHZhcigtLSN7JHByZWZpeH1vZmZjYW52YXMtd2lkdGgpO1xuICAgICAgICBib3JkZXItcmlnaHQ6IHZhcigtLSN7JHByZWZpeH1vZmZjYW52YXMtYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS0jeyRwcmVmaXh9b2ZmY2FudmFzLWJvcmRlci1jb2xvcik7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMTAwJSk7XG4gICAgICB9XG5cbiAgICAgICYub2ZmY2FudmFzLWVuZCB7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIHdpZHRoOiB2YXIoLS0jeyRwcmVmaXh9b2ZmY2FudmFzLXdpZHRoKTtcbiAgICAgICAgYm9yZGVyLWxlZnQ6IHZhcigtLSN7JHByZWZpeH1vZmZjYW52YXMtYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS0jeyRwcmVmaXh9b2ZmY2FudmFzLWJvcmRlci1jb2xvcik7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMDAlKTtcbiAgICAgIH1cblxuICAgICAgJi5vZmZjYW52YXMtdG9wIHtcbiAgICAgICAgdG9wOiAwO1xuICAgICAgICByaWdodDogMDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgaGVpZ2h0OiB2YXIoLS0jeyRwcmVmaXh9b2ZmY2FudmFzLWhlaWdodCk7XG4gICAgICAgIG1heC1oZWlnaHQ6IDEwMCU7XG4gICAgICAgIGJvcmRlci1ib3R0b206IHZhcigtLSN7JHByZWZpeH1vZmZjYW52YXMtYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS0jeyRwcmVmaXh9b2ZmY2FudmFzLWJvcmRlci1jb2xvcik7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMTAwJSk7XG4gICAgICB9XG5cbiAgICAgICYub2ZmY2FudmFzLWJvdHRvbSB7XG4gICAgICAgIHJpZ2h0OiAwO1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgICBoZWlnaHQ6IHZhcigtLSN7JHByZWZpeH1vZmZjYW52YXMtaGVpZ2h0KTtcbiAgICAgICAgbWF4LWhlaWdodDogMTAwJTtcbiAgICAgICAgYm9yZGVyLXRvcDogdmFyKC0tI3skcHJlZml4fW9mZmNhbnZhcy1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLSN7JHByZWZpeH1vZmZjYW52YXMtYm9yZGVyLWNvbG9yKTtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwMCUpO1xuICAgICAgfVxuXG4gICAgICAmLnNob3dpbmcsXG4gICAgICAmLnNob3c6bm90KC5oaWRpbmcpIHtcbiAgICAgICAgdHJhbnNmb3JtOiBub25lO1xuICAgICAgfVxuXG4gICAgICAmLnNob3dpbmcsXG4gICAgICAmLmhpZGluZyxcbiAgICAgICYuc2hvdyB7XG4gICAgICAgIHZpc2liaWxpdHk6IHZpc2libGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgQGlmIG5vdCAoJGluZml4ID09IFwiXCIpIHtcbiAgICAgIEBpbmNsdWRlIG1lZGlhLWJyZWFrcG9pbnQtdXAoJG5leHQpIHtcbiAgICAgICAgLS0jeyRwcmVmaXh9b2ZmY2FudmFzLWhlaWdodDogYXV0bztcbiAgICAgICAgLS0jeyRwcmVmaXh9b2ZmY2FudmFzLWJvcmRlci13aWR0aDogMDtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsgLy8gc3R5bGVsaW50LWRpc2FibGUtbGluZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnRcblxuICAgICAgICAub2ZmY2FudmFzLWhlYWRlciB7XG4gICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5vZmZjYW52YXMtYm9keSB7XG4gICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICBmbGV4LWdyb3c6IDA7XG4gICAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgICBvdmVyZmxvdy15OiB2aXNpYmxlO1xuICAgICAgICAgIC8vIFJlc2V0IGBiYWNrZ3JvdW5kLWNvbG9yYCBpbiBjYXNlIGAuYmctKmAgY2xhc3NlcyBhcmUgdXNlZCBpbiBvZmZjYW52YXNcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50OyAvLyBzdHlsZWxpbnQtZGlzYWJsZS1saW5lIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi5vZmZjYW52YXMtYmFja2Ryb3Age1xuICBAaW5jbHVkZSBvdmVybGF5LWJhY2tkcm9wKCR6aW5kZXgtb2ZmY2FudmFzLWJhY2tkcm9wLCAkb2ZmY2FudmFzLWJhY2tkcm9wLWJnLCAkb2ZmY2FudmFzLWJhY2tkcm9wLW9wYWNpdHkpO1xufVxuXG4ub2ZmY2FudmFzLWhlYWRlciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHBhZGRpbmc6IHZhcigtLSN7JHByZWZpeH1vZmZjYW52YXMtcGFkZGluZy15KSB2YXIoLS0jeyRwcmVmaXh9b2ZmY2FudmFzLXBhZGRpbmcteCk7XG5cbiAgLmJ0bi1jbG9zZSB7XG4gICAgcGFkZGluZzogY2FsYyh2YXIoLS0jeyRwcmVmaXh9b2ZmY2FudmFzLXBhZGRpbmcteSkgKiAuNSkgY2FsYyh2YXIoLS0jeyRwcmVmaXh9b2ZmY2FudmFzLXBhZGRpbmcteCkgKiAuNSk7XG4gICAgbWFyZ2luOiBjYWxjKC0uNSAqIHZhcigtLSN7JHByZWZpeH1vZmZjYW52YXMtcGFkZGluZy15KSkgY2FsYygtLjUgKiB2YXIoLS0jeyRwcmVmaXh9b2ZmY2FudmFzLXBhZGRpbmcteCkpIGNhbGMoLS41ICogdmFyKC0tI3skcHJlZml4fW9mZmNhbnZhcy1wYWRkaW5nLXkpKSBhdXRvO1xuICB9XG59XG5cbi5vZmZjYW52YXMtdGl0bGUge1xuICBtYXJnaW4tYm90dG9tOiAwO1xuICBsaW5lLWhlaWdodDogdmFyKC0tI3skcHJlZml4fW9mZmNhbnZhcy10aXRsZS1saW5lLWhlaWdodCk7XG59XG5cbi5vZmZjYW52YXMtYm9keSB7XG4gIGZsZXgtZ3JvdzogMTtcbiAgcGFkZGluZzogdmFyKC0tI3skcHJlZml4fW9mZmNhbnZhcy1wYWRkaW5nLXkpIHZhcigtLSN7JHByZWZpeH1vZmZjYW52YXMtcGFkZGluZy14KTtcbiAgb3ZlcmZsb3cteTogYXV0bztcbn1cbiIsIi5wbGFjZWhvbGRlciB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgbWluLWhlaWdodDogMWVtO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBjdXJzb3I6IHdhaXQ7XG4gIGJhY2tncm91bmQtY29sb3I6IGN1cnJlbnRjb2xvcjtcbiAgb3BhY2l0eTogJHBsYWNlaG9sZGVyLW9wYWNpdHktbWF4O1xuXG4gICYuYnRuOjpiZWZvcmUge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBjb250ZW50OiBcIlwiO1xuICB9XG59XG5cbi8vIFNpemluZ1xuLnBsYWNlaG9sZGVyLXhzIHtcbiAgbWluLWhlaWdodDogLjZlbTtcbn1cblxuLnBsYWNlaG9sZGVyLXNtIHtcbiAgbWluLWhlaWdodDogLjhlbTtcbn1cblxuLnBsYWNlaG9sZGVyLWxnIHtcbiAgbWluLWhlaWdodDogMS4yZW07XG59XG5cbi8vIEFuaW1hdGlvblxuLnBsYWNlaG9sZGVyLWdsb3cge1xuICAucGxhY2Vob2xkZXIge1xuICAgIGFuaW1hdGlvbjogcGxhY2Vob2xkZXItZ2xvdyAycyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIHBsYWNlaG9sZGVyLWdsb3cge1xuICA1MCUge1xuICAgIG9wYWNpdHk6ICRwbGFjZWhvbGRlci1vcGFjaXR5LW1pbjtcbiAgfVxufVxuXG4ucGxhY2Vob2xkZXItd2F2ZSB7XG4gIG1hc2staW1hZ2U6IGxpbmVhci1ncmFkaWVudCgxMzBkZWcsICRibGFjayA1NSUsIHJnYmEoMCwgMCwgMCwgKDEgLSAkcGxhY2Vob2xkZXItb3BhY2l0eS1taW4pKSA3NSUsICRibGFjayA5NSUpO1xuICBtYXNrLXNpemU6IDIwMCUgMTAwJTtcbiAgYW5pbWF0aW9uOiBwbGFjZWhvbGRlci13YXZlIDJzIGxpbmVhciBpbmZpbml0ZTtcbn1cblxuQGtleWZyYW1lcyBwbGFjZWhvbGRlci13YXZlIHtcbiAgMTAwJSB7XG4gICAgbWFzay1wb3NpdGlvbjogLTIwMCUgMCU7XG4gIH1cbn1cbiIsIi8vIEFsbC1jYXBzIGBSR0JBKClgIGZ1bmN0aW9uIHVzZWQgYmVjYXVzZSBvZiB0aGlzIFNhc3MgYnVnOiBodHRwczovL2dpdGh1Yi5jb20vc2Fzcy9ub2RlLXNhc3MvaXNzdWVzLzIyNTFcbkBlYWNoICRjb2xvciwgJHZhbHVlIGluICR0aGVtZS1jb2xvcnMge1xuICAudGV4dC1iZy0jeyRjb2xvcn0ge1xuICAgIGNvbG9yOiBjb2xvci1jb250cmFzdCgkdmFsdWUpIGlmKCRlbmFibGUtaW1wb3J0YW50LXV0aWxpdGllcywgIWltcG9ydGFudCwgbnVsbCk7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogUkdCQSh2YXIoLS0jeyRwcmVmaXh9I3skY29sb3J9LXJnYiksIHZhcigtLSN7JHByZWZpeH1iZy1vcGFjaXR5LCAxKSkgaWYoJGVuYWJsZS1pbXBvcnRhbnQtdXRpbGl0aWVzLCAhaW1wb3J0YW50LCBudWxsKTtcbiAgfVxufVxuIiwiLy8gQWxsLWNhcHMgYFJHQkEoKWAgZnVuY3Rpb24gdXNlZCBiZWNhdXNlIG9mIHRoaXMgU2FzcyBidWc6IGh0dHBzOi8vZ2l0aHViLmNvbS9zYXNzL25vZGUtc2Fzcy9pc3N1ZXMvMjI1MVxuQGVhY2ggJGNvbG9yLCAkdmFsdWUgaW4gJHRoZW1lLWNvbG9ycyB7XG4gIC5saW5rLSN7JGNvbG9yfSB7XG4gICAgY29sb3I6IFJHQkEodmFyKC0tI3skcHJlZml4fSN7JGNvbG9yfS1yZ2IpLCB2YXIoLS0jeyRwcmVmaXh9bGluay1vcGFjaXR5LCAxKSkgaWYoJGVuYWJsZS1pbXBvcnRhbnQtdXRpbGl0aWVzLCAhaW1wb3J0YW50LCBudWxsKTtcbiAgICB0ZXh0LWRlY29yYXRpb24tY29sb3I6IFJHQkEodmFyKC0tI3skcHJlZml4fSN7JGNvbG9yfS1yZ2IpLCB2YXIoLS0jeyRwcmVmaXh9bGluay11bmRlcmxpbmUtb3BhY2l0eSwgMSkpIGlmKCRlbmFibGUtaW1wb3J0YW50LXV0aWxpdGllcywgIWltcG9ydGFudCwgbnVsbCk7XG5cbiAgICBAaWYgJGxpbmstc2hhZGUtcGVyY2VudGFnZSAhPSAwIHtcbiAgICAgICY6aG92ZXIsXG4gICAgICAmOmZvY3VzIHtcbiAgICAgICAgJGhvdmVyLWNvbG9yOiBpZihjb2xvci1jb250cmFzdCgkdmFsdWUpID09ICRjb2xvci1jb250cmFzdC1saWdodCwgc2hhZGUtY29sb3IoJHZhbHVlLCAkbGluay1zaGFkZS1wZXJjZW50YWdlKSwgdGludC1jb2xvcigkdmFsdWUsICRsaW5rLXNoYWRlLXBlcmNlbnRhZ2UpKTtcbiAgICAgICAgY29sb3I6IFJHQkEoI3t0by1yZ2IoJGhvdmVyLWNvbG9yKX0sIHZhcigtLSN7JHByZWZpeH1saW5rLW9wYWNpdHksIDEpKSBpZigkZW5hYmxlLWltcG9ydGFudC11dGlsaXRpZXMsICFpbXBvcnRhbnQsIG51bGwpO1xuICAgICAgICB0ZXh0LWRlY29yYXRpb24tY29sb3I6IFJHQkEodG8tcmdiKCRob3Zlci1jb2xvciksIHZhcigtLSN7JHByZWZpeH1saW5rLXVuZGVybGluZS1vcGFjaXR5LCAxKSkgaWYoJGVuYWJsZS1pbXBvcnRhbnQtdXRpbGl0aWVzLCAhaW1wb3J0YW50LCBudWxsKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8gT25lLW9mZiBzcGVjaWFsIGxpbmsgaGVscGVyIGFzIGEgYnJpZGdlIHVudGlsIHY2XG4ubGluay1ib2R5LWVtcGhhc2lzIHtcbiAgY29sb3I6IFJHQkEodmFyKC0tI3skcHJlZml4fWVtcGhhc2lzLWNvbG9yLXJnYiksIHZhcigtLSN7JHByZWZpeH1saW5rLW9wYWNpdHksIDEpKSBpZigkZW5hYmxlLWltcG9ydGFudC11dGlsaXRpZXMsICFpbXBvcnRhbnQsIG51bGwpO1xuICB0ZXh0LWRlY29yYXRpb24tY29sb3I6IFJHQkEodmFyKC0tI3skcHJlZml4fWVtcGhhc2lzLWNvbG9yLXJnYiksIHZhcigtLSN7JHByZWZpeH1saW5rLXVuZGVybGluZS1vcGFjaXR5LCAxKSkgaWYoJGVuYWJsZS1pbXBvcnRhbnQtdXRpbGl0aWVzLCAhaW1wb3J0YW50LCBudWxsKTtcblxuICBAaWYgJGxpbmstc2hhZGUtcGVyY2VudGFnZSAhPSAwIHtcbiAgICAmOmhvdmVyLFxuICAgICY6Zm9jdXMge1xuICAgICAgY29sb3I6IFJHQkEodmFyKC0tI3skcHJlZml4fWVtcGhhc2lzLWNvbG9yLXJnYiksIHZhcigtLSN7JHByZWZpeH1saW5rLW9wYWNpdHksIC43NSkpIGlmKCRlbmFibGUtaW1wb3J0YW50LXV0aWxpdGllcywgIWltcG9ydGFudCwgbnVsbCk7XG4gICAgICB0ZXh0LWRlY29yYXRpb24tY29sb3I6IFJHQkEodmFyKC0tI3skcHJlZml4fWVtcGhhc2lzLWNvbG9yLXJnYiksIHZhcigtLSN7JHByZWZpeH1saW5rLXVuZGVybGluZS1vcGFjaXR5LCAuNzUpKSBpZigkZW5hYmxlLWltcG9ydGFudC11dGlsaXRpZXMsICFpbXBvcnRhbnQsIG51bGwpO1xuICAgIH1cbiAgfVxufVxuIiwiLmZvY3VzLXJpbmc6Zm9jdXMge1xuICBvdXRsaW5lOiAwO1xuICAvLyBCeSBkZWZhdWx0LCB0aGVyZSBpcyBubyBgLS1icy1mb2N1cy1yaW5nLXhgLCBgLS1icy1mb2N1cy1yaW5nLXlgLCBvciBgLS1icy1mb2N1cy1yaW5nLWJsdXJgLCBidXQgd2UgcHJvdmlkZSBDU1MgdmFyaWFibGVzIHdpdGggZmFsbGJhY2tzIHRvIGluaXRpYWwgYDBgIHZhbHVlc1xuICBib3gtc2hhZG93OiB2YXIoLS0jeyRwcmVmaXh9Zm9jdXMtcmluZy14LCAwKSB2YXIoLS0jeyRwcmVmaXh9Zm9jdXMtcmluZy15LCAwKSB2YXIoLS0jeyRwcmVmaXh9Zm9jdXMtcmluZy1ibHVyLCAwKSB2YXIoLS0jeyRwcmVmaXh9Zm9jdXMtcmluZy13aWR0aCkgdmFyKC0tI3skcHJlZml4fWZvY3VzLXJpbmctY29sb3IpO1xufVxuIiwiLmljb24tbGluayB7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBnYXA6ICRpY29uLWxpbmstZ2FwO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICB0ZXh0LWRlY29yYXRpb24tY29sb3I6IHJnYmEodmFyKC0tI3skcHJlZml4fWxpbmstY29sb3ItcmdiKSwgdmFyKC0tI3skcHJlZml4fWxpbmstb3BhY2l0eSwgLjUpKTtcbiAgdGV4dC11bmRlcmxpbmUtb2Zmc2V0OiAkaWNvbi1saW5rLXVuZGVybGluZS1vZmZzZXQ7XG4gIGJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjtcblxuICA+IC5iaSB7XG4gICAgZmxleC1zaHJpbms6IDA7XG4gICAgd2lkdGg6ICRpY29uLWxpbmstaWNvbi1zaXplO1xuICAgIGhlaWdodDogJGljb24tbGluay1pY29uLXNpemU7XG4gICAgZmlsbDogY3VycmVudGNvbG9yO1xuICAgIEBpbmNsdWRlIHRyYW5zaXRpb24oJGljb24tbGluay1pY29uLXRyYW5zaXRpb24pO1xuICB9XG59XG5cbi5pY29uLWxpbmstaG92ZXIge1xuICAmOmhvdmVyLFxuICAmOmZvY3VzLXZpc2libGUge1xuICAgID4gLmJpIHtcbiAgICAgIHRyYW5zZm9ybTogdmFyKC0tI3skcHJlZml4fWljb24tbGluay10cmFuc2Zvcm0sICRpY29uLWxpbmstaWNvbi10cmFuc2Zvcm0pO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gQ3JlZGl0OiBOaWNvbGFzIEdhbGxhZ2hlciBhbmQgU1VJVCBDU1MuXG5cbi5yYXRpbyB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgd2lkdGg6IDEwMCU7XG5cbiAgJjo6YmVmb3JlIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwYWRkaW5nLXRvcDogdmFyKC0tI3skcHJlZml4fWFzcGVjdC1yYXRpbyk7XG4gICAgY29udGVudDogXCJcIjtcbiAgfVxuXG4gID4gKiB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAwO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgfVxufVxuXG5AZWFjaCAka2V5LCAkcmF0aW8gaW4gJGFzcGVjdC1yYXRpb3Mge1xuICAucmF0aW8tI3ska2V5fSB7XG4gICAgLS0jeyRwcmVmaXh9YXNwZWN0LXJhdGlvOiAjeyRyYXRpb307XG4gIH1cbn1cbiIsIi8vIFNob3J0aGFuZFxuXG4uZml4ZWQtdG9wIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIHJpZ2h0OiAwO1xuICBsZWZ0OiAwO1xuICB6LWluZGV4OiAkemluZGV4LWZpeGVkO1xufVxuXG4uZml4ZWQtYm90dG9tIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICByaWdodDogMDtcbiAgYm90dG9tOiAwO1xuICBsZWZ0OiAwO1xuICB6LWluZGV4OiAkemluZGV4LWZpeGVkO1xufVxuXG4vLyBSZXNwb25zaXZlIHN0aWNreSB0b3AgYW5kIGJvdHRvbVxuQGVhY2ggJGJyZWFrcG9pbnQgaW4gbWFwLWtleXMoJGdyaWQtYnJlYWtwb2ludHMpIHtcbiAgQGluY2x1ZGUgbWVkaWEtYnJlYWtwb2ludC11cCgkYnJlYWtwb2ludCkge1xuICAgICRpbmZpeDogYnJlYWtwb2ludC1pbmZpeCgkYnJlYWtwb2ludCwgJGdyaWQtYnJlYWtwb2ludHMpO1xuXG4gICAgLnN0aWNreSN7JGluZml4fS10b3Age1xuICAgICAgcG9zaXRpb246IHN0aWNreTtcbiAgICAgIHRvcDogMDtcbiAgICAgIHotaW5kZXg6ICR6aW5kZXgtc3RpY2t5O1xuICAgIH1cblxuICAgIC5zdGlja3kjeyRpbmZpeH0tYm90dG9tIHtcbiAgICAgIHBvc2l0aW9uOiBzdGlja3k7XG4gICAgICBib3R0b206IDA7XG4gICAgICB6LWluZGV4OiAkemluZGV4LXN0aWNreTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIHNjc3MtZG9jcy1zdGFydCBzdGFja3Ncbi5oc3RhY2sge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBhbGlnbi1zZWxmOiBzdHJldGNoO1xufVxuXG4udnN0YWNrIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleDogMSAxIGF1dG87XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGFsaWduLXNlbGY6IHN0cmV0Y2g7XG59XG4vLyBzY3NzLWRvY3MtZW5kIHN0YWNrc1xuIiwiLy9cbi8vIFZpc3VhbGx5IGhpZGRlblxuLy9cblxuLnZpc3VhbGx5LWhpZGRlbixcbi52aXN1YWxseS1oaWRkZW4tZm9jdXNhYmxlOm5vdCg6Zm9jdXMpOm5vdCg6Zm9jdXMtd2l0aGluKSB7XG4gIEBpbmNsdWRlIHZpc3VhbGx5LWhpZGRlbigpO1xufVxuIiwiLy8gc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50XG5cbi8vIEhpZGUgY29udGVudCB2aXN1YWxseSB3aGlsZSBrZWVwaW5nIGl0IGFjY2Vzc2libGUgdG8gYXNzaXN0aXZlIHRlY2hub2xvZ2llc1xuLy9cbi8vIFNlZTogaHR0cHM6Ly93d3cuYTExeXByb2plY3QuY29tL3Bvc3RzLzIwMTMtMDEtMTEtaG93LXRvLWhpZGUtY29udGVudC9cbi8vIFNlZTogaHR0cHM6Ly9raXR0eWdpcmF1ZGVsLmNvbS8yMDE2LzEwLzEzL2Nzcy1oaWRlLWFuZC1zZWVrL1xuXG5AbWl4aW4gdmlzdWFsbHktaGlkZGVuKCkge1xuICB3aWR0aDogMXB4ICFpbXBvcnRhbnQ7XG4gIGhlaWdodDogMXB4ICFpbXBvcnRhbnQ7XG4gIHBhZGRpbmc6IDAgIWltcG9ydGFudDtcbiAgbWFyZ2luOiAtMXB4ICFpbXBvcnRhbnQ7IC8vIEZpeCBmb3IgaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2lzc3Vlcy8yNTY4NlxuICBvdmVyZmxvdzogaGlkZGVuICFpbXBvcnRhbnQ7XG4gIGNsaXA6IHJlY3QoMCwgMCwgMCwgMCkgIWltcG9ydGFudDtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcCAhaW1wb3J0YW50O1xuICBib3JkZXI6IDAgIWltcG9ydGFudDtcblxuICAvLyBGaXggZm9yIHBvc2l0aW9uZWQgdGFibGUgY2FwdGlvbiB0aGF0IGNvdWxkIGJlY29tZSBhbm9ueW1vdXMgY2VsbHNcbiAgJjpub3QoY2FwdGlvbikge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZSAhaW1wb3J0YW50O1xuICB9XG59XG5cbi8vIFVzZSB0byBvbmx5IGRpc3BsYXkgY29udGVudCB3aGVuIGl0J3MgZm9jdXNlZCwgb3Igb25lIG9mIGl0cyBjaGlsZCBlbGVtZW50cyBpcyBmb2N1c2VkXG4vLyAoaS5lLiB3aGVuIGZvY3VzIGlzIHdpdGhpbiB0aGUgZWxlbWVudC9jb250YWluZXIgdGhhdCB0aGUgY2xhc3Mgd2FzIGFwcGxpZWQgdG8pXG4vL1xuLy8gVXNlZnVsIGZvciBcIlNraXAgdG8gbWFpbiBjb250ZW50XCIgbGlua3M7IHNlZSBodHRwczovL3d3dy53My5vcmcvVFIvMjAxMy9OT1RFLVdDQUcyMC1URUNIUy0yMDEzMDkwNS9HMVxuXG5AbWl4aW4gdmlzdWFsbHktaGlkZGVuLWZvY3VzYWJsZSgpIHtcbiAgJjpub3QoOmZvY3VzKTpub3QoOmZvY3VzLXdpdGhpbikge1xuICAgIEBpbmNsdWRlIHZpc3VhbGx5LWhpZGRlbigpO1xuICB9XG59XG4iLCIvL1xuLy8gU3RyZXRjaGVkIGxpbmtcbi8vXG5cbi5zdHJldGNoZWQtbGluayB7XG4gICY6OiN7JHN0cmV0Y2hlZC1saW5rLXBzZXVkby1lbGVtZW50fSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICByaWdodDogMDtcbiAgICBib3R0b206IDA7XG4gICAgbGVmdDogMDtcbiAgICB6LWluZGV4OiAkc3RyZXRjaGVkLWxpbmstei1pbmRleDtcbiAgICBjb250ZW50OiBcIlwiO1xuICB9XG59XG4iLCIvL1xuLy8gVGV4dCB0cnVuY2F0aW9uXG4vL1xuXG4udGV4dC10cnVuY2F0ZSB7XG4gIEBpbmNsdWRlIHRleHQtdHJ1bmNhdGUoKTtcbn1cbiIsIi8vIFRleHQgdHJ1bmNhdGVcbi8vIFJlcXVpcmVzIGlubGluZS1ibG9jayBvciBibG9jayBmb3IgcHJvcGVyIHN0eWxpbmdcblxuQG1peGluIHRleHQtdHJ1bmNhdGUoKSB7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuIiwiLnZyIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBhbGlnbi1zZWxmOiBzdHJldGNoO1xuICB3aWR0aDogJHZyLWJvcmRlci13aWR0aDtcbiAgbWluLWhlaWdodDogMWVtO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBjdXJyZW50Y29sb3I7XG4gIG9wYWNpdHk6ICRoci1vcGFjaXR5O1xufVxuIiwiLy8gVXRpbGl0eSBnZW5lcmF0b3Jcbi8vIFVzZWQgdG8gZ2VuZXJhdGUgdXRpbGl0aWVzICYgcHJpbnQgdXRpbGl0aWVzXG5AbWl4aW4gZ2VuZXJhdGUtdXRpbGl0eSgkdXRpbGl0eSwgJGluZml4OiBcIlwiLCAkaXMtcmZzLW1lZGlhLXF1ZXJ5OiBmYWxzZSkge1xuICAkdmFsdWVzOiBtYXAtZ2V0KCR1dGlsaXR5LCB2YWx1ZXMpO1xuXG4gIC8vIElmIHRoZSB2YWx1ZXMgYXJlIGEgbGlzdCBvciBzdHJpbmcsIGNvbnZlcnQgaXQgaW50byBhIG1hcFxuICBAaWYgdHlwZS1vZigkdmFsdWVzKSA9PSBcInN0cmluZ1wiIG9yIHR5cGUtb2YobnRoKCR2YWx1ZXMsIDEpKSAhPSBcImxpc3RcIiB7XG4gICAgJHZhbHVlczogemlwKCR2YWx1ZXMsICR2YWx1ZXMpO1xuICB9XG5cbiAgQGVhY2ggJGtleSwgJHZhbHVlIGluICR2YWx1ZXMge1xuICAgICRwcm9wZXJ0aWVzOiBtYXAtZ2V0KCR1dGlsaXR5LCBwcm9wZXJ0eSk7XG5cbiAgICAvLyBNdWx0aXBsZSBwcm9wZXJ0aWVzIGFyZSBwb3NzaWJsZSwgZm9yIGV4YW1wbGUgd2l0aCB2ZXJ0aWNhbCBvciBob3Jpem9udGFsIG1hcmdpbnMgb3IgcGFkZGluZ3NcbiAgICBAaWYgdHlwZS1vZigkcHJvcGVydGllcykgPT0gXCJzdHJpbmdcIiB7XG4gICAgICAkcHJvcGVydGllczogYXBwZW5kKCgpLCAkcHJvcGVydGllcyk7XG4gICAgfVxuXG4gICAgLy8gVXNlIGN1c3RvbSBjbGFzcyBpZiBwcmVzZW50XG4gICAgJHByb3BlcnR5LWNsYXNzOiBpZihtYXAtaGFzLWtleSgkdXRpbGl0eSwgY2xhc3MpLCBtYXAtZ2V0KCR1dGlsaXR5LCBjbGFzcyksIG50aCgkcHJvcGVydGllcywgMSkpO1xuICAgICRwcm9wZXJ0eS1jbGFzczogaWYoJHByb3BlcnR5LWNsYXNzID09IG51bGwsIFwiXCIsICRwcm9wZXJ0eS1jbGFzcyk7XG5cbiAgICAvLyBVc2UgY3VzdG9tIENTUyB2YXJpYWJsZSBuYW1lIGlmIHByZXNlbnQsIG90aGVyd2lzZSBkZWZhdWx0IHRvIGBjbGFzc2BcbiAgICAkY3NzLXZhcmlhYmxlLW5hbWU6IGlmKG1hcC1oYXMta2V5KCR1dGlsaXR5LCBjc3MtdmFyaWFibGUtbmFtZSksIG1hcC1nZXQoJHV0aWxpdHksIGNzcy12YXJpYWJsZS1uYW1lKSwgbWFwLWdldCgkdXRpbGl0eSwgY2xhc3MpKTtcblxuICAgIC8vIFN0YXRlIHBhcmFtcyB0byBnZW5lcmF0ZSBwc2V1ZG8tY2xhc3Nlc1xuICAgICRzdGF0ZTogaWYobWFwLWhhcy1rZXkoJHV0aWxpdHksIHN0YXRlKSwgbWFwLWdldCgkdXRpbGl0eSwgc3RhdGUpLCAoKSk7XG5cbiAgICAkaW5maXg6IGlmKCRwcm9wZXJ0eS1jbGFzcyA9PSBcIlwiIGFuZCBzdHItc2xpY2UoJGluZml4LCAxLCAxKSA9PSBcIi1cIiwgc3RyLXNsaWNlKCRpbmZpeCwgMiksICRpbmZpeCk7XG5cbiAgICAvLyBEb24ndCBwcmVmaXggaWYgdmFsdWUga2V5IGlzIG51bGwgKGUuZy4gd2l0aCBzaGFkb3cgY2xhc3MpXG4gICAgJHByb3BlcnR5LWNsYXNzLW1vZGlmaWVyOiBpZigka2V5LCBpZigkcHJvcGVydHktY2xhc3MgPT0gXCJcIiBhbmQgJGluZml4ID09IFwiXCIsIFwiXCIsIFwiLVwiKSArICRrZXksIFwiXCIpO1xuXG4gICAgQGlmIG1hcC1nZXQoJHV0aWxpdHksIHJmcykge1xuICAgICAgLy8gSW5zaWRlIHRoZSBtZWRpYSBxdWVyeVxuICAgICAgQGlmICRpcy1yZnMtbWVkaWEtcXVlcnkge1xuICAgICAgICAkdmFsOiByZnMtdmFsdWUoJHZhbHVlKTtcblxuICAgICAgICAvLyBEbyBub3QgcmVuZGVyIGFueXRoaW5nIGlmIGZsdWlkIGFuZCBub24gZmx1aWQgdmFsdWVzIGFyZSB0aGUgc2FtZVxuICAgICAgICAkdmFsdWU6IGlmKCR2YWwgPT0gcmZzLWZsdWlkLXZhbHVlKCR2YWx1ZSksIG51bGwsICR2YWwpO1xuICAgICAgfVxuICAgICAgQGVsc2Uge1xuICAgICAgICAkdmFsdWU6IHJmcy1mbHVpZC12YWx1ZSgkdmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgICRpcy1jc3MtdmFyOiBtYXAtZ2V0KCR1dGlsaXR5LCBjc3MtdmFyKTtcbiAgICAkaXMtbG9jYWwtdmFyczogbWFwLWdldCgkdXRpbGl0eSwgbG9jYWwtdmFycyk7XG4gICAgJGlzLXJ0bDogbWFwLWdldCgkdXRpbGl0eSwgcnRsKTtcblxuICAgIEBpZiAkdmFsdWUgIT0gbnVsbCB7XG4gICAgICBAaWYgJGlzLXJ0bCA9PSBmYWxzZSB7XG4gICAgICAgIC8qIHJ0bDpiZWdpbjpyZW1vdmUgKi9cbiAgICAgIH1cblxuICAgICAgQGlmICRpcy1jc3MtdmFyIHtcbiAgICAgICAgLiN7JHByb3BlcnR5LWNsYXNzICsgJGluZml4ICsgJHByb3BlcnR5LWNsYXNzLW1vZGlmaWVyfSB7XG4gICAgICAgICAgLS0jeyRwcmVmaXh9I3skY3NzLXZhcmlhYmxlLW5hbWV9OiAjeyR2YWx1ZX07XG4gICAgICAgIH1cblxuICAgICAgICBAZWFjaCAkcHNldWRvIGluICRzdGF0ZSB7XG4gICAgICAgICAgLiN7JHByb3BlcnR5LWNsYXNzICsgJGluZml4ICsgJHByb3BlcnR5LWNsYXNzLW1vZGlmaWVyfS0jeyRwc2V1ZG99OiN7JHBzZXVkb30ge1xuICAgICAgICAgICAgLS0jeyRwcmVmaXh9I3skY3NzLXZhcmlhYmxlLW5hbWV9OiAjeyR2YWx1ZX07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgLiN7JHByb3BlcnR5LWNsYXNzICsgJGluZml4ICsgJHByb3BlcnR5LWNsYXNzLW1vZGlmaWVyfSB7XG4gICAgICAgICAgQGVhY2ggJHByb3BlcnR5IGluICRwcm9wZXJ0aWVzIHtcbiAgICAgICAgICAgIEBpZiAkaXMtbG9jYWwtdmFycyB7XG4gICAgICAgICAgICAgIEBlYWNoICRsb2NhbC12YXIsICR2YXJpYWJsZSBpbiAkaXMtbG9jYWwtdmFycyB7XG4gICAgICAgICAgICAgICAgLS0jeyRwcmVmaXh9I3skbG9jYWwtdmFyfTogI3skdmFyaWFibGV9O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAjeyRwcm9wZXJ0eX06ICR2YWx1ZSBpZigkZW5hYmxlLWltcG9ydGFudC11dGlsaXRpZXMsICFpbXBvcnRhbnQsIG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIEBlYWNoICRwc2V1ZG8gaW4gJHN0YXRlIHtcbiAgICAgICAgICAuI3skcHJvcGVydHktY2xhc3MgKyAkaW5maXggKyAkcHJvcGVydHktY2xhc3MtbW9kaWZpZXJ9LSN7JHBzZXVkb306I3skcHNldWRvfSB7XG4gICAgICAgICAgICBAZWFjaCAkcHJvcGVydHkgaW4gJHByb3BlcnRpZXMge1xuICAgICAgICAgICAgICBAaWYgJGlzLWxvY2FsLXZhcnMge1xuICAgICAgICAgICAgICAgIEBlYWNoICRsb2NhbC12YXIsICR2YXJpYWJsZSBpbiAkaXMtbG9jYWwtdmFycyB7XG4gICAgICAgICAgICAgICAgICAtLSN7JHByZWZpeH0jeyRsb2NhbC12YXJ9OiAjeyR2YXJpYWJsZX07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICN7JHByb3BlcnR5fTogJHZhbHVlIGlmKCRlbmFibGUtaW1wb3J0YW50LXV0aWxpdGllcywgIWltcG9ydGFudCwgbnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIEBpZiAkaXMtcnRsID09IGZhbHNlIHtcbiAgICAgICAgLyogcnRsOmVuZDpyZW1vdmUgKi9cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIi8vIExvb3Agb3ZlciBlYWNoIGJyZWFrcG9pbnRcbkBlYWNoICRicmVha3BvaW50IGluIG1hcC1rZXlzKCRncmlkLWJyZWFrcG9pbnRzKSB7XG5cbiAgLy8gR2VuZXJhdGUgbWVkaWEgcXVlcnkgaWYgbmVlZGVkXG4gIEBpbmNsdWRlIG1lZGlhLWJyZWFrcG9pbnQtdXAoJGJyZWFrcG9pbnQpIHtcbiAgICAkaW5maXg6IGJyZWFrcG9pbnQtaW5maXgoJGJyZWFrcG9pbnQsICRncmlkLWJyZWFrcG9pbnRzKTtcblxuICAgIC8vIExvb3Agb3ZlciBlYWNoIHV0aWxpdHkgcHJvcGVydHlcbiAgICBAZWFjaCAka2V5LCAkdXRpbGl0eSBpbiAkdXRpbGl0aWVzIHtcbiAgICAgIC8vIFRoZSB1dGlsaXR5IGNhbiBiZSBkaXNhYmxlZCB3aXRoIGBmYWxzZWAsIHRodXMgY2hlY2sgaWYgdGhlIHV0aWxpdHkgaXMgYSBtYXAgZmlyc3RcbiAgICAgIC8vIE9ubHkgcHJvY2VlZCBpZiByZXNwb25zaXZlIG1lZGlhIHF1ZXJpZXMgYXJlIGVuYWJsZWQgb3IgaWYgaXQncyB0aGUgYmFzZSBtZWRpYSBxdWVyeVxuICAgICAgQGlmIHR5cGUtb2YoJHV0aWxpdHkpID09IFwibWFwXCIgYW5kIChtYXAtZ2V0KCR1dGlsaXR5LCByZXNwb25zaXZlKSBvciAkaW5maXggPT0gXCJcIikge1xuICAgICAgICBAaW5jbHVkZSBnZW5lcmF0ZS11dGlsaXR5KCR1dGlsaXR5LCAkaW5maXgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLyBSRlMgcmVzY2FsaW5nXG5AbWVkaWEgKG1pbi13aWR0aDogJHJmcy1tcS12YWx1ZSkge1xuICBAZWFjaCAkYnJlYWtwb2ludCBpbiBtYXAta2V5cygkZ3JpZC1icmVha3BvaW50cykge1xuICAgICRpbmZpeDogYnJlYWtwb2ludC1pbmZpeCgkYnJlYWtwb2ludCwgJGdyaWQtYnJlYWtwb2ludHMpO1xuXG4gICAgQGlmIChtYXAtZ2V0KCRncmlkLWJyZWFrcG9pbnRzLCAkYnJlYWtwb2ludCkgPCAkcmZzLWJyZWFrcG9pbnQpIHtcbiAgICAgIC8vIExvb3Agb3ZlciBlYWNoIHV0aWxpdHkgcHJvcGVydHlcbiAgICAgIEBlYWNoICRrZXksICR1dGlsaXR5IGluICR1dGlsaXRpZXMge1xuICAgICAgICAvLyBUaGUgdXRpbGl0eSBjYW4gYmUgZGlzYWJsZWQgd2l0aCBgZmFsc2VgLCB0aHVzIGNoZWNrIGlmIHRoZSB1dGlsaXR5IGlzIGEgbWFwIGZpcnN0XG4gICAgICAgIC8vIE9ubHkgcHJvY2VlZCBpZiByZXNwb25zaXZlIG1lZGlhIHF1ZXJpZXMgYXJlIGVuYWJsZWQgb3IgaWYgaXQncyB0aGUgYmFzZSBtZWRpYSBxdWVyeVxuICAgICAgICBAaWYgdHlwZS1vZigkdXRpbGl0eSkgPT0gXCJtYXBcIiBhbmQgbWFwLWdldCgkdXRpbGl0eSwgcmZzKSBhbmQgKG1hcC1nZXQoJHV0aWxpdHksIHJlc3BvbnNpdmUpIG9yICRpbmZpeCA9PSBcIlwiKSB7XG4gICAgICAgICAgQGluY2x1ZGUgZ2VuZXJhdGUtdXRpbGl0eSgkdXRpbGl0eSwgJGluZml4LCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5cbi8vIFByaW50IHV0aWxpdGllc1xuQG1lZGlhIHByaW50IHtcbiAgQGVhY2ggJGtleSwgJHV0aWxpdHkgaW4gJHV0aWxpdGllcyB7XG4gICAgLy8gVGhlIHV0aWxpdHkgY2FuIGJlIGRpc2FibGVkIHdpdGggYGZhbHNlYCwgdGh1cyBjaGVjayBpZiB0aGUgdXRpbGl0eSBpcyBhIG1hcCBmaXJzdFxuICAgIC8vIFRoZW4gY2hlY2sgaWYgdGhlIHV0aWxpdHkgbmVlZHMgcHJpbnQgc3R5bGVzXG4gICAgQGlmIHR5cGUtb2YoJHV0aWxpdHkpID09IFwibWFwXCIgYW5kIG1hcC1nZXQoJHV0aWxpdHksIHByaW50KSA9PSB0cnVlIHtcbiAgICAgIEBpbmNsdWRlIGdlbmVyYXRlLXV0aWxpdHkoJHV0aWxpdHksIFwiLXByaW50XCIpO1xuICAgIH1cbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9*/ \ No newline at end of file diff --git a/settings.html b/settings.html new file mode 100644 index 0000000..4f62542 --- /dev/null +++ b/settings.html @@ -0,0 +1 @@ +QR Code Settings
QR Code Settings
\ No newline at end of file diff --git a/settings.js b/settings.js new file mode 100644 index 0000000..7bff1f6 --- /dev/null +++ b/settings.js @@ -0,0 +1,3 @@ +/*! For license information please see settings.js.LICENSE.txt */ +(()=>{"use strict";var e={d:(t,i)=>{for(var n in i)e.o(i,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:i[n]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};e.r(t),e.d(t,{afterMain:()=>w,afterRead:()=>b,afterWrite:()=>C,applyStyles:()=>D,arrow:()=>G,auto:()=>r,basePlacements:()=>a,beforeMain:()=>v,beforeRead:()=>g,beforeWrite:()=>E,bottom:()=>n,clippingParents:()=>d,computeStyles:()=>te,createPopper:()=>Se,createPopperBase:()=>Le,createPopperLite:()=>De,detectOverflow:()=>ge,end:()=>c,eventListeners:()=>ne,flip:()=>_e,hide:()=>ye,left:()=>o,main:()=>y,modifierPhases:()=>T,offset:()=>we,placements:()=>m,popper:()=>u,popperGenerator:()=>ke,popperOffsets:()=>Ee,preventOverflow:()=>Ae,read:()=>_,reference:()=>f,right:()=>s,start:()=>l,top:()=>i,variationPlacements:()=>p,viewport:()=>h,write:()=>A});var i="top",n="bottom",s="right",o="left",r="auto",a=[i,n,s,o],l="start",c="end",d="clippingParents",h="viewport",u="popper",f="reference",p=a.reduce((function(e,t){return e.concat([t+"-"+l,t+"-"+c])}),[]),m=[].concat(a,[r]).reduce((function(e,t){return e.concat([t,t+"-"+l,t+"-"+c])}),[]),g="beforeRead",_="read",b="afterRead",v="beforeMain",y="main",w="afterMain",E="beforeWrite",A="write",C="afterWrite",T=[g,_,b,v,y,w,E,A,C];function x(e){return e?(e.nodeName||"").toLowerCase():null}function O(e){if(null==e)return window;if("[object Window]"!==e.toString()){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function k(e){return e instanceof O(e).Element||e instanceof Element}function L(e){return e instanceof O(e).HTMLElement||e instanceof HTMLElement}function S(e){return"undefined"!=typeof ShadowRoot&&(e instanceof O(e).ShadowRoot||e instanceof ShadowRoot)}const D={name:"applyStyles",enabled:!0,phase:"write",fn:function(e){var t=e.state;Object.keys(t.elements).forEach((function(e){var i=t.styles[e]||{},n=t.attributes[e]||{},s=t.elements[e];L(s)&&x(s)&&(Object.assign(s.style,i),Object.keys(n).forEach((function(e){var t=n[e];!1===t?s.removeAttribute(e):s.setAttribute(e,!0===t?"":t)})))}))},effect:function(e){var t=e.state,i={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(t.elements.popper.style,i.popper),t.styles=i,t.elements.arrow&&Object.assign(t.elements.arrow.style,i.arrow),function(){Object.keys(t.elements).forEach((function(e){var n=t.elements[e],s=t.attributes[e]||{},o=Object.keys(t.styles.hasOwnProperty(e)?t.styles[e]:i[e]).reduce((function(e,t){return e[t]="",e}),{});L(n)&&x(n)&&(Object.assign(n.style,o),Object.keys(s).forEach((function(e){n.removeAttribute(e)})))}))}},requires:["computeStyles"]};function $(e){return e.split("-")[0]}var I=Math.max,P=Math.min,N=Math.round;function j(){var e=navigator.userAgentData;return null!=e&&e.brands&&Array.isArray(e.brands)?e.brands.map((function(e){return e.brand+"/"+e.version})).join(" "):navigator.userAgent}function M(){return!/^((?!chrome|android).)*safari/i.test(j())}function F(e,t,i){void 0===t&&(t=!1),void 0===i&&(i=!1);var n=e.getBoundingClientRect(),s=1,o=1;t&&L(e)&&(s=e.offsetWidth>0&&N(n.width)/e.offsetWidth||1,o=e.offsetHeight>0&&N(n.height)/e.offsetHeight||1);var r=(k(e)?O(e):window).visualViewport,a=!M()&&i,l=(n.left+(a&&r?r.offsetLeft:0))/s,c=(n.top+(a&&r?r.offsetTop:0))/o,d=n.width/s,h=n.height/o;return{width:d,height:h,top:c,right:l+d,bottom:c+h,left:l,x:l,y:c}}function H(e){var t=F(e),i=e.offsetWidth,n=e.offsetHeight;return Math.abs(t.width-i)<=1&&(i=t.width),Math.abs(t.height-n)<=1&&(n=t.height),{x:e.offsetLeft,y:e.offsetTop,width:i,height:n}}function z(e,t){var i=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(i&&S(i)){var n=t;do{if(n&&e.isSameNode(n))return!0;n=n.parentNode||n.host}while(n)}return!1}function W(e){return O(e).getComputedStyle(e)}function B(e){return["table","td","th"].indexOf(x(e))>=0}function q(e){return((k(e)?e.ownerDocument:e.document)||window.document).documentElement}function R(e){return"html"===x(e)?e:e.assignedSlot||e.parentNode||(S(e)?e.host:null)||q(e)}function V(e){return L(e)&&"fixed"!==W(e).position?e.offsetParent:null}function K(e){for(var t=O(e),i=V(e);i&&B(i)&&"static"===W(i).position;)i=V(i);return i&&("html"===x(i)||"body"===x(i)&&"static"===W(i).position)?t:i||function(e){var t=/firefox/i.test(j());if(/Trident/i.test(j())&&L(e)&&"fixed"===W(e).position)return null;var i=R(e);for(S(i)&&(i=i.host);L(i)&&["html","body"].indexOf(x(i))<0;){var n=W(i);if("none"!==n.transform||"none"!==n.perspective||"paint"===n.contain||-1!==["transform","perspective"].indexOf(n.willChange)||t&&"filter"===n.willChange||t&&n.filter&&"none"!==n.filter)return i;i=i.parentNode}return null}(e)||t}function Q(e){return["top","bottom"].indexOf(e)>=0?"x":"y"}function X(e,t,i){return I(e,P(t,i))}function Y(e){return Object.assign({},{top:0,right:0,bottom:0,left:0},e)}function U(e,t){return t.reduce((function(t,i){return t[i]=e,t}),{})}const G={name:"arrow",enabled:!0,phase:"main",fn:function(e){var t,r=e.state,l=e.name,c=e.options,d=r.elements.arrow,h=r.modifiersData.popperOffsets,u=$(r.placement),f=Q(u),p=[o,s].indexOf(u)>=0?"height":"width";if(d&&h){var m=function(e,t){return Y("number"!=typeof(e="function"==typeof e?e(Object.assign({},t.rects,{placement:t.placement})):e)?e:U(e,a))}(c.padding,r),g=H(d),_="y"===f?i:o,b="y"===f?n:s,v=r.rects.reference[p]+r.rects.reference[f]-h[f]-r.rects.popper[p],y=h[f]-r.rects.reference[f],w=K(d),E=w?"y"===f?w.clientHeight||0:w.clientWidth||0:0,A=v/2-y/2,C=m[_],T=E-g[p]-m[b],x=E/2-g[p]/2+A,O=X(C,x,T),k=f;r.modifiersData[l]=((t={})[k]=O,t.centerOffset=O-x,t)}},effect:function(e){var t=e.state,i=e.options.element,n=void 0===i?"[data-popper-arrow]":i;null!=n&&("string"!=typeof n||(n=t.elements.popper.querySelector(n)))&&z(t.elements.popper,n)&&(t.elements.arrow=n)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function J(e){return e.split("-")[1]}var Z={top:"auto",right:"auto",bottom:"auto",left:"auto"};function ee(e){var t,r=e.popper,a=e.popperRect,l=e.placement,d=e.variation,h=e.offsets,u=e.position,f=e.gpuAcceleration,p=e.adaptive,m=e.roundOffsets,g=e.isFixed,_=h.x,b=void 0===_?0:_,v=h.y,y=void 0===v?0:v,w="function"==typeof m?m({x:b,y}):{x:b,y};b=w.x,y=w.y;var E=h.hasOwnProperty("x"),A=h.hasOwnProperty("y"),C=o,T=i,x=window;if(p){var k=K(r),L="clientHeight",S="clientWidth";k===O(r)&&"static"!==W(k=q(r)).position&&"absolute"===u&&(L="scrollHeight",S="scrollWidth"),(l===i||(l===o||l===s)&&d===c)&&(T=n,y-=(g&&k===x&&x.visualViewport?x.visualViewport.height:k[L])-a.height,y*=f?1:-1),l!==o&&(l!==i&&l!==n||d!==c)||(C=s,b-=(g&&k===x&&x.visualViewport?x.visualViewport.width:k[S])-a.width,b*=f?1:-1)}var D,$=Object.assign({position:u},p&&Z),I=!0===m?function(e,t){var i=e.x,n=e.y,s=t.devicePixelRatio||1;return{x:N(i*s)/s||0,y:N(n*s)/s||0}}({x:b,y},O(r)):{x:b,y};return b=I.x,y=I.y,f?Object.assign({},$,((D={})[T]=A?"0":"",D[C]=E?"0":"",D.transform=(x.devicePixelRatio||1)<=1?"translate("+b+"px, "+y+"px)":"translate3d("+b+"px, "+y+"px, 0)",D)):Object.assign({},$,((t={})[T]=A?y+"px":"",t[C]=E?b+"px":"",t.transform="",t))}const te={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(e){var t=e.state,i=e.options,n=i.gpuAcceleration,s=void 0===n||n,o=i.adaptive,r=void 0===o||o,a=i.roundOffsets,l=void 0===a||a,c={placement:$(t.placement),variation:J(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:s,isFixed:"fixed"===t.options.strategy};null!=t.modifiersData.popperOffsets&&(t.styles.popper=Object.assign({},t.styles.popper,ee(Object.assign({},c,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:r,roundOffsets:l})))),null!=t.modifiersData.arrow&&(t.styles.arrow=Object.assign({},t.styles.arrow,ee(Object.assign({},c,{offsets:t.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})},data:{}};var ie={passive:!0};const ne={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(e){var t=e.state,i=e.instance,n=e.options,s=n.scroll,o=void 0===s||s,r=n.resize,a=void 0===r||r,l=O(t.elements.popper),c=[].concat(t.scrollParents.reference,t.scrollParents.popper);return o&&c.forEach((function(e){e.addEventListener("scroll",i.update,ie)})),a&&l.addEventListener("resize",i.update,ie),function(){o&&c.forEach((function(e){e.removeEventListener("scroll",i.update,ie)})),a&&l.removeEventListener("resize",i.update,ie)}},data:{}};var se={left:"right",right:"left",bottom:"top",top:"bottom"};function oe(e){return e.replace(/left|right|bottom|top/g,(function(e){return se[e]}))}var re={start:"end",end:"start"};function ae(e){return e.replace(/start|end/g,(function(e){return re[e]}))}function le(e){var t=O(e);return{scrollLeft:t.pageXOffset,scrollTop:t.pageYOffset}}function ce(e){return F(q(e)).left+le(e).scrollLeft}function de(e){var t=W(e),i=t.overflow,n=t.overflowX,s=t.overflowY;return/auto|scroll|overlay|hidden/.test(i+s+n)}function he(e){return["html","body","#document"].indexOf(x(e))>=0?e.ownerDocument.body:L(e)&&de(e)?e:he(R(e))}function ue(e,t){var i;void 0===t&&(t=[]);var n=he(e),s=n===(null==(i=e.ownerDocument)?void 0:i.body),o=O(n),r=s?[o].concat(o.visualViewport||[],de(n)?n:[]):n,a=t.concat(r);return s?a:a.concat(ue(R(r)))}function fe(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function pe(e,t,i){return t===h?fe(function(e,t){var i=O(e),n=q(e),s=i.visualViewport,o=n.clientWidth,r=n.clientHeight,a=0,l=0;if(s){o=s.width,r=s.height;var c=M();(c||!c&&"fixed"===t)&&(a=s.offsetLeft,l=s.offsetTop)}return{width:o,height:r,x:a+ce(e),y:l}}(e,i)):k(t)?function(e,t){var i=F(e,!1,"fixed"===t);return i.top=i.top+e.clientTop,i.left=i.left+e.clientLeft,i.bottom=i.top+e.clientHeight,i.right=i.left+e.clientWidth,i.width=e.clientWidth,i.height=e.clientHeight,i.x=i.left,i.y=i.top,i}(t,i):fe(function(e){var t,i=q(e),n=le(e),s=null==(t=e.ownerDocument)?void 0:t.body,o=I(i.scrollWidth,i.clientWidth,s?s.scrollWidth:0,s?s.clientWidth:0),r=I(i.scrollHeight,i.clientHeight,s?s.scrollHeight:0,s?s.clientHeight:0),a=-n.scrollLeft+ce(e),l=-n.scrollTop;return"rtl"===W(s||i).direction&&(a+=I(i.clientWidth,s?s.clientWidth:0)-o),{width:o,height:r,x:a,y:l}}(q(e)))}function me(e){var t,r=e.reference,a=e.element,d=e.placement,h=d?$(d):null,u=d?J(d):null,f=r.x+r.width/2-a.width/2,p=r.y+r.height/2-a.height/2;switch(h){case i:t={x:f,y:r.y-a.height};break;case n:t={x:f,y:r.y+r.height};break;case s:t={x:r.x+r.width,y:p};break;case o:t={x:r.x-a.width,y:p};break;default:t={x:r.x,y:r.y}}var m=h?Q(h):null;if(null!=m){var g="y"===m?"height":"width";switch(u){case l:t[m]=t[m]-(r[g]/2-a[g]/2);break;case c:t[m]=t[m]+(r[g]/2-a[g]/2)}}return t}function ge(e,t){void 0===t&&(t={});var o=t,r=o.placement,l=void 0===r?e.placement:r,c=o.strategy,p=void 0===c?e.strategy:c,m=o.boundary,g=void 0===m?d:m,_=o.rootBoundary,b=void 0===_?h:_,v=o.elementContext,y=void 0===v?u:v,w=o.altBoundary,E=void 0!==w&&w,A=o.padding,C=void 0===A?0:A,T=Y("number"!=typeof C?C:U(C,a)),O=y===u?f:u,S=e.rects.popper,D=e.elements[E?O:y],$=function(e,t,i,n){var s="clippingParents"===t?function(e){var t=ue(R(e)),i=["absolute","fixed"].indexOf(W(e).position)>=0&&L(e)?K(e):e;return k(i)?t.filter((function(e){return k(e)&&z(e,i)&&"body"!==x(e)})):[]}(e):[].concat(t),o=[].concat(s,[i]),r=o[0],a=o.reduce((function(t,i){var s=pe(e,i,n);return t.top=I(s.top,t.top),t.right=P(s.right,t.right),t.bottom=P(s.bottom,t.bottom),t.left=I(s.left,t.left),t}),pe(e,r,n));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}(k(D)?D:D.contextElement||q(e.elements.popper),g,b,p),N=F(e.elements.reference),j=me({reference:N,element:S,strategy:"absolute",placement:l}),M=fe(Object.assign({},S,j)),H=y===u?M:N,B={top:$.top-H.top+T.top,bottom:H.bottom-$.bottom+T.bottom,left:$.left-H.left+T.left,right:H.right-$.right+T.right},V=e.modifiersData.offset;if(y===u&&V){var Q=V[l];Object.keys(B).forEach((function(e){var t=[s,n].indexOf(e)>=0?1:-1,o=[i,n].indexOf(e)>=0?"y":"x";B[e]+=Q[o]*t}))}return B}const _e={name:"flip",enabled:!0,phase:"main",fn:function(e){var t=e.state,c=e.options,d=e.name;if(!t.modifiersData[d]._skip){for(var h=c.mainAxis,u=void 0===h||h,f=c.altAxis,g=void 0===f||f,_=c.fallbackPlacements,b=c.padding,v=c.boundary,y=c.rootBoundary,w=c.altBoundary,E=c.flipVariations,A=void 0===E||E,C=c.allowedAutoPlacements,T=t.options.placement,x=$(T),O=_||(x!==T&&A?function(e){if($(e)===r)return[];var t=oe(e);return[ae(e),t,ae(t)]}(T):[oe(T)]),k=[T].concat(O).reduce((function(e,i){return e.concat($(i)===r?function(e,t){void 0===t&&(t={});var i=t,n=i.placement,s=i.boundary,o=i.rootBoundary,r=i.padding,l=i.flipVariations,c=i.allowedAutoPlacements,d=void 0===c?m:c,h=J(n),u=h?l?p:p.filter((function(e){return J(e)===h})):a,f=u.filter((function(e){return d.indexOf(e)>=0}));0===f.length&&(f=u);var g=f.reduce((function(t,i){return t[i]=ge(e,{placement:i,boundary:s,rootBoundary:o,padding:r})[$(i)],t}),{});return Object.keys(g).sort((function(e,t){return g[e]-g[t]}))}(t,{placement:i,boundary:v,rootBoundary:y,padding:b,flipVariations:A,allowedAutoPlacements:C}):i)}),[]),L=t.rects.reference,S=t.rects.popper,D=new Map,I=!0,P=k[0],N=0;N=0,z=H?"width":"height",W=ge(t,{placement:j,boundary:v,rootBoundary:y,altBoundary:w,padding:b}),B=H?F?s:o:F?n:i;L[z]>S[z]&&(B=oe(B));var q=oe(B),R=[];if(u&&R.push(W[M]<=0),g&&R.push(W[B]<=0,W[q]<=0),R.every((function(e){return e}))){P=j,I=!1;break}D.set(j,R)}if(I)for(var V=function(e){var t=k.find((function(t){var i=D.get(t);if(i)return i.slice(0,e).every((function(e){return e}))}));if(t)return P=t,"break"},K=A?3:1;K>0&&"break"!==V(K);K--);t.placement!==P&&(t.modifiersData[d]._skip=!0,t.placement=P,t.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function be(e,t,i){return void 0===i&&(i={x:0,y:0}),{top:e.top-t.height-i.y,right:e.right-t.width+i.x,bottom:e.bottom-t.height+i.y,left:e.left-t.width-i.x}}function ve(e){return[i,s,n,o].some((function(t){return e[t]>=0}))}const ye={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(e){var t=e.state,i=e.name,n=t.rects.reference,s=t.rects.popper,o=t.modifiersData.preventOverflow,r=ge(t,{elementContext:"reference"}),a=ge(t,{altBoundary:!0}),l=be(r,n),c=be(a,s,o),d=ve(l),h=ve(c);t.modifiersData[i]={referenceClippingOffsets:l,popperEscapeOffsets:c,isReferenceHidden:d,hasPopperEscaped:h},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":d,"data-popper-escaped":h})}},we={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(e){var t=e.state,n=e.options,r=e.name,a=n.offset,l=void 0===a?[0,0]:a,c=m.reduce((function(e,n){return e[n]=function(e,t,n){var r=$(e),a=[o,i].indexOf(r)>=0?-1:1,l="function"==typeof n?n(Object.assign({},t,{placement:e})):n,c=l[0],d=l[1];return c=c||0,d=(d||0)*a,[o,s].indexOf(r)>=0?{x:d,y:c}:{x:c,y:d}}(n,t.rects,l),e}),{}),d=c[t.placement],h=d.x,u=d.y;null!=t.modifiersData.popperOffsets&&(t.modifiersData.popperOffsets.x+=h,t.modifiersData.popperOffsets.y+=u),t.modifiersData[r]=c}},Ee={name:"popperOffsets",enabled:!0,phase:"read",fn:function(e){var t=e.state,i=e.name;t.modifiersData[i]=me({reference:t.rects.reference,element:t.rects.popper,strategy:"absolute",placement:t.placement})},data:{}},Ae={name:"preventOverflow",enabled:!0,phase:"main",fn:function(e){var t=e.state,r=e.options,a=e.name,c=r.mainAxis,d=void 0===c||c,h=r.altAxis,u=void 0!==h&&h,f=r.boundary,p=r.rootBoundary,m=r.altBoundary,g=r.padding,_=r.tether,b=void 0===_||_,v=r.tetherOffset,y=void 0===v?0:v,w=ge(t,{boundary:f,rootBoundary:p,padding:g,altBoundary:m}),E=$(t.placement),A=J(t.placement),C=!A,T=Q(E),x="x"===T?"y":"x",O=t.modifiersData.popperOffsets,k=t.rects.reference,L=t.rects.popper,S="function"==typeof y?y(Object.assign({},t.rects,{placement:t.placement})):y,D="number"==typeof S?{mainAxis:S,altAxis:S}:Object.assign({mainAxis:0,altAxis:0},S),N=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,j={x:0,y:0};if(O){if(d){var M,F="y"===T?i:o,z="y"===T?n:s,W="y"===T?"height":"width",B=O[T],q=B+w[F],R=B-w[z],V=b?-L[W]/2:0,Y=A===l?k[W]:L[W],U=A===l?-L[W]:-k[W],G=t.elements.arrow,Z=b&&G?H(G):{width:0,height:0},ee=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},te=ee[F],ie=ee[z],ne=X(0,k[W],Z[W]),se=C?k[W]/2-V-ne-te-D.mainAxis:Y-ne-te-D.mainAxis,oe=C?-k[W]/2+V+ne+ie+D.mainAxis:U+ne+ie+D.mainAxis,re=t.elements.arrow&&K(t.elements.arrow),ae=re?"y"===T?re.clientTop||0:re.clientLeft||0:0,le=null!=(M=null==N?void 0:N[T])?M:0,ce=B+oe-le,de=X(b?P(q,B+se-le-ae):q,B,b?I(R,ce):R);O[T]=de,j[T]=de-B}if(u){var he,ue="x"===T?i:o,fe="x"===T?n:s,pe=O[x],me="y"===x?"height":"width",_e=pe+w[ue],be=pe-w[fe],ve=-1!==[i,o].indexOf(E),ye=null!=(he=null==N?void 0:N[x])?he:0,we=ve?_e:pe-k[me]-L[me]-ye+D.altAxis,Ee=ve?pe+k[me]+L[me]-ye-D.altAxis:be,Ae=b&&ve?function(e,t,i){var n=X(e,t,i);return n>i?i:n}(we,pe,Ee):X(b?we:_e,pe,b?Ee:be);O[x]=Ae,j[x]=Ae-pe}t.modifiersData[a]=j}},requiresIfExists:["offset"]};function Ce(e,t,i){void 0===i&&(i=!1);var n,s,o=L(t),r=L(t)&&function(e){var t=e.getBoundingClientRect(),i=N(t.width)/e.offsetWidth||1,n=N(t.height)/e.offsetHeight||1;return 1!==i||1!==n}(t),a=q(t),l=F(e,r,i),c={scrollLeft:0,scrollTop:0},d={x:0,y:0};return(o||!o&&!i)&&(("body"!==x(t)||de(a))&&(c=(n=t)!==O(n)&&L(n)?{scrollLeft:(s=n).scrollLeft,scrollTop:s.scrollTop}:le(n)),L(t)?((d=F(t,!0)).x+=t.clientLeft,d.y+=t.clientTop):a&&(d.x=ce(a))),{x:l.left+c.scrollLeft-d.x,y:l.top+c.scrollTop-d.y,width:l.width,height:l.height}}function Te(e){var t=new Map,i=new Set,n=[];function s(e){i.add(e.name),[].concat(e.requires||[],e.requiresIfExists||[]).forEach((function(e){if(!i.has(e)){var n=t.get(e);n&&s(n)}})),n.push(e)}return e.forEach((function(e){t.set(e.name,e)})),e.forEach((function(e){i.has(e.name)||s(e)})),n}var xe={placement:"bottom",modifiers:[],strategy:"absolute"};function Oe(){for(var e=arguments.length,t=new Array(e),i=0;i$e.has(e)&&$e.get(e).get(t)||null,remove(e,t){if(!$e.has(e))return;const i=$e.get(e);i.delete(t),0===i.size&&$e.delete(e)}},Pe="transitionend",Ne=e=>(e&&window.CSS&&window.CSS.escape&&(e=e.replace(/#([^\s"#']+)/g,((e,t)=>`#${CSS.escape(t)}`))),e),je=e=>{e.dispatchEvent(new Event(Pe))},Me=e=>!(!e||"object"!=typeof e)&&(void 0!==e.jquery&&(e=e[0]),void 0!==e.nodeType),Fe=e=>Me(e)?e.jquery?e[0]:e:"string"==typeof e&&e.length>0?document.querySelector(Ne(e)):null,He=e=>{if(!Me(e)||0===e.getClientRects().length)return!1;const t="visible"===getComputedStyle(e).getPropertyValue("visibility"),i=e.closest("details:not([open])");if(!i)return t;if(i!==e){const t=e.closest("summary");if(t&&t.parentNode!==i)return!1;if(null===t)return!1}return t},ze=e=>!e||e.nodeType!==Node.ELEMENT_NODE||!!e.classList.contains("disabled")||(void 0!==e.disabled?e.disabled:e.hasAttribute("disabled")&&"false"!==e.getAttribute("disabled")),We=e=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof e.getRootNode){const t=e.getRootNode();return t instanceof ShadowRoot?t:null}return e instanceof ShadowRoot?e:e.parentNode?We(e.parentNode):null},Be=()=>{},qe=e=>{e.offsetHeight},Re=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,Ve=[],Ke=()=>"rtl"===document.documentElement.dir,Qe=e=>{var t;t=()=>{const t=Re();if(t){const i=e.NAME,n=t.fn[i];t.fn[i]=e.jQueryInterface,t.fn[i].Constructor=e,t.fn[i].noConflict=()=>(t.fn[i]=n,e.jQueryInterface)}},"loading"===document.readyState?(Ve.length||document.addEventListener("DOMContentLoaded",(()=>{for(const e of Ve)e()})),Ve.push(t)):t()},Xe=(e,t=[],i=e)=>"function"==typeof e?e(...t):i,Ye=(e,t,i=!0)=>{if(!i)return void Xe(e);const n=(e=>{if(!e)return 0;let{transitionDuration:t,transitionDelay:i}=window.getComputedStyle(e);const n=Number.parseFloat(t),s=Number.parseFloat(i);return n||s?(t=t.split(",")[0],i=i.split(",")[0],1e3*(Number.parseFloat(t)+Number.parseFloat(i))):0})(t)+5;let s=!1;const o=({target:i})=>{i===t&&(s=!0,t.removeEventListener(Pe,o),Xe(e))};t.addEventListener(Pe,o),setTimeout((()=>{s||je(t)}),n)},Ue=(e,t,i,n)=>{const s=e.length;let o=e.indexOf(t);return-1===o?!i&&n?e[s-1]:e[0]:(o+=i?1:-1,n&&(o=(o+s)%s),e[Math.max(0,Math.min(o,s-1))])},Ge=/[^.]*(?=\..*)\.|.*/,Je=/\..*/,Ze=/::\d+$/,et={};let tt=1;const it={mouseenter:"mouseover",mouseleave:"mouseout"},nt=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function st(e,t){return t&&`${t}::${tt++}`||e.uidEvent||tt++}function ot(e){const t=st(e);return e.uidEvent=t,et[t]=et[t]||{},et[t]}function rt(e,t,i=null){return Object.values(e).find((e=>e.callable===t&&e.delegationSelector===i))}function at(e,t,i){const n="string"==typeof t,s=n?i:t||i;let o=ht(e);return nt.has(o)||(o=e),[n,s,o]}function lt(e,t,i,n,s){if("string"!=typeof t||!e)return;let[o,r,a]=at(t,i,n);if(t in it){const e=e=>function(t){if(!t.relatedTarget||t.relatedTarget!==t.delegateTarget&&!t.delegateTarget.contains(t.relatedTarget))return e.call(this,t)};r=e(r)}const l=ot(e),c=l[a]||(l[a]={}),d=rt(c,r,o?i:null);if(d)return void(d.oneOff=d.oneOff&&s);const h=st(r,t.replace(Ge,"")),u=o?function(e,t,i){return function n(s){const o=e.querySelectorAll(t);for(let{target:r}=s;r&&r!==this;r=r.parentNode)for(const a of o)if(a===r)return ft(s,{delegateTarget:r}),n.oneOff&&ut.off(e,s.type,t,i),i.apply(r,[s])}}(e,i,r):function(e,t){return function i(n){return ft(n,{delegateTarget:e}),i.oneOff&&ut.off(e,n.type,t),t.apply(e,[n])}}(e,r);u.delegationSelector=o?i:null,u.callable=r,u.oneOff=s,u.uidEvent=h,c[h]=u,e.addEventListener(a,u,o)}function ct(e,t,i,n,s){const o=rt(t[i],n,s);o&&(e.removeEventListener(i,o,Boolean(s)),delete t[i][o.uidEvent])}function dt(e,t,i,n){const s=t[i]||{};for(const[o,r]of Object.entries(s))o.includes(n)&&ct(e,t,i,r.callable,r.delegationSelector)}function ht(e){return e=e.replace(Je,""),it[e]||e}const ut={on(e,t,i,n){lt(e,t,i,n,!1)},one(e,t,i,n){lt(e,t,i,n,!0)},off(e,t,i,n){if("string"!=typeof t||!e)return;const[s,o,r]=at(t,i,n),a=r!==t,l=ot(e),c=l[r]||{},d=t.startsWith(".");if(void 0===o){if(d)for(const i of Object.keys(l))dt(e,l,i,t.slice(1));for(const[i,n]of Object.entries(c)){const s=i.replace(Ze,"");a&&!t.includes(s)||ct(e,l,r,n.callable,n.delegationSelector)}}else{if(!Object.keys(c).length)return;ct(e,l,r,o,s?i:null)}},trigger(e,t,i){if("string"!=typeof t||!e)return null;const n=Re();let s=null,o=!0,r=!0,a=!1;t!==ht(t)&&n&&(s=n.Event(t,i),n(e).trigger(s),o=!s.isPropagationStopped(),r=!s.isImmediatePropagationStopped(),a=s.isDefaultPrevented());const l=ft(new Event(t,{bubbles:o,cancelable:!0}),i);return a&&l.preventDefault(),r&&e.dispatchEvent(l),l.defaultPrevented&&s&&s.preventDefault(),l}};function ft(e,t={}){for(const[i,n]of Object.entries(t))try{e[i]=n}catch(t){Object.defineProperty(e,i,{configurable:!0,get:()=>n})}return e}function pt(e){if("true"===e)return!0;if("false"===e)return!1;if(e===Number(e).toString())return Number(e);if(""===e||"null"===e)return null;if("string"!=typeof e)return e;try{return JSON.parse(decodeURIComponent(e))}catch(t){return e}}function mt(e){return e.replace(/[A-Z]/g,(e=>`-${e.toLowerCase()}`))}const gt={setDataAttribute(e,t,i){e.setAttribute(`data-bs-${mt(t)}`,i)},removeDataAttribute(e,t){e.removeAttribute(`data-bs-${mt(t)}`)},getDataAttributes(e){if(!e)return{};const t={},i=Object.keys(e.dataset).filter((e=>e.startsWith("bs")&&!e.startsWith("bsConfig")));for(const n of i){let i=n.replace(/^bs/,"");i=i.charAt(0).toLowerCase()+i.slice(1,i.length),t[i]=pt(e.dataset[n])}return t},getDataAttribute:(e,t)=>pt(e.getAttribute(`data-bs-${mt(t)}`))};class _t{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(e){return e=this._mergeConfigObj(e),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}_configAfterMerge(e){return e}_mergeConfigObj(e,t){const i=Me(t)?gt.getDataAttribute(t,"config"):{};return{...this.constructor.Default,..."object"==typeof i?i:{},...Me(t)?gt.getDataAttributes(t):{},..."object"==typeof e?e:{}}}_typeCheckConfig(e,t=this.constructor.DefaultType){for(const[n,s]of Object.entries(t)){const t=e[n],o=Me(t)?"element":null==(i=t)?`${i}`:Object.prototype.toString.call(i).match(/\s([a-z]+)/i)[1].toLowerCase();if(!new RegExp(s).test(o))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${n}" provided type "${o}" but expected type "${s}".`)}var i}}class bt extends _t{constructor(e,t){super(),(e=Fe(e))&&(this._element=e,this._config=this._getConfig(t),Ie.set(this._element,this.constructor.DATA_KEY,this))}dispose(){Ie.remove(this._element,this.constructor.DATA_KEY),ut.off(this._element,this.constructor.EVENT_KEY);for(const e of Object.getOwnPropertyNames(this))this[e]=null}_queueCallback(e,t,i=!0){Ye(e,t,i)}_getConfig(e){return e=this._mergeConfigObj(e,this._element),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}static getInstance(e){return Ie.get(Fe(e),this.DATA_KEY)}static getOrCreateInstance(e,t={}){return this.getInstance(e)||new this(e,"object"==typeof t?t:null)}static get VERSION(){return"5.3.3"}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(e){return`${e}${this.EVENT_KEY}`}}const vt=e=>{let t=e.getAttribute("data-bs-target");if(!t||"#"===t){let i=e.getAttribute("href");if(!i||!i.includes("#")&&!i.startsWith("."))return null;i.includes("#")&&!i.startsWith("#")&&(i=`#${i.split("#")[1]}`),t=i&&"#"!==i?i.trim():null}return t?t.split(",").map((e=>Ne(e))).join(","):null},yt={find:(e,t=document.documentElement)=>[].concat(...Element.prototype.querySelectorAll.call(t,e)),findOne:(e,t=document.documentElement)=>Element.prototype.querySelector.call(t,e),children:(e,t)=>[].concat(...e.children).filter((e=>e.matches(t))),parents(e,t){const i=[];let n=e.parentNode.closest(t);for(;n;)i.push(n),n=n.parentNode.closest(t);return i},prev(e,t){let i=e.previousElementSibling;for(;i;){if(i.matches(t))return[i];i=i.previousElementSibling}return[]},next(e,t){let i=e.nextElementSibling;for(;i;){if(i.matches(t))return[i];i=i.nextElementSibling}return[]},focusableChildren(e){const t=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map((e=>`${e}:not([tabindex^="-"])`)).join(",");return this.find(t,e).filter((e=>!ze(e)&&He(e)))},getSelectorFromElement(e){const t=vt(e);return t&&yt.findOne(t)?t:null},getElementFromSelector(e){const t=vt(e);return t?yt.findOne(t):null},getMultipleElementsFromSelector(e){const t=vt(e);return t?yt.find(t):[]}},wt=(e,t="hide")=>{const i=`click.dismiss${e.EVENT_KEY}`,n=e.NAME;ut.on(document,i,`[data-bs-dismiss="${n}"]`,(function(i){if(["A","AREA"].includes(this.tagName)&&i.preventDefault(),ze(this))return;const s=yt.getElementFromSelector(this)||this.closest(`.${n}`);e.getOrCreateInstance(s)[t]()}))},Et=".bs.alert",At=`close${Et}`,Ct=`closed${Et}`;class Tt extends bt{static get NAME(){return"alert"}close(){if(ut.trigger(this._element,At).defaultPrevented)return;this._element.classList.remove("show");const e=this._element.classList.contains("fade");this._queueCallback((()=>this._destroyElement()),this._element,e)}_destroyElement(){this._element.remove(),ut.trigger(this._element,Ct),this.dispose()}static jQueryInterface(e){return this.each((function(){const t=Tt.getOrCreateInstance(this);if("string"==typeof e){if(void 0===t[e]||e.startsWith("_")||"constructor"===e)throw new TypeError(`No method named "${e}"`);t[e](this)}}))}}wt(Tt,"close"),Qe(Tt);const xt='[data-bs-toggle="button"]';class Ot extends bt{static get NAME(){return"button"}toggle(){this._element.setAttribute("aria-pressed",this._element.classList.toggle("active"))}static jQueryInterface(e){return this.each((function(){const t=Ot.getOrCreateInstance(this);"toggle"===e&&t[e]()}))}}ut.on(document,"click.bs.button.data-api",xt,(e=>{e.preventDefault();const t=e.target.closest(xt);Ot.getOrCreateInstance(t).toggle()})),Qe(Ot);const kt=".bs.swipe",Lt=`touchstart${kt}`,St=`touchmove${kt}`,Dt=`touchend${kt}`,$t=`pointerdown${kt}`,It=`pointerup${kt}`,Pt={endCallback:null,leftCallback:null,rightCallback:null},Nt={endCallback:"(function|null)",leftCallback:"(function|null)",rightCallback:"(function|null)"};class jt extends _t{constructor(e,t){super(),this._element=e,e&&jt.isSupported()&&(this._config=this._getConfig(t),this._deltaX=0,this._supportPointerEvents=Boolean(window.PointerEvent),this._initEvents())}static get Default(){return Pt}static get DefaultType(){return Nt}static get NAME(){return"swipe"}dispose(){ut.off(this._element,kt)}_start(e){this._supportPointerEvents?this._eventIsPointerPenTouch(e)&&(this._deltaX=e.clientX):this._deltaX=e.touches[0].clientX}_end(e){this._eventIsPointerPenTouch(e)&&(this._deltaX=e.clientX-this._deltaX),this._handleSwipe(),Xe(this._config.endCallback)}_move(e){this._deltaX=e.touches&&e.touches.length>1?0:e.touches[0].clientX-this._deltaX}_handleSwipe(){const e=Math.abs(this._deltaX);if(e<=40)return;const t=e/this._deltaX;this._deltaX=0,t&&Xe(t>0?this._config.rightCallback:this._config.leftCallback)}_initEvents(){this._supportPointerEvents?(ut.on(this._element,$t,(e=>this._start(e))),ut.on(this._element,It,(e=>this._end(e))),this._element.classList.add("pointer-event")):(ut.on(this._element,Lt,(e=>this._start(e))),ut.on(this._element,St,(e=>this._move(e))),ut.on(this._element,Dt,(e=>this._end(e))))}_eventIsPointerPenTouch(e){return this._supportPointerEvents&&("pen"===e.pointerType||"touch"===e.pointerType)}static isSupported(){return"ontouchstart"in document.documentElement||navigator.maxTouchPoints>0}}const Mt=".bs.carousel",Ft=".data-api",Ht="ArrowLeft",zt="ArrowRight",Wt="next",Bt="prev",qt="left",Rt="right",Vt=`slide${Mt}`,Kt=`slid${Mt}`,Qt=`keydown${Mt}`,Xt=`mouseenter${Mt}`,Yt=`mouseleave${Mt}`,Ut=`dragstart${Mt}`,Gt=`load${Mt}${Ft}`,Jt=`click${Mt}${Ft}`,Zt="carousel",ei="active",ti=".active",ii=".carousel-item",ni=ti+ii,si={[Ht]:Rt,[zt]:qt},oi={interval:5e3,keyboard:!0,pause:"hover",ride:!1,touch:!0,wrap:!0},ri={interval:"(number|boolean)",keyboard:"boolean",pause:"(string|boolean)",ride:"(boolean|string)",touch:"boolean",wrap:"boolean"};class ai extends bt{constructor(e,t){super(e,t),this._interval=null,this._activeElement=null,this._isSliding=!1,this.touchTimeout=null,this._swipeHelper=null,this._indicatorsElement=yt.findOne(".carousel-indicators",this._element),this._addEventListeners(),this._config.ride===Zt&&this.cycle()}static get Default(){return oi}static get DefaultType(){return ri}static get NAME(){return"carousel"}next(){this._slide(Wt)}nextWhenVisible(){!document.hidden&&He(this._element)&&this.next()}prev(){this._slide(Bt)}pause(){this._isSliding&&je(this._element),this._clearInterval()}cycle(){this._clearInterval(),this._updateInterval(),this._interval=setInterval((()=>this.nextWhenVisible()),this._config.interval)}_maybeEnableCycle(){this._config.ride&&(this._isSliding?ut.one(this._element,Kt,(()=>this.cycle())):this.cycle())}to(e){const t=this._getItems();if(e>t.length-1||e<0)return;if(this._isSliding)return void ut.one(this._element,Kt,(()=>this.to(e)));const i=this._getItemIndex(this._getActive());if(i===e)return;const n=e>i?Wt:Bt;this._slide(n,t[e])}dispose(){this._swipeHelper&&this._swipeHelper.dispose(),super.dispose()}_configAfterMerge(e){return e.defaultInterval=e.interval,e}_addEventListeners(){this._config.keyboard&&ut.on(this._element,Qt,(e=>this._keydown(e))),"hover"===this._config.pause&&(ut.on(this._element,Xt,(()=>this.pause())),ut.on(this._element,Yt,(()=>this._maybeEnableCycle()))),this._config.touch&&jt.isSupported()&&this._addTouchEventListeners()}_addTouchEventListeners(){for(const e of yt.find(".carousel-item img",this._element))ut.on(e,Ut,(e=>e.preventDefault()));const e={leftCallback:()=>this._slide(this._directionToOrder(qt)),rightCallback:()=>this._slide(this._directionToOrder(Rt)),endCallback:()=>{"hover"===this._config.pause&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout((()=>this._maybeEnableCycle()),500+this._config.interval))}};this._swipeHelper=new jt(this._element,e)}_keydown(e){if(/input|textarea/i.test(e.target.tagName))return;const t=si[e.key];t&&(e.preventDefault(),this._slide(this._directionToOrder(t)))}_getItemIndex(e){return this._getItems().indexOf(e)}_setActiveIndicatorElement(e){if(!this._indicatorsElement)return;const t=yt.findOne(ti,this._indicatorsElement);t.classList.remove(ei),t.removeAttribute("aria-current");const i=yt.findOne(`[data-bs-slide-to="${e}"]`,this._indicatorsElement);i&&(i.classList.add(ei),i.setAttribute("aria-current","true"))}_updateInterval(){const e=this._activeElement||this._getActive();if(!e)return;const t=Number.parseInt(e.getAttribute("data-bs-interval"),10);this._config.interval=t||this._config.defaultInterval}_slide(e,t=null){if(this._isSliding)return;const i=this._getActive(),n=e===Wt,s=t||Ue(this._getItems(),i,n,this._config.wrap);if(s===i)return;const o=this._getItemIndex(s),r=t=>ut.trigger(this._element,t,{relatedTarget:s,direction:this._orderToDirection(e),from:this._getItemIndex(i),to:o});if(r(Vt).defaultPrevented)return;if(!i||!s)return;const a=Boolean(this._interval);this.pause(),this._isSliding=!0,this._setActiveIndicatorElement(o),this._activeElement=s;const l=n?"carousel-item-start":"carousel-item-end",c=n?"carousel-item-next":"carousel-item-prev";s.classList.add(c),qe(s),i.classList.add(l),s.classList.add(l),this._queueCallback((()=>{s.classList.remove(l,c),s.classList.add(ei),i.classList.remove(ei,c,l),this._isSliding=!1,r(Kt)}),i,this._isAnimated()),a&&this.cycle()}_isAnimated(){return this._element.classList.contains("slide")}_getActive(){return yt.findOne(ni,this._element)}_getItems(){return yt.find(ii,this._element)}_clearInterval(){this._interval&&(clearInterval(this._interval),this._interval=null)}_directionToOrder(e){return Ke()?e===qt?Bt:Wt:e===qt?Wt:Bt}_orderToDirection(e){return Ke()?e===Bt?qt:Rt:e===Bt?Rt:qt}static jQueryInterface(e){return this.each((function(){const t=ai.getOrCreateInstance(this,e);if("number"!=typeof e){if("string"==typeof e){if(void 0===t[e]||e.startsWith("_")||"constructor"===e)throw new TypeError(`No method named "${e}"`);t[e]()}}else t.to(e)}))}}ut.on(document,Jt,"[data-bs-slide], [data-bs-slide-to]",(function(e){const t=yt.getElementFromSelector(this);if(!t||!t.classList.contains(Zt))return;e.preventDefault();const i=ai.getOrCreateInstance(t),n=this.getAttribute("data-bs-slide-to");return n?(i.to(n),void i._maybeEnableCycle()):"next"===gt.getDataAttribute(this,"slide")?(i.next(),void i._maybeEnableCycle()):(i.prev(),void i._maybeEnableCycle())})),ut.on(window,Gt,(()=>{const e=yt.find('[data-bs-ride="carousel"]');for(const t of e)ai.getOrCreateInstance(t)})),Qe(ai);const li=".bs.collapse",ci=`show${li}`,di=`shown${li}`,hi=`hide${li}`,ui=`hidden${li}`,fi=`click${li}.data-api`,pi="show",mi="collapse",gi="collapsing",_i=`:scope .${mi} .${mi}`,bi='[data-bs-toggle="collapse"]',vi={parent:null,toggle:!0},yi={parent:"(null|element)",toggle:"boolean"};class wi extends bt{constructor(e,t){super(e,t),this._isTransitioning=!1,this._triggerArray=[];const i=yt.find(bi);for(const e of i){const t=yt.getSelectorFromElement(e),i=yt.find(t).filter((e=>e===this._element));null!==t&&i.length&&this._triggerArray.push(e)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return vi}static get DefaultType(){return yi}static get NAME(){return"collapse"}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let e=[];if(this._config.parent&&(e=this._getFirstLevelChildren(".collapse.show, .collapse.collapsing").filter((e=>e!==this._element)).map((e=>wi.getOrCreateInstance(e,{toggle:!1})))),e.length&&e[0]._isTransitioning)return;if(ut.trigger(this._element,ci).defaultPrevented)return;for(const t of e)t.hide();const t=this._getDimension();this._element.classList.remove(mi),this._element.classList.add(gi),this._element.style[t]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const i=`scroll${t[0].toUpperCase()+t.slice(1)}`;this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(gi),this._element.classList.add(mi,pi),this._element.style[t]="",ut.trigger(this._element,di)}),this._element,!0),this._element.style[t]=`${this._element[i]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(ut.trigger(this._element,hi).defaultPrevented)return;const e=this._getDimension();this._element.style[e]=`${this._element.getBoundingClientRect()[e]}px`,qe(this._element),this._element.classList.add(gi),this._element.classList.remove(mi,pi);for(const e of this._triggerArray){const t=yt.getElementFromSelector(e);t&&!this._isShown(t)&&this._addAriaAndCollapsedClass([e],!1)}this._isTransitioning=!0,this._element.style[e]="",this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(gi),this._element.classList.add(mi),ut.trigger(this._element,ui)}),this._element,!0)}_isShown(e=this._element){return e.classList.contains(pi)}_configAfterMerge(e){return e.toggle=Boolean(e.toggle),e.parent=Fe(e.parent),e}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const e=this._getFirstLevelChildren(bi);for(const t of e){const e=yt.getElementFromSelector(t);e&&this._addAriaAndCollapsedClass([t],this._isShown(e))}}_getFirstLevelChildren(e){const t=yt.find(_i,this._config.parent);return yt.find(e,this._config.parent).filter((e=>!t.includes(e)))}_addAriaAndCollapsedClass(e,t){if(e.length)for(const i of e)i.classList.toggle("collapsed",!t),i.setAttribute("aria-expanded",t)}static jQueryInterface(e){const t={};return"string"==typeof e&&/show|hide/.test(e)&&(t.toggle=!1),this.each((function(){const i=wi.getOrCreateInstance(this,t);if("string"==typeof e){if(void 0===i[e])throw new TypeError(`No method named "${e}"`);i[e]()}}))}}ut.on(document,fi,bi,(function(e){("A"===e.target.tagName||e.delegateTarget&&"A"===e.delegateTarget.tagName)&&e.preventDefault();for(const e of yt.getMultipleElementsFromSelector(this))wi.getOrCreateInstance(e,{toggle:!1}).toggle()})),Qe(wi);const Ei="dropdown",Ai=".bs.dropdown",Ci=".data-api",Ti="ArrowUp",xi="ArrowDown",Oi=`hide${Ai}`,ki=`hidden${Ai}`,Li=`show${Ai}`,Si=`shown${Ai}`,Di=`click${Ai}${Ci}`,$i=`keydown${Ai}${Ci}`,Ii=`keyup${Ai}${Ci}`,Pi="show",Ni='[data-bs-toggle="dropdown"]:not(.disabled):not(:disabled)',ji=`${Ni}.${Pi}`,Mi=".dropdown-menu",Fi=Ke()?"top-end":"top-start",Hi=Ke()?"top-start":"top-end",zi=Ke()?"bottom-end":"bottom-start",Wi=Ke()?"bottom-start":"bottom-end",Bi=Ke()?"left-start":"right-start",qi=Ke()?"right-start":"left-start",Ri={autoClose:!0,boundary:"clippingParents",display:"dynamic",offset:[0,2],popperConfig:null,reference:"toggle"},Vi={autoClose:"(boolean|string)",boundary:"(string|element)",display:"string",offset:"(array|string|function)",popperConfig:"(null|object|function)",reference:"(string|element|object)"};class Ki extends bt{constructor(e,t){super(e,t),this._popper=null,this._parent=this._element.parentNode,this._menu=yt.next(this._element,Mi)[0]||yt.prev(this._element,Mi)[0]||yt.findOne(Mi,this._parent),this._inNavbar=this._detectNavbar()}static get Default(){return Ri}static get DefaultType(){return Vi}static get NAME(){return Ei}toggle(){return this._isShown()?this.hide():this.show()}show(){if(ze(this._element)||this._isShown())return;const e={relatedTarget:this._element};if(!ut.trigger(this._element,Li,e).defaultPrevented){if(this._createPopper(),"ontouchstart"in document.documentElement&&!this._parent.closest(".navbar-nav"))for(const e of[].concat(...document.body.children))ut.on(e,"mouseover",Be);this._element.focus(),this._element.setAttribute("aria-expanded",!0),this._menu.classList.add(Pi),this._element.classList.add(Pi),ut.trigger(this._element,Si,e)}}hide(){if(ze(this._element)||!this._isShown())return;const e={relatedTarget:this._element};this._completeHide(e)}dispose(){this._popper&&this._popper.destroy(),super.dispose()}update(){this._inNavbar=this._detectNavbar(),this._popper&&this._popper.update()}_completeHide(e){if(!ut.trigger(this._element,Oi,e).defaultPrevented){if("ontouchstart"in document.documentElement)for(const e of[].concat(...document.body.children))ut.off(e,"mouseover",Be);this._popper&&this._popper.destroy(),this._menu.classList.remove(Pi),this._element.classList.remove(Pi),this._element.setAttribute("aria-expanded","false"),gt.removeDataAttribute(this._menu,"popper"),ut.trigger(this._element,ki,e)}}_getConfig(e){if("object"==typeof(e=super._getConfig(e)).reference&&!Me(e.reference)&&"function"!=typeof e.reference.getBoundingClientRect)throw new TypeError(`${Ei.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);return e}_createPopper(){if(void 0===t)throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org)");let e=this._element;"parent"===this._config.reference?e=this._parent:Me(this._config.reference)?e=Fe(this._config.reference):"object"==typeof this._config.reference&&(e=this._config.reference);const i=this._getPopperConfig();this._popper=Se(e,this._menu,i)}_isShown(){return this._menu.classList.contains(Pi)}_getPlacement(){const e=this._parent;if(e.classList.contains("dropend"))return Bi;if(e.classList.contains("dropstart"))return qi;if(e.classList.contains("dropup-center"))return"top";if(e.classList.contains("dropdown-center"))return"bottom";const t="end"===getComputedStyle(this._menu).getPropertyValue("--bs-position").trim();return e.classList.contains("dropup")?t?Hi:Fi:t?Wi:zi}_detectNavbar(){return null!==this._element.closest(".navbar")}_getOffset(){const{offset:e}=this._config;return"string"==typeof e?e.split(",").map((e=>Number.parseInt(e,10))):"function"==typeof e?t=>e(t,this._element):e}_getPopperConfig(){const e={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return(this._inNavbar||"static"===this._config.display)&&(gt.setDataAttribute(this._menu,"popper","static"),e.modifiers=[{name:"applyStyles",enabled:!1}]),{...e,...Xe(this._config.popperConfig,[e])}}_selectMenuItem({key:e,target:t}){const i=yt.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",this._menu).filter((e=>He(e)));i.length&&Ue(i,t,e===xi,!i.includes(t)).focus()}static jQueryInterface(e){return this.each((function(){const t=Ki.getOrCreateInstance(this,e);if("string"==typeof e){if(void 0===t[e])throw new TypeError(`No method named "${e}"`);t[e]()}}))}static clearMenus(e){if(2===e.button||"keyup"===e.type&&"Tab"!==e.key)return;const t=yt.find(ji);for(const i of t){const t=Ki.getInstance(i);if(!t||!1===t._config.autoClose)continue;const n=e.composedPath(),s=n.includes(t._menu);if(n.includes(t._element)||"inside"===t._config.autoClose&&!s||"outside"===t._config.autoClose&&s)continue;if(t._menu.contains(e.target)&&("keyup"===e.type&&"Tab"===e.key||/input|select|option|textarea|form/i.test(e.target.tagName)))continue;const o={relatedTarget:t._element};"click"===e.type&&(o.clickEvent=e),t._completeHide(o)}}static dataApiKeydownHandler(e){const t=/input|textarea/i.test(e.target.tagName),i="Escape"===e.key,n=[Ti,xi].includes(e.key);if(!n&&!i)return;if(t&&!i)return;e.preventDefault();const s=this.matches(Ni)?this:yt.prev(this,Ni)[0]||yt.next(this,Ni)[0]||yt.findOne(Ni,e.delegateTarget.parentNode),o=Ki.getOrCreateInstance(s);if(n)return e.stopPropagation(),o.show(),void o._selectMenuItem(e);o._isShown()&&(e.stopPropagation(),o.hide(),s.focus())}}ut.on(document,$i,Ni,Ki.dataApiKeydownHandler),ut.on(document,$i,Mi,Ki.dataApiKeydownHandler),ut.on(document,Di,Ki.clearMenus),ut.on(document,Ii,Ki.clearMenus),ut.on(document,Di,Ni,(function(e){e.preventDefault(),Ki.getOrCreateInstance(this).toggle()})),Qe(Ki);const Qi="backdrop",Xi="show",Yi=`mousedown.bs.${Qi}`,Ui={className:"modal-backdrop",clickCallback:null,isAnimated:!1,isVisible:!0,rootElement:"body"},Gi={className:"string",clickCallback:"(function|null)",isAnimated:"boolean",isVisible:"boolean",rootElement:"(element|string)"};class Ji extends _t{constructor(e){super(),this._config=this._getConfig(e),this._isAppended=!1,this._element=null}static get Default(){return Ui}static get DefaultType(){return Gi}static get NAME(){return Qi}show(e){if(!this._config.isVisible)return void Xe(e);this._append();const t=this._getElement();this._config.isAnimated&&qe(t),t.classList.add(Xi),this._emulateAnimation((()=>{Xe(e)}))}hide(e){this._config.isVisible?(this._getElement().classList.remove(Xi),this._emulateAnimation((()=>{this.dispose(),Xe(e)}))):Xe(e)}dispose(){this._isAppended&&(ut.off(this._element,Yi),this._element.remove(),this._isAppended=!1)}_getElement(){if(!this._element){const e=document.createElement("div");e.className=this._config.className,this._config.isAnimated&&e.classList.add("fade"),this._element=e}return this._element}_configAfterMerge(e){return e.rootElement=Fe(e.rootElement),e}_append(){if(this._isAppended)return;const e=this._getElement();this._config.rootElement.append(e),ut.on(e,Yi,(()=>{Xe(this._config.clickCallback)})),this._isAppended=!0}_emulateAnimation(e){Ye(e,this._getElement(),this._config.isAnimated)}}const Zi=".bs.focustrap",en=`focusin${Zi}`,tn=`keydown.tab${Zi}`,nn="backward",sn={autofocus:!0,trapElement:null},on={autofocus:"boolean",trapElement:"element"};class rn extends _t{constructor(e){super(),this._config=this._getConfig(e),this._isActive=!1,this._lastTabNavDirection=null}static get Default(){return sn}static get DefaultType(){return on}static get NAME(){return"focustrap"}activate(){this._isActive||(this._config.autofocus&&this._config.trapElement.focus(),ut.off(document,Zi),ut.on(document,en,(e=>this._handleFocusin(e))),ut.on(document,tn,(e=>this._handleKeydown(e))),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,ut.off(document,Zi))}_handleFocusin(e){const{trapElement:t}=this._config;if(e.target===document||e.target===t||t.contains(e.target))return;const i=yt.focusableChildren(t);0===i.length?t.focus():this._lastTabNavDirection===nn?i[i.length-1].focus():i[0].focus()}_handleKeydown(e){"Tab"===e.key&&(this._lastTabNavDirection=e.shiftKey?nn:"forward")}}const an=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",ln=".sticky-top",cn="padding-right",dn="margin-right";class hn{constructor(){this._element=document.body}getWidth(){const e=document.documentElement.clientWidth;return Math.abs(window.innerWidth-e)}hide(){const e=this.getWidth();this._disableOverFlow(),this._setElementAttributes(this._element,cn,(t=>t+e)),this._setElementAttributes(an,cn,(t=>t+e)),this._setElementAttributes(ln,dn,(t=>t-e))}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,cn),this._resetElementAttributes(an,cn),this._resetElementAttributes(ln,dn)}isOverflowing(){return this.getWidth()>0}_disableOverFlow(){this._saveInitialAttribute(this._element,"overflow"),this._element.style.overflow="hidden"}_setElementAttributes(e,t,i){const n=this.getWidth();this._applyManipulationCallback(e,(e=>{if(e!==this._element&&window.innerWidth>e.clientWidth+n)return;this._saveInitialAttribute(e,t);const s=window.getComputedStyle(e).getPropertyValue(t);e.style.setProperty(t,`${i(Number.parseFloat(s))}px`)}))}_saveInitialAttribute(e,t){const i=e.style.getPropertyValue(t);i&>.setDataAttribute(e,t,i)}_resetElementAttributes(e,t){this._applyManipulationCallback(e,(e=>{const i=gt.getDataAttribute(e,t);null!==i?(gt.removeDataAttribute(e,t),e.style.setProperty(t,i)):e.style.removeProperty(t)}))}_applyManipulationCallback(e,t){if(Me(e))t(e);else for(const i of yt.find(e,this._element))t(i)}}const un=".bs.modal",fn=`hide${un}`,pn=`hidePrevented${un}`,mn=`hidden${un}`,gn=`show${un}`,_n=`shown${un}`,bn=`resize${un}`,vn=`click.dismiss${un}`,yn=`mousedown.dismiss${un}`,wn=`keydown.dismiss${un}`,En=`click${un}.data-api`,An="modal-open",Cn="show",Tn="modal-static",xn={backdrop:!0,focus:!0,keyboard:!0},On={backdrop:"(boolean|string)",focus:"boolean",keyboard:"boolean"};class kn extends bt{constructor(e,t){super(e,t),this._dialog=yt.findOne(".modal-dialog",this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._isTransitioning=!1,this._scrollBar=new hn,this._addEventListeners()}static get Default(){return xn}static get DefaultType(){return On}static get NAME(){return"modal"}toggle(e){return this._isShown?this.hide():this.show(e)}show(e){this._isShown||this._isTransitioning||ut.trigger(this._element,gn,{relatedTarget:e}).defaultPrevented||(this._isShown=!0,this._isTransitioning=!0,this._scrollBar.hide(),document.body.classList.add(An),this._adjustDialog(),this._backdrop.show((()=>this._showElement(e))))}hide(){this._isShown&&!this._isTransitioning&&(ut.trigger(this._element,fn).defaultPrevented||(this._isShown=!1,this._isTransitioning=!0,this._focustrap.deactivate(),this._element.classList.remove(Cn),this._queueCallback((()=>this._hideModal()),this._element,this._isAnimated())))}dispose(){ut.off(window,un),ut.off(this._dialog,un),this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new Ji({isVisible:Boolean(this._config.backdrop),isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new rn({trapElement:this._element})}_showElement(e){document.body.contains(this._element)||document.body.append(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.scrollTop=0;const t=yt.findOne(".modal-body",this._dialog);t&&(t.scrollTop=0),qe(this._element),this._element.classList.add(Cn),this._queueCallback((()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,ut.trigger(this._element,_n,{relatedTarget:e})}),this._dialog,this._isAnimated())}_addEventListeners(){ut.on(this._element,wn,(e=>{"Escape"===e.key&&(this._config.keyboard?this.hide():this._triggerBackdropTransition())})),ut.on(window,bn,(()=>{this._isShown&&!this._isTransitioning&&this._adjustDialog()})),ut.on(this._element,yn,(e=>{ut.one(this._element,vn,(t=>{this._element===e.target&&this._element===t.target&&("static"!==this._config.backdrop?this._config.backdrop&&this.hide():this._triggerBackdropTransition())}))}))}_hideModal(){this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._backdrop.hide((()=>{document.body.classList.remove(An),this._resetAdjustments(),this._scrollBar.reset(),ut.trigger(this._element,mn)}))}_isAnimated(){return this._element.classList.contains("fade")}_triggerBackdropTransition(){if(ut.trigger(this._element,pn).defaultPrevented)return;const e=this._element.scrollHeight>document.documentElement.clientHeight,t=this._element.style.overflowY;"hidden"===t||this._element.classList.contains(Tn)||(e||(this._element.style.overflowY="hidden"),this._element.classList.add(Tn),this._queueCallback((()=>{this._element.classList.remove(Tn),this._queueCallback((()=>{this._element.style.overflowY=t}),this._dialog)}),this._dialog),this._element.focus())}_adjustDialog(){const e=this._element.scrollHeight>document.documentElement.clientHeight,t=this._scrollBar.getWidth(),i=t>0;if(i&&!e){const e=Ke()?"paddingLeft":"paddingRight";this._element.style[e]=`${t}px`}if(!i&&e){const e=Ke()?"paddingRight":"paddingLeft";this._element.style[e]=`${t}px`}}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(e,t){return this.each((function(){const i=kn.getOrCreateInstance(this,e);if("string"==typeof e){if(void 0===i[e])throw new TypeError(`No method named "${e}"`);i[e](t)}}))}}ut.on(document,En,'[data-bs-toggle="modal"]',(function(e){const t=yt.getElementFromSelector(this);["A","AREA"].includes(this.tagName)&&e.preventDefault(),ut.one(t,gn,(e=>{e.defaultPrevented||ut.one(t,mn,(()=>{He(this)&&this.focus()}))}));const i=yt.findOne(".modal.show");i&&kn.getInstance(i).hide(),kn.getOrCreateInstance(t).toggle(this)})),wt(kn),Qe(kn);const Ln=".bs.offcanvas",Sn=".data-api",Dn=`load${Ln}${Sn}`,$n="show",In="showing",Pn="hiding",Nn=".offcanvas.show",jn=`show${Ln}`,Mn=`shown${Ln}`,Fn=`hide${Ln}`,Hn=`hidePrevented${Ln}`,zn=`hidden${Ln}`,Wn=`resize${Ln}`,Bn=`click${Ln}${Sn}`,qn=`keydown.dismiss${Ln}`,Rn={backdrop:!0,keyboard:!0,scroll:!1},Vn={backdrop:"(boolean|string)",keyboard:"boolean",scroll:"boolean"};class Kn extends bt{constructor(e,t){super(e,t),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get Default(){return Rn}static get DefaultType(){return Vn}static get NAME(){return"offcanvas"}toggle(e){return this._isShown?this.hide():this.show(e)}show(e){this._isShown||ut.trigger(this._element,jn,{relatedTarget:e}).defaultPrevented||(this._isShown=!0,this._backdrop.show(),this._config.scroll||(new hn).hide(),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.classList.add(In),this._queueCallback((()=>{this._config.scroll&&!this._config.backdrop||this._focustrap.activate(),this._element.classList.add($n),this._element.classList.remove(In),ut.trigger(this._element,Mn,{relatedTarget:e})}),this._element,!0))}hide(){this._isShown&&(ut.trigger(this._element,Fn).defaultPrevented||(this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.add(Pn),this._backdrop.hide(),this._queueCallback((()=>{this._element.classList.remove($n,Pn),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._config.scroll||(new hn).reset(),ut.trigger(this._element,zn)}),this._element,!0)))}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_initializeBackDrop(){const e=Boolean(this._config.backdrop);return new Ji({className:"offcanvas-backdrop",isVisible:e,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:e?()=>{"static"!==this._config.backdrop?this.hide():ut.trigger(this._element,Hn)}:null})}_initializeFocusTrap(){return new rn({trapElement:this._element})}_addEventListeners(){ut.on(this._element,qn,(e=>{"Escape"===e.key&&(this._config.keyboard?this.hide():ut.trigger(this._element,Hn))}))}static jQueryInterface(e){return this.each((function(){const t=Kn.getOrCreateInstance(this,e);if("string"==typeof e){if(void 0===t[e]||e.startsWith("_")||"constructor"===e)throw new TypeError(`No method named "${e}"`);t[e](this)}}))}}ut.on(document,Bn,'[data-bs-toggle="offcanvas"]',(function(e){const t=yt.getElementFromSelector(this);if(["A","AREA"].includes(this.tagName)&&e.preventDefault(),ze(this))return;ut.one(t,zn,(()=>{He(this)&&this.focus()}));const i=yt.findOne(Nn);i&&i!==t&&Kn.getInstance(i).hide(),Kn.getOrCreateInstance(t).toggle(this)})),ut.on(window,Dn,(()=>{for(const e of yt.find(Nn))Kn.getOrCreateInstance(e).show()})),ut.on(window,Wn,(()=>{for(const e of yt.find("[aria-modal][class*=show][class*=offcanvas-]"))"fixed"!==getComputedStyle(e).position&&Kn.getOrCreateInstance(e).hide()})),wt(Kn),Qe(Kn);const Qn={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],dd:[],div:[],dl:[],dt:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},Xn=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),Yn=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i,Un=(e,t)=>{const i=e.nodeName.toLowerCase();return t.includes(i)?!Xn.has(i)||Boolean(Yn.test(e.nodeValue)):t.filter((e=>e instanceof RegExp)).some((e=>e.test(i)))},Gn={allowList:Qn,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:"
"},Jn={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},Zn={entry:"(string|element|function|null)",selector:"(string|element)"};class es extends _t{constructor(e){super(),this._config=this._getConfig(e)}static get Default(){return Gn}static get DefaultType(){return Jn}static get NAME(){return"TemplateFactory"}getContent(){return Object.values(this._config.content).map((e=>this._resolvePossibleFunction(e))).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(e){return this._checkContent(e),this._config.content={...this._config.content,...e},this}toHtml(){const e=document.createElement("div");e.innerHTML=this._maybeSanitize(this._config.template);for(const[t,i]of Object.entries(this._config.content))this._setContent(e,i,t);const t=e.children[0],i=this._resolvePossibleFunction(this._config.extraClass);return i&&t.classList.add(...i.split(" ")),t}_typeCheckConfig(e){super._typeCheckConfig(e),this._checkContent(e.content)}_checkContent(e){for(const[t,i]of Object.entries(e))super._typeCheckConfig({selector:t,entry:i},Zn)}_setContent(e,t,i){const n=yt.findOne(i,e);n&&((t=this._resolvePossibleFunction(t))?Me(t)?this._putElementInTemplate(Fe(t),n):this._config.html?n.innerHTML=this._maybeSanitize(t):n.textContent=t:n.remove())}_maybeSanitize(e){return this._config.sanitize?function(e,t,i){if(!e.length)return e;if(i&&"function"==typeof i)return i(e);const n=(new window.DOMParser).parseFromString(e,"text/html"),s=[].concat(...n.body.querySelectorAll("*"));for(const e of s){const i=e.nodeName.toLowerCase();if(!Object.keys(t).includes(i)){e.remove();continue}const n=[].concat(...e.attributes),s=[].concat(t["*"]||[],t[i]||[]);for(const t of n)Un(t,s)||e.removeAttribute(t.nodeName)}return n.body.innerHTML}(e,this._config.allowList,this._config.sanitizeFn):e}_resolvePossibleFunction(e){return Xe(e,[this])}_putElementInTemplate(e,t){if(this._config.html)return t.innerHTML="",void t.append(e);t.textContent=e.textContent}}const ts=new Set(["sanitize","allowList","sanitizeFn"]),is="fade",ns="show",ss=".tooltip-inner",os=".modal",rs="hide.bs.modal",as="hover",ls="focus",cs={AUTO:"auto",TOP:"top",RIGHT:Ke()?"left":"right",BOTTOM:"bottom",LEFT:Ke()?"right":"left"},ds={allowList:Qn,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,6],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'',title:"",trigger:"hover focus"},hs={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"};class us extends bt{constructor(e,i){if(void 0===t)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");super(e,i),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return ds}static get DefaultType(){return hs}static get NAME(){return"tooltip"}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){this._isEnabled&&(this._activeTrigger.click=!this._activeTrigger.click,this._isShown()?this._leave():this._enter())}dispose(){clearTimeout(this._timeout),ut.off(this._element.closest(os),rs,this._hideModalHandler),this._element.getAttribute("data-bs-original-title")&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")),this._disposePopper(),super.dispose()}show(){if("none"===this._element.style.display)throw new Error("Please use show on visible elements");if(!this._isWithContent()||!this._isEnabled)return;const e=ut.trigger(this._element,this.constructor.eventName("show")),t=(We(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(e.defaultPrevented||!t)return;this._disposePopper();const i=this._getTipElement();this._element.setAttribute("aria-describedby",i.getAttribute("id"));const{container:n}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(n.append(i),ut.trigger(this._element,this.constructor.eventName("inserted"))),this._popper=this._createPopper(i),i.classList.add(ns),"ontouchstart"in document.documentElement)for(const e of[].concat(...document.body.children))ut.on(e,"mouseover",Be);this._queueCallback((()=>{ut.trigger(this._element,this.constructor.eventName("shown")),!1===this._isHovered&&this._leave(),this._isHovered=!1}),this.tip,this._isAnimated())}hide(){if(this._isShown()&&!ut.trigger(this._element,this.constructor.eventName("hide")).defaultPrevented){if(this._getTipElement().classList.remove(ns),"ontouchstart"in document.documentElement)for(const e of[].concat(...document.body.children))ut.off(e,"mouseover",Be);this._activeTrigger.click=!1,this._activeTrigger[ls]=!1,this._activeTrigger[as]=!1,this._isHovered=null,this._queueCallback((()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),ut.trigger(this._element,this.constructor.eventName("hidden")))}),this.tip,this._isAnimated())}}update(){this._popper&&this._popper.update()}_isWithContent(){return Boolean(this._getTitle())}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(e){const t=this._getTemplateFactory(e).toHtml();if(!t)return null;t.classList.remove(is,ns),t.classList.add(`bs-${this.constructor.NAME}-auto`);const i=(e=>{do{e+=Math.floor(1e6*Math.random())}while(document.getElementById(e));return e})(this.constructor.NAME).toString();return t.setAttribute("id",i),this._isAnimated()&&t.classList.add(is),t}setContent(e){this._newContent=e,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(e){return this._templateFactory?this._templateFactory.changeContent(e):this._templateFactory=new es({...this._config,content:e,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{[ss]:this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")}_initializeOnDelegatedTarget(e){return this.constructor.getOrCreateInstance(e.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(is)}_isShown(){return this.tip&&this.tip.classList.contains(ns)}_createPopper(e){const t=Xe(this._config.placement,[this,e,this._element]),i=cs[t.toUpperCase()];return Se(this._element,e,this._getPopperConfig(i))}_getOffset(){const{offset:e}=this._config;return"string"==typeof e?e.split(",").map((e=>Number.parseInt(e,10))):"function"==typeof e?t=>e(t,this._element):e}_resolvePossibleFunction(e){return Xe(e,[this._element])}_getPopperConfig(e){const t={placement:e,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:e=>{this._getTipElement().setAttribute("data-popper-placement",e.state.placement)}}]};return{...t,...Xe(this._config.popperConfig,[t])}}_setListeners(){const e=this._config.trigger.split(" ");for(const t of e)if("click"===t)ut.on(this._element,this.constructor.eventName("click"),this._config.selector,(e=>{this._initializeOnDelegatedTarget(e).toggle()}));else if("manual"!==t){const e=t===as?this.constructor.eventName("mouseenter"):this.constructor.eventName("focusin"),i=t===as?this.constructor.eventName("mouseleave"):this.constructor.eventName("focusout");ut.on(this._element,e,this._config.selector,(e=>{const t=this._initializeOnDelegatedTarget(e);t._activeTrigger["focusin"===e.type?ls:as]=!0,t._enter()})),ut.on(this._element,i,this._config.selector,(e=>{const t=this._initializeOnDelegatedTarget(e);t._activeTrigger["focusout"===e.type?ls:as]=t._element.contains(e.relatedTarget),t._leave()}))}this._hideModalHandler=()=>{this._element&&this.hide()},ut.on(this._element.closest(os),rs,this._hideModalHandler)}_fixTitle(){const e=this._element.getAttribute("title");e&&(this._element.getAttribute("aria-label")||this._element.textContent.trim()||this._element.setAttribute("aria-label",e),this._element.setAttribute("data-bs-original-title",e),this._element.removeAttribute("title"))}_enter(){this._isShown()||this._isHovered?this._isHovered=!0:(this._isHovered=!0,this._setTimeout((()=>{this._isHovered&&this.show()}),this._config.delay.show))}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout((()=>{this._isHovered||this.hide()}),this._config.delay.hide))}_setTimeout(e,t){clearTimeout(this._timeout),this._timeout=setTimeout(e,t)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(e){const t=gt.getDataAttributes(this._element);for(const e of Object.keys(t))ts.has(e)&&delete t[e];return e={...t,..."object"==typeof e&&e?e:{}},e=this._mergeConfigObj(e),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}_configAfterMerge(e){return e.container=!1===e.container?document.body:Fe(e.container),"number"==typeof e.delay&&(e.delay={show:e.delay,hide:e.delay}),"number"==typeof e.title&&(e.title=e.title.toString()),"number"==typeof e.content&&(e.content=e.content.toString()),e}_getDelegateConfig(){const e={};for(const[t,i]of Object.entries(this._config))this.constructor.Default[t]!==i&&(e[t]=i);return e.selector=!1,e.trigger="manual",e}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(e){return this.each((function(){const t=us.getOrCreateInstance(this,e);if("string"==typeof e){if(void 0===t[e])throw new TypeError(`No method named "${e}"`);t[e]()}}))}}Qe(us);const fs=".popover-header",ps=".popover-body",ms={...us.Default,content:"",offset:[0,8],placement:"right",template:'',trigger:"click"},gs={...us.DefaultType,content:"(null|string|element|function)"};class _s extends us{static get Default(){return ms}static get DefaultType(){return gs}static get NAME(){return"popover"}_isWithContent(){return this._getTitle()||this._getContent()}_getContentForTemplate(){return{[fs]:this._getTitle(),[ps]:this._getContent()}}_getContent(){return this._resolvePossibleFunction(this._config.content)}static jQueryInterface(e){return this.each((function(){const t=_s.getOrCreateInstance(this,e);if("string"==typeof e){if(void 0===t[e])throw new TypeError(`No method named "${e}"`);t[e]()}}))}}Qe(_s);const bs=".bs.scrollspy",vs=`activate${bs}`,ys=`click${bs}`,ws=`load${bs}.data-api`,Es="active",As="[href]",Cs=".nav-link",Ts=`${Cs}, .nav-item > ${Cs}, .list-group-item`,xs={offset:null,rootMargin:"0px 0px -25%",smoothScroll:!1,target:null,threshold:[.1,.5,1]},Os={offset:"(number|null)",rootMargin:"string",smoothScroll:"boolean",target:"element",threshold:"array"};class ks extends bt{constructor(e,t){super(e,t),this._targetLinks=new Map,this._observableSections=new Map,this._rootElement="visible"===getComputedStyle(this._element).overflowY?null:this._element,this._activeTarget=null,this._observer=null,this._previousScrollData={visibleEntryTop:0,parentScrollTop:0},this.refresh()}static get Default(){return xs}static get DefaultType(){return Os}static get NAME(){return"scrollspy"}refresh(){this._initializeTargetsAndObservables(),this._maybeEnableSmoothScroll(),this._observer?this._observer.disconnect():this._observer=this._getNewObserver();for(const e of this._observableSections.values())this._observer.observe(e)}dispose(){this._observer.disconnect(),super.dispose()}_configAfterMerge(e){return e.target=Fe(e.target)||document.body,e.rootMargin=e.offset?`${e.offset}px 0px -30%`:e.rootMargin,"string"==typeof e.threshold&&(e.threshold=e.threshold.split(",").map((e=>Number.parseFloat(e)))),e}_maybeEnableSmoothScroll(){this._config.smoothScroll&&(ut.off(this._config.target,ys),ut.on(this._config.target,ys,As,(e=>{const t=this._observableSections.get(e.target.hash);if(t){e.preventDefault();const i=this._rootElement||window,n=t.offsetTop-this._element.offsetTop;if(i.scrollTo)return void i.scrollTo({top:n,behavior:"smooth"});i.scrollTop=n}})))}_getNewObserver(){const e={root:this._rootElement,threshold:this._config.threshold,rootMargin:this._config.rootMargin};return new IntersectionObserver((e=>this._observerCallback(e)),e)}_observerCallback(e){const t=e=>this._targetLinks.get(`#${e.target.id}`),i=e=>{this._previousScrollData.visibleEntryTop=e.target.offsetTop,this._process(t(e))},n=(this._rootElement||document.documentElement).scrollTop,s=n>=this._previousScrollData.parentScrollTop;this._previousScrollData.parentScrollTop=n;for(const o of e){if(!o.isIntersecting){this._activeTarget=null,this._clearActiveClass(t(o));continue}const e=o.target.offsetTop>=this._previousScrollData.visibleEntryTop;if(s&&e){if(i(o),!n)return}else s||e||i(o)}}_initializeTargetsAndObservables(){this._targetLinks=new Map,this._observableSections=new Map;const e=yt.find(As,this._config.target);for(const t of e){if(!t.hash||ze(t))continue;const e=yt.findOne(decodeURI(t.hash),this._element);He(e)&&(this._targetLinks.set(decodeURI(t.hash),t),this._observableSections.set(t.hash,e))}}_process(e){this._activeTarget!==e&&(this._clearActiveClass(this._config.target),this._activeTarget=e,e.classList.add(Es),this._activateParents(e),ut.trigger(this._element,vs,{relatedTarget:e}))}_activateParents(e){if(e.classList.contains("dropdown-item"))yt.findOne(".dropdown-toggle",e.closest(".dropdown")).classList.add(Es);else for(const t of yt.parents(e,".nav, .list-group"))for(const e of yt.prev(t,Ts))e.classList.add(Es)}_clearActiveClass(e){e.classList.remove(Es);const t=yt.find(`${As}.${Es}`,e);for(const e of t)e.classList.remove(Es)}static jQueryInterface(e){return this.each((function(){const t=ks.getOrCreateInstance(this,e);if("string"==typeof e){if(void 0===t[e]||e.startsWith("_")||"constructor"===e)throw new TypeError(`No method named "${e}"`);t[e]()}}))}}ut.on(window,ws,(()=>{for(const e of yt.find('[data-bs-spy="scroll"]'))ks.getOrCreateInstance(e)})),Qe(ks);const Ls=".bs.tab",Ss=`hide${Ls}`,Ds=`hidden${Ls}`,$s=`show${Ls}`,Is=`shown${Ls}`,Ps=`click${Ls}`,Ns=`keydown${Ls}`,js=`load${Ls}`,Ms="ArrowLeft",Fs="ArrowRight",Hs="ArrowUp",zs="ArrowDown",Ws="Home",Bs="End",qs="active",Rs="fade",Vs="show",Ks=".dropdown-toggle",Qs=`:not(${Ks})`,Xs='[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',Ys=`.nav-link${Qs}, .list-group-item${Qs}, [role="tab"]${Qs}, ${Xs}`,Us=`.${qs}[data-bs-toggle="tab"], .${qs}[data-bs-toggle="pill"], .${qs}[data-bs-toggle="list"]`;class Gs extends bt{constructor(e){super(e),this._parent=this._element.closest('.list-group, .nav, [role="tablist"]'),this._parent&&(this._setInitialAttributes(this._parent,this._getChildren()),ut.on(this._element,Ns,(e=>this._keydown(e))))}static get NAME(){return"tab"}show(){const e=this._element;if(this._elemIsActive(e))return;const t=this._getActiveElem(),i=t?ut.trigger(t,Ss,{relatedTarget:e}):null;ut.trigger(e,$s,{relatedTarget:t}).defaultPrevented||i&&i.defaultPrevented||(this._deactivate(t,e),this._activate(e,t))}_activate(e,t){e&&(e.classList.add(qs),this._activate(yt.getElementFromSelector(e)),this._queueCallback((()=>{"tab"===e.getAttribute("role")?(e.removeAttribute("tabindex"),e.setAttribute("aria-selected",!0),this._toggleDropDown(e,!0),ut.trigger(e,Is,{relatedTarget:t})):e.classList.add(Vs)}),e,e.classList.contains(Rs)))}_deactivate(e,t){e&&(e.classList.remove(qs),e.blur(),this._deactivate(yt.getElementFromSelector(e)),this._queueCallback((()=>{"tab"===e.getAttribute("role")?(e.setAttribute("aria-selected",!1),e.setAttribute("tabindex","-1"),this._toggleDropDown(e,!1),ut.trigger(e,Ds,{relatedTarget:t})):e.classList.remove(Vs)}),e,e.classList.contains(Rs)))}_keydown(e){if(![Ms,Fs,Hs,zs,Ws,Bs].includes(e.key))return;e.stopPropagation(),e.preventDefault();const t=this._getChildren().filter((e=>!ze(e)));let i;if([Ws,Bs].includes(e.key))i=t[e.key===Ws?0:t.length-1];else{const n=[Fs,zs].includes(e.key);i=Ue(t,e.target,n,!0)}i&&(i.focus({preventScroll:!0}),Gs.getOrCreateInstance(i).show())}_getChildren(){return yt.find(Ys,this._parent)}_getActiveElem(){return this._getChildren().find((e=>this._elemIsActive(e)))||null}_setInitialAttributes(e,t){this._setAttributeIfNotExists(e,"role","tablist");for(const e of t)this._setInitialAttributesOnChild(e)}_setInitialAttributesOnChild(e){e=this._getInnerElement(e);const t=this._elemIsActive(e),i=this._getOuterElement(e);e.setAttribute("aria-selected",t),i!==e&&this._setAttributeIfNotExists(i,"role","presentation"),t||e.setAttribute("tabindex","-1"),this._setAttributeIfNotExists(e,"role","tab"),this._setInitialAttributesOnTargetPanel(e)}_setInitialAttributesOnTargetPanel(e){const t=yt.getElementFromSelector(e);t&&(this._setAttributeIfNotExists(t,"role","tabpanel"),e.id&&this._setAttributeIfNotExists(t,"aria-labelledby",`${e.id}`))}_toggleDropDown(e,t){const i=this._getOuterElement(e);if(!i.classList.contains("dropdown"))return;const n=(e,n)=>{const s=yt.findOne(e,i);s&&s.classList.toggle(n,t)};n(Ks,qs),n(".dropdown-menu",Vs),i.setAttribute("aria-expanded",t)}_setAttributeIfNotExists(e,t,i){e.hasAttribute(t)||e.setAttribute(t,i)}_elemIsActive(e){return e.classList.contains(qs)}_getInnerElement(e){return e.matches(Ys)?e:yt.findOne(Ys,e)}_getOuterElement(e){return e.closest(".nav-item, .list-group-item")||e}static jQueryInterface(e){return this.each((function(){const t=Gs.getOrCreateInstance(this);if("string"==typeof e){if(void 0===t[e]||e.startsWith("_")||"constructor"===e)throw new TypeError(`No method named "${e}"`);t[e]()}}))}}ut.on(document,Ps,Xs,(function(e){["A","AREA"].includes(this.tagName)&&e.preventDefault(),ze(this)||Gs.getOrCreateInstance(this).show()})),ut.on(window,js,(()=>{for(const e of yt.find(Us))Gs.getOrCreateInstance(e)})),Qe(Gs);const Js=".bs.toast",Zs=`mouseover${Js}`,eo=`mouseout${Js}`,to=`focusin${Js}`,io=`focusout${Js}`,no=`hide${Js}`,so=`hidden${Js}`,oo=`show${Js}`,ro=`shown${Js}`,ao="hide",lo="show",co="showing",ho={animation:"boolean",autohide:"boolean",delay:"number"},uo={animation:!0,autohide:!0,delay:5e3};class fo extends bt{constructor(e,t){super(e,t),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get Default(){return uo}static get DefaultType(){return ho}static get NAME(){return"toast"}show(){ut.trigger(this._element,oo).defaultPrevented||(this._clearTimeout(),this._config.animation&&this._element.classList.add("fade"),this._element.classList.remove(ao),qe(this._element),this._element.classList.add(lo,co),this._queueCallback((()=>{this._element.classList.remove(co),ut.trigger(this._element,ro),this._maybeScheduleHide()}),this._element,this._config.animation))}hide(){this.isShown()&&(ut.trigger(this._element,no).defaultPrevented||(this._element.classList.add(co),this._queueCallback((()=>{this._element.classList.add(ao),this._element.classList.remove(co,lo),ut.trigger(this._element,so)}),this._element,this._config.animation)))}dispose(){this._clearTimeout(),this.isShown()&&this._element.classList.remove(lo),super.dispose()}isShown(){return this._element.classList.contains(lo)}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout((()=>{this.hide()}),this._config.delay)))}_onInteraction(e,t){switch(e.type){case"mouseover":case"mouseout":this._hasMouseInteraction=t;break;case"focusin":case"focusout":this._hasKeyboardInteraction=t}if(t)return void this._clearTimeout();const i=e.relatedTarget;this._element===i||this._element.contains(i)||this._maybeScheduleHide()}_setListeners(){ut.on(this._element,Zs,(e=>this._onInteraction(e,!0))),ut.on(this._element,eo,(e=>this._onInteraction(e,!1))),ut.on(this._element,to,(e=>this._onInteraction(e,!0))),ut.on(this._element,io,(e=>this._onInteraction(e,!1)))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(e){return this.each((function(){const t=fo.getOrCreateInstance(this,e);if("string"==typeof e){if(void 0===t[e])throw new TypeError(`No method named "${e}"`);t[e](this)}}))}}function po(e){return new Promise(((t,i)=>{e.oncomplete=e.onsuccess=()=>t(e.result),e.onabort=e.onerror=()=>i(e.error)}))}let mo;function go(){return mo||(mo=function(e,t){const i=indexedDB.open("keyval-store");i.onupgradeneeded=()=>i.result.createObjectStore(t);const n=po(i);return(e,i)=>n.then((n=>i(n.transaction(t,e).objectStore(t))))}(0,"keyval")),mo}function _o(e,t,i=go()){return i("readwrite",(i=>(i.put(t,e),po(i.transaction))))}function bo(e){if("png"==e)return!0;try{return ClipboardItem.supports("svg"==e?"image/svg+xml":"image/jpeg")}catch(e){return console.error(e," - error = no support for PNG"),!1}}wt(fo),Qe(fo);var vo=function(e,t,i,n){return new(i||(i=Promise))((function(s,o){function r(e){try{l(n.next(e))}catch(e){o(e)}}function a(e){try{l(n.throw(e))}catch(e){o(e)}}function l(e){var t;e.done?s(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,a)}l((n=n.apply(e,t||[])).next())}))};const yo={size:{width:document.querySelector("#size-width"),height:document.querySelector("#size-height")},main:document.querySelector("#card-body")};window.onload=()=>vo(void 0,void 0,void 0,(function*(){var e;let t=null!==(e=yield function(e,t=go()){return t("readonly",(t=>po(t.get(e))))}("size"))&&void 0!==e?e:2e3;yo.size.width.value=t,yo.size.height.value=t,console.log(t),yo.size.width.onkeyup=yo.size.width.onpaste=yo.size.width.onchange=()=>vo(void 0,void 0,void 0,(function*(){yield _o("size",yo.size.width.value),yo.size.height.value=yo.size.width.value}));let i=["png"];try{bo("svg")&&i.push("svg"),bo("jpeg")&&i.push("jpeg")}catch(e){throw console.log("ClipboardItem.supports() error, reporting PNG-only support"),e}let n=document.createElement("div");n.classList.add("input-group","us-types");let s=document.createElement("button");s.classList.add("btn","btn-outline-secondary","dropdown-toggle"),s.setAttribute("data-bs-toggle","dropdown"),s.setAttribute("aria-expanded","false"),s.innerText="Copy SVGs as",n.appendChild(s);let o=document.createElement("ul");if(o.classList.add("dropdown-menu"),i.includes("svg")){let e=document.createElement("li"),t=document.createElement("a");t.classList.add("dropdown-item"),t.id="svg-copy-svg",t.href="#",t.onclick=()=>vo(void 0,void 0,void 0,(function*(){yield _o("copy-svg","svg")})),t.innerText="SVG",e.appendChild(t),o.appendChild(e)}let r=document.createElement("li"),a=document.createElement("a");a.classList.add("dropdown-item"),a.id="svg-copy-text",a.href="#",a.onclick=()=>vo(void 0,void 0,void 0,(function*(){yield _o("copy-svg","text")})),a.innerText="Text",r.appendChild(a),o.appendChild(r);let l=document.createElement("li"),c=document.createElement("a");c.classList.add("dropdown-item"),c.id="svg-copy-png",c.href="#",c.onclick=()=>vo(void 0,void 0,void 0,(function*(){yield _o("copy-svg","png")})),c.innerText="PNG",l.appendChild(c),o.appendChild(l),n.appendChild(o),new Ki(s);let d=document.createElement("button");d.classList.add("btn","btn-outline-secondary","dropdown-toggle"),d.setAttribute("data-bs-toggle","dropdown"),d.setAttribute("aria-expanded","false"),d.innerText="Copy JPGs as",n.appendChild(d);let h=document.createElement("ul");if(h.classList.add("dropdown-menu"),i.includes("jpeg")){let e=document.createElement("li"),t=document.createElement("a");t.classList.add("dropdown-item"),t.id="jpg-copy-jpg",t.href="#",t.onclick=()=>vo(void 0,void 0,void 0,(function*(){yield _o("copy-jpg","jpg")})),t.innerText="JPG",e.appendChild(t),h.appendChild(e)}let u=document.createElement("li"),f=document.createElement("a");f.classList.add("dropdown-item"),f.id="jpg-copy-png",f.href="#",f.onclick=()=>vo(void 0,void 0,void 0,(function*(){yield _o("copy-jpg","png")})),f.innerText="PNG",u.appendChild(f),h.appendChild(u);let p=document.createElement("li"),m=document.createElement("a");m.classList.add("dropdown-item"),m.id="jpg-copy-text",m.href="#",m.onclick=()=>vo(void 0,void 0,void 0,(function*(){yield _o("copy-jpg","text")})),m.innerText="Text (not recommended!)",p.appendChild(m),h.appendChild(p),n.appendChild(h),new Ki(d),yo.main.appendChild(document.createElement("br")),yo.main.appendChild(n),yo.size.width.disabled=!1}))})(); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,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dEMsWUFBWTFuQyxTQUFTd3ZCLGNBQWMsT0FFNUN3WCxHQUFJcnRDLEtBQUsrdEMsWUFBWUgsR0FFckJQLEdBQUk5eUIsS0FBSzFWLE1BQU15WCxVQUFXLENBQzlCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL21pa2V5bGFiLXFyL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZW51bXMuanMiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXROb2RlTmFtZS5qcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFdpbmRvdy5qcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2luc3RhbmNlT2YuanMiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9hcHBseVN0eWxlcy5qcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvbWF0aC5qcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvdXNlckFnZW50LmpzIiwid2VicGFjazovL21pa2V5bGFiLXFyLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvaXNMYXlvdXRWaWV3cG9ydC5qcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldExheW91dFJlY3QuanMiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9jb250YWlucy5qcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldENvbXB1dGVkU3R5bGUuanMiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pc1RhYmxlRWxlbWVudC5qcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldERvY3VtZW50RWxlbWVudC5qcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFBhcmVudE5vZGUuanMiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanMiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvd2l0aGluLmpzIiwid2VicGFjazovL21pa2V5bGFiLXFyLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9tZXJnZVBhZGRpbmdPYmplY3QuanMiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldEZyZXNoU2lkZU9iamVjdC5qcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZXhwYW5kVG9IYXNoTWFwLmpzIiwid2VicGFjazovL21pa2V5bGFiLXFyLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvYXJyb3cuanMiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldFZhcmlhdGlvbi5qcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL2NvbXB1dGVTdHlsZXMuanMiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9ldmVudExpc3RlbmVycy5qcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0T3Bwb3NpdGVQbGFjZW1lbnQuanMiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50LmpzIiwid2VicGFjazovL21pa2V5bGFiLXFyLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0V2luZG93U2Nyb2xsLmpzIiwid2VicGFjazovL21pa2V5bGFiLXFyLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0V2luZG93U2Nyb2xsQmFyWC5qcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2lzU2Nyb2xsUGFyZW50LmpzIiwid2VicGFjazovL21pa2V5bGFiLXFyLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0U2Nyb2xsUGFyZW50LmpzIiwid2VicGFjazovL21pa2V5bGFiLXFyLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvbGlzdFNjcm9sbFBhcmVudHMuanMiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL3JlY3RUb0NsaWVudFJlY3QuanMiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRDbGlwcGluZ1JlY3QuanMiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRWaWV3cG9ydFJlY3QuanMiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXREb2N1bWVudFJlY3QuanMiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2NvbXB1dGVPZmZzZXRzLmpzIiwid2VicGFjazovL21pa2V5bGFiLXFyLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9kZXRlY3RPdmVyZmxvdy5qcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL2ZsaXAuanMiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2NvbXB1dGVBdXRvUGxhY2VtZW50LmpzIiwid2VicGFjazovL21pa2V5bGFiLXFyLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvaGlkZS5qcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL29mZnNldC5qcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL3BvcHBlck9mZnNldHMuanMiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9wcmV2ZW50T3ZlcmZsb3cuanMiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldEFsdEF4aXMuanMiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRDb21wb3NpdGVSZWN0LmpzIiwid2VicGFjazovL21pa2V5bGFiLXFyLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Tm9kZVNjcm9sbC5qcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldEhUTUxFbGVtZW50U2Nyb2xsLmpzIiwid2VicGFjazovL21pa2V5bGFiLXFyLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9vcmRlck1vZGlmaWVycy5qcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvY3JlYXRlUG9wcGVyLmpzIiwid2VicGFjazovL21pa2V5bGFiLXFyLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9kZWJvdW5jZS5qcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvbWVyZ2VCeU5hbWUuanMiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3BvcHBlci5qcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvcG9wcGVyLWxpdGUuanMiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL2Rpc3QvanMvYm9vdHN0cmFwLmVzbS5qcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9pZGIta2V5dmFsL2Rpc3QvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9zcmMvbGliL2NoZWNrLXN1cHBvcnQudHMiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9zcmMvc2V0dGluZ3MudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhlIHJlcXVpcmUgc2NvcGVcbnZhciBfX3dlYnBhY2tfcmVxdWlyZV9fID0ge307XG5cbiIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCJleHBvcnQgdmFyIHRvcCA9ICd0b3AnO1xuZXhwb3J0IHZhciBib3R0b20gPSAnYm90dG9tJztcbmV4cG9ydCB2YXIgcmlnaHQgPSAncmlnaHQnO1xuZXhwb3J0IHZhciBsZWZ0ID0gJ2xlZnQnO1xuZXhwb3J0IHZhciBhdXRvID0gJ2F1dG8nO1xuZXhwb3J0IHZhciBiYXNlUGxhY2VtZW50cyA9IFt0b3AsIGJvdHRvbSwgcmlnaHQsIGxlZnRdO1xuZXhwb3J0IHZhciBzdGFydCA9ICdzdGFydCc7XG5leHBvcnQgdmFyIGVuZCA9ICdlbmQnO1xuZXhwb3J0IHZhciBjbGlwcGluZ1BhcmVudHMgPSAnY2xpcHBpbmdQYXJlbnRzJztcbmV4cG9ydCB2YXIgdmlld3BvcnQgPSAndmlld3BvcnQnO1xuZXhwb3J0IHZhciBwb3BwZXIgPSAncG9wcGVyJztcbmV4cG9ydCB2YXIgcmVmZXJlbmNlID0gJ3JlZmVyZW5jZSc7XG5leHBvcnQgdmFyIHZhcmlhdGlvblBsYWNlbWVudHMgPSAvKiNfX1BVUkVfXyovYmFzZVBsYWNlbWVudHMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICByZXR1cm4gYWNjLmNvbmNhdChbcGxhY2VtZW50ICsgXCItXCIgKyBzdGFydCwgcGxhY2VtZW50ICsgXCItXCIgKyBlbmRdKTtcbn0sIFtdKTtcbmV4cG9ydCB2YXIgcGxhY2VtZW50cyA9IC8qI19fUFVSRV9fKi9bXS5jb25jYXQoYmFzZVBsYWNlbWVudHMsIFthdXRvXSkucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICByZXR1cm4gYWNjLmNvbmNhdChbcGxhY2VtZW50LCBwbGFjZW1lbnQgKyBcIi1cIiArIHN0YXJ0LCBwbGFjZW1lbnQgKyBcIi1cIiArIGVuZF0pO1xufSwgW10pOyAvLyBtb2RpZmllcnMgdGhhdCBuZWVkIHRvIHJlYWQgdGhlIERPTVxuXG5leHBvcnQgdmFyIGJlZm9yZVJlYWQgPSAnYmVmb3JlUmVhZCc7XG5leHBvcnQgdmFyIHJlYWQgPSAncmVhZCc7XG5leHBvcnQgdmFyIGFmdGVyUmVhZCA9ICdhZnRlclJlYWQnOyAvLyBwdXJlLWxvZ2ljIG1vZGlmaWVyc1xuXG5leHBvcnQgdmFyIGJlZm9yZU1haW4gPSAnYmVmb3JlTWFpbic7XG5leHBvcnQgdmFyIG1haW4gPSAnbWFpbic7XG5leHBvcnQgdmFyIGFmdGVyTWFpbiA9ICdhZnRlck1haW4nOyAvLyBtb2RpZmllciB3aXRoIHRoZSBwdXJwb3NlIHRvIHdyaXRlIHRvIHRoZSBET00gKG9yIHdyaXRlIGludG8gYSBmcmFtZXdvcmsgc3RhdGUpXG5cbmV4cG9ydCB2YXIgYmVmb3JlV3JpdGUgPSAnYmVmb3JlV3JpdGUnO1xuZXhwb3J0IHZhciB3cml0ZSA9ICd3cml0ZSc7XG5leHBvcnQgdmFyIGFmdGVyV3JpdGUgPSAnYWZ0ZXJXcml0ZSc7XG5leHBvcnQgdmFyIG1vZGlmaWVyUGhhc2VzID0gW2JlZm9yZVJlYWQsIHJlYWQsIGFmdGVyUmVhZCwgYmVmb3JlTWFpbiwgbWFpbiwgYWZ0ZXJNYWluLCBiZWZvcmVXcml0ZSwgd3JpdGUsIGFmdGVyV3JpdGVdOyIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE5vZGVOYW1lKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQgPyAoZWxlbWVudC5ub2RlTmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKSA6IG51bGw7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0V2luZG93KG5vZGUpIHtcbiAgaWYgKG5vZGUgPT0gbnVsbCkge1xuICAgIHJldHVybiB3aW5kb3c7XG4gIH1cblxuICBpZiAobm9kZS50b1N0cmluZygpICE9PSAnW29iamVjdCBXaW5kb3ddJykge1xuICAgIHZhciBvd25lckRvY3VtZW50ID0gbm9kZS5vd25lckRvY3VtZW50O1xuICAgIHJldHVybiBvd25lckRvY3VtZW50ID8gb3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyB8fCB3aW5kb3cgOiB3aW5kb3c7XG4gIH1cblxuICByZXR1cm4gbm9kZTtcbn0iLCJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuXG5mdW5jdGlvbiBpc0VsZW1lbnQobm9kZSkge1xuICB2YXIgT3duRWxlbWVudCA9IGdldFdpbmRvdyhub2RlKS5FbGVtZW50O1xuICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIE93bkVsZW1lbnQgfHwgbm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIGlzSFRNTEVsZW1lbnQobm9kZSkge1xuICB2YXIgT3duRWxlbWVudCA9IGdldFdpbmRvdyhub2RlKS5IVE1MRWxlbWVudDtcbiAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBPd25FbGVtZW50IHx8IG5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudDtcbn1cblxuZnVuY3Rpb24gaXNTaGFkb3dSb290KG5vZGUpIHtcbiAgLy8gSUUgMTEgaGFzIG5vIFNoYWRvd1Jvb3RcbiAgaWYgKHR5cGVvZiBTaGFkb3dSb290ID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBPd25FbGVtZW50ID0gZ2V0V2luZG93KG5vZGUpLlNoYWRvd1Jvb3Q7XG4gIHJldHVybiBub2RlIGluc3RhbmNlb2YgT3duRWxlbWVudCB8fCBub2RlIGluc3RhbmNlb2YgU2hhZG93Um9vdDtcbn1cblxuZXhwb3J0IHsgaXNFbGVtZW50LCBpc0hUTUxFbGVtZW50LCBpc1NoYWRvd1Jvb3QgfTsiLCJpbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4uL2RvbS11dGlscy9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IHsgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuLi9kb20tdXRpbHMvaW5zdGFuY2VPZi5qc1wiOyAvLyBUaGlzIG1vZGlmaWVyIHRha2VzIHRoZSBzdHlsZXMgcHJlcGFyZWQgYnkgdGhlIGBjb21wdXRlU3R5bGVzYCBtb2RpZmllclxuLy8gYW5kIGFwcGxpZXMgdGhlbSB0byB0aGUgSFRNTEVsZW1lbnRzIHN1Y2ggYXMgcG9wcGVyIGFuZCBhcnJvd1xuXG5mdW5jdGlvbiBhcHBseVN0eWxlcyhfcmVmKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGU7XG4gIE9iamVjdC5rZXlzKHN0YXRlLmVsZW1lbnRzKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdmFyIHN0eWxlID0gc3RhdGUuc3R5bGVzW25hbWVdIHx8IHt9O1xuICAgIHZhciBhdHRyaWJ1dGVzID0gc3RhdGUuYXR0cmlidXRlc1tuYW1lXSB8fCB7fTtcbiAgICB2YXIgZWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzW25hbWVdOyAvLyBhcnJvdyBpcyBvcHRpb25hbCArIHZpcnR1YWwgZWxlbWVudHNcblxuICAgIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSB8fCAhZ2V0Tm9kZU5hbWUoZWxlbWVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIEZsb3cgZG9lc24ndCBzdXBwb3J0IHRvIGV4dGVuZCB0aGlzIHByb3BlcnR5LCBidXQgaXQncyB0aGUgbW9zdFxuICAgIC8vIGVmZmVjdGl2ZSB3YXkgdG8gYXBwbHkgc3R5bGVzIHRvIGFuIEhUTUxFbGVtZW50XG4gICAgLy8gJEZsb3dGaXhNZVtjYW5ub3Qtd3JpdGVdXG5cblxuICAgIE9iamVjdC5hc3NpZ24oZWxlbWVudC5zdHlsZSwgc3R5bGUpO1xuICAgIE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIHZhciB2YWx1ZSA9IGF0dHJpYnV0ZXNbbmFtZV07XG5cbiAgICAgIGlmICh2YWx1ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSA9PT0gdHJ1ZSA/ICcnIDogdmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZWZmZWN0KF9yZWYyKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYyLnN0YXRlO1xuICB2YXIgaW5pdGlhbFN0eWxlcyA9IHtcbiAgICBwb3BwZXI6IHtcbiAgICAgIHBvc2l0aW9uOiBzdGF0ZS5vcHRpb25zLnN0cmF0ZWd5LFxuICAgICAgbGVmdDogJzAnLFxuICAgICAgdG9wOiAnMCcsXG4gICAgICBtYXJnaW46ICcwJ1xuICAgIH0sXG4gICAgYXJyb3c6IHtcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnXG4gICAgfSxcbiAgICByZWZlcmVuY2U6IHt9XG4gIH07XG4gIE9iamVjdC5hc3NpZ24oc3RhdGUuZWxlbWVudHMucG9wcGVyLnN0eWxlLCBpbml0aWFsU3R5bGVzLnBvcHBlcik7XG4gIHN0YXRlLnN0eWxlcyA9IGluaXRpYWxTdHlsZXM7XG5cbiAgaWYgKHN0YXRlLmVsZW1lbnRzLmFycm93KSB7XG4gICAgT2JqZWN0LmFzc2lnbihzdGF0ZS5lbGVtZW50cy5hcnJvdy5zdHlsZSwgaW5pdGlhbFN0eWxlcy5hcnJvdyk7XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIE9iamVjdC5rZXlzKHN0YXRlLmVsZW1lbnRzKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICB2YXIgZWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzW25hbWVdO1xuICAgICAgdmFyIGF0dHJpYnV0ZXMgPSBzdGF0ZS5hdHRyaWJ1dGVzW25hbWVdIHx8IHt9O1xuICAgICAgdmFyIHN0eWxlUHJvcGVydGllcyA9IE9iamVjdC5rZXlzKHN0YXRlLnN0eWxlcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSA/IHN0YXRlLnN0eWxlc1tuYW1lXSA6IGluaXRpYWxTdHlsZXNbbmFtZV0pOyAvLyBTZXQgYWxsIHZhbHVlcyB0byBhbiBlbXB0eSBzdHJpbmcgdG8gdW5zZXQgdGhlbVxuXG4gICAgICB2YXIgc3R5bGUgPSBzdHlsZVByb3BlcnRpZXMucmVkdWNlKGZ1bmN0aW9uIChzdHlsZSwgcHJvcGVydHkpIHtcbiAgICAgICAgc3R5bGVbcHJvcGVydHldID0gJyc7XG4gICAgICAgIHJldHVybiBzdHlsZTtcbiAgICAgIH0sIHt9KTsgLy8gYXJyb3cgaXMgb3B0aW9uYWwgKyB2aXJ0dWFsIGVsZW1lbnRzXG5cbiAgICAgIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSB8fCAhZ2V0Tm9kZU5hbWUoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBPYmplY3QuYXNzaWduKGVsZW1lbnQuc3R5bGUsIHN0eWxlKTtcbiAgICAgIE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpLmZvckVhY2goZnVuY3Rpb24gKGF0dHJpYnV0ZSkge1xuICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShhdHRyaWJ1dGUpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdhcHBseVN0eWxlcycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnd3JpdGUnLFxuICBmbjogYXBwbHlTdHlsZXMsXG4gIGVmZmVjdDogZWZmZWN0LFxuICByZXF1aXJlczogWydjb21wdXRlU3R5bGVzJ11cbn07IiwiaW1wb3J0IHsgYXV0byB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5zcGxpdCgnLScpWzBdO1xufSIsImV4cG9ydCB2YXIgbWF4ID0gTWF0aC5tYXg7XG5leHBvcnQgdmFyIG1pbiA9IE1hdGgubWluO1xuZXhwb3J0IHZhciByb3VuZCA9IE1hdGgucm91bmQ7IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VUFTdHJpbmcoKSB7XG4gIHZhciB1YURhdGEgPSBuYXZpZ2F0b3IudXNlckFnZW50RGF0YTtcblxuICBpZiAodWFEYXRhICE9IG51bGwgJiYgdWFEYXRhLmJyYW5kcyAmJiBBcnJheS5pc0FycmF5KHVhRGF0YS5icmFuZHMpKSB7XG4gICAgcmV0dXJuIHVhRGF0YS5icmFuZHMubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICByZXR1cm4gaXRlbS5icmFuZCArIFwiL1wiICsgaXRlbS52ZXJzaW9uO1xuICAgIH0pLmpvaW4oJyAnKTtcbiAgfVxuXG4gIHJldHVybiBuYXZpZ2F0b3IudXNlckFnZW50O1xufSIsImltcG9ydCBnZXRVQVN0cmluZyBmcm9tIFwiLi4vdXRpbHMvdXNlckFnZW50LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0xheW91dFZpZXdwb3J0KCkge1xuICByZXR1cm4gIS9eKCg/IWNocm9tZXxhbmRyb2lkKS4pKnNhZmFyaS9pLnRlc3QoZ2V0VUFTdHJpbmcoKSk7XG59IiwiaW1wb3J0IHsgaXNFbGVtZW50LCBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IHsgcm91bmQgfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCBpc0xheW91dFZpZXdwb3J0IGZyb20gXCIuL2lzTGF5b3V0Vmlld3BvcnQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCBpbmNsdWRlU2NhbGUsIGlzRml4ZWRTdHJhdGVneSkge1xuICBpZiAoaW5jbHVkZVNjYWxlID09PSB2b2lkIDApIHtcbiAgICBpbmNsdWRlU2NhbGUgPSBmYWxzZTtcbiAgfVxuXG4gIGlmIChpc0ZpeGVkU3RyYXRlZ3kgPT09IHZvaWQgMCkge1xuICAgIGlzRml4ZWRTdHJhdGVneSA9IGZhbHNlO1xuICB9XG5cbiAgdmFyIGNsaWVudFJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICB2YXIgc2NhbGVYID0gMTtcbiAgdmFyIHNjYWxlWSA9IDE7XG5cbiAgaWYgKGluY2x1ZGVTY2FsZSAmJiBpc0hUTUxFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgc2NhbGVYID0gZWxlbWVudC5vZmZzZXRXaWR0aCA+IDAgPyByb3VuZChjbGllbnRSZWN0LndpZHRoKSAvIGVsZW1lbnQub2Zmc2V0V2lkdGggfHwgMSA6IDE7XG4gICAgc2NhbGVZID0gZWxlbWVudC5vZmZzZXRIZWlnaHQgPiAwID8gcm91bmQoY2xpZW50UmVjdC5oZWlnaHQpIC8gZWxlbWVudC5vZmZzZXRIZWlnaHQgfHwgMSA6IDE7XG4gIH1cblxuICB2YXIgX3JlZiA9IGlzRWxlbWVudChlbGVtZW50KSA/IGdldFdpbmRvdyhlbGVtZW50KSA6IHdpbmRvdyxcbiAgICAgIHZpc3VhbFZpZXdwb3J0ID0gX3JlZi52aXN1YWxWaWV3cG9ydDtcblxuICB2YXIgYWRkVmlzdWFsT2Zmc2V0cyA9ICFpc0xheW91dFZpZXdwb3J0KCkgJiYgaXNGaXhlZFN0cmF0ZWd5O1xuICB2YXIgeCA9IChjbGllbnRSZWN0LmxlZnQgKyAoYWRkVmlzdWFsT2Zmc2V0cyAmJiB2aXN1YWxWaWV3cG9ydCA/IHZpc3VhbFZpZXdwb3J0Lm9mZnNldExlZnQgOiAwKSkgLyBzY2FsZVg7XG4gIHZhciB5ID0gKGNsaWVudFJlY3QudG9wICsgKGFkZFZpc3VhbE9mZnNldHMgJiYgdmlzdWFsVmlld3BvcnQgPyB2aXN1YWxWaWV3cG9ydC5vZmZzZXRUb3AgOiAwKSkgLyBzY2FsZVk7XG4gIHZhciB3aWR0aCA9IGNsaWVudFJlY3Qud2lkdGggLyBzY2FsZVg7XG4gIHZhciBoZWlnaHQgPSBjbGllbnRSZWN0LmhlaWdodCAvIHNjYWxlWTtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgdG9wOiB5LFxuICAgIHJpZ2h0OiB4ICsgd2lkdGgsXG4gICAgYm90dG9tOiB5ICsgaGVpZ2h0LFxuICAgIGxlZnQ6IHgsXG4gICAgeDogeCxcbiAgICB5OiB5XG4gIH07XG59IiwiaW1wb3J0IGdldEJvdW5kaW5nQ2xpZW50UmVjdCBmcm9tIFwiLi9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanNcIjsgLy8gUmV0dXJucyB0aGUgbGF5b3V0IHJlY3Qgb2YgYW4gZWxlbWVudCByZWxhdGl2ZSB0byBpdHMgb2Zmc2V0UGFyZW50LiBMYXlvdXRcbi8vIG1lYW5zIGl0IGRvZXNuJ3QgdGFrZSBpbnRvIGFjY291bnQgdHJhbnNmb3Jtcy5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0TGF5b3V0UmVjdChlbGVtZW50KSB7XG4gIHZhciBjbGllbnRSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQpOyAvLyBVc2UgdGhlIGNsaWVudFJlY3Qgc2l6ZXMgaWYgaXQncyBub3QgYmVlbiB0cmFuc2Zvcm1lZC5cbiAgLy8gRml4ZXMgaHR0cHM6Ly9naXRodWIuY29tL3BvcHBlcmpzL3BvcHBlci1jb3JlL2lzc3Vlcy8xMjIzXG5cbiAgdmFyIHdpZHRoID0gZWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgdmFyIGhlaWdodCA9IGVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuXG4gIGlmIChNYXRoLmFicyhjbGllbnRSZWN0LndpZHRoIC0gd2lkdGgpIDw9IDEpIHtcbiAgICB3aWR0aCA9IGNsaWVudFJlY3Qud2lkdGg7XG4gIH1cblxuICBpZiAoTWF0aC5hYnMoY2xpZW50UmVjdC5oZWlnaHQgLSBoZWlnaHQpIDw9IDEpIHtcbiAgICBoZWlnaHQgPSBjbGllbnRSZWN0LmhlaWdodDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgeDogZWxlbWVudC5vZmZzZXRMZWZ0LFxuICAgIHk6IGVsZW1lbnQub2Zmc2V0VG9wLFxuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodFxuICB9O1xufSIsImltcG9ydCB7IGlzU2hhZG93Um9vdCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbnRhaW5zKHBhcmVudCwgY2hpbGQpIHtcbiAgdmFyIHJvb3ROb2RlID0gY2hpbGQuZ2V0Um9vdE5vZGUgJiYgY2hpbGQuZ2V0Um9vdE5vZGUoKTsgLy8gRmlyc3QsIGF0dGVtcHQgd2l0aCBmYXN0ZXIgbmF0aXZlIG1ldGhvZFxuXG4gIGlmIChwYXJlbnQuY29udGFpbnMoY2hpbGQpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gLy8gdGhlbiBmYWxsYmFjayB0byBjdXN0b20gaW1wbGVtZW50YXRpb24gd2l0aCBTaGFkb3cgRE9NIHN1cHBvcnRcbiAgZWxzZSBpZiAocm9vdE5vZGUgJiYgaXNTaGFkb3dSb290KHJvb3ROb2RlKSkge1xuICAgICAgdmFyIG5leHQgPSBjaGlsZDtcblxuICAgICAgZG8ge1xuICAgICAgICBpZiAobmV4dCAmJiBwYXJlbnQuaXNTYW1lTm9kZShuZXh0KSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXTogbmVlZCBhIGJldHRlciB3YXkgdG8gaGFuZGxlIHRoaXMuLi5cblxuXG4gICAgICAgIG5leHQgPSBuZXh0LnBhcmVudE5vZGUgfHwgbmV4dC5ob3N0O1xuICAgICAgfSB3aGlsZSAobmV4dCk7XG4gICAgfSAvLyBHaXZlIHVwLCB0aGUgcmVzdWx0IGlzIGZhbHNlXG5cblxuICByZXR1cm4gZmFsc2U7XG59IiwiaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkge1xuICByZXR1cm4gZ2V0V2luZG93KGVsZW1lbnQpLmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG59IiwiaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc1RhYmxlRWxlbWVudChlbGVtZW50KSB7XG4gIHJldHVybiBbJ3RhYmxlJywgJ3RkJywgJ3RoJ10uaW5kZXhPZihnZXROb2RlTmFtZShlbGVtZW50KSkgPj0gMDtcbn0iLCJpbXBvcnQgeyBpc0VsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkge1xuICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dOiBhc3N1bWUgYm9keSBpcyBhbHdheXMgYXZhaWxhYmxlXG4gIHJldHVybiAoKGlzRWxlbWVudChlbGVtZW50KSA/IGVsZW1lbnQub3duZXJEb2N1bWVudCA6IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICBlbGVtZW50LmRvY3VtZW50KSB8fCB3aW5kb3cuZG9jdW1lbnQpLmRvY3VtZW50RWxlbWVudDtcbn0iLCJpbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4vZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgeyBpc1NoYWRvd1Jvb3QgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRQYXJlbnROb2RlKGVsZW1lbnQpIHtcbiAgaWYgKGdldE5vZGVOYW1lKGVsZW1lbnQpID09PSAnaHRtbCcpIHtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuXG4gIHJldHVybiAoLy8gdGhpcyBpcyBhIHF1aWNrZXIgKGJ1dCBsZXNzIHR5cGUgc2FmZSkgd2F5IHRvIHNhdmUgcXVpdGUgc29tZSBieXRlcyBmcm9tIHRoZSBidW5kbGVcbiAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dXG4gICAgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gICAgZWxlbWVudC5hc3NpZ25lZFNsb3QgfHwgLy8gc3RlcCBpbnRvIHRoZSBzaGFkb3cgRE9NIG9mIHRoZSBwYXJlbnQgb2YgYSBzbG90dGVkIG5vZGVcbiAgICBlbGVtZW50LnBhcmVudE5vZGUgfHwgKCAvLyBET00gRWxlbWVudCBkZXRlY3RlZFxuICAgIGlzU2hhZG93Um9vdChlbGVtZW50KSA/IGVsZW1lbnQuaG9zdCA6IG51bGwpIHx8IC8vIFNoYWRvd1Jvb3QgZGV0ZWN0ZWRcbiAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYWxsXTogSFRNTEVsZW1lbnQgaXMgYSBOb2RlXG4gICAgZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpIC8vIGZhbGxiYWNrXG5cbiAgKTtcbn0iLCJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgZ2V0Q29tcHV0ZWRTdHlsZSBmcm9tIFwiLi9nZXRDb21wdXRlZFN0eWxlLmpzXCI7XG5pbXBvcnQgeyBpc0hUTUxFbGVtZW50LCBpc1NoYWRvd1Jvb3QgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgaXNUYWJsZUVsZW1lbnQgZnJvbSBcIi4vaXNUYWJsZUVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRQYXJlbnROb2RlIGZyb20gXCIuL2dldFBhcmVudE5vZGUuanNcIjtcbmltcG9ydCBnZXRVQVN0cmluZyBmcm9tIFwiLi4vdXRpbHMvdXNlckFnZW50LmpzXCI7XG5cbmZ1bmN0aW9uIGdldFRydWVPZmZzZXRQYXJlbnQoZWxlbWVudCkge1xuICBpZiAoIWlzSFRNTEVsZW1lbnQoZWxlbWVudCkgfHwgLy8gaHR0cHM6Ly9naXRodWIuY29tL3BvcHBlcmpzL3BvcHBlci1jb3JlL2lzc3Vlcy84MzdcbiAgZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5wb3NpdGlvbiA9PT0gJ2ZpeGVkJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQub2Zmc2V0UGFyZW50O1xufSAvLyBgLm9mZnNldFBhcmVudGAgcmVwb3J0cyBgbnVsbGAgZm9yIGZpeGVkIGVsZW1lbnRzLCB3aGlsZSBhYnNvbHV0ZSBlbGVtZW50c1xuLy8gcmV0dXJuIHRoZSBjb250YWluaW5nIGJsb2NrXG5cblxuZnVuY3Rpb24gZ2V0Q29udGFpbmluZ0Jsb2NrKGVsZW1lbnQpIHtcbiAgdmFyIGlzRmlyZWZveCA9IC9maXJlZm94L2kudGVzdChnZXRVQVN0cmluZygpKTtcbiAgdmFyIGlzSUUgPSAvVHJpZGVudC9pLnRlc3QoZ2V0VUFTdHJpbmcoKSk7XG5cbiAgaWYgKGlzSUUgJiYgaXNIVE1MRWxlbWVudChlbGVtZW50KSkge1xuICAgIC8vIEluIElFIDksIDEwIGFuZCAxMSBmaXhlZCBlbGVtZW50cyBjb250YWluaW5nIGJsb2NrIGlzIGFsd2F5cyBlc3RhYmxpc2hlZCBieSB0aGUgdmlld3BvcnRcbiAgICB2YXIgZWxlbWVudENzcyA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG5cbiAgICBpZiAoZWxlbWVudENzcy5wb3NpdGlvbiA9PT0gJ2ZpeGVkJykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgdmFyIGN1cnJlbnROb2RlID0gZ2V0UGFyZW50Tm9kZShlbGVtZW50KTtcblxuICBpZiAoaXNTaGFkb3dSb290KGN1cnJlbnROb2RlKSkge1xuICAgIGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUuaG9zdDtcbiAgfVxuXG4gIHdoaWxlIChpc0hUTUxFbGVtZW50KGN1cnJlbnROb2RlKSAmJiBbJ2h0bWwnLCAnYm9keSddLmluZGV4T2YoZ2V0Tm9kZU5hbWUoY3VycmVudE5vZGUpKSA8IDApIHtcbiAgICB2YXIgY3NzID0gZ2V0Q29tcHV0ZWRTdHlsZShjdXJyZW50Tm9kZSk7IC8vIFRoaXMgaXMgbm9uLWV4aGF1c3RpdmUgYnV0IGNvdmVycyB0aGUgbW9zdCBjb21tb24gQ1NTIHByb3BlcnRpZXMgdGhhdFxuICAgIC8vIGNyZWF0ZSBhIGNvbnRhaW5pbmcgYmxvY2suXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL0NvbnRhaW5pbmdfYmxvY2sjaWRlbnRpZnlpbmdfdGhlX2NvbnRhaW5pbmdfYmxvY2tcblxuICAgIGlmIChjc3MudHJhbnNmb3JtICE9PSAnbm9uZScgfHwgY3NzLnBlcnNwZWN0aXZlICE9PSAnbm9uZScgfHwgY3NzLmNvbnRhaW4gPT09ICdwYWludCcgfHwgWyd0cmFuc2Zvcm0nLCAncGVyc3BlY3RpdmUnXS5pbmRleE9mKGNzcy53aWxsQ2hhbmdlKSAhPT0gLTEgfHwgaXNGaXJlZm94ICYmIGNzcy53aWxsQ2hhbmdlID09PSAnZmlsdGVyJyB8fCBpc0ZpcmVmb3ggJiYgY3NzLmZpbHRlciAmJiBjc3MuZmlsdGVyICE9PSAnbm9uZScpIHtcbiAgICAgIHJldHVybiBjdXJyZW50Tm9kZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5wYXJlbnROb2RlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufSAvLyBHZXRzIHRoZSBjbG9zZXN0IGFuY2VzdG9yIHBvc2l0aW9uZWQgZWxlbWVudC4gSGFuZGxlcyBzb21lIGVkZ2UgY2FzZXMsXG4vLyBzdWNoIGFzIHRhYmxlIGFuY2VzdG9ycyBhbmQgY3Jvc3MgYnJvd3NlciBidWdzLlxuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE9mZnNldFBhcmVudChlbGVtZW50KSB7XG4gIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coZWxlbWVudCk7XG4gIHZhciBvZmZzZXRQYXJlbnQgPSBnZXRUcnVlT2Zmc2V0UGFyZW50KGVsZW1lbnQpO1xuXG4gIHdoaWxlIChvZmZzZXRQYXJlbnQgJiYgaXNUYWJsZUVsZW1lbnQob2Zmc2V0UGFyZW50KSAmJiBnZXRDb21wdXRlZFN0eWxlKG9mZnNldFBhcmVudCkucG9zaXRpb24gPT09ICdzdGF0aWMnKSB7XG4gICAgb2Zmc2V0UGFyZW50ID0gZ2V0VHJ1ZU9mZnNldFBhcmVudChvZmZzZXRQYXJlbnQpO1xuICB9XG5cbiAgaWYgKG9mZnNldFBhcmVudCAmJiAoZ2V0Tm9kZU5hbWUob2Zmc2V0UGFyZW50KSA9PT0gJ2h0bWwnIHx8IGdldE5vZGVOYW1lKG9mZnNldFBhcmVudCkgPT09ICdib2R5JyAmJiBnZXRDb21wdXRlZFN0eWxlKG9mZnNldFBhcmVudCkucG9zaXRpb24gPT09ICdzdGF0aWMnKSkge1xuICAgIHJldHVybiB3aW5kb3c7XG4gIH1cblxuICByZXR1cm4gb2Zmc2V0UGFyZW50IHx8IGdldENvbnRhaW5pbmdCbG9jayhlbGVtZW50KSB8fCB3aW5kb3c7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gWyd0b3AnLCAnYm90dG9tJ10uaW5kZXhPZihwbGFjZW1lbnQpID49IDAgPyAneCcgOiAneSc7XG59IiwiaW1wb3J0IHsgbWF4IGFzIG1hdGhNYXgsIG1pbiBhcyBtYXRoTWluIH0gZnJvbSBcIi4vbWF0aC5qc1wiO1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhpbihtaW4sIHZhbHVlLCBtYXgpIHtcbiAgcmV0dXJuIG1hdGhNYXgobWluLCBtYXRoTWluKHZhbHVlLCBtYXgpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB3aXRoaW5NYXhDbGFtcChtaW4sIHZhbHVlLCBtYXgpIHtcbiAgdmFyIHYgPSB3aXRoaW4obWluLCB2YWx1ZSwgbWF4KTtcbiAgcmV0dXJuIHYgPiBtYXggPyBtYXggOiB2O1xufSIsImltcG9ydCBnZXRGcmVzaFNpZGVPYmplY3QgZnJvbSBcIi4vZ2V0RnJlc2hTaWRlT2JqZWN0LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtZXJnZVBhZGRpbmdPYmplY3QocGFkZGluZ09iamVjdCkge1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgZ2V0RnJlc2hTaWRlT2JqZWN0KCksIHBhZGRpbmdPYmplY3QpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEZyZXNoU2lkZU9iamVjdCgpIHtcbiAgcmV0dXJuIHtcbiAgICB0b3A6IDAsXG4gICAgcmlnaHQ6IDAsXG4gICAgYm90dG9tOiAwLFxuICAgIGxlZnQ6IDBcbiAgfTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBleHBhbmRUb0hhc2hNYXAodmFsdWUsIGtleXMpIHtcbiAgcmV0dXJuIGtleXMucmVkdWNlKGZ1bmN0aW9uIChoYXNoTWFwLCBrZXkpIHtcbiAgICBoYXNoTWFwW2tleV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gaGFzaE1hcDtcbiAgfSwge30pO1xufSIsImltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0TGF5b3V0UmVjdCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldExheW91dFJlY3QuanNcIjtcbmltcG9ydCBjb250YWlucyBmcm9tIFwiLi4vZG9tLXV0aWxzL2NvbnRhaW5zLmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0T2Zmc2V0UGFyZW50LmpzXCI7XG5pbXBvcnQgZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQuanNcIjtcbmltcG9ydCB7IHdpdGhpbiB9IGZyb20gXCIuLi91dGlscy93aXRoaW4uanNcIjtcbmltcG9ydCBtZXJnZVBhZGRpbmdPYmplY3QgZnJvbSBcIi4uL3V0aWxzL21lcmdlUGFkZGluZ09iamVjdC5qc1wiO1xuaW1wb3J0IGV4cGFuZFRvSGFzaE1hcCBmcm9tIFwiLi4vdXRpbHMvZXhwYW5kVG9IYXNoTWFwLmpzXCI7XG5pbXBvcnQgeyBsZWZ0LCByaWdodCwgYmFzZVBsYWNlbWVudHMsIHRvcCwgYm90dG9tIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxudmFyIHRvUGFkZGluZ09iamVjdCA9IGZ1bmN0aW9uIHRvUGFkZGluZ09iamVjdChwYWRkaW5nLCBzdGF0ZSkge1xuICBwYWRkaW5nID0gdHlwZW9mIHBhZGRpbmcgPT09ICdmdW5jdGlvbicgPyBwYWRkaW5nKE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnJlY3RzLCB7XG4gICAgcGxhY2VtZW50OiBzdGF0ZS5wbGFjZW1lbnRcbiAgfSkpIDogcGFkZGluZztcbiAgcmV0dXJuIG1lcmdlUGFkZGluZ09iamVjdCh0eXBlb2YgcGFkZGluZyAhPT0gJ251bWJlcicgPyBwYWRkaW5nIDogZXhwYW5kVG9IYXNoTWFwKHBhZGRpbmcsIGJhc2VQbGFjZW1lbnRzKSk7XG59O1xuXG5mdW5jdGlvbiBhcnJvdyhfcmVmKSB7XG4gIHZhciBfc3RhdGUkbW9kaWZpZXJzRGF0YSQ7XG5cbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG5hbWUgPSBfcmVmLm5hbWUsXG4gICAgICBvcHRpb25zID0gX3JlZi5vcHRpb25zO1xuICB2YXIgYXJyb3dFbGVtZW50ID0gc3RhdGUuZWxlbWVudHMuYXJyb3c7XG4gIHZhciBwb3BwZXJPZmZzZXRzID0gc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzO1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQoc3RhdGUucGxhY2VtZW50KTtcbiAgdmFyIGF4aXMgPSBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQoYmFzZVBsYWNlbWVudCk7XG4gIHZhciBpc1ZlcnRpY2FsID0gW2xlZnQsIHJpZ2h0XS5pbmRleE9mKGJhc2VQbGFjZW1lbnQpID49IDA7XG4gIHZhciBsZW4gPSBpc1ZlcnRpY2FsID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuXG4gIGlmICghYXJyb3dFbGVtZW50IHx8ICFwb3BwZXJPZmZzZXRzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHBhZGRpbmdPYmplY3QgPSB0b1BhZGRpbmdPYmplY3Qob3B0aW9ucy5wYWRkaW5nLCBzdGF0ZSk7XG4gIHZhciBhcnJvd1JlY3QgPSBnZXRMYXlvdXRSZWN0KGFycm93RWxlbWVudCk7XG4gIHZhciBtaW5Qcm9wID0gYXhpcyA9PT0gJ3knID8gdG9wIDogbGVmdDtcbiAgdmFyIG1heFByb3AgPSBheGlzID09PSAneScgPyBib3R0b20gOiByaWdodDtcbiAgdmFyIGVuZERpZmYgPSBzdGF0ZS5yZWN0cy5yZWZlcmVuY2VbbGVuXSArIHN0YXRlLnJlY3RzLnJlZmVyZW5jZVtheGlzXSAtIHBvcHBlck9mZnNldHNbYXhpc10gLSBzdGF0ZS5yZWN0cy5wb3BwZXJbbGVuXTtcbiAgdmFyIHN0YXJ0RGlmZiA9IHBvcHBlck9mZnNldHNbYXhpc10gLSBzdGF0ZS5yZWN0cy5yZWZlcmVuY2VbYXhpc107XG4gIHZhciBhcnJvd09mZnNldFBhcmVudCA9IGdldE9mZnNldFBhcmVudChhcnJvd0VsZW1lbnQpO1xuICB2YXIgY2xpZW50U2l6ZSA9IGFycm93T2Zmc2V0UGFyZW50ID8gYXhpcyA9PT0gJ3knID8gYXJyb3dPZmZzZXRQYXJlbnQuY2xpZW50SGVpZ2h0IHx8IDAgOiBhcnJvd09mZnNldFBhcmVudC5jbGllbnRXaWR0aCB8fCAwIDogMDtcbiAgdmFyIGNlbnRlclRvUmVmZXJlbmNlID0gZW5kRGlmZiAvIDIgLSBzdGFydERpZmYgLyAyOyAvLyBNYWtlIHN1cmUgdGhlIGFycm93IGRvZXNuJ3Qgb3ZlcmZsb3cgdGhlIHBvcHBlciBpZiB0aGUgY2VudGVyIHBvaW50IGlzXG4gIC8vIG91dHNpZGUgb2YgdGhlIHBvcHBlciBib3VuZHNcblxuICB2YXIgbWluID0gcGFkZGluZ09iamVjdFttaW5Qcm9wXTtcbiAgdmFyIG1heCA9IGNsaWVudFNpemUgLSBhcnJvd1JlY3RbbGVuXSAtIHBhZGRpbmdPYmplY3RbbWF4UHJvcF07XG4gIHZhciBjZW50ZXIgPSBjbGllbnRTaXplIC8gMiAtIGFycm93UmVjdFtsZW5dIC8gMiArIGNlbnRlclRvUmVmZXJlbmNlO1xuICB2YXIgb2Zmc2V0ID0gd2l0aGluKG1pbiwgY2VudGVyLCBtYXgpOyAvLyBQcmV2ZW50cyBicmVha2luZyBzeW50YXggaGlnaGxpZ2h0aW5nLi4uXG5cbiAgdmFyIGF4aXNQcm9wID0gYXhpcztcbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IChfc3RhdGUkbW9kaWZpZXJzRGF0YSQgPSB7fSwgX3N0YXRlJG1vZGlmaWVyc0RhdGEkW2F4aXNQcm9wXSA9IG9mZnNldCwgX3N0YXRlJG1vZGlmaWVyc0RhdGEkLmNlbnRlck9mZnNldCA9IG9mZnNldCAtIGNlbnRlciwgX3N0YXRlJG1vZGlmaWVyc0RhdGEkKTtcbn1cblxuZnVuY3Rpb24gZWZmZWN0KF9yZWYyKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYyLnN0YXRlLFxuICAgICAgb3B0aW9ucyA9IF9yZWYyLm9wdGlvbnM7XG4gIHZhciBfb3B0aW9ucyRlbGVtZW50ID0gb3B0aW9ucy5lbGVtZW50LFxuICAgICAgYXJyb3dFbGVtZW50ID0gX29wdGlvbnMkZWxlbWVudCA9PT0gdm9pZCAwID8gJ1tkYXRhLXBvcHBlci1hcnJvd10nIDogX29wdGlvbnMkZWxlbWVudDtcblxuICBpZiAoYXJyb3dFbGVtZW50ID09IG51bGwpIHtcbiAgICByZXR1cm47XG4gIH0gLy8gQ1NTIHNlbGVjdG9yXG5cblxuICBpZiAodHlwZW9mIGFycm93RWxlbWVudCA9PT0gJ3N0cmluZycpIHtcbiAgICBhcnJvd0VsZW1lbnQgPSBzdGF0ZS5lbGVtZW50cy5wb3BwZXIucXVlcnlTZWxlY3RvcihhcnJvd0VsZW1lbnQpO1xuXG4gICAgaWYgKCFhcnJvd0VsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBpZiAoIWNvbnRhaW5zKHN0YXRlLmVsZW1lbnRzLnBvcHBlciwgYXJyb3dFbGVtZW50KSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHN0YXRlLmVsZW1lbnRzLmFycm93ID0gYXJyb3dFbGVtZW50O1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnYXJyb3cnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICBmbjogYXJyb3csXG4gIGVmZmVjdDogZWZmZWN0LFxuICByZXF1aXJlczogWydwb3BwZXJPZmZzZXRzJ10sXG4gIHJlcXVpcmVzSWZFeGlzdHM6IFsncHJldmVudE92ZXJmbG93J11cbn07IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnNwbGl0KCctJylbMV07XG59IiwiaW1wb3J0IHsgdG9wLCBsZWZ0LCByaWdodCwgYm90dG9tLCBlbmQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBnZXRPZmZzZXRQYXJlbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0Q29tcHV0ZWRTdHlsZS5qc1wiO1xuaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRWYXJpYXRpb24gZnJvbSBcIi4uL3V0aWxzL2dldFZhcmlhdGlvbi5qc1wiO1xuaW1wb3J0IHsgcm91bmQgfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbnZhciB1bnNldFNpZGVzID0ge1xuICB0b3A6ICdhdXRvJyxcbiAgcmlnaHQ6ICdhdXRvJyxcbiAgYm90dG9tOiAnYXV0bycsXG4gIGxlZnQ6ICdhdXRvJ1xufTsgLy8gUm91bmQgdGhlIG9mZnNldHMgdG8gdGhlIG5lYXJlc3Qgc3VpdGFibGUgc3VicGl4ZWwgYmFzZWQgb24gdGhlIERQUi5cbi8vIFpvb21pbmcgY2FuIGNoYW5nZSB0aGUgRFBSLCBidXQgaXQgc2VlbXMgdG8gcmVwb3J0IGEgdmFsdWUgdGhhdCB3aWxsXG4vLyBjbGVhbmx5IGRpdmlkZSB0aGUgdmFsdWVzIGludG8gdGhlIGFwcHJvcHJpYXRlIHN1YnBpeGVscy5cblxuZnVuY3Rpb24gcm91bmRPZmZzZXRzQnlEUFIoX3JlZiwgd2luKSB7XG4gIHZhciB4ID0gX3JlZi54LFxuICAgICAgeSA9IF9yZWYueTtcbiAgdmFyIGRwciA9IHdpbi5kZXZpY2VQaXhlbFJhdGlvIHx8IDE7XG4gIHJldHVybiB7XG4gICAgeDogcm91bmQoeCAqIGRwcikgLyBkcHIgfHwgMCxcbiAgICB5OiByb3VuZCh5ICogZHByKSAvIGRwciB8fCAwXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXBUb1N0eWxlcyhfcmVmMikge1xuICB2YXIgX09iamVjdCRhc3NpZ24yO1xuXG4gIHZhciBwb3BwZXIgPSBfcmVmMi5wb3BwZXIsXG4gICAgICBwb3BwZXJSZWN0ID0gX3JlZjIucG9wcGVyUmVjdCxcbiAgICAgIHBsYWNlbWVudCA9IF9yZWYyLnBsYWNlbWVudCxcbiAgICAgIHZhcmlhdGlvbiA9IF9yZWYyLnZhcmlhdGlvbixcbiAgICAgIG9mZnNldHMgPSBfcmVmMi5vZmZzZXRzLFxuICAgICAgcG9zaXRpb24gPSBfcmVmMi5wb3NpdGlvbixcbiAgICAgIGdwdUFjY2VsZXJhdGlvbiA9IF9yZWYyLmdwdUFjY2VsZXJhdGlvbixcbiAgICAgIGFkYXB0aXZlID0gX3JlZjIuYWRhcHRpdmUsXG4gICAgICByb3VuZE9mZnNldHMgPSBfcmVmMi5yb3VuZE9mZnNldHMsXG4gICAgICBpc0ZpeGVkID0gX3JlZjIuaXNGaXhlZDtcbiAgdmFyIF9vZmZzZXRzJHggPSBvZmZzZXRzLngsXG4gICAgICB4ID0gX29mZnNldHMkeCA9PT0gdm9pZCAwID8gMCA6IF9vZmZzZXRzJHgsXG4gICAgICBfb2Zmc2V0cyR5ID0gb2Zmc2V0cy55LFxuICAgICAgeSA9IF9vZmZzZXRzJHkgPT09IHZvaWQgMCA/IDAgOiBfb2Zmc2V0cyR5O1xuXG4gIHZhciBfcmVmMyA9IHR5cGVvZiByb3VuZE9mZnNldHMgPT09ICdmdW5jdGlvbicgPyByb3VuZE9mZnNldHMoe1xuICAgIHg6IHgsXG4gICAgeTogeVxuICB9KSA6IHtcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfTtcblxuICB4ID0gX3JlZjMueDtcbiAgeSA9IF9yZWYzLnk7XG4gIHZhciBoYXNYID0gb2Zmc2V0cy5oYXNPd25Qcm9wZXJ0eSgneCcpO1xuICB2YXIgaGFzWSA9IG9mZnNldHMuaGFzT3duUHJvcGVydHkoJ3knKTtcbiAgdmFyIHNpZGVYID0gbGVmdDtcbiAgdmFyIHNpZGVZID0gdG9wO1xuICB2YXIgd2luID0gd2luZG93O1xuXG4gIGlmIChhZGFwdGl2ZSkge1xuICAgIHZhciBvZmZzZXRQYXJlbnQgPSBnZXRPZmZzZXRQYXJlbnQocG9wcGVyKTtcbiAgICB2YXIgaGVpZ2h0UHJvcCA9ICdjbGllbnRIZWlnaHQnO1xuICAgIHZhciB3aWR0aFByb3AgPSAnY2xpZW50V2lkdGgnO1xuXG4gICAgaWYgKG9mZnNldFBhcmVudCA9PT0gZ2V0V2luZG93KHBvcHBlcikpIHtcbiAgICAgIG9mZnNldFBhcmVudCA9IGdldERvY3VtZW50RWxlbWVudChwb3BwZXIpO1xuXG4gICAgICBpZiAoZ2V0Q29tcHV0ZWRTdHlsZShvZmZzZXRQYXJlbnQpLnBvc2l0aW9uICE9PSAnc3RhdGljJyAmJiBwb3NpdGlvbiA9PT0gJ2Fic29sdXRlJykge1xuICAgICAgICBoZWlnaHRQcm9wID0gJ3Njcm9sbEhlaWdodCc7XG4gICAgICAgIHdpZHRoUHJvcCA9ICdzY3JvbGxXaWR0aCc7XG4gICAgICB9XG4gICAgfSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYXN0XTogZm9yY2UgdHlwZSByZWZpbmVtZW50LCB3ZSBjb21wYXJlIG9mZnNldFBhcmVudCB3aXRoIHdpbmRvdyBhYm92ZSwgYnV0IEZsb3cgZG9lc24ndCBkZXRlY3QgaXRcblxuXG4gICAgb2Zmc2V0UGFyZW50ID0gb2Zmc2V0UGFyZW50O1xuXG4gICAgaWYgKHBsYWNlbWVudCA9PT0gdG9wIHx8IChwbGFjZW1lbnQgPT09IGxlZnQgfHwgcGxhY2VtZW50ID09PSByaWdodCkgJiYgdmFyaWF0aW9uID09PSBlbmQpIHtcbiAgICAgIHNpZGVZID0gYm90dG9tO1xuICAgICAgdmFyIG9mZnNldFkgPSBpc0ZpeGVkICYmIG9mZnNldFBhcmVudCA9PT0gd2luICYmIHdpbi52aXN1YWxWaWV3cG9ydCA/IHdpbi52aXN1YWxWaWV3cG9ydC5oZWlnaHQgOiAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cbiAgICAgIG9mZnNldFBhcmVudFtoZWlnaHRQcm9wXTtcbiAgICAgIHkgLT0gb2Zmc2V0WSAtIHBvcHBlclJlY3QuaGVpZ2h0O1xuICAgICAgeSAqPSBncHVBY2NlbGVyYXRpb24gPyAxIDogLTE7XG4gICAgfVxuXG4gICAgaWYgKHBsYWNlbWVudCA9PT0gbGVmdCB8fCAocGxhY2VtZW50ID09PSB0b3AgfHwgcGxhY2VtZW50ID09PSBib3R0b20pICYmIHZhcmlhdGlvbiA9PT0gZW5kKSB7XG4gICAgICBzaWRlWCA9IHJpZ2h0O1xuICAgICAgdmFyIG9mZnNldFggPSBpc0ZpeGVkICYmIG9mZnNldFBhcmVudCA9PT0gd2luICYmIHdpbi52aXN1YWxWaWV3cG9ydCA/IHdpbi52aXN1YWxWaWV3cG9ydC53aWR0aCA6IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICAgICAgb2Zmc2V0UGFyZW50W3dpZHRoUHJvcF07XG4gICAgICB4IC09IG9mZnNldFggLSBwb3BwZXJSZWN0LndpZHRoO1xuICAgICAgeCAqPSBncHVBY2NlbGVyYXRpb24gPyAxIDogLTE7XG4gICAgfVxuICB9XG5cbiAgdmFyIGNvbW1vblN0eWxlcyA9IE9iamVjdC5hc3NpZ24oe1xuICAgIHBvc2l0aW9uOiBwb3NpdGlvblxuICB9LCBhZGFwdGl2ZSAmJiB1bnNldFNpZGVzKTtcblxuICB2YXIgX3JlZjQgPSByb3VuZE9mZnNldHMgPT09IHRydWUgPyByb3VuZE9mZnNldHNCeURQUih7XG4gICAgeDogeCxcbiAgICB5OiB5XG4gIH0sIGdldFdpbmRvdyhwb3BwZXIpKSA6IHtcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfTtcblxuICB4ID0gX3JlZjQueDtcbiAgeSA9IF9yZWY0Lnk7XG5cbiAgaWYgKGdwdUFjY2VsZXJhdGlvbikge1xuICAgIHZhciBfT2JqZWN0JGFzc2lnbjtcblxuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBjb21tb25TdHlsZXMsIChfT2JqZWN0JGFzc2lnbiA9IHt9LCBfT2JqZWN0JGFzc2lnbltzaWRlWV0gPSBoYXNZID8gJzAnIDogJycsIF9PYmplY3QkYXNzaWduW3NpZGVYXSA9IGhhc1ggPyAnMCcgOiAnJywgX09iamVjdCRhc3NpZ24udHJhbnNmb3JtID0gKHdpbi5kZXZpY2VQaXhlbFJhdGlvIHx8IDEpIDw9IDEgPyBcInRyYW5zbGF0ZShcIiArIHggKyBcInB4LCBcIiArIHkgKyBcInB4KVwiIDogXCJ0cmFuc2xhdGUzZChcIiArIHggKyBcInB4LCBcIiArIHkgKyBcInB4LCAwKVwiLCBfT2JqZWN0JGFzc2lnbikpO1xuICB9XG5cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGNvbW1vblN0eWxlcywgKF9PYmplY3QkYXNzaWduMiA9IHt9LCBfT2JqZWN0JGFzc2lnbjJbc2lkZVldID0gaGFzWSA/IHkgKyBcInB4XCIgOiAnJywgX09iamVjdCRhc3NpZ24yW3NpZGVYXSA9IGhhc1ggPyB4ICsgXCJweFwiIDogJycsIF9PYmplY3QkYXNzaWduMi50cmFuc2Zvcm0gPSAnJywgX09iamVjdCRhc3NpZ24yKSk7XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVTdHlsZXMoX3JlZjUpIHtcbiAgdmFyIHN0YXRlID0gX3JlZjUuc3RhdGUsXG4gICAgICBvcHRpb25zID0gX3JlZjUub3B0aW9ucztcbiAgdmFyIF9vcHRpb25zJGdwdUFjY2VsZXJhdCA9IG9wdGlvbnMuZ3B1QWNjZWxlcmF0aW9uLFxuICAgICAgZ3B1QWNjZWxlcmF0aW9uID0gX29wdGlvbnMkZ3B1QWNjZWxlcmF0ID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkZ3B1QWNjZWxlcmF0LFxuICAgICAgX29wdGlvbnMkYWRhcHRpdmUgPSBvcHRpb25zLmFkYXB0aXZlLFxuICAgICAgYWRhcHRpdmUgPSBfb3B0aW9ucyRhZGFwdGl2ZSA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJGFkYXB0aXZlLFxuICAgICAgX29wdGlvbnMkcm91bmRPZmZzZXRzID0gb3B0aW9ucy5yb3VuZE9mZnNldHMsXG4gICAgICByb3VuZE9mZnNldHMgPSBfb3B0aW9ucyRyb3VuZE9mZnNldHMgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRyb3VuZE9mZnNldHM7XG4gIHZhciBjb21tb25TdHlsZXMgPSB7XG4gICAgcGxhY2VtZW50OiBnZXRCYXNlUGxhY2VtZW50KHN0YXRlLnBsYWNlbWVudCksXG4gICAgdmFyaWF0aW9uOiBnZXRWYXJpYXRpb24oc3RhdGUucGxhY2VtZW50KSxcbiAgICBwb3BwZXI6IHN0YXRlLmVsZW1lbnRzLnBvcHBlcixcbiAgICBwb3BwZXJSZWN0OiBzdGF0ZS5yZWN0cy5wb3BwZXIsXG4gICAgZ3B1QWNjZWxlcmF0aW9uOiBncHVBY2NlbGVyYXRpb24sXG4gICAgaXNGaXhlZDogc3RhdGUub3B0aW9ucy5zdHJhdGVneSA9PT0gJ2ZpeGVkJ1xuICB9O1xuXG4gIGlmIChzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMgIT0gbnVsbCkge1xuICAgIHN0YXRlLnN0eWxlcy5wb3BwZXIgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5zdHlsZXMucG9wcGVyLCBtYXBUb1N0eWxlcyhPYmplY3QuYXNzaWduKHt9LCBjb21tb25TdHlsZXMsIHtcbiAgICAgIG9mZnNldHM6IHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cyxcbiAgICAgIHBvc2l0aW9uOiBzdGF0ZS5vcHRpb25zLnN0cmF0ZWd5LFxuICAgICAgYWRhcHRpdmU6IGFkYXB0aXZlLFxuICAgICAgcm91bmRPZmZzZXRzOiByb3VuZE9mZnNldHNcbiAgICB9KSkpO1xuICB9XG5cbiAgaWYgKHN0YXRlLm1vZGlmaWVyc0RhdGEuYXJyb3cgIT0gbnVsbCkge1xuICAgIHN0YXRlLnN0eWxlcy5hcnJvdyA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnN0eWxlcy5hcnJvdywgbWFwVG9TdHlsZXMoT2JqZWN0LmFzc2lnbih7fSwgY29tbW9uU3R5bGVzLCB7XG4gICAgICBvZmZzZXRzOiBzdGF0ZS5tb2RpZmllcnNEYXRhLmFycm93LFxuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICBhZGFwdGl2ZTogZmFsc2UsXG4gICAgICByb3VuZE9mZnNldHM6IHJvdW5kT2Zmc2V0c1xuICAgIH0pKSk7XG4gIH1cblxuICBzdGF0ZS5hdHRyaWJ1dGVzLnBvcHBlciA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmF0dHJpYnV0ZXMucG9wcGVyLCB7XG4gICAgJ2RhdGEtcG9wcGVyLXBsYWNlbWVudCc6IHN0YXRlLnBsYWNlbWVudFxuICB9KTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2NvbXB1dGVTdHlsZXMnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ2JlZm9yZVdyaXRlJyxcbiAgZm46IGNvbXB1dGVTdHlsZXMsXG4gIGRhdGE6IHt9XG59OyIsImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRXaW5kb3cuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG52YXIgcGFzc2l2ZSA9IHtcbiAgcGFzc2l2ZTogdHJ1ZVxufTtcblxuZnVuY3Rpb24gZWZmZWN0KF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIGluc3RhbmNlID0gX3JlZi5pbnN0YW5jZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnM7XG4gIHZhciBfb3B0aW9ucyRzY3JvbGwgPSBvcHRpb25zLnNjcm9sbCxcbiAgICAgIHNjcm9sbCA9IF9vcHRpb25zJHNjcm9sbCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJHNjcm9sbCxcbiAgICAgIF9vcHRpb25zJHJlc2l6ZSA9IG9wdGlvbnMucmVzaXplLFxuICAgICAgcmVzaXplID0gX29wdGlvbnMkcmVzaXplID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkcmVzaXplO1xuICB2YXIgd2luZG93ID0gZ2V0V2luZG93KHN0YXRlLmVsZW1lbnRzLnBvcHBlcik7XG4gIHZhciBzY3JvbGxQYXJlbnRzID0gW10uY29uY2F0KHN0YXRlLnNjcm9sbFBhcmVudHMucmVmZXJlbmNlLCBzdGF0ZS5zY3JvbGxQYXJlbnRzLnBvcHBlcik7XG5cbiAgaWYgKHNjcm9sbCkge1xuICAgIHNjcm9sbFBhcmVudHMuZm9yRWFjaChmdW5jdGlvbiAoc2Nyb2xsUGFyZW50KSB7XG4gICAgICBzY3JvbGxQYXJlbnQuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChyZXNpemUpIHtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHNjcm9sbCkge1xuICAgICAgc2Nyb2xsUGFyZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChzY3JvbGxQYXJlbnQpIHtcbiAgICAgICAgc2Nyb2xsUGFyZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGluc3RhbmNlLnVwZGF0ZSwgcGFzc2l2ZSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAocmVzaXplKSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgICB9XG4gIH07XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdldmVudExpc3RlbmVycycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnd3JpdGUnLFxuICBmbjogZnVuY3Rpb24gZm4oKSB7fSxcbiAgZWZmZWN0OiBlZmZlY3QsXG4gIGRhdGE6IHt9XG59OyIsInZhciBoYXNoID0ge1xuICBsZWZ0OiAncmlnaHQnLFxuICByaWdodDogJ2xlZnQnLFxuICBib3R0b206ICd0b3AnLFxuICB0b3A6ICdib3R0b20nXG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQucmVwbGFjZSgvbGVmdHxyaWdodHxib3R0b218dG9wL2csIGZ1bmN0aW9uIChtYXRjaGVkKSB7XG4gICAgcmV0dXJuIGhhc2hbbWF0Y2hlZF07XG4gIH0pO1xufSIsInZhciBoYXNoID0ge1xuICBzdGFydDogJ2VuZCcsXG4gIGVuZDogJ3N0YXJ0J1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnJlcGxhY2UoL3N0YXJ0fGVuZC9nLCBmdW5jdGlvbiAobWF0Y2hlZCkge1xuICAgIHJldHVybiBoYXNoW21hdGNoZWRdO1xuICB9KTtcbn0iLCJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0V2luZG93U2Nyb2xsKG5vZGUpIHtcbiAgdmFyIHdpbiA9IGdldFdpbmRvdyhub2RlKTtcbiAgdmFyIHNjcm9sbExlZnQgPSB3aW4ucGFnZVhPZmZzZXQ7XG4gIHZhciBzY3JvbGxUb3AgPSB3aW4ucGFnZVlPZmZzZXQ7XG4gIHJldHVybiB7XG4gICAgc2Nyb2xsTGVmdDogc2Nyb2xsTGVmdCxcbiAgICBzY3JvbGxUb3A6IHNjcm9sbFRvcFxuICB9O1xufSIsImltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4vZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGwuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFdpbmRvd1Njcm9sbEJhclgoZWxlbWVudCkge1xuICAvLyBJZiA8aHRtbD4gaGFzIGEgQ1NTIHdpZHRoIGdyZWF0ZXIgdGhhbiB0aGUgdmlld3BvcnQsIHRoZW4gdGhpcyB3aWxsIGJlXG4gIC8vIGluY29ycmVjdCBmb3IgUlRMLlxuICAvLyBQb3BwZXIgMSBpcyBicm9rZW4gaW4gdGhpcyBjYXNlIGFuZCBuZXZlciBoYWQgYSBidWcgcmVwb3J0IHNvIGxldCdzIGFzc3VtZVxuICAvLyBpdCdzIG5vdCBhbiBpc3N1ZS4gSSBkb24ndCB0aGluayBhbnlvbmUgZXZlciBzcGVjaWZpZXMgd2lkdGggb24gPGh0bWw+XG4gIC8vIGFueXdheS5cbiAgLy8gQnJvd3NlcnMgd2hlcmUgdGhlIGxlZnQgc2Nyb2xsYmFyIGRvZXNuJ3QgY2F1c2UgYW4gaXNzdWUgcmVwb3J0IGAwYCBmb3JcbiAgLy8gdGhpcyAoZS5nLiBFZGdlIDIwMTksIElFMTEsIFNhZmFyaSlcbiAgcmV0dXJuIGdldEJvdW5kaW5nQ2xpZW50UmVjdChnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkpLmxlZnQgKyBnZXRXaW5kb3dTY3JvbGwoZWxlbWVudCkuc2Nyb2xsTGVmdDtcbn0iLCJpbXBvcnQgZ2V0Q29tcHV0ZWRTdHlsZSBmcm9tIFwiLi9nZXRDb21wdXRlZFN0eWxlLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc1Njcm9sbFBhcmVudChlbGVtZW50KSB7XG4gIC8vIEZpcmVmb3ggd2FudHMgdXMgdG8gY2hlY2sgYC14YCBhbmQgYC15YCB2YXJpYXRpb25zIGFzIHdlbGxcbiAgdmFyIF9nZXRDb21wdXRlZFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KSxcbiAgICAgIG92ZXJmbG93ID0gX2dldENvbXB1dGVkU3R5bGUub3ZlcmZsb3csXG4gICAgICBvdmVyZmxvd1ggPSBfZ2V0Q29tcHV0ZWRTdHlsZS5vdmVyZmxvd1gsXG4gICAgICBvdmVyZmxvd1kgPSBfZ2V0Q29tcHV0ZWRTdHlsZS5vdmVyZmxvd1k7XG5cbiAgcmV0dXJuIC9hdXRvfHNjcm9sbHxvdmVybGF5fGhpZGRlbi8udGVzdChvdmVyZmxvdyArIG92ZXJmbG93WSArIG92ZXJmbG93WCk7XG59IiwiaW1wb3J0IGdldFBhcmVudE5vZGUgZnJvbSBcIi4vZ2V0UGFyZW50Tm9kZS5qc1wiO1xuaW1wb3J0IGlzU2Nyb2xsUGFyZW50IGZyb20gXCIuL2lzU2Nyb2xsUGFyZW50LmpzXCI7XG5pbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRTY3JvbGxQYXJlbnQobm9kZSkge1xuICBpZiAoWydodG1sJywgJ2JvZHknLCAnI2RvY3VtZW50J10uaW5kZXhPZihnZXROb2RlTmFtZShub2RlKSkgPj0gMCkge1xuICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl06IGFzc3VtZSBib2R5IGlzIGFsd2F5cyBhdmFpbGFibGVcbiAgICByZXR1cm4gbm9kZS5vd25lckRvY3VtZW50LmJvZHk7XG4gIH1cblxuICBpZiAoaXNIVE1MRWxlbWVudChub2RlKSAmJiBpc1Njcm9sbFBhcmVudChub2RlKSkge1xuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgcmV0dXJuIGdldFNjcm9sbFBhcmVudChnZXRQYXJlbnROb2RlKG5vZGUpKTtcbn0iLCJpbXBvcnQgZ2V0U2Nyb2xsUGFyZW50IGZyb20gXCIuL2dldFNjcm9sbFBhcmVudC5qc1wiO1xuaW1wb3J0IGdldFBhcmVudE5vZGUgZnJvbSBcIi4vZ2V0UGFyZW50Tm9kZS5qc1wiO1xuaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCBpc1Njcm9sbFBhcmVudCBmcm9tIFwiLi9pc1Njcm9sbFBhcmVudC5qc1wiO1xuLypcbmdpdmVuIGEgRE9NIGVsZW1lbnQsIHJldHVybiB0aGUgbGlzdCBvZiBhbGwgc2Nyb2xsIHBhcmVudHMsIHVwIHRoZSBsaXN0IG9mIGFuY2Vzb3JzXG51bnRpbCB3ZSBnZXQgdG8gdGhlIHRvcCB3aW5kb3cgb2JqZWN0LiBUaGlzIGxpc3QgaXMgd2hhdCB3ZSBhdHRhY2ggc2Nyb2xsIGxpc3RlbmVyc1xudG8sIGJlY2F1c2UgaWYgYW55IG9mIHRoZXNlIHBhcmVudCBlbGVtZW50cyBzY3JvbGwsIHdlJ2xsIG5lZWQgdG8gcmUtY2FsY3VsYXRlIHRoZVxucmVmZXJlbmNlIGVsZW1lbnQncyBwb3NpdGlvbi5cbiovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxpc3RTY3JvbGxQYXJlbnRzKGVsZW1lbnQsIGxpc3QpIHtcbiAgdmFyIF9lbGVtZW50JG93bmVyRG9jdW1lbjtcblxuICBpZiAobGlzdCA9PT0gdm9pZCAwKSB7XG4gICAgbGlzdCA9IFtdO1xuICB9XG5cbiAgdmFyIHNjcm9sbFBhcmVudCA9IGdldFNjcm9sbFBhcmVudChlbGVtZW50KTtcbiAgdmFyIGlzQm9keSA9IHNjcm9sbFBhcmVudCA9PT0gKChfZWxlbWVudCRvd25lckRvY3VtZW4gPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfZWxlbWVudCRvd25lckRvY3VtZW4uYm9keSk7XG4gIHZhciB3aW4gPSBnZXRXaW5kb3coc2Nyb2xsUGFyZW50KTtcbiAgdmFyIHRhcmdldCA9IGlzQm9keSA/IFt3aW5dLmNvbmNhdCh3aW4udmlzdWFsVmlld3BvcnQgfHwgW10sIGlzU2Nyb2xsUGFyZW50KHNjcm9sbFBhcmVudCkgPyBzY3JvbGxQYXJlbnQgOiBbXSkgOiBzY3JvbGxQYXJlbnQ7XG4gIHZhciB1cGRhdGVkTGlzdCA9IGxpc3QuY29uY2F0KHRhcmdldCk7XG4gIHJldHVybiBpc0JvZHkgPyB1cGRhdGVkTGlzdCA6IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWNhbGxdOiBpc0JvZHkgdGVsbHMgdXMgdGFyZ2V0IHdpbGwgYmUgYW4gSFRNTEVsZW1lbnQgaGVyZVxuICB1cGRhdGVkTGlzdC5jb25jYXQobGlzdFNjcm9sbFBhcmVudHMoZ2V0UGFyZW50Tm9kZSh0YXJnZXQpKSk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVjdFRvQ2xpZW50UmVjdChyZWN0KSB7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCByZWN0LCB7XG4gICAgbGVmdDogcmVjdC54LFxuICAgIHRvcDogcmVjdC55LFxuICAgIHJpZ2h0OiByZWN0LnggKyByZWN0LndpZHRoLFxuICAgIGJvdHRvbTogcmVjdC55ICsgcmVjdC5oZWlnaHRcbiAgfSk7XG59IiwiaW1wb3J0IHsgdmlld3BvcnQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBnZXRWaWV3cG9ydFJlY3QgZnJvbSBcIi4vZ2V0Vmlld3BvcnRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRSZWN0IGZyb20gXCIuL2dldERvY3VtZW50UmVjdC5qc1wiO1xuaW1wb3J0IGxpc3RTY3JvbGxQYXJlbnRzIGZyb20gXCIuL2xpc3RTY3JvbGxQYXJlbnRzLmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuL2dldE9mZnNldFBhcmVudC5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmltcG9ydCB7IGlzRWxlbWVudCwgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4vZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0UGFyZW50Tm9kZSBmcm9tIFwiLi9nZXRQYXJlbnROb2RlLmpzXCI7XG5pbXBvcnQgY29udGFpbnMgZnJvbSBcIi4vY29udGFpbnMuanNcIjtcbmltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IHJlY3RUb0NsaWVudFJlY3QgZnJvbSBcIi4uL3V0aWxzL3JlY3RUb0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCB7IG1heCwgbWluIH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjtcblxuZnVuY3Rpb24gZ2V0SW5uZXJCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgc3RyYXRlZ3kpIHtcbiAgdmFyIHJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgZmFsc2UsIHN0cmF0ZWd5ID09PSAnZml4ZWQnKTtcbiAgcmVjdC50b3AgPSByZWN0LnRvcCArIGVsZW1lbnQuY2xpZW50VG9wO1xuICByZWN0LmxlZnQgPSByZWN0LmxlZnQgKyBlbGVtZW50LmNsaWVudExlZnQ7XG4gIHJlY3QuYm90dG9tID0gcmVjdC50b3AgKyBlbGVtZW50LmNsaWVudEhlaWdodDtcbiAgcmVjdC5yaWdodCA9IHJlY3QubGVmdCArIGVsZW1lbnQuY2xpZW50V2lkdGg7XG4gIHJlY3Qud2lkdGggPSBlbGVtZW50LmNsaWVudFdpZHRoO1xuICByZWN0LmhlaWdodCA9IGVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICByZWN0LnggPSByZWN0LmxlZnQ7XG4gIHJlY3QueSA9IHJlY3QudG9wO1xuICByZXR1cm4gcmVjdDtcbn1cblxuZnVuY3Rpb24gZ2V0Q2xpZW50UmVjdEZyb21NaXhlZFR5cGUoZWxlbWVudCwgY2xpcHBpbmdQYXJlbnQsIHN0cmF0ZWd5KSB7XG4gIHJldHVybiBjbGlwcGluZ1BhcmVudCA9PT0gdmlld3BvcnQgPyByZWN0VG9DbGllbnRSZWN0KGdldFZpZXdwb3J0UmVjdChlbGVtZW50LCBzdHJhdGVneSkpIDogaXNFbGVtZW50KGNsaXBwaW5nUGFyZW50KSA/IGdldElubmVyQm91bmRpbmdDbGllbnRSZWN0KGNsaXBwaW5nUGFyZW50LCBzdHJhdGVneSkgOiByZWN0VG9DbGllbnRSZWN0KGdldERvY3VtZW50UmVjdChnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkpKTtcbn0gLy8gQSBcImNsaXBwaW5nIHBhcmVudFwiIGlzIGFuIG92ZXJmbG93YWJsZSBjb250YWluZXIgd2l0aCB0aGUgY2hhcmFjdGVyaXN0aWMgb2Zcbi8vIGNsaXBwaW5nIChvciBoaWRpbmcpIG92ZXJmbG93aW5nIGVsZW1lbnRzIHdpdGggYSBwb3NpdGlvbiBkaWZmZXJlbnQgZnJvbVxuLy8gYGluaXRpYWxgXG5cblxuZnVuY3Rpb24gZ2V0Q2xpcHBpbmdQYXJlbnRzKGVsZW1lbnQpIHtcbiAgdmFyIGNsaXBwaW5nUGFyZW50cyA9IGxpc3RTY3JvbGxQYXJlbnRzKGdldFBhcmVudE5vZGUoZWxlbWVudCkpO1xuICB2YXIgY2FuRXNjYXBlQ2xpcHBpbmcgPSBbJ2Fic29sdXRlJywgJ2ZpeGVkJ10uaW5kZXhPZihnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLnBvc2l0aW9uKSA+PSAwO1xuICB2YXIgY2xpcHBlckVsZW1lbnQgPSBjYW5Fc2NhcGVDbGlwcGluZyAmJiBpc0hUTUxFbGVtZW50KGVsZW1lbnQpID8gZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQpIDogZWxlbWVudDtcblxuICBpZiAoIWlzRWxlbWVudChjbGlwcGVyRWxlbWVudCkpIHtcbiAgICByZXR1cm4gW107XG4gIH0gLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzE0MTRcblxuXG4gIHJldHVybiBjbGlwcGluZ1BhcmVudHMuZmlsdGVyKGZ1bmN0aW9uIChjbGlwcGluZ1BhcmVudCkge1xuICAgIHJldHVybiBpc0VsZW1lbnQoY2xpcHBpbmdQYXJlbnQpICYmIGNvbnRhaW5zKGNsaXBwaW5nUGFyZW50LCBjbGlwcGVyRWxlbWVudCkgJiYgZ2V0Tm9kZU5hbWUoY2xpcHBpbmdQYXJlbnQpICE9PSAnYm9keSc7XG4gIH0pO1xufSAvLyBHZXRzIHRoZSBtYXhpbXVtIGFyZWEgdGhhdCB0aGUgZWxlbWVudCBpcyB2aXNpYmxlIGluIGR1ZSB0byBhbnkgbnVtYmVyIG9mXG4vLyBjbGlwcGluZyBwYXJlbnRzXG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Q2xpcHBpbmdSZWN0KGVsZW1lbnQsIGJvdW5kYXJ5LCByb290Qm91bmRhcnksIHN0cmF0ZWd5KSB7XG4gIHZhciBtYWluQ2xpcHBpbmdQYXJlbnRzID0gYm91bmRhcnkgPT09ICdjbGlwcGluZ1BhcmVudHMnID8gZ2V0Q2xpcHBpbmdQYXJlbnRzKGVsZW1lbnQpIDogW10uY29uY2F0KGJvdW5kYXJ5KTtcbiAgdmFyIGNsaXBwaW5nUGFyZW50cyA9IFtdLmNvbmNhdChtYWluQ2xpcHBpbmdQYXJlbnRzLCBbcm9vdEJvdW5kYXJ5XSk7XG4gIHZhciBmaXJzdENsaXBwaW5nUGFyZW50ID0gY2xpcHBpbmdQYXJlbnRzWzBdO1xuICB2YXIgY2xpcHBpbmdSZWN0ID0gY2xpcHBpbmdQYXJlbnRzLnJlZHVjZShmdW5jdGlvbiAoYWNjUmVjdCwgY2xpcHBpbmdQYXJlbnQpIHtcbiAgICB2YXIgcmVjdCA9IGdldENsaWVudFJlY3RGcm9tTWl4ZWRUeXBlKGVsZW1lbnQsIGNsaXBwaW5nUGFyZW50LCBzdHJhdGVneSk7XG4gICAgYWNjUmVjdC50b3AgPSBtYXgocmVjdC50b3AsIGFjY1JlY3QudG9wKTtcbiAgICBhY2NSZWN0LnJpZ2h0ID0gbWluKHJlY3QucmlnaHQsIGFjY1JlY3QucmlnaHQpO1xuICAgIGFjY1JlY3QuYm90dG9tID0gbWluKHJlY3QuYm90dG9tLCBhY2NSZWN0LmJvdHRvbSk7XG4gICAgYWNjUmVjdC5sZWZ0ID0gbWF4KHJlY3QubGVmdCwgYWNjUmVjdC5sZWZ0KTtcbiAgICByZXR1cm4gYWNjUmVjdDtcbiAgfSwgZ2V0Q2xpZW50UmVjdEZyb21NaXhlZFR5cGUoZWxlbWVudCwgZmlyc3RDbGlwcGluZ1BhcmVudCwgc3RyYXRlZ3kpKTtcbiAgY2xpcHBpbmdSZWN0LndpZHRoID0gY2xpcHBpbmdSZWN0LnJpZ2h0IC0gY2xpcHBpbmdSZWN0LmxlZnQ7XG4gIGNsaXBwaW5nUmVjdC5oZWlnaHQgPSBjbGlwcGluZ1JlY3QuYm90dG9tIC0gY2xpcHBpbmdSZWN0LnRvcDtcbiAgY2xpcHBpbmdSZWN0LnggPSBjbGlwcGluZ1JlY3QubGVmdDtcbiAgY2xpcHBpbmdSZWN0LnkgPSBjbGlwcGluZ1JlY3QudG9wO1xuICByZXR1cm4gY2xpcHBpbmdSZWN0O1xufSIsImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbEJhclggZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsQmFyWC5qc1wiO1xuaW1wb3J0IGlzTGF5b3V0Vmlld3BvcnQgZnJvbSBcIi4vaXNMYXlvdXRWaWV3cG9ydC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Vmlld3BvcnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KSB7XG4gIHZhciB3aW4gPSBnZXRXaW5kb3coZWxlbWVudCk7XG4gIHZhciBodG1sID0gZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpO1xuICB2YXIgdmlzdWFsVmlld3BvcnQgPSB3aW4udmlzdWFsVmlld3BvcnQ7XG4gIHZhciB3aWR0aCA9IGh0bWwuY2xpZW50V2lkdGg7XG4gIHZhciBoZWlnaHQgPSBodG1sLmNsaWVudEhlaWdodDtcbiAgdmFyIHggPSAwO1xuICB2YXIgeSA9IDA7XG5cbiAgaWYgKHZpc3VhbFZpZXdwb3J0KSB7XG4gICAgd2lkdGggPSB2aXN1YWxWaWV3cG9ydC53aWR0aDtcbiAgICBoZWlnaHQgPSB2aXN1YWxWaWV3cG9ydC5oZWlnaHQ7XG4gICAgdmFyIGxheW91dFZpZXdwb3J0ID0gaXNMYXlvdXRWaWV3cG9ydCgpO1xuXG4gICAgaWYgKGxheW91dFZpZXdwb3J0IHx8ICFsYXlvdXRWaWV3cG9ydCAmJiBzdHJhdGVneSA9PT0gJ2ZpeGVkJykge1xuICAgICAgeCA9IHZpc3VhbFZpZXdwb3J0Lm9mZnNldExlZnQ7XG4gICAgICB5ID0gdmlzdWFsVmlld3BvcnQub2Zmc2V0VG9wO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0LFxuICAgIHg6IHggKyBnZXRXaW5kb3dTY3JvbGxCYXJYKGVsZW1lbnQpLFxuICAgIHk6IHlcbiAgfTtcbn0iLCJpbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSBcIi4vZ2V0Q29tcHV0ZWRTdHlsZS5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbEJhclggZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsQmFyWC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGwuanNcIjtcbmltcG9ydCB7IG1heCB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7IC8vIEdldHMgdGhlIGVudGlyZSBzaXplIG9mIHRoZSBzY3JvbGxhYmxlIGRvY3VtZW50IGFyZWEsIGV2ZW4gZXh0ZW5kaW5nIG91dHNpZGVcbi8vIG9mIHRoZSBgPGh0bWw+YCBhbmQgYDxib2R5PmAgcmVjdCBib3VuZHMgaWYgaG9yaXpvbnRhbGx5IHNjcm9sbGFibGVcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0RG9jdW1lbnRSZWN0KGVsZW1lbnQpIHtcbiAgdmFyIF9lbGVtZW50JG93bmVyRG9jdW1lbjtcblxuICB2YXIgaHRtbCA9IGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KTtcbiAgdmFyIHdpblNjcm9sbCA9IGdldFdpbmRvd1Njcm9sbChlbGVtZW50KTtcbiAgdmFyIGJvZHkgPSAoX2VsZW1lbnQkb3duZXJEb2N1bWVuID0gZWxlbWVudC5vd25lckRvY3VtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX2VsZW1lbnQkb3duZXJEb2N1bWVuLmJvZHk7XG4gIHZhciB3aWR0aCA9IG1heChodG1sLnNjcm9sbFdpZHRoLCBodG1sLmNsaWVudFdpZHRoLCBib2R5ID8gYm9keS5zY3JvbGxXaWR0aCA6IDAsIGJvZHkgPyBib2R5LmNsaWVudFdpZHRoIDogMCk7XG4gIHZhciBoZWlnaHQgPSBtYXgoaHRtbC5zY3JvbGxIZWlnaHQsIGh0bWwuY2xpZW50SGVpZ2h0LCBib2R5ID8gYm9keS5zY3JvbGxIZWlnaHQgOiAwLCBib2R5ID8gYm9keS5jbGllbnRIZWlnaHQgOiAwKTtcbiAgdmFyIHggPSAtd2luU2Nyb2xsLnNjcm9sbExlZnQgKyBnZXRXaW5kb3dTY3JvbGxCYXJYKGVsZW1lbnQpO1xuICB2YXIgeSA9IC13aW5TY3JvbGwuc2Nyb2xsVG9wO1xuXG4gIGlmIChnZXRDb21wdXRlZFN0eWxlKGJvZHkgfHwgaHRtbCkuZGlyZWN0aW9uID09PSAncnRsJykge1xuICAgIHggKz0gbWF4KGh0bWwuY2xpZW50V2lkdGgsIGJvZHkgPyBib2R5LmNsaWVudFdpZHRoIDogMCkgLSB3aWR0aDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0LFxuICAgIHg6IHgsXG4gICAgeTogeVxuICB9O1xufSIsImltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRWYXJpYXRpb24gZnJvbSBcIi4vZ2V0VmFyaWF0aW9uLmpzXCI7XG5pbXBvcnQgZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50IGZyb20gXCIuL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IHsgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0LCBzdGFydCwgZW5kIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb21wdXRlT2Zmc2V0cyhfcmVmKSB7XG4gIHZhciByZWZlcmVuY2UgPSBfcmVmLnJlZmVyZW5jZSxcbiAgICAgIGVsZW1lbnQgPSBfcmVmLmVsZW1lbnQsXG4gICAgICBwbGFjZW1lbnQgPSBfcmVmLnBsYWNlbWVudDtcbiAgdmFyIGJhc2VQbGFjZW1lbnQgPSBwbGFjZW1lbnQgPyBnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCkgOiBudWxsO1xuICB2YXIgdmFyaWF0aW9uID0gcGxhY2VtZW50ID8gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCkgOiBudWxsO1xuICB2YXIgY29tbW9uWCA9IHJlZmVyZW5jZS54ICsgcmVmZXJlbmNlLndpZHRoIC8gMiAtIGVsZW1lbnQud2lkdGggLyAyO1xuICB2YXIgY29tbW9uWSA9IHJlZmVyZW5jZS55ICsgcmVmZXJlbmNlLmhlaWdodCAvIDIgLSBlbGVtZW50LmhlaWdodCAvIDI7XG4gIHZhciBvZmZzZXRzO1xuXG4gIHN3aXRjaCAoYmFzZVBsYWNlbWVudCkge1xuICAgIGNhc2UgdG9wOlxuICAgICAgb2Zmc2V0cyA9IHtcbiAgICAgICAgeDogY29tbW9uWCxcbiAgICAgICAgeTogcmVmZXJlbmNlLnkgLSBlbGVtZW50LmhlaWdodFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBib3R0b206XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiBjb21tb25YLFxuICAgICAgICB5OiByZWZlcmVuY2UueSArIHJlZmVyZW5jZS5oZWlnaHRcbiAgICAgIH07XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgcmlnaHQ6XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiByZWZlcmVuY2UueCArIHJlZmVyZW5jZS53aWR0aCxcbiAgICAgICAgeTogY29tbW9uWVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBsZWZ0OlxuICAgICAgb2Zmc2V0cyA9IHtcbiAgICAgICAgeDogcmVmZXJlbmNlLnggLSBlbGVtZW50LndpZHRoLFxuICAgICAgICB5OiBjb21tb25ZXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgb2Zmc2V0cyA9IHtcbiAgICAgICAgeDogcmVmZXJlbmNlLngsXG4gICAgICAgIHk6IHJlZmVyZW5jZS55XG4gICAgICB9O1xuICB9XG5cbiAgdmFyIG1haW5BeGlzID0gYmFzZVBsYWNlbWVudCA/IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudChiYXNlUGxhY2VtZW50KSA6IG51bGw7XG5cbiAgaWYgKG1haW5BeGlzICE9IG51bGwpIHtcbiAgICB2YXIgbGVuID0gbWFpbkF4aXMgPT09ICd5JyA/ICdoZWlnaHQnIDogJ3dpZHRoJztcblxuICAgIHN3aXRjaCAodmFyaWF0aW9uKSB7XG4gICAgICBjYXNlIHN0YXJ0OlxuICAgICAgICBvZmZzZXRzW21haW5BeGlzXSA9IG9mZnNldHNbbWFpbkF4aXNdIC0gKHJlZmVyZW5jZVtsZW5dIC8gMiAtIGVsZW1lbnRbbGVuXSAvIDIpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBlbmQ6XG4gICAgICAgIG9mZnNldHNbbWFpbkF4aXNdID0gb2Zmc2V0c1ttYWluQXhpc10gKyAocmVmZXJlbmNlW2xlbl0gLyAyIC0gZWxlbWVudFtsZW5dIC8gMik7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvZmZzZXRzO1xufSIsImltcG9ydCBnZXRDbGlwcGluZ1JlY3QgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRDbGlwcGluZ1JlY3QuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCBjb21wdXRlT2Zmc2V0cyBmcm9tIFwiLi9jb21wdXRlT2Zmc2V0cy5qc1wiO1xuaW1wb3J0IHJlY3RUb0NsaWVudFJlY3QgZnJvbSBcIi4vcmVjdFRvQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IHsgY2xpcHBpbmdQYXJlbnRzLCByZWZlcmVuY2UsIHBvcHBlciwgYm90dG9tLCB0b3AsIHJpZ2h0LCBiYXNlUGxhY2VtZW50cywgdmlld3BvcnQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCB7IGlzRWxlbWVudCB9IGZyb20gXCIuLi9kb20tdXRpbHMvaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IG1lcmdlUGFkZGluZ09iamVjdCBmcm9tIFwiLi9tZXJnZVBhZGRpbmdPYmplY3QuanNcIjtcbmltcG9ydCBleHBhbmRUb0hhc2hNYXAgZnJvbSBcIi4vZXhwYW5kVG9IYXNoTWFwLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIHZhciBfb3B0aW9ucyA9IG9wdGlvbnMsXG4gICAgICBfb3B0aW9ucyRwbGFjZW1lbnQgPSBfb3B0aW9ucy5wbGFjZW1lbnQsXG4gICAgICBwbGFjZW1lbnQgPSBfb3B0aW9ucyRwbGFjZW1lbnQgPT09IHZvaWQgMCA/IHN0YXRlLnBsYWNlbWVudCA6IF9vcHRpb25zJHBsYWNlbWVudCxcbiAgICAgIF9vcHRpb25zJHN0cmF0ZWd5ID0gX29wdGlvbnMuc3RyYXRlZ3ksXG4gICAgICBzdHJhdGVneSA9IF9vcHRpb25zJHN0cmF0ZWd5ID09PSB2b2lkIDAgPyBzdGF0ZS5zdHJhdGVneSA6IF9vcHRpb25zJHN0cmF0ZWd5LFxuICAgICAgX29wdGlvbnMkYm91bmRhcnkgPSBfb3B0aW9ucy5ib3VuZGFyeSxcbiAgICAgIGJvdW5kYXJ5ID0gX29wdGlvbnMkYm91bmRhcnkgPT09IHZvaWQgMCA/IGNsaXBwaW5nUGFyZW50cyA6IF9vcHRpb25zJGJvdW5kYXJ5LFxuICAgICAgX29wdGlvbnMkcm9vdEJvdW5kYXJ5ID0gX29wdGlvbnMucm9vdEJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gX29wdGlvbnMkcm9vdEJvdW5kYXJ5ID09PSB2b2lkIDAgPyB2aWV3cG9ydCA6IF9vcHRpb25zJHJvb3RCb3VuZGFyeSxcbiAgICAgIF9vcHRpb25zJGVsZW1lbnRDb250ZSA9IF9vcHRpb25zLmVsZW1lbnRDb250ZXh0LFxuICAgICAgZWxlbWVudENvbnRleHQgPSBfb3B0aW9ucyRlbGVtZW50Q29udGUgPT09IHZvaWQgMCA/IHBvcHBlciA6IF9vcHRpb25zJGVsZW1lbnRDb250ZSxcbiAgICAgIF9vcHRpb25zJGFsdEJvdW5kYXJ5ID0gX29wdGlvbnMuYWx0Qm91bmRhcnksXG4gICAgICBhbHRCb3VuZGFyeSA9IF9vcHRpb25zJGFsdEJvdW5kYXJ5ID09PSB2b2lkIDAgPyBmYWxzZSA6IF9vcHRpb25zJGFsdEJvdW5kYXJ5LFxuICAgICAgX29wdGlvbnMkcGFkZGluZyA9IF9vcHRpb25zLnBhZGRpbmcsXG4gICAgICBwYWRkaW5nID0gX29wdGlvbnMkcGFkZGluZyA9PT0gdm9pZCAwID8gMCA6IF9vcHRpb25zJHBhZGRpbmc7XG4gIHZhciBwYWRkaW5nT2JqZWN0ID0gbWVyZ2VQYWRkaW5nT2JqZWN0KHR5cGVvZiBwYWRkaW5nICE9PSAnbnVtYmVyJyA/IHBhZGRpbmcgOiBleHBhbmRUb0hhc2hNYXAocGFkZGluZywgYmFzZVBsYWNlbWVudHMpKTtcbiAgdmFyIGFsdENvbnRleHQgPSBlbGVtZW50Q29udGV4dCA9PT0gcG9wcGVyID8gcmVmZXJlbmNlIDogcG9wcGVyO1xuICB2YXIgcG9wcGVyUmVjdCA9IHN0YXRlLnJlY3RzLnBvcHBlcjtcbiAgdmFyIGVsZW1lbnQgPSBzdGF0ZS5lbGVtZW50c1thbHRCb3VuZGFyeSA/IGFsdENvbnRleHQgOiBlbGVtZW50Q29udGV4dF07XG4gIHZhciBjbGlwcGluZ0NsaWVudFJlY3QgPSBnZXRDbGlwcGluZ1JlY3QoaXNFbGVtZW50KGVsZW1lbnQpID8gZWxlbWVudCA6IGVsZW1lbnQuY29udGV4dEVsZW1lbnQgfHwgZ2V0RG9jdW1lbnRFbGVtZW50KHN0YXRlLmVsZW1lbnRzLnBvcHBlciksIGJvdW5kYXJ5LCByb290Qm91bmRhcnksIHN0cmF0ZWd5KTtcbiAgdmFyIHJlZmVyZW5jZUNsaWVudFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3Qoc3RhdGUuZWxlbWVudHMucmVmZXJlbmNlKTtcbiAgdmFyIHBvcHBlck9mZnNldHMgPSBjb21wdXRlT2Zmc2V0cyh7XG4gICAgcmVmZXJlbmNlOiByZWZlcmVuY2VDbGllbnRSZWN0LFxuICAgIGVsZW1lbnQ6IHBvcHBlclJlY3QsXG4gICAgc3RyYXRlZ3k6ICdhYnNvbHV0ZScsXG4gICAgcGxhY2VtZW50OiBwbGFjZW1lbnRcbiAgfSk7XG4gIHZhciBwb3BwZXJDbGllbnRSZWN0ID0gcmVjdFRvQ2xpZW50UmVjdChPYmplY3QuYXNzaWduKHt9LCBwb3BwZXJSZWN0LCBwb3BwZXJPZmZzZXRzKSk7XG4gIHZhciBlbGVtZW50Q2xpZW50UmVjdCA9IGVsZW1lbnRDb250ZXh0ID09PSBwb3BwZXIgPyBwb3BwZXJDbGllbnRSZWN0IDogcmVmZXJlbmNlQ2xpZW50UmVjdDsgLy8gcG9zaXRpdmUgPSBvdmVyZmxvd2luZyB0aGUgY2xpcHBpbmcgcmVjdFxuICAvLyAwIG9yIG5lZ2F0aXZlID0gd2l0aGluIHRoZSBjbGlwcGluZyByZWN0XG5cbiAgdmFyIG92ZXJmbG93T2Zmc2V0cyA9IHtcbiAgICB0b3A6IGNsaXBwaW5nQ2xpZW50UmVjdC50b3AgLSBlbGVtZW50Q2xpZW50UmVjdC50b3AgKyBwYWRkaW5nT2JqZWN0LnRvcCxcbiAgICBib3R0b206IGVsZW1lbnRDbGllbnRSZWN0LmJvdHRvbSAtIGNsaXBwaW5nQ2xpZW50UmVjdC5ib3R0b20gKyBwYWRkaW5nT2JqZWN0LmJvdHRvbSxcbiAgICBsZWZ0OiBjbGlwcGluZ0NsaWVudFJlY3QubGVmdCAtIGVsZW1lbnRDbGllbnRSZWN0LmxlZnQgKyBwYWRkaW5nT2JqZWN0LmxlZnQsXG4gICAgcmlnaHQ6IGVsZW1lbnRDbGllbnRSZWN0LnJpZ2h0IC0gY2xpcHBpbmdDbGllbnRSZWN0LnJpZ2h0ICsgcGFkZGluZ09iamVjdC5yaWdodFxuICB9O1xuICB2YXIgb2Zmc2V0RGF0YSA9IHN0YXRlLm1vZGlmaWVyc0RhdGEub2Zmc2V0OyAvLyBPZmZzZXRzIGNhbiBiZSBhcHBsaWVkIG9ubHkgdG8gdGhlIHBvcHBlciBlbGVtZW50XG5cbiAgaWYgKGVsZW1lbnRDb250ZXh0ID09PSBwb3BwZXIgJiYgb2Zmc2V0RGF0YSkge1xuICAgIHZhciBvZmZzZXQgPSBvZmZzZXREYXRhW3BsYWNlbWVudF07XG4gICAgT2JqZWN0LmtleXMob3ZlcmZsb3dPZmZzZXRzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHZhciBtdWx0aXBseSA9IFtyaWdodCwgYm90dG9tXS5pbmRleE9mKGtleSkgPj0gMCA/IDEgOiAtMTtcbiAgICAgIHZhciBheGlzID0gW3RvcCwgYm90dG9tXS5pbmRleE9mKGtleSkgPj0gMCA/ICd5JyA6ICd4JztcbiAgICAgIG92ZXJmbG93T2Zmc2V0c1trZXldICs9IG9mZnNldFtheGlzXSAqIG11bHRpcGx5O1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG92ZXJmbG93T2Zmc2V0cztcbn0iLCJpbXBvcnQgZ2V0T3Bwb3NpdGVQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldE9wcG9zaXRlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGRldGVjdE92ZXJmbG93IGZyb20gXCIuLi91dGlscy9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IGNvbXB1dGVBdXRvUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9jb21wdXRlQXV0b1BsYWNlbWVudC5qc1wiO1xuaW1wb3J0IHsgYm90dG9tLCB0b3AsIHN0YXJ0LCByaWdodCwgbGVmdCwgYXV0byB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi4vdXRpbHMvZ2V0VmFyaWF0aW9uLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZnVuY3Rpb24gZ2V0RXhwYW5kZWRGYWxsYmFja1BsYWNlbWVudHMocGxhY2VtZW50KSB7XG4gIGlmIChnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCkgPT09IGF1dG8pIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICB2YXIgb3Bwb3NpdGVQbGFjZW1lbnQgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpO1xuICByZXR1cm4gW2dldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50KHBsYWNlbWVudCksIG9wcG9zaXRlUGxhY2VtZW50LCBnZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudChvcHBvc2l0ZVBsYWNlbWVudCldO1xufVxuXG5mdW5jdGlvbiBmbGlwKF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnMsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lO1xuXG4gIGlmIChzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdLl9za2lwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIF9vcHRpb25zJG1haW5BeGlzID0gb3B0aW9ucy5tYWluQXhpcyxcbiAgICAgIGNoZWNrTWFpbkF4aXMgPSBfb3B0aW9ucyRtYWluQXhpcyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJG1haW5BeGlzLFxuICAgICAgX29wdGlvbnMkYWx0QXhpcyA9IG9wdGlvbnMuYWx0QXhpcyxcbiAgICAgIGNoZWNrQWx0QXhpcyA9IF9vcHRpb25zJGFsdEF4aXMgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRhbHRBeGlzLFxuICAgICAgc3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzID0gb3B0aW9ucy5mYWxsYmFja1BsYWNlbWVudHMsXG4gICAgICBwYWRkaW5nID0gb3B0aW9ucy5wYWRkaW5nLFxuICAgICAgYm91bmRhcnkgPSBvcHRpb25zLmJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gb3B0aW9ucy5yb290Qm91bmRhcnksXG4gICAgICBhbHRCb3VuZGFyeSA9IG9wdGlvbnMuYWx0Qm91bmRhcnksXG4gICAgICBfb3B0aW9ucyRmbGlwVmFyaWF0aW8gPSBvcHRpb25zLmZsaXBWYXJpYXRpb25zLFxuICAgICAgZmxpcFZhcmlhdGlvbnMgPSBfb3B0aW9ucyRmbGlwVmFyaWF0aW8gPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRmbGlwVmFyaWF0aW8sXG4gICAgICBhbGxvd2VkQXV0b1BsYWNlbWVudHMgPSBvcHRpb25zLmFsbG93ZWRBdXRvUGxhY2VtZW50cztcbiAgdmFyIHByZWZlcnJlZFBsYWNlbWVudCA9IHN0YXRlLm9wdGlvbnMucGxhY2VtZW50O1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQocHJlZmVycmVkUGxhY2VtZW50KTtcbiAgdmFyIGlzQmFzZVBsYWNlbWVudCA9IGJhc2VQbGFjZW1lbnQgPT09IHByZWZlcnJlZFBsYWNlbWVudDtcbiAgdmFyIGZhbGxiYWNrUGxhY2VtZW50cyA9IHNwZWNpZmllZEZhbGxiYWNrUGxhY2VtZW50cyB8fCAoaXNCYXNlUGxhY2VtZW50IHx8ICFmbGlwVmFyaWF0aW9ucyA/IFtnZXRPcHBvc2l0ZVBsYWNlbWVudChwcmVmZXJyZWRQbGFjZW1lbnQpXSA6IGdldEV4cGFuZGVkRmFsbGJhY2tQbGFjZW1lbnRzKHByZWZlcnJlZFBsYWNlbWVudCkpO1xuICB2YXIgcGxhY2VtZW50cyA9IFtwcmVmZXJyZWRQbGFjZW1lbnRdLmNvbmNhdChmYWxsYmFja1BsYWNlbWVudHMpLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgICByZXR1cm4gYWNjLmNvbmNhdChnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCkgPT09IGF1dG8gPyBjb21wdXRlQXV0b1BsYWNlbWVudChzdGF0ZSwge1xuICAgICAgcGxhY2VtZW50OiBwbGFjZW1lbnQsXG4gICAgICBib3VuZGFyeTogYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnk6IHJvb3RCb3VuZGFyeSxcbiAgICAgIHBhZGRpbmc6IHBhZGRpbmcsXG4gICAgICBmbGlwVmFyaWF0aW9uczogZmxpcFZhcmlhdGlvbnMsXG4gICAgICBhbGxvd2VkQXV0b1BsYWNlbWVudHM6IGFsbG93ZWRBdXRvUGxhY2VtZW50c1xuICAgIH0pIDogcGxhY2VtZW50KTtcbiAgfSwgW10pO1xuICB2YXIgcmVmZXJlbmNlUmVjdCA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZTtcbiAgdmFyIHBvcHBlclJlY3QgPSBzdGF0ZS5yZWN0cy5wb3BwZXI7XG4gIHZhciBjaGVja3NNYXAgPSBuZXcgTWFwKCk7XG4gIHZhciBtYWtlRmFsbGJhY2tDaGVja3MgPSB0cnVlO1xuICB2YXIgZmlyc3RGaXR0aW5nUGxhY2VtZW50ID0gcGxhY2VtZW50c1swXTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHBsYWNlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcGxhY2VtZW50ID0gcGxhY2VtZW50c1tpXTtcblxuICAgIHZhciBfYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KTtcblxuICAgIHZhciBpc1N0YXJ0VmFyaWF0aW9uID0gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCkgPT09IHN0YXJ0O1xuICAgIHZhciBpc1ZlcnRpY2FsID0gW3RvcCwgYm90dG9tXS5pbmRleE9mKF9iYXNlUGxhY2VtZW50KSA+PSAwO1xuICAgIHZhciBsZW4gPSBpc1ZlcnRpY2FsID8gJ3dpZHRoJyA6ICdoZWlnaHQnO1xuICAgIHZhciBvdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudCxcbiAgICAgIGJvdW5kYXJ5OiBib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeTogcm9vdEJvdW5kYXJ5LFxuICAgICAgYWx0Qm91bmRhcnk6IGFsdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZzogcGFkZGluZ1xuICAgIH0pO1xuICAgIHZhciBtYWluVmFyaWF0aW9uU2lkZSA9IGlzVmVydGljYWwgPyBpc1N0YXJ0VmFyaWF0aW9uID8gcmlnaHQgOiBsZWZ0IDogaXNTdGFydFZhcmlhdGlvbiA/IGJvdHRvbSA6IHRvcDtcblxuICAgIGlmIChyZWZlcmVuY2VSZWN0W2xlbl0gPiBwb3BwZXJSZWN0W2xlbl0pIHtcbiAgICAgIG1haW5WYXJpYXRpb25TaWRlID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQobWFpblZhcmlhdGlvblNpZGUpO1xuICAgIH1cblxuICAgIHZhciBhbHRWYXJpYXRpb25TaWRlID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQobWFpblZhcmlhdGlvblNpZGUpO1xuICAgIHZhciBjaGVja3MgPSBbXTtcblxuICAgIGlmIChjaGVja01haW5BeGlzKSB7XG4gICAgICBjaGVja3MucHVzaChvdmVyZmxvd1tfYmFzZVBsYWNlbWVudF0gPD0gMCk7XG4gICAgfVxuXG4gICAgaWYgKGNoZWNrQWx0QXhpcykge1xuICAgICAgY2hlY2tzLnB1c2gob3ZlcmZsb3dbbWFpblZhcmlhdGlvblNpZGVdIDw9IDAsIG92ZXJmbG93W2FsdFZhcmlhdGlvblNpZGVdIDw9IDApO1xuICAgIH1cblxuICAgIGlmIChjaGVja3MuZXZlcnkoZnVuY3Rpb24gKGNoZWNrKSB7XG4gICAgICByZXR1cm4gY2hlY2s7XG4gICAgfSkpIHtcbiAgICAgIGZpcnN0Rml0dGluZ1BsYWNlbWVudCA9IHBsYWNlbWVudDtcbiAgICAgIG1ha2VGYWxsYmFja0NoZWNrcyA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY2hlY2tzTWFwLnNldChwbGFjZW1lbnQsIGNoZWNrcyk7XG4gIH1cblxuICBpZiAobWFrZUZhbGxiYWNrQ2hlY2tzKSB7XG4gICAgLy8gYDJgIG1heSBiZSBkZXNpcmVkIGluIHNvbWUgY2FzZXMg4oCTIHJlc2VhcmNoIGxhdGVyXG4gICAgdmFyIG51bWJlck9mQ2hlY2tzID0gZmxpcFZhcmlhdGlvbnMgPyAzIDogMTtcblxuICAgIHZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29wKF9pKSB7XG4gICAgICB2YXIgZml0dGluZ1BsYWNlbWVudCA9IHBsYWNlbWVudHMuZmluZChmdW5jdGlvbiAocGxhY2VtZW50KSB7XG4gICAgICAgIHZhciBjaGVja3MgPSBjaGVja3NNYXAuZ2V0KHBsYWNlbWVudCk7XG5cbiAgICAgICAgaWYgKGNoZWNrcykge1xuICAgICAgICAgIHJldHVybiBjaGVja3Muc2xpY2UoMCwgX2kpLmV2ZXJ5KGZ1bmN0aW9uIChjaGVjaykge1xuICAgICAgICAgICAgcmV0dXJuIGNoZWNrO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKGZpdHRpbmdQbGFjZW1lbnQpIHtcbiAgICAgICAgZmlyc3RGaXR0aW5nUGxhY2VtZW50ID0gZml0dGluZ1BsYWNlbWVudDtcbiAgICAgICAgcmV0dXJuIFwiYnJlYWtcIjtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZm9yICh2YXIgX2kgPSBudW1iZXJPZkNoZWNrczsgX2kgPiAwOyBfaS0tKSB7XG4gICAgICB2YXIgX3JldCA9IF9sb29wKF9pKTtcblxuICAgICAgaWYgKF9yZXQgPT09IFwiYnJlYWtcIikgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaWYgKHN0YXRlLnBsYWNlbWVudCAhPT0gZmlyc3RGaXR0aW5nUGxhY2VtZW50KSB7XG4gICAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXS5fc2tpcCA9IHRydWU7XG4gICAgc3RhdGUucGxhY2VtZW50ID0gZmlyc3RGaXR0aW5nUGxhY2VtZW50O1xuICAgIHN0YXRlLnJlc2V0ID0gdHJ1ZTtcbiAgfVxufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnZmxpcCcsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnbWFpbicsXG4gIGZuOiBmbGlwLFxuICByZXF1aXJlc0lmRXhpc3RzOiBbJ29mZnNldCddLFxuICBkYXRhOiB7XG4gICAgX3NraXA6IGZhbHNlXG4gIH1cbn07IiwiaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi9nZXRWYXJpYXRpb24uanNcIjtcbmltcG9ydCB7IHZhcmlhdGlvblBsYWNlbWVudHMsIGJhc2VQbGFjZW1lbnRzLCBwbGFjZW1lbnRzIGFzIGFsbFBsYWNlbWVudHMgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBkZXRlY3RPdmVyZmxvdyBmcm9tIFwiLi9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4vZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29tcHV0ZUF1dG9QbGFjZW1lbnQoc3RhdGUsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIHZhciBfb3B0aW9ucyA9IG9wdGlvbnMsXG4gICAgICBwbGFjZW1lbnQgPSBfb3B0aW9ucy5wbGFjZW1lbnQsXG4gICAgICBib3VuZGFyeSA9IF9vcHRpb25zLmJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gX29wdGlvbnMucm9vdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZyA9IF9vcHRpb25zLnBhZGRpbmcsXG4gICAgICBmbGlwVmFyaWF0aW9ucyA9IF9vcHRpb25zLmZsaXBWYXJpYXRpb25zLFxuICAgICAgX29wdGlvbnMkYWxsb3dlZEF1dG9QID0gX29wdGlvbnMuYWxsb3dlZEF1dG9QbGFjZW1lbnRzLFxuICAgICAgYWxsb3dlZEF1dG9QbGFjZW1lbnRzID0gX29wdGlvbnMkYWxsb3dlZEF1dG9QID09PSB2b2lkIDAgPyBhbGxQbGFjZW1lbnRzIDogX29wdGlvbnMkYWxsb3dlZEF1dG9QO1xuICB2YXIgdmFyaWF0aW9uID0gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCk7XG4gIHZhciBwbGFjZW1lbnRzID0gdmFyaWF0aW9uID8gZmxpcFZhcmlhdGlvbnMgPyB2YXJpYXRpb25QbGFjZW1lbnRzIDogdmFyaWF0aW9uUGxhY2VtZW50cy5maWx0ZXIoZnVuY3Rpb24gKHBsYWNlbWVudCkge1xuICAgIHJldHVybiBnZXRWYXJpYXRpb24ocGxhY2VtZW50KSA9PT0gdmFyaWF0aW9uO1xuICB9KSA6IGJhc2VQbGFjZW1lbnRzO1xuICB2YXIgYWxsb3dlZFBsYWNlbWVudHMgPSBwbGFjZW1lbnRzLmZpbHRlcihmdW5jdGlvbiAocGxhY2VtZW50KSB7XG4gICAgcmV0dXJuIGFsbG93ZWRBdXRvUGxhY2VtZW50cy5pbmRleE9mKHBsYWNlbWVudCkgPj0gMDtcbiAgfSk7XG5cbiAgaWYgKGFsbG93ZWRQbGFjZW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIGFsbG93ZWRQbGFjZW1lbnRzID0gcGxhY2VtZW50cztcbiAgfSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS10eXBlXTogRmxvdyBzZWVtcyB0byBoYXZlIHByb2JsZW1zIHdpdGggdHdvIGFycmF5IHVuaW9ucy4uLlxuXG5cbiAgdmFyIG92ZXJmbG93cyA9IGFsbG93ZWRQbGFjZW1lbnRzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgICBhY2NbcGxhY2VtZW50XSA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudCxcbiAgICAgIGJvdW5kYXJ5OiBib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeTogcm9vdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZzogcGFkZGluZ1xuICAgIH0pW2dldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KV07XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xuICByZXR1cm4gT2JqZWN0LmtleXMob3ZlcmZsb3dzKS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIG92ZXJmbG93c1thXSAtIG92ZXJmbG93c1tiXTtcbiAgfSk7XG59IiwiaW1wb3J0IHsgdG9wLCBib3R0b20sIGxlZnQsIHJpZ2h0IH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgZGV0ZWN0T3ZlcmZsb3cgZnJvbSBcIi4uL3V0aWxzL2RldGVjdE92ZXJmbG93LmpzXCI7XG5cbmZ1bmN0aW9uIGdldFNpZGVPZmZzZXRzKG92ZXJmbG93LCByZWN0LCBwcmV2ZW50ZWRPZmZzZXRzKSB7XG4gIGlmIChwcmV2ZW50ZWRPZmZzZXRzID09PSB2b2lkIDApIHtcbiAgICBwcmV2ZW50ZWRPZmZzZXRzID0ge1xuICAgICAgeDogMCxcbiAgICAgIHk6IDBcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0b3A6IG92ZXJmbG93LnRvcCAtIHJlY3QuaGVpZ2h0IC0gcHJldmVudGVkT2Zmc2V0cy55LFxuICAgIHJpZ2h0OiBvdmVyZmxvdy5yaWdodCAtIHJlY3Qud2lkdGggKyBwcmV2ZW50ZWRPZmZzZXRzLngsXG4gICAgYm90dG9tOiBvdmVyZmxvdy5ib3R0b20gLSByZWN0LmhlaWdodCArIHByZXZlbnRlZE9mZnNldHMueSxcbiAgICBsZWZ0OiBvdmVyZmxvdy5sZWZ0IC0gcmVjdC53aWR0aCAtIHByZXZlbnRlZE9mZnNldHMueFxuICB9O1xufVxuXG5mdW5jdGlvbiBpc0FueVNpZGVGdWxseUNsaXBwZWQob3ZlcmZsb3cpIHtcbiAgcmV0dXJuIFt0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnRdLnNvbWUoZnVuY3Rpb24gKHNpZGUpIHtcbiAgICByZXR1cm4gb3ZlcmZsb3dbc2lkZV0gPj0gMDtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGhpZGUoX3JlZikge1xuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgbmFtZSA9IF9yZWYubmFtZTtcbiAgdmFyIHJlZmVyZW5jZVJlY3QgPSBzdGF0ZS5yZWN0cy5yZWZlcmVuY2U7XG4gIHZhciBwb3BwZXJSZWN0ID0gc3RhdGUucmVjdHMucG9wcGVyO1xuICB2YXIgcHJldmVudGVkT2Zmc2V0cyA9IHN0YXRlLm1vZGlmaWVyc0RhdGEucHJldmVudE92ZXJmbG93O1xuICB2YXIgcmVmZXJlbmNlT3ZlcmZsb3cgPSBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgIGVsZW1lbnRDb250ZXh0OiAncmVmZXJlbmNlJ1xuICB9KTtcbiAgdmFyIHBvcHBlckFsdE92ZXJmbG93ID0gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICBhbHRCb3VuZGFyeTogdHJ1ZVxuICB9KTtcbiAgdmFyIHJlZmVyZW5jZUNsaXBwaW5nT2Zmc2V0cyA9IGdldFNpZGVPZmZzZXRzKHJlZmVyZW5jZU92ZXJmbG93LCByZWZlcmVuY2VSZWN0KTtcbiAgdmFyIHBvcHBlckVzY2FwZU9mZnNldHMgPSBnZXRTaWRlT2Zmc2V0cyhwb3BwZXJBbHRPdmVyZmxvdywgcG9wcGVyUmVjdCwgcHJldmVudGVkT2Zmc2V0cyk7XG4gIHZhciBpc1JlZmVyZW5jZUhpZGRlbiA9IGlzQW55U2lkZUZ1bGx5Q2xpcHBlZChyZWZlcmVuY2VDbGlwcGluZ09mZnNldHMpO1xuICB2YXIgaGFzUG9wcGVyRXNjYXBlZCA9IGlzQW55U2lkZUZ1bGx5Q2xpcHBlZChwb3BwZXJFc2NhcGVPZmZzZXRzKTtcbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IHtcbiAgICByZWZlcmVuY2VDbGlwcGluZ09mZnNldHM6IHJlZmVyZW5jZUNsaXBwaW5nT2Zmc2V0cyxcbiAgICBwb3BwZXJFc2NhcGVPZmZzZXRzOiBwb3BwZXJFc2NhcGVPZmZzZXRzLFxuICAgIGlzUmVmZXJlbmNlSGlkZGVuOiBpc1JlZmVyZW5jZUhpZGRlbixcbiAgICBoYXNQb3BwZXJFc2NhcGVkOiBoYXNQb3BwZXJFc2NhcGVkXG4gIH07XG4gIHN0YXRlLmF0dHJpYnV0ZXMucG9wcGVyID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuYXR0cmlidXRlcy5wb3BwZXIsIHtcbiAgICAnZGF0YS1wb3BwZXItcmVmZXJlbmNlLWhpZGRlbic6IGlzUmVmZXJlbmNlSGlkZGVuLFxuICAgICdkYXRhLXBvcHBlci1lc2NhcGVkJzogaGFzUG9wcGVyRXNjYXBlZFxuICB9KTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2hpZGUnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICByZXF1aXJlc0lmRXhpc3RzOiBbJ3ByZXZlbnRPdmVyZmxvdyddLFxuICBmbjogaGlkZVxufTsiLCJpbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IHsgdG9wLCBsZWZ0LCByaWdodCwgcGxhY2VtZW50cyB9IGZyb20gXCIuLi9lbnVtcy5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCBmdW5jdGlvbiBkaXN0YW5jZUFuZFNraWRkaW5nVG9YWShwbGFjZW1lbnQsIHJlY3RzLCBvZmZzZXQpIHtcbiAgdmFyIGJhc2VQbGFjZW1lbnQgPSBnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCk7XG4gIHZhciBpbnZlcnREaXN0YW5jZSA9IFtsZWZ0LCB0b3BdLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgPj0gMCA/IC0xIDogMTtcblxuICB2YXIgX3JlZiA9IHR5cGVvZiBvZmZzZXQgPT09ICdmdW5jdGlvbicgPyBvZmZzZXQoT2JqZWN0LmFzc2lnbih7fSwgcmVjdHMsIHtcbiAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudFxuICB9KSkgOiBvZmZzZXQsXG4gICAgICBza2lkZGluZyA9IF9yZWZbMF0sXG4gICAgICBkaXN0YW5jZSA9IF9yZWZbMV07XG5cbiAgc2tpZGRpbmcgPSBza2lkZGluZyB8fCAwO1xuICBkaXN0YW5jZSA9IChkaXN0YW5jZSB8fCAwKSAqIGludmVydERpc3RhbmNlO1xuICByZXR1cm4gW2xlZnQsIHJpZ2h0XS5pbmRleE9mKGJhc2VQbGFjZW1lbnQpID49IDAgPyB7XG4gICAgeDogZGlzdGFuY2UsXG4gICAgeTogc2tpZGRpbmdcbiAgfSA6IHtcbiAgICB4OiBza2lkZGluZyxcbiAgICB5OiBkaXN0YW5jZVxuICB9O1xufVxuXG5mdW5jdGlvbiBvZmZzZXQoX3JlZjIpIHtcbiAgdmFyIHN0YXRlID0gX3JlZjIuc3RhdGUsXG4gICAgICBvcHRpb25zID0gX3JlZjIub3B0aW9ucyxcbiAgICAgIG5hbWUgPSBfcmVmMi5uYW1lO1xuICB2YXIgX29wdGlvbnMkb2Zmc2V0ID0gb3B0aW9ucy5vZmZzZXQsXG4gICAgICBvZmZzZXQgPSBfb3B0aW9ucyRvZmZzZXQgPT09IHZvaWQgMCA/IFswLCAwXSA6IF9vcHRpb25zJG9mZnNldDtcbiAgdmFyIGRhdGEgPSBwbGFjZW1lbnRzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgICBhY2NbcGxhY2VtZW50XSA9IGRpc3RhbmNlQW5kU2tpZGRpbmdUb1hZKHBsYWNlbWVudCwgc3RhdGUucmVjdHMsIG9mZnNldCk7XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xuICB2YXIgX2RhdGEkc3RhdGUkcGxhY2VtZW50ID0gZGF0YVtzdGF0ZS5wbGFjZW1lbnRdLFxuICAgICAgeCA9IF9kYXRhJHN0YXRlJHBsYWNlbWVudC54LFxuICAgICAgeSA9IF9kYXRhJHN0YXRlJHBsYWNlbWVudC55O1xuXG4gIGlmIChzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMgIT0gbnVsbCkge1xuICAgIHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cy54ICs9IHg7XG4gICAgc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzLnkgKz0geTtcbiAgfVxuXG4gIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0gPSBkYXRhO1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnb2Zmc2V0JyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdtYWluJyxcbiAgcmVxdWlyZXM6IFsncG9wcGVyT2Zmc2V0cyddLFxuICBmbjogb2Zmc2V0XG59OyIsImltcG9ydCBjb21wdXRlT2Zmc2V0cyBmcm9tIFwiLi4vdXRpbHMvY29tcHV0ZU9mZnNldHMuanNcIjtcblxuZnVuY3Rpb24gcG9wcGVyT2Zmc2V0cyhfcmVmKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGUsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lO1xuICAvLyBPZmZzZXRzIGFyZSB0aGUgYWN0dWFsIHBvc2l0aW9uIHRoZSBwb3BwZXIgbmVlZHMgdG8gaGF2ZSB0byBiZVxuICAvLyBwcm9wZXJseSBwb3NpdGlvbmVkIG5lYXIgaXRzIHJlZmVyZW5jZSBlbGVtZW50XG4gIC8vIFRoaXMgaXMgdGhlIG1vc3QgYmFzaWMgcGxhY2VtZW50LCBhbmQgd2lsbCBiZSBhZGp1c3RlZCBieVxuICAvLyB0aGUgbW9kaWZpZXJzIGluIHRoZSBuZXh0IHN0ZXBcbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IGNvbXB1dGVPZmZzZXRzKHtcbiAgICByZWZlcmVuY2U6IHN0YXRlLnJlY3RzLnJlZmVyZW5jZSxcbiAgICBlbGVtZW50OiBzdGF0ZS5yZWN0cy5wb3BwZXIsXG4gICAgc3RyYXRlZ3k6ICdhYnNvbHV0ZScsXG4gICAgcGxhY2VtZW50OiBzdGF0ZS5wbGFjZW1lbnRcbiAgfSk7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdwb3BwZXJPZmZzZXRzJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdyZWFkJyxcbiAgZm46IHBvcHBlck9mZnNldHMsXG4gIGRhdGE6IHt9XG59OyIsImltcG9ydCB7IHRvcCwgbGVmdCwgcmlnaHQsIGJvdHRvbSwgc3RhcnQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRBbHRBeGlzIGZyb20gXCIuLi91dGlscy9nZXRBbHRBeGlzLmpzXCI7XG5pbXBvcnQgeyB3aXRoaW4sIHdpdGhpbk1heENsYW1wIH0gZnJvbSBcIi4uL3V0aWxzL3dpdGhpbi5qc1wiO1xuaW1wb3J0IGdldExheW91dFJlY3QgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRMYXlvdXRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0T2Zmc2V0UGFyZW50LmpzXCI7XG5pbXBvcnQgZGV0ZWN0T3ZlcmZsb3cgZnJvbSBcIi4uL3V0aWxzL2RldGVjdE92ZXJmbG93LmpzXCI7XG5pbXBvcnQgZ2V0VmFyaWF0aW9uIGZyb20gXCIuLi91dGlscy9nZXRWYXJpYXRpb24uanNcIjtcbmltcG9ydCBnZXRGcmVzaFNpZGVPYmplY3QgZnJvbSBcIi4uL3V0aWxzL2dldEZyZXNoU2lkZU9iamVjdC5qc1wiO1xuaW1wb3J0IHsgbWluIGFzIG1hdGhNaW4sIG1heCBhcyBtYXRoTWF4IH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjtcblxuZnVuY3Rpb24gcHJldmVudE92ZXJmbG93KF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnMsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lO1xuICB2YXIgX29wdGlvbnMkbWFpbkF4aXMgPSBvcHRpb25zLm1haW5BeGlzLFxuICAgICAgY2hlY2tNYWluQXhpcyA9IF9vcHRpb25zJG1haW5BeGlzID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkbWFpbkF4aXMsXG4gICAgICBfb3B0aW9ucyRhbHRBeGlzID0gb3B0aW9ucy5hbHRBeGlzLFxuICAgICAgY2hlY2tBbHRBeGlzID0gX29wdGlvbnMkYWx0QXhpcyA9PT0gdm9pZCAwID8gZmFsc2UgOiBfb3B0aW9ucyRhbHRBeGlzLFxuICAgICAgYm91bmRhcnkgPSBvcHRpb25zLmJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gb3B0aW9ucy5yb290Qm91bmRhcnksXG4gICAgICBhbHRCb3VuZGFyeSA9IG9wdGlvbnMuYWx0Qm91bmRhcnksXG4gICAgICBwYWRkaW5nID0gb3B0aW9ucy5wYWRkaW5nLFxuICAgICAgX29wdGlvbnMkdGV0aGVyID0gb3B0aW9ucy50ZXRoZXIsXG4gICAgICB0ZXRoZXIgPSBfb3B0aW9ucyR0ZXRoZXIgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyR0ZXRoZXIsXG4gICAgICBfb3B0aW9ucyR0ZXRoZXJPZmZzZXQgPSBvcHRpb25zLnRldGhlck9mZnNldCxcbiAgICAgIHRldGhlck9mZnNldCA9IF9vcHRpb25zJHRldGhlck9mZnNldCA9PT0gdm9pZCAwID8gMCA6IF9vcHRpb25zJHRldGhlck9mZnNldDtcbiAgdmFyIG92ZXJmbG93ID0gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICBib3VuZGFyeTogYm91bmRhcnksXG4gICAgcm9vdEJvdW5kYXJ5OiByb290Qm91bmRhcnksXG4gICAgcGFkZGluZzogcGFkZGluZyxcbiAgICBhbHRCb3VuZGFyeTogYWx0Qm91bmRhcnlcbiAgfSk7XG4gIHZhciBiYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChzdGF0ZS5wbGFjZW1lbnQpO1xuICB2YXIgdmFyaWF0aW9uID0gZ2V0VmFyaWF0aW9uKHN0YXRlLnBsYWNlbWVudCk7XG4gIHZhciBpc0Jhc2VQbGFjZW1lbnQgPSAhdmFyaWF0aW9uO1xuICB2YXIgbWFpbkF4aXMgPSBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQoYmFzZVBsYWNlbWVudCk7XG4gIHZhciBhbHRBeGlzID0gZ2V0QWx0QXhpcyhtYWluQXhpcyk7XG4gIHZhciBwb3BwZXJPZmZzZXRzID0gc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzO1xuICB2YXIgcmVmZXJlbmNlUmVjdCA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZTtcbiAgdmFyIHBvcHBlclJlY3QgPSBzdGF0ZS5yZWN0cy5wb3BwZXI7XG4gIHZhciB0ZXRoZXJPZmZzZXRWYWx1ZSA9IHR5cGVvZiB0ZXRoZXJPZmZzZXQgPT09ICdmdW5jdGlvbicgPyB0ZXRoZXJPZmZzZXQoT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUucmVjdHMsIHtcbiAgICBwbGFjZW1lbnQ6IHN0YXRlLnBsYWNlbWVudFxuICB9KSkgOiB0ZXRoZXJPZmZzZXQ7XG4gIHZhciBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUgPSB0eXBlb2YgdGV0aGVyT2Zmc2V0VmFsdWUgPT09ICdudW1iZXInID8ge1xuICAgIG1haW5BeGlzOiB0ZXRoZXJPZmZzZXRWYWx1ZSxcbiAgICBhbHRBeGlzOiB0ZXRoZXJPZmZzZXRWYWx1ZVxuICB9IDogT2JqZWN0LmFzc2lnbih7XG4gICAgbWFpbkF4aXM6IDAsXG4gICAgYWx0QXhpczogMFxuICB9LCB0ZXRoZXJPZmZzZXRWYWx1ZSk7XG4gIHZhciBvZmZzZXRNb2RpZmllclN0YXRlID0gc3RhdGUubW9kaWZpZXJzRGF0YS5vZmZzZXQgPyBzdGF0ZS5tb2RpZmllcnNEYXRhLm9mZnNldFtzdGF0ZS5wbGFjZW1lbnRdIDogbnVsbDtcbiAgdmFyIGRhdGEgPSB7XG4gICAgeDogMCxcbiAgICB5OiAwXG4gIH07XG5cbiAgaWYgKCFwb3BwZXJPZmZzZXRzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGNoZWNrTWFpbkF4aXMpIHtcbiAgICB2YXIgX29mZnNldE1vZGlmaWVyU3RhdGUkO1xuXG4gICAgdmFyIG1haW5TaWRlID0gbWFpbkF4aXMgPT09ICd5JyA/IHRvcCA6IGxlZnQ7XG4gICAgdmFyIGFsdFNpZGUgPSBtYWluQXhpcyA9PT0gJ3knID8gYm90dG9tIDogcmlnaHQ7XG4gICAgdmFyIGxlbiA9IG1haW5BeGlzID09PSAneScgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG4gICAgdmFyIG9mZnNldCA9IHBvcHBlck9mZnNldHNbbWFpbkF4aXNdO1xuICAgIHZhciBtaW4gPSBvZmZzZXQgKyBvdmVyZmxvd1ttYWluU2lkZV07XG4gICAgdmFyIG1heCA9IG9mZnNldCAtIG92ZXJmbG93W2FsdFNpZGVdO1xuICAgIHZhciBhZGRpdGl2ZSA9IHRldGhlciA/IC1wb3BwZXJSZWN0W2xlbl0gLyAyIDogMDtcbiAgICB2YXIgbWluTGVuID0gdmFyaWF0aW9uID09PSBzdGFydCA/IHJlZmVyZW5jZVJlY3RbbGVuXSA6IHBvcHBlclJlY3RbbGVuXTtcbiAgICB2YXIgbWF4TGVuID0gdmFyaWF0aW9uID09PSBzdGFydCA/IC1wb3BwZXJSZWN0W2xlbl0gOiAtcmVmZXJlbmNlUmVjdFtsZW5dOyAvLyBXZSBuZWVkIHRvIGluY2x1ZGUgdGhlIGFycm93IGluIHRoZSBjYWxjdWxhdGlvbiBzbyB0aGUgYXJyb3cgZG9lc24ndCBnb1xuICAgIC8vIG91dHNpZGUgdGhlIHJlZmVyZW5jZSBib3VuZHNcblxuICAgIHZhciBhcnJvd0VsZW1lbnQgPSBzdGF0ZS5lbGVtZW50cy5hcnJvdztcbiAgICB2YXIgYXJyb3dSZWN0ID0gdGV0aGVyICYmIGFycm93RWxlbWVudCA/IGdldExheW91dFJlY3QoYXJyb3dFbGVtZW50KSA6IHtcbiAgICAgIHdpZHRoOiAwLFxuICAgICAgaGVpZ2h0OiAwXG4gICAgfTtcbiAgICB2YXIgYXJyb3dQYWRkaW5nT2JqZWN0ID0gc3RhdGUubW9kaWZpZXJzRGF0YVsnYXJyb3cjcGVyc2lzdGVudCddID8gc3RhdGUubW9kaWZpZXJzRGF0YVsnYXJyb3cjcGVyc2lzdGVudCddLnBhZGRpbmcgOiBnZXRGcmVzaFNpZGVPYmplY3QoKTtcbiAgICB2YXIgYXJyb3dQYWRkaW5nTWluID0gYXJyb3dQYWRkaW5nT2JqZWN0W21haW5TaWRlXTtcbiAgICB2YXIgYXJyb3dQYWRkaW5nTWF4ID0gYXJyb3dQYWRkaW5nT2JqZWN0W2FsdFNpZGVdOyAvLyBJZiB0aGUgcmVmZXJlbmNlIGxlbmd0aCBpcyBzbWFsbGVyIHRoYW4gdGhlIGFycm93IGxlbmd0aCwgd2UgZG9uJ3Qgd2FudFxuICAgIC8vIHRvIGluY2x1ZGUgaXRzIGZ1bGwgc2l6ZSBpbiB0aGUgY2FsY3VsYXRpb24uIElmIHRoZSByZWZlcmVuY2UgaXMgc21hbGxcbiAgICAvLyBhbmQgbmVhciB0aGUgZWRnZSBvZiBhIGJvdW5kYXJ5LCB0aGUgcG9wcGVyIGNhbiBvdmVyZmxvdyBldmVuIGlmIHRoZVxuICAgIC8vIHJlZmVyZW5jZSBpcyBub3Qgb3ZlcmZsb3dpbmcgYXMgd2VsbCAoZS5nLiB2aXJ0dWFsIGVsZW1lbnRzIHdpdGggbm9cbiAgICAvLyB3aWR0aCBvciBoZWlnaHQpXG5cbiAgICB2YXIgYXJyb3dMZW4gPSB3aXRoaW4oMCwgcmVmZXJlbmNlUmVjdFtsZW5dLCBhcnJvd1JlY3RbbGVuXSk7XG4gICAgdmFyIG1pbk9mZnNldCA9IGlzQmFzZVBsYWNlbWVudCA/IHJlZmVyZW5jZVJlY3RbbGVuXSAvIDIgLSBhZGRpdGl2ZSAtIGFycm93TGVuIC0gYXJyb3dQYWRkaW5nTWluIC0gbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLm1haW5BeGlzIDogbWluTGVuIC0gYXJyb3dMZW4gLSBhcnJvd1BhZGRpbmdNaW4gLSBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUubWFpbkF4aXM7XG4gICAgdmFyIG1heE9mZnNldCA9IGlzQmFzZVBsYWNlbWVudCA/IC1yZWZlcmVuY2VSZWN0W2xlbl0gLyAyICsgYWRkaXRpdmUgKyBhcnJvd0xlbiArIGFycm93UGFkZGluZ01heCArIG5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZS5tYWluQXhpcyA6IG1heExlbiArIGFycm93TGVuICsgYXJyb3dQYWRkaW5nTWF4ICsgbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLm1haW5BeGlzO1xuICAgIHZhciBhcnJvd09mZnNldFBhcmVudCA9IHN0YXRlLmVsZW1lbnRzLmFycm93ICYmIGdldE9mZnNldFBhcmVudChzdGF0ZS5lbGVtZW50cy5hcnJvdyk7XG4gICAgdmFyIGNsaWVudE9mZnNldCA9IGFycm93T2Zmc2V0UGFyZW50ID8gbWFpbkF4aXMgPT09ICd5JyA/IGFycm93T2Zmc2V0UGFyZW50LmNsaWVudFRvcCB8fCAwIDogYXJyb3dPZmZzZXRQYXJlbnQuY2xpZW50TGVmdCB8fCAwIDogMDtcbiAgICB2YXIgb2Zmc2V0TW9kaWZpZXJWYWx1ZSA9IChfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQgPSBvZmZzZXRNb2RpZmllclN0YXRlID09IG51bGwgPyB2b2lkIDAgOiBvZmZzZXRNb2RpZmllclN0YXRlW21haW5BeGlzXSkgIT0gbnVsbCA/IF9vZmZzZXRNb2RpZmllclN0YXRlJCA6IDA7XG4gICAgdmFyIHRldGhlck1pbiA9IG9mZnNldCArIG1pbk9mZnNldCAtIG9mZnNldE1vZGlmaWVyVmFsdWUgLSBjbGllbnRPZmZzZXQ7XG4gICAgdmFyIHRldGhlck1heCA9IG9mZnNldCArIG1heE9mZnNldCAtIG9mZnNldE1vZGlmaWVyVmFsdWU7XG4gICAgdmFyIHByZXZlbnRlZE9mZnNldCA9IHdpdGhpbih0ZXRoZXIgPyBtYXRoTWluKG1pbiwgdGV0aGVyTWluKSA6IG1pbiwgb2Zmc2V0LCB0ZXRoZXIgPyBtYXRoTWF4KG1heCwgdGV0aGVyTWF4KSA6IG1heCk7XG4gICAgcG9wcGVyT2Zmc2V0c1ttYWluQXhpc10gPSBwcmV2ZW50ZWRPZmZzZXQ7XG4gICAgZGF0YVttYWluQXhpc10gPSBwcmV2ZW50ZWRPZmZzZXQgLSBvZmZzZXQ7XG4gIH1cblxuICBpZiAoY2hlY2tBbHRBeGlzKSB7XG4gICAgdmFyIF9vZmZzZXRNb2RpZmllclN0YXRlJDI7XG5cbiAgICB2YXIgX21haW5TaWRlID0gbWFpbkF4aXMgPT09ICd4JyA/IHRvcCA6IGxlZnQ7XG5cbiAgICB2YXIgX2FsdFNpZGUgPSBtYWluQXhpcyA9PT0gJ3gnID8gYm90dG9tIDogcmlnaHQ7XG5cbiAgICB2YXIgX29mZnNldCA9IHBvcHBlck9mZnNldHNbYWx0QXhpc107XG5cbiAgICB2YXIgX2xlbiA9IGFsdEF4aXMgPT09ICd5JyA/ICdoZWlnaHQnIDogJ3dpZHRoJztcblxuICAgIHZhciBfbWluID0gX29mZnNldCArIG92ZXJmbG93W19tYWluU2lkZV07XG5cbiAgICB2YXIgX21heCA9IF9vZmZzZXQgLSBvdmVyZmxvd1tfYWx0U2lkZV07XG5cbiAgICB2YXIgaXNPcmlnaW5TaWRlID0gW3RvcCwgbGVmdF0uaW5kZXhPZihiYXNlUGxhY2VtZW50KSAhPT0gLTE7XG5cbiAgICB2YXIgX29mZnNldE1vZGlmaWVyVmFsdWUgPSAoX29mZnNldE1vZGlmaWVyU3RhdGUkMiA9IG9mZnNldE1vZGlmaWVyU3RhdGUgPT0gbnVsbCA/IHZvaWQgMCA6IG9mZnNldE1vZGlmaWVyU3RhdGVbYWx0QXhpc10pICE9IG51bGwgPyBfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQyIDogMDtcblxuICAgIHZhciBfdGV0aGVyTWluID0gaXNPcmlnaW5TaWRlID8gX21pbiA6IF9vZmZzZXQgLSByZWZlcmVuY2VSZWN0W19sZW5dIC0gcG9wcGVyUmVjdFtfbGVuXSAtIF9vZmZzZXRNb2RpZmllclZhbHVlICsgbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLmFsdEF4aXM7XG5cbiAgICB2YXIgX3RldGhlck1heCA9IGlzT3JpZ2luU2lkZSA/IF9vZmZzZXQgKyByZWZlcmVuY2VSZWN0W19sZW5dICsgcG9wcGVyUmVjdFtfbGVuXSAtIF9vZmZzZXRNb2RpZmllclZhbHVlIC0gbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLmFsdEF4aXMgOiBfbWF4O1xuXG4gICAgdmFyIF9wcmV2ZW50ZWRPZmZzZXQgPSB0ZXRoZXIgJiYgaXNPcmlnaW5TaWRlID8gd2l0aGluTWF4Q2xhbXAoX3RldGhlck1pbiwgX29mZnNldCwgX3RldGhlck1heCkgOiB3aXRoaW4odGV0aGVyID8gX3RldGhlck1pbiA6IF9taW4sIF9vZmZzZXQsIHRldGhlciA/IF90ZXRoZXJNYXggOiBfbWF4KTtcblxuICAgIHBvcHBlck9mZnNldHNbYWx0QXhpc10gPSBfcHJldmVudGVkT2Zmc2V0O1xuICAgIGRhdGFbYWx0QXhpc10gPSBfcHJldmVudGVkT2Zmc2V0IC0gX29mZnNldDtcbiAgfVxuXG4gIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0gPSBkYXRhO1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAncHJldmVudE92ZXJmbG93JyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdtYWluJyxcbiAgZm46IHByZXZlbnRPdmVyZmxvdyxcbiAgcmVxdWlyZXNJZkV4aXN0czogWydvZmZzZXQnXVxufTsiLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRBbHRBeGlzKGF4aXMpIHtcbiAgcmV0dXJuIGF4aXMgPT09ICd4JyA/ICd5JyA6ICd4Jztcbn0iLCJpbXBvcnQgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGZyb20gXCIuL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IGdldE5vZGVTY3JvbGwgZnJvbSBcIi4vZ2V0Tm9kZVNjcm9sbC5qc1wiO1xuaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgeyBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbEJhclggZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsQmFyWC5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBpc1Njcm9sbFBhcmVudCBmcm9tIFwiLi9pc1Njcm9sbFBhcmVudC5qc1wiO1xuaW1wb3J0IHsgcm91bmQgfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiO1xuXG5mdW5jdGlvbiBpc0VsZW1lbnRTY2FsZWQoZWxlbWVudCkge1xuICB2YXIgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIHZhciBzY2FsZVggPSByb3VuZChyZWN0LndpZHRoKSAvIGVsZW1lbnQub2Zmc2V0V2lkdGggfHwgMTtcbiAgdmFyIHNjYWxlWSA9IHJvdW5kKHJlY3QuaGVpZ2h0KSAvIGVsZW1lbnQub2Zmc2V0SGVpZ2h0IHx8IDE7XG4gIHJldHVybiBzY2FsZVggIT09IDEgfHwgc2NhbGVZICE9PSAxO1xufSAvLyBSZXR1cm5zIHRoZSBjb21wb3NpdGUgcmVjdCBvZiBhbiBlbGVtZW50IHJlbGF0aXZlIHRvIGl0cyBvZmZzZXRQYXJlbnQuXG4vLyBDb21wb3NpdGUgbWVhbnMgaXQgdGFrZXMgaW50byBhY2NvdW50IHRyYW5zZm9ybXMgYXMgd2VsbCBhcyBsYXlvdXQuXG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Q29tcG9zaXRlUmVjdChlbGVtZW50T3JWaXJ0dWFsRWxlbWVudCwgb2Zmc2V0UGFyZW50LCBpc0ZpeGVkKSB7XG4gIGlmIChpc0ZpeGVkID09PSB2b2lkIDApIHtcbiAgICBpc0ZpeGVkID0gZmFsc2U7XG4gIH1cblxuICB2YXIgaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgPSBpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCk7XG4gIHZhciBvZmZzZXRQYXJlbnRJc1NjYWxlZCA9IGlzSFRNTEVsZW1lbnQob2Zmc2V0UGFyZW50KSAmJiBpc0VsZW1lbnRTY2FsZWQob2Zmc2V0UGFyZW50KTtcbiAgdmFyIGRvY3VtZW50RWxlbWVudCA9IGdldERvY3VtZW50RWxlbWVudChvZmZzZXRQYXJlbnQpO1xuICB2YXIgcmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50T3JWaXJ0dWFsRWxlbWVudCwgb2Zmc2V0UGFyZW50SXNTY2FsZWQsIGlzRml4ZWQpO1xuICB2YXIgc2Nyb2xsID0ge1xuICAgIHNjcm9sbExlZnQ6IDAsXG4gICAgc2Nyb2xsVG9wOiAwXG4gIH07XG4gIHZhciBvZmZzZXRzID0ge1xuICAgIHg6IDAsXG4gICAgeTogMFxuICB9O1xuXG4gIGlmIChpc09mZnNldFBhcmVudEFuRWxlbWVudCB8fCAhaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgJiYgIWlzRml4ZWQpIHtcbiAgICBpZiAoZ2V0Tm9kZU5hbWUob2Zmc2V0UGFyZW50KSAhPT0gJ2JvZHknIHx8IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wb3BwZXJqcy9wb3BwZXItY29yZS9pc3N1ZXMvMTA3OFxuICAgIGlzU2Nyb2xsUGFyZW50KGRvY3VtZW50RWxlbWVudCkpIHtcbiAgICAgIHNjcm9sbCA9IGdldE5vZGVTY3JvbGwob2Zmc2V0UGFyZW50KTtcbiAgICB9XG5cbiAgICBpZiAoaXNIVE1MRWxlbWVudChvZmZzZXRQYXJlbnQpKSB7XG4gICAgICBvZmZzZXRzID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KG9mZnNldFBhcmVudCwgdHJ1ZSk7XG4gICAgICBvZmZzZXRzLnggKz0gb2Zmc2V0UGFyZW50LmNsaWVudExlZnQ7XG4gICAgICBvZmZzZXRzLnkgKz0gb2Zmc2V0UGFyZW50LmNsaWVudFRvcDtcbiAgICB9IGVsc2UgaWYgKGRvY3VtZW50RWxlbWVudCkge1xuICAgICAgb2Zmc2V0cy54ID0gZ2V0V2luZG93U2Nyb2xsQmFyWChkb2N1bWVudEVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgeDogcmVjdC5sZWZ0ICsgc2Nyb2xsLnNjcm9sbExlZnQgLSBvZmZzZXRzLngsXG4gICAgeTogcmVjdC50b3AgKyBzY3JvbGwuc2Nyb2xsVG9wIC0gb2Zmc2V0cy55LFxuICAgIHdpZHRoOiByZWN0LndpZHRoLFxuICAgIGhlaWdodDogcmVjdC5oZWlnaHRcbiAgfTtcbn0iLCJpbXBvcnQgZ2V0V2luZG93U2Nyb2xsIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgZ2V0SFRNTEVsZW1lbnRTY3JvbGwgZnJvbSBcIi4vZ2V0SFRNTEVsZW1lbnRTY3JvbGwuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE5vZGVTY3JvbGwobm9kZSkge1xuICBpZiAobm9kZSA9PT0gZ2V0V2luZG93KG5vZGUpIHx8ICFpc0hUTUxFbGVtZW50KG5vZGUpKSB7XG4gICAgcmV0dXJuIGdldFdpbmRvd1Njcm9sbChub2RlKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZ2V0SFRNTEVsZW1lbnRTY3JvbGwobm9kZSk7XG4gIH1cbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRIVE1MRWxlbWVudFNjcm9sbChlbGVtZW50KSB7XG4gIHJldHVybiB7XG4gICAgc2Nyb2xsTGVmdDogZWxlbWVudC5zY3JvbGxMZWZ0LFxuICAgIHNjcm9sbFRvcDogZWxlbWVudC5zY3JvbGxUb3BcbiAgfTtcbn0iLCJpbXBvcnQgeyBtb2RpZmllclBoYXNlcyB9IGZyb20gXCIuLi9lbnVtcy5qc1wiOyAvLyBzb3VyY2U6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzQ5ODc1MjU1XG5cbmZ1bmN0aW9uIG9yZGVyKG1vZGlmaWVycykge1xuICB2YXIgbWFwID0gbmV3IE1hcCgpO1xuICB2YXIgdmlzaXRlZCA9IG5ldyBTZXQoKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBtb2RpZmllcnMuZm9yRWFjaChmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICBtYXAuc2V0KG1vZGlmaWVyLm5hbWUsIG1vZGlmaWVyKTtcbiAgfSk7IC8vIE9uIHZpc2l0aW5nIG9iamVjdCwgY2hlY2sgZm9yIGl0cyBkZXBlbmRlbmNpZXMgYW5kIHZpc2l0IHRoZW0gcmVjdXJzaXZlbHlcblxuICBmdW5jdGlvbiBzb3J0KG1vZGlmaWVyKSB7XG4gICAgdmlzaXRlZC5hZGQobW9kaWZpZXIubmFtZSk7XG4gICAgdmFyIHJlcXVpcmVzID0gW10uY29uY2F0KG1vZGlmaWVyLnJlcXVpcmVzIHx8IFtdLCBtb2RpZmllci5yZXF1aXJlc0lmRXhpc3RzIHx8IFtdKTtcbiAgICByZXF1aXJlcy5mb3JFYWNoKGZ1bmN0aW9uIChkZXApIHtcbiAgICAgIGlmICghdmlzaXRlZC5oYXMoZGVwKSkge1xuICAgICAgICB2YXIgZGVwTW9kaWZpZXIgPSBtYXAuZ2V0KGRlcCk7XG5cbiAgICAgICAgaWYgKGRlcE1vZGlmaWVyKSB7XG4gICAgICAgICAgc29ydChkZXBNb2RpZmllcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXN1bHQucHVzaChtb2RpZmllcik7XG4gIH1cblxuICBtb2RpZmllcnMuZm9yRWFjaChmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICBpZiAoIXZpc2l0ZWQuaGFzKG1vZGlmaWVyLm5hbWUpKSB7XG4gICAgICAvLyBjaGVjayBmb3IgdmlzaXRlZCBvYmplY3RcbiAgICAgIHNvcnQobW9kaWZpZXIpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG9yZGVyTW9kaWZpZXJzKG1vZGlmaWVycykge1xuICAvLyBvcmRlciBiYXNlZCBvbiBkZXBlbmRlbmNpZXNcbiAgdmFyIG9yZGVyZWRNb2RpZmllcnMgPSBvcmRlcihtb2RpZmllcnMpOyAvLyBvcmRlciBiYXNlZCBvbiBwaGFzZVxuXG4gIHJldHVybiBtb2RpZmllclBoYXNlcy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGhhc2UpIHtcbiAgICByZXR1cm4gYWNjLmNvbmNhdChvcmRlcmVkTW9kaWZpZXJzLmZpbHRlcihmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICAgIHJldHVybiBtb2RpZmllci5waGFzZSA9PT0gcGhhc2U7XG4gICAgfSkpO1xuICB9LCBbXSk7XG59IiwiaW1wb3J0IGdldENvbXBvc2l0ZVJlY3QgZnJvbSBcIi4vZG9tLXV0aWxzL2dldENvbXBvc2l0ZVJlY3QuanNcIjtcbmltcG9ydCBnZXRMYXlvdXRSZWN0IGZyb20gXCIuL2RvbS11dGlscy9nZXRMYXlvdXRSZWN0LmpzXCI7XG5pbXBvcnQgbGlzdFNjcm9sbFBhcmVudHMgZnJvbSBcIi4vZG9tLXV0aWxzL2xpc3RTY3JvbGxQYXJlbnRzLmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBvcmRlck1vZGlmaWVycyBmcm9tIFwiLi91dGlscy9vcmRlck1vZGlmaWVycy5qc1wiO1xuaW1wb3J0IGRlYm91bmNlIGZyb20gXCIuL3V0aWxzL2RlYm91bmNlLmpzXCI7XG5pbXBvcnQgbWVyZ2VCeU5hbWUgZnJvbSBcIi4vdXRpbHMvbWVyZ2VCeU5hbWUuanNcIjtcbmltcG9ydCBkZXRlY3RPdmVyZmxvdyBmcm9tIFwiLi91dGlscy9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IHsgaXNFbGVtZW50IH0gZnJvbSBcIi4vZG9tLXV0aWxzL2luc3RhbmNlT2YuanNcIjtcbnZhciBERUZBVUxUX09QVElPTlMgPSB7XG4gIHBsYWNlbWVudDogJ2JvdHRvbScsXG4gIG1vZGlmaWVyczogW10sXG4gIHN0cmF0ZWd5OiAnYWJzb2x1dGUnXG59O1xuXG5mdW5jdGlvbiBhcmVWYWxpZEVsZW1lbnRzKCkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgcmV0dXJuICFhcmdzLnNvbWUoZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gIShlbGVtZW50ICYmIHR5cGVvZiBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCA9PT0gJ2Z1bmN0aW9uJyk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcG9wcGVyR2VuZXJhdG9yKGdlbmVyYXRvck9wdGlvbnMpIHtcbiAgaWYgKGdlbmVyYXRvck9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIGdlbmVyYXRvck9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIHZhciBfZ2VuZXJhdG9yT3B0aW9ucyA9IGdlbmVyYXRvck9wdGlvbnMsXG4gICAgICBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYgPSBfZ2VuZXJhdG9yT3B0aW9ucy5kZWZhdWx0TW9kaWZpZXJzLFxuICAgICAgZGVmYXVsdE1vZGlmaWVycyA9IF9nZW5lcmF0b3JPcHRpb25zJGRlZiA9PT0gdm9pZCAwID8gW10gOiBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYsXG4gICAgICBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYyID0gX2dlbmVyYXRvck9wdGlvbnMuZGVmYXVsdE9wdGlvbnMsXG4gICAgICBkZWZhdWx0T3B0aW9ucyA9IF9nZW5lcmF0b3JPcHRpb25zJGRlZjIgPT09IHZvaWQgMCA/IERFRkFVTFRfT1BUSU9OUyA6IF9nZW5lcmF0b3JPcHRpb25zJGRlZjI7XG4gIHJldHVybiBmdW5jdGlvbiBjcmVhdGVQb3BwZXIocmVmZXJlbmNlLCBwb3BwZXIsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0gZGVmYXVsdE9wdGlvbnM7XG4gICAgfVxuXG4gICAgdmFyIHN0YXRlID0ge1xuICAgICAgcGxhY2VtZW50OiAnYm90dG9tJyxcbiAgICAgIG9yZGVyZWRNb2RpZmllcnM6IFtdLFxuICAgICAgb3B0aW9uczogT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9PUFRJT05TLCBkZWZhdWx0T3B0aW9ucyksXG4gICAgICBtb2RpZmllcnNEYXRhOiB7fSxcbiAgICAgIGVsZW1lbnRzOiB7XG4gICAgICAgIHJlZmVyZW5jZTogcmVmZXJlbmNlLFxuICAgICAgICBwb3BwZXI6IHBvcHBlclxuICAgICAgfSxcbiAgICAgIGF0dHJpYnV0ZXM6IHt9LFxuICAgICAgc3R5bGVzOiB7fVxuICAgIH07XG4gICAgdmFyIGVmZmVjdENsZWFudXBGbnMgPSBbXTtcbiAgICB2YXIgaXNEZXN0cm95ZWQgPSBmYWxzZTtcbiAgICB2YXIgaW5zdGFuY2UgPSB7XG4gICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICBzZXRPcHRpb25zOiBmdW5jdGlvbiBzZXRPcHRpb25zKHNldE9wdGlvbnNBY3Rpb24pIHtcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB0eXBlb2Ygc2V0T3B0aW9uc0FjdGlvbiA9PT0gJ2Z1bmN0aW9uJyA/IHNldE9wdGlvbnNBY3Rpb24oc3RhdGUub3B0aW9ucykgOiBzZXRPcHRpb25zQWN0aW9uO1xuICAgICAgICBjbGVhbnVwTW9kaWZpZXJFZmZlY3RzKCk7XG4gICAgICAgIHN0YXRlLm9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0T3B0aW9ucywgc3RhdGUub3B0aW9ucywgb3B0aW9ucyk7XG4gICAgICAgIHN0YXRlLnNjcm9sbFBhcmVudHMgPSB7XG4gICAgICAgICAgcmVmZXJlbmNlOiBpc0VsZW1lbnQocmVmZXJlbmNlKSA/IGxpc3RTY3JvbGxQYXJlbnRzKHJlZmVyZW5jZSkgOiByZWZlcmVuY2UuY29udGV4dEVsZW1lbnQgPyBsaXN0U2Nyb2xsUGFyZW50cyhyZWZlcmVuY2UuY29udGV4dEVsZW1lbnQpIDogW10sXG4gICAgICAgICAgcG9wcGVyOiBsaXN0U2Nyb2xsUGFyZW50cyhwb3BwZXIpXG4gICAgICAgIH07IC8vIE9yZGVycyB0aGUgbW9kaWZpZXJzIGJhc2VkIG9uIHRoZWlyIGRlcGVuZGVuY2llcyBhbmQgYHBoYXNlYFxuICAgICAgICAvLyBwcm9wZXJ0aWVzXG5cbiAgICAgICAgdmFyIG9yZGVyZWRNb2RpZmllcnMgPSBvcmRlck1vZGlmaWVycyhtZXJnZUJ5TmFtZShbXS5jb25jYXQoZGVmYXVsdE1vZGlmaWVycywgc3RhdGUub3B0aW9ucy5tb2RpZmllcnMpKSk7IC8vIFN0cmlwIG91dCBkaXNhYmxlZCBtb2RpZmllcnNcblxuICAgICAgICBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzID0gb3JkZXJlZE1vZGlmaWVycy5maWx0ZXIoZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgICByZXR1cm4gbS5lbmFibGVkO1xuICAgICAgICB9KTtcbiAgICAgICAgcnVuTW9kaWZpZXJFZmZlY3RzKCk7XG4gICAgICAgIHJldHVybiBpbnN0YW5jZS51cGRhdGUoKTtcbiAgICAgIH0sXG4gICAgICAvLyBTeW5jIHVwZGF0ZSDigJMgaXQgd2lsbCBhbHdheXMgYmUgZXhlY3V0ZWQsIGV2ZW4gaWYgbm90IG5lY2Vzc2FyeS4gVGhpc1xuICAgICAgLy8gaXMgdXNlZnVsIGZvciBsb3cgZnJlcXVlbmN5IHVwZGF0ZXMgd2hlcmUgc3luYyBiZWhhdmlvciBzaW1wbGlmaWVzIHRoZVxuICAgICAgLy8gbG9naWMuXG4gICAgICAvLyBGb3IgaGlnaCBmcmVxdWVuY3kgdXBkYXRlcyAoZS5nLiBgcmVzaXplYCBhbmQgYHNjcm9sbGAgZXZlbnRzKSwgYWx3YXlzXG4gICAgICAvLyBwcmVmZXIgdGhlIGFzeW5jIFBvcHBlciN1cGRhdGUgbWV0aG9kXG4gICAgICBmb3JjZVVwZGF0ZTogZnVuY3Rpb24gZm9yY2VVcGRhdGUoKSB7XG4gICAgICAgIGlmIChpc0Rlc3Ryb3llZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBfc3RhdGUkZWxlbWVudHMgPSBzdGF0ZS5lbGVtZW50cyxcbiAgICAgICAgICAgIHJlZmVyZW5jZSA9IF9zdGF0ZSRlbGVtZW50cy5yZWZlcmVuY2UsXG4gICAgICAgICAgICBwb3BwZXIgPSBfc3RhdGUkZWxlbWVudHMucG9wcGVyOyAvLyBEb24ndCBwcm9jZWVkIGlmIGByZWZlcmVuY2VgIG9yIGBwb3BwZXJgIGFyZSBub3QgdmFsaWQgZWxlbWVudHNcbiAgICAgICAgLy8gYW55bW9yZVxuXG4gICAgICAgIGlmICghYXJlVmFsaWRFbGVtZW50cyhyZWZlcmVuY2UsIHBvcHBlcikpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gLy8gU3RvcmUgdGhlIHJlZmVyZW5jZSBhbmQgcG9wcGVyIHJlY3RzIHRvIGJlIHJlYWQgYnkgbW9kaWZpZXJzXG5cblxuICAgICAgICBzdGF0ZS5yZWN0cyA9IHtcbiAgICAgICAgICByZWZlcmVuY2U6IGdldENvbXBvc2l0ZVJlY3QocmVmZXJlbmNlLCBnZXRPZmZzZXRQYXJlbnQocG9wcGVyKSwgc3RhdGUub3B0aW9ucy5zdHJhdGVneSA9PT0gJ2ZpeGVkJyksXG4gICAgICAgICAgcG9wcGVyOiBnZXRMYXlvdXRSZWN0KHBvcHBlcilcbiAgICAgICAgfTsgLy8gTW9kaWZpZXJzIGhhdmUgdGhlIGFiaWxpdHkgdG8gcmVzZXQgdGhlIGN1cnJlbnQgdXBkYXRlIGN5Y2xlLiBUaGVcbiAgICAgICAgLy8gbW9zdCBjb21tb24gdXNlIGNhc2UgZm9yIHRoaXMgaXMgdGhlIGBmbGlwYCBtb2RpZmllciBjaGFuZ2luZyB0aGVcbiAgICAgICAgLy8gcGxhY2VtZW50LCB3aGljaCB0aGVuIG5lZWRzIHRvIHJlLXJ1biBhbGwgdGhlIG1vZGlmaWVycywgYmVjYXVzZSB0aGVcbiAgICAgICAgLy8gbG9naWMgd2FzIHByZXZpb3VzbHkgcmFuIGZvciB0aGUgcHJldmlvdXMgcGxhY2VtZW50IGFuZCBpcyB0aGVyZWZvcmVcbiAgICAgICAgLy8gc3RhbGUvaW5jb3JyZWN0XG5cbiAgICAgICAgc3RhdGUucmVzZXQgPSBmYWxzZTtcbiAgICAgICAgc3RhdGUucGxhY2VtZW50ID0gc3RhdGUub3B0aW9ucy5wbGFjZW1lbnQ7IC8vIE9uIGVhY2ggdXBkYXRlIGN5Y2xlLCB0aGUgYG1vZGlmaWVyc0RhdGFgIHByb3BlcnR5IGZvciBlYWNoIG1vZGlmaWVyXG4gICAgICAgIC8vIGlzIGZpbGxlZCB3aXRoIHRoZSBpbml0aWFsIGRhdGEgc3BlY2lmaWVkIGJ5IHRoZSBtb2RpZmllci4gVGhpcyBtZWFuc1xuICAgICAgICAvLyBpdCBkb2Vzbid0IHBlcnNpc3QgYW5kIGlzIGZyZXNoIG9uIGVhY2ggdXBkYXRlLlxuICAgICAgICAvLyBUbyBlbnN1cmUgcGVyc2lzdGVudCBkYXRhLCB1c2UgYCR7bmFtZX0jcGVyc2lzdGVudGBcblxuICAgICAgICBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzLmZvckVhY2goZnVuY3Rpb24gKG1vZGlmaWVyKSB7XG4gICAgICAgICAgcmV0dXJuIHN0YXRlLm1vZGlmaWVyc0RhdGFbbW9kaWZpZXIubmFtZV0gPSBPYmplY3QuYXNzaWduKHt9LCBtb2RpZmllci5kYXRhKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHN0YXRlLm9yZGVyZWRNb2RpZmllcnMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgaWYgKHN0YXRlLnJlc2V0ID09PSB0cnVlKSB7XG4gICAgICAgICAgICBzdGF0ZS5yZXNldCA9IGZhbHNlO1xuICAgICAgICAgICAgaW5kZXggPSAtMTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBfc3RhdGUkb3JkZXJlZE1vZGlmaWUgPSBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzW2luZGV4XSxcbiAgICAgICAgICAgICAgZm4gPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUuZm4sXG4gICAgICAgICAgICAgIF9zdGF0ZSRvcmRlcmVkTW9kaWZpZTIgPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUub3B0aW9ucyxcbiAgICAgICAgICAgICAgX29wdGlvbnMgPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUyID09PSB2b2lkIDAgPyB7fSA6IF9zdGF0ZSRvcmRlcmVkTW9kaWZpZTIsXG4gICAgICAgICAgICAgIG5hbWUgPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUubmFtZTtcblxuICAgICAgICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHN0YXRlID0gZm4oe1xuICAgICAgICAgICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICAgICAgICAgIG9wdGlvbnM6IF9vcHRpb25zLFxuICAgICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgICBpbnN0YW5jZTogaW5zdGFuY2VcbiAgICAgICAgICAgIH0pIHx8IHN0YXRlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIEFzeW5jIGFuZCBvcHRpbWlzdGljYWxseSBvcHRpbWl6ZWQgdXBkYXRlIOKAkyBpdCB3aWxsIG5vdCBiZSBleGVjdXRlZCBpZlxuICAgICAgLy8gbm90IG5lY2Vzc2FyeSAoZGVib3VuY2VkIHRvIHJ1biBhdCBtb3N0IG9uY2UtcGVyLXRpY2spXG4gICAgICB1cGRhdGU6IGRlYm91bmNlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgICAgaW5zdGFuY2UuZm9yY2VVcGRhdGUoKTtcbiAgICAgICAgICByZXNvbHZlKHN0YXRlKTtcbiAgICAgICAgfSk7XG4gICAgICB9KSxcbiAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICAgIGNsZWFudXBNb2RpZmllckVmZmVjdHMoKTtcbiAgICAgICAgaXNEZXN0cm95ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoIWFyZVZhbGlkRWxlbWVudHMocmVmZXJlbmNlLCBwb3BwZXIpKSB7XG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfVxuXG4gICAgaW5zdGFuY2Uuc2V0T3B0aW9ucyhvcHRpb25zKS50aGVuKGZ1bmN0aW9uIChzdGF0ZSkge1xuICAgICAgaWYgKCFpc0Rlc3Ryb3llZCAmJiBvcHRpb25zLm9uRmlyc3RVcGRhdGUpIHtcbiAgICAgICAgb3B0aW9ucy5vbkZpcnN0VXBkYXRlKHN0YXRlKTtcbiAgICAgIH1cbiAgICB9KTsgLy8gTW9kaWZpZXJzIGhhdmUgdGhlIGFiaWxpdHkgdG8gZXhlY3V0ZSBhcmJpdHJhcnkgY29kZSBiZWZvcmUgdGhlIGZpcnN0XG4gICAgLy8gdXBkYXRlIGN5Y2xlIHJ1bnMuIFRoZXkgd2lsbCBiZSBleGVjdXRlZCBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGUgdXBkYXRlXG4gICAgLy8gY3ljbGUuIFRoaXMgaXMgdXNlZnVsIHdoZW4gYSBtb2RpZmllciBhZGRzIHNvbWUgcGVyc2lzdGVudCBkYXRhIHRoYXRcbiAgICAvLyBvdGhlciBtb2RpZmllcnMgbmVlZCB0byB1c2UsIGJ1dCB0aGUgbW9kaWZpZXIgaXMgcnVuIGFmdGVyIHRoZSBkZXBlbmRlbnRcbiAgICAvLyBvbmUuXG5cbiAgICBmdW5jdGlvbiBydW5Nb2RpZmllckVmZmVjdHMoKSB7XG4gICAgICBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzLmZvckVhY2goZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgICAgdmFyIG5hbWUgPSBfcmVmLm5hbWUsXG4gICAgICAgICAgICBfcmVmJG9wdGlvbnMgPSBfcmVmLm9wdGlvbnMsXG4gICAgICAgICAgICBvcHRpb25zID0gX3JlZiRvcHRpb25zID09PSB2b2lkIDAgPyB7fSA6IF9yZWYkb3B0aW9ucyxcbiAgICAgICAgICAgIGVmZmVjdCA9IF9yZWYuZWZmZWN0O1xuXG4gICAgICAgIGlmICh0eXBlb2YgZWZmZWN0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdmFyIGNsZWFudXBGbiA9IGVmZmVjdCh7XG4gICAgICAgICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgaW5zdGFuY2U6IGluc3RhbmNlLFxuICAgICAgICAgICAgb3B0aW9uczogb3B0aW9uc1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgdmFyIG5vb3BGbiA9IGZ1bmN0aW9uIG5vb3BGbigpIHt9O1xuXG4gICAgICAgICAgZWZmZWN0Q2xlYW51cEZucy5wdXNoKGNsZWFudXBGbiB8fCBub29wRm4pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjbGVhbnVwTW9kaWZpZXJFZmZlY3RzKCkge1xuICAgICAgZWZmZWN0Q2xlYW51cEZucy5mb3JFYWNoKGZ1bmN0aW9uIChmbikge1xuICAgICAgICByZXR1cm4gZm4oKTtcbiAgICAgIH0pO1xuICAgICAgZWZmZWN0Q2xlYW51cEZucyA9IFtdO1xuICAgIH1cblxuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfTtcbn1cbmV4cG9ydCB2YXIgY3JlYXRlUG9wcGVyID0gLyojX19QVVJFX18qL3BvcHBlckdlbmVyYXRvcigpOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCB7IGRldGVjdE92ZXJmbG93IH07IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGVib3VuY2UoZm4pIHtcbiAgdmFyIHBlbmRpbmc7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFwZW5kaW5nKSB7XG4gICAgICBwZW5kaW5nID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcGVuZGluZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICByZXNvbHZlKGZuKCkpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBwZW5kaW5nO1xuICB9O1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1lcmdlQnlOYW1lKG1vZGlmaWVycykge1xuICB2YXIgbWVyZ2VkID0gbW9kaWZpZXJzLnJlZHVjZShmdW5jdGlvbiAobWVyZ2VkLCBjdXJyZW50KSB7XG4gICAgdmFyIGV4aXN0aW5nID0gbWVyZ2VkW2N1cnJlbnQubmFtZV07XG4gICAgbWVyZ2VkW2N1cnJlbnQubmFtZV0gPSBleGlzdGluZyA/IE9iamVjdC5hc3NpZ24oe30sIGV4aXN0aW5nLCBjdXJyZW50LCB7XG4gICAgICBvcHRpb25zOiBPYmplY3QuYXNzaWduKHt9LCBleGlzdGluZy5vcHRpb25zLCBjdXJyZW50Lm9wdGlvbnMpLFxuICAgICAgZGF0YTogT2JqZWN0LmFzc2lnbih7fSwgZXhpc3RpbmcuZGF0YSwgY3VycmVudC5kYXRhKVxuICAgIH0pIDogY3VycmVudDtcbiAgICByZXR1cm4gbWVyZ2VkO1xuICB9LCB7fSk7IC8vIElFMTEgZG9lcyBub3Qgc3VwcG9ydCBPYmplY3QudmFsdWVzXG5cbiAgcmV0dXJuIE9iamVjdC5rZXlzKG1lcmdlZCkubWFwKGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gbWVyZ2VkW2tleV07XG4gIH0pO1xufSIsImltcG9ydCB7IHBvcHBlckdlbmVyYXRvciwgZGV0ZWN0T3ZlcmZsb3cgfSBmcm9tIFwiLi9jcmVhdGVQb3BwZXIuanNcIjtcbmltcG9ydCBldmVudExpc3RlbmVycyBmcm9tIFwiLi9tb2RpZmllcnMvZXZlbnRMaXN0ZW5lcnMuanNcIjtcbmltcG9ydCBwb3BwZXJPZmZzZXRzIGZyb20gXCIuL21vZGlmaWVycy9wb3BwZXJPZmZzZXRzLmpzXCI7XG5pbXBvcnQgY29tcHV0ZVN0eWxlcyBmcm9tIFwiLi9tb2RpZmllcnMvY29tcHV0ZVN0eWxlcy5qc1wiO1xuaW1wb3J0IGFwcGx5U3R5bGVzIGZyb20gXCIuL21vZGlmaWVycy9hcHBseVN0eWxlcy5qc1wiO1xuaW1wb3J0IG9mZnNldCBmcm9tIFwiLi9tb2RpZmllcnMvb2Zmc2V0LmpzXCI7XG5pbXBvcnQgZmxpcCBmcm9tIFwiLi9tb2RpZmllcnMvZmxpcC5qc1wiO1xuaW1wb3J0IHByZXZlbnRPdmVyZmxvdyBmcm9tIFwiLi9tb2RpZmllcnMvcHJldmVudE92ZXJmbG93LmpzXCI7XG5pbXBvcnQgYXJyb3cgZnJvbSBcIi4vbW9kaWZpZXJzL2Fycm93LmpzXCI7XG5pbXBvcnQgaGlkZSBmcm9tIFwiLi9tb2RpZmllcnMvaGlkZS5qc1wiO1xudmFyIGRlZmF1bHRNb2RpZmllcnMgPSBbZXZlbnRMaXN0ZW5lcnMsIHBvcHBlck9mZnNldHMsIGNvbXB1dGVTdHlsZXMsIGFwcGx5U3R5bGVzLCBvZmZzZXQsIGZsaXAsIHByZXZlbnRPdmVyZmxvdywgYXJyb3csIGhpZGVdO1xudmFyIGNyZWF0ZVBvcHBlciA9IC8qI19fUFVSRV9fKi9wb3BwZXJHZW5lcmF0b3Ioe1xuICBkZWZhdWx0TW9kaWZpZXJzOiBkZWZhdWx0TW9kaWZpZXJzXG59KTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBjcmVhdGVQb3BwZXIsIHBvcHBlckdlbmVyYXRvciwgZGVmYXVsdE1vZGlmaWVycywgZGV0ZWN0T3ZlcmZsb3cgfTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBjcmVhdGVQb3BwZXIgYXMgY3JlYXRlUG9wcGVyTGl0ZSB9IGZyb20gXCIuL3BvcHBlci1saXRlLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0ICogZnJvbSBcIi4vbW9kaWZpZXJzL2luZGV4LmpzXCI7IiwiaW1wb3J0IHsgcG9wcGVyR2VuZXJhdG9yLCBkZXRlY3RPdmVyZmxvdyB9IGZyb20gXCIuL2NyZWF0ZVBvcHBlci5qc1wiO1xuaW1wb3J0IGV2ZW50TGlzdGVuZXJzIGZyb20gXCIuL21vZGlmaWVycy9ldmVudExpc3RlbmVycy5qc1wiO1xuaW1wb3J0IHBvcHBlck9mZnNldHMgZnJvbSBcIi4vbW9kaWZpZXJzL3BvcHBlck9mZnNldHMuanNcIjtcbmltcG9ydCBjb21wdXRlU3R5bGVzIGZyb20gXCIuL21vZGlmaWVycy9jb21wdXRlU3R5bGVzLmpzXCI7XG5pbXBvcnQgYXBwbHlTdHlsZXMgZnJvbSBcIi4vbW9kaWZpZXJzL2FwcGx5U3R5bGVzLmpzXCI7XG52YXIgZGVmYXVsdE1vZGlmaWVycyA9IFtldmVudExpc3RlbmVycywgcG9wcGVyT2Zmc2V0cywgY29tcHV0ZVN0eWxlcywgYXBwbHlTdHlsZXNdO1xudmFyIGNyZWF0ZVBvcHBlciA9IC8qI19fUFVSRV9fKi9wb3BwZXJHZW5lcmF0b3Ioe1xuICBkZWZhdWx0TW9kaWZpZXJzOiBkZWZhdWx0TW9kaWZpZXJzXG59KTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBjcmVhdGVQb3BwZXIsIHBvcHBlckdlbmVyYXRvciwgZGVmYXVsdE1vZGlmaWVycywgZGV0ZWN0T3ZlcmZsb3cgfTsiLCIvKiFcbiAgKiBCb290c3RyYXAgdjUuMy4zIChodHRwczovL2dldGJvb3RzdHJhcC5jb20vKVxuICAqIENvcHlyaWdodCAyMDExLTIwMjQgVGhlIEJvb3RzdHJhcCBBdXRob3JzIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvZ3JhcGhzL2NvbnRyaWJ1dG9ycylcbiAgKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAgKi9cbmltcG9ydCAqIGFzIFBvcHBlciBmcm9tICdAcG9wcGVyanMvY29yZSc7XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCBkb20vZGF0YS5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgZWxlbWVudE1hcCA9IG5ldyBNYXAoKTtcbmNvbnN0IERhdGEgPSB7XG4gIHNldChlbGVtZW50LCBrZXksIGluc3RhbmNlKSB7XG4gICAgaWYgKCFlbGVtZW50TWFwLmhhcyhlbGVtZW50KSkge1xuICAgICAgZWxlbWVudE1hcC5zZXQoZWxlbWVudCwgbmV3IE1hcCgpKTtcbiAgICB9XG4gICAgY29uc3QgaW5zdGFuY2VNYXAgPSBlbGVtZW50TWFwLmdldChlbGVtZW50KTtcblxuICAgIC8vIG1ha2UgaXQgY2xlYXIgd2Ugb25seSB3YW50IG9uZSBpbnN0YW5jZSBwZXIgZWxlbWVudFxuICAgIC8vIGNhbiBiZSByZW1vdmVkIGxhdGVyIHdoZW4gbXVsdGlwbGUga2V5L2luc3RhbmNlcyBhcmUgZmluZSB0byBiZSB1c2VkXG4gICAgaWYgKCFpbnN0YW5jZU1hcC5oYXMoa2V5KSAmJiBpbnN0YW5jZU1hcC5zaXplICE9PSAwKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS5lcnJvcihgQm9vdHN0cmFwIGRvZXNuJ3QgYWxsb3cgbW9yZSB0aGFuIG9uZSBpbnN0YW5jZSBwZXIgZWxlbWVudC4gQm91bmQgaW5zdGFuY2U6ICR7QXJyYXkuZnJvbShpbnN0YW5jZU1hcC5rZXlzKCkpWzBdfS5gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaW5zdGFuY2VNYXAuc2V0KGtleSwgaW5zdGFuY2UpO1xuICB9LFxuICBnZXQoZWxlbWVudCwga2V5KSB7XG4gICAgaWYgKGVsZW1lbnRNYXAuaGFzKGVsZW1lbnQpKSB7XG4gICAgICByZXR1cm4gZWxlbWVudE1hcC5nZXQoZWxlbWVudCkuZ2V0KGtleSkgfHwgbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH0sXG4gIHJlbW92ZShlbGVtZW50LCBrZXkpIHtcbiAgICBpZiAoIWVsZW1lbnRNYXAuaGFzKGVsZW1lbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGluc3RhbmNlTWFwID0gZWxlbWVudE1hcC5nZXQoZWxlbWVudCk7XG4gICAgaW5zdGFuY2VNYXAuZGVsZXRlKGtleSk7XG5cbiAgICAvLyBmcmVlIHVwIGVsZW1lbnQgcmVmZXJlbmNlcyBpZiB0aGVyZSBhcmUgbm8gaW5zdGFuY2VzIGxlZnQgZm9yIGFuIGVsZW1lbnRcbiAgICBpZiAoaW5zdGFuY2VNYXAuc2l6ZSA9PT0gMCkge1xuICAgICAgZWxlbWVudE1hcC5kZWxldGUoZWxlbWVudCk7XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgdXRpbC9pbmRleC5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmNvbnN0IE1BWF9VSUQgPSAxMDAwMDAwO1xuY29uc3QgTUlMTElTRUNPTkRTX01VTFRJUExJRVIgPSAxMDAwO1xuY29uc3QgVFJBTlNJVElPTl9FTkQgPSAndHJhbnNpdGlvbmVuZCc7XG5cbi8qKlxuICogUHJvcGVybHkgZXNjYXBlIElEcyBzZWxlY3RvcnMgdG8gaGFuZGxlIHdlaXJkIElEc1xuICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5jb25zdCBwYXJzZVNlbGVjdG9yID0gc2VsZWN0b3IgPT4ge1xuICBpZiAoc2VsZWN0b3IgJiYgd2luZG93LkNTUyAmJiB3aW5kb3cuQ1NTLmVzY2FwZSkge1xuICAgIC8vIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IgbmVlZHMgZXNjYXBpbmcgdG8gaGFuZGxlIElEcyAoaHRtbDUrKSBjb250YWluaW5nIGZvciBpbnN0YW5jZSAvXG4gICAgc2VsZWN0b3IgPSBzZWxlY3Rvci5yZXBsYWNlKC8jKFteXFxzXCIjJ10rKS9nLCAobWF0Y2gsIGlkKSA9PiBgIyR7Q1NTLmVzY2FwZShpZCl9YCk7XG4gIH1cbiAgcmV0dXJuIHNlbGVjdG9yO1xufTtcblxuLy8gU2hvdXQtb3V0IEFuZ3VzIENyb2xsIChodHRwczovL2dvby5nbC9weHdRR3ApXG5jb25zdCB0b1R5cGUgPSBvYmplY3QgPT4ge1xuICBpZiAob2JqZWN0ID09PSBudWxsIHx8IG9iamVjdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGAke29iamVjdH1gO1xuICB9XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KS5tYXRjaCgvXFxzKFthLXpdKykvaSlbMV0udG9Mb3dlckNhc2UoKTtcbn07XG5cbi8qKlxuICogUHVibGljIFV0aWwgQVBJXG4gKi9cblxuY29uc3QgZ2V0VUlEID0gcHJlZml4ID0+IHtcbiAgZG8ge1xuICAgIHByZWZpeCArPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBNQVhfVUlEKTtcbiAgfSB3aGlsZSAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocHJlZml4KSk7XG4gIHJldHVybiBwcmVmaXg7XG59O1xuY29uc3QgZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQgPSBlbGVtZW50ID0+IHtcbiAgaWYgKCFlbGVtZW50KSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICAvLyBHZXQgdHJhbnNpdGlvbi1kdXJhdGlvbiBvZiB0aGUgZWxlbWVudFxuICBsZXQge1xuICAgIHRyYW5zaXRpb25EdXJhdGlvbixcbiAgICB0cmFuc2l0aW9uRGVsYXlcbiAgfSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuICBjb25zdCBmbG9hdFRyYW5zaXRpb25EdXJhdGlvbiA9IE51bWJlci5wYXJzZUZsb2F0KHRyYW5zaXRpb25EdXJhdGlvbik7XG4gIGNvbnN0IGZsb2F0VHJhbnNpdGlvbkRlbGF5ID0gTnVtYmVyLnBhcnNlRmxvYXQodHJhbnNpdGlvbkRlbGF5KTtcblxuICAvLyBSZXR1cm4gMCBpZiBlbGVtZW50IG9yIHRyYW5zaXRpb24gZHVyYXRpb24gaXMgbm90IGZvdW5kXG4gIGlmICghZmxvYXRUcmFuc2l0aW9uRHVyYXRpb24gJiYgIWZsb2F0VHJhbnNpdGlvbkRlbGF5KSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICAvLyBJZiBtdWx0aXBsZSBkdXJhdGlvbnMgYXJlIGRlZmluZWQsIHRha2UgdGhlIGZpcnN0XG4gIHRyYW5zaXRpb25EdXJhdGlvbiA9IHRyYW5zaXRpb25EdXJhdGlvbi5zcGxpdCgnLCcpWzBdO1xuICB0cmFuc2l0aW9uRGVsYXkgPSB0cmFuc2l0aW9uRGVsYXkuc3BsaXQoJywnKVswXTtcbiAgcmV0dXJuIChOdW1iZXIucGFyc2VGbG9hdCh0cmFuc2l0aW9uRHVyYXRpb24pICsgTnVtYmVyLnBhcnNlRmxvYXQodHJhbnNpdGlvbkRlbGF5KSkgKiBNSUxMSVNFQ09ORFNfTVVMVElQTElFUjtcbn07XG5jb25zdCB0cmlnZ2VyVHJhbnNpdGlvbkVuZCA9IGVsZW1lbnQgPT4ge1xuICBlbGVtZW50LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFRSQU5TSVRJT05fRU5EKSk7XG59O1xuY29uc3QgaXNFbGVtZW50ID0gb2JqZWN0ID0+IHtcbiAgaWYgKCFvYmplY3QgfHwgdHlwZW9mIG9iamVjdCAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKHR5cGVvZiBvYmplY3QuanF1ZXJ5ICE9PSAndW5kZWZpbmVkJykge1xuICAgIG9iamVjdCA9IG9iamVjdFswXTtcbiAgfVxuICByZXR1cm4gdHlwZW9mIG9iamVjdC5ub2RlVHlwZSAhPT0gJ3VuZGVmaW5lZCc7XG59O1xuY29uc3QgZ2V0RWxlbWVudCA9IG9iamVjdCA9PiB7XG4gIC8vIGl0J3MgYSBqUXVlcnkgb2JqZWN0IG9yIGEgbm9kZSBlbGVtZW50XG4gIGlmIChpc0VsZW1lbnQob2JqZWN0KSkge1xuICAgIHJldHVybiBvYmplY3QuanF1ZXJ5ID8gb2JqZWN0WzBdIDogb2JqZWN0O1xuICB9XG4gIGlmICh0eXBlb2Ygb2JqZWN0ID09PSAnc3RyaW5nJyAmJiBvYmplY3QubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHBhcnNlU2VsZWN0b3Iob2JqZWN0KSk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuY29uc3QgaXNWaXNpYmxlID0gZWxlbWVudCA9PiB7XG4gIGlmICghaXNFbGVtZW50KGVsZW1lbnQpIHx8IGVsZW1lbnQuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgZWxlbWVudElzVmlzaWJsZSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkuZ2V0UHJvcGVydHlWYWx1ZSgndmlzaWJpbGl0eScpID09PSAndmlzaWJsZSc7XG4gIC8vIEhhbmRsZSBgZGV0YWlsc2AgZWxlbWVudCBhcyBpdHMgY29udGVudCBtYXkgZmFsc2llIGFwcGVhciB2aXNpYmxlIHdoZW4gaXQgaXMgY2xvc2VkXG4gIGNvbnN0IGNsb3NlZERldGFpbHMgPSBlbGVtZW50LmNsb3Nlc3QoJ2RldGFpbHM6bm90KFtvcGVuXSknKTtcbiAgaWYgKCFjbG9zZWREZXRhaWxzKSB7XG4gICAgcmV0dXJuIGVsZW1lbnRJc1Zpc2libGU7XG4gIH1cbiAgaWYgKGNsb3NlZERldGFpbHMgIT09IGVsZW1lbnQpIHtcbiAgICBjb25zdCBzdW1tYXJ5ID0gZWxlbWVudC5jbG9zZXN0KCdzdW1tYXJ5Jyk7XG4gICAgaWYgKHN1bW1hcnkgJiYgc3VtbWFyeS5wYXJlbnROb2RlICE9PSBjbG9zZWREZXRhaWxzKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChzdW1tYXJ5ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiBlbGVtZW50SXNWaXNpYmxlO1xufTtcbmNvbnN0IGlzRGlzYWJsZWQgPSBlbGVtZW50ID0+IHtcbiAgaWYgKCFlbGVtZW50IHx8IGVsZW1lbnQubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdkaXNhYmxlZCcpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKHR5cGVvZiBlbGVtZW50LmRpc2FibGVkICE9PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBlbGVtZW50LmRpc2FibGVkO1xuICB9XG4gIHJldHVybiBlbGVtZW50Lmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKSAmJiBlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGlzYWJsZWQnKSAhPT0gJ2ZhbHNlJztcbn07XG5jb25zdCBmaW5kU2hhZG93Um9vdCA9IGVsZW1lbnQgPT4ge1xuICBpZiAoIWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hdHRhY2hTaGFkb3cpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIENhbiBmaW5kIHRoZSBzaGFkb3cgcm9vdCBvdGhlcndpc2UgaXQnbGwgcmV0dXJuIHRoZSBkb2N1bWVudFxuICBpZiAodHlwZW9mIGVsZW1lbnQuZ2V0Um9vdE5vZGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjb25zdCByb290ID0gZWxlbWVudC5nZXRSb290Tm9kZSgpO1xuICAgIHJldHVybiByb290IGluc3RhbmNlb2YgU2hhZG93Um9vdCA/IHJvb3QgOiBudWxsO1xuICB9XG4gIGlmIChlbGVtZW50IGluc3RhbmNlb2YgU2hhZG93Um9vdCkge1xuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG5cbiAgLy8gd2hlbiB3ZSBkb24ndCBmaW5kIGEgc2hhZG93IHJvb3RcbiAgaWYgKCFlbGVtZW50LnBhcmVudE5vZGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gZmluZFNoYWRvd1Jvb3QoZWxlbWVudC5wYXJlbnROb2RlKTtcbn07XG5jb25zdCBub29wID0gKCkgPT4ge307XG5cbi8qKlxuICogVHJpY2sgdG8gcmVzdGFydCBhbiBlbGVtZW50J3MgYW5pbWF0aW9uXG4gKlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybiB2b2lkXG4gKlxuICogQHNlZSBodHRwczovL3d3dy5jaGFyaXN0aGVvLmlvL2Jsb2cvMjAyMS8wMi9yZXN0YXJ0LWEtY3NzLWFuaW1hdGlvbi13aXRoLWphdmFzY3JpcHQvI3Jlc3RhcnRpbmctYS1jc3MtYW5pbWF0aW9uXG4gKi9cbmNvbnN0IHJlZmxvdyA9IGVsZW1lbnQgPT4ge1xuICBlbGVtZW50Lm9mZnNldEhlaWdodDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnNcbn07XG5jb25zdCBnZXRqUXVlcnkgPSAoKSA9PiB7XG4gIGlmICh3aW5kb3cualF1ZXJ5ICYmICFkb2N1bWVudC5ib2R5Lmhhc0F0dHJpYnV0ZSgnZGF0YS1icy1uby1qcXVlcnknKSkge1xuICAgIHJldHVybiB3aW5kb3cualF1ZXJ5O1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcbmNvbnN0IERPTUNvbnRlbnRMb2FkZWRDYWxsYmFja3MgPSBbXTtcbmNvbnN0IG9uRE9NQ29udGVudExvYWRlZCA9IGNhbGxiYWNrID0+IHtcbiAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICdsb2FkaW5nJykge1xuICAgIC8vIGFkZCBsaXN0ZW5lciBvbiB0aGUgZmlyc3QgY2FsbCB3aGVuIHRoZSBkb2N1bWVudCBpcyBpbiBsb2FkaW5nIHN0YXRlXG4gICAgaWYgKCFET01Db250ZW50TG9hZGVkQ2FsbGJhY2tzLmxlbmd0aCkge1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsICgpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBjYWxsYmFjayBvZiBET01Db250ZW50TG9hZGVkQ2FsbGJhY2tzKSB7XG4gICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIERPTUNvbnRlbnRMb2FkZWRDYWxsYmFja3MucHVzaChjYWxsYmFjayk7XG4gIH0gZWxzZSB7XG4gICAgY2FsbGJhY2soKTtcbiAgfVxufTtcbmNvbnN0IGlzUlRMID0gKCkgPT4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmRpciA9PT0gJ3J0bCc7XG5jb25zdCBkZWZpbmVKUXVlcnlQbHVnaW4gPSBwbHVnaW4gPT4ge1xuICBvbkRPTUNvbnRlbnRMb2FkZWQoKCkgPT4ge1xuICAgIGNvbnN0ICQgPSBnZXRqUXVlcnkoKTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoJCkge1xuICAgICAgY29uc3QgbmFtZSA9IHBsdWdpbi5OQU1FO1xuICAgICAgY29uc3QgSlFVRVJZX05PX0NPTkZMSUNUID0gJC5mbltuYW1lXTtcbiAgICAgICQuZm5bbmFtZV0gPSBwbHVnaW4ualF1ZXJ5SW50ZXJmYWNlO1xuICAgICAgJC5mbltuYW1lXS5Db25zdHJ1Y3RvciA9IHBsdWdpbjtcbiAgICAgICQuZm5bbmFtZV0ubm9Db25mbGljdCA9ICgpID0+IHtcbiAgICAgICAgJC5mbltuYW1lXSA9IEpRVUVSWV9OT19DT05GTElDVDtcbiAgICAgICAgcmV0dXJuIHBsdWdpbi5qUXVlcnlJbnRlcmZhY2U7XG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG59O1xuY29uc3QgZXhlY3V0ZSA9IChwb3NzaWJsZUNhbGxiYWNrLCBhcmdzID0gW10sIGRlZmF1bHRWYWx1ZSA9IHBvc3NpYmxlQ2FsbGJhY2spID0+IHtcbiAgcmV0dXJuIHR5cGVvZiBwb3NzaWJsZUNhbGxiYWNrID09PSAnZnVuY3Rpb24nID8gcG9zc2libGVDYWxsYmFjayguLi5hcmdzKSA6IGRlZmF1bHRWYWx1ZTtcbn07XG5jb25zdCBleGVjdXRlQWZ0ZXJUcmFuc2l0aW9uID0gKGNhbGxiYWNrLCB0cmFuc2l0aW9uRWxlbWVudCwgd2FpdEZvclRyYW5zaXRpb24gPSB0cnVlKSA9PiB7XG4gIGlmICghd2FpdEZvclRyYW5zaXRpb24pIHtcbiAgICBleGVjdXRlKGNhbGxiYWNrKTtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgZHVyYXRpb25QYWRkaW5nID0gNTtcbiAgY29uc3QgZW11bGF0ZWREdXJhdGlvbiA9IGdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50KHRyYW5zaXRpb25FbGVtZW50KSArIGR1cmF0aW9uUGFkZGluZztcbiAgbGV0IGNhbGxlZCA9IGZhbHNlO1xuICBjb25zdCBoYW5kbGVyID0gKHtcbiAgICB0YXJnZXRcbiAgfSkgPT4ge1xuICAgIGlmICh0YXJnZXQgIT09IHRyYW5zaXRpb25FbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNhbGxlZCA9IHRydWU7XG4gICAgdHJhbnNpdGlvbkVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihUUkFOU0lUSU9OX0VORCwgaGFuZGxlcik7XG4gICAgZXhlY3V0ZShjYWxsYmFjayk7XG4gIH07XG4gIHRyYW5zaXRpb25FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoVFJBTlNJVElPTl9FTkQsIGhhbmRsZXIpO1xuICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICBpZiAoIWNhbGxlZCkge1xuICAgICAgdHJpZ2dlclRyYW5zaXRpb25FbmQodHJhbnNpdGlvbkVsZW1lbnQpO1xuICAgIH1cbiAgfSwgZW11bGF0ZWREdXJhdGlvbik7XG59O1xuXG4vKipcbiAqIFJldHVybiB0aGUgcHJldmlvdXMvbmV4dCBlbGVtZW50IG9mIGEgbGlzdC5cbiAqXG4gKiBAcGFyYW0ge2FycmF5fSBsaXN0ICAgIFRoZSBsaXN0IG9mIGVsZW1lbnRzXG4gKiBAcGFyYW0gYWN0aXZlRWxlbWVudCAgIFRoZSBhY3RpdmUgZWxlbWVudFxuICogQHBhcmFtIHNob3VsZEdldE5leHQgICBDaG9vc2UgdG8gZ2V0IG5leHQgb3IgcHJldmlvdXMgZWxlbWVudFxuICogQHBhcmFtIGlzQ3ljbGVBbGxvd2VkXG4gKiBAcmV0dXJuIHtFbGVtZW50fGVsZW19IFRoZSBwcm9wZXIgZWxlbWVudFxuICovXG5jb25zdCBnZXROZXh0QWN0aXZlRWxlbWVudCA9IChsaXN0LCBhY3RpdmVFbGVtZW50LCBzaG91bGRHZXROZXh0LCBpc0N5Y2xlQWxsb3dlZCkgPT4ge1xuICBjb25zdCBsaXN0TGVuZ3RoID0gbGlzdC5sZW5ndGg7XG4gIGxldCBpbmRleCA9IGxpc3QuaW5kZXhPZihhY3RpdmVFbGVtZW50KTtcblxuICAvLyBpZiB0aGUgZWxlbWVudCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbGlzdCByZXR1cm4gYW4gZWxlbWVudFxuICAvLyBkZXBlbmRpbmcgb24gdGhlIGRpcmVjdGlvbiBhbmQgaWYgY3ljbGUgaXMgYWxsb3dlZFxuICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgcmV0dXJuICFzaG91bGRHZXROZXh0ICYmIGlzQ3ljbGVBbGxvd2VkID8gbGlzdFtsaXN0TGVuZ3RoIC0gMV0gOiBsaXN0WzBdO1xuICB9XG4gIGluZGV4ICs9IHNob3VsZEdldE5leHQgPyAxIDogLTE7XG4gIGlmIChpc0N5Y2xlQWxsb3dlZCkge1xuICAgIGluZGV4ID0gKGluZGV4ICsgbGlzdExlbmd0aCkgJSBsaXN0TGVuZ3RoO1xuICB9XG4gIHJldHVybiBsaXN0W01hdGgubWF4KDAsIE1hdGgubWluKGluZGV4LCBsaXN0TGVuZ3RoIC0gMSkpXTtcbn07XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCBkb20vZXZlbnQtaGFuZGxlci5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBuYW1lc3BhY2VSZWdleCA9IC9bXi5dKig/PVxcLi4qKVxcLnwuKi87XG5jb25zdCBzdHJpcE5hbWVSZWdleCA9IC9cXC4uKi87XG5jb25zdCBzdHJpcFVpZFJlZ2V4ID0gLzo6XFxkKyQvO1xuY29uc3QgZXZlbnRSZWdpc3RyeSA9IHt9OyAvLyBFdmVudHMgc3RvcmFnZVxubGV0IHVpZEV2ZW50ID0gMTtcbmNvbnN0IGN1c3RvbUV2ZW50cyA9IHtcbiAgbW91c2VlbnRlcjogJ21vdXNlb3ZlcicsXG4gIG1vdXNlbGVhdmU6ICdtb3VzZW91dCdcbn07XG5jb25zdCBuYXRpdmVFdmVudHMgPSBuZXcgU2V0KFsnY2xpY2snLCAnZGJsY2xpY2snLCAnbW91c2V1cCcsICdtb3VzZWRvd24nLCAnY29udGV4dG1lbnUnLCAnbW91c2V3aGVlbCcsICdET01Nb3VzZVNjcm9sbCcsICdtb3VzZW92ZXInLCAnbW91c2VvdXQnLCAnbW91c2Vtb3ZlJywgJ3NlbGVjdHN0YXJ0JywgJ3NlbGVjdGVuZCcsICdrZXlkb3duJywgJ2tleXByZXNzJywgJ2tleXVwJywgJ29yaWVudGF0aW9uY2hhbmdlJywgJ3RvdWNoc3RhcnQnLCAndG91Y2htb3ZlJywgJ3RvdWNoZW5kJywgJ3RvdWNoY2FuY2VsJywgJ3BvaW50ZXJkb3duJywgJ3BvaW50ZXJtb3ZlJywgJ3BvaW50ZXJ1cCcsICdwb2ludGVybGVhdmUnLCAncG9pbnRlcmNhbmNlbCcsICdnZXN0dXJlc3RhcnQnLCAnZ2VzdHVyZWNoYW5nZScsICdnZXN0dXJlZW5kJywgJ2ZvY3VzJywgJ2JsdXInLCAnY2hhbmdlJywgJ3Jlc2V0JywgJ3NlbGVjdCcsICdzdWJtaXQnLCAnZm9jdXNpbicsICdmb2N1c291dCcsICdsb2FkJywgJ3VubG9hZCcsICdiZWZvcmV1bmxvYWQnLCAncmVzaXplJywgJ21vdmUnLCAnRE9NQ29udGVudExvYWRlZCcsICdyZWFkeXN0YXRlY2hhbmdlJywgJ2Vycm9yJywgJ2Fib3J0JywgJ3Njcm9sbCddKTtcblxuLyoqXG4gKiBQcml2YXRlIG1ldGhvZHNcbiAqL1xuXG5mdW5jdGlvbiBtYWtlRXZlbnRVaWQoZWxlbWVudCwgdWlkKSB7XG4gIHJldHVybiB1aWQgJiYgYCR7dWlkfTo6JHt1aWRFdmVudCsrfWAgfHwgZWxlbWVudC51aWRFdmVudCB8fCB1aWRFdmVudCsrO1xufVxuZnVuY3Rpb24gZ2V0RWxlbWVudEV2ZW50cyhlbGVtZW50KSB7XG4gIGNvbnN0IHVpZCA9IG1ha2VFdmVudFVpZChlbGVtZW50KTtcbiAgZWxlbWVudC51aWRFdmVudCA9IHVpZDtcbiAgZXZlbnRSZWdpc3RyeVt1aWRdID0gZXZlbnRSZWdpc3RyeVt1aWRdIHx8IHt9O1xuICByZXR1cm4gZXZlbnRSZWdpc3RyeVt1aWRdO1xufVxuZnVuY3Rpb24gYm9vdHN0cmFwSGFuZGxlcihlbGVtZW50LCBmbikge1xuICByZXR1cm4gZnVuY3Rpb24gaGFuZGxlcihldmVudCkge1xuICAgIGh5ZHJhdGVPYmooZXZlbnQsIHtcbiAgICAgIGRlbGVnYXRlVGFyZ2V0OiBlbGVtZW50XG4gICAgfSk7XG4gICAgaWYgKGhhbmRsZXIub25lT2ZmKSB7XG4gICAgICBFdmVudEhhbmRsZXIub2ZmKGVsZW1lbnQsIGV2ZW50LnR5cGUsIGZuKTtcbiAgICB9XG4gICAgcmV0dXJuIGZuLmFwcGx5KGVsZW1lbnQsIFtldmVudF0pO1xuICB9O1xufVxuZnVuY3Rpb24gYm9vdHN0cmFwRGVsZWdhdGlvbkhhbmRsZXIoZWxlbWVudCwgc2VsZWN0b3IsIGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiBoYW5kbGVyKGV2ZW50KSB7XG4gICAgY29uc3QgZG9tRWxlbWVudHMgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xuICAgIGZvciAobGV0IHtcbiAgICAgIHRhcmdldFxuICAgIH0gPSBldmVudDsgdGFyZ2V0ICYmIHRhcmdldCAhPT0gdGhpczsgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGUpIHtcbiAgICAgIGZvciAoY29uc3QgZG9tRWxlbWVudCBvZiBkb21FbGVtZW50cykge1xuICAgICAgICBpZiAoZG9tRWxlbWVudCAhPT0gdGFyZ2V0KSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaHlkcmF0ZU9iaihldmVudCwge1xuICAgICAgICAgIGRlbGVnYXRlVGFyZ2V0OiB0YXJnZXRcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChoYW5kbGVyLm9uZU9mZikge1xuICAgICAgICAgIEV2ZW50SGFuZGxlci5vZmYoZWxlbWVudCwgZXZlbnQudHlwZSwgc2VsZWN0b3IsIGZuKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm4uYXBwbHkodGFyZ2V0LCBbZXZlbnRdKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG5mdW5jdGlvbiBmaW5kSGFuZGxlcihldmVudHMsIGNhbGxhYmxlLCBkZWxlZ2F0aW9uU2VsZWN0b3IgPSBudWxsKSB7XG4gIHJldHVybiBPYmplY3QudmFsdWVzKGV2ZW50cykuZmluZChldmVudCA9PiBldmVudC5jYWxsYWJsZSA9PT0gY2FsbGFibGUgJiYgZXZlbnQuZGVsZWdhdGlvblNlbGVjdG9yID09PSBkZWxlZ2F0aW9uU2VsZWN0b3IpO1xufVxuZnVuY3Rpb24gbm9ybWFsaXplUGFyYW1ldGVycyhvcmlnaW5hbFR5cGVFdmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZ1bmN0aW9uKSB7XG4gIGNvbnN0IGlzRGVsZWdhdGVkID0gdHlwZW9mIGhhbmRsZXIgPT09ICdzdHJpbmcnO1xuICAvLyBUT0RPOiB0b29sdGlwIHBhc3NlcyBgZmFsc2VgIGluc3RlYWQgb2Ygc2VsZWN0b3IsIHNvIHdlIG5lZWQgdG8gY2hlY2tcbiAgY29uc3QgY2FsbGFibGUgPSBpc0RlbGVnYXRlZCA/IGRlbGVnYXRpb25GdW5jdGlvbiA6IGhhbmRsZXIgfHwgZGVsZWdhdGlvbkZ1bmN0aW9uO1xuICBsZXQgdHlwZUV2ZW50ID0gZ2V0VHlwZUV2ZW50KG9yaWdpbmFsVHlwZUV2ZW50KTtcbiAgaWYgKCFuYXRpdmVFdmVudHMuaGFzKHR5cGVFdmVudCkpIHtcbiAgICB0eXBlRXZlbnQgPSBvcmlnaW5hbFR5cGVFdmVudDtcbiAgfVxuICByZXR1cm4gW2lzRGVsZWdhdGVkLCBjYWxsYWJsZSwgdHlwZUV2ZW50XTtcbn1cbmZ1bmN0aW9uIGFkZEhhbmRsZXIoZWxlbWVudCwgb3JpZ2luYWxUeXBlRXZlbnQsIGhhbmRsZXIsIGRlbGVnYXRpb25GdW5jdGlvbiwgb25lT2ZmKSB7XG4gIGlmICh0eXBlb2Ygb3JpZ2luYWxUeXBlRXZlbnQgIT09ICdzdHJpbmcnIHx8ICFlbGVtZW50KSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGxldCBbaXNEZWxlZ2F0ZWQsIGNhbGxhYmxlLCB0eXBlRXZlbnRdID0gbm9ybWFsaXplUGFyYW1ldGVycyhvcmlnaW5hbFR5cGVFdmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZ1bmN0aW9uKTtcblxuICAvLyBpbiBjYXNlIG9mIG1vdXNlZW50ZXIgb3IgbW91c2VsZWF2ZSB3cmFwIHRoZSBoYW5kbGVyIHdpdGhpbiBhIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIGZvciBpdHMgRE9NIHBvc2l0aW9uXG4gIC8vIHRoaXMgcHJldmVudHMgdGhlIGhhbmRsZXIgZnJvbSBiZWluZyBkaXNwYXRjaGVkIHRoZSBzYW1lIHdheSBhcyBtb3VzZW92ZXIgb3IgbW91c2VvdXQgZG9lc1xuICBpZiAob3JpZ2luYWxUeXBlRXZlbnQgaW4gY3VzdG9tRXZlbnRzKSB7XG4gICAgY29uc3Qgd3JhcEZ1bmN0aW9uID0gZm4gPT4ge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICBpZiAoIWV2ZW50LnJlbGF0ZWRUYXJnZXQgfHwgZXZlbnQucmVsYXRlZFRhcmdldCAhPT0gZXZlbnQuZGVsZWdhdGVUYXJnZXQgJiYgIWV2ZW50LmRlbGVnYXRlVGFyZ2V0LmNvbnRhaW5zKGV2ZW50LnJlbGF0ZWRUYXJnZXQpKSB7XG4gICAgICAgICAgcmV0dXJuIGZuLmNhbGwodGhpcywgZXZlbnQpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH07XG4gICAgY2FsbGFibGUgPSB3cmFwRnVuY3Rpb24oY2FsbGFibGUpO1xuICB9XG4gIGNvbnN0IGV2ZW50cyA9IGdldEVsZW1lbnRFdmVudHMoZWxlbWVudCk7XG4gIGNvbnN0IGhhbmRsZXJzID0gZXZlbnRzW3R5cGVFdmVudF0gfHwgKGV2ZW50c1t0eXBlRXZlbnRdID0ge30pO1xuICBjb25zdCBwcmV2aW91c0Z1bmN0aW9uID0gZmluZEhhbmRsZXIoaGFuZGxlcnMsIGNhbGxhYmxlLCBpc0RlbGVnYXRlZCA/IGhhbmRsZXIgOiBudWxsKTtcbiAgaWYgKHByZXZpb3VzRnVuY3Rpb24pIHtcbiAgICBwcmV2aW91c0Z1bmN0aW9uLm9uZU9mZiA9IHByZXZpb3VzRnVuY3Rpb24ub25lT2ZmICYmIG9uZU9mZjtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgdWlkID0gbWFrZUV2ZW50VWlkKGNhbGxhYmxlLCBvcmlnaW5hbFR5cGVFdmVudC5yZXBsYWNlKG5hbWVzcGFjZVJlZ2V4LCAnJykpO1xuICBjb25zdCBmbiA9IGlzRGVsZWdhdGVkID8gYm9vdHN0cmFwRGVsZWdhdGlvbkhhbmRsZXIoZWxlbWVudCwgaGFuZGxlciwgY2FsbGFibGUpIDogYm9vdHN0cmFwSGFuZGxlcihlbGVtZW50LCBjYWxsYWJsZSk7XG4gIGZuLmRlbGVnYXRpb25TZWxlY3RvciA9IGlzRGVsZWdhdGVkID8gaGFuZGxlciA6IG51bGw7XG4gIGZuLmNhbGxhYmxlID0gY2FsbGFibGU7XG4gIGZuLm9uZU9mZiA9IG9uZU9mZjtcbiAgZm4udWlkRXZlbnQgPSB1aWQ7XG4gIGhhbmRsZXJzW3VpZF0gPSBmbjtcbiAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHR5cGVFdmVudCwgZm4sIGlzRGVsZWdhdGVkKTtcbn1cbmZ1bmN0aW9uIHJlbW92ZUhhbmRsZXIoZWxlbWVudCwgZXZlbnRzLCB0eXBlRXZlbnQsIGhhbmRsZXIsIGRlbGVnYXRpb25TZWxlY3Rvcikge1xuICBjb25zdCBmbiA9IGZpbmRIYW5kbGVyKGV2ZW50c1t0eXBlRXZlbnRdLCBoYW5kbGVyLCBkZWxlZ2F0aW9uU2VsZWN0b3IpO1xuICBpZiAoIWZuKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlRXZlbnQsIGZuLCBCb29sZWFuKGRlbGVnYXRpb25TZWxlY3RvcikpO1xuICBkZWxldGUgZXZlbnRzW3R5cGVFdmVudF1bZm4udWlkRXZlbnRdO1xufVxuZnVuY3Rpb24gcmVtb3ZlTmFtZXNwYWNlZEhhbmRsZXJzKGVsZW1lbnQsIGV2ZW50cywgdHlwZUV2ZW50LCBuYW1lc3BhY2UpIHtcbiAgY29uc3Qgc3RvcmVFbGVtZW50RXZlbnQgPSBldmVudHNbdHlwZUV2ZW50XSB8fCB7fTtcbiAgZm9yIChjb25zdCBbaGFuZGxlcktleSwgZXZlbnRdIG9mIE9iamVjdC5lbnRyaWVzKHN0b3JlRWxlbWVudEV2ZW50KSkge1xuICAgIGlmIChoYW5kbGVyS2V5LmluY2x1ZGVzKG5hbWVzcGFjZSkpIHtcbiAgICAgIHJlbW92ZUhhbmRsZXIoZWxlbWVudCwgZXZlbnRzLCB0eXBlRXZlbnQsIGV2ZW50LmNhbGxhYmxlLCBldmVudC5kZWxlZ2F0aW9uU2VsZWN0b3IpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZ2V0VHlwZUV2ZW50KGV2ZW50KSB7XG4gIC8vIGFsbG93IHRvIGdldCB0aGUgbmF0aXZlIGV2ZW50cyBmcm9tIG5hbWVzcGFjZWQgZXZlbnRzICgnY2xpY2suYnMuYnV0dG9uJyAtLT4gJ2NsaWNrJylcbiAgZXZlbnQgPSBldmVudC5yZXBsYWNlKHN0cmlwTmFtZVJlZ2V4LCAnJyk7XG4gIHJldHVybiBjdXN0b21FdmVudHNbZXZlbnRdIHx8IGV2ZW50O1xufVxuY29uc3QgRXZlbnRIYW5kbGVyID0ge1xuICBvbihlbGVtZW50LCBldmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZ1bmN0aW9uKSB7XG4gICAgYWRkSGFuZGxlcihlbGVtZW50LCBldmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZ1bmN0aW9uLCBmYWxzZSk7XG4gIH0sXG4gIG9uZShlbGVtZW50LCBldmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZ1bmN0aW9uKSB7XG4gICAgYWRkSGFuZGxlcihlbGVtZW50LCBldmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZ1bmN0aW9uLCB0cnVlKTtcbiAgfSxcbiAgb2ZmKGVsZW1lbnQsIG9yaWdpbmFsVHlwZUV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRnVuY3Rpb24pIHtcbiAgICBpZiAodHlwZW9mIG9yaWdpbmFsVHlwZUV2ZW50ICE9PSAnc3RyaW5nJyB8fCAhZWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBbaXNEZWxlZ2F0ZWQsIGNhbGxhYmxlLCB0eXBlRXZlbnRdID0gbm9ybWFsaXplUGFyYW1ldGVycyhvcmlnaW5hbFR5cGVFdmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZ1bmN0aW9uKTtcbiAgICBjb25zdCBpbk5hbWVzcGFjZSA9IHR5cGVFdmVudCAhPT0gb3JpZ2luYWxUeXBlRXZlbnQ7XG4gICAgY29uc3QgZXZlbnRzID0gZ2V0RWxlbWVudEV2ZW50cyhlbGVtZW50KTtcbiAgICBjb25zdCBzdG9yZUVsZW1lbnRFdmVudCA9IGV2ZW50c1t0eXBlRXZlbnRdIHx8IHt9O1xuICAgIGNvbnN0IGlzTmFtZXNwYWNlID0gb3JpZ2luYWxUeXBlRXZlbnQuc3RhcnRzV2l0aCgnLicpO1xuICAgIGlmICh0eXBlb2YgY2FsbGFibGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAvLyBTaW1wbGVzdCBjYXNlOiBoYW5kbGVyIGlzIHBhc3NlZCwgcmVtb3ZlIHRoYXQgbGlzdGVuZXIgT05MWS5cbiAgICAgIGlmICghT2JqZWN0LmtleXMoc3RvcmVFbGVtZW50RXZlbnQpLmxlbmd0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZW1vdmVIYW5kbGVyKGVsZW1lbnQsIGV2ZW50cywgdHlwZUV2ZW50LCBjYWxsYWJsZSwgaXNEZWxlZ2F0ZWQgPyBoYW5kbGVyIDogbnVsbCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChpc05hbWVzcGFjZSkge1xuICAgICAgZm9yIChjb25zdCBlbGVtZW50RXZlbnQgb2YgT2JqZWN0LmtleXMoZXZlbnRzKSkge1xuICAgICAgICByZW1vdmVOYW1lc3BhY2VkSGFuZGxlcnMoZWxlbWVudCwgZXZlbnRzLCBlbGVtZW50RXZlbnQsIG9yaWdpbmFsVHlwZUV2ZW50LnNsaWNlKDEpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBba2V5SGFuZGxlcnMsIGV2ZW50XSBvZiBPYmplY3QuZW50cmllcyhzdG9yZUVsZW1lbnRFdmVudCkpIHtcbiAgICAgIGNvbnN0IGhhbmRsZXJLZXkgPSBrZXlIYW5kbGVycy5yZXBsYWNlKHN0cmlwVWlkUmVnZXgsICcnKTtcbiAgICAgIGlmICghaW5OYW1lc3BhY2UgfHwgb3JpZ2luYWxUeXBlRXZlbnQuaW5jbHVkZXMoaGFuZGxlcktleSkpIHtcbiAgICAgICAgcmVtb3ZlSGFuZGxlcihlbGVtZW50LCBldmVudHMsIHR5cGVFdmVudCwgZXZlbnQuY2FsbGFibGUsIGV2ZW50LmRlbGVnYXRpb25TZWxlY3Rvcik7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICB0cmlnZ2VyKGVsZW1lbnQsIGV2ZW50LCBhcmdzKSB7XG4gICAgaWYgKHR5cGVvZiBldmVudCAhPT0gJ3N0cmluZycgfHwgIWVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCAkID0gZ2V0alF1ZXJ5KCk7XG4gICAgY29uc3QgdHlwZUV2ZW50ID0gZ2V0VHlwZUV2ZW50KGV2ZW50KTtcbiAgICBjb25zdCBpbk5hbWVzcGFjZSA9IGV2ZW50ICE9PSB0eXBlRXZlbnQ7XG4gICAgbGV0IGpRdWVyeUV2ZW50ID0gbnVsbDtcbiAgICBsZXQgYnViYmxlcyA9IHRydWU7XG4gICAgbGV0IG5hdGl2ZURpc3BhdGNoID0gdHJ1ZTtcbiAgICBsZXQgZGVmYXVsdFByZXZlbnRlZCA9IGZhbHNlO1xuICAgIGlmIChpbk5hbWVzcGFjZSAmJiAkKSB7XG4gICAgICBqUXVlcnlFdmVudCA9ICQuRXZlbnQoZXZlbnQsIGFyZ3MpO1xuICAgICAgJChlbGVtZW50KS50cmlnZ2VyKGpRdWVyeUV2ZW50KTtcbiAgICAgIGJ1YmJsZXMgPSAhalF1ZXJ5RXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKTtcbiAgICAgIG5hdGl2ZURpc3BhdGNoID0gIWpRdWVyeUV2ZW50LmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCk7XG4gICAgICBkZWZhdWx0UHJldmVudGVkID0galF1ZXJ5RXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCk7XG4gICAgfVxuICAgIGNvbnN0IGV2dCA9IGh5ZHJhdGVPYmoobmV3IEV2ZW50KGV2ZW50LCB7XG4gICAgICBidWJibGVzLFxuICAgICAgY2FuY2VsYWJsZTogdHJ1ZVxuICAgIH0pLCBhcmdzKTtcbiAgICBpZiAoZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICAgIGlmIChuYXRpdmVEaXNwYXRjaCkge1xuICAgICAgZWxlbWVudC5kaXNwYXRjaEV2ZW50KGV2dCk7XG4gICAgfVxuICAgIGlmIChldnQuZGVmYXVsdFByZXZlbnRlZCAmJiBqUXVlcnlFdmVudCkge1xuICAgICAgalF1ZXJ5RXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgcmV0dXJuIGV2dDtcbiAgfVxufTtcbmZ1bmN0aW9uIGh5ZHJhdGVPYmoob2JqLCBtZXRhID0ge30pIHtcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMobWV0YSkpIHtcbiAgICB0cnkge1xuICAgICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgICB9IGNhdGNoIChfdW51c2VkKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG9iajtcbn1cblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIGRvbS9tYW5pcHVsYXRvci5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZURhdGEodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09PSAndHJ1ZScpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAodmFsdWUgPT09ICdmYWxzZScpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKHZhbHVlID09PSBOdW1iZXIodmFsdWUpLnRvU3RyaW5nKCkpIHtcbiAgICByZXR1cm4gTnVtYmVyKHZhbHVlKTtcbiAgfVxuICBpZiAodmFsdWUgPT09ICcnIHx8IHZhbHVlID09PSAnbnVsbCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICB0cnkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkpO1xuICB9IGNhdGNoIChfdW51c2VkKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59XG5mdW5jdGlvbiBub3JtYWxpemVEYXRhS2V5KGtleSkge1xuICByZXR1cm4ga2V5LnJlcGxhY2UoL1tBLVpdL2csIGNociA9PiBgLSR7Y2hyLnRvTG93ZXJDYXNlKCl9YCk7XG59XG5jb25zdCBNYW5pcHVsYXRvciA9IHtcbiAgc2V0RGF0YUF0dHJpYnV0ZShlbGVtZW50LCBrZXksIHZhbHVlKSB7XG4gICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoYGRhdGEtYnMtJHtub3JtYWxpemVEYXRhS2V5KGtleSl9YCwgdmFsdWUpO1xuICB9LFxuICByZW1vdmVEYXRhQXR0cmlidXRlKGVsZW1lbnQsIGtleSkge1xuICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGBkYXRhLWJzLSR7bm9ybWFsaXplRGF0YUtleShrZXkpfWApO1xuICB9LFxuICBnZXREYXRhQXR0cmlidXRlcyhlbGVtZW50KSB7XG4gICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSB7fTtcbiAgICBjb25zdCBic0tleXMgPSBPYmplY3Qua2V5cyhlbGVtZW50LmRhdGFzZXQpLmZpbHRlcihrZXkgPT4ga2V5LnN0YXJ0c1dpdGgoJ2JzJykgJiYgIWtleS5zdGFydHNXaXRoKCdic0NvbmZpZycpKTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBic0tleXMpIHtcbiAgICAgIGxldCBwdXJlS2V5ID0ga2V5LnJlcGxhY2UoL15icy8sICcnKTtcbiAgICAgIHB1cmVLZXkgPSBwdXJlS2V5LmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpICsgcHVyZUtleS5zbGljZSgxLCBwdXJlS2V5Lmxlbmd0aCk7XG4gICAgICBhdHRyaWJ1dGVzW3B1cmVLZXldID0gbm9ybWFsaXplRGF0YShlbGVtZW50LmRhdGFzZXRba2V5XSk7XG4gICAgfVxuICAgIHJldHVybiBhdHRyaWJ1dGVzO1xuICB9LFxuICBnZXREYXRhQXR0cmlidXRlKGVsZW1lbnQsIGtleSkge1xuICAgIHJldHVybiBub3JtYWxpemVEYXRhKGVsZW1lbnQuZ2V0QXR0cmlidXRlKGBkYXRhLWJzLSR7bm9ybWFsaXplRGF0YUtleShrZXkpfWApKTtcbiAgfVxufTtcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIHV0aWwvY29uZmlnLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBDb25maWcge1xuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4ge307XG4gIH1cbiAgc3RhdGljIGdldCBEZWZhdWx0VHlwZSgpIHtcbiAgICByZXR1cm4ge307XG4gIH1cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignWW91IGhhdmUgdG8gaW1wbGVtZW50IHRoZSBzdGF0aWMgbWV0aG9kIFwiTkFNRVwiLCBmb3IgZWFjaCBjb21wb25lbnQhJyk7XG4gIH1cbiAgX2dldENvbmZpZyhjb25maWcpIHtcbiAgICBjb25maWcgPSB0aGlzLl9tZXJnZUNvbmZpZ09iaihjb25maWcpO1xuICAgIGNvbmZpZyA9IHRoaXMuX2NvbmZpZ0FmdGVyTWVyZ2UoY29uZmlnKTtcbiAgICB0aGlzLl90eXBlQ2hlY2tDb25maWcoY29uZmlnKTtcbiAgICByZXR1cm4gY29uZmlnO1xuICB9XG4gIF9jb25maWdBZnRlck1lcmdlKGNvbmZpZykge1xuICAgIHJldHVybiBjb25maWc7XG4gIH1cbiAgX21lcmdlQ29uZmlnT2JqKGNvbmZpZywgZWxlbWVudCkge1xuICAgIGNvbnN0IGpzb25Db25maWcgPSBpc0VsZW1lbnQoZWxlbWVudCkgPyBNYW5pcHVsYXRvci5nZXREYXRhQXR0cmlidXRlKGVsZW1lbnQsICdjb25maWcnKSA6IHt9OyAvLyB0cnkgdG8gcGFyc2VcblxuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLmNvbnN0cnVjdG9yLkRlZmF1bHQsXG4gICAgICAuLi4odHlwZW9mIGpzb25Db25maWcgPT09ICdvYmplY3QnID8ganNvbkNvbmZpZyA6IHt9KSxcbiAgICAgIC4uLihpc0VsZW1lbnQoZWxlbWVudCkgPyBNYW5pcHVsYXRvci5nZXREYXRhQXR0cmlidXRlcyhlbGVtZW50KSA6IHt9KSxcbiAgICAgIC4uLih0eXBlb2YgY29uZmlnID09PSAnb2JqZWN0JyA/IGNvbmZpZyA6IHt9KVxuICAgIH07XG4gIH1cbiAgX3R5cGVDaGVja0NvbmZpZyhjb25maWcsIGNvbmZpZ1R5cGVzID0gdGhpcy5jb25zdHJ1Y3Rvci5EZWZhdWx0VHlwZSkge1xuICAgIGZvciAoY29uc3QgW3Byb3BlcnR5LCBleHBlY3RlZFR5cGVzXSBvZiBPYmplY3QuZW50cmllcyhjb25maWdUeXBlcykpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gY29uZmlnW3Byb3BlcnR5XTtcbiAgICAgIGNvbnN0IHZhbHVlVHlwZSA9IGlzRWxlbWVudCh2YWx1ZSkgPyAnZWxlbWVudCcgOiB0b1R5cGUodmFsdWUpO1xuICAgICAgaWYgKCFuZXcgUmVnRXhwKGV4cGVjdGVkVHlwZXMpLnRlc3QodmFsdWVUeXBlKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAke3RoaXMuY29uc3RydWN0b3IuTkFNRS50b1VwcGVyQ2FzZSgpfTogT3B0aW9uIFwiJHtwcm9wZXJ0eX1cIiBwcm92aWRlZCB0eXBlIFwiJHt2YWx1ZVR5cGV9XCIgYnV0IGV4cGVjdGVkIHR5cGUgXCIke2V4cGVjdGVkVHlwZXN9XCIuYCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCBiYXNlLWNvbXBvbmVudC5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBWRVJTSU9OID0gJzUuMy4zJztcblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgQmFzZUNvbXBvbmVudCBleHRlbmRzIENvbmZpZyB7XG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIGNvbmZpZykge1xuICAgIHN1cGVyKCk7XG4gICAgZWxlbWVudCA9IGdldEVsZW1lbnQoZWxlbWVudCk7XG4gICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2VsZW1lbnQgPSBlbGVtZW50O1xuICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuX2dldENvbmZpZyhjb25maWcpO1xuICAgIERhdGEuc2V0KHRoaXMuX2VsZW1lbnQsIHRoaXMuY29uc3RydWN0b3IuREFUQV9LRVksIHRoaXMpO1xuICB9XG5cbiAgLy8gUHVibGljXG4gIGRpc3Bvc2UoKSB7XG4gICAgRGF0YS5yZW1vdmUodGhpcy5fZWxlbWVudCwgdGhpcy5jb25zdHJ1Y3Rvci5EQVRBX0tFWSk7XG4gICAgRXZlbnRIYW5kbGVyLm9mZih0aGlzLl9lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLkVWRU5UX0tFWSk7XG4gICAgZm9yIChjb25zdCBwcm9wZXJ0eU5hbWUgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpIHtcbiAgICAgIHRoaXNbcHJvcGVydHlOYW1lXSA9IG51bGw7XG4gICAgfVxuICB9XG4gIF9xdWV1ZUNhbGxiYWNrKGNhbGxiYWNrLCBlbGVtZW50LCBpc0FuaW1hdGVkID0gdHJ1ZSkge1xuICAgIGV4ZWN1dGVBZnRlclRyYW5zaXRpb24oY2FsbGJhY2ssIGVsZW1lbnQsIGlzQW5pbWF0ZWQpO1xuICB9XG4gIF9nZXRDb25maWcoY29uZmlnKSB7XG4gICAgY29uZmlnID0gdGhpcy5fbWVyZ2VDb25maWdPYmooY29uZmlnLCB0aGlzLl9lbGVtZW50KTtcbiAgICBjb25maWcgPSB0aGlzLl9jb25maWdBZnRlck1lcmdlKGNvbmZpZyk7XG4gICAgdGhpcy5fdHlwZUNoZWNrQ29uZmlnKGNvbmZpZyk7XG4gICAgcmV0dXJuIGNvbmZpZztcbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgZ2V0SW5zdGFuY2UoZWxlbWVudCkge1xuICAgIHJldHVybiBEYXRhLmdldChnZXRFbGVtZW50KGVsZW1lbnQpLCB0aGlzLkRBVEFfS0VZKTtcbiAgfVxuICBzdGF0aWMgZ2V0T3JDcmVhdGVJbnN0YW5jZShlbGVtZW50LCBjb25maWcgPSB7fSkge1xuICAgIHJldHVybiB0aGlzLmdldEluc3RhbmNlKGVsZW1lbnQpIHx8IG5ldyB0aGlzKGVsZW1lbnQsIHR5cGVvZiBjb25maWcgPT09ICdvYmplY3QnID8gY29uZmlnIDogbnVsbCk7XG4gIH1cbiAgc3RhdGljIGdldCBWRVJTSU9OKCkge1xuICAgIHJldHVybiBWRVJTSU9OO1xuICB9XG4gIHN0YXRpYyBnZXQgREFUQV9LRVkoKSB7XG4gICAgcmV0dXJuIGBicy4ke3RoaXMuTkFNRX1gO1xuICB9XG4gIHN0YXRpYyBnZXQgRVZFTlRfS0VZKCkge1xuICAgIHJldHVybiBgLiR7dGhpcy5EQVRBX0tFWX1gO1xuICB9XG4gIHN0YXRpYyBldmVudE5hbWUobmFtZSkge1xuICAgIHJldHVybiBgJHtuYW1lfSR7dGhpcy5FVkVOVF9LRVl9YDtcbiAgfVxufVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgZG9tL3NlbGVjdG9yLWVuZ2luZS5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmNvbnN0IGdldFNlbGVjdG9yID0gZWxlbWVudCA9PiB7XG4gIGxldCBzZWxlY3RvciA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWJzLXRhcmdldCcpO1xuICBpZiAoIXNlbGVjdG9yIHx8IHNlbGVjdG9yID09PSAnIycpIHtcbiAgICBsZXQgaHJlZkF0dHJpYnV0ZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdocmVmJyk7XG5cbiAgICAvLyBUaGUgb25seSB2YWxpZCBjb250ZW50IHRoYXQgY291bGQgZG91YmxlIGFzIGEgc2VsZWN0b3IgYXJlIElEcyBvciBjbGFzc2VzLFxuICAgIC8vIHNvIGV2ZXJ5dGhpbmcgc3RhcnRpbmcgd2l0aCBgI2Agb3IgYC5gLiBJZiBhIFwicmVhbFwiIFVSTCBpcyB1c2VkIGFzIHRoZSBzZWxlY3RvcixcbiAgICAvLyBgZG9jdW1lbnQucXVlcnlTZWxlY3RvcmAgd2lsbCByaWdodGZ1bGx5IGNvbXBsYWluIGl0IGlzIGludmFsaWQuXG4gICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9pc3N1ZXMvMzIyNzNcbiAgICBpZiAoIWhyZWZBdHRyaWJ1dGUgfHwgIWhyZWZBdHRyaWJ1dGUuaW5jbHVkZXMoJyMnKSAmJiAhaHJlZkF0dHJpYnV0ZS5zdGFydHNXaXRoKCcuJykpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIEp1c3QgaW4gY2FzZSBzb21lIENNUyBwdXRzIG91dCBhIGZ1bGwgVVJMIHdpdGggdGhlIGFuY2hvciBhcHBlbmRlZFxuICAgIGlmIChocmVmQXR0cmlidXRlLmluY2x1ZGVzKCcjJykgJiYgIWhyZWZBdHRyaWJ1dGUuc3RhcnRzV2l0aCgnIycpKSB7XG4gICAgICBocmVmQXR0cmlidXRlID0gYCMke2hyZWZBdHRyaWJ1dGUuc3BsaXQoJyMnKVsxXX1gO1xuICAgIH1cbiAgICBzZWxlY3RvciA9IGhyZWZBdHRyaWJ1dGUgJiYgaHJlZkF0dHJpYnV0ZSAhPT0gJyMnID8gaHJlZkF0dHJpYnV0ZS50cmltKCkgOiBudWxsO1xuICB9XG4gIHJldHVybiBzZWxlY3RvciA/IHNlbGVjdG9yLnNwbGl0KCcsJykubWFwKHNlbCA9PiBwYXJzZVNlbGVjdG9yKHNlbCkpLmpvaW4oJywnKSA6IG51bGw7XG59O1xuY29uc3QgU2VsZWN0b3JFbmdpbmUgPSB7XG4gIGZpbmQoc2VsZWN0b3IsIGVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICByZXR1cm4gW10uY29uY2F0KC4uLkVsZW1lbnQucHJvdG90eXBlLnF1ZXJ5U2VsZWN0b3JBbGwuY2FsbChlbGVtZW50LCBzZWxlY3RvcikpO1xuICB9LFxuICBmaW5kT25lKHNlbGVjdG9yLCBlbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgcmV0dXJuIEVsZW1lbnQucHJvdG90eXBlLnF1ZXJ5U2VsZWN0b3IuY2FsbChlbGVtZW50LCBzZWxlY3Rvcik7XG4gIH0sXG4gIGNoaWxkcmVuKGVsZW1lbnQsIHNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIFtdLmNvbmNhdCguLi5lbGVtZW50LmNoaWxkcmVuKS5maWx0ZXIoY2hpbGQgPT4gY2hpbGQubWF0Y2hlcyhzZWxlY3RvcikpO1xuICB9LFxuICBwYXJlbnRzKGVsZW1lbnQsIHNlbGVjdG9yKSB7XG4gICAgY29uc3QgcGFyZW50cyA9IFtdO1xuICAgIGxldCBhbmNlc3RvciA9IGVsZW1lbnQucGFyZW50Tm9kZS5jbG9zZXN0KHNlbGVjdG9yKTtcbiAgICB3aGlsZSAoYW5jZXN0b3IpIHtcbiAgICAgIHBhcmVudHMucHVzaChhbmNlc3Rvcik7XG4gICAgICBhbmNlc3RvciA9IGFuY2VzdG9yLnBhcmVudE5vZGUuY2xvc2VzdChzZWxlY3Rvcik7XG4gICAgfVxuICAgIHJldHVybiBwYXJlbnRzO1xuICB9LFxuICBwcmV2KGVsZW1lbnQsIHNlbGVjdG9yKSB7XG4gICAgbGV0IHByZXZpb3VzID0gZWxlbWVudC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nO1xuICAgIHdoaWxlIChwcmV2aW91cykge1xuICAgICAgaWYgKHByZXZpb3VzLm1hdGNoZXMoc2VsZWN0b3IpKSB7XG4gICAgICAgIHJldHVybiBbcHJldmlvdXNdO1xuICAgICAgfVxuICAgICAgcHJldmlvdXMgPSBwcmV2aW91cy5wcmV2aW91c0VsZW1lbnRTaWJsaW5nO1xuICAgIH1cbiAgICByZXR1cm4gW107XG4gIH0sXG4gIC8vIFRPRE86IHRoaXMgaXMgbm93IHVudXNlZDsgcmVtb3ZlIGxhdGVyIGFsb25nIHdpdGggcHJldigpXG4gIG5leHQoZWxlbWVudCwgc2VsZWN0b3IpIHtcbiAgICBsZXQgbmV4dCA9IGVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nO1xuICAgIHdoaWxlIChuZXh0KSB7XG4gICAgICBpZiAobmV4dC5tYXRjaGVzKHNlbGVjdG9yKSkge1xuICAgICAgICByZXR1cm4gW25leHRdO1xuICAgICAgfVxuICAgICAgbmV4dCA9IG5leHQubmV4dEVsZW1lbnRTaWJsaW5nO1xuICAgIH1cbiAgICByZXR1cm4gW107XG4gIH0sXG4gIGZvY3VzYWJsZUNoaWxkcmVuKGVsZW1lbnQpIHtcbiAgICBjb25zdCBmb2N1c2FibGVzID0gWydhJywgJ2J1dHRvbicsICdpbnB1dCcsICd0ZXh0YXJlYScsICdzZWxlY3QnLCAnZGV0YWlscycsICdbdGFiaW5kZXhdJywgJ1tjb250ZW50ZWRpdGFibGU9XCJ0cnVlXCJdJ10ubWFwKHNlbGVjdG9yID0+IGAke3NlbGVjdG9yfTpub3QoW3RhYmluZGV4Xj1cIi1cIl0pYCkuam9pbignLCcpO1xuICAgIHJldHVybiB0aGlzLmZpbmQoZm9jdXNhYmxlcywgZWxlbWVudCkuZmlsdGVyKGVsID0+ICFpc0Rpc2FibGVkKGVsKSAmJiBpc1Zpc2libGUoZWwpKTtcbiAgfSxcbiAgZ2V0U2VsZWN0b3JGcm9tRWxlbWVudChlbGVtZW50KSB7XG4gICAgY29uc3Qgc2VsZWN0b3IgPSBnZXRTZWxlY3RvcihlbGVtZW50KTtcbiAgICBpZiAoc2VsZWN0b3IpIHtcbiAgICAgIHJldHVybiBTZWxlY3RvckVuZ2luZS5maW5kT25lKHNlbGVjdG9yKSA/IHNlbGVjdG9yIDogbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH0sXG4gIGdldEVsZW1lbnRGcm9tU2VsZWN0b3IoZWxlbWVudCkge1xuICAgIGNvbnN0IHNlbGVjdG9yID0gZ2V0U2VsZWN0b3IoZWxlbWVudCk7XG4gICAgcmV0dXJuIHNlbGVjdG9yID8gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShzZWxlY3RvcikgOiBudWxsO1xuICB9LFxuICBnZXRNdWx0aXBsZUVsZW1lbnRzRnJvbVNlbGVjdG9yKGVsZW1lbnQpIHtcbiAgICBjb25zdCBzZWxlY3RvciA9IGdldFNlbGVjdG9yKGVsZW1lbnQpO1xuICAgIHJldHVybiBzZWxlY3RvciA/IFNlbGVjdG9yRW5naW5lLmZpbmQoc2VsZWN0b3IpIDogW107XG4gIH1cbn07XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCB1dGlsL2NvbXBvbmVudC1mdW5jdGlvbnMuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5jb25zdCBlbmFibGVEaXNtaXNzVHJpZ2dlciA9IChjb21wb25lbnQsIG1ldGhvZCA9ICdoaWRlJykgPT4ge1xuICBjb25zdCBjbGlja0V2ZW50ID0gYGNsaWNrLmRpc21pc3Mke2NvbXBvbmVudC5FVkVOVF9LRVl9YDtcbiAgY29uc3QgbmFtZSA9IGNvbXBvbmVudC5OQU1FO1xuICBFdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIGNsaWNrRXZlbnQsIGBbZGF0YS1icy1kaXNtaXNzPVwiJHtuYW1lfVwiXWAsIGZ1bmN0aW9uIChldmVudCkge1xuICAgIGlmIChbJ0EnLCAnQVJFQSddLmluY2x1ZGVzKHRoaXMudGFnTmFtZSkpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICAgIGlmIChpc0Rpc2FibGVkKHRoaXMpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHRhcmdldCA9IFNlbGVjdG9yRW5naW5lLmdldEVsZW1lbnRGcm9tU2VsZWN0b3IodGhpcykgfHwgdGhpcy5jbG9zZXN0KGAuJHtuYW1lfWApO1xuICAgIGNvbnN0IGluc3RhbmNlID0gY29tcG9uZW50LmdldE9yQ3JlYXRlSW5zdGFuY2UodGFyZ2V0KTtcblxuICAgIC8vIE1ldGhvZCBhcmd1bWVudCBpcyBsZWZ0LCBmb3IgQWxlcnQgYW5kIG9ubHksIGFzIGl0IGRvZXNuJ3QgaW1wbGVtZW50IHRoZSAnaGlkZScgbWV0aG9kXG4gICAgaW5zdGFuY2VbbWV0aG9kXSgpO1xuICB9KTtcbn07XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCBhbGVydC5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FJGYgPSAnYWxlcnQnO1xuY29uc3QgREFUQV9LRVkkYSA9ICdicy5hbGVydCc7XG5jb25zdCBFVkVOVF9LRVkkYiA9IGAuJHtEQVRBX0tFWSRhfWA7XG5jb25zdCBFVkVOVF9DTE9TRSA9IGBjbG9zZSR7RVZFTlRfS0VZJGJ9YDtcbmNvbnN0IEVWRU5UX0NMT1NFRCA9IGBjbG9zZWQke0VWRU5UX0tFWSRifWA7XG5jb25zdCBDTEFTU19OQU1FX0ZBREUkNSA9ICdmYWRlJztcbmNvbnN0IENMQVNTX05BTUVfU0hPVyQ4ID0gJ3Nob3cnO1xuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBBbGVydCBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRSRmO1xuICB9XG5cbiAgLy8gUHVibGljXG4gIGNsb3NlKCkge1xuICAgIGNvbnN0IGNsb3NlRXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9DTE9TRSk7XG4gICAgaWYgKGNsb3NlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TSE9XJDgpO1xuICAgIGNvbnN0IGlzQW5pbWF0ZWQgPSB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0ZBREUkNSk7XG4gICAgdGhpcy5fcXVldWVDYWxsYmFjaygoKSA9PiB0aGlzLl9kZXN0cm95RWxlbWVudCgpLCB0aGlzLl9lbGVtZW50LCBpc0FuaW1hdGVkKTtcbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX2Rlc3Ryb3lFbGVtZW50KCkge1xuICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlKCk7XG4gICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfQ0xPU0VEKTtcbiAgICB0aGlzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGF0YSA9IEFsZXJ0LmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcyk7XG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGRhdGFbY29uZmlnXSA9PT0gdW5kZWZpbmVkIHx8IGNvbmZpZy5zdGFydHNXaXRoKCdfJykgfHwgY29uZmlnID09PSAnY29uc3RydWN0b3InKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYCk7XG4gICAgICB9XG4gICAgICBkYXRhW2NvbmZpZ10odGhpcyk7XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBEYXRhIEFQSSBpbXBsZW1lbnRhdGlvblxuICovXG5cbmVuYWJsZURpc21pc3NUcmlnZ2VyKEFsZXJ0LCAnY2xvc2UnKTtcblxuLyoqXG4gKiBqUXVlcnlcbiAqL1xuXG5kZWZpbmVKUXVlcnlQbHVnaW4oQWxlcnQpO1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgYnV0dG9uLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IE5BTUUkZSA9ICdidXR0b24nO1xuY29uc3QgREFUQV9LRVkkOSA9ICdicy5idXR0b24nO1xuY29uc3QgRVZFTlRfS0VZJGEgPSBgLiR7REFUQV9LRVkkOX1gO1xuY29uc3QgREFUQV9BUElfS0VZJDYgPSAnLmRhdGEtYXBpJztcbmNvbnN0IENMQVNTX05BTUVfQUNUSVZFJDMgPSAnYWN0aXZlJztcbmNvbnN0IFNFTEVDVE9SX0RBVEFfVE9HR0xFJDUgPSAnW2RhdGEtYnMtdG9nZ2xlPVwiYnV0dG9uXCJdJztcbmNvbnN0IEVWRU5UX0NMSUNLX0RBVEFfQVBJJDYgPSBgY2xpY2ske0VWRU5UX0tFWSRhfSR7REFUQV9BUElfS0VZJDZ9YDtcblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgQnV0dG9uIGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FJGU7XG4gIH1cblxuICAvLyBQdWJsaWNcbiAgdG9nZ2xlKCkge1xuICAgIC8vIFRvZ2dsZSBjbGFzcyBhbmQgc3luYyB0aGUgYGFyaWEtcHJlc3NlZGAgYXR0cmlidXRlIHdpdGggdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgYC50b2dnbGUoKWAgbWV0aG9kXG4gICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtcHJlc3NlZCcsIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnRvZ2dsZShDTEFTU19OQU1FX0FDVElWRSQzKSk7XG4gIH1cblxuICAvLyBTdGF0aWNcbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBCdXR0b24uZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzKTtcbiAgICAgIGlmIChjb25maWcgPT09ICd0b2dnbGUnKSB7XG4gICAgICAgIGRhdGFbY29uZmlnXSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogRGF0YSBBUEkgaW1wbGVtZW50YXRpb25cbiAqL1xuXG5FdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0NMSUNLX0RBVEFfQVBJJDYsIFNFTEVDVE9SX0RBVEFfVE9HR0xFJDUsIGV2ZW50ID0+IHtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgY29uc3QgYnV0dG9uID0gZXZlbnQudGFyZ2V0LmNsb3Nlc3QoU0VMRUNUT1JfREFUQV9UT0dHTEUkNSk7XG4gIGNvbnN0IGRhdGEgPSBCdXR0b24uZ2V0T3JDcmVhdGVJbnN0YW5jZShidXR0b24pO1xuICBkYXRhLnRvZ2dsZSgpO1xufSk7XG5cbi8qKlxuICogalF1ZXJ5XG4gKi9cblxuZGVmaW5lSlF1ZXJ5UGx1Z2luKEJ1dHRvbik7XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCB1dGlsL3N3aXBlLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IE5BTUUkZCA9ICdzd2lwZSc7XG5jb25zdCBFVkVOVF9LRVkkOSA9ICcuYnMuc3dpcGUnO1xuY29uc3QgRVZFTlRfVE9VQ0hTVEFSVCA9IGB0b3VjaHN0YXJ0JHtFVkVOVF9LRVkkOX1gO1xuY29uc3QgRVZFTlRfVE9VQ0hNT1ZFID0gYHRvdWNobW92ZSR7RVZFTlRfS0VZJDl9YDtcbmNvbnN0IEVWRU5UX1RPVUNIRU5EID0gYHRvdWNoZW5kJHtFVkVOVF9LRVkkOX1gO1xuY29uc3QgRVZFTlRfUE9JTlRFUkRPV04gPSBgcG9pbnRlcmRvd24ke0VWRU5UX0tFWSQ5fWA7XG5jb25zdCBFVkVOVF9QT0lOVEVSVVAgPSBgcG9pbnRlcnVwJHtFVkVOVF9LRVkkOX1gO1xuY29uc3QgUE9JTlRFUl9UWVBFX1RPVUNIID0gJ3RvdWNoJztcbmNvbnN0IFBPSU5URVJfVFlQRV9QRU4gPSAncGVuJztcbmNvbnN0IENMQVNTX05BTUVfUE9JTlRFUl9FVkVOVCA9ICdwb2ludGVyLWV2ZW50JztcbmNvbnN0IFNXSVBFX1RIUkVTSE9MRCA9IDQwO1xuY29uc3QgRGVmYXVsdCRjID0ge1xuICBlbmRDYWxsYmFjazogbnVsbCxcbiAgbGVmdENhbGxiYWNrOiBudWxsLFxuICByaWdodENhbGxiYWNrOiBudWxsXG59O1xuY29uc3QgRGVmYXVsdFR5cGUkYyA9IHtcbiAgZW5kQ2FsbGJhY2s6ICcoZnVuY3Rpb258bnVsbCknLFxuICBsZWZ0Q2FsbGJhY2s6ICcoZnVuY3Rpb258bnVsbCknLFxuICByaWdodENhbGxiYWNrOiAnKGZ1bmN0aW9ufG51bGwpJ1xufTtcblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgU3dpcGUgZXh0ZW5kcyBDb25maWcge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBjb25maWcpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX2VsZW1lbnQgPSBlbGVtZW50O1xuICAgIGlmICghZWxlbWVudCB8fCAhU3dpcGUuaXNTdXBwb3J0ZWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9jb25maWcgPSB0aGlzLl9nZXRDb25maWcoY29uZmlnKTtcbiAgICB0aGlzLl9kZWx0YVggPSAwO1xuICAgIHRoaXMuX3N1cHBvcnRQb2ludGVyRXZlbnRzID0gQm9vbGVhbih3aW5kb3cuUG9pbnRlckV2ZW50KTtcbiAgICB0aGlzLl9pbml0RXZlbnRzKCk7XG4gIH1cblxuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4gRGVmYXVsdCRjO1xuICB9XG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRUeXBlJGM7XG4gIH1cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FJGQ7XG4gIH1cblxuICAvLyBQdWJsaWNcbiAgZGlzcG9zZSgpIHtcbiAgICBFdmVudEhhbmRsZXIub2ZmKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0tFWSQ5KTtcbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX3N0YXJ0KGV2ZW50KSB7XG4gICAgaWYgKCF0aGlzLl9zdXBwb3J0UG9pbnRlckV2ZW50cykge1xuICAgICAgdGhpcy5fZGVsdGFYID0gZXZlbnQudG91Y2hlc1swXS5jbGllbnRYO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5fZXZlbnRJc1BvaW50ZXJQZW5Ub3VjaChldmVudCkpIHtcbiAgICAgIHRoaXMuX2RlbHRhWCA9IGV2ZW50LmNsaWVudFg7XG4gICAgfVxuICB9XG4gIF9lbmQoZXZlbnQpIHtcbiAgICBpZiAodGhpcy5fZXZlbnRJc1BvaW50ZXJQZW5Ub3VjaChldmVudCkpIHtcbiAgICAgIHRoaXMuX2RlbHRhWCA9IGV2ZW50LmNsaWVudFggLSB0aGlzLl9kZWx0YVg7XG4gICAgfVxuICAgIHRoaXMuX2hhbmRsZVN3aXBlKCk7XG4gICAgZXhlY3V0ZSh0aGlzLl9jb25maWcuZW5kQ2FsbGJhY2spO1xuICB9XG4gIF9tb3ZlKGV2ZW50KSB7XG4gICAgdGhpcy5fZGVsdGFYID0gZXZlbnQudG91Y2hlcyAmJiBldmVudC50b3VjaGVzLmxlbmd0aCA+IDEgPyAwIDogZXZlbnQudG91Y2hlc1swXS5jbGllbnRYIC0gdGhpcy5fZGVsdGFYO1xuICB9XG4gIF9oYW5kbGVTd2lwZSgpIHtcbiAgICBjb25zdCBhYnNEZWx0YVggPSBNYXRoLmFicyh0aGlzLl9kZWx0YVgpO1xuICAgIGlmIChhYnNEZWx0YVggPD0gU1dJUEVfVEhSRVNIT0xEKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGRpcmVjdGlvbiA9IGFic0RlbHRhWCAvIHRoaXMuX2RlbHRhWDtcbiAgICB0aGlzLl9kZWx0YVggPSAwO1xuICAgIGlmICghZGlyZWN0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGV4ZWN1dGUoZGlyZWN0aW9uID4gMCA/IHRoaXMuX2NvbmZpZy5yaWdodENhbGxiYWNrIDogdGhpcy5fY29uZmlnLmxlZnRDYWxsYmFjayk7XG4gIH1cbiAgX2luaXRFdmVudHMoKSB7XG4gICAgaWYgKHRoaXMuX3N1cHBvcnRQb2ludGVyRXZlbnRzKSB7XG4gICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfUE9JTlRFUkRPV04sIGV2ZW50ID0+IHRoaXMuX3N0YXJ0KGV2ZW50KSk7XG4gICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfUE9JTlRFUlVQLCBldmVudCA9PiB0aGlzLl9lbmQoZXZlbnQpKTtcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1BPSU5URVJfRVZFTlQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfVE9VQ0hTVEFSVCwgZXZlbnQgPT4gdGhpcy5fc3RhcnQoZXZlbnQpKTtcbiAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9UT1VDSE1PVkUsIGV2ZW50ID0+IHRoaXMuX21vdmUoZXZlbnQpKTtcbiAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9UT1VDSEVORCwgZXZlbnQgPT4gdGhpcy5fZW5kKGV2ZW50KSk7XG4gICAgfVxuICB9XG4gIF9ldmVudElzUG9pbnRlclBlblRvdWNoKGV2ZW50KSB7XG4gICAgcmV0dXJuIHRoaXMuX3N1cHBvcnRQb2ludGVyRXZlbnRzICYmIChldmVudC5wb2ludGVyVHlwZSA9PT0gUE9JTlRFUl9UWVBFX1BFTiB8fCBldmVudC5wb2ludGVyVHlwZSA9PT0gUE9JTlRFUl9UWVBFX1RPVUNIKTtcbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgaXNTdXBwb3J0ZWQoKSB7XG4gICAgcmV0dXJuICdvbnRvdWNoc3RhcnQnIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCB8fCBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMgPiAwO1xuICB9XG59XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCBjYXJvdXNlbC5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FJGMgPSAnY2Fyb3VzZWwnO1xuY29uc3QgREFUQV9LRVkkOCA9ICdicy5jYXJvdXNlbCc7XG5jb25zdCBFVkVOVF9LRVkkOCA9IGAuJHtEQVRBX0tFWSQ4fWA7XG5jb25zdCBEQVRBX0FQSV9LRVkkNSA9ICcuZGF0YS1hcGknO1xuY29uc3QgQVJST1dfTEVGVF9LRVkkMSA9ICdBcnJvd0xlZnQnO1xuY29uc3QgQVJST1dfUklHSFRfS0VZJDEgPSAnQXJyb3dSaWdodCc7XG5jb25zdCBUT1VDSEVWRU5UX0NPTVBBVF9XQUlUID0gNTAwOyAvLyBUaW1lIGZvciBtb3VzZSBjb21wYXQgZXZlbnRzIHRvIGZpcmUgYWZ0ZXIgdG91Y2hcblxuY29uc3QgT1JERVJfTkVYVCA9ICduZXh0JztcbmNvbnN0IE9SREVSX1BSRVYgPSAncHJldic7XG5jb25zdCBESVJFQ1RJT05fTEVGVCA9ICdsZWZ0JztcbmNvbnN0IERJUkVDVElPTl9SSUdIVCA9ICdyaWdodCc7XG5jb25zdCBFVkVOVF9TTElERSA9IGBzbGlkZSR7RVZFTlRfS0VZJDh9YDtcbmNvbnN0IEVWRU5UX1NMSUQgPSBgc2xpZCR7RVZFTlRfS0VZJDh9YDtcbmNvbnN0IEVWRU5UX0tFWURPV04kMSA9IGBrZXlkb3duJHtFVkVOVF9LRVkkOH1gO1xuY29uc3QgRVZFTlRfTU9VU0VFTlRFUiQxID0gYG1vdXNlZW50ZXIke0VWRU5UX0tFWSQ4fWA7XG5jb25zdCBFVkVOVF9NT1VTRUxFQVZFJDEgPSBgbW91c2VsZWF2ZSR7RVZFTlRfS0VZJDh9YDtcbmNvbnN0IEVWRU5UX0RSQUdfU1RBUlQgPSBgZHJhZ3N0YXJ0JHtFVkVOVF9LRVkkOH1gO1xuY29uc3QgRVZFTlRfTE9BRF9EQVRBX0FQSSQzID0gYGxvYWQke0VWRU5UX0tFWSQ4fSR7REFUQV9BUElfS0VZJDV9YDtcbmNvbnN0IEVWRU5UX0NMSUNLX0RBVEFfQVBJJDUgPSBgY2xpY2ske0VWRU5UX0tFWSQ4fSR7REFUQV9BUElfS0VZJDV9YDtcbmNvbnN0IENMQVNTX05BTUVfQ0FST1VTRUwgPSAnY2Fyb3VzZWwnO1xuY29uc3QgQ0xBU1NfTkFNRV9BQ1RJVkUkMiA9ICdhY3RpdmUnO1xuY29uc3QgQ0xBU1NfTkFNRV9TTElERSA9ICdzbGlkZSc7XG5jb25zdCBDTEFTU19OQU1FX0VORCA9ICdjYXJvdXNlbC1pdGVtLWVuZCc7XG5jb25zdCBDTEFTU19OQU1FX1NUQVJUID0gJ2Nhcm91c2VsLWl0ZW0tc3RhcnQnO1xuY29uc3QgQ0xBU1NfTkFNRV9ORVhUID0gJ2Nhcm91c2VsLWl0ZW0tbmV4dCc7XG5jb25zdCBDTEFTU19OQU1FX1BSRVYgPSAnY2Fyb3VzZWwtaXRlbS1wcmV2JztcbmNvbnN0IFNFTEVDVE9SX0FDVElWRSA9ICcuYWN0aXZlJztcbmNvbnN0IFNFTEVDVE9SX0lURU0gPSAnLmNhcm91c2VsLWl0ZW0nO1xuY29uc3QgU0VMRUNUT1JfQUNUSVZFX0lURU0gPSBTRUxFQ1RPUl9BQ1RJVkUgKyBTRUxFQ1RPUl9JVEVNO1xuY29uc3QgU0VMRUNUT1JfSVRFTV9JTUcgPSAnLmNhcm91c2VsLWl0ZW0gaW1nJztcbmNvbnN0IFNFTEVDVE9SX0lORElDQVRPUlMgPSAnLmNhcm91c2VsLWluZGljYXRvcnMnO1xuY29uc3QgU0VMRUNUT1JfREFUQV9TTElERSA9ICdbZGF0YS1icy1zbGlkZV0sIFtkYXRhLWJzLXNsaWRlLXRvXSc7XG5jb25zdCBTRUxFQ1RPUl9EQVRBX1JJREUgPSAnW2RhdGEtYnMtcmlkZT1cImNhcm91c2VsXCJdJztcbmNvbnN0IEtFWV9UT19ESVJFQ1RJT04gPSB7XG4gIFtBUlJPV19MRUZUX0tFWSQxXTogRElSRUNUSU9OX1JJR0hULFxuICBbQVJST1dfUklHSFRfS0VZJDFdOiBESVJFQ1RJT05fTEVGVFxufTtcbmNvbnN0IERlZmF1bHQkYiA9IHtcbiAgaW50ZXJ2YWw6IDUwMDAsXG4gIGtleWJvYXJkOiB0cnVlLFxuICBwYXVzZTogJ2hvdmVyJyxcbiAgcmlkZTogZmFsc2UsXG4gIHRvdWNoOiB0cnVlLFxuICB3cmFwOiB0cnVlXG59O1xuY29uc3QgRGVmYXVsdFR5cGUkYiA9IHtcbiAgaW50ZXJ2YWw6ICcobnVtYmVyfGJvb2xlYW4pJyxcbiAgLy8gVE9ETzp2NiByZW1vdmUgYm9vbGVhbiBzdXBwb3J0XG4gIGtleWJvYXJkOiAnYm9vbGVhbicsXG4gIHBhdXNlOiAnKHN0cmluZ3xib29sZWFuKScsXG4gIHJpZGU6ICcoYm9vbGVhbnxzdHJpbmcpJyxcbiAgdG91Y2g6ICdib29sZWFuJyxcbiAgd3JhcDogJ2Jvb2xlYW4nXG59O1xuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBDYXJvdXNlbCBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBjb25maWcpIHtcbiAgICBzdXBlcihlbGVtZW50LCBjb25maWcpO1xuICAgIHRoaXMuX2ludGVydmFsID0gbnVsbDtcbiAgICB0aGlzLl9hY3RpdmVFbGVtZW50ID0gbnVsbDtcbiAgICB0aGlzLl9pc1NsaWRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLnRvdWNoVGltZW91dCA9IG51bGw7XG4gICAgdGhpcy5fc3dpcGVIZWxwZXIgPSBudWxsO1xuICAgIHRoaXMuX2luZGljYXRvcnNFbGVtZW50ID0gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShTRUxFQ1RPUl9JTkRJQ0FUT1JTLCB0aGlzLl9lbGVtZW50KTtcbiAgICB0aGlzLl9hZGRFdmVudExpc3RlbmVycygpO1xuICAgIGlmICh0aGlzLl9jb25maWcucmlkZSA9PT0gQ0xBU1NfTkFNRV9DQVJPVVNFTCkge1xuICAgICAgdGhpcy5jeWNsZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0JGI7XG4gIH1cbiAgc3RhdGljIGdldCBEZWZhdWx0VHlwZSgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFR5cGUkYjtcbiAgfVxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUUkYztcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICBuZXh0KCkge1xuICAgIHRoaXMuX3NsaWRlKE9SREVSX05FWFQpO1xuICB9XG4gIG5leHRXaGVuVmlzaWJsZSgpIHtcbiAgICAvLyBGSVhNRSBUT0RPIHVzZSBgZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlYFxuICAgIC8vIERvbid0IGNhbGwgbmV4dCB3aGVuIHRoZSBwYWdlIGlzbid0IHZpc2libGVcbiAgICAvLyBvciB0aGUgY2Fyb3VzZWwgb3IgaXRzIHBhcmVudCBpc24ndCB2aXNpYmxlXG4gICAgaWYgKCFkb2N1bWVudC5oaWRkZW4gJiYgaXNWaXNpYmxlKHRoaXMuX2VsZW1lbnQpKSB7XG4gICAgICB0aGlzLm5leHQoKTtcbiAgICB9XG4gIH1cbiAgcHJldigpIHtcbiAgICB0aGlzLl9zbGlkZShPUkRFUl9QUkVWKTtcbiAgfVxuICBwYXVzZSgpIHtcbiAgICBpZiAodGhpcy5faXNTbGlkaW5nKSB7XG4gICAgICB0cmlnZ2VyVHJhbnNpdGlvbkVuZCh0aGlzLl9lbGVtZW50KTtcbiAgICB9XG4gICAgdGhpcy5fY2xlYXJJbnRlcnZhbCgpO1xuICB9XG4gIGN5Y2xlKCkge1xuICAgIHRoaXMuX2NsZWFySW50ZXJ2YWwoKTtcbiAgICB0aGlzLl91cGRhdGVJbnRlcnZhbCgpO1xuICAgIHRoaXMuX2ludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4gdGhpcy5uZXh0V2hlblZpc2libGUoKSwgdGhpcy5fY29uZmlnLmludGVydmFsKTtcbiAgfVxuICBfbWF5YmVFbmFibGVDeWNsZSgpIHtcbiAgICBpZiAoIXRoaXMuX2NvbmZpZy5yaWRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLl9pc1NsaWRpbmcpIHtcbiAgICAgIEV2ZW50SGFuZGxlci5vbmUodGhpcy5fZWxlbWVudCwgRVZFTlRfU0xJRCwgKCkgPT4gdGhpcy5jeWNsZSgpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jeWNsZSgpO1xuICB9XG4gIHRvKGluZGV4KSB7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLl9nZXRJdGVtcygpO1xuICAgIGlmIChpbmRleCA+IGl0ZW1zLmxlbmd0aCAtIDEgfHwgaW5kZXggPCAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLl9pc1NsaWRpbmcpIHtcbiAgICAgIEV2ZW50SGFuZGxlci5vbmUodGhpcy5fZWxlbWVudCwgRVZFTlRfU0xJRCwgKCkgPT4gdGhpcy50byhpbmRleCkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBhY3RpdmVJbmRleCA9IHRoaXMuX2dldEl0ZW1JbmRleCh0aGlzLl9nZXRBY3RpdmUoKSk7XG4gICAgaWYgKGFjdGl2ZUluZGV4ID09PSBpbmRleCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBvcmRlciA9IGluZGV4ID4gYWN0aXZlSW5kZXggPyBPUkRFUl9ORVhUIDogT1JERVJfUFJFVjtcbiAgICB0aGlzLl9zbGlkZShvcmRlciwgaXRlbXNbaW5kZXhdKTtcbiAgfVxuICBkaXNwb3NlKCkge1xuICAgIGlmICh0aGlzLl9zd2lwZUhlbHBlcikge1xuICAgICAgdGhpcy5fc3dpcGVIZWxwZXIuZGlzcG9zZSgpO1xuICAgIH1cbiAgICBzdXBlci5kaXNwb3NlKCk7XG4gIH1cblxuICAvLyBQcml2YXRlXG4gIF9jb25maWdBZnRlck1lcmdlKGNvbmZpZykge1xuICAgIGNvbmZpZy5kZWZhdWx0SW50ZXJ2YWwgPSBjb25maWcuaW50ZXJ2YWw7XG4gICAgcmV0dXJuIGNvbmZpZztcbiAgfVxuICBfYWRkRXZlbnRMaXN0ZW5lcnMoKSB7XG4gICAgaWYgKHRoaXMuX2NvbmZpZy5rZXlib2FyZCkge1xuICAgICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0tFWURPV04kMSwgZXZlbnQgPT4gdGhpcy5fa2V5ZG93bihldmVudCkpO1xuICAgIH1cbiAgICBpZiAodGhpcy5fY29uZmlnLnBhdXNlID09PSAnaG92ZXInKSB7XG4gICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfTU9VU0VFTlRFUiQxLCAoKSA9PiB0aGlzLnBhdXNlKCkpO1xuICAgICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX01PVVNFTEVBVkUkMSwgKCkgPT4gdGhpcy5fbWF5YmVFbmFibGVDeWNsZSgpKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2NvbmZpZy50b3VjaCAmJiBTd2lwZS5pc1N1cHBvcnRlZCgpKSB7XG4gICAgICB0aGlzLl9hZGRUb3VjaEV2ZW50TGlzdGVuZXJzKCk7XG4gICAgfVxuICB9XG4gIF9hZGRUb3VjaEV2ZW50TGlzdGVuZXJzKCkge1xuICAgIGZvciAoY29uc3QgaW1nIG9mIFNlbGVjdG9yRW5naW5lLmZpbmQoU0VMRUNUT1JfSVRFTV9JTUcsIHRoaXMuX2VsZW1lbnQpKSB7XG4gICAgICBFdmVudEhhbmRsZXIub24oaW1nLCBFVkVOVF9EUkFHX1NUQVJULCBldmVudCA9PiBldmVudC5wcmV2ZW50RGVmYXVsdCgpKTtcbiAgICB9XG4gICAgY29uc3QgZW5kQ2FsbEJhY2sgPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY29uZmlnLnBhdXNlICE9PSAnaG92ZXInKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgaXQncyBhIHRvdWNoLWVuYWJsZWQgZGV2aWNlLCBtb3VzZWVudGVyL2xlYXZlIGFyZSBmaXJlZCBhc1xuICAgICAgLy8gcGFydCBvZiB0aGUgbW91c2UgY29tcGF0aWJpbGl0eSBldmVudHMgb24gZmlyc3QgdGFwIC0gdGhlIGNhcm91c2VsXG4gICAgICAvLyB3b3VsZCBzdG9wIGN5Y2xpbmcgdW50aWwgdXNlciB0YXBwZWQgb3V0IG9mIGl0O1xuICAgICAgLy8gaGVyZSwgd2UgbGlzdGVuIGZvciB0b3VjaGVuZCwgZXhwbGljaXRseSBwYXVzZSB0aGUgY2Fyb3VzZWxcbiAgICAgIC8vIChhcyBpZiBpdCdzIHRoZSBzZWNvbmQgdGltZSB3ZSB0YXAgb24gaXQsIG1vdXNlZW50ZXIgY29tcGF0IGV2ZW50XG4gICAgICAvLyBpcyBOT1QgZmlyZWQpIGFuZCBhZnRlciBhIHRpbWVvdXQgKHRvIGFsbG93IGZvciBtb3VzZSBjb21wYXRpYmlsaXR5XG4gICAgICAvLyBldmVudHMgdG8gZmlyZSkgd2UgZXhwbGljaXRseSByZXN0YXJ0IGN5Y2xpbmdcblxuICAgICAgdGhpcy5wYXVzZSgpO1xuICAgICAgaWYgKHRoaXMudG91Y2hUaW1lb3V0KSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRvdWNoVGltZW91dCk7XG4gICAgICB9XG4gICAgICB0aGlzLnRvdWNoVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5fbWF5YmVFbmFibGVDeWNsZSgpLCBUT1VDSEVWRU5UX0NPTVBBVF9XQUlUICsgdGhpcy5fY29uZmlnLmludGVydmFsKTtcbiAgICB9O1xuICAgIGNvbnN0IHN3aXBlQ29uZmlnID0ge1xuICAgICAgbGVmdENhbGxiYWNrOiAoKSA9PiB0aGlzLl9zbGlkZSh0aGlzLl9kaXJlY3Rpb25Ub09yZGVyKERJUkVDVElPTl9MRUZUKSksXG4gICAgICByaWdodENhbGxiYWNrOiAoKSA9PiB0aGlzLl9zbGlkZSh0aGlzLl9kaXJlY3Rpb25Ub09yZGVyKERJUkVDVElPTl9SSUdIVCkpLFxuICAgICAgZW5kQ2FsbGJhY2s6IGVuZENhbGxCYWNrXG4gICAgfTtcbiAgICB0aGlzLl9zd2lwZUhlbHBlciA9IG5ldyBTd2lwZSh0aGlzLl9lbGVtZW50LCBzd2lwZUNvbmZpZyk7XG4gIH1cbiAgX2tleWRvd24oZXZlbnQpIHtcbiAgICBpZiAoL2lucHV0fHRleHRhcmVhL2kudGVzdChldmVudC50YXJnZXQudGFnTmFtZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZGlyZWN0aW9uID0gS0VZX1RPX0RJUkVDVElPTltldmVudC5rZXldO1xuICAgIGlmIChkaXJlY3Rpb24pIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLl9zbGlkZSh0aGlzLl9kaXJlY3Rpb25Ub09yZGVyKGRpcmVjdGlvbikpO1xuICAgIH1cbiAgfVxuICBfZ2V0SXRlbUluZGV4KGVsZW1lbnQpIHtcbiAgICByZXR1cm4gdGhpcy5fZ2V0SXRlbXMoKS5pbmRleE9mKGVsZW1lbnQpO1xuICB9XG4gIF9zZXRBY3RpdmVJbmRpY2F0b3JFbGVtZW50KGluZGV4KSB7XG4gICAgaWYgKCF0aGlzLl9pbmRpY2F0b3JzRWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBhY3RpdmVJbmRpY2F0b3IgPSBTZWxlY3RvckVuZ2luZS5maW5kT25lKFNFTEVDVE9SX0FDVElWRSwgdGhpcy5faW5kaWNhdG9yc0VsZW1lbnQpO1xuICAgIGFjdGl2ZUluZGljYXRvci5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfQUNUSVZFJDIpO1xuICAgIGFjdGl2ZUluZGljYXRvci5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtY3VycmVudCcpO1xuICAgIGNvbnN0IG5ld0FjdGl2ZUluZGljYXRvciA9IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoYFtkYXRhLWJzLXNsaWRlLXRvPVwiJHtpbmRleH1cIl1gLCB0aGlzLl9pbmRpY2F0b3JzRWxlbWVudCk7XG4gICAgaWYgKG5ld0FjdGl2ZUluZGljYXRvcikge1xuICAgICAgbmV3QWN0aXZlSW5kaWNhdG9yLmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9BQ1RJVkUkMik7XG4gICAgICBuZXdBY3RpdmVJbmRpY2F0b3Iuc2V0QXR0cmlidXRlKCdhcmlhLWN1cnJlbnQnLCAndHJ1ZScpO1xuICAgIH1cbiAgfVxuICBfdXBkYXRlSW50ZXJ2YWwoKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuX2FjdGl2ZUVsZW1lbnQgfHwgdGhpcy5fZ2V0QWN0aXZlKCk7XG4gICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGVsZW1lbnRJbnRlcnZhbCA9IE51bWJlci5wYXJzZUludChlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1icy1pbnRlcnZhbCcpLCAxMCk7XG4gICAgdGhpcy5fY29uZmlnLmludGVydmFsID0gZWxlbWVudEludGVydmFsIHx8IHRoaXMuX2NvbmZpZy5kZWZhdWx0SW50ZXJ2YWw7XG4gIH1cbiAgX3NsaWRlKG9yZGVyLCBlbGVtZW50ID0gbnVsbCkge1xuICAgIGlmICh0aGlzLl9pc1NsaWRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgYWN0aXZlRWxlbWVudCA9IHRoaXMuX2dldEFjdGl2ZSgpO1xuICAgIGNvbnN0IGlzTmV4dCA9IG9yZGVyID09PSBPUkRFUl9ORVhUO1xuICAgIGNvbnN0IG5leHRFbGVtZW50ID0gZWxlbWVudCB8fCBnZXROZXh0QWN0aXZlRWxlbWVudCh0aGlzLl9nZXRJdGVtcygpLCBhY3RpdmVFbGVtZW50LCBpc05leHQsIHRoaXMuX2NvbmZpZy53cmFwKTtcbiAgICBpZiAobmV4dEVsZW1lbnQgPT09IGFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbmV4dEVsZW1lbnRJbmRleCA9IHRoaXMuX2dldEl0ZW1JbmRleChuZXh0RWxlbWVudCk7XG4gICAgY29uc3QgdHJpZ2dlckV2ZW50ID0gZXZlbnROYW1lID0+IHtcbiAgICAgIHJldHVybiBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBldmVudE5hbWUsIHtcbiAgICAgICAgcmVsYXRlZFRhcmdldDogbmV4dEVsZW1lbnQsXG4gICAgICAgIGRpcmVjdGlvbjogdGhpcy5fb3JkZXJUb0RpcmVjdGlvbihvcmRlciksXG4gICAgICAgIGZyb206IHRoaXMuX2dldEl0ZW1JbmRleChhY3RpdmVFbGVtZW50KSxcbiAgICAgICAgdG86IG5leHRFbGVtZW50SW5kZXhcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3Qgc2xpZGVFdmVudCA9IHRyaWdnZXJFdmVudChFVkVOVF9TTElERSk7XG4gICAgaWYgKHNsaWRlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIWFjdGl2ZUVsZW1lbnQgfHwgIW5leHRFbGVtZW50KSB7XG4gICAgICAvLyBTb21lIHdlaXJkbmVzcyBpcyBoYXBwZW5pbmcsIHNvIHdlIGJhaWxcbiAgICAgIC8vIFRPRE86IGNoYW5nZSB0ZXN0cyB0aGF0IHVzZSBlbXB0eSBkaXZzIHRvIGF2b2lkIHRoaXMgY2hlY2tcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaXNDeWNsaW5nID0gQm9vbGVhbih0aGlzLl9pbnRlcnZhbCk7XG4gICAgdGhpcy5wYXVzZSgpO1xuICAgIHRoaXMuX2lzU2xpZGluZyA9IHRydWU7XG4gICAgdGhpcy5fc2V0QWN0aXZlSW5kaWNhdG9yRWxlbWVudChuZXh0RWxlbWVudEluZGV4KTtcbiAgICB0aGlzLl9hY3RpdmVFbGVtZW50ID0gbmV4dEVsZW1lbnQ7XG4gICAgY29uc3QgZGlyZWN0aW9uYWxDbGFzc05hbWUgPSBpc05leHQgPyBDTEFTU19OQU1FX1NUQVJUIDogQ0xBU1NfTkFNRV9FTkQ7XG4gICAgY29uc3Qgb3JkZXJDbGFzc05hbWUgPSBpc05leHQgPyBDTEFTU19OQU1FX05FWFQgOiBDTEFTU19OQU1FX1BSRVY7XG4gICAgbmV4dEVsZW1lbnQuY2xhc3NMaXN0LmFkZChvcmRlckNsYXNzTmFtZSk7XG4gICAgcmVmbG93KG5leHRFbGVtZW50KTtcbiAgICBhY3RpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoZGlyZWN0aW9uYWxDbGFzc05hbWUpO1xuICAgIG5leHRFbGVtZW50LmNsYXNzTGlzdC5hZGQoZGlyZWN0aW9uYWxDbGFzc05hbWUpO1xuICAgIGNvbnN0IGNvbXBsZXRlQ2FsbEJhY2sgPSAoKSA9PiB7XG4gICAgICBuZXh0RWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKGRpcmVjdGlvbmFsQ2xhc3NOYW1lLCBvcmRlckNsYXNzTmFtZSk7XG4gICAgICBuZXh0RWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfQUNUSVZFJDIpO1xuICAgICAgYWN0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfQUNUSVZFJDIsIG9yZGVyQ2xhc3NOYW1lLCBkaXJlY3Rpb25hbENsYXNzTmFtZSk7XG4gICAgICB0aGlzLl9pc1NsaWRpbmcgPSBmYWxzZTtcbiAgICAgIHRyaWdnZXJFdmVudChFVkVOVF9TTElEKTtcbiAgICB9O1xuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soY29tcGxldGVDYWxsQmFjaywgYWN0aXZlRWxlbWVudCwgdGhpcy5faXNBbmltYXRlZCgpKTtcbiAgICBpZiAoaXNDeWNsaW5nKSB7XG4gICAgICB0aGlzLmN5Y2xlKCk7XG4gICAgfVxuICB9XG4gIF9pc0FuaW1hdGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX1NMSURFKTtcbiAgfVxuICBfZ2V0QWN0aXZlKCkge1xuICAgIHJldHVybiBTZWxlY3RvckVuZ2luZS5maW5kT25lKFNFTEVDVE9SX0FDVElWRV9JVEVNLCB0aGlzLl9lbGVtZW50KTtcbiAgfVxuICBfZ2V0SXRlbXMoKSB7XG4gICAgcmV0dXJuIFNlbGVjdG9yRW5naW5lLmZpbmQoU0VMRUNUT1JfSVRFTSwgdGhpcy5fZWxlbWVudCk7XG4gIH1cbiAgX2NsZWFySW50ZXJ2YWwoKSB7XG4gICAgaWYgKHRoaXMuX2ludGVydmFsKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMuX2ludGVydmFsKTtcbiAgICAgIHRoaXMuX2ludGVydmFsID0gbnVsbDtcbiAgICB9XG4gIH1cbiAgX2RpcmVjdGlvblRvT3JkZXIoZGlyZWN0aW9uKSB7XG4gICAgaWYgKGlzUlRMKCkpIHtcbiAgICAgIHJldHVybiBkaXJlY3Rpb24gPT09IERJUkVDVElPTl9MRUZUID8gT1JERVJfUFJFViA6IE9SREVSX05FWFQ7XG4gICAgfVxuICAgIHJldHVybiBkaXJlY3Rpb24gPT09IERJUkVDVElPTl9MRUZUID8gT1JERVJfTkVYVCA6IE9SREVSX1BSRVY7XG4gIH1cbiAgX29yZGVyVG9EaXJlY3Rpb24ob3JkZXIpIHtcbiAgICBpZiAoaXNSVEwoKSkge1xuICAgICAgcmV0dXJuIG9yZGVyID09PSBPUkRFUl9QUkVWID8gRElSRUNUSU9OX0xFRlQgOiBESVJFQ1RJT05fUklHSFQ7XG4gICAgfVxuICAgIHJldHVybiBvcmRlciA9PT0gT1JERVJfUFJFViA/IERJUkVDVElPTl9SSUdIVCA6IERJUkVDVElPTl9MRUZUO1xuICB9XG5cbiAgLy8gU3RhdGljXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0gQ2Fyb3VzZWwuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzLCBjb25maWcpO1xuICAgICAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdudW1iZXInKSB7XG4gICAgICAgIGRhdGEudG8oY29uZmlnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmIChkYXRhW2NvbmZpZ10gPT09IHVuZGVmaW5lZCB8fCBjb25maWcuc3RhcnRzV2l0aCgnXycpIHx8IGNvbmZpZyA9PT0gJ2NvbnN0cnVjdG9yJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYCk7XG4gICAgICAgIH1cbiAgICAgICAgZGF0YVtjb25maWddKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBEYXRhIEFQSSBpbXBsZW1lbnRhdGlvblxuICovXG5cbkV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfQ0xJQ0tfREFUQV9BUEkkNSwgU0VMRUNUT1JfREFUQV9TTElERSwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gIGNvbnN0IHRhcmdldCA9IFNlbGVjdG9yRW5naW5lLmdldEVsZW1lbnRGcm9tU2VsZWN0b3IodGhpcyk7XG4gIGlmICghdGFyZ2V0IHx8ICF0YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfQ0FST1VTRUwpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIGNvbnN0IGNhcm91c2VsID0gQ2Fyb3VzZWwuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0YXJnZXQpO1xuICBjb25zdCBzbGlkZUluZGV4ID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ2RhdGEtYnMtc2xpZGUtdG8nKTtcbiAgaWYgKHNsaWRlSW5kZXgpIHtcbiAgICBjYXJvdXNlbC50byhzbGlkZUluZGV4KTtcbiAgICBjYXJvdXNlbC5fbWF5YmVFbmFibGVDeWNsZSgpO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoTWFuaXB1bGF0b3IuZ2V0RGF0YUF0dHJpYnV0ZSh0aGlzLCAnc2xpZGUnKSA9PT0gJ25leHQnKSB7XG4gICAgY2Fyb3VzZWwubmV4dCgpO1xuICAgIGNhcm91c2VsLl9tYXliZUVuYWJsZUN5Y2xlKCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNhcm91c2VsLnByZXYoKTtcbiAgY2Fyb3VzZWwuX21heWJlRW5hYmxlQ3ljbGUoKTtcbn0pO1xuRXZlbnRIYW5kbGVyLm9uKHdpbmRvdywgRVZFTlRfTE9BRF9EQVRBX0FQSSQzLCAoKSA9PiB7XG4gIGNvbnN0IGNhcm91c2VscyA9IFNlbGVjdG9yRW5naW5lLmZpbmQoU0VMRUNUT1JfREFUQV9SSURFKTtcbiAgZm9yIChjb25zdCBjYXJvdXNlbCBvZiBjYXJvdXNlbHMpIHtcbiAgICBDYXJvdXNlbC5nZXRPckNyZWF0ZUluc3RhbmNlKGNhcm91c2VsKTtcbiAgfVxufSk7XG5cbi8qKlxuICogalF1ZXJ5XG4gKi9cblxuZGVmaW5lSlF1ZXJ5UGx1Z2luKENhcm91c2VsKTtcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIGNvbGxhcHNlLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IE5BTUUkYiA9ICdjb2xsYXBzZSc7XG5jb25zdCBEQVRBX0tFWSQ3ID0gJ2JzLmNvbGxhcHNlJztcbmNvbnN0IEVWRU5UX0tFWSQ3ID0gYC4ke0RBVEFfS0VZJDd9YDtcbmNvbnN0IERBVEFfQVBJX0tFWSQ0ID0gJy5kYXRhLWFwaSc7XG5jb25zdCBFVkVOVF9TSE9XJDYgPSBgc2hvdyR7RVZFTlRfS0VZJDd9YDtcbmNvbnN0IEVWRU5UX1NIT1dOJDYgPSBgc2hvd24ke0VWRU5UX0tFWSQ3fWA7XG5jb25zdCBFVkVOVF9ISURFJDYgPSBgaGlkZSR7RVZFTlRfS0VZJDd9YDtcbmNvbnN0IEVWRU5UX0hJRERFTiQ2ID0gYGhpZGRlbiR7RVZFTlRfS0VZJDd9YDtcbmNvbnN0IEVWRU5UX0NMSUNLX0RBVEFfQVBJJDQgPSBgY2xpY2ske0VWRU5UX0tFWSQ3fSR7REFUQV9BUElfS0VZJDR9YDtcbmNvbnN0IENMQVNTX05BTUVfU0hPVyQ3ID0gJ3Nob3cnO1xuY29uc3QgQ0xBU1NfTkFNRV9DT0xMQVBTRSA9ICdjb2xsYXBzZSc7XG5jb25zdCBDTEFTU19OQU1FX0NPTExBUFNJTkcgPSAnY29sbGFwc2luZyc7XG5jb25zdCBDTEFTU19OQU1FX0NPTExBUFNFRCA9ICdjb2xsYXBzZWQnO1xuY29uc3QgQ0xBU1NfTkFNRV9ERUVQRVJfQ0hJTERSRU4gPSBgOnNjb3BlIC4ke0NMQVNTX05BTUVfQ09MTEFQU0V9IC4ke0NMQVNTX05BTUVfQ09MTEFQU0V9YDtcbmNvbnN0IENMQVNTX05BTUVfSE9SSVpPTlRBTCA9ICdjb2xsYXBzZS1ob3Jpem9udGFsJztcbmNvbnN0IFdJRFRIID0gJ3dpZHRoJztcbmNvbnN0IEhFSUdIVCA9ICdoZWlnaHQnO1xuY29uc3QgU0VMRUNUT1JfQUNUSVZFUyA9ICcuY29sbGFwc2Uuc2hvdywgLmNvbGxhcHNlLmNvbGxhcHNpbmcnO1xuY29uc3QgU0VMRUNUT1JfREFUQV9UT0dHTEUkNCA9ICdbZGF0YS1icy10b2dnbGU9XCJjb2xsYXBzZVwiXSc7XG5jb25zdCBEZWZhdWx0JGEgPSB7XG4gIHBhcmVudDogbnVsbCxcbiAgdG9nZ2xlOiB0cnVlXG59O1xuY29uc3QgRGVmYXVsdFR5cGUkYSA9IHtcbiAgcGFyZW50OiAnKG51bGx8ZWxlbWVudCknLFxuICB0b2dnbGU6ICdib29sZWFuJ1xufTtcblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgQ29sbGFwc2UgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgc3VwZXIoZWxlbWVudCwgY29uZmlnKTtcbiAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSBmYWxzZTtcbiAgICB0aGlzLl90cmlnZ2VyQXJyYXkgPSBbXTtcbiAgICBjb25zdCB0b2dnbGVMaXN0ID0gU2VsZWN0b3JFbmdpbmUuZmluZChTRUxFQ1RPUl9EQVRBX1RPR0dMRSQ0KTtcbiAgICBmb3IgKGNvbnN0IGVsZW0gb2YgdG9nZ2xlTGlzdCkge1xuICAgICAgY29uc3Qgc2VsZWN0b3IgPSBTZWxlY3RvckVuZ2luZS5nZXRTZWxlY3RvckZyb21FbGVtZW50KGVsZW0pO1xuICAgICAgY29uc3QgZmlsdGVyRWxlbWVudCA9IFNlbGVjdG9yRW5naW5lLmZpbmQoc2VsZWN0b3IpLmZpbHRlcihmb3VuZEVsZW1lbnQgPT4gZm91bmRFbGVtZW50ID09PSB0aGlzLl9lbGVtZW50KTtcbiAgICAgIGlmIChzZWxlY3RvciAhPT0gbnVsbCAmJiBmaWx0ZXJFbGVtZW50Lmxlbmd0aCkge1xuICAgICAgICB0aGlzLl90cmlnZ2VyQXJyYXkucHVzaChlbGVtKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5faW5pdGlhbGl6ZUNoaWxkcmVuKCk7XG4gICAgaWYgKCF0aGlzLl9jb25maWcucGFyZW50KSB7XG4gICAgICB0aGlzLl9hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3ModGhpcy5fdHJpZ2dlckFycmF5LCB0aGlzLl9pc1Nob3duKCkpO1xuICAgIH1cbiAgICBpZiAodGhpcy5fY29uZmlnLnRvZ2dsZSkge1xuICAgICAgdGhpcy50b2dnbGUoKTtcbiAgICB9XG4gIH1cblxuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4gRGVmYXVsdCRhO1xuICB9XG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRUeXBlJGE7XG4gIH1cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FJGI7XG4gIH1cblxuICAvLyBQdWJsaWNcbiAgdG9nZ2xlKCkge1xuICAgIGlmICh0aGlzLl9pc1Nob3duKCkpIHtcbiAgICAgIHRoaXMuaGlkZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNob3coKTtcbiAgICB9XG4gIH1cbiAgc2hvdygpIHtcbiAgICBpZiAodGhpcy5faXNUcmFuc2l0aW9uaW5nIHx8IHRoaXMuX2lzU2hvd24oKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgYWN0aXZlQ2hpbGRyZW4gPSBbXTtcblxuICAgIC8vIGZpbmQgYWN0aXZlIGNoaWxkcmVuXG4gICAgaWYgKHRoaXMuX2NvbmZpZy5wYXJlbnQpIHtcbiAgICAgIGFjdGl2ZUNoaWxkcmVuID0gdGhpcy5fZ2V0Rmlyc3RMZXZlbENoaWxkcmVuKFNFTEVDVE9SX0FDVElWRVMpLmZpbHRlcihlbGVtZW50ID0+IGVsZW1lbnQgIT09IHRoaXMuX2VsZW1lbnQpLm1hcChlbGVtZW50ID0+IENvbGxhcHNlLmdldE9yQ3JlYXRlSW5zdGFuY2UoZWxlbWVudCwge1xuICAgICAgICB0b2dnbGU6IGZhbHNlXG4gICAgICB9KSk7XG4gICAgfVxuICAgIGlmIChhY3RpdmVDaGlsZHJlbi5sZW5ndGggJiYgYWN0aXZlQ2hpbGRyZW5bMF0uX2lzVHJhbnNpdGlvbmluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzdGFydEV2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfU0hPVyQ2KTtcbiAgICBpZiAoc3RhcnRFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvciAoY29uc3QgYWN0aXZlSW5zdGFuY2Ugb2YgYWN0aXZlQ2hpbGRyZW4pIHtcbiAgICAgIGFjdGl2ZUluc3RhbmNlLmhpZGUoKTtcbiAgICB9XG4gICAgY29uc3QgZGltZW5zaW9uID0gdGhpcy5fZ2V0RGltZW5zaW9uKCk7XG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfQ09MTEFQU0UpO1xuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0NPTExBUFNJTkcpO1xuICAgIHRoaXMuX2VsZW1lbnQuc3R5bGVbZGltZW5zaW9uXSA9IDA7XG4gICAgdGhpcy5fYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzKHRoaXMuX3RyaWdnZXJBcnJheSwgdHJ1ZSk7XG4gICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gdHJ1ZTtcbiAgICBjb25zdCBjb21wbGV0ZSA9ICgpID0+IHtcbiAgICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfQ09MTEFQU0lORyk7XG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9DT0xMQVBTRSwgQ0xBU1NfTkFNRV9TSE9XJDcpO1xuICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZVtkaW1lbnNpb25dID0gJyc7XG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XTiQ2KTtcbiAgICB9O1xuICAgIGNvbnN0IGNhcGl0YWxpemVkRGltZW5zaW9uID0gZGltZW5zaW9uWzBdLnRvVXBwZXJDYXNlKCkgKyBkaW1lbnNpb24uc2xpY2UoMSk7XG4gICAgY29uc3Qgc2Nyb2xsU2l6ZSA9IGBzY3JvbGwke2NhcGl0YWxpemVkRGltZW5zaW9ufWA7XG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayhjb21wbGV0ZSwgdGhpcy5fZWxlbWVudCwgdHJ1ZSk7XG4gICAgdGhpcy5fZWxlbWVudC5zdHlsZVtkaW1lbnNpb25dID0gYCR7dGhpcy5fZWxlbWVudFtzY3JvbGxTaXplXX1weGA7XG4gIH1cbiAgaGlkZSgpIHtcbiAgICBpZiAodGhpcy5faXNUcmFuc2l0aW9uaW5nIHx8ICF0aGlzLl9pc1Nob3duKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc3RhcnRFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJREUkNik7XG4gICAgaWYgKHN0YXJ0RXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBkaW1lbnNpb24gPSB0aGlzLl9nZXREaW1lbnNpb24oKTtcbiAgICB0aGlzLl9lbGVtZW50LnN0eWxlW2RpbWVuc2lvbl0gPSBgJHt0aGlzLl9lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW2RpbWVuc2lvbl19cHhgO1xuICAgIHJlZmxvdyh0aGlzLl9lbGVtZW50KTtcbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9DT0xMQVBTSU5HKTtcbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9DT0xMQVBTRSwgQ0xBU1NfTkFNRV9TSE9XJDcpO1xuICAgIGZvciAoY29uc3QgdHJpZ2dlciBvZiB0aGlzLl90cmlnZ2VyQXJyYXkpIHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBTZWxlY3RvckVuZ2luZS5nZXRFbGVtZW50RnJvbVNlbGVjdG9yKHRyaWdnZXIpO1xuICAgICAgaWYgKGVsZW1lbnQgJiYgIXRoaXMuX2lzU2hvd24oZWxlbWVudCkpIHtcbiAgICAgICAgdGhpcy5fYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzKFt0cmlnZ2VyXSwgZmFsc2UpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSB0cnVlO1xuICAgIGNvbnN0IGNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9DT0xMQVBTSU5HKTtcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0NPTExBUFNFKTtcbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJRERFTiQ2KTtcbiAgICB9O1xuICAgIHRoaXMuX2VsZW1lbnQuc3R5bGVbZGltZW5zaW9uXSA9ICcnO1xuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soY29tcGxldGUsIHRoaXMuX2VsZW1lbnQsIHRydWUpO1xuICB9XG4gIF9pc1Nob3duKGVsZW1lbnQgPSB0aGlzLl9lbGVtZW50KSB7XG4gICAgcmV0dXJuIGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfU0hPVyQ3KTtcbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX2NvbmZpZ0FmdGVyTWVyZ2UoY29uZmlnKSB7XG4gICAgY29uZmlnLnRvZ2dsZSA9IEJvb2xlYW4oY29uZmlnLnRvZ2dsZSk7IC8vIENvZXJjZSBzdHJpbmcgdmFsdWVzXG4gICAgY29uZmlnLnBhcmVudCA9IGdldEVsZW1lbnQoY29uZmlnLnBhcmVudCk7XG4gICAgcmV0dXJuIGNvbmZpZztcbiAgfVxuICBfZ2V0RGltZW5zaW9uKCkge1xuICAgIHJldHVybiB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0hPUklaT05UQUwpID8gV0lEVEggOiBIRUlHSFQ7XG4gIH1cbiAgX2luaXRpYWxpemVDaGlsZHJlbigpIHtcbiAgICBpZiAoIXRoaXMuX2NvbmZpZy5wYXJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLl9nZXRGaXJzdExldmVsQ2hpbGRyZW4oU0VMRUNUT1JfREFUQV9UT0dHTEUkNCk7XG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGNoaWxkcmVuKSB7XG4gICAgICBjb25zdCBzZWxlY3RlZCA9IFNlbGVjdG9yRW5naW5lLmdldEVsZW1lbnRGcm9tU2VsZWN0b3IoZWxlbWVudCk7XG4gICAgICBpZiAoc2VsZWN0ZWQpIHtcbiAgICAgICAgdGhpcy5fYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzKFtlbGVtZW50XSwgdGhpcy5faXNTaG93bihzZWxlY3RlZCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBfZ2V0Rmlyc3RMZXZlbENoaWxkcmVuKHNlbGVjdG9yKSB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBTZWxlY3RvckVuZ2luZS5maW5kKENMQVNTX05BTUVfREVFUEVSX0NISUxEUkVOLCB0aGlzLl9jb25maWcucGFyZW50KTtcbiAgICAvLyByZW1vdmUgY2hpbGRyZW4gaWYgZ3JlYXRlciBkZXB0aFxuICAgIHJldHVybiBTZWxlY3RvckVuZ2luZS5maW5kKHNlbGVjdG9yLCB0aGlzLl9jb25maWcucGFyZW50KS5maWx0ZXIoZWxlbWVudCA9PiAhY2hpbGRyZW4uaW5jbHVkZXMoZWxlbWVudCkpO1xuICB9XG4gIF9hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3ModHJpZ2dlckFycmF5LCBpc09wZW4pIHtcbiAgICBpZiAoIXRyaWdnZXJBcnJheS5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHRyaWdnZXJBcnJheSkge1xuICAgICAgZWxlbWVudC5jbGFzc0xpc3QudG9nZ2xlKENMQVNTX05BTUVfQ09MTEFQU0VELCAhaXNPcGVuKTtcbiAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgaXNPcGVuKTtcbiAgICB9XG4gIH1cblxuICAvLyBTdGF0aWNcbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICBjb25zdCBfY29uZmlnID0ge307XG4gICAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnICYmIC9zaG93fGhpZGUvLnRlc3QoY29uZmlnKSkge1xuICAgICAgX2NvbmZpZy50b2dnbGUgPSBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0gQ29sbGFwc2UuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzLCBfY29uZmlnKTtcbiAgICAgIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJykge1xuICAgICAgICBpZiAodHlwZW9mIGRhdGFbY29uZmlnXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2NvbmZpZ31cImApO1xuICAgICAgICB9XG4gICAgICAgIGRhdGFbY29uZmlnXSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogRGF0YSBBUEkgaW1wbGVtZW50YXRpb25cbiAqL1xuXG5FdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0NMSUNLX0RBVEFfQVBJJDQsIFNFTEVDVE9SX0RBVEFfVE9HR0xFJDQsIGZ1bmN0aW9uIChldmVudCkge1xuICAvLyBwcmV2ZW50RGVmYXVsdCBvbmx5IGZvciA8YT4gZWxlbWVudHMgKHdoaWNoIGNoYW5nZSB0aGUgVVJMKSBub3QgaW5zaWRlIHRoZSBjb2xsYXBzaWJsZSBlbGVtZW50XG4gIGlmIChldmVudC50YXJnZXQudGFnTmFtZSA9PT0gJ0EnIHx8IGV2ZW50LmRlbGVnYXRlVGFyZ2V0ICYmIGV2ZW50LmRlbGVnYXRlVGFyZ2V0LnRhZ05hbWUgPT09ICdBJykge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cbiAgZm9yIChjb25zdCBlbGVtZW50IG9mIFNlbGVjdG9yRW5naW5lLmdldE11bHRpcGxlRWxlbWVudHNGcm9tU2VsZWN0b3IodGhpcykpIHtcbiAgICBDb2xsYXBzZS5nZXRPckNyZWF0ZUluc3RhbmNlKGVsZW1lbnQsIHtcbiAgICAgIHRvZ2dsZTogZmFsc2VcbiAgICB9KS50b2dnbGUoKTtcbiAgfVxufSk7XG5cbi8qKlxuICogalF1ZXJ5XG4gKi9cblxuZGVmaW5lSlF1ZXJ5UGx1Z2luKENvbGxhcHNlKTtcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIGRyb3Bkb3duLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IE5BTUUkYSA9ICdkcm9wZG93bic7XG5jb25zdCBEQVRBX0tFWSQ2ID0gJ2JzLmRyb3Bkb3duJztcbmNvbnN0IEVWRU5UX0tFWSQ2ID0gYC4ke0RBVEFfS0VZJDZ9YDtcbmNvbnN0IERBVEFfQVBJX0tFWSQzID0gJy5kYXRhLWFwaSc7XG5jb25zdCBFU0NBUEVfS0VZJDIgPSAnRXNjYXBlJztcbmNvbnN0IFRBQl9LRVkkMSA9ICdUYWInO1xuY29uc3QgQVJST1dfVVBfS0VZJDEgPSAnQXJyb3dVcCc7XG5jb25zdCBBUlJPV19ET1dOX0tFWSQxID0gJ0Fycm93RG93bic7XG5jb25zdCBSSUdIVF9NT1VTRV9CVVRUT04gPSAyOyAvLyBNb3VzZUV2ZW50LmJ1dHRvbiB2YWx1ZSBmb3IgdGhlIHNlY29uZGFyeSBidXR0b24sIHVzdWFsbHkgdGhlIHJpZ2h0IGJ1dHRvblxuXG5jb25zdCBFVkVOVF9ISURFJDUgPSBgaGlkZSR7RVZFTlRfS0VZJDZ9YDtcbmNvbnN0IEVWRU5UX0hJRERFTiQ1ID0gYGhpZGRlbiR7RVZFTlRfS0VZJDZ9YDtcbmNvbnN0IEVWRU5UX1NIT1ckNSA9IGBzaG93JHtFVkVOVF9LRVkkNn1gO1xuY29uc3QgRVZFTlRfU0hPV04kNSA9IGBzaG93biR7RVZFTlRfS0VZJDZ9YDtcbmNvbnN0IEVWRU5UX0NMSUNLX0RBVEFfQVBJJDMgPSBgY2xpY2ske0VWRU5UX0tFWSQ2fSR7REFUQV9BUElfS0VZJDN9YDtcbmNvbnN0IEVWRU5UX0tFWURPV05fREFUQV9BUEkgPSBga2V5ZG93biR7RVZFTlRfS0VZJDZ9JHtEQVRBX0FQSV9LRVkkM31gO1xuY29uc3QgRVZFTlRfS0VZVVBfREFUQV9BUEkgPSBga2V5dXAke0VWRU5UX0tFWSQ2fSR7REFUQV9BUElfS0VZJDN9YDtcbmNvbnN0IENMQVNTX05BTUVfU0hPVyQ2ID0gJ3Nob3cnO1xuY29uc3QgQ0xBU1NfTkFNRV9EUk9QVVAgPSAnZHJvcHVwJztcbmNvbnN0IENMQVNTX05BTUVfRFJPUEVORCA9ICdkcm9wZW5kJztcbmNvbnN0IENMQVNTX05BTUVfRFJPUFNUQVJUID0gJ2Ryb3BzdGFydCc7XG5jb25zdCBDTEFTU19OQU1FX0RST1BVUF9DRU5URVIgPSAnZHJvcHVwLWNlbnRlcic7XG5jb25zdCBDTEFTU19OQU1FX0RST1BET1dOX0NFTlRFUiA9ICdkcm9wZG93bi1jZW50ZXInO1xuY29uc3QgU0VMRUNUT1JfREFUQV9UT0dHTEUkMyA9ICdbZGF0YS1icy10b2dnbGU9XCJkcm9wZG93blwiXTpub3QoLmRpc2FibGVkKTpub3QoOmRpc2FibGVkKSc7XG5jb25zdCBTRUxFQ1RPUl9EQVRBX1RPR0dMRV9TSE9XTiA9IGAke1NFTEVDVE9SX0RBVEFfVE9HR0xFJDN9LiR7Q0xBU1NfTkFNRV9TSE9XJDZ9YDtcbmNvbnN0IFNFTEVDVE9SX01FTlUgPSAnLmRyb3Bkb3duLW1lbnUnO1xuY29uc3QgU0VMRUNUT1JfTkFWQkFSID0gJy5uYXZiYXInO1xuY29uc3QgU0VMRUNUT1JfTkFWQkFSX05BViA9ICcubmF2YmFyLW5hdic7XG5jb25zdCBTRUxFQ1RPUl9WSVNJQkxFX0lURU1TID0gJy5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtOm5vdCguZGlzYWJsZWQpOm5vdCg6ZGlzYWJsZWQpJztcbmNvbnN0IFBMQUNFTUVOVF9UT1AgPSBpc1JUTCgpID8gJ3RvcC1lbmQnIDogJ3RvcC1zdGFydCc7XG5jb25zdCBQTEFDRU1FTlRfVE9QRU5EID0gaXNSVEwoKSA/ICd0b3Atc3RhcnQnIDogJ3RvcC1lbmQnO1xuY29uc3QgUExBQ0VNRU5UX0JPVFRPTSA9IGlzUlRMKCkgPyAnYm90dG9tLWVuZCcgOiAnYm90dG9tLXN0YXJ0JztcbmNvbnN0IFBMQUNFTUVOVF9CT1RUT01FTkQgPSBpc1JUTCgpID8gJ2JvdHRvbS1zdGFydCcgOiAnYm90dG9tLWVuZCc7XG5jb25zdCBQTEFDRU1FTlRfUklHSFQgPSBpc1JUTCgpID8gJ2xlZnQtc3RhcnQnIDogJ3JpZ2h0LXN0YXJ0JztcbmNvbnN0IFBMQUNFTUVOVF9MRUZUID0gaXNSVEwoKSA/ICdyaWdodC1zdGFydCcgOiAnbGVmdC1zdGFydCc7XG5jb25zdCBQTEFDRU1FTlRfVE9QQ0VOVEVSID0gJ3RvcCc7XG5jb25zdCBQTEFDRU1FTlRfQk9UVE9NQ0VOVEVSID0gJ2JvdHRvbSc7XG5jb25zdCBEZWZhdWx0JDkgPSB7XG4gIGF1dG9DbG9zZTogdHJ1ZSxcbiAgYm91bmRhcnk6ICdjbGlwcGluZ1BhcmVudHMnLFxuICBkaXNwbGF5OiAnZHluYW1pYycsXG4gIG9mZnNldDogWzAsIDJdLFxuICBwb3BwZXJDb25maWc6IG51bGwsXG4gIHJlZmVyZW5jZTogJ3RvZ2dsZSdcbn07XG5jb25zdCBEZWZhdWx0VHlwZSQ5ID0ge1xuICBhdXRvQ2xvc2U6ICcoYm9vbGVhbnxzdHJpbmcpJyxcbiAgYm91bmRhcnk6ICcoc3RyaW5nfGVsZW1lbnQpJyxcbiAgZGlzcGxheTogJ3N0cmluZycsXG4gIG9mZnNldDogJyhhcnJheXxzdHJpbmd8ZnVuY3Rpb24pJyxcbiAgcG9wcGVyQ29uZmlnOiAnKG51bGx8b2JqZWN0fGZ1bmN0aW9uKScsXG4gIHJlZmVyZW5jZTogJyhzdHJpbmd8ZWxlbWVudHxvYmplY3QpJ1xufTtcblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgRHJvcGRvd24gZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgc3VwZXIoZWxlbWVudCwgY29uZmlnKTtcbiAgICB0aGlzLl9wb3BwZXIgPSBudWxsO1xuICAgIHRoaXMuX3BhcmVudCA9IHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZTsgLy8gZHJvcGRvd24gd3JhcHBlclxuICAgIC8vIFRPRE86IHY2IHJldmVydCAjMzcwMTEgJiBjaGFuZ2UgbWFya3VwIGh0dHBzOi8vZ2V0Ym9vdHN0cmFwLmNvbS9kb2NzLzUuMy9mb3Jtcy9pbnB1dC1ncm91cC9cbiAgICB0aGlzLl9tZW51ID0gU2VsZWN0b3JFbmdpbmUubmV4dCh0aGlzLl9lbGVtZW50LCBTRUxFQ1RPUl9NRU5VKVswXSB8fCBTZWxlY3RvckVuZ2luZS5wcmV2KHRoaXMuX2VsZW1lbnQsIFNFTEVDVE9SX01FTlUpWzBdIHx8IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoU0VMRUNUT1JfTUVOVSwgdGhpcy5fcGFyZW50KTtcbiAgICB0aGlzLl9pbk5hdmJhciA9IHRoaXMuX2RldGVjdE5hdmJhcigpO1xuICB9XG5cbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHQkOTtcbiAgfVxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZSQ5O1xuICB9XG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRSRhO1xuICB9XG5cbiAgLy8gUHVibGljXG4gIHRvZ2dsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5faXNTaG93bigpID8gdGhpcy5oaWRlKCkgOiB0aGlzLnNob3coKTtcbiAgfVxuICBzaG93KCkge1xuICAgIGlmIChpc0Rpc2FibGVkKHRoaXMuX2VsZW1lbnQpIHx8IHRoaXMuX2lzU2hvd24oKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByZWxhdGVkVGFyZ2V0ID0ge1xuICAgICAgcmVsYXRlZFRhcmdldDogdGhpcy5fZWxlbWVudFxuICAgIH07XG4gICAgY29uc3Qgc2hvd0V2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfU0hPVyQ1LCByZWxhdGVkVGFyZ2V0KTtcbiAgICBpZiAoc2hvd0V2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fY3JlYXRlUG9wcGVyKCk7XG5cbiAgICAvLyBJZiB0aGlzIGlzIGEgdG91Y2gtZW5hYmxlZCBkZXZpY2Ugd2UgYWRkIGV4dHJhXG4gICAgLy8gZW1wdHkgbW91c2VvdmVyIGxpc3RlbmVycyB0byB0aGUgYm9keSdzIGltbWVkaWF0ZSBjaGlsZHJlbjtcbiAgICAvLyBvbmx5IG5lZWRlZCBiZWNhdXNlIG9mIGJyb2tlbiBldmVudCBkZWxlZ2F0aW9uIG9uIGlPU1xuICAgIC8vIGh0dHBzOi8vd3d3LnF1aXJrc21vZGUub3JnL2Jsb2cvYXJjaGl2ZXMvMjAxNC8wMi9tb3VzZV9ldmVudF9idWIuaHRtbFxuICAgIGlmICgnb250b3VjaHN0YXJ0JyBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiYgIXRoaXMuX3BhcmVudC5jbG9zZXN0KFNFTEVDVE9SX05BVkJBUl9OQVYpKSB7XG4gICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgW10uY29uY2F0KC4uLmRvY3VtZW50LmJvZHkuY2hpbGRyZW4pKSB7XG4gICAgICAgIEV2ZW50SGFuZGxlci5vbihlbGVtZW50LCAnbW91c2VvdmVyJywgbm9vcCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX2VsZW1lbnQuZm9jdXMoKTtcbiAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsIHRydWUpO1xuICAgIHRoaXMuX21lbnUuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1NIT1ckNik7XG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU0hPVyQ2KTtcbiAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XTiQ1LCByZWxhdGVkVGFyZ2V0KTtcbiAgfVxuICBoaWRlKCkge1xuICAgIGlmIChpc0Rpc2FibGVkKHRoaXMuX2VsZW1lbnQpIHx8ICF0aGlzLl9pc1Nob3duKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmVsYXRlZFRhcmdldCA9IHtcbiAgICAgIHJlbGF0ZWRUYXJnZXQ6IHRoaXMuX2VsZW1lbnRcbiAgICB9O1xuICAgIHRoaXMuX2NvbXBsZXRlSGlkZShyZWxhdGVkVGFyZ2V0KTtcbiAgfVxuICBkaXNwb3NlKCkge1xuICAgIGlmICh0aGlzLl9wb3BwZXIpIHtcbiAgICAgIHRoaXMuX3BvcHBlci5kZXN0cm95KCk7XG4gICAgfVxuICAgIHN1cGVyLmRpc3Bvc2UoKTtcbiAgfVxuICB1cGRhdGUoKSB7XG4gICAgdGhpcy5faW5OYXZiYXIgPSB0aGlzLl9kZXRlY3ROYXZiYXIoKTtcbiAgICBpZiAodGhpcy5fcG9wcGVyKSB7XG4gICAgICB0aGlzLl9wb3BwZXIudXBkYXRlKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfY29tcGxldGVIaWRlKHJlbGF0ZWRUYXJnZXQpIHtcbiAgICBjb25zdCBoaWRlRXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURFJDUsIHJlbGF0ZWRUYXJnZXQpO1xuICAgIGlmIChoaWRlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIElmIHRoaXMgaXMgYSB0b3VjaC1lbmFibGVkIGRldmljZSB3ZSByZW1vdmUgdGhlIGV4dHJhXG4gICAgLy8gZW1wdHkgbW91c2VvdmVyIGxpc3RlbmVycyB3ZSBhZGRlZCBmb3IgaU9TIHN1cHBvcnRcbiAgICBpZiAoJ29udG91Y2hzdGFydCcgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgW10uY29uY2F0KC4uLmRvY3VtZW50LmJvZHkuY2hpbGRyZW4pKSB7XG4gICAgICAgIEV2ZW50SGFuZGxlci5vZmYoZWxlbWVudCwgJ21vdXNlb3ZlcicsIG5vb3ApO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5fcG9wcGVyKSB7XG4gICAgICB0aGlzLl9wb3BwZXIuZGVzdHJveSgpO1xuICAgIH1cbiAgICB0aGlzLl9tZW51LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TSE9XJDYpO1xuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1ckNik7XG4gICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCAnZmFsc2UnKTtcbiAgICBNYW5pcHVsYXRvci5yZW1vdmVEYXRhQXR0cmlidXRlKHRoaXMuX21lbnUsICdwb3BwZXInKTtcbiAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURERU4kNSwgcmVsYXRlZFRhcmdldCk7XG4gIH1cbiAgX2dldENvbmZpZyhjb25maWcpIHtcbiAgICBjb25maWcgPSBzdXBlci5fZ2V0Q29uZmlnKGNvbmZpZyk7XG4gICAgaWYgKHR5cGVvZiBjb25maWcucmVmZXJlbmNlID09PSAnb2JqZWN0JyAmJiAhaXNFbGVtZW50KGNvbmZpZy5yZWZlcmVuY2UpICYmIHR5cGVvZiBjb25maWcucmVmZXJlbmNlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gUG9wcGVyIHZpcnR1YWwgZWxlbWVudHMgcmVxdWlyZSBhIGdldEJvdW5kaW5nQ2xpZW50UmVjdCBtZXRob2RcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYCR7TkFNRSRhLnRvVXBwZXJDYXNlKCl9OiBPcHRpb24gXCJyZWZlcmVuY2VcIiBwcm92aWRlZCB0eXBlIFwib2JqZWN0XCIgd2l0aG91dCBhIHJlcXVpcmVkIFwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0XCIgbWV0aG9kLmApO1xuICAgIH1cbiAgICByZXR1cm4gY29uZmlnO1xuICB9XG4gIF9jcmVhdGVQb3BwZXIoKSB7XG4gICAgaWYgKHR5cGVvZiBQb3BwZXIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdCb290c3RyYXBcXCdzIGRyb3Bkb3ducyByZXF1aXJlIFBvcHBlciAoaHR0cHM6Ly9wb3BwZXIuanMub3JnKScpO1xuICAgIH1cbiAgICBsZXQgcmVmZXJlbmNlRWxlbWVudCA9IHRoaXMuX2VsZW1lbnQ7XG4gICAgaWYgKHRoaXMuX2NvbmZpZy5yZWZlcmVuY2UgPT09ICdwYXJlbnQnKSB7XG4gICAgICByZWZlcmVuY2VFbGVtZW50ID0gdGhpcy5fcGFyZW50O1xuICAgIH0gZWxzZSBpZiAoaXNFbGVtZW50KHRoaXMuX2NvbmZpZy5yZWZlcmVuY2UpKSB7XG4gICAgICByZWZlcmVuY2VFbGVtZW50ID0gZ2V0RWxlbWVudCh0aGlzLl9jb25maWcucmVmZXJlbmNlKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLl9jb25maWcucmVmZXJlbmNlID09PSAnb2JqZWN0Jykge1xuICAgICAgcmVmZXJlbmNlRWxlbWVudCA9IHRoaXMuX2NvbmZpZy5yZWZlcmVuY2U7XG4gICAgfVxuICAgIGNvbnN0IHBvcHBlckNvbmZpZyA9IHRoaXMuX2dldFBvcHBlckNvbmZpZygpO1xuICAgIHRoaXMuX3BvcHBlciA9IFBvcHBlci5jcmVhdGVQb3BwZXIocmVmZXJlbmNlRWxlbWVudCwgdGhpcy5fbWVudSwgcG9wcGVyQ29uZmlnKTtcbiAgfVxuICBfaXNTaG93bigpIHtcbiAgICByZXR1cm4gdGhpcy5fbWVudS5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9TSE9XJDYpO1xuICB9XG4gIF9nZXRQbGFjZW1lbnQoKSB7XG4gICAgY29uc3QgcGFyZW50RHJvcGRvd24gPSB0aGlzLl9wYXJlbnQ7XG4gICAgaWYgKHBhcmVudERyb3Bkb3duLmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0RST1BFTkQpKSB7XG4gICAgICByZXR1cm4gUExBQ0VNRU5UX1JJR0hUO1xuICAgIH1cbiAgICBpZiAocGFyZW50RHJvcGRvd24uY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfRFJPUFNUQVJUKSkge1xuICAgICAgcmV0dXJuIFBMQUNFTUVOVF9MRUZUO1xuICAgIH1cbiAgICBpZiAocGFyZW50RHJvcGRvd24uY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfRFJPUFVQX0NFTlRFUikpIHtcbiAgICAgIHJldHVybiBQTEFDRU1FTlRfVE9QQ0VOVEVSO1xuICAgIH1cbiAgICBpZiAocGFyZW50RHJvcGRvd24uY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfRFJPUERPV05fQ0VOVEVSKSkge1xuICAgICAgcmV0dXJuIFBMQUNFTUVOVF9CT1RUT01DRU5URVI7XG4gICAgfVxuXG4gICAgLy8gV2UgbmVlZCB0byB0cmltIHRoZSB2YWx1ZSBiZWNhdXNlIGN1c3RvbSBwcm9wZXJ0aWVzIGNhbiBhbHNvIGluY2x1ZGUgc3BhY2VzXG4gICAgY29uc3QgaXNFbmQgPSBnZXRDb21wdXRlZFN0eWxlKHRoaXMuX21lbnUpLmdldFByb3BlcnR5VmFsdWUoJy0tYnMtcG9zaXRpb24nKS50cmltKCkgPT09ICdlbmQnO1xuICAgIGlmIChwYXJlbnREcm9wZG93bi5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9EUk9QVVApKSB7XG4gICAgICByZXR1cm4gaXNFbmQgPyBQTEFDRU1FTlRfVE9QRU5EIDogUExBQ0VNRU5UX1RPUDtcbiAgICB9XG4gICAgcmV0dXJuIGlzRW5kID8gUExBQ0VNRU5UX0JPVFRPTUVORCA6IFBMQUNFTUVOVF9CT1RUT007XG4gIH1cbiAgX2RldGVjdE5hdmJhcigpIHtcbiAgICByZXR1cm4gdGhpcy5fZWxlbWVudC5jbG9zZXN0KFNFTEVDVE9SX05BVkJBUikgIT09IG51bGw7XG4gIH1cbiAgX2dldE9mZnNldCgpIHtcbiAgICBjb25zdCB7XG4gICAgICBvZmZzZXRcbiAgICB9ID0gdGhpcy5fY29uZmlnO1xuICAgIGlmICh0eXBlb2Ygb2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIG9mZnNldC5zcGxpdCgnLCcpLm1hcCh2YWx1ZSA9PiBOdW1iZXIucGFyc2VJbnQodmFsdWUsIDEwKSk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2Zmc2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gcG9wcGVyRGF0YSA9PiBvZmZzZXQocG9wcGVyRGF0YSwgdGhpcy5fZWxlbWVudCk7XG4gICAgfVxuICAgIHJldHVybiBvZmZzZXQ7XG4gIH1cbiAgX2dldFBvcHBlckNvbmZpZygpIHtcbiAgICBjb25zdCBkZWZhdWx0QnNQb3BwZXJDb25maWcgPSB7XG4gICAgICBwbGFjZW1lbnQ6IHRoaXMuX2dldFBsYWNlbWVudCgpLFxuICAgICAgbW9kaWZpZXJzOiBbe1xuICAgICAgICBuYW1lOiAncHJldmVudE92ZXJmbG93JyxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIGJvdW5kYXJ5OiB0aGlzLl9jb25maWcuYm91bmRhcnlcbiAgICAgICAgfVxuICAgICAgfSwge1xuICAgICAgICBuYW1lOiAnb2Zmc2V0JyxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIG9mZnNldDogdGhpcy5fZ2V0T2Zmc2V0KClcbiAgICAgICAgfVxuICAgICAgfV1cbiAgICB9O1xuXG4gICAgLy8gRGlzYWJsZSBQb3BwZXIgaWYgd2UgaGF2ZSBhIHN0YXRpYyBkaXNwbGF5IG9yIERyb3Bkb3duIGlzIGluIE5hdmJhclxuICAgIGlmICh0aGlzLl9pbk5hdmJhciB8fCB0aGlzLl9jb25maWcuZGlzcGxheSA9PT0gJ3N0YXRpYycpIHtcbiAgICAgIE1hbmlwdWxhdG9yLnNldERhdGFBdHRyaWJ1dGUodGhpcy5fbWVudSwgJ3BvcHBlcicsICdzdGF0aWMnKTsgLy8gVE9ETzogdjYgcmVtb3ZlXG4gICAgICBkZWZhdWx0QnNQb3BwZXJDb25maWcubW9kaWZpZXJzID0gW3tcbiAgICAgICAgbmFtZTogJ2FwcGx5U3R5bGVzJyxcbiAgICAgICAgZW5hYmxlZDogZmFsc2VcbiAgICAgIH1dO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgLi4uZGVmYXVsdEJzUG9wcGVyQ29uZmlnLFxuICAgICAgLi4uZXhlY3V0ZSh0aGlzLl9jb25maWcucG9wcGVyQ29uZmlnLCBbZGVmYXVsdEJzUG9wcGVyQ29uZmlnXSlcbiAgICB9O1xuICB9XG4gIF9zZWxlY3RNZW51SXRlbSh7XG4gICAga2V5LFxuICAgIHRhcmdldFxuICB9KSB7XG4gICAgY29uc3QgaXRlbXMgPSBTZWxlY3RvckVuZ2luZS5maW5kKFNFTEVDVE9SX1ZJU0lCTEVfSVRFTVMsIHRoaXMuX21lbnUpLmZpbHRlcihlbGVtZW50ID0+IGlzVmlzaWJsZShlbGVtZW50KSk7XG4gICAgaWYgKCFpdGVtcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBpZiB0YXJnZXQgaXNuJ3QgaW5jbHVkZWQgaW4gaXRlbXMgKGUuZy4gd2hlbiBleHBhbmRpbmcgdGhlIGRyb3Bkb3duKVxuICAgIC8vIGFsbG93IGN5Y2xpbmcgdG8gZ2V0IHRoZSBsYXN0IGl0ZW0gaW4gY2FzZSBrZXkgZXF1YWxzIEFSUk9XX1VQX0tFWVxuICAgIGdldE5leHRBY3RpdmVFbGVtZW50KGl0ZW1zLCB0YXJnZXQsIGtleSA9PT0gQVJST1dfRE9XTl9LRVkkMSwgIWl0ZW1zLmluY2x1ZGVzKHRhcmdldCkpLmZvY3VzKCk7XG4gIH1cblxuICAvLyBTdGF0aWNcbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBEcm9wZG93bi5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMsIGNvbmZpZyk7XG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBkYXRhW2NvbmZpZ10gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYCk7XG4gICAgICB9XG4gICAgICBkYXRhW2NvbmZpZ10oKTtcbiAgICB9KTtcbiAgfVxuICBzdGF0aWMgY2xlYXJNZW51cyhldmVudCkge1xuICAgIGlmIChldmVudC5idXR0b24gPT09IFJJR0hUX01PVVNFX0JVVFRPTiB8fCBldmVudC50eXBlID09PSAna2V5dXAnICYmIGV2ZW50LmtleSAhPT0gVEFCX0tFWSQxKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG9wZW5Ub2dnbGVzID0gU2VsZWN0b3JFbmdpbmUuZmluZChTRUxFQ1RPUl9EQVRBX1RPR0dMRV9TSE9XTik7XG4gICAgZm9yIChjb25zdCB0b2dnbGUgb2Ygb3BlblRvZ2dsZXMpIHtcbiAgICAgIGNvbnN0IGNvbnRleHQgPSBEcm9wZG93bi5nZXRJbnN0YW5jZSh0b2dnbGUpO1xuICAgICAgaWYgKCFjb250ZXh0IHx8IGNvbnRleHQuX2NvbmZpZy5hdXRvQ2xvc2UgPT09IGZhbHNlKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgY29tcG9zZWRQYXRoID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7XG4gICAgICBjb25zdCBpc01lbnVUYXJnZXQgPSBjb21wb3NlZFBhdGguaW5jbHVkZXMoY29udGV4dC5fbWVudSk7XG4gICAgICBpZiAoY29tcG9zZWRQYXRoLmluY2x1ZGVzKGNvbnRleHQuX2VsZW1lbnQpIHx8IGNvbnRleHQuX2NvbmZpZy5hdXRvQ2xvc2UgPT09ICdpbnNpZGUnICYmICFpc01lbnVUYXJnZXQgfHwgY29udGV4dC5fY29uZmlnLmF1dG9DbG9zZSA9PT0gJ291dHNpZGUnICYmIGlzTWVudVRhcmdldCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gVGFiIG5hdmlnYXRpb24gdGhyb3VnaCB0aGUgZHJvcGRvd24gbWVudSBvciBldmVudHMgZnJvbSBjb250YWluZWQgaW5wdXRzIHNob3VsZG4ndCBjbG9zZSB0aGUgbWVudVxuICAgICAgaWYgKGNvbnRleHQuX21lbnUuY29udGFpbnMoZXZlbnQudGFyZ2V0KSAmJiAoZXZlbnQudHlwZSA9PT0gJ2tleXVwJyAmJiBldmVudC5rZXkgPT09IFRBQl9LRVkkMSB8fCAvaW5wdXR8c2VsZWN0fG9wdGlvbnx0ZXh0YXJlYXxmb3JtL2kudGVzdChldmVudC50YXJnZXQudGFnTmFtZSkpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVsYXRlZFRhcmdldCA9IHtcbiAgICAgICAgcmVsYXRlZFRhcmdldDogY29udGV4dC5fZWxlbWVudFxuICAgICAgfTtcbiAgICAgIGlmIChldmVudC50eXBlID09PSAnY2xpY2snKSB7XG4gICAgICAgIHJlbGF0ZWRUYXJnZXQuY2xpY2tFdmVudCA9IGV2ZW50O1xuICAgICAgfVxuICAgICAgY29udGV4dC5fY29tcGxldGVIaWRlKHJlbGF0ZWRUYXJnZXQpO1xuICAgIH1cbiAgfVxuICBzdGF0aWMgZGF0YUFwaUtleWRvd25IYW5kbGVyKGV2ZW50KSB7XG4gICAgLy8gSWYgbm90IGFuIFVQIHwgRE9XTiB8IEVTQ0FQRSBrZXkgPT4gbm90IGEgZHJvcGRvd24gY29tbWFuZFxuICAgIC8vIElmIGlucHV0L3RleHRhcmVhICYmIGlmIGtleSBpcyBvdGhlciB0aGFuIEVTQ0FQRSA9PiBub3QgYSBkcm9wZG93biBjb21tYW5kXG5cbiAgICBjb25zdCBpc0lucHV0ID0gL2lucHV0fHRleHRhcmVhL2kudGVzdChldmVudC50YXJnZXQudGFnTmFtZSk7XG4gICAgY29uc3QgaXNFc2NhcGVFdmVudCA9IGV2ZW50LmtleSA9PT0gRVNDQVBFX0tFWSQyO1xuICAgIGNvbnN0IGlzVXBPckRvd25FdmVudCA9IFtBUlJPV19VUF9LRVkkMSwgQVJST1dfRE9XTl9LRVkkMV0uaW5jbHVkZXMoZXZlbnQua2V5KTtcbiAgICBpZiAoIWlzVXBPckRvd25FdmVudCAmJiAhaXNFc2NhcGVFdmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaXNJbnB1dCAmJiAhaXNFc2NhcGVFdmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgLy8gVE9ETzogdjYgcmV2ZXJ0ICMzNzAxMSAmIGNoYW5nZSBtYXJrdXAgaHR0cHM6Ly9nZXRib290c3RyYXAuY29tL2RvY3MvNS4zL2Zvcm1zL2lucHV0LWdyb3VwL1xuICAgIGNvbnN0IGdldFRvZ2dsZUJ1dHRvbiA9IHRoaXMubWF0Y2hlcyhTRUxFQ1RPUl9EQVRBX1RPR0dMRSQzKSA/IHRoaXMgOiBTZWxlY3RvckVuZ2luZS5wcmV2KHRoaXMsIFNFTEVDVE9SX0RBVEFfVE9HR0xFJDMpWzBdIHx8IFNlbGVjdG9yRW5naW5lLm5leHQodGhpcywgU0VMRUNUT1JfREFUQV9UT0dHTEUkMylbMF0gfHwgU2VsZWN0b3JFbmdpbmUuZmluZE9uZShTRUxFQ1RPUl9EQVRBX1RPR0dMRSQzLCBldmVudC5kZWxlZ2F0ZVRhcmdldC5wYXJlbnROb2RlKTtcbiAgICBjb25zdCBpbnN0YW5jZSA9IERyb3Bkb3duLmdldE9yQ3JlYXRlSW5zdGFuY2UoZ2V0VG9nZ2xlQnV0dG9uKTtcbiAgICBpZiAoaXNVcE9yRG93bkV2ZW50KSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGluc3RhbmNlLnNob3coKTtcbiAgICAgIGluc3RhbmNlLl9zZWxlY3RNZW51SXRlbShldmVudCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChpbnN0YW5jZS5faXNTaG93bigpKSB7XG4gICAgICAvLyBlbHNlIGlzIGVzY2FwZSBhbmQgd2UgY2hlY2sgaWYgaXQgaXMgc2hvd25cbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgaW5zdGFuY2UuaGlkZSgpO1xuICAgICAgZ2V0VG9nZ2xlQnV0dG9uLmZvY3VzKCk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogRGF0YSBBUEkgaW1wbGVtZW50YXRpb25cbiAqL1xuXG5FdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0tFWURPV05fREFUQV9BUEksIFNFTEVDVE9SX0RBVEFfVE9HR0xFJDMsIERyb3Bkb3duLmRhdGFBcGlLZXlkb3duSGFuZGxlcik7XG5FdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0tFWURPV05fREFUQV9BUEksIFNFTEVDVE9SX01FTlUsIERyb3Bkb3duLmRhdGFBcGlLZXlkb3duSGFuZGxlcik7XG5FdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0NMSUNLX0RBVEFfQVBJJDMsIERyb3Bkb3duLmNsZWFyTWVudXMpO1xuRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9LRVlVUF9EQVRBX0FQSSwgRHJvcGRvd24uY2xlYXJNZW51cyk7XG5FdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0NMSUNLX0RBVEFfQVBJJDMsIFNFTEVDVE9SX0RBVEFfVE9HR0xFJDMsIGZ1bmN0aW9uIChldmVudCkge1xuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICBEcm9wZG93bi5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMpLnRvZ2dsZSgpO1xufSk7XG5cbi8qKlxuICogalF1ZXJ5XG4gKi9cblxuZGVmaW5lSlF1ZXJ5UGx1Z2luKERyb3Bkb3duKTtcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIHV0aWwvYmFja2Ryb3AuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSQ5ID0gJ2JhY2tkcm9wJztcbmNvbnN0IENMQVNTX05BTUVfRkFERSQ0ID0gJ2ZhZGUnO1xuY29uc3QgQ0xBU1NfTkFNRV9TSE9XJDUgPSAnc2hvdyc7XG5jb25zdCBFVkVOVF9NT1VTRURPV04gPSBgbW91c2Vkb3duLmJzLiR7TkFNRSQ5fWA7XG5jb25zdCBEZWZhdWx0JDggPSB7XG4gIGNsYXNzTmFtZTogJ21vZGFsLWJhY2tkcm9wJyxcbiAgY2xpY2tDYWxsYmFjazogbnVsbCxcbiAgaXNBbmltYXRlZDogZmFsc2UsXG4gIGlzVmlzaWJsZTogdHJ1ZSxcbiAgLy8gaWYgZmFsc2UsIHdlIHVzZSB0aGUgYmFja2Ryb3AgaGVscGVyIHdpdGhvdXQgYWRkaW5nIGFueSBlbGVtZW50IHRvIHRoZSBkb21cbiAgcm9vdEVsZW1lbnQ6ICdib2R5JyAvLyBnaXZlIHRoZSBjaG9pY2UgdG8gcGxhY2UgYmFja2Ryb3AgdW5kZXIgZGlmZmVyZW50IGVsZW1lbnRzXG59O1xuY29uc3QgRGVmYXVsdFR5cGUkOCA9IHtcbiAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgY2xpY2tDYWxsYmFjazogJyhmdW5jdGlvbnxudWxsKScsXG4gIGlzQW5pbWF0ZWQ6ICdib29sZWFuJyxcbiAgaXNWaXNpYmxlOiAnYm9vbGVhbicsXG4gIHJvb3RFbGVtZW50OiAnKGVsZW1lbnR8c3RyaW5nKSdcbn07XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIEJhY2tkcm9wIGV4dGVuZHMgQ29uZmlnIHtcbiAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9jb25maWcgPSB0aGlzLl9nZXRDb25maWcoY29uZmlnKTtcbiAgICB0aGlzLl9pc0FwcGVuZGVkID0gZmFsc2U7XG4gICAgdGhpcy5fZWxlbWVudCA9IG51bGw7XG4gIH1cblxuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4gRGVmYXVsdCQ4O1xuICB9XG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRUeXBlJDg7XG4gIH1cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FJDk7XG4gIH1cblxuICAvLyBQdWJsaWNcbiAgc2hvdyhjYWxsYmFjaykge1xuICAgIGlmICghdGhpcy5fY29uZmlnLmlzVmlzaWJsZSkge1xuICAgICAgZXhlY3V0ZShjYWxsYmFjayk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2FwcGVuZCgpO1xuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLl9nZXRFbGVtZW50KCk7XG4gICAgaWYgKHRoaXMuX2NvbmZpZy5pc0FuaW1hdGVkKSB7XG4gICAgICByZWZsb3coZWxlbWVudCk7XG4gICAgfVxuICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1NIT1ckNSk7XG4gICAgdGhpcy5fZW11bGF0ZUFuaW1hdGlvbigoKSA9PiB7XG4gICAgICBleGVjdXRlKGNhbGxiYWNrKTtcbiAgICB9KTtcbiAgfVxuICBoaWRlKGNhbGxiYWNrKSB7XG4gICAgaWYgKCF0aGlzLl9jb25maWcuaXNWaXNpYmxlKSB7XG4gICAgICBleGVjdXRlKGNhbGxiYWNrKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fZ2V0RWxlbWVudCgpLmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TSE9XJDUpO1xuICAgIHRoaXMuX2VtdWxhdGVBbmltYXRpb24oKCkgPT4ge1xuICAgICAgdGhpcy5kaXNwb3NlKCk7XG4gICAgICBleGVjdXRlKGNhbGxiYWNrKTtcbiAgICB9KTtcbiAgfVxuICBkaXNwb3NlKCkge1xuICAgIGlmICghdGhpcy5faXNBcHBlbmRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBFdmVudEhhbmRsZXIub2ZmKHRoaXMuX2VsZW1lbnQsIEVWRU5UX01PVVNFRE9XTik7XG4gICAgdGhpcy5fZWxlbWVudC5yZW1vdmUoKTtcbiAgICB0aGlzLl9pc0FwcGVuZGVkID0gZmFsc2U7XG4gIH1cblxuICAvLyBQcml2YXRlXG4gIF9nZXRFbGVtZW50KCkge1xuICAgIGlmICghdGhpcy5fZWxlbWVudCkge1xuICAgICAgY29uc3QgYmFja2Ryb3AgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIGJhY2tkcm9wLmNsYXNzTmFtZSA9IHRoaXMuX2NvbmZpZy5jbGFzc05hbWU7XG4gICAgICBpZiAodGhpcy5fY29uZmlnLmlzQW5pbWF0ZWQpIHtcbiAgICAgICAgYmFja2Ryb3AuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0ZBREUkNCk7XG4gICAgICB9XG4gICAgICB0aGlzLl9lbGVtZW50ID0gYmFja2Ryb3A7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9lbGVtZW50O1xuICB9XG4gIF9jb25maWdBZnRlck1lcmdlKGNvbmZpZykge1xuICAgIC8vIHVzZSBnZXRFbGVtZW50KCkgd2l0aCB0aGUgZGVmYXVsdCBcImJvZHlcIiB0byBnZXQgYSBmcmVzaCBFbGVtZW50IG9uIGVhY2ggaW5zdGFudGlhdGlvblxuICAgIGNvbmZpZy5yb290RWxlbWVudCA9IGdldEVsZW1lbnQoY29uZmlnLnJvb3RFbGVtZW50KTtcbiAgICByZXR1cm4gY29uZmlnO1xuICB9XG4gIF9hcHBlbmQoKSB7XG4gICAgaWYgKHRoaXMuX2lzQXBwZW5kZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuX2dldEVsZW1lbnQoKTtcbiAgICB0aGlzLl9jb25maWcucm9vdEVsZW1lbnQuYXBwZW5kKGVsZW1lbnQpO1xuICAgIEV2ZW50SGFuZGxlci5vbihlbGVtZW50LCBFVkVOVF9NT1VTRURPV04sICgpID0+IHtcbiAgICAgIGV4ZWN1dGUodGhpcy5fY29uZmlnLmNsaWNrQ2FsbGJhY2spO1xuICAgIH0pO1xuICAgIHRoaXMuX2lzQXBwZW5kZWQgPSB0cnVlO1xuICB9XG4gIF9lbXVsYXRlQW5pbWF0aW9uKGNhbGxiYWNrKSB7XG4gICAgZXhlY3V0ZUFmdGVyVHJhbnNpdGlvbihjYWxsYmFjaywgdGhpcy5fZ2V0RWxlbWVudCgpLCB0aGlzLl9jb25maWcuaXNBbmltYXRlZCk7XG4gIH1cbn1cblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIHV0aWwvZm9jdXN0cmFwLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IE5BTUUkOCA9ICdmb2N1c3RyYXAnO1xuY29uc3QgREFUQV9LRVkkNSA9ICdicy5mb2N1c3RyYXAnO1xuY29uc3QgRVZFTlRfS0VZJDUgPSBgLiR7REFUQV9LRVkkNX1gO1xuY29uc3QgRVZFTlRfRk9DVVNJTiQyID0gYGZvY3VzaW4ke0VWRU5UX0tFWSQ1fWA7XG5jb25zdCBFVkVOVF9LRVlET1dOX1RBQiA9IGBrZXlkb3duLnRhYiR7RVZFTlRfS0VZJDV9YDtcbmNvbnN0IFRBQl9LRVkgPSAnVGFiJztcbmNvbnN0IFRBQl9OQVZfRk9SV0FSRCA9ICdmb3J3YXJkJztcbmNvbnN0IFRBQl9OQVZfQkFDS1dBUkQgPSAnYmFja3dhcmQnO1xuY29uc3QgRGVmYXVsdCQ3ID0ge1xuICBhdXRvZm9jdXM6IHRydWUsXG4gIHRyYXBFbGVtZW50OiBudWxsIC8vIFRoZSBlbGVtZW50IHRvIHRyYXAgZm9jdXMgaW5zaWRlIG9mXG59O1xuY29uc3QgRGVmYXVsdFR5cGUkNyA9IHtcbiAgYXV0b2ZvY3VzOiAnYm9vbGVhbicsXG4gIHRyYXBFbGVtZW50OiAnZWxlbWVudCdcbn07XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIEZvY3VzVHJhcCBleHRlbmRzIENvbmZpZyB7XG4gIGNvbnN0cnVjdG9yKGNvbmZpZykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fY29uZmlnID0gdGhpcy5fZ2V0Q29uZmlnKGNvbmZpZyk7XG4gICAgdGhpcy5faXNBY3RpdmUgPSBmYWxzZTtcbiAgICB0aGlzLl9sYXN0VGFiTmF2RGlyZWN0aW9uID0gbnVsbDtcbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0JDc7XG4gIH1cbiAgc3RhdGljIGdldCBEZWZhdWx0VHlwZSgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFR5cGUkNztcbiAgfVxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUUkODtcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICBhY3RpdmF0ZSgpIHtcbiAgICBpZiAodGhpcy5faXNBY3RpdmUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2NvbmZpZy5hdXRvZm9jdXMpIHtcbiAgICAgIHRoaXMuX2NvbmZpZy50cmFwRWxlbWVudC5mb2N1cygpO1xuICAgIH1cbiAgICBFdmVudEhhbmRsZXIub2ZmKGRvY3VtZW50LCBFVkVOVF9LRVkkNSk7IC8vIGd1YXJkIGFnYWluc3QgaW5maW5pdGUgZm9jdXMgbG9vcFxuICAgIEV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfRk9DVVNJTiQyLCBldmVudCA9PiB0aGlzLl9oYW5kbGVGb2N1c2luKGV2ZW50KSk7XG4gICAgRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9LRVlET1dOX1RBQiwgZXZlbnQgPT4gdGhpcy5faGFuZGxlS2V5ZG93bihldmVudCkpO1xuICAgIHRoaXMuX2lzQWN0aXZlID0gdHJ1ZTtcbiAgfVxuICBkZWFjdGl2YXRlKCkge1xuICAgIGlmICghdGhpcy5faXNBY3RpdmUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5faXNBY3RpdmUgPSBmYWxzZTtcbiAgICBFdmVudEhhbmRsZXIub2ZmKGRvY3VtZW50LCBFVkVOVF9LRVkkNSk7XG4gIH1cblxuICAvLyBQcml2YXRlXG4gIF9oYW5kbGVGb2N1c2luKGV2ZW50KSB7XG4gICAgY29uc3Qge1xuICAgICAgdHJhcEVsZW1lbnRcbiAgICB9ID0gdGhpcy5fY29uZmlnO1xuICAgIGlmIChldmVudC50YXJnZXQgPT09IGRvY3VtZW50IHx8IGV2ZW50LnRhcmdldCA9PT0gdHJhcEVsZW1lbnQgfHwgdHJhcEVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBlbGVtZW50cyA9IFNlbGVjdG9yRW5naW5lLmZvY3VzYWJsZUNoaWxkcmVuKHRyYXBFbGVtZW50KTtcbiAgICBpZiAoZWxlbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0cmFwRWxlbWVudC5mb2N1cygpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fbGFzdFRhYk5hdkRpcmVjdGlvbiA9PT0gVEFCX05BVl9CQUNLV0FSRCkge1xuICAgICAgZWxlbWVudHNbZWxlbWVudHMubGVuZ3RoIC0gMV0uZm9jdXMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWxlbWVudHNbMF0uZm9jdXMoKTtcbiAgICB9XG4gIH1cbiAgX2hhbmRsZUtleWRvd24oZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQua2V5ICE9PSBUQUJfS0VZKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2xhc3RUYWJOYXZEaXJlY3Rpb24gPSBldmVudC5zaGlmdEtleSA/IFRBQl9OQVZfQkFDS1dBUkQgOiBUQUJfTkFWX0ZPUldBUkQ7XG4gIH1cbn1cblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIHV0aWwvc2Nyb2xsQmFyLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IFNFTEVDVE9SX0ZJWEVEX0NPTlRFTlQgPSAnLmZpeGVkLXRvcCwgLmZpeGVkLWJvdHRvbSwgLmlzLWZpeGVkLCAuc3RpY2t5LXRvcCc7XG5jb25zdCBTRUxFQ1RPUl9TVElDS1lfQ09OVEVOVCA9ICcuc3RpY2t5LXRvcCc7XG5jb25zdCBQUk9QRVJUWV9QQURESU5HID0gJ3BhZGRpbmctcmlnaHQnO1xuY29uc3QgUFJPUEVSVFlfTUFSR0lOID0gJ21hcmdpbi1yaWdodCc7XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIFNjcm9sbEJhckhlbHBlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX2VsZW1lbnQgPSBkb2N1bWVudC5ib2R5O1xuICB9XG5cbiAgLy8gUHVibGljXG4gIGdldFdpZHRoKCkge1xuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9XaW5kb3cvaW5uZXJXaWR0aCN1c2FnZV9ub3Rlc1xuICAgIGNvbnN0IGRvY3VtZW50V2lkdGggPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg7XG4gICAgcmV0dXJuIE1hdGguYWJzKHdpbmRvdy5pbm5lcldpZHRoIC0gZG9jdW1lbnRXaWR0aCk7XG4gIH1cbiAgaGlkZSgpIHtcbiAgICBjb25zdCB3aWR0aCA9IHRoaXMuZ2V0V2lkdGgoKTtcbiAgICB0aGlzLl9kaXNhYmxlT3ZlckZsb3coKTtcbiAgICAvLyBnaXZlIHBhZGRpbmcgdG8gZWxlbWVudCB0byBiYWxhbmNlIHRoZSBoaWRkZW4gc2Nyb2xsYmFyIHdpZHRoXG4gICAgdGhpcy5fc2V0RWxlbWVudEF0dHJpYnV0ZXModGhpcy5fZWxlbWVudCwgUFJPUEVSVFlfUEFERElORywgY2FsY3VsYXRlZFZhbHVlID0+IGNhbGN1bGF0ZWRWYWx1ZSArIHdpZHRoKTtcbiAgICAvLyB0cmljazogV2UgYWRqdXN0IHBvc2l0aXZlIHBhZGRpbmdSaWdodCBhbmQgbmVnYXRpdmUgbWFyZ2luUmlnaHQgdG8gc3RpY2t5LXRvcCBlbGVtZW50cyB0byBrZWVwIHNob3dpbmcgZnVsbHdpZHRoXG4gICAgdGhpcy5fc2V0RWxlbWVudEF0dHJpYnV0ZXMoU0VMRUNUT1JfRklYRURfQ09OVEVOVCwgUFJPUEVSVFlfUEFERElORywgY2FsY3VsYXRlZFZhbHVlID0+IGNhbGN1bGF0ZWRWYWx1ZSArIHdpZHRoKTtcbiAgICB0aGlzLl9zZXRFbGVtZW50QXR0cmlidXRlcyhTRUxFQ1RPUl9TVElDS1lfQ09OVEVOVCwgUFJPUEVSVFlfTUFSR0lOLCBjYWxjdWxhdGVkVmFsdWUgPT4gY2FsY3VsYXRlZFZhbHVlIC0gd2lkdGgpO1xuICB9XG4gIHJlc2V0KCkge1xuICAgIHRoaXMuX3Jlc2V0RWxlbWVudEF0dHJpYnV0ZXModGhpcy5fZWxlbWVudCwgJ292ZXJmbG93Jyk7XG4gICAgdGhpcy5fcmVzZXRFbGVtZW50QXR0cmlidXRlcyh0aGlzLl9lbGVtZW50LCBQUk9QRVJUWV9QQURESU5HKTtcbiAgICB0aGlzLl9yZXNldEVsZW1lbnRBdHRyaWJ1dGVzKFNFTEVDVE9SX0ZJWEVEX0NPTlRFTlQsIFBST1BFUlRZX1BBRERJTkcpO1xuICAgIHRoaXMuX3Jlc2V0RWxlbWVudEF0dHJpYnV0ZXMoU0VMRUNUT1JfU1RJQ0tZX0NPTlRFTlQsIFBST1BFUlRZX01BUkdJTik7XG4gIH1cbiAgaXNPdmVyZmxvd2luZygpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRXaWR0aCgpID4gMDtcbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX2Rpc2FibGVPdmVyRmxvdygpIHtcbiAgICB0aGlzLl9zYXZlSW5pdGlhbEF0dHJpYnV0ZSh0aGlzLl9lbGVtZW50LCAnb3ZlcmZsb3cnKTtcbiAgICB0aGlzLl9lbGVtZW50LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7XG4gIH1cbiAgX3NldEVsZW1lbnRBdHRyaWJ1dGVzKHNlbGVjdG9yLCBzdHlsZVByb3BlcnR5LCBjYWxsYmFjaykge1xuICAgIGNvbnN0IHNjcm9sbGJhcldpZHRoID0gdGhpcy5nZXRXaWR0aCgpO1xuICAgIGNvbnN0IG1hbmlwdWxhdGlvbkNhbGxCYWNrID0gZWxlbWVudCA9PiB7XG4gICAgICBpZiAoZWxlbWVudCAhPT0gdGhpcy5fZWxlbWVudCAmJiB3aW5kb3cuaW5uZXJXaWR0aCA+IGVsZW1lbnQuY2xpZW50V2lkdGggKyBzY3JvbGxiYXJXaWR0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLl9zYXZlSW5pdGlhbEF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZVByb3BlcnR5KTtcbiAgICAgIGNvbnN0IGNhbGN1bGF0ZWRWYWx1ZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLmdldFByb3BlcnR5VmFsdWUoc3R5bGVQcm9wZXJ0eSk7XG4gICAgICBlbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KHN0eWxlUHJvcGVydHksIGAke2NhbGxiYWNrKE51bWJlci5wYXJzZUZsb2F0KGNhbGN1bGF0ZWRWYWx1ZSkpfXB4YCk7XG4gICAgfTtcbiAgICB0aGlzLl9hcHBseU1hbmlwdWxhdGlvbkNhbGxiYWNrKHNlbGVjdG9yLCBtYW5pcHVsYXRpb25DYWxsQmFjayk7XG4gIH1cbiAgX3NhdmVJbml0aWFsQXR0cmlidXRlKGVsZW1lbnQsIHN0eWxlUHJvcGVydHkpIHtcbiAgICBjb25zdCBhY3R1YWxWYWx1ZSA9IGVsZW1lbnQuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShzdHlsZVByb3BlcnR5KTtcbiAgICBpZiAoYWN0dWFsVmFsdWUpIHtcbiAgICAgIE1hbmlwdWxhdG9yLnNldERhdGFBdHRyaWJ1dGUoZWxlbWVudCwgc3R5bGVQcm9wZXJ0eSwgYWN0dWFsVmFsdWUpO1xuICAgIH1cbiAgfVxuICBfcmVzZXRFbGVtZW50QXR0cmlidXRlcyhzZWxlY3Rvciwgc3R5bGVQcm9wZXJ0eSkge1xuICAgIGNvbnN0IG1hbmlwdWxhdGlvbkNhbGxCYWNrID0gZWxlbWVudCA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IE1hbmlwdWxhdG9yLmdldERhdGFBdHRyaWJ1dGUoZWxlbWVudCwgc3R5bGVQcm9wZXJ0eSk7XG4gICAgICAvLyBXZSBvbmx5IHdhbnQgdG8gcmVtb3ZlIHRoZSBwcm9wZXJ0eSBpZiB0aGUgdmFsdWUgaXMgYG51bGxgOyB0aGUgdmFsdWUgY2FuIGFsc28gYmUgemVyb1xuICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVydHkoc3R5bGVQcm9wZXJ0eSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIE1hbmlwdWxhdG9yLnJlbW92ZURhdGFBdHRyaWJ1dGUoZWxlbWVudCwgc3R5bGVQcm9wZXJ0eSk7XG4gICAgICBlbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KHN0eWxlUHJvcGVydHksIHZhbHVlKTtcbiAgICB9O1xuICAgIHRoaXMuX2FwcGx5TWFuaXB1bGF0aW9uQ2FsbGJhY2soc2VsZWN0b3IsIG1hbmlwdWxhdGlvbkNhbGxCYWNrKTtcbiAgfVxuICBfYXBwbHlNYW5pcHVsYXRpb25DYWxsYmFjayhzZWxlY3RvciwgY2FsbEJhY2spIHtcbiAgICBpZiAoaXNFbGVtZW50KHNlbGVjdG9yKSkge1xuICAgICAgY2FsbEJhY2soc2VsZWN0b3IpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHNlbCBvZiBTZWxlY3RvckVuZ2luZS5maW5kKHNlbGVjdG9yLCB0aGlzLl9lbGVtZW50KSkge1xuICAgICAgY2FsbEJhY2soc2VsKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIG1vZGFsLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IE5BTUUkNyA9ICdtb2RhbCc7XG5jb25zdCBEQVRBX0tFWSQ0ID0gJ2JzLm1vZGFsJztcbmNvbnN0IEVWRU5UX0tFWSQ0ID0gYC4ke0RBVEFfS0VZJDR9YDtcbmNvbnN0IERBVEFfQVBJX0tFWSQyID0gJy5kYXRhLWFwaSc7XG5jb25zdCBFU0NBUEVfS0VZJDEgPSAnRXNjYXBlJztcbmNvbnN0IEVWRU5UX0hJREUkNCA9IGBoaWRlJHtFVkVOVF9LRVkkNH1gO1xuY29uc3QgRVZFTlRfSElERV9QUkVWRU5URUQkMSA9IGBoaWRlUHJldmVudGVkJHtFVkVOVF9LRVkkNH1gO1xuY29uc3QgRVZFTlRfSElEREVOJDQgPSBgaGlkZGVuJHtFVkVOVF9LRVkkNH1gO1xuY29uc3QgRVZFTlRfU0hPVyQ0ID0gYHNob3cke0VWRU5UX0tFWSQ0fWA7XG5jb25zdCBFVkVOVF9TSE9XTiQ0ID0gYHNob3duJHtFVkVOVF9LRVkkNH1gO1xuY29uc3QgRVZFTlRfUkVTSVpFJDEgPSBgcmVzaXplJHtFVkVOVF9LRVkkNH1gO1xuY29uc3QgRVZFTlRfQ0xJQ0tfRElTTUlTUyA9IGBjbGljay5kaXNtaXNzJHtFVkVOVF9LRVkkNH1gO1xuY29uc3QgRVZFTlRfTU9VU0VET1dOX0RJU01JU1MgPSBgbW91c2Vkb3duLmRpc21pc3Mke0VWRU5UX0tFWSQ0fWA7XG5jb25zdCBFVkVOVF9LRVlET1dOX0RJU01JU1MkMSA9IGBrZXlkb3duLmRpc21pc3Mke0VWRU5UX0tFWSQ0fWA7XG5jb25zdCBFVkVOVF9DTElDS19EQVRBX0FQSSQyID0gYGNsaWNrJHtFVkVOVF9LRVkkNH0ke0RBVEFfQVBJX0tFWSQyfWA7XG5jb25zdCBDTEFTU19OQU1FX09QRU4gPSAnbW9kYWwtb3Blbic7XG5jb25zdCBDTEFTU19OQU1FX0ZBREUkMyA9ICdmYWRlJztcbmNvbnN0IENMQVNTX05BTUVfU0hPVyQ0ID0gJ3Nob3cnO1xuY29uc3QgQ0xBU1NfTkFNRV9TVEFUSUMgPSAnbW9kYWwtc3RhdGljJztcbmNvbnN0IE9QRU5fU0VMRUNUT1IkMSA9ICcubW9kYWwuc2hvdyc7XG5jb25zdCBTRUxFQ1RPUl9ESUFMT0cgPSAnLm1vZGFsLWRpYWxvZyc7XG5jb25zdCBTRUxFQ1RPUl9NT0RBTF9CT0RZID0gJy5tb2RhbC1ib2R5JztcbmNvbnN0IFNFTEVDVE9SX0RBVEFfVE9HR0xFJDIgPSAnW2RhdGEtYnMtdG9nZ2xlPVwibW9kYWxcIl0nO1xuY29uc3QgRGVmYXVsdCQ2ID0ge1xuICBiYWNrZHJvcDogdHJ1ZSxcbiAgZm9jdXM6IHRydWUsXG4gIGtleWJvYXJkOiB0cnVlXG59O1xuY29uc3QgRGVmYXVsdFR5cGUkNiA9IHtcbiAgYmFja2Ryb3A6ICcoYm9vbGVhbnxzdHJpbmcpJyxcbiAgZm9jdXM6ICdib29sZWFuJyxcbiAga2V5Ym9hcmQ6ICdib29sZWFuJ1xufTtcblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgTW9kYWwgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgc3VwZXIoZWxlbWVudCwgY29uZmlnKTtcbiAgICB0aGlzLl9kaWFsb2cgPSBTZWxlY3RvckVuZ2luZS5maW5kT25lKFNFTEVDVE9SX0RJQUxPRywgdGhpcy5fZWxlbWVudCk7XG4gICAgdGhpcy5fYmFja2Ryb3AgPSB0aGlzLl9pbml0aWFsaXplQmFja0Ryb3AoKTtcbiAgICB0aGlzLl9mb2N1c3RyYXAgPSB0aGlzLl9pbml0aWFsaXplRm9jdXNUcmFwKCk7XG4gICAgdGhpcy5faXNTaG93biA9IGZhbHNlO1xuICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IGZhbHNlO1xuICAgIHRoaXMuX3Njcm9sbEJhciA9IG5ldyBTY3JvbGxCYXJIZWxwZXIoKTtcbiAgICB0aGlzLl9hZGRFdmVudExpc3RlbmVycygpO1xuICB9XG5cbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHQkNjtcbiAgfVxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZSQ2O1xuICB9XG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRSQ3O1xuICB9XG5cbiAgLy8gUHVibGljXG4gIHRvZ2dsZShyZWxhdGVkVGFyZ2V0KSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzU2hvd24gPyB0aGlzLmhpZGUoKSA6IHRoaXMuc2hvdyhyZWxhdGVkVGFyZ2V0KTtcbiAgfVxuICBzaG93KHJlbGF0ZWRUYXJnZXQpIHtcbiAgICBpZiAodGhpcy5faXNTaG93biB8fCB0aGlzLl9pc1RyYW5zaXRpb25pbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc2hvd0V2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfU0hPVyQ0LCB7XG4gICAgICByZWxhdGVkVGFyZ2V0XG4gICAgfSk7XG4gICAgaWYgKHNob3dFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2lzU2hvd24gPSB0cnVlO1xuICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IHRydWU7XG4gICAgdGhpcy5fc2Nyb2xsQmFyLmhpZGUoKTtcbiAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9PUEVOKTtcbiAgICB0aGlzLl9hZGp1c3REaWFsb2coKTtcbiAgICB0aGlzLl9iYWNrZHJvcC5zaG93KCgpID0+IHRoaXMuX3Nob3dFbGVtZW50KHJlbGF0ZWRUYXJnZXQpKTtcbiAgfVxuICBoaWRlKCkge1xuICAgIGlmICghdGhpcy5faXNTaG93biB8fCB0aGlzLl9pc1RyYW5zaXRpb25pbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaGlkZUV2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElERSQ0KTtcbiAgICBpZiAoaGlkZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5faXNTaG93biA9IGZhbHNlO1xuICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IHRydWU7XG4gICAgdGhpcy5fZm9jdXN0cmFwLmRlYWN0aXZhdGUoKTtcbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TSE9XJDQpO1xuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soKCkgPT4gdGhpcy5faGlkZU1vZGFsKCksIHRoaXMuX2VsZW1lbnQsIHRoaXMuX2lzQW5pbWF0ZWQoKSk7XG4gIH1cbiAgZGlzcG9zZSgpIHtcbiAgICBFdmVudEhhbmRsZXIub2ZmKHdpbmRvdywgRVZFTlRfS0VZJDQpO1xuICAgIEV2ZW50SGFuZGxlci5vZmYodGhpcy5fZGlhbG9nLCBFVkVOVF9LRVkkNCk7XG4gICAgdGhpcy5fYmFja2Ryb3AuZGlzcG9zZSgpO1xuICAgIHRoaXMuX2ZvY3VzdHJhcC5kZWFjdGl2YXRlKCk7XG4gICAgc3VwZXIuZGlzcG9zZSgpO1xuICB9XG4gIGhhbmRsZVVwZGF0ZSgpIHtcbiAgICB0aGlzLl9hZGp1c3REaWFsb2coKTtcbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX2luaXRpYWxpemVCYWNrRHJvcCgpIHtcbiAgICByZXR1cm4gbmV3IEJhY2tkcm9wKHtcbiAgICAgIGlzVmlzaWJsZTogQm9vbGVhbih0aGlzLl9jb25maWcuYmFja2Ryb3ApLFxuICAgICAgLy8gJ3N0YXRpYycgb3B0aW9uIHdpbGwgYmUgdHJhbnNsYXRlZCB0byB0cnVlLCBhbmQgYm9vbGVhbnMgd2lsbCBrZWVwIHRoZWlyIHZhbHVlLFxuICAgICAgaXNBbmltYXRlZDogdGhpcy5faXNBbmltYXRlZCgpXG4gICAgfSk7XG4gIH1cbiAgX2luaXRpYWxpemVGb2N1c1RyYXAoKSB7XG4gICAgcmV0dXJuIG5ldyBGb2N1c1RyYXAoe1xuICAgICAgdHJhcEVsZW1lbnQ6IHRoaXMuX2VsZW1lbnRcbiAgICB9KTtcbiAgfVxuICBfc2hvd0VsZW1lbnQocmVsYXRlZFRhcmdldCkge1xuICAgIC8vIHRyeSB0byBhcHBlbmQgZHluYW1pYyBtb2RhbFxuICAgIGlmICghZG9jdW1lbnQuYm9keS5jb250YWlucyh0aGlzLl9lbGVtZW50KSkge1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmQodGhpcy5fZWxlbWVudCk7XG4gICAgfVxuICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgdGhpcy5fZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJyk7XG4gICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtbW9kYWwnLCB0cnVlKTtcbiAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgncm9sZScsICdkaWFsb2cnKTtcbiAgICB0aGlzLl9lbGVtZW50LnNjcm9sbFRvcCA9IDA7XG4gICAgY29uc3QgbW9kYWxCb2R5ID0gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShTRUxFQ1RPUl9NT0RBTF9CT0RZLCB0aGlzLl9kaWFsb2cpO1xuICAgIGlmIChtb2RhbEJvZHkpIHtcbiAgICAgIG1vZGFsQm9keS5zY3JvbGxUb3AgPSAwO1xuICAgIH1cbiAgICByZWZsb3codGhpcy5fZWxlbWVudCk7XG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU0hPVyQ0KTtcbiAgICBjb25zdCB0cmFuc2l0aW9uQ29tcGxldGUgPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY29uZmlnLmZvY3VzKSB7XG4gICAgICAgIHRoaXMuX2ZvY3VzdHJhcC5hY3RpdmF0ZSgpO1xuICAgICAgfVxuICAgICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gZmFsc2U7XG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XTiQ0LCB7XG4gICAgICAgIHJlbGF0ZWRUYXJnZXRcbiAgICAgIH0pO1xuICAgIH07XG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayh0cmFuc2l0aW9uQ29tcGxldGUsIHRoaXMuX2RpYWxvZywgdGhpcy5faXNBbmltYXRlZCgpKTtcbiAgfVxuICBfYWRkRXZlbnRMaXN0ZW5lcnMoKSB7XG4gICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0tFWURPV05fRElTTUlTUyQxLCBldmVudCA9PiB7XG4gICAgICBpZiAoZXZlbnQua2V5ICE9PSBFU0NBUEVfS0VZJDEpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX2NvbmZpZy5rZXlib2FyZCkge1xuICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5fdHJpZ2dlckJhY2tkcm9wVHJhbnNpdGlvbigpO1xuICAgIH0pO1xuICAgIEV2ZW50SGFuZGxlci5vbih3aW5kb3csIEVWRU5UX1JFU0laRSQxLCAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5faXNTaG93biAmJiAhdGhpcy5faXNUcmFuc2l0aW9uaW5nKSB7XG4gICAgICAgIHRoaXMuX2FkanVzdERpYWxvZygpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9NT1VTRURPV05fRElTTUlTUywgZXZlbnQgPT4ge1xuICAgICAgLy8gYSBiYWQgdHJpY2sgdG8gc2VncmVnYXRlIGNsaWNrcyB0aGF0IG1heSBzdGFydCBpbnNpZGUgZGlhbG9nIGJ1dCBlbmQgb3V0c2lkZSwgYW5kIGF2b2lkIGxpc3RlbiB0byBzY3JvbGxiYXIgY2xpY2tzXG4gICAgICBFdmVudEhhbmRsZXIub25lKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0NMSUNLX0RJU01JU1MsIGV2ZW50MiA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9lbGVtZW50ICE9PSBldmVudC50YXJnZXQgfHwgdGhpcy5fZWxlbWVudCAhPT0gZXZlbnQyLnRhcmdldCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fY29uZmlnLmJhY2tkcm9wID09PSAnc3RhdGljJykge1xuICAgICAgICAgIHRoaXMuX3RyaWdnZXJCYWNrZHJvcFRyYW5zaXRpb24oKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2NvbmZpZy5iYWNrZHJvcCkge1xuICAgICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuICBfaGlkZU1vZGFsKCkge1xuICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCB0cnVlKTtcbiAgICB0aGlzLl9lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1tb2RhbCcpO1xuICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdyb2xlJyk7XG4gICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gZmFsc2U7XG4gICAgdGhpcy5fYmFja2Ryb3AuaGlkZSgoKSA9PiB7XG4gICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9PUEVOKTtcbiAgICAgIHRoaXMuX3Jlc2V0QWRqdXN0bWVudHMoKTtcbiAgICAgIHRoaXMuX3Njcm9sbEJhci5yZXNldCgpO1xuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElEREVOJDQpO1xuICAgIH0pO1xuICB9XG4gIF9pc0FuaW1hdGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0ZBREUkMyk7XG4gIH1cbiAgX3RyaWdnZXJCYWNrZHJvcFRyYW5zaXRpb24oKSB7XG4gICAgY29uc3QgaGlkZUV2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElERV9QUkVWRU5URUQkMSk7XG4gICAgaWYgKGhpZGVFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGlzTW9kYWxPdmVyZmxvd2luZyA9IHRoaXMuX2VsZW1lbnQuc2Nyb2xsSGVpZ2h0ID4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDtcbiAgICBjb25zdCBpbml0aWFsT3ZlcmZsb3dZID0gdGhpcy5fZWxlbWVudC5zdHlsZS5vdmVyZmxvd1k7XG4gICAgLy8gcmV0dXJuIGlmIHRoZSBmb2xsb3dpbmcgYmFja2dyb3VuZCB0cmFuc2l0aW9uIGhhc24ndCB5ZXQgY29tcGxldGVkXG4gICAgaWYgKGluaXRpYWxPdmVyZmxvd1kgPT09ICdoaWRkZW4nIHx8IHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfU1RBVElDKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIWlzTW9kYWxPdmVyZmxvd2luZykge1xuICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZS5vdmVyZmxvd1kgPSAnaGlkZGVuJztcbiAgICB9XG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU1RBVElDKTtcbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NUQVRJQyk7XG4gICAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZS5vdmVyZmxvd1kgPSBpbml0aWFsT3ZlcmZsb3dZO1xuICAgICAgfSwgdGhpcy5fZGlhbG9nKTtcbiAgICB9LCB0aGlzLl9kaWFsb2cpO1xuICAgIHRoaXMuX2VsZW1lbnQuZm9jdXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZm9sbG93aW5nIG1ldGhvZHMgYXJlIHVzZWQgdG8gaGFuZGxlIG92ZXJmbG93aW5nIG1vZGFsc1xuICAgKi9cblxuICBfYWRqdXN0RGlhbG9nKCkge1xuICAgIGNvbnN0IGlzTW9kYWxPdmVyZmxvd2luZyA9IHRoaXMuX2VsZW1lbnQuc2Nyb2xsSGVpZ2h0ID4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDtcbiAgICBjb25zdCBzY3JvbGxiYXJXaWR0aCA9IHRoaXMuX3Njcm9sbEJhci5nZXRXaWR0aCgpO1xuICAgIGNvbnN0IGlzQm9keU92ZXJmbG93aW5nID0gc2Nyb2xsYmFyV2lkdGggPiAwO1xuICAgIGlmIChpc0JvZHlPdmVyZmxvd2luZyAmJiAhaXNNb2RhbE92ZXJmbG93aW5nKSB7XG4gICAgICBjb25zdCBwcm9wZXJ0eSA9IGlzUlRMKCkgPyAncGFkZGluZ0xlZnQnIDogJ3BhZGRpbmdSaWdodCc7XG4gICAgICB0aGlzLl9lbGVtZW50LnN0eWxlW3Byb3BlcnR5XSA9IGAke3Njcm9sbGJhcldpZHRofXB4YDtcbiAgICB9XG4gICAgaWYgKCFpc0JvZHlPdmVyZmxvd2luZyAmJiBpc01vZGFsT3ZlcmZsb3dpbmcpIHtcbiAgICAgIGNvbnN0IHByb3BlcnR5ID0gaXNSVEwoKSA/ICdwYWRkaW5nUmlnaHQnIDogJ3BhZGRpbmdMZWZ0JztcbiAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGVbcHJvcGVydHldID0gYCR7c2Nyb2xsYmFyV2lkdGh9cHhgO1xuICAgIH1cbiAgfVxuICBfcmVzZXRBZGp1c3RtZW50cygpIHtcbiAgICB0aGlzLl9lbGVtZW50LnN0eWxlLnBhZGRpbmdMZWZ0ID0gJyc7XG4gICAgdGhpcy5fZWxlbWVudC5zdHlsZS5wYWRkaW5nUmlnaHQgPSAnJztcbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZywgcmVsYXRlZFRhcmdldCkge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGF0YSA9IE1vZGFsLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcywgY29uZmlnKTtcbiAgICAgIGlmICh0eXBlb2YgY29uZmlnICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIGRhdGFbY29uZmlnXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkIFwiJHtjb25maWd9XCJgKTtcbiAgICAgIH1cbiAgICAgIGRhdGFbY29uZmlnXShyZWxhdGVkVGFyZ2V0KTtcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIERhdGEgQVBJIGltcGxlbWVudGF0aW9uXG4gKi9cblxuRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9DTElDS19EQVRBX0FQSSQyLCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSQyLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgY29uc3QgdGFyZ2V0ID0gU2VsZWN0b3JFbmdpbmUuZ2V0RWxlbWVudEZyb21TZWxlY3Rvcih0aGlzKTtcbiAgaWYgKFsnQScsICdBUkVBJ10uaW5jbHVkZXModGhpcy50YWdOYW1lKSkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cbiAgRXZlbnRIYW5kbGVyLm9uZSh0YXJnZXQsIEVWRU5UX1NIT1ckNCwgc2hvd0V2ZW50ID0+IHtcbiAgICBpZiAoc2hvd0V2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIC8vIG9ubHkgcmVnaXN0ZXIgZm9jdXMgcmVzdG9yZXIgaWYgbW9kYWwgd2lsbCBhY3R1YWxseSBnZXQgc2hvd25cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgRXZlbnRIYW5kbGVyLm9uZSh0YXJnZXQsIEVWRU5UX0hJRERFTiQ0LCAoKSA9PiB7XG4gICAgICBpZiAoaXNWaXNpYmxlKHRoaXMpKSB7XG4gICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gYXZvaWQgY29uZmxpY3Qgd2hlbiBjbGlja2luZyBtb2RhbCB0b2dnbGVyIHdoaWxlIGFub3RoZXIgb25lIGlzIG9wZW5cbiAgY29uc3QgYWxyZWFkeU9wZW4gPSBTZWxlY3RvckVuZ2luZS5maW5kT25lKE9QRU5fU0VMRUNUT1IkMSk7XG4gIGlmIChhbHJlYWR5T3Blbikge1xuICAgIE1vZGFsLmdldEluc3RhbmNlKGFscmVhZHlPcGVuKS5oaWRlKCk7XG4gIH1cbiAgY29uc3QgZGF0YSA9IE1vZGFsLmdldE9yQ3JlYXRlSW5zdGFuY2UodGFyZ2V0KTtcbiAgZGF0YS50b2dnbGUodGhpcyk7XG59KTtcbmVuYWJsZURpc21pc3NUcmlnZ2VyKE1vZGFsKTtcblxuLyoqXG4gKiBqUXVlcnlcbiAqL1xuXG5kZWZpbmVKUXVlcnlQbHVnaW4oTW9kYWwpO1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgb2ZmY2FudmFzLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IE5BTUUkNiA9ICdvZmZjYW52YXMnO1xuY29uc3QgREFUQV9LRVkkMyA9ICdicy5vZmZjYW52YXMnO1xuY29uc3QgRVZFTlRfS0VZJDMgPSBgLiR7REFUQV9LRVkkM31gO1xuY29uc3QgREFUQV9BUElfS0VZJDEgPSAnLmRhdGEtYXBpJztcbmNvbnN0IEVWRU5UX0xPQURfREFUQV9BUEkkMiA9IGBsb2FkJHtFVkVOVF9LRVkkM30ke0RBVEFfQVBJX0tFWSQxfWA7XG5jb25zdCBFU0NBUEVfS0VZID0gJ0VzY2FwZSc7XG5jb25zdCBDTEFTU19OQU1FX1NIT1ckMyA9ICdzaG93JztcbmNvbnN0IENMQVNTX05BTUVfU0hPV0lORyQxID0gJ3Nob3dpbmcnO1xuY29uc3QgQ0xBU1NfTkFNRV9ISURJTkcgPSAnaGlkaW5nJztcbmNvbnN0IENMQVNTX05BTUVfQkFDS0RST1AgPSAnb2ZmY2FudmFzLWJhY2tkcm9wJztcbmNvbnN0IE9QRU5fU0VMRUNUT1IgPSAnLm9mZmNhbnZhcy5zaG93JztcbmNvbnN0IEVWRU5UX1NIT1ckMyA9IGBzaG93JHtFVkVOVF9LRVkkM31gO1xuY29uc3QgRVZFTlRfU0hPV04kMyA9IGBzaG93biR7RVZFTlRfS0VZJDN9YDtcbmNvbnN0IEVWRU5UX0hJREUkMyA9IGBoaWRlJHtFVkVOVF9LRVkkM31gO1xuY29uc3QgRVZFTlRfSElERV9QUkVWRU5URUQgPSBgaGlkZVByZXZlbnRlZCR7RVZFTlRfS0VZJDN9YDtcbmNvbnN0IEVWRU5UX0hJRERFTiQzID0gYGhpZGRlbiR7RVZFTlRfS0VZJDN9YDtcbmNvbnN0IEVWRU5UX1JFU0laRSA9IGByZXNpemUke0VWRU5UX0tFWSQzfWA7XG5jb25zdCBFVkVOVF9DTElDS19EQVRBX0FQSSQxID0gYGNsaWNrJHtFVkVOVF9LRVkkM30ke0RBVEFfQVBJX0tFWSQxfWA7XG5jb25zdCBFVkVOVF9LRVlET1dOX0RJU01JU1MgPSBga2V5ZG93bi5kaXNtaXNzJHtFVkVOVF9LRVkkM31gO1xuY29uc3QgU0VMRUNUT1JfREFUQV9UT0dHTEUkMSA9ICdbZGF0YS1icy10b2dnbGU9XCJvZmZjYW52YXNcIl0nO1xuY29uc3QgRGVmYXVsdCQ1ID0ge1xuICBiYWNrZHJvcDogdHJ1ZSxcbiAga2V5Ym9hcmQ6IHRydWUsXG4gIHNjcm9sbDogZmFsc2Vcbn07XG5jb25zdCBEZWZhdWx0VHlwZSQ1ID0ge1xuICBiYWNrZHJvcDogJyhib29sZWFufHN0cmluZyknLFxuICBrZXlib2FyZDogJ2Jvb2xlYW4nLFxuICBzY3JvbGw6ICdib29sZWFuJ1xufTtcblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgT2ZmY2FudmFzIGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIGNvbmZpZykge1xuICAgIHN1cGVyKGVsZW1lbnQsIGNvbmZpZyk7XG4gICAgdGhpcy5faXNTaG93biA9IGZhbHNlO1xuICAgIHRoaXMuX2JhY2tkcm9wID0gdGhpcy5faW5pdGlhbGl6ZUJhY2tEcm9wKCk7XG4gICAgdGhpcy5fZm9jdXN0cmFwID0gdGhpcy5faW5pdGlhbGl6ZUZvY3VzVHJhcCgpO1xuICAgIHRoaXMuX2FkZEV2ZW50TGlzdGVuZXJzKCk7XG4gIH1cblxuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4gRGVmYXVsdCQ1O1xuICB9XG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRUeXBlJDU7XG4gIH1cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FJDY7XG4gIH1cblxuICAvLyBQdWJsaWNcbiAgdG9nZ2xlKHJlbGF0ZWRUYXJnZXQpIHtcbiAgICByZXR1cm4gdGhpcy5faXNTaG93biA/IHRoaXMuaGlkZSgpIDogdGhpcy5zaG93KHJlbGF0ZWRUYXJnZXQpO1xuICB9XG4gIHNob3cocmVsYXRlZFRhcmdldCkge1xuICAgIGlmICh0aGlzLl9pc1Nob3duKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHNob3dFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1ckMywge1xuICAgICAgcmVsYXRlZFRhcmdldFxuICAgIH0pO1xuICAgIGlmIChzaG93RXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9pc1Nob3duID0gdHJ1ZTtcbiAgICB0aGlzLl9iYWNrZHJvcC5zaG93KCk7XG4gICAgaWYgKCF0aGlzLl9jb25maWcuc2Nyb2xsKSB7XG4gICAgICBuZXcgU2Nyb2xsQmFySGVscGVyKCkuaGlkZSgpO1xuICAgIH1cbiAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1tb2RhbCcsIHRydWUpO1xuICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdyb2xlJywgJ2RpYWxvZycpO1xuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1NIT1dJTkckMSk7XG4gICAgY29uc3QgY29tcGxldGVDYWxsQmFjayA9ICgpID0+IHtcbiAgICAgIGlmICghdGhpcy5fY29uZmlnLnNjcm9sbCB8fCB0aGlzLl9jb25maWcuYmFja2Ryb3ApIHtcbiAgICAgICAgdGhpcy5fZm9jdXN0cmFwLmFjdGl2YXRlKCk7XG4gICAgICB9XG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9TSE9XJDMpO1xuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPV0lORyQxKTtcbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1dOJDMsIHtcbiAgICAgICAgcmVsYXRlZFRhcmdldFxuICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKGNvbXBsZXRlQ2FsbEJhY2ssIHRoaXMuX2VsZW1lbnQsIHRydWUpO1xuICB9XG4gIGhpZGUoKSB7XG4gICAgaWYgKCF0aGlzLl9pc1Nob3duKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGhpZGVFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJREUkMyk7XG4gICAgaWYgKGhpZGVFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2ZvY3VzdHJhcC5kZWFjdGl2YXRlKCk7XG4gICAgdGhpcy5fZWxlbWVudC5ibHVyKCk7XG4gICAgdGhpcy5faXNTaG93biA9IGZhbHNlO1xuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0hJRElORyk7XG4gICAgdGhpcy5fYmFja2Ryb3AuaGlkZSgpO1xuICAgIGNvbnN0IGNvbXBsZXRlQ2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TSE9XJDMsIENMQVNTX05BTUVfSElESU5HKTtcbiAgICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdhcmlhLW1vZGFsJyk7XG4gICAgICB0aGlzLl9lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgncm9sZScpO1xuICAgICAgaWYgKCF0aGlzLl9jb25maWcuc2Nyb2xsKSB7XG4gICAgICAgIG5ldyBTY3JvbGxCYXJIZWxwZXIoKS5yZXNldCgpO1xuICAgICAgfVxuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElEREVOJDMpO1xuICAgIH07XG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayhjb21wbGV0ZUNhbGxiYWNrLCB0aGlzLl9lbGVtZW50LCB0cnVlKTtcbiAgfVxuICBkaXNwb3NlKCkge1xuICAgIHRoaXMuX2JhY2tkcm9wLmRpc3Bvc2UoKTtcbiAgICB0aGlzLl9mb2N1c3RyYXAuZGVhY3RpdmF0ZSgpO1xuICAgIHN1cGVyLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX2luaXRpYWxpemVCYWNrRHJvcCgpIHtcbiAgICBjb25zdCBjbGlja0NhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2NvbmZpZy5iYWNrZHJvcCA9PT0gJ3N0YXRpYycpIHtcbiAgICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElERV9QUkVWRU5URUQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmhpZGUoKTtcbiAgICB9O1xuXG4gICAgLy8gJ3N0YXRpYycgb3B0aW9uIHdpbGwgYmUgdHJhbnNsYXRlZCB0byB0cnVlLCBhbmQgYm9vbGVhbnMgd2lsbCBrZWVwIHRoZWlyIHZhbHVlXG4gICAgY29uc3QgaXNWaXNpYmxlID0gQm9vbGVhbih0aGlzLl9jb25maWcuYmFja2Ryb3ApO1xuICAgIHJldHVybiBuZXcgQmFja2Ryb3Aoe1xuICAgICAgY2xhc3NOYW1lOiBDTEFTU19OQU1FX0JBQ0tEUk9QLFxuICAgICAgaXNWaXNpYmxlLFxuICAgICAgaXNBbmltYXRlZDogdHJ1ZSxcbiAgICAgIHJvb3RFbGVtZW50OiB0aGlzLl9lbGVtZW50LnBhcmVudE5vZGUsXG4gICAgICBjbGlja0NhbGxiYWNrOiBpc1Zpc2libGUgPyBjbGlja0NhbGxiYWNrIDogbnVsbFxuICAgIH0pO1xuICB9XG4gIF9pbml0aWFsaXplRm9jdXNUcmFwKCkge1xuICAgIHJldHVybiBuZXcgRm9jdXNUcmFwKHtcbiAgICAgIHRyYXBFbGVtZW50OiB0aGlzLl9lbGVtZW50XG4gICAgfSk7XG4gIH1cbiAgX2FkZEV2ZW50TGlzdGVuZXJzKCkge1xuICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9LRVlET1dOX0RJU01JU1MsIGV2ZW50ID0+IHtcbiAgICAgIGlmIChldmVudC5rZXkgIT09IEVTQ0FQRV9LRVkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX2NvbmZpZy5rZXlib2FyZCkge1xuICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElERV9QUkVWRU5URUQpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gU3RhdGljXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0gT2ZmY2FudmFzLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcywgY29uZmlnKTtcbiAgICAgIGlmICh0eXBlb2YgY29uZmlnICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoZGF0YVtjb25maWddID09PSB1bmRlZmluZWQgfHwgY29uZmlnLnN0YXJ0c1dpdGgoJ18nKSB8fCBjb25maWcgPT09ICdjb25zdHJ1Y3RvcicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkIFwiJHtjb25maWd9XCJgKTtcbiAgICAgIH1cbiAgICAgIGRhdGFbY29uZmlnXSh0aGlzKTtcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIERhdGEgQVBJIGltcGxlbWVudGF0aW9uXG4gKi9cblxuRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9DTElDS19EQVRBX0FQSSQxLCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSQxLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgY29uc3QgdGFyZ2V0ID0gU2VsZWN0b3JFbmdpbmUuZ2V0RWxlbWVudEZyb21TZWxlY3Rvcih0aGlzKTtcbiAgaWYgKFsnQScsICdBUkVBJ10uaW5jbHVkZXModGhpcy50YWdOYW1lKSkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cbiAgaWYgKGlzRGlzYWJsZWQodGhpcykpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgRXZlbnRIYW5kbGVyLm9uZSh0YXJnZXQsIEVWRU5UX0hJRERFTiQzLCAoKSA9PiB7XG4gICAgLy8gZm9jdXMgb24gdHJpZ2dlciB3aGVuIGl0IGlzIGNsb3NlZFxuICAgIGlmIChpc1Zpc2libGUodGhpcykpIHtcbiAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIGF2b2lkIGNvbmZsaWN0IHdoZW4gY2xpY2tpbmcgYSB0b2dnbGVyIG9mIGFuIG9mZmNhbnZhcywgd2hpbGUgYW5vdGhlciBpcyBvcGVuXG4gIGNvbnN0IGFscmVhZHlPcGVuID0gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShPUEVOX1NFTEVDVE9SKTtcbiAgaWYgKGFscmVhZHlPcGVuICYmIGFscmVhZHlPcGVuICE9PSB0YXJnZXQpIHtcbiAgICBPZmZjYW52YXMuZ2V0SW5zdGFuY2UoYWxyZWFkeU9wZW4pLmhpZGUoKTtcbiAgfVxuICBjb25zdCBkYXRhID0gT2ZmY2FudmFzLmdldE9yQ3JlYXRlSW5zdGFuY2UodGFyZ2V0KTtcbiAgZGF0YS50b2dnbGUodGhpcyk7XG59KTtcbkV2ZW50SGFuZGxlci5vbih3aW5kb3csIEVWRU5UX0xPQURfREFUQV9BUEkkMiwgKCkgPT4ge1xuICBmb3IgKGNvbnN0IHNlbGVjdG9yIG9mIFNlbGVjdG9yRW5naW5lLmZpbmQoT1BFTl9TRUxFQ1RPUikpIHtcbiAgICBPZmZjYW52YXMuZ2V0T3JDcmVhdGVJbnN0YW5jZShzZWxlY3Rvcikuc2hvdygpO1xuICB9XG59KTtcbkV2ZW50SGFuZGxlci5vbih3aW5kb3csIEVWRU5UX1JFU0laRSwgKCkgPT4ge1xuICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgU2VsZWN0b3JFbmdpbmUuZmluZCgnW2FyaWEtbW9kYWxdW2NsYXNzKj1zaG93XVtjbGFzcyo9b2ZmY2FudmFzLV0nKSkge1xuICAgIGlmIChnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLnBvc2l0aW9uICE9PSAnZml4ZWQnKSB7XG4gICAgICBPZmZjYW52YXMuZ2V0T3JDcmVhdGVJbnN0YW5jZShlbGVtZW50KS5oaWRlKCk7XG4gICAgfVxuICB9XG59KTtcbmVuYWJsZURpc21pc3NUcmlnZ2VyKE9mZmNhbnZhcyk7XG5cbi8qKlxuICogalF1ZXJ5XG4gKi9cblxuZGVmaW5lSlF1ZXJ5UGx1Z2luKE9mZmNhbnZhcyk7XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCB1dGlsL3Nhbml0aXplci5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbi8vIGpzLWRvY3Mtc3RhcnQgYWxsb3ctbGlzdFxuY29uc3QgQVJJQV9BVFRSSUJVVEVfUEFUVEVSTiA9IC9eYXJpYS1bXFx3LV0qJC9pO1xuY29uc3QgRGVmYXVsdEFsbG93bGlzdCA9IHtcbiAgLy8gR2xvYmFsIGF0dHJpYnV0ZXMgYWxsb3dlZCBvbiBhbnkgc3VwcGxpZWQgZWxlbWVudCBiZWxvdy5cbiAgJyonOiBbJ2NsYXNzJywgJ2RpcicsICdpZCcsICdsYW5nJywgJ3JvbGUnLCBBUklBX0FUVFJJQlVURV9QQVRURVJOXSxcbiAgYTogWyd0YXJnZXQnLCAnaHJlZicsICd0aXRsZScsICdyZWwnXSxcbiAgYXJlYTogW10sXG4gIGI6IFtdLFxuICBicjogW10sXG4gIGNvbDogW10sXG4gIGNvZGU6IFtdLFxuICBkZDogW10sXG4gIGRpdjogW10sXG4gIGRsOiBbXSxcbiAgZHQ6IFtdLFxuICBlbTogW10sXG4gIGhyOiBbXSxcbiAgaDE6IFtdLFxuICBoMjogW10sXG4gIGgzOiBbXSxcbiAgaDQ6IFtdLFxuICBoNTogW10sXG4gIGg2OiBbXSxcbiAgaTogW10sXG4gIGltZzogWydzcmMnLCAnc3Jjc2V0JywgJ2FsdCcsICd0aXRsZScsICd3aWR0aCcsICdoZWlnaHQnXSxcbiAgbGk6IFtdLFxuICBvbDogW10sXG4gIHA6IFtdLFxuICBwcmU6IFtdLFxuICBzOiBbXSxcbiAgc21hbGw6IFtdLFxuICBzcGFuOiBbXSxcbiAgc3ViOiBbXSxcbiAgc3VwOiBbXSxcbiAgc3Ryb25nOiBbXSxcbiAgdTogW10sXG4gIHVsOiBbXVxufTtcbi8vIGpzLWRvY3MtZW5kIGFsbG93LWxpc3RcblxuY29uc3QgdXJpQXR0cmlidXRlcyA9IG5ldyBTZXQoWydiYWNrZ3JvdW5kJywgJ2NpdGUnLCAnaHJlZicsICdpdGVtdHlwZScsICdsb25nZGVzYycsICdwb3N0ZXInLCAnc3JjJywgJ3hsaW5rOmhyZWYnXSk7XG5cbi8qKlxuICogQSBwYXR0ZXJuIHRoYXQgcmVjb2duaXplcyBVUkxzIHRoYXQgYXJlIHNhZmUgd3J0LiBYU1MgaW4gVVJMIG5hdmlnYXRpb25cbiAqIGNvbnRleHRzLlxuICpcbiAqIFNob3V0LW91dCB0byBBbmd1bGFyIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvYmxvYi8xNS4yLjgvcGFja2FnZXMvY29yZS9zcmMvc2FuaXRpemF0aW9uL3VybF9zYW5pdGl6ZXIudHMjTDM4XG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL2JldHRlci1yZWdleFxuY29uc3QgU0FGRV9VUkxfUEFUVEVSTiA9IC9eKD8hamF2YXNjcmlwdDopKD86W2EtejAtOSsuLV0rOnxbXiY6Lz8jXSooPzpbLz8jXXwkKSkvaTtcbmNvbnN0IGFsbG93ZWRBdHRyaWJ1dGUgPSAoYXR0cmlidXRlLCBhbGxvd2VkQXR0cmlidXRlTGlzdCkgPT4ge1xuICBjb25zdCBhdHRyaWJ1dGVOYW1lID0gYXR0cmlidXRlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gIGlmIChhbGxvd2VkQXR0cmlidXRlTGlzdC5pbmNsdWRlcyhhdHRyaWJ1dGVOYW1lKSkge1xuICAgIGlmICh1cmlBdHRyaWJ1dGVzLmhhcyhhdHRyaWJ1dGVOYW1lKSkge1xuICAgICAgcmV0dXJuIEJvb2xlYW4oU0FGRV9VUkxfUEFUVEVSTi50ZXN0KGF0dHJpYnV0ZS5ub2RlVmFsdWUpKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBDaGVjayBpZiBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB2YWxpZGF0ZXMgdGhlIGF0dHJpYnV0ZS5cbiAgcmV0dXJuIGFsbG93ZWRBdHRyaWJ1dGVMaXN0LmZpbHRlcihhdHRyaWJ1dGVSZWdleCA9PiBhdHRyaWJ1dGVSZWdleCBpbnN0YW5jZW9mIFJlZ0V4cCkuc29tZShyZWdleCA9PiByZWdleC50ZXN0KGF0dHJpYnV0ZU5hbWUpKTtcbn07XG5mdW5jdGlvbiBzYW5pdGl6ZUh0bWwodW5zYWZlSHRtbCwgYWxsb3dMaXN0LCBzYW5pdGl6ZUZ1bmN0aW9uKSB7XG4gIGlmICghdW5zYWZlSHRtbC5sZW5ndGgpIHtcbiAgICByZXR1cm4gdW5zYWZlSHRtbDtcbiAgfVxuICBpZiAoc2FuaXRpemVGdW5jdGlvbiAmJiB0eXBlb2Ygc2FuaXRpemVGdW5jdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBzYW5pdGl6ZUZ1bmN0aW9uKHVuc2FmZUh0bWwpO1xuICB9XG4gIGNvbnN0IGRvbVBhcnNlciA9IG5ldyB3aW5kb3cuRE9NUGFyc2VyKCk7XG4gIGNvbnN0IGNyZWF0ZWREb2N1bWVudCA9IGRvbVBhcnNlci5wYXJzZUZyb21TdHJpbmcodW5zYWZlSHRtbCwgJ3RleHQvaHRtbCcpO1xuICBjb25zdCBlbGVtZW50cyA9IFtdLmNvbmNhdCguLi5jcmVhdGVkRG9jdW1lbnQuYm9keS5xdWVyeVNlbGVjdG9yQWxsKCcqJykpO1xuICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgZWxlbWVudHMpIHtcbiAgICBjb25zdCBlbGVtZW50TmFtZSA9IGVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoIU9iamVjdC5rZXlzKGFsbG93TGlzdCkuaW5jbHVkZXMoZWxlbWVudE5hbWUpKSB7XG4gICAgICBlbGVtZW50LnJlbW92ZSgpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IGF0dHJpYnV0ZUxpc3QgPSBbXS5jb25jYXQoLi4uZWxlbWVudC5hdHRyaWJ1dGVzKTtcbiAgICBjb25zdCBhbGxvd2VkQXR0cmlidXRlcyA9IFtdLmNvbmNhdChhbGxvd0xpc3RbJyonXSB8fCBbXSwgYWxsb3dMaXN0W2VsZW1lbnROYW1lXSB8fCBbXSk7XG4gICAgZm9yIChjb25zdCBhdHRyaWJ1dGUgb2YgYXR0cmlidXRlTGlzdCkge1xuICAgICAgaWYgKCFhbGxvd2VkQXR0cmlidXRlKGF0dHJpYnV0ZSwgYWxsb3dlZEF0dHJpYnV0ZXMpKSB7XG4gICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGF0dHJpYnV0ZS5ub2RlTmFtZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBjcmVhdGVkRG9jdW1lbnQuYm9keS5pbm5lckhUTUw7XG59XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCB1dGlsL3RlbXBsYXRlLWZhY3RvcnkuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSQ1ID0gJ1RlbXBsYXRlRmFjdG9yeSc7XG5jb25zdCBEZWZhdWx0JDQgPSB7XG4gIGFsbG93TGlzdDogRGVmYXVsdEFsbG93bGlzdCxcbiAgY29udGVudDoge30sXG4gIC8vIHsgc2VsZWN0b3IgOiB0ZXh0ICwgIHNlbGVjdG9yMiA6IHRleHQyICwgfVxuICBleHRyYUNsYXNzOiAnJyxcbiAgaHRtbDogZmFsc2UsXG4gIHNhbml0aXplOiB0cnVlLFxuICBzYW5pdGl6ZUZuOiBudWxsLFxuICB0ZW1wbGF0ZTogJzxkaXY+PC9kaXY+J1xufTtcbmNvbnN0IERlZmF1bHRUeXBlJDQgPSB7XG4gIGFsbG93TGlzdDogJ29iamVjdCcsXG4gIGNvbnRlbnQ6ICdvYmplY3QnLFxuICBleHRyYUNsYXNzOiAnKHN0cmluZ3xmdW5jdGlvbiknLFxuICBodG1sOiAnYm9vbGVhbicsXG4gIHNhbml0aXplOiAnYm9vbGVhbicsXG4gIHNhbml0aXplRm46ICcobnVsbHxmdW5jdGlvbiknLFxuICB0ZW1wbGF0ZTogJ3N0cmluZydcbn07XG5jb25zdCBEZWZhdWx0Q29udGVudFR5cGUgPSB7XG4gIGVudHJ5OiAnKHN0cmluZ3xlbGVtZW50fGZ1bmN0aW9ufG51bGwpJyxcbiAgc2VsZWN0b3I6ICcoc3RyaW5nfGVsZW1lbnQpJ1xufTtcblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgVGVtcGxhdGVGYWN0b3J5IGV4dGVuZHMgQ29uZmlnIHtcbiAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9jb25maWcgPSB0aGlzLl9nZXRDb25maWcoY29uZmlnKTtcbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0JDQ7XG4gIH1cbiAgc3RhdGljIGdldCBEZWZhdWx0VHlwZSgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFR5cGUkNDtcbiAgfVxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUUkNTtcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICBnZXRDb250ZW50KCkge1xuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuX2NvbmZpZy5jb250ZW50KS5tYXAoY29uZmlnID0+IHRoaXMuX3Jlc29sdmVQb3NzaWJsZUZ1bmN0aW9uKGNvbmZpZykpLmZpbHRlcihCb29sZWFuKTtcbiAgfVxuICBoYXNDb250ZW50KCkge1xuICAgIHJldHVybiB0aGlzLmdldENvbnRlbnQoKS5sZW5ndGggPiAwO1xuICB9XG4gIGNoYW5nZUNvbnRlbnQoY29udGVudCkge1xuICAgIHRoaXMuX2NoZWNrQ29udGVudChjb250ZW50KTtcbiAgICB0aGlzLl9jb25maWcuY29udGVudCA9IHtcbiAgICAgIC4uLnRoaXMuX2NvbmZpZy5jb250ZW50LFxuICAgICAgLi4uY29udGVudFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgdG9IdG1sKCkge1xuICAgIGNvbnN0IHRlbXBsYXRlV3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIHRlbXBsYXRlV3JhcHBlci5pbm5lckhUTUwgPSB0aGlzLl9tYXliZVNhbml0aXplKHRoaXMuX2NvbmZpZy50ZW1wbGF0ZSk7XG4gICAgZm9yIChjb25zdCBbc2VsZWN0b3IsIHRleHRdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuX2NvbmZpZy5jb250ZW50KSkge1xuICAgICAgdGhpcy5fc2V0Q29udGVudCh0ZW1wbGF0ZVdyYXBwZXIsIHRleHQsIHNlbGVjdG9yKTtcbiAgICB9XG4gICAgY29uc3QgdGVtcGxhdGUgPSB0ZW1wbGF0ZVdyYXBwZXIuY2hpbGRyZW5bMF07XG4gICAgY29uc3QgZXh0cmFDbGFzcyA9IHRoaXMuX3Jlc29sdmVQb3NzaWJsZUZ1bmN0aW9uKHRoaXMuX2NvbmZpZy5leHRyYUNsYXNzKTtcbiAgICBpZiAoZXh0cmFDbGFzcykge1xuICAgICAgdGVtcGxhdGUuY2xhc3NMaXN0LmFkZCguLi5leHRyYUNsYXNzLnNwbGl0KCcgJykpO1xuICAgIH1cbiAgICByZXR1cm4gdGVtcGxhdGU7XG4gIH1cblxuICAvLyBQcml2YXRlXG4gIF90eXBlQ2hlY2tDb25maWcoY29uZmlnKSB7XG4gICAgc3VwZXIuX3R5cGVDaGVja0NvbmZpZyhjb25maWcpO1xuICAgIHRoaXMuX2NoZWNrQ29udGVudChjb25maWcuY29udGVudCk7XG4gIH1cbiAgX2NoZWNrQ29udGVudChhcmcpIHtcbiAgICBmb3IgKGNvbnN0IFtzZWxlY3RvciwgY29udGVudF0gb2YgT2JqZWN0LmVudHJpZXMoYXJnKSkge1xuICAgICAgc3VwZXIuX3R5cGVDaGVja0NvbmZpZyh7XG4gICAgICAgIHNlbGVjdG9yLFxuICAgICAgICBlbnRyeTogY29udGVudFxuICAgICAgfSwgRGVmYXVsdENvbnRlbnRUeXBlKTtcbiAgICB9XG4gIH1cbiAgX3NldENvbnRlbnQodGVtcGxhdGUsIGNvbnRlbnQsIHNlbGVjdG9yKSB7XG4gICAgY29uc3QgdGVtcGxhdGVFbGVtZW50ID0gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShzZWxlY3RvciwgdGVtcGxhdGUpO1xuICAgIGlmICghdGVtcGxhdGVFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnRlbnQgPSB0aGlzLl9yZXNvbHZlUG9zc2libGVGdW5jdGlvbihjb250ZW50KTtcbiAgICBpZiAoIWNvbnRlbnQpIHtcbiAgICAgIHRlbXBsYXRlRWxlbWVudC5yZW1vdmUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGlzRWxlbWVudChjb250ZW50KSkge1xuICAgICAgdGhpcy5fcHV0RWxlbWVudEluVGVtcGxhdGUoZ2V0RWxlbWVudChjb250ZW50KSwgdGVtcGxhdGVFbGVtZW50KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2NvbmZpZy5odG1sKSB7XG4gICAgICB0ZW1wbGF0ZUVsZW1lbnQuaW5uZXJIVE1MID0gdGhpcy5fbWF5YmVTYW5pdGl6ZShjb250ZW50KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGVtcGxhdGVFbGVtZW50LnRleHRDb250ZW50ID0gY29udGVudDtcbiAgfVxuICBfbWF5YmVTYW5pdGl6ZShhcmcpIHtcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnLnNhbml0aXplID8gc2FuaXRpemVIdG1sKGFyZywgdGhpcy5fY29uZmlnLmFsbG93TGlzdCwgdGhpcy5fY29uZmlnLnNhbml0aXplRm4pIDogYXJnO1xuICB9XG4gIF9yZXNvbHZlUG9zc2libGVGdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4gZXhlY3V0ZShhcmcsIFt0aGlzXSk7XG4gIH1cbiAgX3B1dEVsZW1lbnRJblRlbXBsYXRlKGVsZW1lbnQsIHRlbXBsYXRlRWxlbWVudCkge1xuICAgIGlmICh0aGlzLl9jb25maWcuaHRtbCkge1xuICAgICAgdGVtcGxhdGVFbGVtZW50LmlubmVySFRNTCA9ICcnO1xuICAgICAgdGVtcGxhdGVFbGVtZW50LmFwcGVuZChlbGVtZW50KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGVtcGxhdGVFbGVtZW50LnRleHRDb250ZW50ID0gZWxlbWVudC50ZXh0Q29udGVudDtcbiAgfVxufVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgdG9vbHRpcC5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FJDQgPSAndG9vbHRpcCc7XG5jb25zdCBESVNBTExPV0VEX0FUVFJJQlVURVMgPSBuZXcgU2V0KFsnc2FuaXRpemUnLCAnYWxsb3dMaXN0JywgJ3Nhbml0aXplRm4nXSk7XG5jb25zdCBDTEFTU19OQU1FX0ZBREUkMiA9ICdmYWRlJztcbmNvbnN0IENMQVNTX05BTUVfTU9EQUwgPSAnbW9kYWwnO1xuY29uc3QgQ0xBU1NfTkFNRV9TSE9XJDIgPSAnc2hvdyc7XG5jb25zdCBTRUxFQ1RPUl9UT09MVElQX0lOTkVSID0gJy50b29sdGlwLWlubmVyJztcbmNvbnN0IFNFTEVDVE9SX01PREFMID0gYC4ke0NMQVNTX05BTUVfTU9EQUx9YDtcbmNvbnN0IEVWRU5UX01PREFMX0hJREUgPSAnaGlkZS5icy5tb2RhbCc7XG5jb25zdCBUUklHR0VSX0hPVkVSID0gJ2hvdmVyJztcbmNvbnN0IFRSSUdHRVJfRk9DVVMgPSAnZm9jdXMnO1xuY29uc3QgVFJJR0dFUl9DTElDSyA9ICdjbGljayc7XG5jb25zdCBUUklHR0VSX01BTlVBTCA9ICdtYW51YWwnO1xuY29uc3QgRVZFTlRfSElERSQyID0gJ2hpZGUnO1xuY29uc3QgRVZFTlRfSElEREVOJDIgPSAnaGlkZGVuJztcbmNvbnN0IEVWRU5UX1NIT1ckMiA9ICdzaG93JztcbmNvbnN0IEVWRU5UX1NIT1dOJDIgPSAnc2hvd24nO1xuY29uc3QgRVZFTlRfSU5TRVJURUQgPSAnaW5zZXJ0ZWQnO1xuY29uc3QgRVZFTlRfQ0xJQ0skMSA9ICdjbGljayc7XG5jb25zdCBFVkVOVF9GT0NVU0lOJDEgPSAnZm9jdXNpbic7XG5jb25zdCBFVkVOVF9GT0NVU09VVCQxID0gJ2ZvY3Vzb3V0JztcbmNvbnN0IEVWRU5UX01PVVNFRU5URVIgPSAnbW91c2VlbnRlcic7XG5jb25zdCBFVkVOVF9NT1VTRUxFQVZFID0gJ21vdXNlbGVhdmUnO1xuY29uc3QgQXR0YWNobWVudE1hcCA9IHtcbiAgQVVUTzogJ2F1dG8nLFxuICBUT1A6ICd0b3AnLFxuICBSSUdIVDogaXNSVEwoKSA/ICdsZWZ0JyA6ICdyaWdodCcsXG4gIEJPVFRPTTogJ2JvdHRvbScsXG4gIExFRlQ6IGlzUlRMKCkgPyAncmlnaHQnIDogJ2xlZnQnXG59O1xuY29uc3QgRGVmYXVsdCQzID0ge1xuICBhbGxvd0xpc3Q6IERlZmF1bHRBbGxvd2xpc3QsXG4gIGFuaW1hdGlvbjogdHJ1ZSxcbiAgYm91bmRhcnk6ICdjbGlwcGluZ1BhcmVudHMnLFxuICBjb250YWluZXI6IGZhbHNlLFxuICBjdXN0b21DbGFzczogJycsXG4gIGRlbGF5OiAwLFxuICBmYWxsYmFja1BsYWNlbWVudHM6IFsndG9wJywgJ3JpZ2h0JywgJ2JvdHRvbScsICdsZWZ0J10sXG4gIGh0bWw6IGZhbHNlLFxuICBvZmZzZXQ6IFswLCA2XSxcbiAgcGxhY2VtZW50OiAndG9wJyxcbiAgcG9wcGVyQ29uZmlnOiBudWxsLFxuICBzYW5pdGl6ZTogdHJ1ZSxcbiAgc2FuaXRpemVGbjogbnVsbCxcbiAgc2VsZWN0b3I6IGZhbHNlLFxuICB0ZW1wbGF0ZTogJzxkaXYgY2xhc3M9XCJ0b29sdGlwXCIgcm9sZT1cInRvb2x0aXBcIj4nICsgJzxkaXYgY2xhc3M9XCJ0b29sdGlwLWFycm93XCI+PC9kaXY+JyArICc8ZGl2IGNsYXNzPVwidG9vbHRpcC1pbm5lclwiPjwvZGl2PicgKyAnPC9kaXY+JyxcbiAgdGl0bGU6ICcnLFxuICB0cmlnZ2VyOiAnaG92ZXIgZm9jdXMnXG59O1xuY29uc3QgRGVmYXVsdFR5cGUkMyA9IHtcbiAgYWxsb3dMaXN0OiAnb2JqZWN0JyxcbiAgYW5pbWF0aW9uOiAnYm9vbGVhbicsXG4gIGJvdW5kYXJ5OiAnKHN0cmluZ3xlbGVtZW50KScsXG4gIGNvbnRhaW5lcjogJyhzdHJpbmd8ZWxlbWVudHxib29sZWFuKScsXG4gIGN1c3RvbUNsYXNzOiAnKHN0cmluZ3xmdW5jdGlvbiknLFxuICBkZWxheTogJyhudW1iZXJ8b2JqZWN0KScsXG4gIGZhbGxiYWNrUGxhY2VtZW50czogJ2FycmF5JyxcbiAgaHRtbDogJ2Jvb2xlYW4nLFxuICBvZmZzZXQ6ICcoYXJyYXl8c3RyaW5nfGZ1bmN0aW9uKScsXG4gIHBsYWNlbWVudDogJyhzdHJpbmd8ZnVuY3Rpb24pJyxcbiAgcG9wcGVyQ29uZmlnOiAnKG51bGx8b2JqZWN0fGZ1bmN0aW9uKScsXG4gIHNhbml0aXplOiAnYm9vbGVhbicsXG4gIHNhbml0aXplRm46ICcobnVsbHxmdW5jdGlvbiknLFxuICBzZWxlY3RvcjogJyhzdHJpbmd8Ym9vbGVhbiknLFxuICB0ZW1wbGF0ZTogJ3N0cmluZycsXG4gIHRpdGxlOiAnKHN0cmluZ3xlbGVtZW50fGZ1bmN0aW9uKScsXG4gIHRyaWdnZXI6ICdzdHJpbmcnXG59O1xuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBUb29sdGlwIGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIGNvbmZpZykge1xuICAgIGlmICh0eXBlb2YgUG9wcGVyID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQm9vdHN0cmFwXFwncyB0b29sdGlwcyByZXF1aXJlIFBvcHBlciAoaHR0cHM6Ly9wb3BwZXIuanMub3JnKScpO1xuICAgIH1cbiAgICBzdXBlcihlbGVtZW50LCBjb25maWcpO1xuXG4gICAgLy8gUHJpdmF0ZVxuICAgIHRoaXMuX2lzRW5hYmxlZCA9IHRydWU7XG4gICAgdGhpcy5fdGltZW91dCA9IDA7XG4gICAgdGhpcy5faXNIb3ZlcmVkID0gbnVsbDtcbiAgICB0aGlzLl9hY3RpdmVUcmlnZ2VyID0ge307XG4gICAgdGhpcy5fcG9wcGVyID0gbnVsbDtcbiAgICB0aGlzLl90ZW1wbGF0ZUZhY3RvcnkgPSBudWxsO1xuICAgIHRoaXMuX25ld0NvbnRlbnQgPSBudWxsO1xuXG4gICAgLy8gUHJvdGVjdGVkXG4gICAgdGhpcy50aXAgPSBudWxsO1xuICAgIHRoaXMuX3NldExpc3RlbmVycygpO1xuICAgIGlmICghdGhpcy5fY29uZmlnLnNlbGVjdG9yKSB7XG4gICAgICB0aGlzLl9maXhUaXRsZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0JDM7XG4gIH1cbiAgc3RhdGljIGdldCBEZWZhdWx0VHlwZSgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFR5cGUkMztcbiAgfVxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUUkNDtcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICBlbmFibGUoKSB7XG4gICAgdGhpcy5faXNFbmFibGVkID0gdHJ1ZTtcbiAgfVxuICBkaXNhYmxlKCkge1xuICAgIHRoaXMuX2lzRW5hYmxlZCA9IGZhbHNlO1xuICB9XG4gIHRvZ2dsZUVuYWJsZWQoKSB7XG4gICAgdGhpcy5faXNFbmFibGVkID0gIXRoaXMuX2lzRW5hYmxlZDtcbiAgfVxuICB0b2dnbGUoKSB7XG4gICAgaWYgKCF0aGlzLl9pc0VuYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fYWN0aXZlVHJpZ2dlci5jbGljayA9ICF0aGlzLl9hY3RpdmVUcmlnZ2VyLmNsaWNrO1xuICAgIGlmICh0aGlzLl9pc1Nob3duKCkpIHtcbiAgICAgIHRoaXMuX2xlYXZlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2VudGVyKCk7XG4gIH1cbiAgZGlzcG9zZSgpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dCk7XG4gICAgRXZlbnRIYW5kbGVyLm9mZih0aGlzLl9lbGVtZW50LmNsb3Nlc3QoU0VMRUNUT1JfTU9EQUwpLCBFVkVOVF9NT0RBTF9ISURFLCB0aGlzLl9oaWRlTW9kYWxIYW5kbGVyKTtcbiAgICBpZiAodGhpcy5fZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtYnMtb3JpZ2luYWwtdGl0bGUnKSkge1xuICAgICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3RpdGxlJywgdGhpcy5fZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtYnMtb3JpZ2luYWwtdGl0bGUnKSk7XG4gICAgfVxuICAgIHRoaXMuX2Rpc3Bvc2VQb3BwZXIoKTtcbiAgICBzdXBlci5kaXNwb3NlKCk7XG4gIH1cbiAgc2hvdygpIHtcbiAgICBpZiAodGhpcy5fZWxlbWVudC5zdHlsZS5kaXNwbGF5ID09PSAnbm9uZScpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGxlYXNlIHVzZSBzaG93IG9uIHZpc2libGUgZWxlbWVudHMnKTtcbiAgICB9XG4gICAgaWYgKCEodGhpcy5faXNXaXRoQ29udGVudCgpICYmIHRoaXMuX2lzRW5hYmxlZCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc2hvd0V2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgdGhpcy5jb25zdHJ1Y3Rvci5ldmVudE5hbWUoRVZFTlRfU0hPVyQyKSk7XG4gICAgY29uc3Qgc2hhZG93Um9vdCA9IGZpbmRTaGFkb3dSb290KHRoaXMuX2VsZW1lbnQpO1xuICAgIGNvbnN0IGlzSW5UaGVEb20gPSAoc2hhZG93Um9vdCB8fCB0aGlzLl9lbGVtZW50Lm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5jb250YWlucyh0aGlzLl9lbGVtZW50KTtcbiAgICBpZiAoc2hvd0V2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgfHwgIWlzSW5UaGVEb20pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBUT0RPOiB2NiByZW1vdmUgdGhpcyBvciBtYWtlIGl0IG9wdGlvbmFsXG4gICAgdGhpcy5fZGlzcG9zZVBvcHBlcigpO1xuICAgIGNvbnN0IHRpcCA9IHRoaXMuX2dldFRpcEVsZW1lbnQoKTtcbiAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1kZXNjcmliZWRieScsIHRpcC5nZXRBdHRyaWJ1dGUoJ2lkJykpO1xuICAgIGNvbnN0IHtcbiAgICAgIGNvbnRhaW5lclxuICAgIH0gPSB0aGlzLl9jb25maWc7XG4gICAgaWYgKCF0aGlzLl9lbGVtZW50Lm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNvbnRhaW5zKHRoaXMudGlwKSkge1xuICAgICAgY29udGFpbmVyLmFwcGVuZCh0aXApO1xuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgdGhpcy5jb25zdHJ1Y3Rvci5ldmVudE5hbWUoRVZFTlRfSU5TRVJURUQpKTtcbiAgICB9XG4gICAgdGhpcy5fcG9wcGVyID0gdGhpcy5fY3JlYXRlUG9wcGVyKHRpcCk7XG4gICAgdGlwLmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9TSE9XJDIpO1xuXG4gICAgLy8gSWYgdGhpcyBpcyBhIHRvdWNoLWVuYWJsZWQgZGV2aWNlIHdlIGFkZCBleHRyYVxuICAgIC8vIGVtcHR5IG1vdXNlb3ZlciBsaXN0ZW5lcnMgdG8gdGhlIGJvZHkncyBpbW1lZGlhdGUgY2hpbGRyZW47XG4gICAgLy8gb25seSBuZWVkZWQgYmVjYXVzZSBvZiBicm9rZW4gZXZlbnQgZGVsZWdhdGlvbiBvbiBpT1NcbiAgICAvLyBodHRwczovL3d3dy5xdWlya3Ntb2RlLm9yZy9ibG9nL2FyY2hpdmVzLzIwMTQvMDIvbW91c2VfZXZlbnRfYnViLmh0bWxcbiAgICBpZiAoJ29udG91Y2hzdGFydCcgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgW10uY29uY2F0KC4uLmRvY3VtZW50LmJvZHkuY2hpbGRyZW4pKSB7XG4gICAgICAgIEV2ZW50SGFuZGxlci5vbihlbGVtZW50LCAnbW91c2VvdmVyJywgbm9vcCk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgdGhpcy5jb25zdHJ1Y3Rvci5ldmVudE5hbWUoRVZFTlRfU0hPV04kMikpO1xuICAgICAgaWYgKHRoaXMuX2lzSG92ZXJlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5fbGVhdmUoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2lzSG92ZXJlZCA9IGZhbHNlO1xuICAgIH07XG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayhjb21wbGV0ZSwgdGhpcy50aXAsIHRoaXMuX2lzQW5pbWF0ZWQoKSk7XG4gIH1cbiAgaGlkZSgpIHtcbiAgICBpZiAoIXRoaXMuX2lzU2hvd24oKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBoaWRlRXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLmV2ZW50TmFtZShFVkVOVF9ISURFJDIpKTtcbiAgICBpZiAoaGlkZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdGlwID0gdGhpcy5fZ2V0VGlwRWxlbWVudCgpO1xuICAgIHRpcC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPVyQyKTtcblxuICAgIC8vIElmIHRoaXMgaXMgYSB0b3VjaC1lbmFibGVkIGRldmljZSB3ZSByZW1vdmUgdGhlIGV4dHJhXG4gICAgLy8gZW1wdHkgbW91c2VvdmVyIGxpc3RlbmVycyB3ZSBhZGRlZCBmb3IgaU9TIHN1cHBvcnRcbiAgICBpZiAoJ29udG91Y2hzdGFydCcgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgW10uY29uY2F0KC4uLmRvY3VtZW50LmJvZHkuY2hpbGRyZW4pKSB7XG4gICAgICAgIEV2ZW50SGFuZGxlci5vZmYoZWxlbWVudCwgJ21vdXNlb3ZlcicsIG5vb3ApO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9hY3RpdmVUcmlnZ2VyW1RSSUdHRVJfQ0xJQ0tdID0gZmFsc2U7XG4gICAgdGhpcy5fYWN0aXZlVHJpZ2dlcltUUklHR0VSX0ZPQ1VTXSA9IGZhbHNlO1xuICAgIHRoaXMuX2FjdGl2ZVRyaWdnZXJbVFJJR0dFUl9IT1ZFUl0gPSBmYWxzZTtcbiAgICB0aGlzLl9pc0hvdmVyZWQgPSBudWxsOyAvLyBpdCBpcyBhIHRyaWNrIHRvIHN1cHBvcnQgbWFudWFsIHRyaWdnZXJpbmdcblxuICAgIGNvbnN0IGNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2lzV2l0aEFjdGl2ZVRyaWdnZXIoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuX2lzSG92ZXJlZCkge1xuICAgICAgICB0aGlzLl9kaXNwb3NlUG9wcGVyKCk7XG4gICAgICB9XG4gICAgICB0aGlzLl9lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1kZXNjcmliZWRieScpO1xuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgdGhpcy5jb25zdHJ1Y3Rvci5ldmVudE5hbWUoRVZFTlRfSElEREVOJDIpKTtcbiAgICB9O1xuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soY29tcGxldGUsIHRoaXMudGlwLCB0aGlzLl9pc0FuaW1hdGVkKCkpO1xuICB9XG4gIHVwZGF0ZSgpIHtcbiAgICBpZiAodGhpcy5fcG9wcGVyKSB7XG4gICAgICB0aGlzLl9wb3BwZXIudXBkYXRlKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gUHJvdGVjdGVkXG4gIF9pc1dpdGhDb250ZW50KCkge1xuICAgIHJldHVybiBCb29sZWFuKHRoaXMuX2dldFRpdGxlKCkpO1xuICB9XG4gIF9nZXRUaXBFbGVtZW50KCkge1xuICAgIGlmICghdGhpcy50aXApIHtcbiAgICAgIHRoaXMudGlwID0gdGhpcy5fY3JlYXRlVGlwRWxlbWVudCh0aGlzLl9uZXdDb250ZW50IHx8IHRoaXMuX2dldENvbnRlbnRGb3JUZW1wbGF0ZSgpKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudGlwO1xuICB9XG4gIF9jcmVhdGVUaXBFbGVtZW50KGNvbnRlbnQpIHtcbiAgICBjb25zdCB0aXAgPSB0aGlzLl9nZXRUZW1wbGF0ZUZhY3RvcnkoY29udGVudCkudG9IdG1sKCk7XG5cbiAgICAvLyBUT0RPOiByZW1vdmUgdGhpcyBjaGVjayBpbiB2NlxuICAgIGlmICghdGlwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgdGlwLmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9GQURFJDIsIENMQVNTX05BTUVfU0hPVyQyKTtcbiAgICAvLyBUT0RPOiB2NiB0aGUgZm9sbG93aW5nIGNhbiBiZSBhY2hpZXZlZCB3aXRoIENTUyBvbmx5XG4gICAgdGlwLmNsYXNzTGlzdC5hZGQoYGJzLSR7dGhpcy5jb25zdHJ1Y3Rvci5OQU1FfS1hdXRvYCk7XG4gICAgY29uc3QgdGlwSWQgPSBnZXRVSUQodGhpcy5jb25zdHJ1Y3Rvci5OQU1FKS50b1N0cmluZygpO1xuICAgIHRpcC5zZXRBdHRyaWJ1dGUoJ2lkJywgdGlwSWQpO1xuICAgIGlmICh0aGlzLl9pc0FuaW1hdGVkKCkpIHtcbiAgICAgIHRpcC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfRkFERSQyKTtcbiAgICB9XG4gICAgcmV0dXJuIHRpcDtcbiAgfVxuICBzZXRDb250ZW50KGNvbnRlbnQpIHtcbiAgICB0aGlzLl9uZXdDb250ZW50ID0gY29udGVudDtcbiAgICBpZiAodGhpcy5faXNTaG93bigpKSB7XG4gICAgICB0aGlzLl9kaXNwb3NlUG9wcGVyKCk7XG4gICAgICB0aGlzLnNob3coKTtcbiAgICB9XG4gIH1cbiAgX2dldFRlbXBsYXRlRmFjdG9yeShjb250ZW50KSB7XG4gICAgaWYgKHRoaXMuX3RlbXBsYXRlRmFjdG9yeSkge1xuICAgICAgdGhpcy5fdGVtcGxhdGVGYWN0b3J5LmNoYW5nZUNvbnRlbnQoY29udGVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3RlbXBsYXRlRmFjdG9yeSA9IG5ldyBUZW1wbGF0ZUZhY3Rvcnkoe1xuICAgICAgICAuLi50aGlzLl9jb25maWcsXG4gICAgICAgIC8vIHRoZSBgY29udGVudGAgdmFyIGhhcyB0byBiZSBhZnRlciBgdGhpcy5fY29uZmlnYFxuICAgICAgICAvLyB0byBvdmVycmlkZSBjb25maWcuY29udGVudCBpbiBjYXNlIG9mIHBvcG92ZXJcbiAgICAgICAgY29udGVudCxcbiAgICAgICAgZXh0cmFDbGFzczogdGhpcy5fcmVzb2x2ZVBvc3NpYmxlRnVuY3Rpb24odGhpcy5fY29uZmlnLmN1c3RvbUNsYXNzKVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl90ZW1wbGF0ZUZhY3Rvcnk7XG4gIH1cbiAgX2dldENvbnRlbnRGb3JUZW1wbGF0ZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgW1NFTEVDVE9SX1RPT0xUSVBfSU5ORVJdOiB0aGlzLl9nZXRUaXRsZSgpXG4gICAgfTtcbiAgfVxuICBfZ2V0VGl0bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Jlc29sdmVQb3NzaWJsZUZ1bmN0aW9uKHRoaXMuX2NvbmZpZy50aXRsZSkgfHwgdGhpcy5fZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtYnMtb3JpZ2luYWwtdGl0bGUnKTtcbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX2luaXRpYWxpemVPbkRlbGVnYXRlZFRhcmdldChldmVudCkge1xuICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLmdldE9yQ3JlYXRlSW5zdGFuY2UoZXZlbnQuZGVsZWdhdGVUYXJnZXQsIHRoaXMuX2dldERlbGVnYXRlQ29uZmlnKCkpO1xuICB9XG4gIF9pc0FuaW1hdGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9jb25maWcuYW5pbWF0aW9uIHx8IHRoaXMudGlwICYmIHRoaXMudGlwLmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0ZBREUkMik7XG4gIH1cbiAgX2lzU2hvd24oKSB7XG4gICAgcmV0dXJuIHRoaXMudGlwICYmIHRoaXMudGlwLmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX1NIT1ckMik7XG4gIH1cbiAgX2NyZWF0ZVBvcHBlcih0aXApIHtcbiAgICBjb25zdCBwbGFjZW1lbnQgPSBleGVjdXRlKHRoaXMuX2NvbmZpZy5wbGFjZW1lbnQsIFt0aGlzLCB0aXAsIHRoaXMuX2VsZW1lbnRdKTtcbiAgICBjb25zdCBhdHRhY2htZW50ID0gQXR0YWNobWVudE1hcFtwbGFjZW1lbnQudG9VcHBlckNhc2UoKV07XG4gICAgcmV0dXJuIFBvcHBlci5jcmVhdGVQb3BwZXIodGhpcy5fZWxlbWVudCwgdGlwLCB0aGlzLl9nZXRQb3BwZXJDb25maWcoYXR0YWNobWVudCkpO1xuICB9XG4gIF9nZXRPZmZzZXQoKSB7XG4gICAgY29uc3Qge1xuICAgICAgb2Zmc2V0XG4gICAgfSA9IHRoaXMuX2NvbmZpZztcbiAgICBpZiAodHlwZW9mIG9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBvZmZzZXQuc3BsaXQoJywnKS5tYXAodmFsdWUgPT4gTnVtYmVyLnBhcnNlSW50KHZhbHVlLCAxMCkpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG9mZnNldCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHBvcHBlckRhdGEgPT4gb2Zmc2V0KHBvcHBlckRhdGEsIHRoaXMuX2VsZW1lbnQpO1xuICAgIH1cbiAgICByZXR1cm4gb2Zmc2V0O1xuICB9XG4gIF9yZXNvbHZlUG9zc2libGVGdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4gZXhlY3V0ZShhcmcsIFt0aGlzLl9lbGVtZW50XSk7XG4gIH1cbiAgX2dldFBvcHBlckNvbmZpZyhhdHRhY2htZW50KSB7XG4gICAgY29uc3QgZGVmYXVsdEJzUG9wcGVyQ29uZmlnID0ge1xuICAgICAgcGxhY2VtZW50OiBhdHRhY2htZW50LFxuICAgICAgbW9kaWZpZXJzOiBbe1xuICAgICAgICBuYW1lOiAnZmxpcCcsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICBmYWxsYmFja1BsYWNlbWVudHM6IHRoaXMuX2NvbmZpZy5mYWxsYmFja1BsYWNlbWVudHNcbiAgICAgICAgfVxuICAgICAgfSwge1xuICAgICAgICBuYW1lOiAnb2Zmc2V0JyxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIG9mZnNldDogdGhpcy5fZ2V0T2Zmc2V0KClcbiAgICAgICAgfVxuICAgICAgfSwge1xuICAgICAgICBuYW1lOiAncHJldmVudE92ZXJmbG93JyxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIGJvdW5kYXJ5OiB0aGlzLl9jb25maWcuYm91bmRhcnlcbiAgICAgICAgfVxuICAgICAgfSwge1xuICAgICAgICBuYW1lOiAnYXJyb3cnLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgZWxlbWVudDogYC4ke3RoaXMuY29uc3RydWN0b3IuTkFNRX0tYXJyb3dgXG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAgbmFtZTogJ3ByZVNldFBsYWNlbWVudCcsXG4gICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgIHBoYXNlOiAnYmVmb3JlTWFpbicsXG4gICAgICAgIGZuOiBkYXRhID0+IHtcbiAgICAgICAgICAvLyBQcmUtc2V0IFBvcHBlcidzIHBsYWNlbWVudCBhdHRyaWJ1dGUgaW4gb3JkZXIgdG8gcmVhZCB0aGUgYXJyb3cgc2l6ZXMgcHJvcGVybHkuXG4gICAgICAgICAgLy8gT3RoZXJ3aXNlLCBQb3BwZXIgbWl4ZXMgdXAgdGhlIHdpZHRoIGFuZCBoZWlnaHQgZGltZW5zaW9ucyBzaW5jZSB0aGUgaW5pdGlhbCBhcnJvdyBzdHlsZSBpcyBmb3IgdG9wIHBsYWNlbWVudFxuICAgICAgICAgIHRoaXMuX2dldFRpcEVsZW1lbnQoKS5zZXRBdHRyaWJ1dGUoJ2RhdGEtcG9wcGVyLXBsYWNlbWVudCcsIGRhdGEuc3RhdGUucGxhY2VtZW50KTtcbiAgICAgICAgfVxuICAgICAgfV1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICAuLi5kZWZhdWx0QnNQb3BwZXJDb25maWcsXG4gICAgICAuLi5leGVjdXRlKHRoaXMuX2NvbmZpZy5wb3BwZXJDb25maWcsIFtkZWZhdWx0QnNQb3BwZXJDb25maWddKVxuICAgIH07XG4gIH1cbiAgX3NldExpc3RlbmVycygpIHtcbiAgICBjb25zdCB0cmlnZ2VycyA9IHRoaXMuX2NvbmZpZy50cmlnZ2VyLnNwbGl0KCcgJyk7XG4gICAgZm9yIChjb25zdCB0cmlnZ2VyIG9mIHRyaWdnZXJzKSB7XG4gICAgICBpZiAodHJpZ2dlciA9PT0gJ2NsaWNrJykge1xuICAgICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgdGhpcy5jb25zdHJ1Y3Rvci5ldmVudE5hbWUoRVZFTlRfQ0xJQ0skMSksIHRoaXMuX2NvbmZpZy5zZWxlY3RvciwgZXZlbnQgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLl9pbml0aWFsaXplT25EZWxlZ2F0ZWRUYXJnZXQoZXZlbnQpO1xuICAgICAgICAgIGNvbnRleHQudG9nZ2xlKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmICh0cmlnZ2VyICE9PSBUUklHR0VSX01BTlVBTCkge1xuICAgICAgICBjb25zdCBldmVudEluID0gdHJpZ2dlciA9PT0gVFJJR0dFUl9IT1ZFUiA/IHRoaXMuY29uc3RydWN0b3IuZXZlbnROYW1lKEVWRU5UX01PVVNFRU5URVIpIDogdGhpcy5jb25zdHJ1Y3Rvci5ldmVudE5hbWUoRVZFTlRfRk9DVVNJTiQxKTtcbiAgICAgICAgY29uc3QgZXZlbnRPdXQgPSB0cmlnZ2VyID09PSBUUklHR0VSX0hPVkVSID8gdGhpcy5jb25zdHJ1Y3Rvci5ldmVudE5hbWUoRVZFTlRfTU9VU0VMRUFWRSkgOiB0aGlzLmNvbnN0cnVjdG9yLmV2ZW50TmFtZShFVkVOVF9GT0NVU09VVCQxKTtcbiAgICAgICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIGV2ZW50SW4sIHRoaXMuX2NvbmZpZy5zZWxlY3RvciwgZXZlbnQgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLl9pbml0aWFsaXplT25EZWxlZ2F0ZWRUYXJnZXQoZXZlbnQpO1xuICAgICAgICAgIGNvbnRleHQuX2FjdGl2ZVRyaWdnZXJbZXZlbnQudHlwZSA9PT0gJ2ZvY3VzaW4nID8gVFJJR0dFUl9GT0NVUyA6IFRSSUdHRVJfSE9WRVJdID0gdHJ1ZTtcbiAgICAgICAgICBjb250ZXh0Ll9lbnRlcigpO1xuICAgICAgICB9KTtcbiAgICAgICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIGV2ZW50T3V0LCB0aGlzLl9jb25maWcuc2VsZWN0b3IsIGV2ZW50ID0+IHtcbiAgICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5faW5pdGlhbGl6ZU9uRGVsZWdhdGVkVGFyZ2V0KGV2ZW50KTtcbiAgICAgICAgICBjb250ZXh0Ll9hY3RpdmVUcmlnZ2VyW2V2ZW50LnR5cGUgPT09ICdmb2N1c291dCcgPyBUUklHR0VSX0ZPQ1VTIDogVFJJR0dFUl9IT1ZFUl0gPSBjb250ZXh0Ll9lbGVtZW50LmNvbnRhaW5zKGV2ZW50LnJlbGF0ZWRUYXJnZXQpO1xuICAgICAgICAgIGNvbnRleHQuX2xlYXZlKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9oaWRlTW9kYWxIYW5kbGVyID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2VsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudC5jbG9zZXN0KFNFTEVDVE9SX01PREFMKSwgRVZFTlRfTU9EQUxfSElERSwgdGhpcy5faGlkZU1vZGFsSGFuZGxlcik7XG4gIH1cbiAgX2ZpeFRpdGxlKCkge1xuICAgIGNvbnN0IHRpdGxlID0gdGhpcy5fZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3RpdGxlJyk7XG4gICAgaWYgKCF0aXRsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuX2VsZW1lbnQuZ2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJykgJiYgIXRoaXMuX2VsZW1lbnQudGV4dENvbnRlbnQudHJpbSgpKSB7XG4gICAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsIHRpdGxlKTtcbiAgICB9XG4gICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtYnMtb3JpZ2luYWwtdGl0bGUnLCB0aXRsZSk7IC8vIERPIE5PVCBVU0UgSVQuIElzIG9ubHkgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gICAgdGhpcy5fZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ3RpdGxlJyk7XG4gIH1cbiAgX2VudGVyKCkge1xuICAgIGlmICh0aGlzLl9pc1Nob3duKCkgfHwgdGhpcy5faXNIb3ZlcmVkKSB7XG4gICAgICB0aGlzLl9pc0hvdmVyZWQgPSB0cnVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9pc0hvdmVyZWQgPSB0cnVlO1xuICAgIHRoaXMuX3NldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2lzSG92ZXJlZCkge1xuICAgICAgICB0aGlzLnNob3coKTtcbiAgICAgIH1cbiAgICB9LCB0aGlzLl9jb25maWcuZGVsYXkuc2hvdyk7XG4gIH1cbiAgX2xlYXZlKCkge1xuICAgIGlmICh0aGlzLl9pc1dpdGhBY3RpdmVUcmlnZ2VyKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5faXNIb3ZlcmVkID0gZmFsc2U7XG4gICAgdGhpcy5fc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuX2lzSG92ZXJlZCkge1xuICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICAgIH1cbiAgICB9LCB0aGlzLl9jb25maWcuZGVsYXkuaGlkZSk7XG4gIH1cbiAgX3NldFRpbWVvdXQoaGFuZGxlciwgdGltZW91dCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KTtcbiAgICB0aGlzLl90aW1lb3V0ID0gc2V0VGltZW91dChoYW5kbGVyLCB0aW1lb3V0KTtcbiAgfVxuICBfaXNXaXRoQWN0aXZlVHJpZ2dlcigpIHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLl9hY3RpdmVUcmlnZ2VyKS5pbmNsdWRlcyh0cnVlKTtcbiAgfVxuICBfZ2V0Q29uZmlnKGNvbmZpZykge1xuICAgIGNvbnN0IGRhdGFBdHRyaWJ1dGVzID0gTWFuaXB1bGF0b3IuZ2V0RGF0YUF0dHJpYnV0ZXModGhpcy5fZWxlbWVudCk7XG4gICAgZm9yIChjb25zdCBkYXRhQXR0cmlidXRlIG9mIE9iamVjdC5rZXlzKGRhdGFBdHRyaWJ1dGVzKSkge1xuICAgICAgaWYgKERJU0FMTE9XRURfQVRUUklCVVRFUy5oYXMoZGF0YUF0dHJpYnV0ZSkpIHtcbiAgICAgICAgZGVsZXRlIGRhdGFBdHRyaWJ1dGVzW2RhdGFBdHRyaWJ1dGVdO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25maWcgPSB7XG4gICAgICAuLi5kYXRhQXR0cmlidXRlcyxcbiAgICAgIC4uLih0eXBlb2YgY29uZmlnID09PSAnb2JqZWN0JyAmJiBjb25maWcgPyBjb25maWcgOiB7fSlcbiAgICB9O1xuICAgIGNvbmZpZyA9IHRoaXMuX21lcmdlQ29uZmlnT2JqKGNvbmZpZyk7XG4gICAgY29uZmlnID0gdGhpcy5fY29uZmlnQWZ0ZXJNZXJnZShjb25maWcpO1xuICAgIHRoaXMuX3R5cGVDaGVja0NvbmZpZyhjb25maWcpO1xuICAgIHJldHVybiBjb25maWc7XG4gIH1cbiAgX2NvbmZpZ0FmdGVyTWVyZ2UoY29uZmlnKSB7XG4gICAgY29uZmlnLmNvbnRhaW5lciA9IGNvbmZpZy5jb250YWluZXIgPT09IGZhbHNlID8gZG9jdW1lbnQuYm9keSA6IGdldEVsZW1lbnQoY29uZmlnLmNvbnRhaW5lcik7XG4gICAgaWYgKHR5cGVvZiBjb25maWcuZGVsYXkgPT09ICdudW1iZXInKSB7XG4gICAgICBjb25maWcuZGVsYXkgPSB7XG4gICAgICAgIHNob3c6IGNvbmZpZy5kZWxheSxcbiAgICAgICAgaGlkZTogY29uZmlnLmRlbGF5XG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGNvbmZpZy50aXRsZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIGNvbmZpZy50aXRsZSA9IGNvbmZpZy50aXRsZS50b1N0cmluZygpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGNvbmZpZy5jb250ZW50ID09PSAnbnVtYmVyJykge1xuICAgICAgY29uZmlnLmNvbnRlbnQgPSBjb25maWcuY29udGVudC50b1N0cmluZygpO1xuICAgIH1cbiAgICByZXR1cm4gY29uZmlnO1xuICB9XG4gIF9nZXREZWxlZ2F0ZUNvbmZpZygpIHtcbiAgICBjb25zdCBjb25maWcgPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLl9jb25maWcpKSB7XG4gICAgICBpZiAodGhpcy5jb25zdHJ1Y3Rvci5EZWZhdWx0W2tleV0gIT09IHZhbHVlKSB7XG4gICAgICAgIGNvbmZpZ1trZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbmZpZy5zZWxlY3RvciA9IGZhbHNlO1xuICAgIGNvbmZpZy50cmlnZ2VyID0gJ21hbnVhbCc7XG5cbiAgICAvLyBJbiB0aGUgZnV0dXJlIGNhbiBiZSByZXBsYWNlZCB3aXRoOlxuICAgIC8vIGNvbnN0IGtleXNXaXRoRGlmZmVyZW50VmFsdWVzID0gT2JqZWN0LmVudHJpZXModGhpcy5fY29uZmlnKS5maWx0ZXIoZW50cnkgPT4gdGhpcy5jb25zdHJ1Y3Rvci5EZWZhdWx0W2VudHJ5WzBdXSAhPT0gdGhpcy5fY29uZmlnW2VudHJ5WzBdXSlcbiAgICAvLyBgT2JqZWN0LmZyb21FbnRyaWVzKGtleXNXaXRoRGlmZmVyZW50VmFsdWVzKWBcbiAgICByZXR1cm4gY29uZmlnO1xuICB9XG4gIF9kaXNwb3NlUG9wcGVyKCkge1xuICAgIGlmICh0aGlzLl9wb3BwZXIpIHtcbiAgICAgIHRoaXMuX3BvcHBlci5kZXN0cm95KCk7XG4gICAgICB0aGlzLl9wb3BwZXIgPSBudWxsO1xuICAgIH1cbiAgICBpZiAodGhpcy50aXApIHtcbiAgICAgIHRoaXMudGlwLnJlbW92ZSgpO1xuICAgICAgdGhpcy50aXAgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGF0YSA9IFRvb2x0aXAuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzLCBjb25maWcpO1xuICAgICAgaWYgKHR5cGVvZiBjb25maWcgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2NvbmZpZ31cImApO1xuICAgICAgfVxuICAgICAgZGF0YVtjb25maWddKCk7XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBqUXVlcnlcbiAqL1xuXG5kZWZpbmVKUXVlcnlQbHVnaW4oVG9vbHRpcCk7XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCBwb3BvdmVyLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IE5BTUUkMyA9ICdwb3BvdmVyJztcbmNvbnN0IFNFTEVDVE9SX1RJVExFID0gJy5wb3BvdmVyLWhlYWRlcic7XG5jb25zdCBTRUxFQ1RPUl9DT05URU5UID0gJy5wb3BvdmVyLWJvZHknO1xuY29uc3QgRGVmYXVsdCQyID0ge1xuICAuLi5Ub29sdGlwLkRlZmF1bHQsXG4gIGNvbnRlbnQ6ICcnLFxuICBvZmZzZXQ6IFswLCA4XSxcbiAgcGxhY2VtZW50OiAncmlnaHQnLFxuICB0ZW1wbGF0ZTogJzxkaXYgY2xhc3M9XCJwb3BvdmVyXCIgcm9sZT1cInRvb2x0aXBcIj4nICsgJzxkaXYgY2xhc3M9XCJwb3BvdmVyLWFycm93XCI+PC9kaXY+JyArICc8aDMgY2xhc3M9XCJwb3BvdmVyLWhlYWRlclwiPjwvaDM+JyArICc8ZGl2IGNsYXNzPVwicG9wb3Zlci1ib2R5XCI+PC9kaXY+JyArICc8L2Rpdj4nLFxuICB0cmlnZ2VyOiAnY2xpY2snXG59O1xuY29uc3QgRGVmYXVsdFR5cGUkMiA9IHtcbiAgLi4uVG9vbHRpcC5EZWZhdWx0VHlwZSxcbiAgY29udGVudDogJyhudWxsfHN0cmluZ3xlbGVtZW50fGZ1bmN0aW9uKSdcbn07XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIFBvcG92ZXIgZXh0ZW5kcyBUb29sdGlwIHtcbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHQkMjtcbiAgfVxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZSQyO1xuICB9XG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRSQzO1xuICB9XG5cbiAgLy8gT3ZlcnJpZGVzXG4gIF9pc1dpdGhDb250ZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9nZXRUaXRsZSgpIHx8IHRoaXMuX2dldENvbnRlbnQoKTtcbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX2dldENvbnRlbnRGb3JUZW1wbGF0ZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgW1NFTEVDVE9SX1RJVExFXTogdGhpcy5fZ2V0VGl0bGUoKSxcbiAgICAgIFtTRUxFQ1RPUl9DT05URU5UXTogdGhpcy5fZ2V0Q29udGVudCgpXG4gICAgfTtcbiAgfVxuICBfZ2V0Q29udGVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVzb2x2ZVBvc3NpYmxlRnVuY3Rpb24odGhpcy5fY29uZmlnLmNvbnRlbnQpO1xuICB9XG5cbiAgLy8gU3RhdGljXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0gUG9wb3Zlci5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMsIGNvbmZpZyk7XG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBkYXRhW2NvbmZpZ10gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYCk7XG4gICAgICB9XG4gICAgICBkYXRhW2NvbmZpZ10oKTtcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIGpRdWVyeVxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihQb3BvdmVyKTtcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIHNjcm9sbHNweS5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FJDIgPSAnc2Nyb2xsc3B5JztcbmNvbnN0IERBVEFfS0VZJDIgPSAnYnMuc2Nyb2xsc3B5JztcbmNvbnN0IEVWRU5UX0tFWSQyID0gYC4ke0RBVEFfS0VZJDJ9YDtcbmNvbnN0IERBVEFfQVBJX0tFWSA9ICcuZGF0YS1hcGknO1xuY29uc3QgRVZFTlRfQUNUSVZBVEUgPSBgYWN0aXZhdGUke0VWRU5UX0tFWSQyfWA7XG5jb25zdCBFVkVOVF9DTElDSyA9IGBjbGljayR7RVZFTlRfS0VZJDJ9YDtcbmNvbnN0IEVWRU5UX0xPQURfREFUQV9BUEkkMSA9IGBsb2FkJHtFVkVOVF9LRVkkMn0ke0RBVEFfQVBJX0tFWX1gO1xuY29uc3QgQ0xBU1NfTkFNRV9EUk9QRE9XTl9JVEVNID0gJ2Ryb3Bkb3duLWl0ZW0nO1xuY29uc3QgQ0xBU1NfTkFNRV9BQ1RJVkUkMSA9ICdhY3RpdmUnO1xuY29uc3QgU0VMRUNUT1JfREFUQV9TUFkgPSAnW2RhdGEtYnMtc3B5PVwic2Nyb2xsXCJdJztcbmNvbnN0IFNFTEVDVE9SX1RBUkdFVF9MSU5LUyA9ICdbaHJlZl0nO1xuY29uc3QgU0VMRUNUT1JfTkFWX0xJU1RfR1JPVVAgPSAnLm5hdiwgLmxpc3QtZ3JvdXAnO1xuY29uc3QgU0VMRUNUT1JfTkFWX0xJTktTID0gJy5uYXYtbGluayc7XG5jb25zdCBTRUxFQ1RPUl9OQVZfSVRFTVMgPSAnLm5hdi1pdGVtJztcbmNvbnN0IFNFTEVDVE9SX0xJU1RfSVRFTVMgPSAnLmxpc3QtZ3JvdXAtaXRlbSc7XG5jb25zdCBTRUxFQ1RPUl9MSU5LX0lURU1TID0gYCR7U0VMRUNUT1JfTkFWX0xJTktTfSwgJHtTRUxFQ1RPUl9OQVZfSVRFTVN9ID4gJHtTRUxFQ1RPUl9OQVZfTElOS1N9LCAke1NFTEVDVE9SX0xJU1RfSVRFTVN9YDtcbmNvbnN0IFNFTEVDVE9SX0RST1BET1dOID0gJy5kcm9wZG93bic7XG5jb25zdCBTRUxFQ1RPUl9EUk9QRE9XTl9UT0dHTEUkMSA9ICcuZHJvcGRvd24tdG9nZ2xlJztcbmNvbnN0IERlZmF1bHQkMSA9IHtcbiAgb2Zmc2V0OiBudWxsLFxuICAvLyBUT0RPOiB2NiBAZGVwcmVjYXRlZCwga2VlcCBpdCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgcmVhc29uc1xuICByb290TWFyZ2luOiAnMHB4IDBweCAtMjUlJyxcbiAgc21vb3RoU2Nyb2xsOiBmYWxzZSxcbiAgdGFyZ2V0OiBudWxsLFxuICB0aHJlc2hvbGQ6IFswLjEsIDAuNSwgMV1cbn07XG5jb25zdCBEZWZhdWx0VHlwZSQxID0ge1xuICBvZmZzZXQ6ICcobnVtYmVyfG51bGwpJyxcbiAgLy8gVE9ETyB2NiBAZGVwcmVjYXRlZCwga2VlcCBpdCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgcmVhc29uc1xuICByb290TWFyZ2luOiAnc3RyaW5nJyxcbiAgc21vb3RoU2Nyb2xsOiAnYm9vbGVhbicsXG4gIHRhcmdldDogJ2VsZW1lbnQnLFxuICB0aHJlc2hvbGQ6ICdhcnJheSdcbn07XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIFNjcm9sbFNweSBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBjb25maWcpIHtcbiAgICBzdXBlcihlbGVtZW50LCBjb25maWcpO1xuXG4gICAgLy8gdGhpcy5fZWxlbWVudCBpcyB0aGUgb2JzZXJ2YWJsZXNDb250YWluZXIgYW5kIGNvbmZpZy50YXJnZXQgdGhlIG1lbnUgbGlua3Mgd3JhcHBlclxuICAgIHRoaXMuX3RhcmdldExpbmtzID0gbmV3IE1hcCgpO1xuICAgIHRoaXMuX29ic2VydmFibGVTZWN0aW9ucyA9IG5ldyBNYXAoKTtcbiAgICB0aGlzLl9yb290RWxlbWVudCA9IGdldENvbXB1dGVkU3R5bGUodGhpcy5fZWxlbWVudCkub3ZlcmZsb3dZID09PSAndmlzaWJsZScgPyBudWxsIDogdGhpcy5fZWxlbWVudDtcbiAgICB0aGlzLl9hY3RpdmVUYXJnZXQgPSBudWxsO1xuICAgIHRoaXMuX29ic2VydmVyID0gbnVsbDtcbiAgICB0aGlzLl9wcmV2aW91c1Njcm9sbERhdGEgPSB7XG4gICAgICB2aXNpYmxlRW50cnlUb3A6IDAsXG4gICAgICBwYXJlbnRTY3JvbGxUb3A6IDBcbiAgICB9O1xuICAgIHRoaXMucmVmcmVzaCgpOyAvLyBpbml0aWFsaXplXG4gIH1cblxuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4gRGVmYXVsdCQxO1xuICB9XG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRUeXBlJDE7XG4gIH1cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FJDI7XG4gIH1cblxuICAvLyBQdWJsaWNcbiAgcmVmcmVzaCgpIHtcbiAgICB0aGlzLl9pbml0aWFsaXplVGFyZ2V0c0FuZE9ic2VydmFibGVzKCk7XG4gICAgdGhpcy5fbWF5YmVFbmFibGVTbW9vdGhTY3JvbGwoKTtcbiAgICBpZiAodGhpcy5fb2JzZXJ2ZXIpIHtcbiAgICAgIHRoaXMuX29ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fb2JzZXJ2ZXIgPSB0aGlzLl9nZXROZXdPYnNlcnZlcigpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHNlY3Rpb24gb2YgdGhpcy5fb2JzZXJ2YWJsZVNlY3Rpb25zLnZhbHVlcygpKSB7XG4gICAgICB0aGlzLl9vYnNlcnZlci5vYnNlcnZlKHNlY3Rpb24pO1xuICAgIH1cbiAgfVxuICBkaXNwb3NlKCkge1xuICAgIHRoaXMuX29ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICBzdXBlci5kaXNwb3NlKCk7XG4gIH1cblxuICAvLyBQcml2YXRlXG4gIF9jb25maWdBZnRlck1lcmdlKGNvbmZpZykge1xuICAgIC8vIFRPRE86IG9uIHY2IHRhcmdldCBzaG91bGQgYmUgZ2l2ZW4gZXhwbGljaXRseSAmIHJlbW92ZSB0aGUge3RhcmdldDogJ3NzLXRhcmdldCd9IGNhc2VcbiAgICBjb25maWcudGFyZ2V0ID0gZ2V0RWxlbWVudChjb25maWcudGFyZ2V0KSB8fCBkb2N1bWVudC5ib2R5O1xuXG4gICAgLy8gVE9ETzogdjYgT25seSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgcmVhc29ucy4gVXNlIHJvb3RNYXJnaW4gb25seVxuICAgIGNvbmZpZy5yb290TWFyZ2luID0gY29uZmlnLm9mZnNldCA/IGAke2NvbmZpZy5vZmZzZXR9cHggMHB4IC0zMCVgIDogY29uZmlnLnJvb3RNYXJnaW47XG4gICAgaWYgKHR5cGVvZiBjb25maWcudGhyZXNob2xkID09PSAnc3RyaW5nJykge1xuICAgICAgY29uZmlnLnRocmVzaG9sZCA9IGNvbmZpZy50aHJlc2hvbGQuc3BsaXQoJywnKS5tYXAodmFsdWUgPT4gTnVtYmVyLnBhcnNlRmxvYXQodmFsdWUpKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbmZpZztcbiAgfVxuICBfbWF5YmVFbmFibGVTbW9vdGhTY3JvbGwoKSB7XG4gICAgaWYgKCF0aGlzLl9jb25maWcuc21vb3RoU2Nyb2xsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gdW5yZWdpc3RlciBhbnkgcHJldmlvdXMgbGlzdGVuZXJzXG4gICAgRXZlbnRIYW5kbGVyLm9mZih0aGlzLl9jb25maWcudGFyZ2V0LCBFVkVOVF9DTElDSyk7XG4gICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2NvbmZpZy50YXJnZXQsIEVWRU5UX0NMSUNLLCBTRUxFQ1RPUl9UQVJHRVRfTElOS1MsIGV2ZW50ID0+IHtcbiAgICAgIGNvbnN0IG9ic2VydmFibGVTZWN0aW9uID0gdGhpcy5fb2JzZXJ2YWJsZVNlY3Rpb25zLmdldChldmVudC50YXJnZXQuaGFzaCk7XG4gICAgICBpZiAob2JzZXJ2YWJsZVNlY3Rpb24pIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgY29uc3Qgcm9vdCA9IHRoaXMuX3Jvb3RFbGVtZW50IHx8IHdpbmRvdztcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gb2JzZXJ2YWJsZVNlY3Rpb24ub2Zmc2V0VG9wIC0gdGhpcy5fZWxlbWVudC5vZmZzZXRUb3A7XG4gICAgICAgIGlmIChyb290LnNjcm9sbFRvKSB7XG4gICAgICAgICAgcm9vdC5zY3JvbGxUbyh7XG4gICAgICAgICAgICB0b3A6IGhlaWdodCxcbiAgICAgICAgICAgIGJlaGF2aW9yOiAnc21vb3RoJ1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENocm9tZSA2MCBkb2Vzbid0IHN1cHBvcnQgYHNjcm9sbFRvYFxuICAgICAgICByb290LnNjcm9sbFRvcCA9IGhlaWdodDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBfZ2V0TmV3T2JzZXJ2ZXIoKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgIHJvb3Q6IHRoaXMuX3Jvb3RFbGVtZW50LFxuICAgICAgdGhyZXNob2xkOiB0aGlzLl9jb25maWcudGhyZXNob2xkLFxuICAgICAgcm9vdE1hcmdpbjogdGhpcy5fY29uZmlnLnJvb3RNYXJnaW5cbiAgICB9O1xuICAgIHJldHVybiBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoZW50cmllcyA9PiB0aGlzLl9vYnNlcnZlckNhbGxiYWNrKGVudHJpZXMpLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8vIFRoZSBsb2dpYyBvZiBzZWxlY3Rpb25cbiAgX29ic2VydmVyQ2FsbGJhY2soZW50cmllcykge1xuICAgIGNvbnN0IHRhcmdldEVsZW1lbnQgPSBlbnRyeSA9PiB0aGlzLl90YXJnZXRMaW5rcy5nZXQoYCMke2VudHJ5LnRhcmdldC5pZH1gKTtcbiAgICBjb25zdCBhY3RpdmF0ZSA9IGVudHJ5ID0+IHtcbiAgICAgIHRoaXMuX3ByZXZpb3VzU2Nyb2xsRGF0YS52aXNpYmxlRW50cnlUb3AgPSBlbnRyeS50YXJnZXQub2Zmc2V0VG9wO1xuICAgICAgdGhpcy5fcHJvY2Vzcyh0YXJnZXRFbGVtZW50KGVudHJ5KSk7XG4gICAgfTtcbiAgICBjb25zdCBwYXJlbnRTY3JvbGxUb3AgPSAodGhpcy5fcm9vdEVsZW1lbnQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5zY3JvbGxUb3A7XG4gICAgY29uc3QgdXNlclNjcm9sbHNEb3duID0gcGFyZW50U2Nyb2xsVG9wID49IHRoaXMuX3ByZXZpb3VzU2Nyb2xsRGF0YS5wYXJlbnRTY3JvbGxUb3A7XG4gICAgdGhpcy5fcHJldmlvdXNTY3JvbGxEYXRhLnBhcmVudFNjcm9sbFRvcCA9IHBhcmVudFNjcm9sbFRvcDtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICAgIGlmICghZW50cnkuaXNJbnRlcnNlY3RpbmcpIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlVGFyZ2V0ID0gbnVsbDtcbiAgICAgICAgdGhpcy5fY2xlYXJBY3RpdmVDbGFzcyh0YXJnZXRFbGVtZW50KGVudHJ5KSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgZW50cnlJc0xvd2VyVGhhblByZXZpb3VzID0gZW50cnkudGFyZ2V0Lm9mZnNldFRvcCA+PSB0aGlzLl9wcmV2aW91c1Njcm9sbERhdGEudmlzaWJsZUVudHJ5VG9wO1xuICAgICAgLy8gaWYgd2UgYXJlIHNjcm9sbGluZyBkb3duLCBwaWNrIHRoZSBiaWdnZXIgb2Zmc2V0VG9wXG4gICAgICBpZiAodXNlclNjcm9sbHNEb3duICYmIGVudHJ5SXNMb3dlclRoYW5QcmV2aW91cykge1xuICAgICAgICBhY3RpdmF0ZShlbnRyeSk7XG4gICAgICAgIC8vIGlmIHBhcmVudCBpc24ndCBzY3JvbGxlZCwgbGV0J3Mga2VlcCB0aGUgZmlyc3QgdmlzaWJsZSBpdGVtLCBicmVha2luZyB0aGUgaXRlcmF0aW9uXG4gICAgICAgIGlmICghcGFyZW50U2Nyb2xsVG9wKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBpZiB3ZSBhcmUgc2Nyb2xsaW5nIHVwLCBwaWNrIHRoZSBzbWFsbGVzdCBvZmZzZXRUb3BcbiAgICAgIGlmICghdXNlclNjcm9sbHNEb3duICYmICFlbnRyeUlzTG93ZXJUaGFuUHJldmlvdXMpIHtcbiAgICAgICAgYWN0aXZhdGUoZW50cnkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBfaW5pdGlhbGl6ZVRhcmdldHNBbmRPYnNlcnZhYmxlcygpIHtcbiAgICB0aGlzLl90YXJnZXRMaW5rcyA9IG5ldyBNYXAoKTtcbiAgICB0aGlzLl9vYnNlcnZhYmxlU2VjdGlvbnMgPSBuZXcgTWFwKCk7XG4gICAgY29uc3QgdGFyZ2V0TGlua3MgPSBTZWxlY3RvckVuZ2luZS5maW5kKFNFTEVDVE9SX1RBUkdFVF9MSU5LUywgdGhpcy5fY29uZmlnLnRhcmdldCk7XG4gICAgZm9yIChjb25zdCBhbmNob3Igb2YgdGFyZ2V0TGlua3MpIHtcbiAgICAgIC8vIGVuc3VyZSB0aGF0IHRoZSBhbmNob3IgaGFzIGFuIGlkIGFuZCBpcyBub3QgZGlzYWJsZWRcbiAgICAgIGlmICghYW5jaG9yLmhhc2ggfHwgaXNEaXNhYmxlZChhbmNob3IpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3Qgb2JzZXJ2YWJsZVNlY3Rpb24gPSBTZWxlY3RvckVuZ2luZS5maW5kT25lKGRlY29kZVVSSShhbmNob3IuaGFzaCksIHRoaXMuX2VsZW1lbnQpO1xuXG4gICAgICAvLyBlbnN1cmUgdGhhdCB0aGUgb2JzZXJ2YWJsZVNlY3Rpb24gZXhpc3RzICYgaXMgdmlzaWJsZVxuICAgICAgaWYgKGlzVmlzaWJsZShvYnNlcnZhYmxlU2VjdGlvbikpIHtcbiAgICAgICAgdGhpcy5fdGFyZ2V0TGlua3Muc2V0KGRlY29kZVVSSShhbmNob3IuaGFzaCksIGFuY2hvcik7XG4gICAgICAgIHRoaXMuX29ic2VydmFibGVTZWN0aW9ucy5zZXQoYW5jaG9yLmhhc2gsIG9ic2VydmFibGVTZWN0aW9uKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgX3Byb2Nlc3ModGFyZ2V0KSB7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZVRhcmdldCA9PT0gdGFyZ2V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2NsZWFyQWN0aXZlQ2xhc3ModGhpcy5fY29uZmlnLnRhcmdldCk7XG4gICAgdGhpcy5fYWN0aXZlVGFyZ2V0ID0gdGFyZ2V0O1xuICAgIHRhcmdldC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfQUNUSVZFJDEpO1xuICAgIHRoaXMuX2FjdGl2YXRlUGFyZW50cyh0YXJnZXQpO1xuICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0FDVElWQVRFLCB7XG4gICAgICByZWxhdGVkVGFyZ2V0OiB0YXJnZXRcbiAgICB9KTtcbiAgfVxuICBfYWN0aXZhdGVQYXJlbnRzKHRhcmdldCkge1xuICAgIC8vIEFjdGl2YXRlIGRyb3Bkb3duIHBhcmVudHNcbiAgICBpZiAodGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0RST1BET1dOX0lURU0pKSB7XG4gICAgICBTZWxlY3RvckVuZ2luZS5maW5kT25lKFNFTEVDVE9SX0RST1BET1dOX1RPR0dMRSQxLCB0YXJnZXQuY2xvc2VzdChTRUxFQ1RPUl9EUk9QRE9XTikpLmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9BQ1RJVkUkMSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvciAoY29uc3QgbGlzdEdyb3VwIG9mIFNlbGVjdG9yRW5naW5lLnBhcmVudHModGFyZ2V0LCBTRUxFQ1RPUl9OQVZfTElTVF9HUk9VUCkpIHtcbiAgICAgIC8vIFNldCB0cmlnZ2VyZWQgbGlua3MgcGFyZW50cyBhcyBhY3RpdmVcbiAgICAgIC8vIFdpdGggYm90aCA8dWw+IGFuZCA8bmF2PiBtYXJrdXAgYSBwYXJlbnQgaXMgdGhlIHByZXZpb3VzIHNpYmxpbmcgb2YgYW55IG5hdiBhbmNlc3RvclxuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIFNlbGVjdG9yRW5naW5lLnByZXYobGlzdEdyb3VwLCBTRUxFQ1RPUl9MSU5LX0lURU1TKSkge1xuICAgICAgICBpdGVtLmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9BQ1RJVkUkMSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIF9jbGVhckFjdGl2ZUNsYXNzKHBhcmVudCkge1xuICAgIHBhcmVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfQUNUSVZFJDEpO1xuICAgIGNvbnN0IGFjdGl2ZU5vZGVzID0gU2VsZWN0b3JFbmdpbmUuZmluZChgJHtTRUxFQ1RPUl9UQVJHRVRfTElOS1N9LiR7Q0xBU1NfTkFNRV9BQ1RJVkUkMX1gLCBwYXJlbnQpO1xuICAgIGZvciAoY29uc3Qgbm9kZSBvZiBhY3RpdmVOb2Rlcykge1xuICAgICAgbm9kZS5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfQUNUSVZFJDEpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGF0YSA9IFNjcm9sbFNweS5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMsIGNvbmZpZyk7XG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGRhdGFbY29uZmlnXSA9PT0gdW5kZWZpbmVkIHx8IGNvbmZpZy5zdGFydHNXaXRoKCdfJykgfHwgY29uZmlnID09PSAnY29uc3RydWN0b3InKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYCk7XG4gICAgICB9XG4gICAgICBkYXRhW2NvbmZpZ10oKTtcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIERhdGEgQVBJIGltcGxlbWVudGF0aW9uXG4gKi9cblxuRXZlbnRIYW5kbGVyLm9uKHdpbmRvdywgRVZFTlRfTE9BRF9EQVRBX0FQSSQxLCAoKSA9PiB7XG4gIGZvciAoY29uc3Qgc3B5IG9mIFNlbGVjdG9yRW5naW5lLmZpbmQoU0VMRUNUT1JfREFUQV9TUFkpKSB7XG4gICAgU2Nyb2xsU3B5LmdldE9yQ3JlYXRlSW5zdGFuY2Uoc3B5KTtcbiAgfVxufSk7XG5cbi8qKlxuICogalF1ZXJ5XG4gKi9cblxuZGVmaW5lSlF1ZXJ5UGx1Z2luKFNjcm9sbFNweSk7XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCB0YWIuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSQxID0gJ3RhYic7XG5jb25zdCBEQVRBX0tFWSQxID0gJ2JzLnRhYic7XG5jb25zdCBFVkVOVF9LRVkkMSA9IGAuJHtEQVRBX0tFWSQxfWA7XG5jb25zdCBFVkVOVF9ISURFJDEgPSBgaGlkZSR7RVZFTlRfS0VZJDF9YDtcbmNvbnN0IEVWRU5UX0hJRERFTiQxID0gYGhpZGRlbiR7RVZFTlRfS0VZJDF9YDtcbmNvbnN0IEVWRU5UX1NIT1ckMSA9IGBzaG93JHtFVkVOVF9LRVkkMX1gO1xuY29uc3QgRVZFTlRfU0hPV04kMSA9IGBzaG93biR7RVZFTlRfS0VZJDF9YDtcbmNvbnN0IEVWRU5UX0NMSUNLX0RBVEFfQVBJID0gYGNsaWNrJHtFVkVOVF9LRVkkMX1gO1xuY29uc3QgRVZFTlRfS0VZRE9XTiA9IGBrZXlkb3duJHtFVkVOVF9LRVkkMX1gO1xuY29uc3QgRVZFTlRfTE9BRF9EQVRBX0FQSSA9IGBsb2FkJHtFVkVOVF9LRVkkMX1gO1xuY29uc3QgQVJST1dfTEVGVF9LRVkgPSAnQXJyb3dMZWZ0JztcbmNvbnN0IEFSUk9XX1JJR0hUX0tFWSA9ICdBcnJvd1JpZ2h0JztcbmNvbnN0IEFSUk9XX1VQX0tFWSA9ICdBcnJvd1VwJztcbmNvbnN0IEFSUk9XX0RPV05fS0VZID0gJ0Fycm93RG93bic7XG5jb25zdCBIT01FX0tFWSA9ICdIb21lJztcbmNvbnN0IEVORF9LRVkgPSAnRW5kJztcbmNvbnN0IENMQVNTX05BTUVfQUNUSVZFID0gJ2FjdGl2ZSc7XG5jb25zdCBDTEFTU19OQU1FX0ZBREUkMSA9ICdmYWRlJztcbmNvbnN0IENMQVNTX05BTUVfU0hPVyQxID0gJ3Nob3cnO1xuY29uc3QgQ0xBU1NfRFJPUERPV04gPSAnZHJvcGRvd24nO1xuY29uc3QgU0VMRUNUT1JfRFJPUERPV05fVE9HR0xFID0gJy5kcm9wZG93bi10b2dnbGUnO1xuY29uc3QgU0VMRUNUT1JfRFJPUERPV05fTUVOVSA9ICcuZHJvcGRvd24tbWVudSc7XG5jb25zdCBOT1RfU0VMRUNUT1JfRFJPUERPV05fVE9HR0xFID0gYDpub3QoJHtTRUxFQ1RPUl9EUk9QRE9XTl9UT0dHTEV9KWA7XG5jb25zdCBTRUxFQ1RPUl9UQUJfUEFORUwgPSAnLmxpc3QtZ3JvdXAsIC5uYXYsIFtyb2xlPVwidGFibGlzdFwiXSc7XG5jb25zdCBTRUxFQ1RPUl9PVVRFUiA9ICcubmF2LWl0ZW0sIC5saXN0LWdyb3VwLWl0ZW0nO1xuY29uc3QgU0VMRUNUT1JfSU5ORVIgPSBgLm5hdi1saW5rJHtOT1RfU0VMRUNUT1JfRFJPUERPV05fVE9HR0xFfSwgLmxpc3QtZ3JvdXAtaXRlbSR7Tk9UX1NFTEVDVE9SX0RST1BET1dOX1RPR0dMRX0sIFtyb2xlPVwidGFiXCJdJHtOT1RfU0VMRUNUT1JfRFJPUERPV05fVE9HR0xFfWA7XG5jb25zdCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSA9ICdbZGF0YS1icy10b2dnbGU9XCJ0YWJcIl0sIFtkYXRhLWJzLXRvZ2dsZT1cInBpbGxcIl0sIFtkYXRhLWJzLXRvZ2dsZT1cImxpc3RcIl0nOyAvLyBUT0RPOiBjb3VsZCBvbmx5IGJlIGB0YWJgIGluIHY2XG5jb25zdCBTRUxFQ1RPUl9JTk5FUl9FTEVNID0gYCR7U0VMRUNUT1JfSU5ORVJ9LCAke1NFTEVDVE9SX0RBVEFfVE9HR0xFfWA7XG5jb25zdCBTRUxFQ1RPUl9EQVRBX1RPR0dMRV9BQ1RJVkUgPSBgLiR7Q0xBU1NfTkFNRV9BQ1RJVkV9W2RhdGEtYnMtdG9nZ2xlPVwidGFiXCJdLCAuJHtDTEFTU19OQU1FX0FDVElWRX1bZGF0YS1icy10b2dnbGU9XCJwaWxsXCJdLCAuJHtDTEFTU19OQU1FX0FDVElWRX1bZGF0YS1icy10b2dnbGU9XCJsaXN0XCJdYDtcblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgVGFiIGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQpIHtcbiAgICBzdXBlcihlbGVtZW50KTtcbiAgICB0aGlzLl9wYXJlbnQgPSB0aGlzLl9lbGVtZW50LmNsb3Nlc3QoU0VMRUNUT1JfVEFCX1BBTkVMKTtcbiAgICBpZiAoIXRoaXMuX3BhcmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgICAgLy8gVE9ETzogc2hvdWxkIHRocm93IGV4Y2VwdGlvbiBpbiB2NlxuICAgICAgLy8gdGhyb3cgbmV3IFR5cGVFcnJvcihgJHtlbGVtZW50Lm91dGVySFRNTH0gaGFzIG5vdCBhIHZhbGlkIHBhcmVudCAke1NFTEVDVE9SX0lOTkVSX0VMRU19YClcbiAgICB9XG5cbiAgICAvLyBTZXQgdXAgaW5pdGlhbCBhcmlhIGF0dHJpYnV0ZXNcbiAgICB0aGlzLl9zZXRJbml0aWFsQXR0cmlidXRlcyh0aGlzLl9wYXJlbnQsIHRoaXMuX2dldENoaWxkcmVuKCkpO1xuICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9LRVlET1dOLCBldmVudCA9PiB0aGlzLl9rZXlkb3duKGV2ZW50KSk7XG4gIH1cblxuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRSQxO1xuICB9XG5cbiAgLy8gUHVibGljXG4gIHNob3coKSB7XG4gICAgLy8gU2hvd3MgdGhpcyBlbGVtIGFuZCBkZWFjdGl2YXRlIHRoZSBhY3RpdmUgc2libGluZyBpZiBleGlzdHNcbiAgICBjb25zdCBpbm5lckVsZW0gPSB0aGlzLl9lbGVtZW50O1xuICAgIGlmICh0aGlzLl9lbGVtSXNBY3RpdmUoaW5uZXJFbGVtKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFNlYXJjaCBmb3IgYWN0aXZlIHRhYiBvbiBzYW1lIHBhcmVudCB0byBkZWFjdGl2YXRlIGl0XG4gICAgY29uc3QgYWN0aXZlID0gdGhpcy5fZ2V0QWN0aXZlRWxlbSgpO1xuICAgIGNvbnN0IGhpZGVFdmVudCA9IGFjdGl2ZSA/IEV2ZW50SGFuZGxlci50cmlnZ2VyKGFjdGl2ZSwgRVZFTlRfSElERSQxLCB7XG4gICAgICByZWxhdGVkVGFyZ2V0OiBpbm5lckVsZW1cbiAgICB9KSA6IG51bGw7XG4gICAgY29uc3Qgc2hvd0V2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIoaW5uZXJFbGVtLCBFVkVOVF9TSE9XJDEsIHtcbiAgICAgIHJlbGF0ZWRUYXJnZXQ6IGFjdGl2ZVxuICAgIH0pO1xuICAgIGlmIChzaG93RXZlbnQuZGVmYXVsdFByZXZlbnRlZCB8fCBoaWRlRXZlbnQgJiYgaGlkZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fZGVhY3RpdmF0ZShhY3RpdmUsIGlubmVyRWxlbSk7XG4gICAgdGhpcy5fYWN0aXZhdGUoaW5uZXJFbGVtLCBhY3RpdmUpO1xuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfYWN0aXZhdGUoZWxlbWVudCwgcmVsYXRlZEVsZW0pIHtcbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfQUNUSVZFKTtcbiAgICB0aGlzLl9hY3RpdmF0ZShTZWxlY3RvckVuZ2luZS5nZXRFbGVtZW50RnJvbVNlbGVjdG9yKGVsZW1lbnQpKTsgLy8gU2VhcmNoIGFuZCBhY3RpdmF0ZS9zaG93IHRoZSBwcm9wZXIgc2VjdGlvblxuXG4gICAgY29uc3QgY29tcGxldGUgPSAoKSA9PiB7XG4gICAgICBpZiAoZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3JvbGUnKSAhPT0gJ3RhYicpIHtcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU0hPVyQxKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ3RhYmluZGV4Jyk7XG4gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1zZWxlY3RlZCcsIHRydWUpO1xuICAgICAgdGhpcy5fdG9nZ2xlRHJvcERvd24oZWxlbWVudCwgdHJ1ZSk7XG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcihlbGVtZW50LCBFVkVOVF9TSE9XTiQxLCB7XG4gICAgICAgIHJlbGF0ZWRUYXJnZXQ6IHJlbGF0ZWRFbGVtXG4gICAgICB9KTtcbiAgICB9O1xuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soY29tcGxldGUsIGVsZW1lbnQsIGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfRkFERSQxKSk7XG4gIH1cbiAgX2RlYWN0aXZhdGUoZWxlbWVudCwgcmVsYXRlZEVsZW0pIHtcbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfQUNUSVZFKTtcbiAgICBlbGVtZW50LmJsdXIoKTtcbiAgICB0aGlzLl9kZWFjdGl2YXRlKFNlbGVjdG9yRW5naW5lLmdldEVsZW1lbnRGcm9tU2VsZWN0b3IoZWxlbWVudCkpOyAvLyBTZWFyY2ggYW5kIGRlYWN0aXZhdGUgdGhlIHNob3duIHNlY3Rpb24gdG9vXG5cbiAgICBjb25zdCBjb21wbGV0ZSA9ICgpID0+IHtcbiAgICAgIGlmIChlbGVtZW50LmdldEF0dHJpYnV0ZSgncm9sZScpICE9PSAndGFiJykge1xuICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TSE9XJDEpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1zZWxlY3RlZCcsIGZhbHNlKTtcbiAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsICctMScpO1xuICAgICAgdGhpcy5fdG9nZ2xlRHJvcERvd24oZWxlbWVudCwgZmFsc2UpO1xuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIoZWxlbWVudCwgRVZFTlRfSElEREVOJDEsIHtcbiAgICAgICAgcmVsYXRlZFRhcmdldDogcmVsYXRlZEVsZW1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayhjb21wbGV0ZSwgZWxlbWVudCwgZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9GQURFJDEpKTtcbiAgfVxuICBfa2V5ZG93bihldmVudCkge1xuICAgIGlmICghW0FSUk9XX0xFRlRfS0VZLCBBUlJPV19SSUdIVF9LRVksIEFSUk9XX1VQX0tFWSwgQVJST1dfRE9XTl9LRVksIEhPTUVfS0VZLCBFTkRfS0VZXS5pbmNsdWRlcyhldmVudC5rZXkpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyAvLyBzdG9wUHJvcGFnYXRpb24vcHJldmVudERlZmF1bHQgYm90aCBhZGRlZCB0byBzdXBwb3J0IHVwL2Rvd24ga2V5cyB3aXRob3V0IHNjcm9sbGluZyB0aGUgcGFnZVxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLl9nZXRDaGlsZHJlbigpLmZpbHRlcihlbGVtZW50ID0+ICFpc0Rpc2FibGVkKGVsZW1lbnQpKTtcbiAgICBsZXQgbmV4dEFjdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKFtIT01FX0tFWSwgRU5EX0tFWV0uaW5jbHVkZXMoZXZlbnQua2V5KSkge1xuICAgICAgbmV4dEFjdGl2ZUVsZW1lbnQgPSBjaGlsZHJlbltldmVudC5rZXkgPT09IEhPTUVfS0VZID8gMCA6IGNoaWxkcmVuLmxlbmd0aCAtIDFdO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBpc05leHQgPSBbQVJST1dfUklHSFRfS0VZLCBBUlJPV19ET1dOX0tFWV0uaW5jbHVkZXMoZXZlbnQua2V5KTtcbiAgICAgIG5leHRBY3RpdmVFbGVtZW50ID0gZ2V0TmV4dEFjdGl2ZUVsZW1lbnQoY2hpbGRyZW4sIGV2ZW50LnRhcmdldCwgaXNOZXh0LCB0cnVlKTtcbiAgICB9XG4gICAgaWYgKG5leHRBY3RpdmVFbGVtZW50KSB7XG4gICAgICBuZXh0QWN0aXZlRWxlbWVudC5mb2N1cyh7XG4gICAgICAgIHByZXZlbnRTY3JvbGw6IHRydWVcbiAgICAgIH0pO1xuICAgICAgVGFiLmdldE9yQ3JlYXRlSW5zdGFuY2UobmV4dEFjdGl2ZUVsZW1lbnQpLnNob3coKTtcbiAgICB9XG4gIH1cbiAgX2dldENoaWxkcmVuKCkge1xuICAgIC8vIGNvbGxlY3Rpb24gb2YgaW5uZXIgZWxlbWVudHNcbiAgICByZXR1cm4gU2VsZWN0b3JFbmdpbmUuZmluZChTRUxFQ1RPUl9JTk5FUl9FTEVNLCB0aGlzLl9wYXJlbnQpO1xuICB9XG4gIF9nZXRBY3RpdmVFbGVtKCkge1xuICAgIHJldHVybiB0aGlzLl9nZXRDaGlsZHJlbigpLmZpbmQoY2hpbGQgPT4gdGhpcy5fZWxlbUlzQWN0aXZlKGNoaWxkKSkgfHwgbnVsbDtcbiAgfVxuICBfc2V0SW5pdGlhbEF0dHJpYnV0ZXMocGFyZW50LCBjaGlsZHJlbikge1xuICAgIHRoaXMuX3NldEF0dHJpYnV0ZUlmTm90RXhpc3RzKHBhcmVudCwgJ3JvbGUnLCAndGFibGlzdCcpO1xuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pIHtcbiAgICAgIHRoaXMuX3NldEluaXRpYWxBdHRyaWJ1dGVzT25DaGlsZChjaGlsZCk7XG4gICAgfVxuICB9XG4gIF9zZXRJbml0aWFsQXR0cmlidXRlc09uQ2hpbGQoY2hpbGQpIHtcbiAgICBjaGlsZCA9IHRoaXMuX2dldElubmVyRWxlbWVudChjaGlsZCk7XG4gICAgY29uc3QgaXNBY3RpdmUgPSB0aGlzLl9lbGVtSXNBY3RpdmUoY2hpbGQpO1xuICAgIGNvbnN0IG91dGVyRWxlbSA9IHRoaXMuX2dldE91dGVyRWxlbWVudChjaGlsZCk7XG4gICAgY2hpbGQuc2V0QXR0cmlidXRlKCdhcmlhLXNlbGVjdGVkJywgaXNBY3RpdmUpO1xuICAgIGlmIChvdXRlckVsZW0gIT09IGNoaWxkKSB7XG4gICAgICB0aGlzLl9zZXRBdHRyaWJ1dGVJZk5vdEV4aXN0cyhvdXRlckVsZW0sICdyb2xlJywgJ3ByZXNlbnRhdGlvbicpO1xuICAgIH1cbiAgICBpZiAoIWlzQWN0aXZlKSB7XG4gICAgICBjaGlsZC5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJy0xJyk7XG4gICAgfVxuICAgIHRoaXMuX3NldEF0dHJpYnV0ZUlmTm90RXhpc3RzKGNoaWxkLCAncm9sZScsICd0YWInKTtcblxuICAgIC8vIHNldCBhdHRyaWJ1dGVzIHRvIHRoZSByZWxhdGVkIHBhbmVsIHRvb1xuICAgIHRoaXMuX3NldEluaXRpYWxBdHRyaWJ1dGVzT25UYXJnZXRQYW5lbChjaGlsZCk7XG4gIH1cbiAgX3NldEluaXRpYWxBdHRyaWJ1dGVzT25UYXJnZXRQYW5lbChjaGlsZCkge1xuICAgIGNvbnN0IHRhcmdldCA9IFNlbGVjdG9yRW5naW5lLmdldEVsZW1lbnRGcm9tU2VsZWN0b3IoY2hpbGQpO1xuICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX3NldEF0dHJpYnV0ZUlmTm90RXhpc3RzKHRhcmdldCwgJ3JvbGUnLCAndGFicGFuZWwnKTtcbiAgICBpZiAoY2hpbGQuaWQpIHtcbiAgICAgIHRoaXMuX3NldEF0dHJpYnV0ZUlmTm90RXhpc3RzKHRhcmdldCwgJ2FyaWEtbGFiZWxsZWRieScsIGAke2NoaWxkLmlkfWApO1xuICAgIH1cbiAgfVxuICBfdG9nZ2xlRHJvcERvd24oZWxlbWVudCwgb3Blbikge1xuICAgIGNvbnN0IG91dGVyRWxlbSA9IHRoaXMuX2dldE91dGVyRWxlbWVudChlbGVtZW50KTtcbiAgICBpZiAoIW91dGVyRWxlbS5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfRFJPUERPV04pKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHRvZ2dsZSA9IChzZWxlY3RvciwgY2xhc3NOYW1lKSA9PiB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShzZWxlY3Rvciwgb3V0ZXJFbGVtKTtcbiAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LnRvZ2dsZShjbGFzc05hbWUsIG9wZW4pO1xuICAgICAgfVxuICAgIH07XG4gICAgdG9nZ2xlKFNFTEVDVE9SX0RST1BET1dOX1RPR0dMRSwgQ0xBU1NfTkFNRV9BQ1RJVkUpO1xuICAgIHRvZ2dsZShTRUxFQ1RPUl9EUk9QRE9XTl9NRU5VLCBDTEFTU19OQU1FX1NIT1ckMSk7XG4gICAgb3V0ZXJFbGVtLnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsIG9wZW4pO1xuICB9XG4gIF9zZXRBdHRyaWJ1dGVJZk5vdEV4aXN0cyhlbGVtZW50LCBhdHRyaWJ1dGUsIHZhbHVlKSB7XG4gICAgaWYgKCFlbGVtZW50Lmhhc0F0dHJpYnV0ZShhdHRyaWJ1dGUpKSB7XG4gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShhdHRyaWJ1dGUsIHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgX2VsZW1Jc0FjdGl2ZShlbGVtKSB7XG4gICAgcmV0dXJuIGVsZW0uY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfQUNUSVZFKTtcbiAgfVxuXG4gIC8vIFRyeSB0byBnZXQgdGhlIGlubmVyIGVsZW1lbnQgKHVzdWFsbHkgdGhlIC5uYXYtbGluaylcbiAgX2dldElubmVyRWxlbWVudChlbGVtKSB7XG4gICAgcmV0dXJuIGVsZW0ubWF0Y2hlcyhTRUxFQ1RPUl9JTk5FUl9FTEVNKSA/IGVsZW0gOiBTZWxlY3RvckVuZ2luZS5maW5kT25lKFNFTEVDVE9SX0lOTkVSX0VMRU0sIGVsZW0pO1xuICB9XG5cbiAgLy8gVHJ5IHRvIGdldCB0aGUgb3V0ZXIgZWxlbWVudCAodXN1YWxseSB0aGUgLm5hdi1pdGVtKVxuICBfZ2V0T3V0ZXJFbGVtZW50KGVsZW0pIHtcbiAgICByZXR1cm4gZWxlbS5jbG9zZXN0KFNFTEVDVE9SX09VVEVSKSB8fCBlbGVtO1xuICB9XG5cbiAgLy8gU3RhdGljXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0gVGFiLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcyk7XG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGRhdGFbY29uZmlnXSA9PT0gdW5kZWZpbmVkIHx8IGNvbmZpZy5zdGFydHNXaXRoKCdfJykgfHwgY29uZmlnID09PSAnY29uc3RydWN0b3InKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYCk7XG4gICAgICB9XG4gICAgICBkYXRhW2NvbmZpZ10oKTtcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIERhdGEgQVBJIGltcGxlbWVudGF0aW9uXG4gKi9cblxuRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9DTElDS19EQVRBX0FQSSwgU0VMRUNUT1JfREFUQV9UT0dHTEUsIGZ1bmN0aW9uIChldmVudCkge1xuICBpZiAoWydBJywgJ0FSRUEnXS5pbmNsdWRlcyh0aGlzLnRhZ05hbWUpKSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxuICBpZiAoaXNEaXNhYmxlZCh0aGlzKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBUYWIuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzKS5zaG93KCk7XG59KTtcblxuLyoqXG4gKiBJbml0aWFsaXplIG9uIGZvY3VzXG4gKi9cbkV2ZW50SGFuZGxlci5vbih3aW5kb3csIEVWRU5UX0xPQURfREFUQV9BUEksICgpID0+IHtcbiAgZm9yIChjb25zdCBlbGVtZW50IG9mIFNlbGVjdG9yRW5naW5lLmZpbmQoU0VMRUNUT1JfREFUQV9UT0dHTEVfQUNUSVZFKSkge1xuICAgIFRhYi5nZXRPckNyZWF0ZUluc3RhbmNlKGVsZW1lbnQpO1xuICB9XG59KTtcbi8qKlxuICogalF1ZXJ5XG4gKi9cblxuZGVmaW5lSlF1ZXJ5UGx1Z2luKFRhYik7XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCB0b2FzdC5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FID0gJ3RvYXN0JztcbmNvbnN0IERBVEFfS0VZID0gJ2JzLnRvYXN0JztcbmNvbnN0IEVWRU5UX0tFWSA9IGAuJHtEQVRBX0tFWX1gO1xuY29uc3QgRVZFTlRfTU9VU0VPVkVSID0gYG1vdXNlb3ZlciR7RVZFTlRfS0VZfWA7XG5jb25zdCBFVkVOVF9NT1VTRU9VVCA9IGBtb3VzZW91dCR7RVZFTlRfS0VZfWA7XG5jb25zdCBFVkVOVF9GT0NVU0lOID0gYGZvY3VzaW4ke0VWRU5UX0tFWX1gO1xuY29uc3QgRVZFTlRfRk9DVVNPVVQgPSBgZm9jdXNvdXQke0VWRU5UX0tFWX1gO1xuY29uc3QgRVZFTlRfSElERSA9IGBoaWRlJHtFVkVOVF9LRVl9YDtcbmNvbnN0IEVWRU5UX0hJRERFTiA9IGBoaWRkZW4ke0VWRU5UX0tFWX1gO1xuY29uc3QgRVZFTlRfU0hPVyA9IGBzaG93JHtFVkVOVF9LRVl9YDtcbmNvbnN0IEVWRU5UX1NIT1dOID0gYHNob3duJHtFVkVOVF9LRVl9YDtcbmNvbnN0IENMQVNTX05BTUVfRkFERSA9ICdmYWRlJztcbmNvbnN0IENMQVNTX05BTUVfSElERSA9ICdoaWRlJzsgLy8gQGRlcHJlY2F0ZWQgLSBrZXB0IGhlcmUgb25seSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbmNvbnN0IENMQVNTX05BTUVfU0hPVyA9ICdzaG93JztcbmNvbnN0IENMQVNTX05BTUVfU0hPV0lORyA9ICdzaG93aW5nJztcbmNvbnN0IERlZmF1bHRUeXBlID0ge1xuICBhbmltYXRpb246ICdib29sZWFuJyxcbiAgYXV0b2hpZGU6ICdib29sZWFuJyxcbiAgZGVsYXk6ICdudW1iZXInXG59O1xuY29uc3QgRGVmYXVsdCA9IHtcbiAgYW5pbWF0aW9uOiB0cnVlLFxuICBhdXRvaGlkZTogdHJ1ZSxcbiAgZGVsYXk6IDUwMDBcbn07XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIFRvYXN0IGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIGNvbmZpZykge1xuICAgIHN1cGVyKGVsZW1lbnQsIGNvbmZpZyk7XG4gICAgdGhpcy5fdGltZW91dCA9IG51bGw7XG4gICAgdGhpcy5faGFzTW91c2VJbnRlcmFjdGlvbiA9IGZhbHNlO1xuICAgIHRoaXMuX2hhc0tleWJvYXJkSW50ZXJhY3Rpb24gPSBmYWxzZTtcbiAgICB0aGlzLl9zZXRMaXN0ZW5lcnMoKTtcbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0O1xuICB9XG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRUeXBlO1xuICB9XG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRTtcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICBzaG93KCkge1xuICAgIGNvbnN0IHNob3dFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1cpO1xuICAgIGlmIChzaG93RXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9jbGVhclRpbWVvdXQoKTtcbiAgICBpZiAodGhpcy5fY29uZmlnLmFuaW1hdGlvbikge1xuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfRkFERSk7XG4gICAgfVxuICAgIGNvbnN0IGNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPV0lORyk7XG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XTik7XG4gICAgICB0aGlzLl9tYXliZVNjaGVkdWxlSGlkZSgpO1xuICAgIH07XG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfSElERSk7IC8vIEBkZXByZWNhdGVkXG4gICAgcmVmbG93KHRoaXMuX2VsZW1lbnQpO1xuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1NIT1csIENMQVNTX05BTUVfU0hPV0lORyk7XG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayhjb21wbGV0ZSwgdGhpcy5fZWxlbWVudCwgdGhpcy5fY29uZmlnLmFuaW1hdGlvbik7XG4gIH1cbiAgaGlkZSgpIHtcbiAgICBpZiAoIXRoaXMuaXNTaG93bigpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGhpZGVFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJREUpO1xuICAgIGlmIChoaWRlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjb21wbGV0ZSA9ICgpID0+IHtcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0hJREUpOyAvLyBAZGVwcmVjYXRlZFxuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPV0lORywgQ0xBU1NfTkFNRV9TSE9XKTtcbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJRERFTik7XG4gICAgfTtcbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9TSE9XSU5HKTtcbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKGNvbXBsZXRlLCB0aGlzLl9lbGVtZW50LCB0aGlzLl9jb25maWcuYW5pbWF0aW9uKTtcbiAgfVxuICBkaXNwb3NlKCkge1xuICAgIHRoaXMuX2NsZWFyVGltZW91dCgpO1xuICAgIGlmICh0aGlzLmlzU2hvd24oKSkge1xuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPVyk7XG4gICAgfVxuICAgIHN1cGVyLmRpc3Bvc2UoKTtcbiAgfVxuICBpc1Nob3duKCkge1xuICAgIHJldHVybiB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX1NIT1cpO1xuICB9XG5cbiAgLy8gUHJpdmF0ZVxuXG4gIF9tYXliZVNjaGVkdWxlSGlkZSgpIHtcbiAgICBpZiAoIXRoaXMuX2NvbmZpZy5hdXRvaGlkZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5faGFzTW91c2VJbnRlcmFjdGlvbiB8fCB0aGlzLl9oYXNLZXlib2FyZEludGVyYWN0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX3RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuaGlkZSgpO1xuICAgIH0sIHRoaXMuX2NvbmZpZy5kZWxheSk7XG4gIH1cbiAgX29uSW50ZXJhY3Rpb24oZXZlbnQsIGlzSW50ZXJhY3RpbmcpIHtcbiAgICBzd2l0Y2ggKGV2ZW50LnR5cGUpIHtcbiAgICAgIGNhc2UgJ21vdXNlb3Zlcic6XG4gICAgICBjYXNlICdtb3VzZW91dCc6XG4gICAgICAgIHtcbiAgICAgICAgICB0aGlzLl9oYXNNb3VzZUludGVyYWN0aW9uID0gaXNJbnRlcmFjdGluZztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgY2FzZSAnZm9jdXNpbic6XG4gICAgICBjYXNlICdmb2N1c291dCc6XG4gICAgICAgIHtcbiAgICAgICAgICB0aGlzLl9oYXNLZXlib2FyZEludGVyYWN0aW9uID0gaXNJbnRlcmFjdGluZztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNJbnRlcmFjdGluZykge1xuICAgICAgdGhpcy5fY2xlYXJUaW1lb3V0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG5leHRFbGVtZW50ID0gZXZlbnQucmVsYXRlZFRhcmdldDtcbiAgICBpZiAodGhpcy5fZWxlbWVudCA9PT0gbmV4dEVsZW1lbnQgfHwgdGhpcy5fZWxlbWVudC5jb250YWlucyhuZXh0RWxlbWVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fbWF5YmVTY2hlZHVsZUhpZGUoKTtcbiAgfVxuICBfc2V0TGlzdGVuZXJzKCkge1xuICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9NT1VTRU9WRVIsIGV2ZW50ID0+IHRoaXMuX29uSW50ZXJhY3Rpb24oZXZlbnQsIHRydWUpKTtcbiAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfTU9VU0VPVVQsIGV2ZW50ID0+IHRoaXMuX29uSW50ZXJhY3Rpb24oZXZlbnQsIGZhbHNlKSk7XG4gICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0ZPQ1VTSU4sIGV2ZW50ID0+IHRoaXMuX29uSW50ZXJhY3Rpb24oZXZlbnQsIHRydWUpKTtcbiAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfRk9DVVNPVVQsIGV2ZW50ID0+IHRoaXMuX29uSW50ZXJhY3Rpb24oZXZlbnQsIGZhbHNlKSk7XG4gIH1cbiAgX2NsZWFyVGltZW91dCgpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dCk7XG4gICAgdGhpcy5fdGltZW91dCA9IG51bGw7XG4gIH1cblxuICAvLyBTdGF0aWNcbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBUb2FzdC5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMsIGNvbmZpZyk7XG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBkYXRhW2NvbmZpZ10gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkIFwiJHtjb25maWd9XCJgKTtcbiAgICAgICAgfVxuICAgICAgICBkYXRhW2NvbmZpZ10odGhpcyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBEYXRhIEFQSSBpbXBsZW1lbnRhdGlvblxuICovXG5cbmVuYWJsZURpc21pc3NUcmlnZ2VyKFRvYXN0KTtcblxuLyoqXG4gKiBqUXVlcnlcbiAqL1xuXG5kZWZpbmVKUXVlcnlQbHVnaW4oVG9hc3QpO1xuXG5leHBvcnQgeyBBbGVydCwgQnV0dG9uLCBDYXJvdXNlbCwgQ29sbGFwc2UsIERyb3Bkb3duLCBNb2RhbCwgT2ZmY2FudmFzLCBQb3BvdmVyLCBTY3JvbGxTcHksIFRhYiwgVG9hc3QsIFRvb2x0aXAgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJvb3RzdHJhcC5lc20uanMubWFwXG4iLCJmdW5jdGlvbiBwcm9taXNpZnlSZXF1ZXN0KHJlcXVlc3QpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAvLyBAdHMtaWdub3JlIC0gZmlsZSBzaXplIGhhY2tzXG4gICAgICAgIHJlcXVlc3Qub25jb21wbGV0ZSA9IHJlcXVlc3Qub25zdWNjZXNzID0gKCkgPT4gcmVzb2x2ZShyZXF1ZXN0LnJlc3VsdCk7XG4gICAgICAgIC8vIEB0cy1pZ25vcmUgLSBmaWxlIHNpemUgaGFja3NcbiAgICAgICAgcmVxdWVzdC5vbmFib3J0ID0gcmVxdWVzdC5vbmVycm9yID0gKCkgPT4gcmVqZWN0KHJlcXVlc3QuZXJyb3IpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gY3JlYXRlU3RvcmUoZGJOYW1lLCBzdG9yZU5hbWUpIHtcbiAgICBjb25zdCByZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4oZGJOYW1lKTtcbiAgICByZXF1ZXN0Lm9udXBncmFkZW5lZWRlZCA9ICgpID0+IHJlcXVlc3QucmVzdWx0LmNyZWF0ZU9iamVjdFN0b3JlKHN0b3JlTmFtZSk7XG4gICAgY29uc3QgZGJwID0gcHJvbWlzaWZ5UmVxdWVzdChyZXF1ZXN0KTtcbiAgICByZXR1cm4gKHR4TW9kZSwgY2FsbGJhY2spID0+IGRicC50aGVuKChkYikgPT4gY2FsbGJhY2soZGIudHJhbnNhY3Rpb24oc3RvcmVOYW1lLCB0eE1vZGUpLm9iamVjdFN0b3JlKHN0b3JlTmFtZSkpKTtcbn1cbmxldCBkZWZhdWx0R2V0U3RvcmVGdW5jO1xuZnVuY3Rpb24gZGVmYXVsdEdldFN0b3JlKCkge1xuICAgIGlmICghZGVmYXVsdEdldFN0b3JlRnVuYykge1xuICAgICAgICBkZWZhdWx0R2V0U3RvcmVGdW5jID0gY3JlYXRlU3RvcmUoJ2tleXZhbC1zdG9yZScsICdrZXl2YWwnKTtcbiAgICB9XG4gICAgcmV0dXJuIGRlZmF1bHRHZXRTdG9yZUZ1bmM7XG59XG4vKipcbiAqIEdldCBhIHZhbHVlIGJ5IGl0cyBrZXkuXG4gKlxuICogQHBhcmFtIGtleVxuICogQHBhcmFtIGN1c3RvbVN0b3JlIE1ldGhvZCB0byBnZXQgYSBjdXN0b20gc3RvcmUuIFVzZSB3aXRoIGNhdXRpb24gKHNlZSB0aGUgZG9jcykuXG4gKi9cbmZ1bmN0aW9uIGdldChrZXksIGN1c3RvbVN0b3JlID0gZGVmYXVsdEdldFN0b3JlKCkpIHtcbiAgICByZXR1cm4gY3VzdG9tU3RvcmUoJ3JlYWRvbmx5JywgKHN0b3JlKSA9PiBwcm9taXNpZnlSZXF1ZXN0KHN0b3JlLmdldChrZXkpKSk7XG59XG4vKipcbiAqIFNldCBhIHZhbHVlIHdpdGggYSBrZXkuXG4gKlxuICogQHBhcmFtIGtleVxuICogQHBhcmFtIHZhbHVlXG4gKiBAcGFyYW0gY3VzdG9tU3RvcmUgTWV0aG9kIHRvIGdldCBhIGN1c3RvbSBzdG9yZS4gVXNlIHdpdGggY2F1dGlvbiAoc2VlIHRoZSBkb2NzKS5cbiAqL1xuZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUsIGN1c3RvbVN0b3JlID0gZGVmYXVsdEdldFN0b3JlKCkpIHtcbiAgICByZXR1cm4gY3VzdG9tU3RvcmUoJ3JlYWR3cml0ZScsIChzdG9yZSkgPT4ge1xuICAgICAgICBzdG9yZS5wdXQodmFsdWUsIGtleSk7XG4gICAgICAgIHJldHVybiBwcm9taXNpZnlSZXF1ZXN0KHN0b3JlLnRyYW5zYWN0aW9uKTtcbiAgICB9KTtcbn1cbi8qKlxuICogU2V0IG11bHRpcGxlIHZhbHVlcyBhdCBvbmNlLiBUaGlzIGlzIGZhc3RlciB0aGFuIGNhbGxpbmcgc2V0KCkgbXVsdGlwbGUgdGltZXMuXG4gKiBJdCdzIGFsc28gYXRvbWljIOKAkyBpZiBvbmUgb2YgdGhlIHBhaXJzIGNhbid0IGJlIGFkZGVkLCBub25lIHdpbGwgYmUgYWRkZWQuXG4gKlxuICogQHBhcmFtIGVudHJpZXMgQXJyYXkgb2YgZW50cmllcywgd2hlcmUgZWFjaCBlbnRyeSBpcyBhbiBhcnJheSBvZiBgW2tleSwgdmFsdWVdYC5cbiAqIEBwYXJhbSBjdXN0b21TdG9yZSBNZXRob2QgdG8gZ2V0IGEgY3VzdG9tIHN0b3JlLiBVc2Ugd2l0aCBjYXV0aW9uIChzZWUgdGhlIGRvY3MpLlxuICovXG5mdW5jdGlvbiBzZXRNYW55KGVudHJpZXMsIGN1c3RvbVN0b3JlID0gZGVmYXVsdEdldFN0b3JlKCkpIHtcbiAgICByZXR1cm4gY3VzdG9tU3RvcmUoJ3JlYWR3cml0ZScsIChzdG9yZSkgPT4ge1xuICAgICAgICBlbnRyaWVzLmZvckVhY2goKGVudHJ5KSA9PiBzdG9yZS5wdXQoZW50cnlbMV0sIGVudHJ5WzBdKSk7XG4gICAgICAgIHJldHVybiBwcm9taXNpZnlSZXF1ZXN0KHN0b3JlLnRyYW5zYWN0aW9uKTtcbiAgICB9KTtcbn1cbi8qKlxuICogR2V0IG11bHRpcGxlIHZhbHVlcyBieSB0aGVpciBrZXlzXG4gKlxuICogQHBhcmFtIGtleXNcbiAqIEBwYXJhbSBjdXN0b21TdG9yZSBNZXRob2QgdG8gZ2V0IGEgY3VzdG9tIHN0b3JlLiBVc2Ugd2l0aCBjYXV0aW9uIChzZWUgdGhlIGRvY3MpLlxuICovXG5mdW5jdGlvbiBnZXRNYW55KGtleXMsIGN1c3RvbVN0b3JlID0gZGVmYXVsdEdldFN0b3JlKCkpIHtcbiAgICByZXR1cm4gY3VzdG9tU3RvcmUoJ3JlYWRvbmx5JywgKHN0b3JlKSA9PiBQcm9taXNlLmFsbChrZXlzLm1hcCgoa2V5KSA9PiBwcm9taXNpZnlSZXF1ZXN0KHN0b3JlLmdldChrZXkpKSkpKTtcbn1cbi8qKlxuICogVXBkYXRlIGEgdmFsdWUuIFRoaXMgbGV0cyB5b3Ugc2VlIHRoZSBvbGQgdmFsdWUgYW5kIHVwZGF0ZSBpdCBhcyBhbiBhdG9taWMgb3BlcmF0aW9uLlxuICpcbiAqIEBwYXJhbSBrZXlcbiAqIEBwYXJhbSB1cGRhdGVyIEEgY2FsbGJhY2sgdGhhdCB0YWtlcyB0aGUgb2xkIHZhbHVlIGFuZCByZXR1cm5zIGEgbmV3IHZhbHVlLlxuICogQHBhcmFtIGN1c3RvbVN0b3JlIE1ldGhvZCB0byBnZXQgYSBjdXN0b20gc3RvcmUuIFVzZSB3aXRoIGNhdXRpb24gKHNlZSB0aGUgZG9jcykuXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZShrZXksIHVwZGF0ZXIsIGN1c3RvbVN0b3JlID0gZGVmYXVsdEdldFN0b3JlKCkpIHtcbiAgICByZXR1cm4gY3VzdG9tU3RvcmUoJ3JlYWR3cml0ZScsIChzdG9yZSkgPT4gXG4gICAgLy8gTmVlZCB0byBjcmVhdGUgdGhlIHByb21pc2UgbWFudWFsbHkuXG4gICAgLy8gSWYgSSB0cnkgdG8gY2hhaW4gcHJvbWlzZXMsIHRoZSB0cmFuc2FjdGlvbiBjbG9zZXMgaW4gYnJvd3NlcnNcbiAgICAvLyB0aGF0IHVzZSBhIHByb21pc2UgcG9seWZpbGwgKElFMTAvMTEpLlxuICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgc3RvcmUuZ2V0KGtleSkub25zdWNjZXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBzdG9yZS5wdXQodXBkYXRlcih0aGlzLnJlc3VsdCksIGtleSk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShwcm9taXNpZnlSZXF1ZXN0KHN0b3JlLnRyYW5zYWN0aW9uKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfSkpO1xufVxuLyoqXG4gKiBEZWxldGUgYSBwYXJ0aWN1bGFyIGtleSBmcm9tIHRoZSBzdG9yZS5cbiAqXG4gKiBAcGFyYW0ga2V5XG4gKiBAcGFyYW0gY3VzdG9tU3RvcmUgTWV0aG9kIHRvIGdldCBhIGN1c3RvbSBzdG9yZS4gVXNlIHdpdGggY2F1dGlvbiAoc2VlIHRoZSBkb2NzKS5cbiAqL1xuZnVuY3Rpb24gZGVsKGtleSwgY3VzdG9tU3RvcmUgPSBkZWZhdWx0R2V0U3RvcmUoKSkge1xuICAgIHJldHVybiBjdXN0b21TdG9yZSgncmVhZHdyaXRlJywgKHN0b3JlKSA9PiB7XG4gICAgICAgIHN0b3JlLmRlbGV0ZShrZXkpO1xuICAgICAgICByZXR1cm4gcHJvbWlzaWZ5UmVxdWVzdChzdG9yZS50cmFuc2FjdGlvbik7XG4gICAgfSk7XG59XG4vKipcbiAqIERlbGV0ZSBtdWx0aXBsZSBrZXlzIGF0IG9uY2UuXG4gKlxuICogQHBhcmFtIGtleXMgTGlzdCBvZiBrZXlzIHRvIGRlbGV0ZS5cbiAqIEBwYXJhbSBjdXN0b21TdG9yZSBNZXRob2QgdG8gZ2V0IGEgY3VzdG9tIHN0b3JlLiBVc2Ugd2l0aCBjYXV0aW9uIChzZWUgdGhlIGRvY3MpLlxuICovXG5mdW5jdGlvbiBkZWxNYW55KGtleXMsIGN1c3RvbVN0b3JlID0gZGVmYXVsdEdldFN0b3JlKCkpIHtcbiAgICByZXR1cm4gY3VzdG9tU3RvcmUoJ3JlYWR3cml0ZScsIChzdG9yZSkgPT4ge1xuICAgICAgICBrZXlzLmZvckVhY2goKGtleSkgPT4gc3RvcmUuZGVsZXRlKGtleSkpO1xuICAgICAgICByZXR1cm4gcHJvbWlzaWZ5UmVxdWVzdChzdG9yZS50cmFuc2FjdGlvbik7XG4gICAgfSk7XG59XG4vKipcbiAqIENsZWFyIGFsbCB2YWx1ZXMgaW4gdGhlIHN0b3JlLlxuICpcbiAqIEBwYXJhbSBjdXN0b21TdG9yZSBNZXRob2QgdG8gZ2V0IGEgY3VzdG9tIHN0b3JlLiBVc2Ugd2l0aCBjYXV0aW9uIChzZWUgdGhlIGRvY3MpLlxuICovXG5mdW5jdGlvbiBjbGVhcihjdXN0b21TdG9yZSA9IGRlZmF1bHRHZXRTdG9yZSgpKSB7XG4gICAgcmV0dXJuIGN1c3RvbVN0b3JlKCdyZWFkd3JpdGUnLCAoc3RvcmUpID0+IHtcbiAgICAgICAgc3RvcmUuY2xlYXIoKTtcbiAgICAgICAgcmV0dXJuIHByb21pc2lmeVJlcXVlc3Qoc3RvcmUudHJhbnNhY3Rpb24pO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZWFjaEN1cnNvcihzdG9yZSwgY2FsbGJhY2spIHtcbiAgICBzdG9yZS5vcGVuQ3Vyc29yKCkub25zdWNjZXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMucmVzdWx0KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjYWxsYmFjayh0aGlzLnJlc3VsdCk7XG4gICAgICAgIHRoaXMucmVzdWx0LmNvbnRpbnVlKCk7XG4gICAgfTtcbiAgICByZXR1cm4gcHJvbWlzaWZ5UmVxdWVzdChzdG9yZS50cmFuc2FjdGlvbik7XG59XG4vKipcbiAqIEdldCBhbGwga2V5cyBpbiB0aGUgc3RvcmUuXG4gKlxuICogQHBhcmFtIGN1c3RvbVN0b3JlIE1ldGhvZCB0byBnZXQgYSBjdXN0b20gc3RvcmUuIFVzZSB3aXRoIGNhdXRpb24gKHNlZSB0aGUgZG9jcykuXG4gKi9cbmZ1bmN0aW9uIGtleXMoY3VzdG9tU3RvcmUgPSBkZWZhdWx0R2V0U3RvcmUoKSkge1xuICAgIHJldHVybiBjdXN0b21TdG9yZSgncmVhZG9ubHknLCAoc3RvcmUpID0+IHtcbiAgICAgICAgLy8gRmFzdCBwYXRoIGZvciBtb2Rlcm4gYnJvd3NlcnNcbiAgICAgICAgaWYgKHN0b3JlLmdldEFsbEtleXMpIHtcbiAgICAgICAgICAgIHJldHVybiBwcm9taXNpZnlSZXF1ZXN0KHN0b3JlLmdldEFsbEtleXMoKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXRlbXMgPSBbXTtcbiAgICAgICAgcmV0dXJuIGVhY2hDdXJzb3Ioc3RvcmUsIChjdXJzb3IpID0+IGl0ZW1zLnB1c2goY3Vyc29yLmtleSkpLnRoZW4oKCkgPT4gaXRlbXMpO1xuICAgIH0pO1xufVxuLyoqXG4gKiBHZXQgYWxsIHZhbHVlcyBpbiB0aGUgc3RvcmUuXG4gKlxuICogQHBhcmFtIGN1c3RvbVN0b3JlIE1ldGhvZCB0byBnZXQgYSBjdXN0b20gc3RvcmUuIFVzZSB3aXRoIGNhdXRpb24gKHNlZSB0aGUgZG9jcykuXG4gKi9cbmZ1bmN0aW9uIHZhbHVlcyhjdXN0b21TdG9yZSA9IGRlZmF1bHRHZXRTdG9yZSgpKSB7XG4gICAgcmV0dXJuIGN1c3RvbVN0b3JlKCdyZWFkb25seScsIChzdG9yZSkgPT4ge1xuICAgICAgICAvLyBGYXN0IHBhdGggZm9yIG1vZGVybiBicm93c2Vyc1xuICAgICAgICBpZiAoc3RvcmUuZ2V0QWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJvbWlzaWZ5UmVxdWVzdChzdG9yZS5nZXRBbGwoKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXRlbXMgPSBbXTtcbiAgICAgICAgcmV0dXJuIGVhY2hDdXJzb3Ioc3RvcmUsIChjdXJzb3IpID0+IGl0ZW1zLnB1c2goY3Vyc29yLnZhbHVlKSkudGhlbigoKSA9PiBpdGVtcyk7XG4gICAgfSk7XG59XG4vKipcbiAqIEdldCBhbGwgZW50cmllcyBpbiB0aGUgc3RvcmUuIEVhY2ggZW50cnkgaXMgYW4gYXJyYXkgb2YgYFtrZXksIHZhbHVlXWAuXG4gKlxuICogQHBhcmFtIGN1c3RvbVN0b3JlIE1ldGhvZCB0byBnZXQgYSBjdXN0b20gc3RvcmUuIFVzZSB3aXRoIGNhdXRpb24gKHNlZSB0aGUgZG9jcykuXG4gKi9cbmZ1bmN0aW9uIGVudHJpZXMoY3VzdG9tU3RvcmUgPSBkZWZhdWx0R2V0U3RvcmUoKSkge1xuICAgIHJldHVybiBjdXN0b21TdG9yZSgncmVhZG9ubHknLCAoc3RvcmUpID0+IHtcbiAgICAgICAgLy8gRmFzdCBwYXRoIGZvciBtb2Rlcm4gYnJvd3NlcnNcbiAgICAgICAgLy8gKGFsdGhvdWdoLCBob3BlZnVsbHkgd2UnbGwgZ2V0IGEgc2ltcGxlciBwYXRoIHNvbWUgZGF5KVxuICAgICAgICBpZiAoc3RvcmUuZ2V0QWxsICYmIHN0b3JlLmdldEFsbEtleXMpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChbXG4gICAgICAgICAgICAgICAgcHJvbWlzaWZ5UmVxdWVzdChzdG9yZS5nZXRBbGxLZXlzKCkpLFxuICAgICAgICAgICAgICAgIHByb21pc2lmeVJlcXVlc3Qoc3RvcmUuZ2V0QWxsKCkpLFxuICAgICAgICAgICAgXSkudGhlbigoW2tleXMsIHZhbHVlc10pID0+IGtleXMubWFwKChrZXksIGkpID0+IFtrZXksIHZhbHVlc1tpXV0pKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpdGVtcyA9IFtdO1xuICAgICAgICByZXR1cm4gY3VzdG9tU3RvcmUoJ3JlYWRvbmx5JywgKHN0b3JlKSA9PiBlYWNoQ3Vyc29yKHN0b3JlLCAoY3Vyc29yKSA9PiBpdGVtcy5wdXNoKFtjdXJzb3Iua2V5LCBjdXJzb3IudmFsdWVdKSkudGhlbigoKSA9PiBpdGVtcykpO1xuICAgIH0pO1xufVxuXG5leHBvcnQgeyBjbGVhciwgY3JlYXRlU3RvcmUsIGRlbCwgZGVsTWFueSwgZW50cmllcywgZ2V0LCBnZXRNYW55LCBrZXlzLCBwcm9taXNpZnlSZXF1ZXN0LCBzZXQsIHNldE1hbnksIHVwZGF0ZSwgdmFsdWVzIH07XG4iLCJpbXBvcnQgeyBJbWFnZVR5cGUgfSBmcm9tIFwiLi9zdmctY29udmVydFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjaGVja1N1cHBvcnQodHlwZTogSW1hZ2VUeXBlKTogYm9vbGVhbiB7XG4gICAgaWYgKHR5cGUgPT0gXCJwbmdcIikgcmV0dXJuIHRydWU7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIENsaXBib2FyZEl0ZW0uc3VwcG9ydHMoKHR5cGUgPT0gXCJzdmdcIikgPyBcImltYWdlL3N2Zyt4bWxcIiA6IFwiaW1hZ2UvanBlZ1wiKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIsIFwiIC0gZXJyb3IgPSBubyBzdXBwb3J0IGZvciBQTkdcIik7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59IiwiaW1wb3J0IFwiLi9zZXR0aW5ncy5zY3NzXCI7XG5pbXBvcnQgKiBhcyBib290c3RyYXAgZnJvbSBcImJvb3RzdHJhcFwiO1xuaW1wb3J0IHsgZ2V0IGFzIGlkYkdldCwgc2V0IGFzIGlkYlNldCB9IGZyb20gXCJpZGIta2V5dmFsXCI7XG5pbXBvcnQgY2hlY2tTdXBwb3J0IGZyb20gXCIuL2xpYi9jaGVjay1zdXBwb3J0XCI7XG5cbmNvbnN0IERPTSA9IHtcbiAgICBcInNpemVcIjoge1xuICAgICAgICBcIndpZHRoXCI6IChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI3NpemUtd2lkdGhcIikgYXMgSFRNTElucHV0RWxlbWVudCksXG4gICAgICAgIFwiaGVpZ2h0XCI6IChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI3NpemUtaGVpZ2h0XCIpIGFzIEhUTUxJbnB1dEVsZW1lbnQpXG4gICAgfSxcbiAgICBcIm1haW5cIjogKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjY2FyZC1ib2R5XCIpIGFzIEhUTUxEaXZFbGVtZW50KVxufTtcblxud2luZG93Lm9ubG9hZCA9IGFzeW5jICgpID0+IHtcbiAgICBsZXQgc2l6ZSA9IGF3YWl0IGlkYkdldChcInNpemVcIikgPz8gMjAwMDtcbiAgICBET00uc2l6ZS53aWR0aC52YWx1ZSA9IHNpemU7XG4gICAgRE9NLnNpemUuaGVpZ2h0LnZhbHVlID0gc2l6ZTtcbiAgICBjb25zb2xlLmxvZyhzaXplKTtcblxuICAgIERPTS5zaXplLndpZHRoLm9ua2V5dXAgPSBET00uc2l6ZS53aWR0aC5vbnBhc3RlID0gRE9NLnNpemUud2lkdGgub25jaGFuZ2UgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IGlkYlNldChcInNpemVcIiwgRE9NLnNpemUud2lkdGgudmFsdWUpO1xuICAgICAgICBET00uc2l6ZS5oZWlnaHQudmFsdWUgPSBET00uc2l6ZS53aWR0aC52YWx1ZTtcbiAgICB9XG5cbiAgICBsZXQgc3VwcG9ydGVkVHlwZXMgPSBbXCJwbmdcIl07XG5cbiAgICB0cnkge1xuICAgICAgICBpZiAoY2hlY2tTdXBwb3J0KFwic3ZnXCIpKSB7XG4gICAgICAgICAgICBzdXBwb3J0ZWRUeXBlcy5wdXNoKFwic3ZnXCIpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoZWNrU3VwcG9ydChcImpwZWdcIikpIHtcbiAgICAgICAgICAgIHN1cHBvcnRlZFR5cGVzLnB1c2goXCJqcGVnXCIpO1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiQ2xpcGJvYXJkSXRlbS5zdXBwb3J0cygpIGVycm9yLCByZXBvcnRpbmcgUE5HLW9ubHkgc3VwcG9ydFwiKTtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgIH1cblxuICAgIGxldCB1bnN1cHBvcnRlZFR5cGVzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB1bnN1cHBvcnRlZFR5cGVzLmNsYXNzTGlzdC5hZGQoXCJpbnB1dC1ncm91cFwiLCBcInVzLXR5cGVzXCIpO1xuXG4gICAgbGV0IHN2Z0J0biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIik7XG4gICAgc3ZnQnRuLmNsYXNzTGlzdC5hZGQoXCJidG5cIiwgXCJidG4tb3V0bGluZS1zZWNvbmRhcnlcIiwgXCJkcm9wZG93bi10b2dnbGVcIik7XG4gICAgc3ZnQnRuLnNldEF0dHJpYnV0ZShcImRhdGEtYnMtdG9nZ2xlXCIsIFwiZHJvcGRvd25cIik7XG4gICAgc3ZnQnRuLnNldEF0dHJpYnV0ZShcImFyaWEtZXhwYW5kZWRcIiwgXCJmYWxzZVwiKTtcbiAgICBzdmdCdG4uaW5uZXJUZXh0ID0gXCJDb3B5IFNWR3MgYXNcIjtcbiAgICB1bnN1cHBvcnRlZFR5cGVzLmFwcGVuZENoaWxkKHN2Z0J0bik7XG5cbiAgICBsZXQgc3ZnU2VsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInVsXCIpO1xuICAgIHN2Z1NlbC5jbGFzc0xpc3QuYWRkKFwiZHJvcGRvd24tbWVudVwiKTtcblxuICAgIGlmIChzdXBwb3J0ZWRUeXBlcy5pbmNsdWRlcyhcInN2Z1wiKSkge1xuICAgICAgICBsZXQgY29weVNWR0NvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaVwiKTtcbiAgICAgICAgbGV0IGNvcHlTVkcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcbiAgICAgICAgY29weVNWRy5jbGFzc0xpc3QuYWRkKFwiZHJvcGRvd24taXRlbVwiKTtcbiAgICAgICAgY29weVNWRy5pZCA9IFwic3ZnLWNvcHktc3ZnXCI7XG4gICAgICAgIGNvcHlTVkcuaHJlZiA9IFwiI1wiO1xuICAgICAgICBjb3B5U1ZHLm9uY2xpY2sgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCBpZGJTZXQoXCJjb3B5LXN2Z1wiLCBcInN2Z1wiKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29weVNWRy5pbm5lclRleHQgPSBcIlNWR1wiO1xuICAgICAgICBjb3B5U1ZHQ29udGFpbmVyLmFwcGVuZENoaWxkKGNvcHlTVkcpO1xuICAgICAgICBzdmdTZWwuYXBwZW5kQ2hpbGQoY29weVNWR0NvbnRhaW5lcik7XG4gICAgfVxuXG4gICAgbGV0IHN2Z0NvcHlUZXh0Q29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImxpXCIpO1xuICAgIGxldCBzdmdDb3B5VGV4dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xuICAgIHN2Z0NvcHlUZXh0LmNsYXNzTGlzdC5hZGQoXCJkcm9wZG93bi1pdGVtXCIpO1xuICAgIHN2Z0NvcHlUZXh0LmlkID0gXCJzdmctY29weS10ZXh0XCI7XG4gICAgc3ZnQ29weVRleHQuaHJlZiA9IFwiI1wiO1xuICAgIHN2Z0NvcHlUZXh0Lm9uY2xpY2sgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IGlkYlNldChcImNvcHktc3ZnXCIsIFwidGV4dFwiKTtcbiAgICB9O1xuICAgIHN2Z0NvcHlUZXh0LmlubmVyVGV4dCA9IFwiVGV4dFwiO1xuICAgIHN2Z0NvcHlUZXh0Q29udGFpbmVyLmFwcGVuZENoaWxkKHN2Z0NvcHlUZXh0KTtcbiAgICBzdmdTZWwuYXBwZW5kQ2hpbGQoc3ZnQ29weVRleHRDb250YWluZXIpO1xuXG4gICAgbGV0IHN2Z0NvcHlQTkdDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGlcIik7XG4gICAgbGV0IHN2Z0NvcHlQTkcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcbiAgICBzdmdDb3B5UE5HLmNsYXNzTGlzdC5hZGQoXCJkcm9wZG93bi1pdGVtXCIpO1xuICAgIHN2Z0NvcHlQTkcuaWQgPSBcInN2Zy1jb3B5LXBuZ1wiO1xuICAgIHN2Z0NvcHlQTkcuaHJlZiA9IFwiI1wiO1xuICAgIHN2Z0NvcHlQTkcub25jbGljayA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgaWRiU2V0KFwiY29weS1zdmdcIiwgXCJwbmdcIik7XG4gICAgfTtcbiAgICBzdmdDb3B5UE5HLmlubmVyVGV4dCA9IFwiUE5HXCI7XG4gICAgc3ZnQ29weVBOR0NvbnRhaW5lci5hcHBlbmRDaGlsZChzdmdDb3B5UE5HKTtcbiAgICBzdmdTZWwuYXBwZW5kQ2hpbGQoc3ZnQ29weVBOR0NvbnRhaW5lcik7XG5cbiAgICB1bnN1cHBvcnRlZFR5cGVzLmFwcGVuZENoaWxkKHN2Z1NlbCk7XG5cbiAgICBuZXcgYm9vdHN0cmFwLkRyb3Bkb3duKHN2Z0J0bik7XG5cbiAgICBsZXQganBnQnRuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiKTtcbiAgICBqcGdCdG4uY2xhc3NMaXN0LmFkZChcImJ0blwiLCBcImJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiLCBcImRyb3Bkb3duLXRvZ2dsZVwiKTtcbiAgICBqcGdCdG4uc2V0QXR0cmlidXRlKFwiZGF0YS1icy10b2dnbGVcIiwgXCJkcm9wZG93blwiKTtcbiAgICBqcGdCdG4uc2V0QXR0cmlidXRlKFwiYXJpYS1leHBhbmRlZFwiLCBcImZhbHNlXCIpO1xuICAgIGpwZ0J0bi5pbm5lclRleHQgPSBcIkNvcHkgSlBHcyBhc1wiO1xuICAgIHVuc3VwcG9ydGVkVHlwZXMuYXBwZW5kQ2hpbGQoanBnQnRuKTtcblxuICAgIGxldCBqcGdTZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidWxcIik7XG4gICAganBnU2VsLmNsYXNzTGlzdC5hZGQoXCJkcm9wZG93bi1tZW51XCIpO1xuXG4gICAgaWYgKHN1cHBvcnRlZFR5cGVzLmluY2x1ZGVzKFwianBlZ1wiKSkge1xuICAgICAgICBsZXQgY29weUpQR0NvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaVwiKTtcbiAgICAgICAgbGV0IGNvcHlKUEcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcbiAgICAgICAgY29weUpQRy5jbGFzc0xpc3QuYWRkKFwiZHJvcGRvd24taXRlbVwiKTtcbiAgICAgICAgY29weUpQRy5pZCA9IFwianBnLWNvcHktanBnXCI7XG4gICAgICAgIGNvcHlKUEcuaHJlZiA9IFwiI1wiO1xuICAgICAgICBjb3B5SlBHLm9uY2xpY2sgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCBpZGJTZXQoXCJjb3B5LWpwZ1wiLCBcImpwZ1wiKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29weUpQRy5pbm5lclRleHQgPSBcIkpQR1wiO1xuICAgICAgICBjb3B5SlBHQ29udGFpbmVyLmFwcGVuZENoaWxkKGNvcHlKUEcpO1xuICAgICAgICBqcGdTZWwuYXBwZW5kQ2hpbGQoY29weUpQR0NvbnRhaW5lcik7XG4gICAgfVxuXG4gICAgbGV0IGpwZ0NvcHlQTkdDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGlcIik7XG4gICAgbGV0IGpwZ0NvcHlQTkcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcbiAgICBqcGdDb3B5UE5HLmNsYXNzTGlzdC5hZGQoXCJkcm9wZG93bi1pdGVtXCIpO1xuICAgIGpwZ0NvcHlQTkcuaWQgPSBcImpwZy1jb3B5LXBuZ1wiO1xuICAgIGpwZ0NvcHlQTkcuaHJlZiA9IFwiI1wiO1xuICAgIGpwZ0NvcHlQTkcub25jbGljayA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgaWRiU2V0KFwiY29weS1qcGdcIiwgXCJwbmdcIik7XG4gICAgfTtcbiAgICBqcGdDb3B5UE5HLmlubmVyVGV4dCA9IFwiUE5HXCI7XG4gICAganBnQ29weVBOR0NvbnRhaW5lci5hcHBlbmRDaGlsZChqcGdDb3B5UE5HKTtcbiAgICBqcGdTZWwuYXBwZW5kQ2hpbGQoanBnQ29weVBOR0NvbnRhaW5lcik7XG5cbiAgICBsZXQganBnQ29weVRleHRDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGlcIik7XG4gICAgbGV0IGpwZ0NvcHlUZXh0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7XG4gICAganBnQ29weVRleHQuY2xhc3NMaXN0LmFkZChcImRyb3Bkb3duLWl0ZW1cIik7XG4gICAganBnQ29weVRleHQuaWQgPSBcImpwZy1jb3B5LXRleHRcIjtcbiAgICBqcGdDb3B5VGV4dC5ocmVmID0gXCIjXCI7XG4gICAganBnQ29weVRleHQub25jbGljayA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgaWRiU2V0KFwiY29weS1qcGdcIiwgXCJ0ZXh0XCIpO1xuICAgIH07XG4gICAganBnQ29weVRleHQuaW5uZXJUZXh0ID0gXCJUZXh0IChub3QgcmVjb21tZW5kZWQhKVwiO1xuICAgIGpwZ0NvcHlUZXh0Q29udGFpbmVyLmFwcGVuZENoaWxkKGpwZ0NvcHlUZXh0KTtcbiAgICBqcGdTZWwuYXBwZW5kQ2hpbGQoanBnQ29weVRleHRDb250YWluZXIpO1xuICAgIHVuc3VwcG9ydGVkVHlwZXMuYXBwZW5kQ2hpbGQoanBnU2VsKTtcblxuICAgIG5ldyBib290c3RyYXAuRHJvcGRvd24oanBnQnRuKTtcblxuICAgIERPTS5tYWluLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJiclwiKSk7XG5cbiAgICBET00ubWFpbi5hcHBlbmRDaGlsZCh1bnN1cHBvcnRlZFR5cGVzKTtcblxuICAgIERPTS5zaXplLndpZHRoLmRpc2FibGVkID0gZmFsc2U7XG59O1xuIl0sIm5hbWVzIjpbIl9fd2VicGFja19yZXF1aXJlX18iLCJleHBvcnRzIiwiZGVmaW5pdGlvbiIsImtleSIsIm8iLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJnZXQiLCJvYmoiLCJwcm9wIiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiU3ltYm9sIiwidG9TdHJpbmdUYWciLCJ2YWx1ZSIsImJvdHRvbSIsInJpZ2h0IiwibGVmdCIsImF1dG8iLCJiYXNlUGxhY2VtZW50cyIsInN0YXJ0IiwiZW5kIiwiY2xpcHBpbmdQYXJlbnRzIiwidmlld3BvcnQiLCJwb3BwZXIiLCJyZWZlcmVuY2UiLCJ2YXJpYXRpb25QbGFjZW1lbnRzIiwicmVkdWNlIiwiYWNjIiwicGxhY2VtZW50IiwiY29uY2F0IiwiYmVmb3JlUmVhZCIsInJlYWQiLCJhZnRlclJlYWQiLCJiZWZvcmVNYWluIiwibWFpbiIsImFmdGVyTWFpbiIsImJlZm9yZVdyaXRlIiwid3JpdGUiLCJhZnRlcldyaXRlIiwibW9kaWZpZXJQaGFzZXMiLCJnZXROb2RlTmFtZSIsImVsZW1lbnQiLCJub2RlTmFtZSIsInRvTG93ZXJDYXNlIiwiZ2V0V2luZG93Iiwibm9kZSIsIndpbmRvdyIsInRvU3RyaW5nIiwib3duZXJEb2N1bWVudCIsImRlZmF1bHRWaWV3IiwiaXNFbGVtZW50IiwiRWxlbWVudCIsImlzSFRNTEVsZW1lbnQiLCJIVE1MRWxlbWVudCIsImlzU2hhZG93Um9vdCIsIlNoYWRvd1Jvb3QiLCJuYW1lIiwiZW5hYmxlZCIsInBoYXNlIiwiZm4iLCJfcmVmIiwic3RhdGUiLCJrZXlzIiwiZWxlbWVudHMiLCJmb3JFYWNoIiwic3R5bGUiLCJzdHlsZXMiLCJhdHRyaWJ1dGVzIiwiYXNzaWduIiwicmVtb3ZlQXR0cmlidXRlIiwic2V0QXR0cmlidXRlIiwiZWZmZWN0IiwiX3JlZjIiLCJpbml0aWFsU3R5bGVzIiwicG9zaXRpb24iLCJvcHRpb25zIiwic3RyYXRlZ3kiLCJ0b3AiLCJtYXJnaW4iLCJhcnJvdyIsInByb3BlcnR5IiwiYXR0cmlidXRlIiwicmVxdWlyZXMiLCJnZXRCYXNlUGxhY2VtZW50Iiwic3BsaXQiLCJNYXRoIiwibWF4IiwibWluIiwicm91bmQiLCJnZXRVQVN0cmluZyIsInVhRGF0YSIsIm5hdmlnYXRvciIsInVzZXJBZ2VudERhdGEiLCJicmFuZHMiLCJBcnJheSIsImlzQXJyYXkiLCJtYXAiLCJpdGVtIiwiYnJhbmQiLCJ2ZXJzaW9uIiwiam9pbiIsInVzZXJBZ2VudCIsImlzTGF5b3V0Vmlld3BvcnQiLCJ0ZXN0IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwiaW5jbHVkZVNjYWxlIiwiaXNGaXhlZFN0cmF0ZWd5IiwiY2xpZW50UmVjdCIsInNjYWxlWCIsInNjYWxlWSIsIm9mZnNldFdpZHRoIiwid2lkdGgiLCJvZmZzZXRIZWlnaHQiLCJoZWlnaHQiLCJ2aXN1YWxWaWV3cG9ydCIsImFkZFZpc3VhbE9mZnNldHMiLCJ4Iiwib2Zmc2V0TGVmdCIsInkiLCJvZmZzZXRUb3AiLCJnZXRMYXlvdXRSZWN0IiwiYWJzIiwiY29udGFpbnMiLCJwYXJlbnQiLCJjaGlsZCIsInJvb3ROb2RlIiwiZ2V0Um9vdE5vZGUiLCJuZXh0IiwiaXNTYW1lTm9kZSIsInBhcmVudE5vZGUiLCJob3N0IiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImlzVGFibGVFbGVtZW50IiwiaW5kZXhPZiIsImdldERvY3VtZW50RWxlbWVudCIsImRvY3VtZW50IiwiZG9jdW1lbnRFbGVtZW50IiwiZ2V0UGFyZW50Tm9kZSIsImFzc2lnbmVkU2xvdCIsImdldFRydWVPZmZzZXRQYXJlbnQiLCJvZmZzZXRQYXJlbnQiLCJnZXRPZmZzZXRQYXJlbnQiLCJpc0ZpcmVmb3giLCJjdXJyZW50Tm9kZSIsImNzcyIsInRyYW5zZm9ybSIsInBlcnNwZWN0aXZlIiwiY29udGFpbiIsIndpbGxDaGFuZ2UiLCJmaWx0ZXIiLCJnZXRDb250YWluaW5nQmxvY2siLCJnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQiLCJ3aXRoaW4iLCJtZXJnZVBhZGRpbmdPYmplY3QiLCJwYWRkaW5nT2JqZWN0IiwiZXhwYW5kVG9IYXNoTWFwIiwiaGFzaE1hcCIsIl9zdGF0ZSRtb2RpZmllcnNEYXRhJCIsImFycm93RWxlbWVudCIsInBvcHBlck9mZnNldHMiLCJtb2RpZmllcnNEYXRhIiwiYmFzZVBsYWNlbWVudCIsImF4aXMiLCJsZW4iLCJwYWRkaW5nIiwicmVjdHMiLCJ0b1BhZGRpbmdPYmplY3QiLCJhcnJvd1JlY3QiLCJtaW5Qcm9wIiwibWF4UHJvcCIsImVuZERpZmYiLCJzdGFydERpZmYiLCJhcnJvd09mZnNldFBhcmVudCIsImNsaWVudFNpemUiLCJjbGllbnRIZWlnaHQiLCJjbGllbnRXaWR0aCIsImNlbnRlclRvUmVmZXJlbmNlIiwiY2VudGVyIiwib2Zmc2V0IiwiYXhpc1Byb3AiLCJjZW50ZXJPZmZzZXQiLCJfb3B0aW9ucyRlbGVtZW50IiwicXVlcnlTZWxlY3RvciIsInJlcXVpcmVzSWZFeGlzdHMiLCJnZXRWYXJpYXRpb24iLCJ1bnNldFNpZGVzIiwibWFwVG9TdHlsZXMiLCJfT2JqZWN0JGFzc2lnbjIiLCJwb3BwZXJSZWN0IiwidmFyaWF0aW9uIiwib2Zmc2V0cyIsImdwdUFjY2VsZXJhdGlvbiIsImFkYXB0aXZlIiwicm91bmRPZmZzZXRzIiwiaXNGaXhlZCIsIl9vZmZzZXRzJHgiLCJfb2Zmc2V0cyR5IiwiX3JlZjMiLCJoYXNYIiwiaGFzWSIsInNpZGVYIiwic2lkZVkiLCJ3aW4iLCJoZWlnaHRQcm9wIiwid2lkdGhQcm9wIiwiX09iamVjdCRhc3NpZ24iLCJjb21tb25TdHlsZXMiLCJfcmVmNCIsImRwciIsImRldmljZVBpeGVsUmF0aW8iLCJyb3VuZE9mZnNldHNCeURQUiIsIl9yZWY1IiwiX29wdGlvbnMkZ3B1QWNjZWxlcmF0IiwiX29wdGlvbnMkYWRhcHRpdmUiLCJfb3B0aW9ucyRyb3VuZE9mZnNldHMiLCJkYXRhIiwicGFzc2l2ZSIsImluc3RhbmNlIiwiX29wdGlvbnMkc2Nyb2xsIiwic2Nyb2xsIiwiX29wdGlvbnMkcmVzaXplIiwicmVzaXplIiwic2Nyb2xsUGFyZW50cyIsInNjcm9sbFBhcmVudCIsImFkZEV2ZW50TGlzdGVuZXIiLCJ1cGRhdGUiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiaGFzaCIsImdldE9wcG9zaXRlUGxhY2VtZW50IiwicmVwbGFjZSIsIm1hdGNoZWQiLCJnZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudCIsImdldFdpbmRvd1Njcm9sbCIsInNjcm9sbExlZnQiLCJwYWdlWE9mZnNldCIsInNjcm9sbFRvcCIsInBhZ2VZT2Zmc2V0IiwiZ2V0V2luZG93U2Nyb2xsQmFyWCIsImlzU2Nyb2xsUGFyZW50IiwiX2dldENvbXB1dGVkU3R5bGUiLCJvdmVyZmxvdyIsIm92ZXJmbG93WCIsIm92ZXJmbG93WSIsImdldFNjcm9sbFBhcmVudCIsImJvZHkiLCJsaXN0U2Nyb2xsUGFyZW50cyIsImxpc3QiLCJfZWxlbWVudCRvd25lckRvY3VtZW4iLCJpc0JvZHkiLCJ0YXJnZXQiLCJ1cGRhdGVkTGlzdCIsInJlY3RUb0NsaWVudFJlY3QiLCJyZWN0IiwiZ2V0Q2xpZW50UmVjdEZyb21NaXhlZFR5cGUiLCJjbGlwcGluZ1BhcmVudCIsImh0bWwiLCJsYXlvdXRWaWV3cG9ydCIsImdldFZpZXdwb3J0UmVjdCIsImNsaWVudFRvcCIsImNsaWVudExlZnQiLCJnZXRJbm5lckJvdW5kaW5nQ2xpZW50UmVjdCIsIndpblNjcm9sbCIsInNjcm9sbFdpZHRoIiwic2Nyb2xsSGVpZ2h0IiwiZGlyZWN0aW9uIiwiZ2V0RG9jdW1lbnRSZWN0IiwiY29tcHV0ZU9mZnNldHMiLCJjb21tb25YIiwiY29tbW9uWSIsIm1haW5BeGlzIiwiZGV0ZWN0T3ZlcmZsb3ciLCJfb3B0aW9ucyIsIl9vcHRpb25zJHBsYWNlbWVudCIsIl9vcHRpb25zJHN0cmF0ZWd5IiwiX29wdGlvbnMkYm91bmRhcnkiLCJib3VuZGFyeSIsIl9vcHRpb25zJHJvb3RCb3VuZGFyeSIsInJvb3RCb3VuZGFyeSIsIl9vcHRpb25zJGVsZW1lbnRDb250ZSIsImVsZW1lbnRDb250ZXh0IiwiX29wdGlvbnMkYWx0Qm91bmRhcnkiLCJhbHRCb3VuZGFyeSIsIl9vcHRpb25zJHBhZGRpbmciLCJhbHRDb250ZXh0IiwiY2xpcHBpbmdDbGllbnRSZWN0IiwibWFpbkNsaXBwaW5nUGFyZW50cyIsImNsaXBwZXJFbGVtZW50IiwiZ2V0Q2xpcHBpbmdQYXJlbnRzIiwiZmlyc3RDbGlwcGluZ1BhcmVudCIsImNsaXBwaW5nUmVjdCIsImFjY1JlY3QiLCJnZXRDbGlwcGluZ1JlY3QiLCJjb250ZXh0RWxlbWVudCIsInJlZmVyZW5jZUNsaWVudFJlY3QiLCJwb3BwZXJDbGllbnRSZWN0IiwiZWxlbWVudENsaWVudFJlY3QiLCJvdmVyZmxvd09mZnNldHMiLCJvZmZzZXREYXRhIiwibXVsdGlwbHkiLCJfc2tpcCIsIl9vcHRpb25zJG1haW5BeGlzIiwiY2hlY2tNYWluQXhpcyIsIl9vcHRpb25zJGFsdEF4aXMiLCJhbHRBeGlzIiwiY2hlY2tBbHRBeGlzIiwic3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzIiwiZmFsbGJhY2tQbGFjZW1lbnRzIiwiX29wdGlvbnMkZmxpcFZhcmlhdGlvIiwiZmxpcFZhcmlhdGlvbnMiLCJhbGxvd2VkQXV0b1BsYWNlbWVudHMiLCJwcmVmZXJyZWRQbGFjZW1lbnQiLCJvcHBvc2l0ZVBsYWNlbWVudCIsImdldEV4cGFuZGVkRmFsbGJhY2tQbGFjZW1lbnRzIiwicGxhY2VtZW50cyIsIl9vcHRpb25zJGFsbG93ZWRBdXRvUCIsImFsbG93ZWRQbGFjZW1lbnRzIiwibGVuZ3RoIiwib3ZlcmZsb3dzIiwic29ydCIsImEiLCJiIiwiY29tcHV0ZUF1dG9QbGFjZW1lbnQiLCJyZWZlcmVuY2VSZWN0IiwiY2hlY2tzTWFwIiwiTWFwIiwibWFrZUZhbGxiYWNrQ2hlY2tzIiwiZmlyc3RGaXR0aW5nUGxhY2VtZW50IiwiaSIsIl9iYXNlUGxhY2VtZW50IiwiaXNTdGFydFZhcmlhdGlvbiIsImlzVmVydGljYWwiLCJtYWluVmFyaWF0aW9uU2lkZSIsImFsdFZhcmlhdGlvblNpZGUiLCJjaGVja3MiLCJwdXNoIiwiZXZlcnkiLCJjaGVjayIsInNldCIsIl9sb29wIiwiX2kiLCJmaXR0aW5nUGxhY2VtZW50IiwiZmluZCIsInNsaWNlIiwicmVzZXQiLCJnZXRTaWRlT2Zmc2V0cyIsInByZXZlbnRlZE9mZnNldHMiLCJpc0FueVNpZGVGdWxseUNsaXBwZWQiLCJzb21lIiwic2lkZSIsInByZXZlbnRPdmVyZmxvdyIsInJlZmVyZW5jZU92ZXJmbG93IiwicG9wcGVyQWx0T3ZlcmZsb3ciLCJyZWZlcmVuY2VDbGlwcGluZ09mZnNldHMiLCJwb3BwZXJFc2NhcGVPZmZzZXRzIiwiaXNSZWZlcmVuY2VIaWRkZW4iLCJoYXNQb3BwZXJFc2NhcGVkIiwiX29wdGlvbnMkb2Zmc2V0IiwiaW52ZXJ0RGlzdGFuY2UiLCJza2lkZGluZyIsImRpc3RhbmNlIiwiZGlzdGFuY2VBbmRTa2lkZGluZ1RvWFkiLCJfZGF0YSRzdGF0ZSRwbGFjZW1lbnQiLCJfb3B0aW9ucyR0ZXRoZXIiLCJ0ZXRoZXIiLCJfb3B0aW9ucyR0ZXRoZXJPZmZzZXQiLCJ0ZXRoZXJPZmZzZXQiLCJpc0Jhc2VQbGFjZW1lbnQiLCJ0ZXRoZXJPZmZzZXRWYWx1ZSIsIm5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZSIsIm9mZnNldE1vZGlmaWVyU3RhdGUiLCJfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQiLCJtYWluU2lkZSIsImFsdFNpZGUiLCJhZGRpdGl2ZSIsIm1pbkxlbiIsIm1heExlbiIsImFycm93UGFkZGluZ09iamVjdCIsImFycm93UGFkZGluZ01pbiIsImFycm93UGFkZGluZ01heCIsImFycm93TGVuIiwibWluT2Zmc2V0IiwibWF4T2Zmc2V0IiwiY2xpZW50T2Zmc2V0Iiwib2Zmc2V0TW9kaWZpZXJWYWx1ZSIsInRldGhlck1heCIsInByZXZlbnRlZE9mZnNldCIsIl9vZmZzZXRNb2RpZmllclN0YXRlJDIiLCJfbWFpblNpZGUiLCJfYWx0U2lkZSIsIl9vZmZzZXQiLCJfbGVuIiwiX21pbiIsIl9tYXgiLCJpc09yaWdpblNpZGUiLCJfb2Zmc2V0TW9kaWZpZXJWYWx1ZSIsIl90ZXRoZXJNaW4iLCJfdGV0aGVyTWF4IiwiX3ByZXZlbnRlZE9mZnNldCIsInYiLCJ3aXRoaW5NYXhDbGFtcCIsImdldENvbXBvc2l0ZVJlY3QiLCJlbGVtZW50T3JWaXJ0dWFsRWxlbWVudCIsImlzT2Zmc2V0UGFyZW50QW5FbGVtZW50Iiwib2Zmc2V0UGFyZW50SXNTY2FsZWQiLCJpc0VsZW1lbnRTY2FsZWQiLCJvcmRlciIsIm1vZGlmaWVycyIsInZpc2l0ZWQiLCJTZXQiLCJyZXN1bHQiLCJtb2RpZmllciIsImFkZCIsImRlcCIsImhhcyIsImRlcE1vZGlmaWVyIiwiREVGQVVMVF9PUFRJT05TIiwiYXJlVmFsaWRFbGVtZW50cyIsImFyZ3VtZW50cyIsImFyZ3MiLCJfa2V5IiwicG9wcGVyR2VuZXJhdG9yIiwiZ2VuZXJhdG9yT3B0aW9ucyIsIl9nZW5lcmF0b3JPcHRpb25zIiwiX2dlbmVyYXRvck9wdGlvbnMkZGVmIiwiZGVmYXVsdE1vZGlmaWVycyIsIl9nZW5lcmF0b3JPcHRpb25zJGRlZjIiLCJkZWZhdWx0T3B0aW9ucyIsInBlbmRpbmciLCJvcmRlcmVkTW9kaWZpZXJzIiwiZWZmZWN0Q2xlYW51cEZucyIsImlzRGVzdHJveWVkIiwic2V0T3B0aW9ucyIsInNldE9wdGlvbnNBY3Rpb24iLCJjbGVhbnVwTW9kaWZpZXJFZmZlY3RzIiwibWVyZ2VkIiwib3JkZXJNb2RpZmllcnMiLCJjdXJyZW50IiwiZXhpc3RpbmciLCJtIiwiX3JlZiRvcHRpb25zIiwiY2xlYW51cEZuIiwiZm9yY2VVcGRhdGUiLCJfc3RhdGUkZWxlbWVudHMiLCJpbmRleCIsIl9zdGF0ZSRvcmRlcmVkTW9kaWZpZSIsIl9zdGF0ZSRvcmRlcmVkTW9kaWZpZTIiLCJQcm9taXNlIiwicmVzb2x2ZSIsInRoZW4iLCJ1bmRlZmluZWQiLCJkZXN0cm95Iiwib25GaXJzdFVwZGF0ZSIsImNyZWF0ZVBvcHBlciIsImV2ZW50TGlzdGVuZXJzIiwiZWxlbWVudE1hcCIsIkRhdGEiLCJpbnN0YW5jZU1hcCIsInNpemUiLCJjb25zb2xlIiwiZXJyb3IiLCJmcm9tIiwicmVtb3ZlIiwiZGVsZXRlIiwiVFJBTlNJVElPTl9FTkQiLCJwYXJzZVNlbGVjdG9yIiwic2VsZWN0b3IiLCJDU1MiLCJlc2NhcGUiLCJtYXRjaCIsImlkIiwidHJpZ2dlclRyYW5zaXRpb25FbmQiLCJkaXNwYXRjaEV2ZW50IiwiRXZlbnQiLCJvYmplY3QiLCJqcXVlcnkiLCJub2RlVHlwZSIsImdldEVsZW1lbnQiLCJpc1Zpc2libGUiLCJnZXRDbGllbnRSZWN0cyIsImVsZW1lbnRJc1Zpc2libGUiLCJnZXRQcm9wZXJ0eVZhbHVlIiwiY2xvc2VkRGV0YWlscyIsImNsb3Nlc3QiLCJzdW1tYXJ5IiwiaXNEaXNhYmxlZCIsIk5vZGUiLCJFTEVNRU5UX05PREUiLCJjbGFzc0xpc3QiLCJkaXNhYmxlZCIsImhhc0F0dHJpYnV0ZSIsImdldEF0dHJpYnV0ZSIsImZpbmRTaGFkb3dSb290IiwiYXR0YWNoU2hhZG93Iiwicm9vdCIsIm5vb3AiLCJyZWZsb3ciLCJnZXRqUXVlcnkiLCJqUXVlcnkiLCJET01Db250ZW50TG9hZGVkQ2FsbGJhY2tzIiwiaXNSVEwiLCJkaXIiLCJkZWZpbmVKUXVlcnlQbHVnaW4iLCJwbHVnaW4iLCJjYWxsYmFjayIsIiQiLCJOQU1FIiwiSlFVRVJZX05PX0NPTkZMSUNUIiwialF1ZXJ5SW50ZXJmYWNlIiwiQ29uc3RydWN0b3IiLCJub0NvbmZsaWN0IiwicmVhZHlTdGF0ZSIsImV4ZWN1dGUiLCJwb3NzaWJsZUNhbGxiYWNrIiwiZGVmYXVsdFZhbHVlIiwiZXhlY3V0ZUFmdGVyVHJhbnNpdGlvbiIsInRyYW5zaXRpb25FbGVtZW50Iiwid2FpdEZvclRyYW5zaXRpb24iLCJlbXVsYXRlZER1cmF0aW9uIiwidHJhbnNpdGlvbkR1cmF0aW9uIiwidHJhbnNpdGlvbkRlbGF5IiwiZmxvYXRUcmFuc2l0aW9uRHVyYXRpb24iLCJOdW1iZXIiLCJwYXJzZUZsb2F0IiwiZmxvYXRUcmFuc2l0aW9uRGVsYXkiLCJnZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudCIsImNhbGxlZCIsImhhbmRsZXIiLCJzZXRUaW1lb3V0IiwiZ2V0TmV4dEFjdGl2ZUVsZW1lbnQiLCJhY3RpdmVFbGVtZW50Iiwic2hvdWxkR2V0TmV4dCIsImlzQ3ljbGVBbGxvd2VkIiwibGlzdExlbmd0aCIsIm5hbWVzcGFjZVJlZ2V4Iiwic3RyaXBOYW1lUmVnZXgiLCJzdHJpcFVpZFJlZ2V4IiwiZXZlbnRSZWdpc3RyeSIsInVpZEV2ZW50IiwiY3VzdG9tRXZlbnRzIiwibW91c2VlbnRlciIsIm1vdXNlbGVhdmUiLCJuYXRpdmVFdmVudHMiLCJtYWtlRXZlbnRVaWQiLCJ1aWQiLCJnZXRFbGVtZW50RXZlbnRzIiwiZmluZEhhbmRsZXIiLCJldmVudHMiLCJjYWxsYWJsZSIsImRlbGVnYXRpb25TZWxlY3RvciIsInZhbHVlcyIsImV2ZW50Iiwibm9ybWFsaXplUGFyYW1ldGVycyIsIm9yaWdpbmFsVHlwZUV2ZW50IiwiZGVsZWdhdGlvbkZ1bmN0aW9uIiwiaXNEZWxlZ2F0ZWQiLCJ0eXBlRXZlbnQiLCJnZXRUeXBlRXZlbnQiLCJhZGRIYW5kbGVyIiwib25lT2ZmIiwid3JhcEZ1bmN0aW9uIiwicmVsYXRlZFRhcmdldCIsImRlbGVnYXRlVGFyZ2V0IiwidGhpcyIsImhhbmRsZXJzIiwicHJldmlvdXNGdW5jdGlvbiIsImRvbUVsZW1lbnRzIiwicXVlcnlTZWxlY3RvckFsbCIsImRvbUVsZW1lbnQiLCJoeWRyYXRlT2JqIiwiRXZlbnRIYW5kbGVyIiwib2ZmIiwidHlwZSIsImFwcGx5IiwiYm9vdHN0cmFwRGVsZWdhdGlvbkhhbmRsZXIiLCJib290c3RyYXBIYW5kbGVyIiwicmVtb3ZlSGFuZGxlciIsIkJvb2xlYW4iLCJyZW1vdmVOYW1lc3BhY2VkSGFuZGxlcnMiLCJuYW1lc3BhY2UiLCJzdG9yZUVsZW1lbnRFdmVudCIsImhhbmRsZXJLZXkiLCJlbnRyaWVzIiwiaW5jbHVkZXMiLCJvbiIsIm9uZSIsImluTmFtZXNwYWNlIiwiaXNOYW1lc3BhY2UiLCJzdGFydHNXaXRoIiwiZWxlbWVudEV2ZW50Iiwia2V5SGFuZGxlcnMiLCJ0cmlnZ2VyIiwialF1ZXJ5RXZlbnQiLCJidWJibGVzIiwibmF0aXZlRGlzcGF0Y2giLCJkZWZhdWx0UHJldmVudGVkIiwiaXNQcm9wYWdhdGlvblN0b3BwZWQiLCJpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCIsImlzRGVmYXVsdFByZXZlbnRlZCIsImV2dCIsImNhbmNlbGFibGUiLCJwcmV2ZW50RGVmYXVsdCIsIm1ldGEiLCJfdW51c2VkIiwiY29uZmlndXJhYmxlIiwibm9ybWFsaXplRGF0YSIsIkpTT04iLCJwYXJzZSIsImRlY29kZVVSSUNvbXBvbmVudCIsIm5vcm1hbGl6ZURhdGFLZXkiLCJjaHIiLCJNYW5pcHVsYXRvciIsInNldERhdGFBdHRyaWJ1dGUiLCJyZW1vdmVEYXRhQXR0cmlidXRlIiwiZ2V0RGF0YUF0dHJpYnV0ZXMiLCJic0tleXMiLCJkYXRhc2V0IiwicHVyZUtleSIsImNoYXJBdCIsImdldERhdGFBdHRyaWJ1dGUiLCJDb25maWciLCJEZWZhdWx0IiwiRGVmYXVsdFR5cGUiLCJFcnJvciIsIl9nZXRDb25maWciLCJjb25maWciLCJfbWVyZ2VDb25maWdPYmoiLCJfY29uZmlnQWZ0ZXJNZXJnZSIsIl90eXBlQ2hlY2tDb25maWciLCJqc29uQ29uZmlnIiwiY29uc3RydWN0b3IiLCJjb25maWdUeXBlcyIsImV4cGVjdGVkVHlwZXMiLCJ2YWx1ZVR5cGUiLCJSZWdFeHAiLCJUeXBlRXJyb3IiLCJ0b1VwcGVyQ2FzZSIsIkJhc2VDb21wb25lbnQiLCJzdXBlciIsIl9lbGVtZW50IiwiX2NvbmZpZyIsIkRBVEFfS0VZIiwiZGlzcG9zZSIsIkVWRU5UX0tFWSIsInByb3BlcnR5TmFtZSIsImdldE93blByb3BlcnR5TmFtZXMiLCJfcXVldWVDYWxsYmFjayIsImlzQW5pbWF0ZWQiLCJnZXRJbnN0YW5jZSIsImdldE9yQ3JlYXRlSW5zdGFuY2UiLCJWRVJTSU9OIiwiZXZlbnROYW1lIiwiZ2V0U2VsZWN0b3IiLCJocmVmQXR0cmlidXRlIiwidHJpbSIsInNlbCIsIlNlbGVjdG9yRW5naW5lIiwiZmluZE9uZSIsImNoaWxkcmVuIiwibWF0Y2hlcyIsInBhcmVudHMiLCJhbmNlc3RvciIsInByZXYiLCJwcmV2aW91cyIsInByZXZpb3VzRWxlbWVudFNpYmxpbmciLCJuZXh0RWxlbWVudFNpYmxpbmciLCJmb2N1c2FibGVDaGlsZHJlbiIsImZvY3VzYWJsZXMiLCJlbCIsImdldFNlbGVjdG9yRnJvbUVsZW1lbnQiLCJnZXRFbGVtZW50RnJvbVNlbGVjdG9yIiwiZ2V0TXVsdGlwbGVFbGVtZW50c0Zyb21TZWxlY3RvciIsImVuYWJsZURpc21pc3NUcmlnZ2VyIiwiY29tcG9uZW50IiwibWV0aG9kIiwiY2xpY2tFdmVudCIsInRhZ05hbWUiLCJFVkVOVF9LRVkkYiIsIkVWRU5UX0NMT1NFIiwiRVZFTlRfQ0xPU0VEIiwiQWxlcnQiLCJjbG9zZSIsIl9kZXN0cm95RWxlbWVudCIsImVhY2giLCJTRUxFQ1RPUl9EQVRBX1RPR0dMRSQ1IiwiQnV0dG9uIiwidG9nZ2xlIiwiYnV0dG9uIiwiRVZFTlRfS0VZJDkiLCJFVkVOVF9UT1VDSFNUQVJUIiwiRVZFTlRfVE9VQ0hNT1ZFIiwiRVZFTlRfVE9VQ0hFTkQiLCJFVkVOVF9QT0lOVEVSRE9XTiIsIkVWRU5UX1BPSU5URVJVUCIsIkRlZmF1bHQkYyIsImVuZENhbGxiYWNrIiwibGVmdENhbGxiYWNrIiwicmlnaHRDYWxsYmFjayIsIkRlZmF1bHRUeXBlJGMiLCJTd2lwZSIsImlzU3VwcG9ydGVkIiwiX2RlbHRhWCIsIl9zdXBwb3J0UG9pbnRlckV2ZW50cyIsIlBvaW50ZXJFdmVudCIsIl9pbml0RXZlbnRzIiwiX3N0YXJ0IiwiX2V2ZW50SXNQb2ludGVyUGVuVG91Y2giLCJjbGllbnRYIiwidG91Y2hlcyIsIl9lbmQiLCJfaGFuZGxlU3dpcGUiLCJfbW92ZSIsImFic0RlbHRhWCIsInBvaW50ZXJUeXBlIiwibWF4VG91Y2hQb2ludHMiLCJFVkVOVF9LRVkkOCIsIkRBVEFfQVBJX0tFWSQ1IiwiQVJST1dfTEVGVF9LRVkkMSIsIkFSUk9XX1JJR0hUX0tFWSQxIiwiT1JERVJfTkVYVCIsIk9SREVSX1BSRVYiLCJESVJFQ1RJT05fTEVGVCIsIkRJUkVDVElPTl9SSUdIVCIsIkVWRU5UX1NMSURFIiwiRVZFTlRfU0xJRCIsIkVWRU5UX0tFWURPV04kMSIsIkVWRU5UX01PVVNFRU5URVIkMSIsIkVWRU5UX01PVVNFTEVBVkUkMSIsIkVWRU5UX0RSQUdfU1RBUlQiLCJFVkVOVF9MT0FEX0RBVEFfQVBJJDMiLCJFVkVOVF9DTElDS19EQVRBX0FQSSQ1IiwiQ0xBU1NfTkFNRV9DQVJPVVNFTCIsIkNMQVNTX05BTUVfQUNUSVZFJDIiLCJTRUxFQ1RPUl9BQ1RJVkUiLCJTRUxFQ1RPUl9JVEVNIiwiU0VMRUNUT1JfQUNUSVZFX0lURU0iLCJLRVlfVE9fRElSRUNUSU9OIiwiRGVmYXVsdCRiIiwiaW50ZXJ2YWwiLCJrZXlib2FyZCIsInBhdXNlIiwicmlkZSIsInRvdWNoIiwid3JhcCIsIkRlZmF1bHRUeXBlJGIiLCJDYXJvdXNlbCIsIl9pbnRlcnZhbCIsIl9hY3RpdmVFbGVtZW50IiwiX2lzU2xpZGluZyIsInRvdWNoVGltZW91dCIsIl9zd2lwZUhlbHBlciIsIl9pbmRpY2F0b3JzRWxlbWVudCIsIl9hZGRFdmVudExpc3RlbmVycyIsImN5Y2xlIiwiX3NsaWRlIiwibmV4dFdoZW5WaXNpYmxlIiwiaGlkZGVuIiwiX2NsZWFySW50ZXJ2YWwiLCJfdXBkYXRlSW50ZXJ2YWwiLCJzZXRJbnRlcnZhbCIsIl9tYXliZUVuYWJsZUN5Y2xlIiwidG8iLCJpdGVtcyIsIl9nZXRJdGVtcyIsImFjdGl2ZUluZGV4IiwiX2dldEl0ZW1JbmRleCIsIl9nZXRBY3RpdmUiLCJkZWZhdWx0SW50ZXJ2YWwiLCJfa2V5ZG93biIsIl9hZGRUb3VjaEV2ZW50TGlzdGVuZXJzIiwiaW1nIiwic3dpcGVDb25maWciLCJfZGlyZWN0aW9uVG9PcmRlciIsImNsZWFyVGltZW91dCIsIl9zZXRBY3RpdmVJbmRpY2F0b3JFbGVtZW50IiwiYWN0aXZlSW5kaWNhdG9yIiwibmV3QWN0aXZlSW5kaWNhdG9yIiwiZWxlbWVudEludGVydmFsIiwicGFyc2VJbnQiLCJpc05leHQiLCJuZXh0RWxlbWVudCIsIm5leHRFbGVtZW50SW5kZXgiLCJ0cmlnZ2VyRXZlbnQiLCJfb3JkZXJUb0RpcmVjdGlvbiIsImlzQ3ljbGluZyIsImRpcmVjdGlvbmFsQ2xhc3NOYW1lIiwib3JkZXJDbGFzc05hbWUiLCJfaXNBbmltYXRlZCIsImNsZWFySW50ZXJ2YWwiLCJjYXJvdXNlbCIsInNsaWRlSW5kZXgiLCJjYXJvdXNlbHMiLCJFVkVOVF9LRVkkNyIsIkVWRU5UX1NIT1ckNiIsIkVWRU5UX1NIT1dOJDYiLCJFVkVOVF9ISURFJDYiLCJFVkVOVF9ISURERU4kNiIsIkVWRU5UX0NMSUNLX0RBVEFfQVBJJDQiLCJDTEFTU19OQU1FX1NIT1ckNyIsIkNMQVNTX05BTUVfQ09MTEFQU0UiLCJDTEFTU19OQU1FX0NPTExBUFNJTkciLCJDTEFTU19OQU1FX0RFRVBFUl9DSElMRFJFTiIsIlNFTEVDVE9SX0RBVEFfVE9HR0xFJDQiLCJEZWZhdWx0JGEiLCJEZWZhdWx0VHlwZSRhIiwiQ29sbGFwc2UiLCJfaXNUcmFuc2l0aW9uaW5nIiwiX3RyaWdnZXJBcnJheSIsInRvZ2dsZUxpc3QiLCJlbGVtIiwiZmlsdGVyRWxlbWVudCIsImZvdW5kRWxlbWVudCIsIl9pbml0aWFsaXplQ2hpbGRyZW4iLCJfYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzIiwiX2lzU2hvd24iLCJoaWRlIiwic2hvdyIsImFjdGl2ZUNoaWxkcmVuIiwiX2dldEZpcnN0TGV2ZWxDaGlsZHJlbiIsImFjdGl2ZUluc3RhbmNlIiwiZGltZW5zaW9uIiwiX2dldERpbWVuc2lvbiIsInNjcm9sbFNpemUiLCJzZWxlY3RlZCIsInRyaWdnZXJBcnJheSIsImlzT3BlbiIsIk5BTUUkYSIsIkVWRU5UX0tFWSQ2IiwiREFUQV9BUElfS0VZJDMiLCJBUlJPV19VUF9LRVkkMSIsIkFSUk9XX0RPV05fS0VZJDEiLCJFVkVOVF9ISURFJDUiLCJFVkVOVF9ISURERU4kNSIsIkVWRU5UX1NIT1ckNSIsIkVWRU5UX1NIT1dOJDUiLCJFVkVOVF9DTElDS19EQVRBX0FQSSQzIiwiRVZFTlRfS0VZRE9XTl9EQVRBX0FQSSIsIkVWRU5UX0tFWVVQX0RBVEFfQVBJIiwiQ0xBU1NfTkFNRV9TSE9XJDYiLCJTRUxFQ1RPUl9EQVRBX1RPR0dMRSQzIiwiU0VMRUNUT1JfREFUQV9UT0dHTEVfU0hPV04iLCJTRUxFQ1RPUl9NRU5VIiwiUExBQ0VNRU5UX1RPUCIsIlBMQUNFTUVOVF9UT1BFTkQiLCJQTEFDRU1FTlRfQk9UVE9NIiwiUExBQ0VNRU5UX0JPVFRPTUVORCIsIlBMQUNFTUVOVF9SSUdIVCIsIlBMQUNFTUVOVF9MRUZUIiwiRGVmYXVsdCQ5IiwiYXV0b0Nsb3NlIiwiZGlzcGxheSIsInBvcHBlckNvbmZpZyIsIkRlZmF1bHRUeXBlJDkiLCJEcm9wZG93biIsIl9wb3BwZXIiLCJfcGFyZW50IiwiX21lbnUiLCJfaW5OYXZiYXIiLCJfZGV0ZWN0TmF2YmFyIiwiX2NyZWF0ZVBvcHBlciIsImZvY3VzIiwiX2NvbXBsZXRlSGlkZSIsInJlZmVyZW5jZUVsZW1lbnQiLCJfZ2V0UG9wcGVyQ29uZmlnIiwiX2dldFBsYWNlbWVudCIsInBhcmVudERyb3Bkb3duIiwiaXNFbmQiLCJfZ2V0T2Zmc2V0IiwicG9wcGVyRGF0YSIsImRlZmF1bHRCc1BvcHBlckNvbmZpZyIsIl9zZWxlY3RNZW51SXRlbSIsImNsZWFyTWVudXMiLCJvcGVuVG9nZ2xlcyIsImNvbnRleHQiLCJjb21wb3NlZFBhdGgiLCJpc01lbnVUYXJnZXQiLCJkYXRhQXBpS2V5ZG93bkhhbmRsZXIiLCJpc0lucHV0IiwiaXNFc2NhcGVFdmVudCIsImlzVXBPckRvd25FdmVudCIsImdldFRvZ2dsZUJ1dHRvbiIsInN0b3BQcm9wYWdhdGlvbiIsIk5BTUUkOSIsIkNMQVNTX05BTUVfU0hPVyQ1IiwiRVZFTlRfTU9VU0VET1dOIiwiRGVmYXVsdCQ4IiwiY2xhc3NOYW1lIiwiY2xpY2tDYWxsYmFjayIsInJvb3RFbGVtZW50IiwiRGVmYXVsdFR5cGUkOCIsIkJhY2tkcm9wIiwiX2lzQXBwZW5kZWQiLCJfYXBwZW5kIiwiX2dldEVsZW1lbnQiLCJfZW11bGF0ZUFuaW1hdGlvbiIsImJhY2tkcm9wIiwiY3JlYXRlRWxlbWVudCIsImFwcGVuZCIsIkVWRU5UX0tFWSQ1IiwiRVZFTlRfRk9DVVNJTiQyIiwiRVZFTlRfS0VZRE9XTl9UQUIiLCJUQUJfTkFWX0JBQ0tXQVJEIiwiRGVmYXVsdCQ3IiwiYXV0b2ZvY3VzIiwidHJhcEVsZW1lbnQiLCJEZWZhdWx0VHlwZSQ3IiwiRm9jdXNUcmFwIiwiX2lzQWN0aXZlIiwiX2xhc3RUYWJOYXZEaXJlY3Rpb24iLCJhY3RpdmF0ZSIsIl9oYW5kbGVGb2N1c2luIiwiX2hhbmRsZUtleWRvd24iLCJkZWFjdGl2YXRlIiwic2hpZnRLZXkiLCJTRUxFQ1RPUl9GSVhFRF9DT05URU5UIiwiU0VMRUNUT1JfU1RJQ0tZX0NPTlRFTlQiLCJQUk9QRVJUWV9QQURESU5HIiwiUFJPUEVSVFlfTUFSR0lOIiwiU2Nyb2xsQmFySGVscGVyIiwiZ2V0V2lkdGgiLCJkb2N1bWVudFdpZHRoIiwiaW5uZXJXaWR0aCIsIl9kaXNhYmxlT3ZlckZsb3ciLCJfc2V0RWxlbWVudEF0dHJpYnV0ZXMiLCJjYWxjdWxhdGVkVmFsdWUiLCJfcmVzZXRFbGVtZW50QXR0cmlidXRlcyIsImlzT3ZlcmZsb3dpbmciLCJfc2F2ZUluaXRpYWxBdHRyaWJ1dGUiLCJzdHlsZVByb3BlcnR5Iiwic2Nyb2xsYmFyV2lkdGgiLCJfYXBwbHlNYW5pcHVsYXRpb25DYWxsYmFjayIsInNldFByb3BlcnR5IiwiYWN0dWFsVmFsdWUiLCJyZW1vdmVQcm9wZXJ0eSIsImNhbGxCYWNrIiwiRVZFTlRfS0VZJDQiLCJFVkVOVF9ISURFJDQiLCJFVkVOVF9ISURFX1BSRVZFTlRFRCQxIiwiRVZFTlRfSElEREVOJDQiLCJFVkVOVF9TSE9XJDQiLCJFVkVOVF9TSE9XTiQ0IiwiRVZFTlRfUkVTSVpFJDEiLCJFVkVOVF9DTElDS19ESVNNSVNTIiwiRVZFTlRfTU9VU0VET1dOX0RJU01JU1MiLCJFVkVOVF9LRVlET1dOX0RJU01JU1MkMSIsIkVWRU5UX0NMSUNLX0RBVEFfQVBJJDIiLCJDTEFTU19OQU1FX09QRU4iLCJDTEFTU19OQU1FX1NIT1ckNCIsIkNMQVNTX05BTUVfU1RBVElDIiwiRGVmYXVsdCQ2IiwiRGVmYXVsdFR5cGUkNiIsIk1vZGFsIiwiX2RpYWxvZyIsIl9iYWNrZHJvcCIsIl9pbml0aWFsaXplQmFja0Ryb3AiLCJfZm9jdXN0cmFwIiwiX2luaXRpYWxpemVGb2N1c1RyYXAiLCJfc2Nyb2xsQmFyIiwiX2FkanVzdERpYWxvZyIsIl9zaG93RWxlbWVudCIsIl9oaWRlTW9kYWwiLCJoYW5kbGVVcGRhdGUiLCJtb2RhbEJvZHkiLCJfdHJpZ2dlckJhY2tkcm9wVHJhbnNpdGlvbiIsImV2ZW50MiIsIl9yZXNldEFkanVzdG1lbnRzIiwiaXNNb2RhbE92ZXJmbG93aW5nIiwiaW5pdGlhbE92ZXJmbG93WSIsImlzQm9keU92ZXJmbG93aW5nIiwicGFkZGluZ0xlZnQiLCJwYWRkaW5nUmlnaHQiLCJzaG93RXZlbnQiLCJhbHJlYWR5T3BlbiIsIkVWRU5UX0tFWSQzIiwiREFUQV9BUElfS0VZJDEiLCJFVkVOVF9MT0FEX0RBVEFfQVBJJDIiLCJDTEFTU19OQU1FX1NIT1ckMyIsIkNMQVNTX05BTUVfU0hPV0lORyQxIiwiQ0xBU1NfTkFNRV9ISURJTkciLCJPUEVOX1NFTEVDVE9SIiwiRVZFTlRfU0hPVyQzIiwiRVZFTlRfU0hPV04kMyIsIkVWRU5UX0hJREUkMyIsIkVWRU5UX0hJREVfUFJFVkVOVEVEIiwiRVZFTlRfSElEREVOJDMiLCJFVkVOVF9SRVNJWkUiLCJFVkVOVF9DTElDS19EQVRBX0FQSSQxIiwiRVZFTlRfS0VZRE9XTl9ESVNNSVNTIiwiRGVmYXVsdCQ1IiwiRGVmYXVsdFR5cGUkNSIsIk9mZmNhbnZhcyIsImJsdXIiLCJEZWZhdWx0QWxsb3dsaXN0IiwiYXJlYSIsImJyIiwiY29sIiwiY29kZSIsImRkIiwiZGl2IiwiZGwiLCJkdCIsImVtIiwiaHIiLCJoMSIsImgyIiwiaDMiLCJoNCIsImg1IiwiaDYiLCJsaSIsIm9sIiwicCIsInByZSIsInMiLCJzbWFsbCIsInNwYW4iLCJzdWIiLCJzdXAiLCJzdHJvbmciLCJ1IiwidWwiLCJ1cmlBdHRyaWJ1dGVzIiwiU0FGRV9VUkxfUEFUVEVSTiIsImFsbG93ZWRBdHRyaWJ1dGUiLCJhbGxvd2VkQXR0cmlidXRlTGlzdCIsImF0dHJpYnV0ZU5hbWUiLCJub2RlVmFsdWUiLCJhdHRyaWJ1dGVSZWdleCIsInJlZ2V4IiwiRGVmYXVsdCQ0IiwiYWxsb3dMaXN0IiwiY29udGVudCIsImV4dHJhQ2xhc3MiLCJzYW5pdGl6ZSIsInNhbml0aXplRm4iLCJ0ZW1wbGF0ZSIsIkRlZmF1bHRUeXBlJDQiLCJEZWZhdWx0Q29udGVudFR5cGUiLCJlbnRyeSIsIlRlbXBsYXRlRmFjdG9yeSIsImdldENvbnRlbnQiLCJfcmVzb2x2ZVBvc3NpYmxlRnVuY3Rpb24iLCJoYXNDb250ZW50IiwiY2hhbmdlQ29udGVudCIsIl9jaGVja0NvbnRlbnQiLCJ0b0h0bWwiLCJ0ZW1wbGF0ZVdyYXBwZXIiLCJpbm5lckhUTUwiLCJfbWF5YmVTYW5pdGl6ZSIsInRleHQiLCJfc2V0Q29udGVudCIsImFyZyIsInRlbXBsYXRlRWxlbWVudCIsIl9wdXRFbGVtZW50SW5UZW1wbGF0ZSIsInRleHRDb250ZW50IiwidW5zYWZlSHRtbCIsInNhbml0aXplRnVuY3Rpb24iLCJjcmVhdGVkRG9jdW1lbnQiLCJET01QYXJzZXIiLCJwYXJzZUZyb21TdHJpbmciLCJlbGVtZW50TmFtZSIsImF0dHJpYnV0ZUxpc3QiLCJhbGxvd2VkQXR0cmlidXRlcyIsInNhbml0aXplSHRtbCIsIkRJU0FMTE9XRURfQVRUUklCVVRFUyIsIkNMQVNTX05BTUVfRkFERSQyIiwiQ0xBU1NfTkFNRV9TSE9XJDIiLCJTRUxFQ1RPUl9UT09MVElQX0lOTkVSIiwiU0VMRUNUT1JfTU9EQUwiLCJFVkVOVF9NT0RBTF9ISURFIiwiVFJJR0dFUl9IT1ZFUiIsIlRSSUdHRVJfRk9DVVMiLCJBdHRhY2htZW50TWFwIiwiQVVUTyIsIlRPUCIsIlJJR0hUIiwiQk9UVE9NIiwiTEVGVCIsIkRlZmF1bHQkMyIsImFuaW1hdGlvbiIsImNvbnRhaW5lciIsImN1c3RvbUNsYXNzIiwiZGVsYXkiLCJ0aXRsZSIsIkRlZmF1bHRUeXBlJDMiLCJUb29sdGlwIiwiX2lzRW5hYmxlZCIsIl90aW1lb3V0IiwiX2lzSG92ZXJlZCIsIl9hY3RpdmVUcmlnZ2VyIiwiX3RlbXBsYXRlRmFjdG9yeSIsIl9uZXdDb250ZW50IiwidGlwIiwiX3NldExpc3RlbmVycyIsIl9maXhUaXRsZSIsImVuYWJsZSIsImRpc2FibGUiLCJ0b2dnbGVFbmFibGVkIiwiY2xpY2siLCJfbGVhdmUiLCJfZW50ZXIiLCJfaGlkZU1vZGFsSGFuZGxlciIsIl9kaXNwb3NlUG9wcGVyIiwiX2lzV2l0aENvbnRlbnQiLCJpc0luVGhlRG9tIiwiX2dldFRpcEVsZW1lbnQiLCJfaXNXaXRoQWN0aXZlVHJpZ2dlciIsIl9nZXRUaXRsZSIsIl9jcmVhdGVUaXBFbGVtZW50IiwiX2dldENvbnRlbnRGb3JUZW1wbGF0ZSIsIl9nZXRUZW1wbGF0ZUZhY3RvcnkiLCJ0aXBJZCIsInByZWZpeCIsImZsb29yIiwicmFuZG9tIiwiZ2V0RWxlbWVudEJ5SWQiLCJnZXRVSUQiLCJzZXRDb250ZW50IiwiX2luaXRpYWxpemVPbkRlbGVnYXRlZFRhcmdldCIsIl9nZXREZWxlZ2F0ZUNvbmZpZyIsImF0dGFjaG1lbnQiLCJ0cmlnZ2VycyIsImV2ZW50SW4iLCJldmVudE91dCIsIl9zZXRUaW1lb3V0IiwidGltZW91dCIsImRhdGFBdHRyaWJ1dGVzIiwiZGF0YUF0dHJpYnV0ZSIsIlNFTEVDVE9SX1RJVExFIiwiU0VMRUNUT1JfQ09OVEVOVCIsIkRlZmF1bHQkMiIsIkRlZmF1bHRUeXBlJDIiLCJQb3BvdmVyIiwiX2dldENvbnRlbnQiLCJFVkVOVF9LRVkkMiIsIkVWRU5UX0FDVElWQVRFIiwiRVZFTlRfQ0xJQ0siLCJFVkVOVF9MT0FEX0RBVEFfQVBJJDEiLCJDTEFTU19OQU1FX0FDVElWRSQxIiwiU0VMRUNUT1JfVEFSR0VUX0xJTktTIiwiU0VMRUNUT1JfTkFWX0xJTktTIiwiU0VMRUNUT1JfTElOS19JVEVNUyIsIkRlZmF1bHQkMSIsInJvb3RNYXJnaW4iLCJzbW9vdGhTY3JvbGwiLCJ0aHJlc2hvbGQiLCJEZWZhdWx0VHlwZSQxIiwiU2Nyb2xsU3B5IiwiX3RhcmdldExpbmtzIiwiX29ic2VydmFibGVTZWN0aW9ucyIsIl9yb290RWxlbWVudCIsIl9hY3RpdmVUYXJnZXQiLCJfb2JzZXJ2ZXIiLCJfcHJldmlvdXNTY3JvbGxEYXRhIiwidmlzaWJsZUVudHJ5VG9wIiwicGFyZW50U2Nyb2xsVG9wIiwicmVmcmVzaCIsIl9pbml0aWFsaXplVGFyZ2V0c0FuZE9ic2VydmFibGVzIiwiX21heWJlRW5hYmxlU21vb3RoU2Nyb2xsIiwiZGlzY29ubmVjdCIsIl9nZXROZXdPYnNlcnZlciIsInNlY3Rpb24iLCJvYnNlcnZlIiwib2JzZXJ2YWJsZVNlY3Rpb24iLCJzY3JvbGxUbyIsImJlaGF2aW9yIiwiSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiLCJfb2JzZXJ2ZXJDYWxsYmFjayIsInRhcmdldEVsZW1lbnQiLCJfcHJvY2VzcyIsInVzZXJTY3JvbGxzRG93biIsImlzSW50ZXJzZWN0aW5nIiwiX2NsZWFyQWN0aXZlQ2xhc3MiLCJlbnRyeUlzTG93ZXJUaGFuUHJldmlvdXMiLCJ0YXJnZXRMaW5rcyIsImFuY2hvciIsImRlY29kZVVSSSIsIl9hY3RpdmF0ZVBhcmVudHMiLCJsaXN0R3JvdXAiLCJhY3RpdmVOb2RlcyIsInNweSIsIkVWRU5UX0tFWSQxIiwiRVZFTlRfSElERSQxIiwiRVZFTlRfSElEREVOJDEiLCJFVkVOVF9TSE9XJDEiLCJFVkVOVF9TSE9XTiQxIiwiRVZFTlRfQ0xJQ0tfREFUQV9BUEkiLCJFVkVOVF9LRVlET1dOIiwiRVZFTlRfTE9BRF9EQVRBX0FQSSIsIkFSUk9XX0xFRlRfS0VZIiwiQVJST1dfUklHSFRfS0VZIiwiQVJST1dfVVBfS0VZIiwiQVJST1dfRE9XTl9LRVkiLCJIT01FX0tFWSIsIkVORF9LRVkiLCJDTEFTU19OQU1FX0FDVElWRSIsIkNMQVNTX05BTUVfRkFERSQxIiwiQ0xBU1NfTkFNRV9TSE9XJDEiLCJTRUxFQ1RPUl9EUk9QRE9XTl9UT0dHTEUiLCJOT1RfU0VMRUNUT1JfRFJPUERPV05fVE9HR0xFIiwiU0VMRUNUT1JfREFUQV9UT0dHTEUiLCJTRUxFQ1RPUl9JTk5FUl9FTEVNIiwiU0VMRUNUT1JfREFUQV9UT0dHTEVfQUNUSVZFIiwiVGFiIiwiX3NldEluaXRpYWxBdHRyaWJ1dGVzIiwiX2dldENoaWxkcmVuIiwiaW5uZXJFbGVtIiwiX2VsZW1Jc0FjdGl2ZSIsImFjdGl2ZSIsIl9nZXRBY3RpdmVFbGVtIiwiaGlkZUV2ZW50IiwiX2RlYWN0aXZhdGUiLCJfYWN0aXZhdGUiLCJyZWxhdGVkRWxlbSIsIl90b2dnbGVEcm9wRG93biIsIm5leHRBY3RpdmVFbGVtZW50IiwicHJldmVudFNjcm9sbCIsIl9zZXRBdHRyaWJ1dGVJZk5vdEV4aXN0cyIsIl9zZXRJbml0aWFsQXR0cmlidXRlc09uQ2hpbGQiLCJfZ2V0SW5uZXJFbGVtZW50IiwiaXNBY3RpdmUiLCJvdXRlckVsZW0iLCJfZ2V0T3V0ZXJFbGVtZW50IiwiX3NldEluaXRpYWxBdHRyaWJ1dGVzT25UYXJnZXRQYW5lbCIsIm9wZW4iLCJFVkVOVF9NT1VTRU9WRVIiLCJFVkVOVF9NT1VTRU9VVCIsIkVWRU5UX0ZPQ1VTSU4iLCJFVkVOVF9GT0NVU09VVCIsIkVWRU5UX0hJREUiLCJFVkVOVF9ISURERU4iLCJFVkVOVF9TSE9XIiwiRVZFTlRfU0hPV04iLCJDTEFTU19OQU1FX0hJREUiLCJDTEFTU19OQU1FX1NIT1ciLCJDTEFTU19OQU1FX1NIT1dJTkciLCJhdXRvaGlkZSIsIlRvYXN0IiwiX2hhc01vdXNlSW50ZXJhY3Rpb24iLCJfaGFzS2V5Ym9hcmRJbnRlcmFjdGlvbiIsIl9jbGVhclRpbWVvdXQiLCJfbWF5YmVTY2hlZHVsZUhpZGUiLCJpc1Nob3duIiwiX29uSW50ZXJhY3Rpb24iLCJpc0ludGVyYWN0aW5nIiwicHJvbWlzaWZ5UmVxdWVzdCIsInJlcXVlc3QiLCJyZWplY3QiLCJvbmNvbXBsZXRlIiwib25zdWNjZXNzIiwib25hYm9ydCIsIm9uZXJyb3IiLCJkZWZhdWx0R2V0U3RvcmVGdW5jIiwiZGVmYXVsdEdldFN0b3JlIiwiZGJOYW1lIiwic3RvcmVOYW1lIiwiaW5kZXhlZERCIiwib251cGdyYWRlbmVlZGVkIiwiY3JlYXRlT2JqZWN0U3RvcmUiLCJkYnAiLCJ0eE1vZGUiLCJkYiIsInRyYW5zYWN0aW9uIiwib2JqZWN0U3RvcmUiLCJjcmVhdGVTdG9yZSIsImN1c3RvbVN0b3JlIiwic3RvcmUiLCJwdXQiLCJjaGVja1N1cHBvcnQiLCJDbGlwYm9hcmRJdGVtIiwic3VwcG9ydHMiLCJlcnIiLCJET00iLCJvbmxvYWQiLCJsb2ciLCJvbmtleXVwIiwib25wYXN0ZSIsIm9uY2hhbmdlIiwic3VwcG9ydGVkVHlwZXMiLCJ1bnN1cHBvcnRlZFR5cGVzIiwic3ZnQnRuIiwiaW5uZXJUZXh0IiwiYXBwZW5kQ2hpbGQiLCJzdmdTZWwiLCJjb3B5U1ZHQ29udGFpbmVyIiwiY29weVNWRyIsImhyZWYiLCJvbmNsaWNrIiwic3ZnQ29weVRleHRDb250YWluZXIiLCJzdmdDb3B5VGV4dCIsInN2Z0NvcHlQTkdDb250YWluZXIiLCJzdmdDb3B5UE5HIiwianBnQnRuIiwianBnU2VsIiwiY29weUpQR0NvbnRhaW5lciIsImNvcHlKUEciLCJqcGdDb3B5UE5HQ29udGFpbmVyIiwianBnQ29weVBORyIsImpwZ0NvcHlUZXh0Q29udGFpbmVyIiwianBnQ29weVRleHQiXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file diff --git a/settings.js.LICENSE.txt b/settings.js.LICENSE.txt new file mode 100644 index 0000000..28755c2 --- /dev/null +++ b/settings.js.LICENSE.txt @@ -0,0 +1,5 @@ +/*! + * Bootstrap v5.3.3 (https://getbootstrap.com/) + * Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */ diff --git a/src/app.ts b/src/app.ts index cb53b25..de8fbce 100644 --- a/src/app.ts +++ b/src/app.ts @@ -1,12 +1,29 @@ -import { get as idbGet, set as idbSet } from "idb-keyval"; import './styles.scss'; +import { get as idbGet, set as idbSet } from "idb-keyval"; import convertSVG, { ImageType } from "./lib/svg-convert"; +import checkSupport from "./lib/check-support"; + +const DOM = { + "qr": (document.querySelector("#qr") as SVGElement), + "content": (document.querySelector("#content") as HTMLInputElement), + "toggle": { + "div": (document.querySelector("#toggle") as HTMLDivElement), + "svg": (document.querySelector("#toggle-svg") as HTMLInputElement), + "png": (document.querySelector("#toggle-png") as HTMLInputElement), + "jpg": (document.querySelector("#toggle-jpg") as HTMLInputElement) + }, + "export": { + "div": (document.querySelector("#export") as HTMLDivElement), + "copy": (document.querySelector("#copy") as HTMLButtonElement), + "download": (document.querySelector("#download") as HTMLButtonElement) + } +} const getType: () => ImageType = () => { let type: ImageType; - if ((document.querySelector("#toggle-svg") as HTMLInputElement).checked) type = "svg"; - else if ((document.querySelector("#toggle-png") as HTMLInputElement).checked) type = "png"; + if (DOM.toggle.svg.checked) type = "svg"; + else if (DOM.toggle.png.checked) type = "png"; else type = "jpeg"; return type; @@ -16,11 +33,11 @@ const getFile: () => Promise = async () => { let type = getType(); let file: Blob; if (type == "svg") { - file = new Blob([(document.querySelector("#qr") as SVGElement).outerHTML], { + file = new Blob([DOM.qr.outerHTML], { "type": "image/svg+xml" }) } else { - file = await convertSVG((document.querySelector("#qr") as SVGElement), type, await idbGet("size") ?? 2000, await idbGet("size") ?? 2000); + file = await convertSVG(DOM.qr, type, await idbGet("size") ?? 2000, await idbGet("size") ?? 2000); } return file; @@ -37,47 +54,83 @@ const download = async () => { URL.revokeObjectURL(url); }; +const copyNative = async () => { + let file = await getFile(); + let clipboardOpts: Partial> = {}; + clipboardOpts[file.type] = file; + await navigator.clipboard.write([new ClipboardItem(clipboardOpts as Record)]); +} const copy = async () => { let { state: permission } = await navigator.permissions.query({ "name": "clipboard-write" as unknown as PermissionName }); if (permission != "granted") { - (document.querySelector("#copy") as HTMLButtonElement).disabled = true; + DOM.export.copy.disabled = true; return; } - let file = await getFile(); - let clipboardOpts: Partial> = {}; - clipboardOpts[file.type] = file; - await navigator.clipboard.write([new ClipboardItem(clipboardOpts as Record)]); + switch (getType()) { + case "png": { + return await copyNative(); + } + case "svg": { + let copyAs = await idbGet("copy-svg"); + if (checkSupport("svg") && (!copyAs || copyAs == "svg")) return await copyNative(); + if (copyAs == "png") { + DOM.toggle.png.checked = true; + idbSet("export-type", "png"); + return await copyNative(); + } else { + return await navigator.clipboard.writeText(DOM.qr.outerHTML); + } + } + case "jpeg": { + let copyAs = await idbGet("copy-jpg"); + if (checkSupport("jpeg") && (!copyAs || copyAs == "jpg")) return await copyNative(); + if (!copyAs || copyAs == "png") { + DOM.toggle.png.checked = true; + idbSet("export-type", "png"); + return await copyNative(); + } else { + return await navigator.clipboard.writeText(await (await getFile()).text()); + } + } + default: { + throw new Error("Wrong type"); + } + } }; const updateQR = () => { - idbSet("content", (document.querySelector("#content") as HTMLInputElement).value); + idbSet("content", DOM.content.value); // @ts-ignore not an npm package - let elem = QRCode((document.querySelector("#content") as HTMLInputElement).value) as SVGElement; + let elem = QRCode(DOM.content.value) as SVGElement; elem.id = "qr"; elem.removeAttribute("width"); elem.removeAttribute("height"); - (document.querySelector("#qr") as SVGElement).outerHTML = elem.outerHTML; + document.querySelector("#qr").outerHTML = elem.outerHTML; }; window.onload = async () => { window.onkeydown = (e: KeyboardEvent) => { if (!e.ctrlKey && !e.metaKey) return; switch (e.key) { - case "s": { + case "v": { e.preventDefault(); - (document.querySelector("#toggle-svg") as HTMLInputElement).checked = true; + idbSet("export-type", "svg"); + DOM.toggle.svg.checked = true; break; } case "p": { e.preventDefault(); - (document.querySelector("#toggle-png") as HTMLInputElement).checked = true; + idbSet("export-type", "png"); + DOM.toggle.png.checked = true; break; } case "j": { e.preventDefault(); - (document.querySelector("#toggle-jpg") as HTMLInputElement).checked = true; + idbSet("export-type", "jpeg"); + DOM.toggle.jpg.checked = true; break; } + case "s": case "d": { e.preventDefault(); download(); @@ -88,40 +141,51 @@ window.onload = async () => { copy(); break; } + case ",": { + e.preventDefault(); + window.location.href = "/settings.html"; + break; + } default: { break; } } }; let content = await idbGet("content"); - (document.querySelector("#content") as HTMLInputElement).value = content ?? window.location.origin; + DOM.content.value = content ?? window.location.origin; updateQR(); - (document.querySelector("#content") as HTMLInputElement).onkeyup = (document.querySelector("#content") as HTMLInputElement).onpaste = () => updateQR(); - (document.querySelector("#content") as HTMLInputElement).disabled = false; + DOM.content.onkeyup = DOM.content.onpaste = () => updateQR(); + DOM.content.disabled = false; let type = await idbGet("export-type") as ImageType ?? "png"; switch (type) { case "jpeg": { - (document.querySelector("#toggle-jpg") as HTMLInputElement).checked = true; + DOM.toggle.jpg.checked = true; break; } case "svg": { - (document.querySelector("#toggle-svg") as HTMLInputElement).checked = true; + DOM.toggle.svg.checked = true; break; } case "png": { - (document.querySelector("#toggle-png") as HTMLInputElement).checked = true; + DOM.toggle.png.checked = true; break; } } - (document.querySelector("#toggle") as HTMLDivElement).onclick = () => idbSet("export-type", getType()); + DOM.toggle.div.onclick = () => idbSet("export-type", getType()); // @ts-ignore for (let i of document.querySelectorAll("input[name=toggle-state]")) { (i as HTMLInputElement).disabled = false; } - (document.querySelector("#copy") as HTMLButtonElement).onclick = copy; - (document.querySelector("#download") as HTMLButtonElement).onclick = download; + DOM.export.copy.onclick = copy; + DOM.export.download.onclick = download; // @ts-ignore - for (let i of (document.querySelector("#export") as HTMLDivElement).getElementsByTagName("button")) { + for (let i of DOM.export.div.getElementsByTagName("button")) { i.disabled = false; } + + window.onclick = (e) => { + if ((e.target as HTMLElement).tagName.toLowerCase() != "button" && (e.target as HTMLElement).tagName.toLowerCase() != "input") { + DOM.content.select(); + } + } }; \ No newline at end of file diff --git a/src/index.html b/src/index.html index af7da0e..c60bf88 100644 --- a/src/index.html +++ b/src/index.html @@ -5,6 +5,7 @@ QR Code Generator + @@ -27,6 +28,12 @@

+ + + + + +