/**
 * Skipped minification because the original files appears to be already minified.
 * Original file: /npm/dice-roller-parser@0.1.8/dist/index.js
 *
 * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files
 */
!function(e,r){if("object"==typeof exports&&"object"==typeof module)module.exports=r();else if("function"==typeof define&&define.amd)define([],r);else{var t=r();for(var o in t)("object"==typeof exports?exports:e)[o]=t[o]}}(this,(function(){return function(e){var r={};function t(o){if(r[o])return r[o].exports;var n=r[o]={i:o,l:!1,exports:{}};return e[o].call(n.exports,n,n.exports,t),n.l=!0,n.exports}return t.m=e,t.c=r,t.d=function(e,r,o){t.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:o})},t.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.t=function(e,r){if(1&r&&(e=t(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(t.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)t.d(o,n,function(r){return e[r]}.bind(null,n));return o},t.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(r,"a",r),r},t.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},t.p="",t(t.s=0)}([function(e,r,t){"use strict";function o(e){for(var t in e)r.hasOwnProperty(t)||(r[t]=e[t])}Object.defineProperty(r,"__esModule",{value:!0}),o(t(1)),o(t(3))},function(e,r,t){"use strict";Object.defineProperty(r,"__esModule",{value:!0});const o=t(2);r.DiceRoller=class{constructor(e,r=1e3){this.randFunction=Math.random,this.maxRollCount=1e3,e&&(this.randFunction=e),this.maxRollCount=r}parse(e){return o.parse(e)}roll(e){const r=o.parse(e);return this.rollType(r)}rollValue(e){return this.roll(e).value}rollParsed(e){return this.rollType(e)}rollType(e){let r;switch(e.type){case"diceExpression":r=this.rollDiceExpr(e);break;case"group":r=this.rollGroup(e);break;case"die":r=this.rollDie(e);break;case"expression":r=this.rollExpression(e);break;case"mathfunction":r=this.rollFunction(e);break;case"inline":r=this.rollType(e.expr);break;case"number":r=Object.assign(Object.assign({},e),{success:!1,valid:!0,order:0});break;default:throw new Error(`Unable to render ${e.type}`)}return e.label&&(r.label=e.label),r}rollDiceExpr(e){const r=this.rollType(e.head),t=[r],o=[],n=e.ops.reduce((e,r,n)=>{const l=this.rollType(r.tail);switch(l.order=n,t.push(l),o.push(r.op),r.op){case"+":return e+l.value;case"-":return e-l.value;default:return e}},r.value);return{dice:t,ops:o,success:!1,type:"diceexpressionroll",valid:!0,value:n,order:0}}rollGroup(e){let r=e.rolls.map((e,r)=>Object.assign(Object.assign({},this.rollType(e)),{order:r}));if(e.mods){const t=e.mods,o=e=>{const r=t.some(e=>["failure","success"].includes(e.type));return e=t.reduce((e,r)=>this.applyGroupMod(e,r),e),r&&(e=e.map(e=>(e.success||(e.value=0,e.success=!0),e))),e};if(1===r.length&&["die","diceexpressionroll"].includes(r[0].type)){const e=r[0];let t="die"===e.type?e.rolls:e.dice.filter(e=>"number"!==e.type).reduce((e,r)=>[...e,..."die"===r.type?r.rolls:r.dice],[]);t=o(t),e.value=t.reduce((e,r)=>r.valid?e+r.value:e,0)}else r=o(r)}return{dice:r,success:!1,type:"grouproll",valid:!0,value:r.reduce((e,r)=>r.valid?e+r.value:e,0),order:0}}rollDie(e){const r=this.rollType(e.count);if(r.value>this.maxRollCount)throw new Error("Entered number of dice too large.");let t,o;"fate"===e.die.type?(o={type:"fate",success:!1,valid:!1,value:0,order:0},t=Array.from({length:r.value},(e,r)=>this.generateFateRoll(r))):(o=this.rollType(e.die),t=Array.from({length:r.value},(e,r)=>this.generateDiceRoll(o.value,r))),e.mods&&(t=e.mods.reduce((e,r)=>this.applyMod(e,r),t)),e.targets&&(t=e.targets.reduce((e,r)=>this.applyMod(e,r),t).map(e=>(e.success||(e.value=0,e.success=!0),e)));let n=!1,l=0;if(e.match){const r=e.match,o=t.reduce((e,r)=>e.set(r.roll,(e.get(r.roll)||0)+1),new Map),s=new Set(Array.from(o.entries()).filter(([e,t])=>t>=r.min.value).filter(([e])=>!(r.mod&&r.expr)||this.successTest(r.mod,this.rollType(r.expr).value,e)).map(([e])=>e));t.filter(e=>s.has(e.roll)).forEach(e=>e.matched=!0),r.count&&(n=!0,l=s.size)}return e.sort&&(t=this.applySort(t,e.sort)),{count:r,die:o,rolls:t,success:!1,type:"die",valid:!0,value:n?l:t.reduce((e,r)=>r.valid?e+r.value:e,0),order:0,matched:n}}rollExpression(e){const r=this.rollType(e.head),t=[r],o=[],n=e.ops.reduce((e,r)=>{const n=this.rollType(r.tail);switch(t.push(n),o.push(r.op),r.op){case"+":return e+n.value;case"-":return e-n.value;case"*":return e*n.value;case"/":return e/n.value;case"%":return e%n.value;case"**":return e**n.value;default:return e}},r.value);return{dice:t,ops:o,success:!1,type:"expressionroll",valid:!0,value:n,order:0}}rollFunction(e){const r=this.rollType(e.expr);let t;switch(e.op){case"floor":t=Math.floor(r.value);break;case"ceil":t=Math.ceil(r.value);break;case"round":t=Math.round(r.value);break;case"abs":t=Math.abs(r.value);break;default:t=r.value}return{expr:r,op:e.op,success:!1,type:"mathfunction",valid:!0,value:t,order:0}}applyGroupMod(e,r){return this.getGroupModMethod(r)(e)}getGroupModMethod(e){const r=e=>e.value;switch(e.type){case"success":return this.getSuccessMethod(e,r);case"failure":return this.getFailureMethod(e,r);case"keep":return this.getKeepMethod(e,r);case"drop":return this.getDropMethod(e,r);default:throw new Error(`Mod ${e.type} is not recognised`)}}applyMod(e,r){return this.getModMethod(r)(e)}getModMethod(e){const r=e=>e.roll;switch(e.type){case"success":return this.getSuccessMethod(e,r);case"failure":return this.getFailureMethod(e,r);case"crit":return this.getCritSuccessMethod(e,r);case"critfail":return this.getCritFailureMethod(e,r);case"keep":return t=>this.getKeepMethod(e,r)(t).sort((e,r)=>e.order-r.order);case"drop":return t=>this.getDropMethod(e,r)(t).sort((e,r)=>e.order-r.order);case"explode":return this.getExplodeMethod(e);case"compound":return this.getCompoundMethod(e);case"penetrate":return this.getPenetrateMethod(e);case"reroll":return this.getReRollMethod(e);case"rerollOnce":return this.getReRollOnceMethod(e);default:throw new Error(`Mod ${e.type} is not recognised`)}}applySort(e,r){return e.sort((e,t)=>r.asc?e.roll-t.roll:t.roll-e.roll),e.forEach((e,r)=>e.order=r),e}getCritSuccessMethod(e,r){const t=this.rollType(e.expr);return o=>o.map(o=>{if(!o.valid)return o;if("roll"!==o.type)return o;if(o.success)return o;const n=o;return this.successTest(e.mod,t.value,r(o))?n.critical="success":"success"===n.critical&&(n.critical=null),o})}getCritFailureMethod(e,r){const t=this.rollType(e.expr);return o=>o.map(o=>{if(!o.valid)return o;if("roll"!==o.type)return o;if(o.success)return o;const n=o;return this.successTest(e.mod,t.value,r(o))?n.critical="failure":"failure"===n.critical&&(n.critical=null),o})}getSuccessMethod(e,r){const t=this.rollType(e.expr);return o=>o.map(o=>o.valid?(this.successTest(e.mod,t.value,r(o))&&(o.success?o.value+=1:(o.value=1,o.success=!0)),o):o)}getFailureMethod(e,r){const t=this.rollType(e.expr);return o=>o.map(o=>o.valid?(this.successTest(e.mod,t.value,r(o))&&(o.success?o.value-=1:(o.value=-1,o.success=!0)),o):o)}getKeepMethod(e,r){const t=this.rollType(e.expr);return o=>{if(0===o.length)return o;o=o.sort((t,o)=>"l"===e.highlow?r(o)-r(t):r(t)-r(o)).sort((e,r)=>(e.valid?1:0)-(r.valid?1:0));const n=Math.max(Math.min(t.value,o.length),0);let l=0,s=0;const u=o.reduce((e,r)=>(r.valid?1:0)+e,0)-n;for(;s<o.length&&l<u;)o[s].valid&&(o[s].valid=!1,l++),s++;return o}}getDropMethod(e,r){const t=this.rollType(e.expr);return o=>{o=o.sort((t,o)=>"h"===e.highlow?r(o)-r(t):r(t)-r(o));const n=Math.max(Math.min(t.value,o.length),0);let l=0,s=0;for(;s<o.length&&l<n;)o[s].valid&&(o[s].valid=!1,l++),s++;return o}}getExplodeMethod(e){const r=e.target?this.rollType(e.target.value):null;return t=>{const o=r?t=>this.successTest(e.target.mod,r.value,t.roll):e=>this.successTest("=","fateroll"===e.type?1:e.die,e.roll);if("roll"===t[0].type&&o({roll:1})&&o({roll:t[0].die}))throw new Error("Invalid reroll target");for(let e=0;e<t.length;e++){let r=t[e];r.order=e;let n=0;for(;o(r)&&n++<1e3;){const o=this.reRoll(r,++e);t.splice(e,0,o),r=o}}return t}}getCompoundMethod(e){const r=e.target?this.rollType(e.target.value):null;return t=>{const o=r?t=>this.successTest(e.target.mod,r.value,t.roll):e=>this.successTest("=","fateroll"===e.type?1:e.die,e.roll);if("roll"===t[0].type&&o({roll:1})&&o({roll:t[0].die}))throw new Error("Invalid reroll target");for(let e=0;e<t.length;e++){let r=t[e],n=r.roll,l=0;for(;o(r)&&l++<1e3;){const o=this.reRoll(t[e],++e);n+=o.roll,r=o}r.value=n,r.roll=n}return t}}getPenetrateMethod(e){const r=e.target?this.rollType(e.target.value):null;return t=>{const o=r?t=>this.successTest(e.target.mod,r.value,t.roll):e=>this.successTest("=","fateroll"===e.type?1:e.die,e.roll);if(r&&"roll"===t[0].type&&o(t[0])&&this.successTest(e.target.mod,r.value,1))throw new Error("Invalid reroll target");for(let e=0;e<t.length;e++){let r=t[e];r.order=e;let n=0;for(;o(r)&&n++<1e3;){const o=this.reRoll(r,++e);o.value-=1,o.roll-=1,t.splice(e,0,o),r=o}}return t}}getReRollMethod(e){const r=e.target?this.successTest.bind(null,e.target.mod,this.rollType(e.target.value).value):this.successTest.bind(null,"=",1);return e=>{if("roll"===e[0].type&&r(1)&&r(e[0].die))throw new Error("Invalid reroll target");for(let t=0;t<e.length;t++)for(;r(e[t].roll);){e[t].valid=!1;const r=this.reRoll(e[t],t+1);e.splice(++t,0,r)}return e}}getReRollOnceMethod(e){const r=e.target?this.successTest.bind(null,e.target.mod,this.rollType(e.target.value).value):this.successTest.bind(null,"=",1);return e=>{if("roll"===e[0].type&&r(1)&&r(e[0].die))throw new Error("Invalid reroll target");for(let t=0;t<e.length;t++)if(r(e[t].roll)){e[t].valid=!1;const r=this.reRoll(e[t],t+1);e.splice(++t,0,r)}return e}}successTest(e,r,t){switch(e){case">":return t>=r;case"<":return t<=r;case"=":default:return t==r}}reRoll(e,r){switch(e.type){case"roll":return this.generateDiceRoll(e.die,r);case"fateroll":return this.generateFateRoll(r);default:throw new Error(`Cannot do a reroll of a ${e.type}.`)}}generateDiceRoll(e,r){const t=Math.floor(this.randFunction()*e)+1;return{critical:t===e?"success":1===t?"failure":null,die:e,matched:!1,order:r,roll:t,success:!1,type:"roll",valid:!0,value:t}}generateFateRoll(e){const r=Math.floor(3*this.randFunction())-1;return{matched:!1,order:e,roll:r,success:!1,type:"fateroll",valid:!0,value:r}}}},function(e,r,t){"use strict";function o(e,r,t,n){this.message=e,this.expected=r,this.found=t,this.location=n,this.name="SyntaxError","function"==typeof Error.captureStackTrace&&Error.captureStackTrace(this,o)}!function(e,r){function t(){this.constructor=e}t.prototype=r.prototype,e.prototype=new t}(o,Error),o.buildMessage=function(e,r){var t={literal:function(e){return'"'+n(e.text)+'"'},class:function(e){var r,t="";for(r=0;r<e.parts.length;r++)t+=e.parts[r]instanceof Array?l(e.parts[r][0])+"-"+l(e.parts[r][1]):l(e.parts[r]);return"["+(e.inverted?"^":"")+t+"]"},any:function(e){return"any character"},end:function(e){return"end of input"},other:function(e){return e.description}};function o(e){return e.charCodeAt(0).toString(16).toUpperCase()}function n(e){return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\0/g,"\\0").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/[\x00-\x0F]/g,(function(e){return"\\x0"+o(e)})).replace(/[\x10-\x1F\x7F-\x9F]/g,(function(e){return"\\x"+o(e)}))}function l(e){return e.replace(/\\/g,"\\\\").replace(/\]/g,"\\]").replace(/\^/g,"\\^").replace(/-/g,"\\-").replace(/\0/g,"\\0").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/[\x00-\x0F]/g,(function(e){return"\\x0"+o(e)})).replace(/[\x10-\x1F\x7F-\x9F]/g,(function(e){return"\\x"+o(e)}))}return"Expected "+function(e){var r,o,n,l=new Array(e.length);for(r=0;r<e.length;r++)l[r]=(n=e[r],t[n.type](n));if(l.sort(),l.length>0){for(r=1,o=1;r<l.length;r++)l[r-1]!==l[r]&&(l[o]=l[r],o++);l.length=o}switch(l.length){case 1:return l[0];case 2:return l[0]+" or "+l[1];default:return l.slice(0,-1).join(", ")+", or "+l[l.length-1]}}(e)+" but "+function(e){return e?'"'+n(e)+'"':"end of input"}(r)+" found."},e.exports={SyntaxError:o,parse:function(e,r){r=void 0!==r?r:{};var t,n={},l={start:ye},s=ye,u={type:"any"},a=ie("[[",!1),c=ie("]]",!1),i=function(e,r){return r&&(e.label=r),e},d=ie(">",!1),h=ie("<",!1),p=ie("=",!1),f=ie("f",!1),v=ie("cs",!1),g=ie("cf",!1),y=ie("m",!1),m=ie("t",!1),b=ie("k",!1),x=ie("l",!1),A=ie("h",!1),C=ie("d",!1),M=ie("{",!1),w=ie(",",!1),R=ie("}",!1),T=ie("+",!1),$=ie("sa",!1),E=ie("sd",!1),F=ie("!",!1),k=ie("!!",!1),j=ie("!p",!1),_=ie("r",!1),O=ie("ro",!1),S=ie("F",!1),D=ie("%",!1),P=ie("(",!1),G=ie(")",!1),I=ie("-",!1),B=function(e,r){if(0==r.length)return e;return{head:e,type:"expression",ops:r.map(e=>({type:"math",op:e[1],tail:e[3]}))}},W=ie("*",!1),K=ie("/",!1),U=ie("**",!1),z=ie("floor",!1),V=ie("ceil",!1),q=ie("round",!1),H=ie("abs",!1),J=he("integer"),L=/^[0-9]/,N=de([["0","9"]],!1,!1),Q=function(){return{type:"number",value:parseInt(e.substring(le,ne),10)}},X=ie("[",!1),Y=/^[^\]]/,Z=de(["]"],!0,!1),ee=ie("]",!1),re=he("whitespace"),te=/^[ \t\n\r]/,oe=de([" ","\t","\n","\r"],!1,!1),ne=0,le=0,se=[{line:1,column:1}],ue=0,ae=[],ce=0;if("startRule"in r){if(!(r.startRule in l))throw new Error("Can't start parsing from rule \""+r.startRule+'".');s=l[r.startRule]}function ie(e,r){return{type:"literal",text:e,ignoreCase:r}}function de(e,r,t){return{type:"class",parts:e,inverted:r,ignoreCase:t}}function he(e){return{type:"other",description:e}}function pe(r){var t,o=se[r];if(o)return o;for(t=r-1;!se[t];)t--;for(o={line:(o=se[t]).line,column:o.column};t<r;)10===e.charCodeAt(t)?(o.line++,o.column=1):o.column++,t++;return se[r]=o,o}function fe(e,r){var t=pe(e),o=pe(r);return{start:{offset:e,line:t.line,column:t.column},end:{offset:r,line:o.line,column:o.column}}}function ve(e){ne<ue||(ne>ue&&(ue=ne,ae=[]),ae.push(e))}function ge(e,r,t){return new o(o.buildMessage(e,r),e,r,t)}function ye(){var r,t,o,l,s,a;if(r=ne,(t=Pe())!==n){for(o=[],e.length>ne?(l=e.charAt(ne),ne++):(l=n,0===ce&&ve(u));l!==n;)o.push(l),e.length>ne?(l=e.charAt(ne),ne++):(l=n,0===ce&&ve(u));o!==n?(le=r,a=o,(s=t).root=!0,a&&(s.label=a.join("")),r=t=s):(ne=r,r=n)}else ne=r,r=n;return r}function me(){var r,t,o;return r=ne,(t=function(){var r,t,o,l,s;if(r=ne,(t=function(){var r,t,o,l,s,u,a,c,i;r=ne,123===e.charCodeAt(ne)?(t="{",ne++):(t=n,0===ce&&ve(M));if(t!==n)if(qe()!==n)if((o=Te())!==n){for(l=[],s=ne,(u=qe())!==n?(44===e.charCodeAt(ne)?(a=",",ne++):(a=n,0===ce&&ve(w)),a!==n&&(c=qe())!==n&&(i=Te())!==n?s=u=[u,a,c,i]:(ne=s,s=n)):(ne=s,s=n);s!==n;)l.push(s),s=ne,(u=qe())!==n?(44===e.charCodeAt(ne)?(a=",",ne++):(a=n,0===ce&&ve(w)),a!==n&&(c=qe())!==n&&(i=Te())!==n?s=u=[u,a,c,i]:(ne=s,s=n)):(ne=s,s=n);l!==n&&(s=qe())!==n?(125===e.charCodeAt(ne)?(u="}",ne++):(u=n,0===ce&&ve(R)),u!==n?(le=r,t={rolls:[o,...l.map(e=>e[3])],type:"group"},r=t):(ne=r,r=n)):(ne=r,r=n)}else ne=r,r=n;else ne=r,r=n;else ne=r,r=n;return r}())!==n){for(o=[],(l=we())===n&&(l=Re())===n&&(l=be())===n&&(l=xe());l!==n;)o.push(l),(l=we())===n&&(l=Re())===n&&(l=be())===n&&(l=xe());o!==n&&(l=qe())!==n?((s=Ve())===n&&(s=null),s!==n?(le=r,u=t,c=s,(a=o).length>0&&(u.mods=(u.mods||[]).concat(a)),c&&(u.label=c),r=t=u):(ne=r,r=n)):(ne=r,r=n)}else ne=r,r=n;var u,a,c;return r}())===n&&(t=Ee())===n&&(t=ze()),t!==n&&qe()!==n?((o=Ve())===n&&(o=null),o!==n?(le=r,r=t=i(t,o)):(ne=r,r=n)):(ne=r,r=n),r}function be(){var r,t,o;return r=ne,62===e.charCodeAt(ne)?(t=">",ne++):(t=n,0===ce&&ve(d)),t===n&&(60===e.charCodeAt(ne)?(t="<",ne++):(t=n,0===ce&&ve(h)),t===n&&(61===e.charCodeAt(ne)?(t="=",ne++):(t=n,0===ce&&ve(p)))),t!==n&&(o=De())!==n?(le=r,r=t={type:"success",mod:t,expr:o}):(ne=r,r=n),r}function xe(){var r,t,o,l;return r=ne,102===e.charCodeAt(ne)?(t="f",ne++):(t=n,0===ce&&ve(f)),t!==n?(62===e.charCodeAt(ne)?(o=">",ne++):(o=n,0===ce&&ve(d)),o===n&&(60===e.charCodeAt(ne)?(o="<",ne++):(o=n,0===ce&&ve(h)),o===n&&(61===e.charCodeAt(ne)?(o="=",ne++):(o=n,0===ce&&ve(p)))),o===n&&(o=null),o!==n&&(l=De())!==n?(le=r,r=t={type:"failure",mod:o,expr:l}):(ne=r,r=n)):(ne=r,r=n),r}function Ae(){var r,t,o,l;return r=ne,"cs"===e.substr(ne,2)?(t="cs",ne+=2):(t=n,0===ce&&ve(v)),t!==n?(62===e.charCodeAt(ne)?(o=">",ne++):(o=n,0===ce&&ve(d)),o===n&&(60===e.charCodeAt(ne)?(o="<",ne++):(o=n,0===ce&&ve(h)),o===n&&(61===e.charCodeAt(ne)?(o="=",ne++):(o=n,0===ce&&ve(p)))),o===n&&(o=null),o!==n&&(l=De())!==n?(le=r,r=t={type:"crit",mod:o,expr:l}):(ne=r,r=n)):(ne=r,r=n),r}function Ce(){var r,t,o,l;return r=ne,"cf"===e.substr(ne,2)?(t="cf",ne+=2):(t=n,0===ce&&ve(g)),t!==n?(62===e.charCodeAt(ne)?(o=">",ne++):(o=n,0===ce&&ve(d)),o===n&&(60===e.charCodeAt(ne)?(o="<",ne++):(o=n,0===ce&&ve(h)),o===n&&(61===e.charCodeAt(ne)?(o="=",ne++):(o=n,0===ce&&ve(p)))),o===n&&(o=null),o!==n&&(l=De())!==n?(le=r,r=t={type:"critfail",mod:o,expr:l}):(ne=r,r=n)):(ne=r,r=n),r}function Me(){var r,t,o,l,s;return r=ne,109===e.charCodeAt(ne)?(t="m",ne++):(t=n,0===ce&&ve(y)),t!==n?(116===e.charCodeAt(ne)?(o="t",ne++):(o=n,0===ce&&ve(m)),o===n&&(o=null),o!==n?((l=ze())===n&&(l=null),l!==n?((s=function(){var r,t,o;return r=ne,62===e.charCodeAt(ne)?(t=">",ne++):(t=n,0===ce&&ve(d)),t===n&&(60===e.charCodeAt(ne)?(t="<",ne++):(t=n,0===ce&&ve(h)),t===n&&(61===e.charCodeAt(ne)?(t="=",ne++):(t=n,0===ce&&ve(p)))),t!==n&&(o=De())!==n?(le=r,r=t={mod:t,expr:o}):(ne=r,r=n),r}())===n&&(s=null),s!==n?(le=r,r=t=function(e,r,t){const o={type:"match",min:r||{type:"number",value:2},count:!!e};return t&&(o.mod=t.mod,o.expr=t.expr),o}(o,l,s)):(ne=r,r=n)):(ne=r,r=n)):(ne=r,r=n)):(ne=r,r=n),r}function we(){var r,t,o,l;return r=ne,107===e.charCodeAt(ne)?(t="k",ne++):(t=n,0===ce&&ve(b)),t!==n?(108===e.charCodeAt(ne)?(o="l",ne++):(o=n,0===ce&&ve(x)),o===n&&(104===e.charCodeAt(ne)?(o="h",ne++):(o=n,0===ce&&ve(A))),o===n&&(o=null),o!==n?((l=De())===n&&(l=null),l!==n?(le=r,r=t={type:"keep",highlow:o,expr:l||Je}):(ne=r,r=n)):(ne=r,r=n)):(ne=r,r=n),r}function Re(){var r,t,o,l;return r=ne,100===e.charCodeAt(ne)?(t="d",ne++):(t=n,0===ce&&ve(C)),t!==n?(108===e.charCodeAt(ne)?(o="l",ne++):(o=n,0===ce&&ve(x)),o===n&&(104===e.charCodeAt(ne)?(o="h",ne++):(o=n,0===ce&&ve(A))),o===n&&(o=null),o!==n?((l=De())===n&&(l=null),l!==n?(le=r,r=t={type:"drop",highlow:o,expr:l||Je}):(ne=r,r=n)):(ne=r,r=n)):(ne=r,r=n),r}function Te(){var r,t,o,l,s,u,a,c;if(r=ne,(t=$e())!==n){for(o=[],l=ne,(s=qe())!==n?(43===e.charCodeAt(ne)?(u="+",ne++):(u=n,0===ce&&ve(T)),u!==n&&(a=qe())!==n&&(c=$e())!==n?l=s=[s,u,a,c]:(ne=l,l=n)):(ne=l,l=n);l!==n;)o.push(l),l=ne,(s=qe())!==n?(43===e.charCodeAt(ne)?(u="+",ne++):(u=n,0===ce&&ve(T)),u!==n&&(a=qe())!==n&&(c=$e())!==n?l=s=[s,u,a,c]:(ne=l,l=n)):(ne=l,l=n);o!==n?(le=r,r=t=function(e,r){if(0==r.length)return e;return{head:e,type:"diceExpression",ops:r.map(e=>({type:"math",op:e[1],tail:e[3]}))}}(t,o)):(ne=r,r=n)}else ne=r,r=n;return r}function $e(){var e;return(e=Ee())===n&&(e=Pe()),e}function Ee(){var r,t,o;return r=ne,(t=function(){var r,t,o,l,s;if(r=ne,(t=function(){var r,t,o,l;if(r=ne,(t=function(){var r,t,o,l;r=ne,(t=De())===n&&(t=null);t!==n?(100===e.charCodeAt(ne)?(o="d",ne++):(o=n,0===ce&&ve(C)),o!==n?((l=function(){var r,t;r=ne,70===e.charCodeAt(ne)?(t="F",ne++):(t=n,0===ce&&ve(S));t===n&&(102===e.charCodeAt(ne)?(t="f",ne++):(t=n,0===ce&&ve(f)));t!==n&&(le=r,t={type:"fate"});return r=t}())===n&&(l=function(){var r,t;r=ne,37===e.charCodeAt(ne)?(t="%",ne++):(t=n,0===ce&&ve(D));t!==n&&(le=r,t={type:"number",value:"100"});return r=t}())===n&&(l=De()),l!==n?(le=r,t={die:l,count:t||{type:"number",value:1},type:"die"},r=t):(ne=r,r=n)):(ne=r,r=n)):(ne=r,r=n);return r}())!==n){for(o=[],(l=ke())===n&&(l=je())===n&&(l=Fe())===n&&(l=Oe())===n&&(l=_e());l!==n;)o.push(l),(l=ke())===n&&(l=je())===n&&(l=Fe())===n&&(l=Oe())===n&&(l=_e());o!==n?(le=r,u=o,(s=t).mods=(s.mods||[]).concat(u),r=t=s):(ne=r,r=n)}else ne=r,r=n;var s,u;return r}())!==n){for(o=[],(l=Re())===n&&(l=we())===n&&(l=be())===n&&(l=xe())===n&&(l=Ce())===n&&(l=Ae());l!==n;)o.push(l),(l=Re())===n&&(l=we())===n&&(l=be())===n&&(l=xe())===n&&(l=Ce())===n&&(l=Ae());o!==n?((l=Me())===n&&(l=null),l!==n?((s=function(){var r,t;r=ne,"sa"===e.substr(ne,2)?(t="sa",ne+=2):(t=n,0===ce&&ve($));t!==n&&(le=r,t={type:"sort",asc:!0});return r=t}())===n&&(s=function(){var r,t;r=ne,"sd"===e.substr(ne,2)?(t="sd",ne+=2):(t=n,0===ce&&ve(E));t!==n&&(le=r,t={type:"sort",asc:!1});return r=t}()),s===n&&(s=null),s!==n?(le=r,t=function(e,r,t,o){const n=r.filter(e=>["success","failure"].includes(e.type));return r=r.filter(e=>!n.includes(e)),e.mods=(e.mods||[]).concat(r),n.length>0&&(e.targets=n),t&&(e.match=t),o&&(e.sort=o),e}(t,o,l,s),r=t):(ne=r,r=n)):(ne=r,r=n)):(ne=r,r=n)}else ne=r,r=n;return r}())!==n&&qe()!==n?((o=Ve())===n&&(o=null),o!==n?(le=r,r=t=i(t,o)):(ne=r,r=n)):(ne=r,r=n),r}function Fe(){var r,t,o;return r=ne,33===e.charCodeAt(ne)?(t="!",ne++):(t=n,0===ce&&ve(F)),t!==n?((o=Se())===n&&(o=null),o!==n?(le=r,r=t={type:"explode",target:o}):(ne=r,r=n)):(ne=r,r=n),r}function ke(){var r,t,o;return r=ne,"!!"===e.substr(ne,2)?(t="!!",ne+=2):(t=n,0===ce&&ve(k)),t!==n?((o=Se())===n&&(o=null),o!==n?(le=r,r=t={type:"compound",target:o}):(ne=r,r=n)):(ne=r,r=n),r}function je(){var r,t,o;return r=ne,"!p"===e.substr(ne,2)?(t="!p",ne+=2):(t=n,0===ce&&ve(j)),t!==n?((o=Se())===n&&(o=null),o!==n?(le=r,r=t={type:"penetrate",target:o}):(ne=r,r=n)):(ne=r,r=n),r}function _e(){var r,t,o;return r=ne,114===e.charCodeAt(ne)?(t="r",ne++):(t=n,0===ce&&ve(_)),t!==n?((o=Se())===n&&(o=null),o!==n?(le=r,r=t={type:"reroll",target:o||He}):(ne=r,r=n)):(ne=r,r=n),r}function Oe(){var r,t,o;return r=ne,"ro"===e.substr(ne,2)?(t="ro",ne+=2):(t=n,0===ce&&ve(O)),t!==n?((o=Se())===n&&(o=null),o!==n?(le=r,r=t={type:"rerollOnce",target:o||He}):(ne=r,r=n)):(ne=r,r=n),r}function Se(){var r,t,o;return r=ne,62===e.charCodeAt(ne)?(t=">",ne++):(t=n,0===ce&&ve(d)),t===n&&(60===e.charCodeAt(ne)?(t="<",ne++):(t=n,0===ce&&ve(h)),t===n&&(61===e.charCodeAt(ne)?(t="=",ne++):(t=n,0===ce&&ve(p)))),t===n&&(t=null),t!==n&&(o=De())!==n?(le=r,r=t={type:"target",mod:t,value:o}):(ne=r,r=n),r}function De(){var e;return(e=Ge())===n&&(e=ze()),e}function Pe(){var r;return(r=function(){var r,t,o,l;return r=ne,"[["===e.substr(ne,2)?(t="[[",ne+=2):(t=n,0===ce&&ve(a)),t!==n&&(o=Pe())!==n?("]]"===e.substr(ne,2)?(l="]]",ne+=2):(l=n,0===ce&&ve(c)),l!==n?(le=r,r=t={type:"inline",expr:o}):(ne=r,r=n)):(ne=r,r=n),r}())===n&&(r=Ie())===n&&(r=Ge()),r}function Ge(){var r,t,o,l,s,u,a;return r=ne,40===e.charCodeAt(ne)?(t="(",ne++):(t=n,0===ce&&ve(P)),t!==n&&(o=Ie())!==n?(41===e.charCodeAt(ne)?(l=")",ne++):(l=n,0===ce&&ve(G)),l!==n&&qe()!==n?((s=Ve())===n&&(s=null),s!==n?(le=r,u=o,(a=s)&&(u.label=a),r=t=u):(ne=r,r=n)):(ne=r,r=n)):(ne=r,r=n),r}function Ie(){var r,t,o,l,s,u,a,c;if(r=ne,(t=Be())!==n){for(o=[],l=ne,(s=qe())!==n?(43===e.charCodeAt(ne)?(u="+",ne++):(u=n,0===ce&&ve(T)),u===n&&(45===e.charCodeAt(ne)?(u="-",ne++):(u=n,0===ce&&ve(I))),u!==n&&(a=qe())!==n&&(c=Be())!==n?l=s=[s,u,a,c]:(ne=l,l=n)):(ne=l,l=n);l!==n;)o.push(l),l=ne,(s=qe())!==n?(43===e.charCodeAt(ne)?(u="+",ne++):(u=n,0===ce&&ve(T)),u===n&&(45===e.charCodeAt(ne)?(u="-",ne++):(u=n,0===ce&&ve(I))),u!==n&&(a=qe())!==n&&(c=Be())!==n?l=s=[s,u,a,c]:(ne=l,l=n)):(ne=l,l=n);o!==n?(le=r,r=t=B(t,o)):(ne=r,r=n)}else ne=r,r=n;return r}function Be(){var r,t,o,l,s,u,a,c;if(r=ne,(t=We())!==n){for(o=[],l=ne,(s=qe())!==n?(42===e.charCodeAt(ne)?(u="*",ne++):(u=n,0===ce&&ve(W)),u===n&&(47===e.charCodeAt(ne)?(u="/",ne++):(u=n,0===ce&&ve(K))),u!==n&&(a=qe())!==n&&(c=We())!==n?l=s=[s,u,a,c]:(ne=l,l=n)):(ne=l,l=n);l!==n;)o.push(l),l=ne,(s=qe())!==n?(42===e.charCodeAt(ne)?(u="*",ne++):(u=n,0===ce&&ve(W)),u===n&&(47===e.charCodeAt(ne)?(u="/",ne++):(u=n,0===ce&&ve(K))),u!==n&&(a=qe())!==n&&(c=We())!==n?l=s=[s,u,a,c]:(ne=l,l=n)):(ne=l,l=n);o!==n?(le=r,r=t=B(t,o)):(ne=r,r=n)}else ne=r,r=n;return r}function We(){var r,t,o,l,s,u,a,c;if(r=ne,(t=Ue())!==n){for(o=[],l=ne,(s=qe())!==n?("**"===e.substr(ne,2)?(u="**",ne+=2):(u=n,0===ce&&ve(U)),u===n&&(37===e.charCodeAt(ne)?(u="%",ne++):(u=n,0===ce&&ve(D))),u!==n&&(a=qe())!==n&&(c=Ue())!==n?l=s=[s,u,a,c]:(ne=l,l=n)):(ne=l,l=n);l!==n;)o.push(l),l=ne,(s=qe())!==n?("**"===e.substr(ne,2)?(u="**",ne+=2):(u=n,0===ce&&ve(U)),u===n&&(37===e.charCodeAt(ne)?(u="%",ne++):(u=n,0===ce&&ve(D))),u!==n&&(a=qe())!==n&&(c=Ue())!==n?l=s=[s,u,a,c]:(ne=l,l=n)):(ne=l,l=n);o!==n?(le=r,r=t=B(t,o)):(ne=r,r=n)}else ne=r,r=n;return r}function Ke(){var r,t,o,l,s;return r=ne,(t=function(){var r;return"floor"===e.substr(ne,5)?(r="floor",ne+=5):(r=n,0===ce&&ve(z)),r===n&&("ceil"===e.substr(ne,4)?(r="ceil",ne+=4):(r=n,0===ce&&ve(V)),r===n&&("round"===e.substr(ne,5)?(r="round",ne+=5):(r=n,0===ce&&ve(q)),r===n&&("abs"===e.substr(ne,3)?(r="abs",ne+=3):(r=n,0===ce&&ve(H))))),r}())!==n&&qe()!==n?(40===e.charCodeAt(ne)?(o="(",ne++):(o=n,0===ce&&ve(P)),o!==n&&qe()!==n&&(l=Ie())!==n&&qe()!==n?(41===e.charCodeAt(ne)?(s=")",ne++):(s=n,0===ce&&ve(G)),s!==n?(le=r,r=t={type:"mathfunction",op:t,expr:l}):(ne=r,r=n)):(ne=r,r=n)):(ne=r,r=n),r}function Ue(){var e;return(e=Ke())===n&&(e=me())===n&&(e=Ge()),e}function ze(){var r,t,o,l;if(ce++,r=ne,45===e.charCodeAt(ne)?(t="-",ne++):(t=n,0===ce&&ve(I)),t===n&&(t=null),t!==n){if(o=[],L.test(e.charAt(ne))?(l=e.charAt(ne),ne++):(l=n,0===ce&&ve(N)),l!==n)for(;l!==n;)o.push(l),L.test(e.charAt(ne))?(l=e.charAt(ne),ne++):(l=n,0===ce&&ve(N));else o=n;o!==n?(le=r,r=t=Q()):(ne=r,r=n)}else ne=r,r=n;return ce--,r===n&&(t=n,0===ce&&ve(J)),r}function Ve(){var r,t,o,l;if(r=ne,91===e.charCodeAt(ne)?(t="[",ne++):(t=n,0===ce&&ve(X)),t!==n){if(o=[],Y.test(e.charAt(ne))?(l=e.charAt(ne),ne++):(l=n,0===ce&&ve(Z)),l!==n)for(;l!==n;)o.push(l),Y.test(e.charAt(ne))?(l=e.charAt(ne),ne++):(l=n,0===ce&&ve(Z));else o=n;o!==n?(93===e.charCodeAt(ne)?(l="]",ne++):(l=n,0===ce&&ve(ee)),l!==n?(le=r,r=t=o.join("")):(ne=r,r=n)):(ne=r,r=n)}else ne=r,r=n;return r}function qe(){var r,t;for(ce++,r=[],te.test(e.charAt(ne))?(t=e.charAt(ne),ne++):(t=n,0===ce&&ve(oe));t!==n;)r.push(t),te.test(e.charAt(ne))?(t=e.charAt(ne),ne++):(t=n,0===ce&&ve(oe));return ce--,r===n&&(t=n,0===ce&&ve(re)),r}const He={type:"target",mod:"=",value:{type:"number",value:1}},Je={type:"number",value:1};if((t=s())!==n&&ne===e.length)return t;throw t!==n&&ne<e.length&&ve({type:"end"}),ge(ae,ue<e.length?e.charAt(ue):null,ue<e.length?fe(ue,ue+1):fe(ue,ue))}}},function(e,r,t){"use strict";Object.defineProperty(r,"__esModule",{value:!0});r.DiscordRollRenderer=class{render(e){return this.doRender(e,!0)}doRender(e,r=!1){let t="";switch(e.type){case"diceexpressionroll":t=this.renderGroupExpr(e);break;case"grouproll":t=this.renderGroup(e);break;case"die":t=this.renderDie(e);break;case"expressionroll":t=this.renderExpression(e);break;case"mathfunction":t=this.renderFunction(e);break;case"roll":return this.renderRoll(e);case"fateroll":return this.renderFateRoll(e);case"number":const r=e.label?` (${e.label})`:"";return`${e.value}${r}`;case"fate":return"F";default:throw new Error("Unable to render")}return e.valid||(t="~~"+t.replace(/~~/g,"")+"~~"),r?this.stripBrackets(t):e.label?`(${e.label}: ${t})`:t}renderGroup(e){const r=[];for(const t of e.dice)r.push(this.doRender(t));return r.length>1?`{ ${r.join(" + ")} } = ${e.value}`:`{ ${this.stripBrackets(r[0])} } = ${e.value}`}renderGroupExpr(e){const r=[];for(const t of e.dice)r.push(this.doRender(t));return r.length>1?`(${r.join(" + ")} = ${e.value})`:r[0]}renderDie(e){const r=[];for(const t of e.rolls)r.push(this.doRender(t));let t=`${r.join(", ")}`;["number","fate"].includes(e.die.type)&&"number"===e.count.type||(t+=`[*Rolling: ${this.doRender(e.count)}d${this.doRender(e.die)}*]`);const o=e.matched?` Match${1===e.value?"":"es"}`:"";return t+=` = ${e.value}${o}`,`(${t})`}renderExpression(e){if(e.dice.length>1){const r=[];for(let t=0;t<e.dice.length-1;t++)r.push(this.doRender(e.dice[t])),r.push(e.ops[t]);return r.push(this.doRender(e.dice.slice(-1)[0])),r.push("="),r.push(e.value+""),`(${r.join(" ")})`}return"number"===e.dice[0].type?e.value+"":this.doRender(e.dice[0])}renderFunction(e){const r=this.doRender(e.expr);return`(${e.op}${this.addBrackets(r)} = ${e.value})`}addBrackets(e){return e.startsWith("(")||(e=`(${e}`),e.endsWith(")")||(e=`${e})`),e}stripBrackets(e){return e.startsWith("(")&&(e=e.substring(1)),e.endsWith(")")&&(e=e.substring(0,e.length-1)),e}renderRoll(e){let r=`${e.roll}`;return e.valid?e.success&&1===e.value?r=`**${e.roll}**`:e.success&&-1===e.value?r=`*${e.roll}*`:e.success||"success"!==e.critical?e.success||"failure"!==e.critical||(r=`*${e.roll}*`):r=`**${e.roll}**`:r=`~~${e.roll}~~`,e.matched&&(r=`__${r}__`),r}renderFateRoll(e){const r=0===e.roll?"0":e.roll>0?"+":"-";let t=`${e.roll}`;return e.valid?e.success&&1===e.value?t=`**${r}**`:e.success&&-1===e.value&&(t=`*${r}*`):t=`~~${r}~~`,e.matched&&(t=`__${t}__`),t}}}])}));
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovLy93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly8vLi9zcmMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2RpY2VSb2xsZXIudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2RpY2Vyb2xsLmpzIiwid2VicGFjazovLy8uL3NyYy9kaXNjb3JkUm9sbFJlbmRlcmVyLnRzIl0sIm5hbWVzIjpbInJvb3QiLCJmYWN0b3J5IiwiZXhwb3J0cyIsIm1vZHVsZSIsImRlZmluZSIsImFtZCIsImEiLCJpIiwidGhpcyIsImluc3RhbGxlZE1vZHVsZXMiLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJsIiwibW9kdWxlcyIsImNhbGwiLCJtIiwiYyIsImQiLCJuYW1lIiwiZ2V0dGVyIiwibyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsInIiLCJTeW1ib2wiLCJ0b1N0cmluZ1RhZyIsInZhbHVlIiwidCIsIm1vZGUiLCJfX2VzTW9kdWxlIiwibnMiLCJjcmVhdGUiLCJrZXkiLCJiaW5kIiwibiIsIm9iamVjdCIsInByb3BlcnR5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJwIiwicyIsInBhcnNlciIsInJhbmRGdW5jdGlvbiIsIm1heFJvbGxzIiwiTWF0aCIsInJhbmRvbSIsIm1heFJvbGxDb3VudCIsImlucHV0IiwicGFyc2UiLCJyb2xsVHlwZSIsInJvbGwiLCJwYXJzZWQiLCJyZXNwb25zZSIsInR5cGUiLCJyb2xsRGljZUV4cHIiLCJyb2xsR3JvdXAiLCJyb2xsRGllIiwicm9sbEV4cHJlc3Npb24iLCJyb2xsRnVuY3Rpb24iLCJleHByIiwic3VjY2VzcyIsInZhbGlkIiwib3JkZXIiLCJFcnJvciIsImxhYmVsIiwiaGVhZFJvbGwiLCJoZWFkIiwicm9sbHMiLCJvcHMiLCJyZWR1Y2UiLCJoZWFkVmFsdWUiLCJtYXRoIiwidGFpbFJvbGwiLCJ0YWlsIiwicHVzaCIsIm9wIiwiZGljZSIsIm1hcCIsIm1vZHMiLCJhcHBseUdyb3VwTW9kcyIsImlzU3VjY2VzcyIsInNvbWUiLCJtb2QiLCJpbmNsdWRlcyIsImFyciIsImFwcGx5R3JvdXBNb2QiLCJkaWUiLCJsZW5ndGgiLCJmaWx0ZXIiLCJzdW0iLCJjb3VudCIsIkFycmF5IiwiZnJvbSIsIl8iLCJnZW5lcmF0ZUZhdGVSb2xsIiwiZ2VuZXJhdGVEaWNlUm9sbCIsIm1vZGRlZFJvbGxzIiwiYXBwbHlNb2QiLCJ0YXJnZXRzIiwidGFyZ2V0IiwibWF0Y2hlZCIsIm1hdGNoQ291bnQiLCJtYXRjaCIsImNvdW50cyIsInNldCIsIk1hcCIsIm1hdGNoZXMiLCJTZXQiLCJlbnRyaWVzIiwibWF0Y2hlZENvdW50IiwibWluIiwidmFsIiwic3VjY2Vzc1Rlc3QiLCJoYXMiLCJmb3JFYWNoIiwic2l6ZSIsInNvcnQiLCJhcHBseVNvcnQiLCJmbG9vciIsImNlaWwiLCJyb3VuZCIsImFicyIsImdldEdyb3VwTW9kTWV0aG9kIiwibG9va3VwIiwiZ2V0U3VjY2Vzc01ldGhvZCIsImdldEZhaWx1cmVNZXRob2QiLCJnZXRLZWVwTWV0aG9kIiwiZ2V0RHJvcE1ldGhvZCIsImdldE1vZE1ldGhvZCIsImdldENyaXRTdWNjZXNzTWV0aG9kIiwiZ2V0Q3JpdEZhaWx1cmVNZXRob2QiLCJiIiwiZ2V0RXhwbG9kZU1ldGhvZCIsImdldENvbXBvdW5kTWV0aG9kIiwiZ2V0UGVuZXRyYXRlTWV0aG9kIiwiZ2V0UmVSb2xsTWV0aG9kIiwiZ2V0UmVSb2xsT25jZU1ldGhvZCIsImFzYyIsImV4cHJSZXN1bHQiLCJjcml0Um9sbCIsImNyaXRpY2FsIiwiaGlnaGxvdyIsInRvS2VlcCIsIm1heCIsImRyb3BwZWQiLCJ0b0Ryb3AiLCJ0YXJnZXRWYWx1ZSIsInRhcmdldE1ldGhvZCIsImV4cGxvZGVDb3VudCIsIm5ld1JvbGwiLCJyZVJvbGwiLCJzcGxpY2UiLCJyb2xsVmFsdWUiLCJwZWckU3ludGF4RXJyb3IiLCJtZXNzYWdlIiwiZXhwZWN0ZWQiLCJmb3VuZCIsImxvY2F0aW9uIiwiY2FwdHVyZVN0YWNrVHJhY2UiLCJjaGlsZCIsInBhcmVudCIsImN0b3IiLCJjb25zdHJ1Y3RvciIsInBlZyRzdWJjbGFzcyIsImJ1aWxkTWVzc2FnZSIsIkRFU0NSSUJFX0VYUEVDVEFUSU9OX0ZOUyIsImxpdGVyYWwiLCJleHBlY3RhdGlvbiIsImxpdGVyYWxFc2NhcGUiLCJ0ZXh0IiwiZXNjYXBlZFBhcnRzIiwicGFydHMiLCJjbGFzc0VzY2FwZSIsImludmVydGVkIiwiYW55IiwiZW5kIiwib3RoZXIiLCJkZXNjcmlwdGlvbiIsImhleCIsImNoIiwiY2hhckNvZGVBdCIsInRvU3RyaW5nIiwidG9VcHBlckNhc2UiLCJyZXBsYWNlIiwiaiIsImRlc2NyaXB0aW9ucyIsInNsaWNlIiwiam9pbiIsImRlc2NyaWJlRXhwZWN0ZWQiLCJkZXNjcmliZUZvdW5kIiwiU3ludGF4RXJyb3IiLCJvcHRpb25zIiwicGVnJHJlc3VsdCIsInBlZyRGQUlMRUQiLCJwZWckc3RhcnRSdWxlRnVuY3Rpb25zIiwic3RhcnQiLCJwZWckcGFyc2VzdGFydCIsInBlZyRzdGFydFJ1bGVGdW5jdGlvbiIsInBlZyRjMCIsInBlZyRjMyIsInBlZyRsaXRlcmFsRXhwZWN0YXRpb24iLCJwZWckYzUiLCJwZWckYzciLCJwZWckYzEwIiwicGVnJGMxMiIsInBlZyRjMTQiLCJwZWckYzE3IiwicGVnJGMyMCIsInBlZyRjMjMiLCJwZWckYzI3IiwicGVnJGMyOSIsInBlZyRjMzIiLCJwZWckYzM0IiwicGVnJGMzNiIsInBlZyRjMzkiLCJwZWckYzQyIiwicGVnJGM0NCIsInBlZyRjNDYiLCJwZWckYzQ5IiwicGVnJGM1MyIsInBlZyRjNTYiLCJwZWckYzYwIiwicGVnJGM2MyIsInBlZyRjNjYiLCJwZWckYzY5IiwicGVnJGM3MiIsInBlZyRjNzciLCJwZWckYzgwIiwicGVnJGM4MyIsInBlZyRjODUiLCJwZWckYzg4IiwicGVnJGM4OSIsImVsZW1lbnQiLCJwZWckYzkxIiwicGVnJGM5MyIsInBlZyRjOTUiLCJwZWckYzk3IiwicGVnJGM5OSIsInBlZyRjMTAxIiwicGVnJGMxMDMiLCJwZWckYzEwNSIsInBlZyRvdGhlckV4cGVjdGF0aW9uIiwicGVnJGMxMDYiLCJwZWckYzEwNyIsInBlZyRjbGFzc0V4cGVjdGF0aW9uIiwicGVnJGMxMDgiLCJwYXJzZUludCIsInN1YnN0cmluZyIsInBlZyRzYXZlZFBvcyIsInBlZyRjdXJyUG9zIiwicGVnJGMxMTAiLCJwZWckYzExMSIsInBlZyRjMTEyIiwicGVnJGMxMTQiLCJwZWckYzExNiIsInBlZyRjMTE3IiwicGVnJGMxMTgiLCJwZWckcG9zRGV0YWlsc0NhY2hlIiwibGluZSIsImNvbHVtbiIsInBlZyRtYXhGYWlsUG9zIiwicGVnJG1heEZhaWxFeHBlY3RlZCIsInBlZyRzaWxlbnRGYWlscyIsInN0YXJ0UnVsZSIsImlnbm9yZUNhc2UiLCJwZWckY29tcHV0ZVBvc0RldGFpbHMiLCJwb3MiLCJkZXRhaWxzIiwicGVnJGNvbXB1dGVMb2NhdGlvbiIsInN0YXJ0UG9zIiwiZW5kUG9zIiwic3RhcnRQb3NEZXRhaWxzIiwiZW5kUG9zRGV0YWlscyIsIm9mZnNldCIsInBlZyRmYWlsIiwicGVnJGJ1aWxkU3RydWN0dXJlZEVycm9yIiwiczAiLCJzMSIsInMyIiwiczMiLCJwZWckcGFyc2VFeHByZXNzaW9uIiwiY2hhckF0IiwicGVnJHBhcnNlQW55Um9sbCIsInM0IiwiczUiLCJzNiIsInM3IiwiczgiLCJzOSIsInBlZyRwYXJzZV8iLCJwZWckcGFyc2VSb2xsRXhwcmVzc2lvbiIsImVsIiwicGVnJHBhcnNlR3JvdXBlZFJvbGwiLCJwZWckcGFyc2VLZWVwTW9kIiwicGVnJHBhcnNlRHJvcE1vZCIsInBlZyRwYXJzZVN1Y2Nlc3NNb2QiLCJwZWckcGFyc2VGYWlsdXJlTW9kIiwicGVnJHBhcnNlTGFiZWwiLCJncm91cCIsImNvbmNhdCIsInBlZyRwYXJzZU1vZEdyb3VwZWRSb2xsIiwicGVnJHBhcnNlRnVsbFJvbGwiLCJwZWckcGFyc2VJbnRlZ2VyIiwicGVnJHBhcnNlUm9sbEV4cHIiLCJwZWckcGFyc2VDcml0aWNhbFN1Y2Nlc3NNb2QiLCJzdWJzdHIiLCJwZWckcGFyc2VDcml0aWNhbEZhaWx1cmVNb2QiLCJwZWckcGFyc2VNYXRjaE1vZCIsInBlZyRwYXJzZU1hdGNoVGFyZ2V0IiwicGVnJGMzMCIsImRlZmF1bHRFeHByZXNzaW9uIiwicGVnJHBhcnNlUm9sbE9yRXhwcmVzc2lvbiIsInBlZyRjNTAiLCJwZWckcGFyc2VGYXRlRXhwciIsInBlZyRwYXJzZVBlcmNlbnRFeHByIiwicGVnJHBhcnNlRGljZVJvbGwiLCJwZWckcGFyc2VDb21wb3VuZFJvbGwiLCJwZWckcGFyc2VQZW5ldHJhdGVSb2xsIiwicGVnJHBhcnNlRXhwbG9kZVJvbGwiLCJwZWckcGFyc2VSZVJvbGxPbmNlTW9kIiwicGVnJHBhcnNlUmVSb2xsTW9kIiwicGVnJHBhcnNlUm9sbGVkTW9kUm9sbCIsInBlZyRwYXJzZVNvcnRBc2NNb2QiLCJwZWckcGFyc2VTb3J0RGVzY01vZCIsInBlZyRjNTEiLCJwZWckcGFyc2VUYXJnZXRlZFJvbGwiLCJwZWckcGFyc2VUYXJnZXRNb2QiLCJkZWZhdWx0VGFyZ2V0IiwicGVnJHBhcnNlQnJhY2tldEV4cHJlc3Npb24iLCJwZWckcGFyc2VJbmxpbmVFeHByZXNzaW9uIiwicGVnJHBhcnNlQWRkU3ViRXhwcmVzc2lvbiIsInBlZyRwYXJzZU11bHREaXZFeHByZXNzaW9uIiwicGVnJHBhcnNlTW9kRXhwb0V4cHJlc3Npb24iLCJwZWckcGFyc2VGdW5jdGlvbk9yUm9sbCIsInBlZyRwYXJzZU1hdGhGbkV4cHJlc3Npb24iLCJwZWckcGFyc2VNYXRoRnVuY3Rpb24iLCJ0ZXN0IiwiZG9SZW5kZXIiLCJyZW5kZXIiLCJyZW5kZXJHcm91cEV4cHIiLCJyZW5kZXJHcm91cCIsInJlbmRlckRpZSIsInJlbmRlckV4cHJlc3Npb24iLCJyZW5kZXJGdW5jdGlvbiIsInJlbmRlclJvbGwiLCJyZW5kZXJGYXRlUm9sbCIsInN0cmlwQnJhY2tldHMiLCJyZXBsaWVzIiwicmVwbHkiLCJleHByZXNzaW9ucyIsImFkZEJyYWNrZXRzIiwic3RhcnRzV2l0aCIsImVuZHNXaXRoIiwicm9sbERpc3BsYXkiXSwibWFwcGluZ3MiOiJDQUFBLFNBQTJDQSxFQUFNQyxHQUNoRCxHQUFzQixpQkFBWkMsU0FBMEMsaUJBQVhDLE9BQ3hDQSxPQUFPRCxRQUFVRCxTQUNiLEdBQXFCLG1CQUFYRyxRQUF5QkEsT0FBT0MsSUFDOUNELE9BQU8sR0FBSUgsT0FDUCxDQUNKLElBQUlLLEVBQUlMLElBQ1IsSUFBSSxJQUFJTSxLQUFLRCxHQUF1QixpQkFBWkosUUFBdUJBLFFBQVVGLEdBQU1PLEdBQUtELEVBQUVDLElBUHhFLENBU0dDLE1BQU0sV0FDVCxPLFlDVEUsSUFBSUMsRUFBbUIsR0FHdkIsU0FBU0MsRUFBb0JDLEdBRzVCLEdBQUdGLEVBQWlCRSxHQUNuQixPQUFPRixFQUFpQkUsR0FBVVQsUUFHbkMsSUFBSUMsRUFBU00sRUFBaUJFLEdBQVksQ0FDekNKLEVBQUdJLEVBQ0hDLEdBQUcsRUFDSFYsUUFBUyxJQVVWLE9BTkFXLEVBQVFGLEdBQVVHLEtBQUtYLEVBQU9ELFFBQVNDLEVBQVFBLEVBQU9ELFFBQVNRLEdBRy9EUCxFQUFPUyxHQUFJLEVBR0pULEVBQU9ELFFBMERmLE9BckRBUSxFQUFvQkssRUFBSUYsRUFHeEJILEVBQW9CTSxFQUFJUCxFQUd4QkMsRUFBb0JPLEVBQUksU0FBU2YsRUFBU2dCLEVBQU1DLEdBQzNDVCxFQUFvQlUsRUFBRWxCLEVBQVNnQixJQUNsQ0csT0FBT0MsZUFBZXBCLEVBQVNnQixFQUFNLENBQUVLLFlBQVksRUFBTUMsSUFBS0wsS0FLaEVULEVBQW9CZSxFQUFJLFNBQVN2QixHQUNYLG9CQUFYd0IsUUFBMEJBLE9BQU9DLGFBQzFDTixPQUFPQyxlQUFlcEIsRUFBU3dCLE9BQU9DLFlBQWEsQ0FBRUMsTUFBTyxXQUU3RFAsT0FBT0MsZUFBZXBCLEVBQVMsYUFBYyxDQUFFMEIs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S1UsU0FBMEIsSUFBZlYsRUFBS3hCLE1BQy9CdVUsRUFBYyxLQUFLek0sTUFDVHRHLEVBQUtVLFVBQTJCLElBQWhCVixFQUFLeEIsUUFDL0J1VSxFQUFjLElBQUl6TSxNQUpsQnlNLEVBQWMsS0FBS3pNLE1BT2hCdEcsRUFBS2tELFVBQ1I2UCxFQUFjLEtBQUtBLE9BR2JBIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW10sIGZhY3RvcnkpO1xuXHRlbHNlIHtcblx0XHR2YXIgYSA9IGZhY3RvcnkoKTtcblx0XHRmb3IodmFyIGkgaW4gYSkgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyA/IGV4cG9ydHMgOiByb290KVtpXSA9IGFbaV07XG5cdH1cbn0pKHRoaXMsIGZ1bmN0aW9uKCkge1xucmV0dXJuICIsIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAwKTtcbiIsImV4cG9ydCAqIGZyb20gXCIuL2RpY2VSb2xsZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3BhcnNlZFJvbGxUeXBlc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vcm9sbFR5cGVzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kaXNjb3JkUm9sbFJlbmRlcmVyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi91dGlsaXR5VHlwZXNcIjsiLCIvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLXZhci1yZXF1aXJlc1xuY29uc3QgcGFyc2VyID0gcmVxdWlyZShcIi4vZGljZXJvbGwuanNcIik7XG5pbXBvcnQge1xuXHRSb290VHlwZSwgRGljZVJvbGwsIE51bWJlclR5cGUsIElubGluZUV4cHJlc3Npb24sIFJvbGxFeHByZXNzaW9uVHlwZSwgTWF0aFR5cGUsIEdyb3VwZWRSb2xsLCBTb3J0Um9sbFR5cGUsIFN1Y2Nlc3NGYWlsdXJlQ3JpdE1vZFR5cGUsXG5cdFJlUm9sbE1vZCwgRnVsbFJvbGwsIFBhcnNlZFR5cGUsIE1hdGhFeHByZXNzaW9uLCBLZWVwRHJvcE1vZFR5cGUsIFN1Y2Nlc3NGYWlsdXJlTW9kVHlwZSwgTWF0aEZ1bmN0aW9uRXhwcmVzc2lvblxufSBmcm9tIFwiLi9wYXJzZWRSb2xsVHlwZXNcIjtcbmltcG9ydCB7XG5cdFJvbGxCYXNlLCBEaWNlRXhwcmVzc2lvblJvbGwsIEdyb3VwUm9sbCwgRGljZVJvbGxSZXN1bHQsIERpZVJvbGxCYXNlLCBFeHByZXNzaW9uUm9sbCwgRGllUm9sbCwgRmF0ZURpZVJvbGwsIEdyb3VwZWRSb2xsQmFzZSwgTWF0aEZ1bmN0aW9uUm9sbFxufSBmcm9tIFwiLi9yb2xsVHlwZXNcIjtcblxuZXhwb3J0IGNsYXNzIERpY2VSb2xsZXIge1xuXHRwdWJsaWMgcmFuZEZ1bmN0aW9uOiAoKSA9PiBudW1iZXIgPSBNYXRoLnJhbmRvbTtcblx0cHVibGljIG1heFJvbGxDb3VudCA9IDEwMDA7XG5cblx0LyoqXG5cdCAqIFRoZSBEaWNlUm9sbGVyIGNsYXNzIHRoYXQgcGVyZm9ybXMgcGFyc2luZyBhbmQgcm9sbHMgb2Yge0BsaW5rIGh0dHBzOi8vd2lraS5yb2xsMjAubmV0L0RpY2VfUmVmZXJlbmNlIHJvbGwyMCBmb3JtYXR9IGlucHV0IHN0cmluZ3Ncblx0ICogQGNvbnN0cnVjdG9yXG5cdCAqIEBwYXJhbSByYW5kRnVuY3Rpb24gVGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGZ1bmN0aW9uIHRvIHVzZSB3aGVuIHJvbGxpbmcsIGRlZmF1bHQ6IE1hdGgucmFuZG9tXG5cdCAqIEBwYXJhbSBtYXhSb2xscyBUaGUgbWF4IG51bWJlciBvZiByb2xscyB0byBwZXJmb3JtIGZvciBhIHNpbmdsZSBkaWUsIGRlZmF1bHQ6IDEwMDBcblx0ICovXG5cdGNvbnN0cnVjdG9yKHJhbmRGdW5jdGlvbj86ICgpID0+IG51bWJlciwgbWF4Um9sbHMgPSAxMDAwKSB7XG5cdFx0aWYgKHJhbmRGdW5jdGlvbikge1xuXHRcdFx0dGhpcy5yYW5kRnVuY3Rpb24gPSByYW5kRnVuY3Rpb247XG5cdFx0fVxuXHRcdHRoaXMubWF4Um9sbENvdW50ID0gbWF4Um9sbHM7XG5cdH1cblxuXHQvKipcblx0ICogUGFyc2VzIGFuZCByZXR1cm5zIGFuIHJlcHJlc2VudGF0aW9uIG9mIGEgZGljZSByb2xsIGlucHV0IHN0cmluZ1xuXHQgKiBAcGFyYW0gaW5wdXQgVGhlIGlucHV0IHN0cmluZyB0byBwYXJzZVxuXHQgKiBAcmV0dXJucyBBIHtAbGluayBSb290VHlwZX0gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcGFyc2VkIGlucHV0IHN0cmluZ1xuXHQgKi9cblx0cHVibGljIHBhcnNlKGlucHV0OiBzdHJpbmcpOiBSb290VHlwZSB7XG5cdFx0cmV0dXJuIHBhcnNlci5wYXJzZShpbnB1dCk7XG5cdH1cblxuXHQvKipcblx0ICogUGFyc2VzIGFuZCByb2xscyBhIGRpY2Ugcm9sbCBpbnB1dCBzdHJpbmcsIHJldHVybmluZyBhbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSByb2xsXG5cdCAqIEBwYXJhbSBpbnB1dCBUaGUgaW5wdXQgc3RyaW5nIHRvIHBhcnNlXG5cdCAqIEByZXR1cm5zIEEge0BsaW5rIFJvbGxCYXNlfSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSByb2xsZWQgZGljZSBpbnB1dCBzdHJpbmdcblx0ICovXG5cdHB1YmxpYyByb2xsKGlucHV0OiBzdHJpbmcpOiBSb2xsQmFzZSB7XG5cdFx0Y29uc3Qgcm9vdCA9IHBhcnNlci5wYXJzZShpbnB1dCk7XG5cdFx0cmV0dXJuIHRoaXMucm9sbFR5cGUocm9vdCk7XG5cdH1cblxuXHQvKipcblx0ICogUGFyc2VzIGFuZCByb2xscyBhIGRpY2Ugcm9sbCBpbnB1dCBzdHJpbmcsIHJldHVybmluZyB0aGUgcmVzdWx0IGFzIGEgbnVtYmVyXG5cdCAqIEBwYXJhbSBpbnB1dCBUaGUgaW5wdXQgc3RyaW5nIHRvIHBhcnNlXG5cdCAqIEByZXR1cm5zIFRoZSBmaW5hbCBudW1iZXIgdmFsdWUgb2YgdGhlIHJlc3VsdFxuXHQgKi9cblx0cHVibGljIHJvbGxWYWx1ZShpbnB1dDogc3RyaW5nKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gdGhpcy5yb2xsKGlucHV0KS52YWx1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSb2xscyBhIHByZXZpb3VzbHkgcGFyc2VkIGRpY2Ugcm9sbCBpbnB1dCBzdHJpbmcsIHJldHVybmluZyBhbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSByb2xsXG5cdCAqIEBwYXJhbSBwYXJzZWQgQSBwYXJzZWQgaW5wdXQgYXMgYSB7QGxpbmsgUm9vdFR5cGV9IHN0cmluZyB0byBiZSByb2xsZWRcblx0ICogQHJldHVybnMgQSB7QGxpbmsgUm9sbEJhc2V9IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHJvbGxlZCBkaWNlIGlucHV0IHN0cmluZ1xuXHQgKi9cblx0cHVibGljIHJvbGxQYXJzZWQocGFyc2VkOiBSb290VHlwZSk6IFJvbGxCYXNlIHtcblx0XHRyZXR1cm4gdGhpcy5yb2xsVHlwZShwYXJzZWQpO1xuXHR9XG5cblx0cHJpdmF0ZSByb2xsVHlwZShpbnB1dDogUm9vdFR5cGUpOiBSb2xsQmFzZSB7XG5cdFx0bGV0IHJlc3BvbnNlOiBSb2xsQmFzZTtcblxuXHRcdHN3aXRjaCAoaW5wdXQudHlwZSkge1xuXHRcdFx0Y2FzZSBcImRpY2VFeHByZXNzaW9uXCI6XG5cdFx0XHRcdHJlc3BvbnNlID0gdGhpcy5yb2xsRGljZUV4cHIoaW5wdXQgYXMgUm9sbEV4cHJlc3Npb25UeXBlKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiZ3JvdXBcIjpcblx0XHRcdFx0cmVzcG9uc2UgPSB0aGlzLnJvbGxHcm91cChpbnB1dCBhcyBHcm91cGVkUm9sbCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcImRpZVwiOlxuXHRcdFx0XHRyZXNwb25zZSA9IHRoaXMucm9sbERpZShpbnB1dCBhcyBEaWNlUm9sbCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcImV4cHJlc3Npb25cIjpcblx0XHRcdFx0cmVzcG9uc2UgPSB0aGlzLnJvbGxFeHByZXNzaW9uKGlucHV0IGFzIE1hdGhFeHByZXNzaW9uKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwibWF0aGZ1bmN0aW9uXCI6XG5cdFx0XHRcdHJlc3BvbnNlID0gdGhpcy5yb2xsRnVuY3Rpb24oaW5wdXQgYXMgTWF0aEZ1bmN0aW9uRXhwcmVzc2lvbik7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcImlubGluZVwiOlxuXHRcdFx0XHRyZXNwb25zZSA9IHRoaXMucm9sbFR5cGUoKGlucHV0IGFzIElubGluZUV4cHJlc3Npb24pLmV4cHIpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJudW1iZXJcIjpcblx0XHRcdFx0cmVzcG9uc2UgPSB7XG5cdFx0XHRcdFx0Li4uKGlucHV0IGFzIE51bWJlclR5cGUpLFxuXHRcdFx0XHRcdHN1Y2Nlc3M6IGZhbHNlLFxuXHRcdFx0XHRcdHZhbGlkOiB0cnVlLFxuXHRcdFx0XHRcdG9yZGVyOiAwLFxuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gcmVuZGVyICR7aW5wdXQudHlwZX1gKTtcblx0XHR9XG5cblx0XHRpZiAoaW5wdXQubGFiZWwpIHtcblx0XHRcdHJlc3BvbnNlLmxhYmVsID0gaW5wdXQubGFiZWw7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3BvbnNlO1xuXHR9XG5cblx0cHJpdmF0ZSByb2xsRGljZUV4cHIoaW5wdXQ6IFJvbGxFeHByZXNzaW9uVHlwZSk6IERpY2VFeHByZXNzaW9uUm9sbCB7XG5cdFx0Y29uc3QgaGVhZFJvbGwgPSB0aGlzLnJvbGxUeXBlKGlucHV0LmhlYWQpO1xuXHRcdGNvbnN0IHJvbGxzID0gW2hlYWRSb2xsXTtcblx0XHRjb25zdCBvcHM6IChcIitcIiB8IFwiLVwiKVtdID0gW107XG5cblx0XHRjb25zdCB2YWx1ZSA9IGlucHV0Lm9wc1xuXHRcdFx0LnJlZHVjZSgoaGVhZFZhbHVlLCBtYXRoLCBvcmRlcjogbnVtYmVyKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHRhaWxSb2xsID0gdGhpcy5yb2xsVHlwZShtYXRoLnRhaWwpO1xuXHRcdFx0XHR0YWlsUm9sbC5vcmRlciA9IG9yZGVyO1xuXG5cdFx0XHRcdHJvbGxzLnB1c2godGFpbFJvbGwpO1xuXHRcdFx0XHRvcHMucHVzaChtYXRoLm9wKTtcblxuXHRcdFx0XHRzd2l0Y2ggKG1hdGgub3ApIHtcblx0XHRcdFx0XHRjYXNlIFwiK1wiOlxuXHRcdFx0XHRcdFx0cmV0dXJuIGhlYWRWYWx1ZSArIHRhaWxSb2xsLnZhbHVlO1xuXHRcdFx0XHRcdGNhc2UgXCItXCI6XG5cdFx0XHRcdFx0XHRyZXR1cm4gaGVhZFZhbHVlIC0gdGFpbFJvbGwudmFsdWU7XG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdHJldHVybiBoZWFkVmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH0sIGhlYWRSb2xsLnZhbHVlKTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRkaWNlOiByb2xscyxcblx0XHRcdG9wcyxcblx0XHRcdHN1Y2Nlc3M6IGZhbHNlLFxuXHRcdFx0dHlwZTogXCJkaWNlZXhwcmVzc2lvbnJvbGxcIixcblx0XHRcdHZhbGlkOiB0cnVlLFxuXHRcdFx0dmFsdWUsXG5cdFx0XHRvcmRlcjogMCxcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIHJvbGxHcm91cChpbnB1dDogR3JvdXBlZFJvbGwpOiBHcm91cFJvbGwge1xuXHRcdGxldCByb2xsczogUm9sbEJhc2VbXSA9IGlucHV0LnJvbGxzLm1hcCgocm9sbCwgb3JkZXIpID0+ICh7XG5cdFx0XHQuLi50aGlzLnJvbGxUeXBlKHJvbGwpLFxuXHRcdFx0b3JkZXIsXG5cdFx0fSkpO1xuXG5cdFx0aWYgKGlucHV0Lm1vZHMpIHtcblx0XHRcdGNvbnN0IG1vZHMgPSBpbnB1dC5tb2RzO1xuXHRcdFx0Y29uc3QgYXBwbHlHcm91cE1vZHMgPSAoZGljZTogUm9sbEJhc2VbXSkgPT4ge1xuXHRcdFx0XHRjb25zdCBpc1N1Y2Nlc3MgPSBtb2RzLnNvbWUoKG1vZCkgPT4gW1wiZmFpbHVyZVwiLCBcInN1Y2Nlc3NcIl0uaW5jbHVkZXMobW9kLnR5cGUpKTtcblx0XHRcdFx0ZGljZSA9IG1vZHNcblx0XHRcdFx0XHQucmVkdWNlKChhcnIsIG1vZCkgPT4gdGhpcy5hcHBseUdyb3VwTW9kKGFyciwgbW9kKSwgZGljZSk7XG5cblx0XHRcdFx0aWYgKGlzU3VjY2Vzcykge1xuXHRcdFx0XHRcdGRpY2UgPSBkaWNlLm1hcCgoZGllKSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAoIWRpZS5zdWNjZXNzKSB7XG5cdFx0XHRcdFx0XHRcdGRpZS52YWx1ZSA9IDA7XG5cdFx0XHRcdFx0XHRcdGRpZS5zdWNjZXNzID0gdHJ1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHJldHVybiBkaWU7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gZGljZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHJvbGxzLmxlbmd0aCA9PT0gMSAmJiBbXCJkaWVcIiwgXCJkaWNlZXhwcmVzc2lvbnJvbGxcIl0uaW5jbHVkZXMocm9sbHNbMF0udHlwZSkpIHtcblx0XHRcdFx0Y29uc3Qgcm9sbCA9IHJvbGxzWzBdO1xuXHRcdFx0XHRsZXQgZGljZSA9IHJvbGwudHlwZSA9PT0gXCJkaWVcIlxuXHRcdFx0XHRcdD8gKHJvbGwgYXMgRGljZVJvbGxSZXN1bHQpLnJvbGxzXG5cdFx0XHRcdFx0OiAocm9sbCBhcyBEaWNlRXhwcmVzc2lvblJvbGwpLmRpY2Vcblx0XHRcdFx0XHRcdC5maWx0ZXIoKGRpZSkgPT4gZGllLnR5cGUgIT09IFwibnVtYmVyXCIpXG5cdFx0XHRcdFx0XHQucmVkdWNlKChhcnI6IFJvbGxCYXNlW10sIGRpZSkgPT4gW1xuXHRcdFx0XHRcdFx0XHQuLi5hcnIsXG5cdFx0XHRcdFx0XHRcdC4uLmRpZS50eXBlID09PSBcImRpZVwiXG5cdFx0XHRcdFx0XHRcdFx0PyAoZGllIGFzIERpY2VSb2xsUmVzdWx0KS5yb2xsc1xuXHRcdFx0XHRcdFx0XHRcdDogKGRpZSBhcyBHcm91cGVkUm9sbEJhc2UpLmRpY2UsXG5cdFx0XHRcdFx0XHRdLCBbXSk7XG5cblx0XHRcdFx0ZGljZSA9IGFwcGx5R3JvdXBNb2RzKGRpY2UpO1xuXHRcdFx0XHRyb2xsLnZhbHVlID0gZGljZS5yZWR1Y2UoKHN1bSwgZGllKSA9PiBkaWUudmFsaWQgPyBzdW0gKyBkaWUudmFsdWUgOiBzdW0sIDApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cm9sbHMgPSBhcHBseUdyb3VwTW9kcyhyb2xscyk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdGRpY2U6IHJvbGxzLFxuXHRcdFx0c3VjY2VzczogZmFsc2UsXG5cdFx0XHR0eXBlOiBcImdyb3Vwcm9sbFwiLFxuXHRcdFx0dmFsaWQ6IHRydWUsXG5cdFx0XHR2YWx1ZTogcm9sbHMucmVkdWNlKChzdW0sIHJvbGwpID0+ICFyb2xsLnZhbGlkID8gc3VtIDogc3VtICsgcm9sbC52YWx1ZSwgMCksXG5cdFx0XHRvcmRlcjogMCxcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIHJvbGxEaWUoaW5wdXQ6IEZ1bGxSb2xsKTogRGljZVJvbGxSZXN1bHQge1xuXHRcdGNvbnN0IGNvdW50ID0gdGhpcy5yb2xsVHlwZShpbnB1dC5jb3VudCk7XG5cblx0XHRpZiAoY291bnQudmFsdWUgPiB0aGlzLm1heFJvbGxDb3VudCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiRW50ZXJlZCBudW1iZXIgb2YgZGljZSB0b28gbGFyZ2UuXCIpO1xuXHRcdH1cblxuXHRcdGxldCByb2xsczogRGllUm9sbEJhc2VbXTtcblx0XHRsZXQgZGllOiBSb2xsQmFzZTtcblx0XHRpZiAoaW5wdXQuZGllLnR5cGUgPT09IFwiZmF0ZVwiKSB7XG5cdFx0XHRkaWUgPSB7XG5cdFx0XHRcdHR5cGU6IFwiZmF0ZVwiLFxuXHRcdFx0XHRzdWNjZXNzOiBmYWxzZSxcblx0XHRcdFx0dmFsaWQ6IGZhbHNlLFxuXHRcdFx0XHR2YWx1ZTogMCxcblx0XHRcdFx0b3JkZXI6IDAsXG5cdFx0XHR9O1xuXHRcdFx0cm9sbHMgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiBjb3VudC52YWx1ZSB9LCAoXywgaSkgPT4gdGhpcy5nZW5lcmF0ZUZhdGVSb2xsKGkpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZGllID0gdGhpcy5yb2xsVHlwZShpbnB1dC5kaWUpO1xuXHRcdFx0cm9sbHMgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiBjb3VudC52YWx1ZSB9LCAoXywgaSkgPT4gdGhpcy5nZW5lcmF0ZURpY2VSb2xsKGRpZS52YWx1ZSwgaSkpO1xuXHRcdH1cblxuXHRcdGlmIChpbnB1dC5tb2RzKSB7XG5cdFx0XHRyb2xscyA9IGlucHV0Lm1vZHNcblx0XHRcdFx0LnJlZHVjZSgobW9kZGVkUm9sbHMsIG1vZCkgPT4gdGhpcy5hcHBseU1vZChtb2RkZWRSb2xscywgbW9kKSwgcm9sbHMpO1xuXHRcdH1cblxuXHRcdGlmIChpbnB1dC50YXJnZXRzKSB7XG5cdFx0XHRyb2xscyA9IGlucHV0LnRhcmdldHNcblx0XHRcdFx0LnJlZHVjZSgobW9kZGVkUm9sbHMsIHRhcmdldCkgPT4gdGhpcy5hcHBseU1vZChtb2RkZWRSb2xscywgdGFyZ2V0KSwgcm9sbHMpXG5cdFx0XHRcdC5tYXAoKHJvbGwpID0+IHtcblx0XHRcdFx0XHRpZiAoIXJvbGwuc3VjY2Vzcykge1xuXHRcdFx0XHRcdFx0cm9sbC52YWx1ZSA9IDA7XG5cdFx0XHRcdFx0XHRyb2xsLnN1Y2Nlc3MgPSB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gcm9sbDtcblx0XHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0bGV0IG1hdGNoZWQgPSBmYWxzZTtcblx0XHRsZXQgbWF0Y2hDb3VudCA9IDA7XG5cdFx0aWYgKGlucHV0Lm1hdGNoKSB7XG5cdFx0XHRjb25zdCBtYXRjaCA9IGlucHV0Lm1hdGNoO1xuXHRcdFx0Y29uc3QgY291bnRzID0gcm9sbHMucmVkdWNlKChtYXA6IE1hcDxudW1iZXIsIG51bWJlcj4sIHJvbGwpID0+XG5cdFx0XHRcdG1hcC5zZXQocm9sbC5yb2xsLCAobWFwLmdldChyb2xsLnJvbGwpIHx8IDApICsgMSksXG5cdFx0XHRcdG5ldyBNYXAoKSk7XG5cblx0XHRcdGNvbnN0IG1hdGNoZXMgPSBuZXcgU2V0KEFycmF5LmZyb20oY291bnRzLmVudHJpZXMoKSlcblx0XHRcdFx0LmZpbHRlcigoW18sIG1hdGNoZWRDb3VudF0pID0+IG1hdGNoZWRDb3VudCA+PSBtYXRjaC5taW4udmFsdWUpXG5cdFx0XHRcdC5maWx0ZXIoKFt2YWxdKSA9PiAhKG1hdGNoLm1vZFxuXHRcdFx0XHRcdCYmIG1hdGNoLmV4cHIpXG5cdFx0XHRcdFx0fHwgdGhpcy5zdWNjZXNzVGVzdChtYXRjaC5tb2QsIHRoaXMucm9sbFR5cGUobWF0Y2guZXhwcikudmFsdWUsIHZhbCkpXG5cdFx0XHRcdC5tYXAoKFt2YWxdKSA9PiB2YWwpKTtcblxuXHRcdFx0cm9sbHMuZmlsdGVyKChyb2xsKSA9PiBtYXRjaGVzLmhhcyhyb2xsLnJvbGwpKVxuXHRcdFx0XHQuZm9yRWFjaCgocm9sbCkgPT4gcm9sbC5tYXRjaGVkID0gdHJ1ZSk7XG5cblx0XHRcdGlmIChtYXRjaC5jb3VudCkge1xuXHRcdFx0XHRtYXRjaGVkID0gdHJ1ZTtcblx0XHRcdFx0bWF0Y2hDb3VudCA9IG1hdGNoZXMuc2l6ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoaW5wdXQuc29ydCkge1xuXHRcdFx0cm9sbHMgPSB0aGlzLmFwcGx5U29ydChyb2xscywgaW5wdXQuc29ydCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdGNvdW50LFxuXHRcdFx0ZGllLFxuXHRcdFx0cm9sbHMsXG5cdFx0XHRzdWNjZXNzOiBmYWxzZSxcblx0XHRcdHR5cGU6IFwiZGllXCIsXG5cdFx0XHR2YWxpZDogdHJ1ZSxcblx0XHRcdHZhbHVlOiBtYXRjaGVkID8gbWF0Y2hDb3VudCA6IHJvbGxzLnJlZHVjZSgoc3VtLCByb2xsKSA9PiAhcm9sbC52YWxpZCA/IHN1bSA6IHN1bSArIHJvbGwudmFsdWUsIDApLFxuXHRcdFx0b3JkZXI6IDAsXG5cdFx0XHRtYXRjaGVkLFxuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgcm9sbEV4cHJlc3Npb24oaW5wdXQ6IFJvbGxFeHByZXNzaW9uVHlwZSB8IE1hdGhFeHByZXNzaW9uKTogRXhwcmVzc2lvblJvbGwge1xuXHRcdGNvbnN0IGhlYWRSb2xsID0gdGhpcy5yb2xsVHlwZShpbnB1dC5oZWFkKTtcblx0XHRjb25zdCByb2xscyA9IFtoZWFkUm9sbF07XG5cdFx0Y29uc3Qgb3BzOiAoXCIrXCIgfCBcIi1cIiB8IFwiKlwiIHwgXCIvXCIgfCBcIiVcIiB8IFwiKipcIilbXSA9IFtdO1xuXG5cdFx0Y29uc3QgdmFsdWUgPSAoaW5wdXQub3BzIGFzIE1hdGhUeXBlPGFueT5bXSlcblx0XHRcdC5yZWR1Y2UoKGhlYWRWYWx1ZTogbnVtYmVyLCBtYXRoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHRhaWxSb2xsID0gdGhpcy5yb2xsVHlwZShtYXRoLnRhaWwpO1xuXHRcdFx0XHRyb2xscy5wdXNoKHRhaWxSb2xsKTtcblx0XHRcdFx0b3BzLnB1c2gobWF0aC5vcCk7XG5cblx0XHRcdFx0c3dpdGNoIChtYXRoLm9wKSB7XG5cdFx0XHRcdFx0Y2FzZSBcIitcIjpcblx0XHRcdFx0XHRcdHJldHVybiBoZWFkVmFsdWUgKyB0YWlsUm9sbC52YWx1ZTtcblx0XHRcdFx0XHRjYXNlIFwiLVwiOlxuXHRcdFx0XHRcdFx0cmV0dXJuIGhlYWRWYWx1ZSAtIHRhaWxSb2xsLnZhbHVlO1xuXHRcdFx0XHRcdGNhc2UgXCIqXCI6XG5cdFx0XHRcdFx0XHRyZXR1cm4gaGVhZFZhbHVlICogdGFpbFJvbGwudmFsdWU7XG5cdFx0XHRcdFx0Y2FzZSBcIi9cIjpcblx0XHRcdFx0XHRcdHJldHVybiBoZWFkVmFsdWUgLyB0YWlsUm9sbC52YWx1ZTtcblx0XHRcdFx0XHRjYXNlIFwiJVwiOlxuXHRcdFx0XHRcdFx0cmV0dXJuIGhlYWRWYWx1ZSAlIHRhaWxSb2xsLnZhbHVlO1xuXHRcdFx0XHRcdGNhc2UgXCIqKlwiOlxuXHRcdFx0XHRcdFx0cmV0dXJuIGhlYWRWYWx1ZSAqKiB0YWlsUm9sbC52YWx1ZTtcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0cmV0dXJuIGhlYWRWYWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fSwgaGVhZFJvbGwudmFsdWUpO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdGRpY2U6IHJvbGxzLFxuXHRcdFx0b3BzLFxuXHRcdFx0c3VjY2VzczogZmFsc2UsXG5cdFx0XHR0eXBlOiBcImV4cHJlc3Npb25yb2xsXCIsXG5cdFx0XHR2YWxpZDogdHJ1ZSxcblx0XHRcdHZhbHVlLFxuXHRcdFx0b3JkZXI6IDAsXG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSByb2xsRnVuY3Rpb24oaW5wdXQ6IE1hdGhGdW5jdGlvbkV4cHJlc3Npb24pOiBNYXRoRnVuY3Rpb25Sb2xsIHtcblx0XHRjb25zdCBleHByID0gdGhpcy5yb2xsVHlwZShpbnB1dC5leHByKTtcblxuXHRcdGxldCB2YWx1ZTogbnVtYmVyO1xuXHRcdHN3aXRjaCAoaW5wdXQub3ApIHtcblx0XHRcdGNhc2UgXCJmbG9vclwiOlxuXHRcdFx0XHR2YWx1ZSA9IE1hdGguZmxvb3IoZXhwci52YWx1ZSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcImNlaWxcIjpcblx0XHRcdFx0dmFsdWUgPSBNYXRoLmNlaWwoZXhwci52YWx1ZSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcInJvdW5kXCI6XG5cdFx0XHRcdHZhbHVlID0gTWF0aC5yb3VuZChleHByLnZhbHVlKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiYWJzXCI6XG5cdFx0XHRcdHZhbHVlID0gTWF0aC5hYnMoZXhwci52YWx1ZSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0dmFsdWUgPSBleHByLnZhbHVlO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0ZXhwcixcblx0XHRcdG9wOiBpbnB1dC5vcCxcblx0XHRcdHN1Y2Nlc3M6IGZhbHNlLFxuXHRcdFx0dHlwZTogXCJtYXRoZnVuY3Rpb25cIixcblx0XHRcdHZhbGlkOiB0cnVlLFxuXHRcdFx0dmFsdWUsXG5cdFx0XHRvcmRlcjogMCxcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGFwcGx5R3JvdXBNb2Qocm9sbHM6IFJvbGxCYXNlW10sIG1vZDogUGFyc2VkVHlwZSk6IFJvbGxCYXNlW10ge1xuXHRcdHJldHVybiB0aGlzLmdldEdyb3VwTW9kTWV0aG9kKG1vZCkocm9sbHMpO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXRHcm91cE1vZE1ldGhvZChtb2Q6IFBhcnNlZFR5cGUpOiBHcm91cE1vZE1ldGhvZCB7XG5cdFx0Y29uc3QgbG9va3VwID0gKHJvbGw6IFJvbGxCYXNlKSA9PiByb2xsLnZhbHVlO1xuXHRcdHN3aXRjaCAobW9kLnR5cGUpIHtcblx0XHRcdGNhc2UgXCJzdWNjZXNzXCI6XG5cdFx0XHRcdHJldHVybiB0aGlzLmdldFN1Y2Nlc3NNZXRob2QobW9kIGFzIFN1Y2Nlc3NGYWlsdXJlTW9kVHlwZSwgbG9va3VwKTtcblx0XHRcdGNhc2UgXCJmYWlsdXJlXCI6XG5cdFx0XHRcdHJldHVybiB0aGlzLmdldEZhaWx1cmVNZXRob2QobW9kIGFzIFN1Y2Nlc3NGYWlsdXJlTW9kVHlwZSwgbG9va3VwKTtcblx0XHRcdGNhc2UgXCJrZWVwXCI6XG5cdFx0XHRcdHJldHVybiB0aGlzLmdldEtlZXBNZXRob2QobW9kIGFzIEtlZXBEcm9wTW9kVHlwZSwgbG9va3VwKTtcblx0XHRcdGNhc2UgXCJkcm9wXCI6XG5cdFx0XHRcdHJldHVybiB0aGlzLmdldERyb3BNZXRob2QobW9kIGFzIEtlZXBEcm9wTW9kVHlwZSwgbG9va3VwKTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgTW9kICR7bW9kLnR5cGV9IGlzIG5vdCByZWNvZ25pc2VkYCk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBhcHBseU1vZChyb2xsczogRGllUm9sbEJhc2VbXSwgbW9kOiBQYXJzZWRUeXBlKTogRGllUm9sbEJhc2VbXSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0TW9kTWV0aG9kKG1vZCkocm9sbHMpO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXRNb2RNZXRob2QobW9kOiBQYXJzZWRUeXBlKTogTW9kTWV0aG9kIHtcblx0XHRjb25zdCBsb29rdXAgPSAocm9sbDogRGllUm9sbEJhc2UpID0+IHJvbGwucm9sbDtcblx0XHRzd2l0Y2ggKG1vZC50eXBlKSB7XG5cdFx0XHRjYXNlIFwic3VjY2Vzc1wiOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5nZXRTdWNjZXNzTWV0aG9kKG1vZCBhcyBTdWNjZXNzRmFpbHVyZUNyaXRNb2RUeXBlLCBsb29rdXApO1xuXHRcdFx0Y2FzZSBcImZhaWx1cmVcIjpcblx0XHRcdFx0cmV0dXJuIHRoaXMuZ2V0RmFpbHVyZU1ldGhvZChtb2QgYXMgU3VjY2Vzc0ZhaWx1cmVDcml0TW9kVHlwZSwgbG9va3VwKTtcblx0XHRcdGNhc2UgXCJjcml0XCI6XG5cdFx0XHRcdHJldHVybiB0aGlzLmdldENyaXRTdWNjZXNzTWV0aG9kKG1vZCBhcyBTdWNjZXNzRmFpbHVyZUNyaXRNb2RUeXBlLCBsb29rdXApO1xuXHRcdFx0Y2FzZSBcImNyaXRmYWlsXCI6XG5cdFx0XHRcdHJldHVybiB0aGlzLmdldENyaXRGYWlsdXJlTWV0aG9kKG1vZCBhcyBTdWNjZXNzRmFpbHVyZUNyaXRNb2RUeXBlLCBsb29rdXApO1xuXHRcdFx0Y2FzZSBcImtlZXBcIjpcblx0XHRcdFx0cmV0dXJuIChyb2xscykgPT5cblx0XHRcdFx0XHR0aGlzLmdldEtlZXBNZXRob2QobW9kIGFzIEtlZXBEcm9wTW9kVHlwZSwgbG9va3VwKShyb2xscylcblx0XHRcdFx0XHRcdC5zb3J0KChhLCBiKSA9PiBhLm9yZGVyIC0gYi5vcmRlcik7XG5cdFx0XHRjYXNlIFwiZHJvcFwiOlxuXHRcdFx0XHRyZXR1cm4gKHJvbGxzKSA9PlxuXHRcdFx0XHRcdHRoaXMuZ2V0RHJvcE1ldGhvZChtb2QgYXMgS2VlcERyb3BNb2RUeXBlLCBsb29rdXApKHJvbGxzKVxuXHRcdFx0XHRcdFx0LnNvcnQoKGEsIGIpID0+IGEub3JkZXIgLSBiLm9yZGVyKTtcblx0XHRcdGNhc2UgXCJleHBsb2RlXCI6XG5cdFx0XHRcdHJldHVybiB0aGlzLmdldEV4cGxvZGVNZXRob2QoKG1vZCBhcyBSZVJvbGxNb2QpKTtcblx0XHRcdGNhc2UgXCJjb21wb3VuZFwiOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5nZXRDb21wb3VuZE1ldGhvZCgobW9kIGFzIFJlUm9sbE1vZCkpO1xuXHRcdFx0Y2FzZSBcInBlbmV0cmF0ZVwiOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5nZXRQZW5ldHJhdGVNZXRob2QoKG1vZCBhcyBSZVJvbGxNb2QpKTtcblx0XHRcdGNhc2UgXCJyZXJvbGxcIjpcblx0XHRcdFx0cmV0dXJuIHRoaXMuZ2V0UmVSb2xsTWV0aG9kKChtb2QgYXMgUmVSb2xsTW9kKSk7XG5cdFx0XHRjYXNlIFwicmVyb2xsT25jZVwiOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5nZXRSZVJvbGxPbmNlTWV0aG9kKChtb2QgYXMgUmVSb2xsTW9kKSk7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYE1vZCAke21vZC50eXBlfSBpcyBub3QgcmVjb2duaXNlZGApO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgYXBwbHlTb3J0KHJvbGxzOiBEaWVSb2xsQmFzZVtdLCBtb2Q6IFNvcnRSb2xsVHlwZSkge1xuXHRcdHJvbGxzLnNvcnQoKGEsIGIpID0+IG1vZC5hc2MgPyBhLnJvbGwgLSBiLnJvbGwgOiBiLnJvbGwgLSBhLnJvbGwpO1xuXHRcdHJvbGxzLmZvckVhY2goKHJvbGwsIGkpID0+IHJvbGwub3JkZXIgPSBpKTtcblx0XHRyZXR1cm4gcm9sbHM7XG5cdH1cblxuXHRwcml2YXRlIGdldENyaXRTdWNjZXNzTWV0aG9kPFQgZXh0ZW5kcyBEaWVSb2xsQmFzZT4obW9kOiBTdWNjZXNzRmFpbHVyZUNyaXRNb2RUeXBlLCBsb29rdXA6IChyb2xsOiBUKSA9PiBudW1iZXIpIHtcblx0XHRjb25zdCBleHByUmVzdWx0ID0gdGhpcy5yb2xsVHlwZShtb2QuZXhwcik7XG5cblx0XHRyZXR1cm4gKHJvbGxzOiBUW10pID0+IHtcblx0XHRcdHJldHVybiByb2xscy5tYXAoKHJvbGwpID0+IHtcblx0XHRcdFx0aWYgKCFyb2xsLnZhbGlkKSByZXR1cm4gcm9sbDtcblx0XHRcdFx0aWYgKHJvbGwudHlwZSAhPT0gXCJyb2xsXCIpIHJldHVybiByb2xsO1xuXHRcdFx0XHRpZiAocm9sbC5zdWNjZXNzKSByZXR1cm4gcm9sbDtcblxuXHRcdFx0XHRjb25zdCBjcml0Um9sbCA9IChyb2xsIGFzIHVua25vd24gYXMgRGllUm9sbCk7XG5cdFx0XHRcdGlmICh0aGlzLnN1Y2Nlc3NUZXN0KG1vZC5tb2QsIGV4cHJSZXN1bHQudmFsdWUsIGxvb2t1cChyb2xsKSkpIHtcblx0XHRcdFx0XHRjcml0Um9sbC5jcml0aWNhbCA9IFwic3VjY2Vzc1wiO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGNyaXRSb2xsLmNyaXRpY2FsID09PSBcInN1Y2Nlc3NcIikge1xuXHRcdFx0XHRcdGNyaXRSb2xsLmNyaXRpY2FsID0gbnVsbDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiByb2xsO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBnZXRDcml0RmFpbHVyZU1ldGhvZDxUIGV4dGVuZHMgRGllUm9sbEJhc2U+KG1vZDogU3VjY2Vzc0ZhaWx1cmVDcml0TW9kVHlwZSwgbG9va3VwOiAocm9sbDogVCkgPT4gbnVtYmVyKSB7XG5cdFx0Y29uc3QgZXhwclJlc3VsdCA9IHRoaXMucm9sbFR5cGUobW9kLmV4cHIpO1xuXG5cdFx0cmV0dXJuIChyb2xsczogVFtdKSA9PiB7XG5cdFx0XHRyZXR1cm4gcm9sbHMubWFwKChyb2xsKSA9PiB7XG5cdFx0XHRcdGlmICghcm9sbC52YWxpZCkgcmV0dXJuIHJvbGw7XG5cdFx0XHRcdGlmIChyb2xsLnR5cGUgIT09IFwicm9sbFwiKSByZXR1cm4gcm9sbDtcblx0XHRcdFx0aWYgKHJvbGwuc3VjY2VzcykgcmV0dXJuIHJvbGw7XG5cblx0XHRcdFx0Y29uc3QgY3JpdFJvbGwgPSAocm9sbCBhcyB1bmtub3duIGFzIERpZVJvbGwpO1xuXHRcdFx0XHRpZiAodGhpcy5zdWNjZXNzVGVzdChtb2QubW9kLCBleHByUmVzdWx0LnZhbHVlLCBsb29rdXAocm9sbCkpKSB7XG5cdFx0XHRcdFx0Y3JpdFJvbGwuY3JpdGljYWwgPSBcImZhaWx1cmVcIjtcblx0XHRcdFx0fSBlbHNlIGlmIChjcml0Um9sbC5jcml0aWNhbCA9PT0gXCJmYWlsdXJlXCIpIHtcblx0XHRcdFx0XHRjcml0Um9sbC5jcml0aWNhbCA9IG51bGw7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gcm9sbDtcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgZ2V0U3VjY2Vzc01ldGhvZDxUIGV4dGVuZHMgUm9sbEJhc2U+KG1vZDogU3VjY2Vzc0ZhaWx1cmVDcml0TW9kVHlwZSwgbG9va3VwOiAocm9sbDogVCkgPT4gbnVtYmVyKSB7XG5cdFx0Y29uc3QgZXhwclJlc3VsdCA9IHRoaXMucm9sbFR5cGUobW9kLmV4cHIpO1xuXG5cdFx0cmV0dXJuIChyb2xsczogVFtdKSA9PiB7XG5cdFx0XHRyZXR1cm4gcm9sbHMubWFwKChyb2xsKSA9PiB7XG5cdFx0XHRcdGlmICghcm9sbC52YWxpZCkgeyByZXR1cm4gcm9sbDsgfVxuXG5cdFx0XHRcdGlmICh0aGlzLnN1Y2Nlc3NUZXN0KG1vZC5tb2QsIGV4cHJSZXN1bHQudmFsdWUsIGxvb2t1cChyb2xsKSkpIHtcblx0XHRcdFx0XHRpZiAocm9sbC5zdWNjZXNzKSB7XG5cdFx0XHRcdFx0XHRyb2xsLnZhbHVlICs9IDE7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHJvbGwudmFsdWUgPSAxO1xuXHRcdFx0XHRcdFx0cm9sbC5zdWNjZXNzID0gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHJvbGw7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGdldEZhaWx1cmVNZXRob2Q8VCBleHRlbmRzIFJvbGxCYXNlPihtb2Q6IFN1Y2Nlc3NGYWlsdXJlQ3JpdE1vZFR5cGUsIGxvb2t1cDogKHJvbGw6IFQpID0+IG51bWJlcikge1xuXHRcdGNvbnN0IGV4cHJSZXN1bHQgPSB0aGlzLnJvbGxUeXBlKG1vZC5leHByKTtcblxuXHRcdHJldHVybiAocm9sbHM6IFRbXSkgPT4ge1xuXHRcdFx0cmV0dXJuIHJvbGxzLm1hcCgocm9sbCkgPT4ge1xuXHRcdFx0XHRpZiAoIXJvbGwudmFsaWQpIHsgcmV0dXJuIHJvbGw7IH1cblxuXHRcdFx0XHRpZiAodGhpcy5zdWNjZXNzVGVzdChtb2QubW9kLCBleHByUmVzdWx0LnZhbHVlLCBsb29rdXAocm9sbCkpKSB7XG5cdFx0XHRcdFx0aWYgKHJvbGwuc3VjY2Vzcykge1xuXHRcdFx0XHRcdFx0cm9sbC52YWx1ZSAtPSAxO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyb2xsLnZhbHVlID0gLTE7XG5cdFx0XHRcdFx0XHRyb2xsLnN1Y2Nlc3MgPSB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gcm9sbDtcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgZ2V0S2VlcE1ldGhvZDxUIGV4dGVuZHMgUm9sbEJhc2U+KG1vZDogS2VlcERyb3BNb2RUeXBlLCBsb29rdXA6IChyb2xsOiBUKSA9PiBudW1iZXIpIHtcblx0XHRjb25zdCBleHByUmVzdWx0ID0gdGhpcy5yb2xsVHlwZShtb2QuZXhwcik7XG5cblx0XHRyZXR1cm4gKHJvbGxzOiBUW10pID0+IHtcblx0XHRcdGlmIChyb2xscy5sZW5ndGggPT09IDApIHJldHVybiByb2xscztcblxuXHRcdFx0cm9sbHMgPSByb2xsc1xuXHRcdFx0XHQuc29ydCgoYSwgYikgPT4gbW9kLmhpZ2hsb3cgPT09IFwibFwiXG5cdFx0XHRcdFx0PyBsb29rdXAoYikgLSBsb29rdXAoYSlcblx0XHRcdFx0XHQ6IGxvb2t1cChhKSAtIGxvb2t1cChiKSlcblx0XHRcdFx0LnNvcnQoKGEsIGIpID0+IChhLnZhbGlkID8gMSA6IDApIC0gKGIudmFsaWQgPyAxIDogMCkpO1xuXG5cdFx0XHRjb25zdCB0b0tlZXAgPSBNYXRoLm1heChNYXRoLm1pbihleHByUmVzdWx0LnZhbHVlLCByb2xscy5sZW5ndGgpLCAwKTtcblx0XHRcdGxldCBkcm9wcGVkID0gMDtcblx0XHRcdGxldCBpID0gMDtcblxuXHRcdFx0Y29uc3QgdG9Ecm9wID0gcm9sbHMucmVkdWNlKCh2YWx1ZSwgcm9sbCkgPT4gKHJvbGwudmFsaWQgPyAxIDogMCkgKyB2YWx1ZSwgMCkgLSB0b0tlZXA7XG5cblx0XHRcdHdoaWxlIChpIDwgcm9sbHMubGVuZ3RoICYmIGRyb3BwZWQgPCB0b0Ryb3ApIHtcblx0XHRcdFx0aWYgKHJvbGxzW2ldLnZhbGlkKSB7XG5cdFx0XHRcdFx0cm9sbHNbaV0udmFsaWQgPSBmYWxzZTtcblx0XHRcdFx0XHRkcm9wcGVkKys7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpKys7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiByb2xscztcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGdldERyb3BNZXRob2Q8VCBleHRlbmRzIFJvbGxCYXNlPihtb2Q6IEtlZXBEcm9wTW9kVHlwZSwgbG9va3VwOiAocm9sbDogVCkgPT4gbnVtYmVyKSB7XG5cdFx0Y29uc3QgZXhwclJlc3VsdCA9IHRoaXMucm9sbFR5cGUobW9kLmV4cHIpO1xuXG5cdFx0cmV0dXJuIChyb2xsczogVFtdKSA9PiB7XG5cdFx0XHRyb2xscyA9IHJvbGxzLnNvcnQoKGEsIGIpID0+IG1vZC5oaWdobG93ID09PSBcImhcIlxuXHRcdFx0XHQ/IGxvb2t1cChiKSAtIGxvb2t1cChhKVxuXHRcdFx0XHQ6IGxvb2t1cChhKSAtIGxvb2t1cChiKSk7XG5cblx0XHRcdGNvbnN0IHRvRHJvcCA9IE1hdGgubWF4KE1hdGgubWluKGV4cHJSZXN1bHQudmFsdWUsIHJvbGxzLmxlbmd0aCksIDApO1xuXHRcdFx0bGV0IGRyb3BwZWQgPSAwO1xuXHRcdFx0bGV0IGkgPSAwO1xuXG5cdFx0XHR3aGlsZSAoaSA8IHJvbGxzLmxlbmd0aCAmJiBkcm9wcGVkIDwgdG9Ecm9wKSB7XG5cdFx0XHRcdGlmIChyb2xsc1tpXS52YWxpZCkge1xuXHRcdFx0XHRcdHJvbGxzW2ldLnZhbGlkID0gZmFsc2U7XG5cdFx0XHRcdFx0ZHJvcHBlZCsrO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aSsrO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gcm9sbHM7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBnZXRFeHBsb2RlTWV0aG9kKG1vZDogUmVSb2xsTW9kKSB7XG5cdFx0Y29uc3QgdGFyZ2V0VmFsdWUgPSBtb2QudGFyZ2V0XG5cdFx0XHQ/IHRoaXMucm9sbFR5cGUobW9kLnRhcmdldC52YWx1ZSlcblx0XHRcdDogbnVsbDtcblxuXHRcdHJldHVybiAocm9sbHM6IERpZVJvbGxCYXNlW10pID0+IHtcblx0XHRcdGNvbnN0IHRhcmdldE1ldGhvZCA9IHRhcmdldFZhbHVlXG5cdFx0XHRcdD8gKHJvbGw6IERpZVJvbGxCYXNlKSA9PiB0aGlzLnN1Y2Nlc3NUZXN0KG1vZC50YXJnZXQubW9kLCB0YXJnZXRWYWx1ZS52YWx1ZSwgcm9sbC5yb2xsKVxuXHRcdFx0XHQ6IChyb2xsOiBEaWVSb2xsQmFzZSkgPT4gdGhpcy5zdWNjZXNzVGVzdChcIj1cIiwgcm9sbC50eXBlID09PSBcImZhdGVyb2xsXCIgPyAxIDogKHJvbGwgYXMgRGllUm9sbCkuZGllLCByb2xsLnJvbGwpO1xuXG5cdFx0XHRpZiAoXG5cdFx0XHRcdHJvbGxzWzBdLnR5cGUgPT09IFwicm9sbFwiXG5cdFx0XHRcdCYmIHRhcmdldE1ldGhvZCh7IHJvbGw6IDEgfSBhcyBEaWVSb2xsQmFzZSlcblx0XHRcdFx0JiYgdGFyZ2V0TWV0aG9kKHsgcm9sbDogKHJvbGxzWzBdIGFzIERpZVJvbGwpLmRpZSB9IGFzIERpZVJvbGxCYXNlKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgcmVyb2xsIHRhcmdldFwiKTtcblx0XHRcdH1cblxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCByb2xscy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRsZXQgcm9sbCA9IHJvbGxzW2ldO1xuXHRcdFx0XHRyb2xsLm9yZGVyID0gaTtcblx0XHRcdFx0bGV0IGV4cGxvZGVDb3VudCA9IDA7XG5cblx0XHRcdFx0d2hpbGUgKHRhcmdldE1ldGhvZChyb2xsKSAmJiBleHBsb2RlQ291bnQrKyA8IDEwMDApIHtcblx0XHRcdFx0XHRjb25zdCBuZXdSb2xsID0gdGhpcy5yZVJvbGwocm9sbCwgKytpKTtcblx0XHRcdFx0XHRyb2xscy5zcGxpY2UoaSwgMCwgbmV3Um9sbCk7XG5cdFx0XHRcdFx0cm9sbCA9IG5ld1JvbGw7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHJvbGxzO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgZ2V0Q29tcG91bmRNZXRob2QobW9kOiBSZVJvbGxNb2QpIHtcblx0XHRjb25zdCB0YXJnZXRWYWx1ZSA9IG1vZC50YXJnZXRcblx0XHRcdD8gdGhpcy5yb2xsVHlwZShtb2QudGFyZ2V0LnZhbHVlKVxuXHRcdFx0OiBudWxsO1xuXG5cdFx0cmV0dXJuIChyb2xsczogRGllUm9sbEJhc2VbXSkgPT4ge1xuXHRcdFx0Y29uc3QgdGFyZ2V0TWV0aG9kID0gdGFyZ2V0VmFsdWVcblx0XHRcdFx0PyAocm9sbDogRGllUm9sbEJhc2UpID0+IHRoaXMuc3VjY2Vzc1Rlc3QobW9kLnRhcmdldC5tb2QsIHRhcmdldFZhbHVlLnZhbHVlLCByb2xsLnJvbGwpXG5cdFx0XHRcdDogKHJvbGw6IERpZVJvbGxCYXNlKSA9PiB0aGlzLnN1Y2Nlc3NUZXN0KFwiPVwiLCByb2xsLnR5cGUgPT09IFwiZmF0ZXJvbGxcIiA/IDEgOiAocm9sbCBhcyBEaWVSb2xsKS5kaWUsIHJvbGwucm9sbCk7XG5cblx0XHRcdGlmIChcblx0XHRcdFx0cm9sbHNbMF0udHlwZSA9PT0gXCJyb2xsXCJcblx0XHRcdFx0JiYgdGFyZ2V0TWV0aG9kKHsgcm9sbDogMSB9IGFzIERpZVJvbGxCYXNlKVxuXHRcdFx0XHQmJiB0YXJnZXRNZXRob2QoeyByb2xsOiAocm9sbHNbMF0gYXMgRGllUm9sbCkuZGllIH0gYXMgRGllUm9sbEJhc2UpXG5cdFx0XHQpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCByZXJvbGwgdGFyZ2V0XCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHJvbGxzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGxldCByb2xsID0gcm9sbHNbaV07XG5cdFx0XHRcdGxldCByb2xsVmFsdWUgPSByb2xsLnJvbGw7XG5cdFx0XHRcdGxldCBleHBsb2RlQ291bnQgPSAwO1xuXG5cdFx0XHRcdHdoaWxlICh0YXJnZXRNZXRob2Qocm9sbCkgJiYgZXhwbG9kZUNvdW50KysgPCAxMDAwKSB7XG5cdFx0XHRcdFx0Y29uc3QgbmV3Um9sbCA9IHRoaXMucmVSb2xsKHJvbGxzW2ldLCArK2kpO1xuXHRcdFx0XHRcdHJvbGxWYWx1ZSArPSBuZXdSb2xsLnJvbGw7XG5cdFx0XHRcdFx0cm9sbCA9IG5ld1JvbGw7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyb2xsLnZhbHVlID0gcm9sbFZhbHVlO1xuXHRcdFx0XHRyb2xsLnJvbGwgPSByb2xsVmFsdWU7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiByb2xscztcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGdldFBlbmV0cmF0ZU1ldGhvZChtb2Q6IFJlUm9sbE1vZCkge1xuXHRcdGNvbnN0IHRhcmdldFZhbHVlID0gbW9kLnRhcmdldFxuXHRcdFx0PyB0aGlzLnJvbGxUeXBlKG1vZC50YXJnZXQudmFsdWUpXG5cdFx0XHQ6IG51bGw7XG5cblx0XHRyZXR1cm4gKHJvbGxzOiBEaWVSb2xsQmFzZVtdKSA9PiB7XG5cdFx0XHRjb25zdCB0YXJnZXRNZXRob2QgPSB0YXJnZXRWYWx1ZVxuXHRcdFx0XHQ/IChyb2xsOiBEaWVSb2xsQmFzZSkgPT4gdGhpcy5zdWNjZXNzVGVzdChtb2QudGFyZ2V0Lm1vZCwgdGFyZ2V0VmFsdWUudmFsdWUsIHJvbGwucm9sbClcblx0XHRcdFx0OiAocm9sbDogRGllUm9sbEJhc2UpID0+IHRoaXMuc3VjY2Vzc1Rlc3QoXCI9XCIsIHJvbGwudHlwZSA9PT0gXCJmYXRlcm9sbFwiID8gMSA6IChyb2xsIGFzIERpZVJvbGwpLmRpZSwgcm9sbC5yb2xsKTtcblxuXHRcdFx0aWYgKHRhcmdldFZhbHVlXG5cdFx0XHRcdCYmIHJvbGxzWzBdLnR5cGUgPT09IFwicm9sbFwiXG5cdFx0XHRcdCYmIHRhcmdldE1ldGhvZChyb2xsc1swXSlcblx0XHRcdFx0JiYgdGhpcy5zdWNjZXNzVGVzdChtb2QudGFyZ2V0Lm1vZCwgdGFyZ2V0VmFsdWUudmFsdWUsIDEpXG5cdFx0XHQpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCByZXJvbGwgdGFyZ2V0XCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHJvbGxzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGxldCByb2xsID0gcm9sbHNbaV07XG5cdFx0XHRcdHJvbGwub3JkZXIgPSBpO1xuXHRcdFx0XHRsZXQgZXhwbG9kZUNvdW50ID0gMDtcblxuXHRcdFx0XHR3aGlsZSAodGFyZ2V0TWV0aG9kKHJvbGwpICYmIGV4cGxvZGVDb3VudCsrIDwgMTAwMCkge1xuXHRcdFx0XHRcdGNvbnN0IG5ld1JvbGwgPSB0aGlzLnJlUm9sbChyb2xsLCArK2kpO1xuXHRcdFx0XHRcdG5ld1JvbGwudmFsdWUgLT0gMTtcblx0XHRcdFx0XHRuZXdSb2xsLnJvbGwgLT0gMTtcblx0XHRcdFx0XHRyb2xscy5zcGxpY2UoaSwgMCwgbmV3Um9sbCk7XG5cdFx0XHRcdFx0cm9sbCA9IG5ld1JvbGw7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHJvbGxzO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgZ2V0UmVSb2xsTWV0aG9kKG1vZDogUmVSb2xsTW9kKSB7XG5cdFx0Y29uc3QgdGFyZ2V0TWV0aG9kID0gbW9kLnRhcmdldFxuXHRcdFx0PyB0aGlzLnN1Y2Nlc3NUZXN0LmJpbmQobnVsbCwgbW9kLnRhcmdldC5tb2QsIHRoaXMucm9sbFR5cGUobW9kLnRhcmdldC52YWx1ZSkudmFsdWUpXG5cdFx0XHQ6IHRoaXMuc3VjY2Vzc1Rlc3QuYmluZChudWxsLCBcIj1cIiwgMSk7XG5cblx0XHRyZXR1cm4gKHJvbGxzOiBEaWVSb2xsQmFzZVtdKSA9PiB7XG5cdFx0XHRpZiAocm9sbHNbMF0udHlwZSA9PT0gXCJyb2xsXCIgJiYgdGFyZ2V0TWV0aG9kKDEpICYmIHRhcmdldE1ldGhvZCgocm9sbHNbMF0gYXMgRGllUm9sbCkuZGllKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHJlcm9sbCB0YXJnZXRcIik7XG5cdFx0XHR9XG5cblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgcm9sbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0d2hpbGUgKHRhcmdldE1ldGhvZChyb2xsc1tpXS5yb2xsKSkge1xuXHRcdFx0XHRcdHJvbGxzW2ldLnZhbGlkID0gZmFsc2U7XG5cdFx0XHRcdFx0Y29uc3QgbmV3Um9sbCA9IHRoaXMucmVSb2xsKHJvbGxzW2ldLCBpICsgMSk7XG5cdFx0XHRcdFx0cm9sbHMuc3BsaWNlKCsraSwgMCwgbmV3Um9sbCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHJvbGxzO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgZ2V0UmVSb2xsT25jZU1ldGhvZChtb2Q6IFJlUm9sbE1vZCkge1xuXHRcdGNvbnN0IHRhcmdldE1ldGhvZCA9IG1vZC50YXJnZXRcblx0XHRcdD8gdGhpcy5zdWNjZXNzVGVzdC5iaW5kKG51bGwsIG1vZC50YXJnZXQubW9kLCB0aGlzLnJvbGxUeXBlKG1vZC50YXJnZXQudmFsdWUpLnZhbHVlKVxuXHRcdFx0OiB0aGlzLnN1Y2Nlc3NUZXN0LmJpbmQobnVsbCwgXCI9XCIsIDEpO1xuXG5cdFx0cmV0dXJuIChyb2xsczogRGllUm9sbEJhc2VbXSkgPT4ge1xuXHRcdFx0aWYgKHJvbGxzWzBdLnR5cGUgPT09IFwicm9sbFwiICYmIHRhcmdldE1ldGhvZCgxKSAmJiB0YXJnZXRNZXRob2QoKHJvbGxzWzBdIGFzIERpZVJvbGwpLmRpZSkpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCByZXJvbGwgdGFyZ2V0XCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHJvbGxzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmICh0YXJnZXRNZXRob2Qocm9sbHNbaV0ucm9sbCkpIHtcblx0XHRcdFx0XHRyb2xsc1tpXS52YWxpZCA9IGZhbHNlO1xuXHRcdFx0XHRcdGNvbnN0IG5ld1JvbGwgPSB0aGlzLnJlUm9sbChyb2xsc1tpXSwgaSArIDEpO1xuXHRcdFx0XHRcdHJvbGxzLnNwbGljZSgrK2ksIDAsIG5ld1JvbGwpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiByb2xscztcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIHN1Y2Nlc3NUZXN0KG1vZDogc3RyaW5nLCB0YXJnZXQ6IG51bWJlciwgcm9sbDogbnVtYmVyKSB7XG5cdFx0c3dpdGNoIChtb2QpIHtcblx0XHRcdGNhc2UgXCI+XCI6XG5cdFx0XHRcdHJldHVybiByb2xsID49IHRhcmdldDtcblx0XHRcdGNhc2UgXCI8XCI6XG5cdFx0XHRcdHJldHVybiByb2xsIDw9IHRhcmdldDtcblx0XHRcdGNhc2UgXCI9XCI6XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHQvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IHRyaXBsZS1lcXVhbHNcblx0XHRcdFx0cmV0dXJuIHJvbGwgPT0gdGFyZ2V0O1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgcmVSb2xsKHJvbGw6IERpZVJvbGxCYXNlLCBvcmRlcjogbnVtYmVyKTogRGllUm9sbEJhc2Uge1xuXHRcdHN3aXRjaCAocm9sbC50eXBlKSB7XG5cdFx0XHRjYXNlIFwicm9sbFwiOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5nZW5lcmF0ZURpY2VSb2xsKChyb2xsIGFzIERpZVJvbGwpLmRpZSwgb3JkZXIpO1xuXHRcdFx0Y2FzZSBcImZhdGVyb2xsXCI6XG5cdFx0XHRcdHJldHVybiB0aGlzLmdlbmVyYXRlRmF0ZVJvbGwob3JkZXIpO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZG8gYSByZXJvbGwgb2YgYSAke3JvbGwudHlwZX0uYCk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBnZW5lcmF0ZURpY2VSb2xsKGRpZTogbnVtYmVyLCBvcmRlcjogbnVtYmVyKTogRGllUm9sbCB7XG5cdFx0Y29uc3Qgcm9sbCA9IE1hdGguZmxvb3IodGhpcy5yYW5kRnVuY3Rpb24oKSAqIGRpZSkgKyAxO1xuXG5cdFx0Y29uc3QgY3JpdGljYWwgPSByb2xsID09PSBkaWVcblx0XHRcdD8gXCJzdWNjZXNzXCJcblx0XHRcdDogcm9sbCA9PT0gMVxuXHRcdFx0XHQ/IFwiZmFpbHVyZVwiXG5cdFx0XHRcdDogbnVsbDtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRjcml0aWNhbCxcblx0XHRcdGRpZSxcblx0XHRcdG1hdGNoZWQ6IGZhbHNlLFxuXHRcdFx0b3JkZXIsXG5cdFx0XHRyb2xsLFxuXHRcdFx0c3VjY2VzczogZmFsc2UsXG5cdFx0XHR0eXBlOiBcInJvbGxcIixcblx0XHRcdHZhbGlkOiB0cnVlLFxuXHRcdFx0dmFsdWU6IHJvbGwsXG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBnZW5lcmF0ZUZhdGVSb2xsKG9yZGVyOiBudW1iZXIpOiBGYXRlRGllUm9sbCB7XG5cdFx0Y29uc3Qgcm9sbCA9IE1hdGguZmxvb3IodGhpcy5yYW5kRnVuY3Rpb24oKSAqIDMpIC0gMTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRtYXRjaGVkOiBmYWxzZSxcblx0XHRcdG9yZGVyLFxuXHRcdFx0cm9sbCxcblx0XHRcdHN1Y2Nlc3M6IGZhbHNlLFxuXHRcdFx0dHlwZTogXCJmYXRlcm9sbFwiLFxuXHRcdFx0dmFsaWQ6IHRydWUsXG5cdFx0XHR2YWx1ZTogcm9sbCxcblx0XHR9XG5cdH1cbn1cblxudHlwZSBNb2RNZXRob2QgPSAocm9sbHM6IERpZVJvbGxCYXNlW10pID0+IERpZVJvbGxCYXNlW11cbnR5cGUgR3JvdXBNb2RNZXRob2QgPSAocm9sbHM6IFJvbGxCYXNlW10pID0+IFJvbGxCYXNlW11cbiIsIi8qXG4gKiBHZW5lcmF0ZWQgYnkgUEVHLmpzIDAuMTAuMC5cbiAqXG4gKiBodHRwOi8vcGVnanMub3JnL1xuICovXG5cblwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBwZWckc3ViY2xhc3MoY2hpbGQsIHBhcmVudCkge1xuICBmdW5jdGlvbiBjdG9yKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gY2hpbGQ7IH1cbiAgY3Rvci5wcm90b3R5cGUgPSBwYXJlbnQucHJvdG90eXBlO1xuICBjaGlsZC5wcm90b3R5cGUgPSBuZXcgY3RvcigpO1xufVxuXG5mdW5jdGlvbiBwZWckU3ludGF4RXJyb3IobWVzc2FnZSwgZXhwZWN0ZWQsIGZvdW5kLCBsb2NhdGlvbikge1xuICB0aGlzLm1lc3NhZ2UgID0gbWVzc2FnZTtcbiAgdGhpcy5leHBlY3RlZCA9IGV4cGVjdGVkO1xuICB0aGlzLmZvdW5kICAgID0gZm91bmQ7XG4gIHRoaXMubG9jYXRpb24gPSBsb2NhdGlvbjtcbiAgdGhpcy5uYW1lICAgICA9IFwiU3ludGF4RXJyb3JcIjtcblxuICBpZiAodHlwZW9mIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBwZWckU3ludGF4RXJyb3IpO1xuICB9XG59XG5cbnBlZyRzdWJjbGFzcyhwZWckU3ludGF4RXJyb3IsIEVycm9yKTtcblxucGVnJFN5bnRheEVycm9yLmJ1aWxkTWVzc2FnZSA9IGZ1bmN0aW9uKGV4cGVjdGVkLCBmb3VuZCkge1xuICB2YXIgREVTQ1JJQkVfRVhQRUNUQVRJT05fRk5TID0ge1xuICAgICAgICBsaXRlcmFsOiBmdW5jdGlvbihleHBlY3RhdGlvbikge1xuICAgICAgICAgIHJldHVybiBcIlxcXCJcIiArIGxpdGVyYWxFc2NhcGUoZXhwZWN0YXRpb24udGV4dCkgKyBcIlxcXCJcIjtcbiAgICAgICAgfSxcblxuICAgICAgICBcImNsYXNzXCI6IGZ1bmN0aW9uKGV4cGVjdGF0aW9uKSB7XG4gICAgICAgICAgdmFyIGVzY2FwZWRQYXJ0cyA9IFwiXCIsXG4gICAgICAgICAgICAgIGk7XG5cbiAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZXhwZWN0YXRpb24ucGFydHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGVzY2FwZWRQYXJ0cyArPSBleHBlY3RhdGlvbi5wYXJ0c1tpXSBpbnN0YW5jZW9mIEFycmF5XG4gICAgICAgICAgICAgID8gY2xhc3NFc2NhcGUoZXhwZWN0YXRpb24ucGFydHNbaV1bMF0pICsgXCItXCIgKyBjbGFzc0VzY2FwZShleHBlY3RhdGlvbi5wYXJ0c1tpXVsxXSlcbiAgICAgICAgICAgICAgOiBjbGFzc0VzY2FwZShleHBlY3RhdGlvbi5wYXJ0c1tpXSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIFwiW1wiICsgKGV4cGVjdGF0aW9uLmludmVydGVkID8gXCJeXCIgOiBcIlwiKSArIGVzY2FwZWRQYXJ0cyArIFwiXVwiO1xuICAgICAgICB9LFxuXG4gICAgICAgIGFueTogZnVuY3Rpb24oZXhwZWN0YXRpb24pIHtcbiAgICAgICAgICByZXR1cm4gXCJhbnkgY2hhcmFjdGVyXCI7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZW5kOiBmdW5jdGlvbihleHBlY3RhdGlvbikge1xuICAgICAgICAgIHJldHVybiBcImVuZCBvZiBpbnB1dFwiO1xuICAgICAgICB9LFxuXG4gICAgICAgIG90aGVyOiBmdW5jdGlvbihleHBlY3RhdGlvbikge1xuICAgICAgICAgIHJldHVybiBleHBlY3RhdGlvbi5kZXNjcmlwdGlvbjtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICBmdW5jdGlvbiBoZXgoY2gpIHtcbiAgICByZXR1cm4gY2guY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxpdGVyYWxFc2NhcGUocykge1xuICAgIHJldHVybiBzXG4gICAgICAucmVwbGFjZSgvXFxcXC9nLCAnXFxcXFxcXFwnKVxuICAgICAgLnJlcGxhY2UoL1wiL2csICAnXFxcXFwiJylcbiAgICAgIC5yZXBsYWNlKC9cXDAvZywgJ1xcXFwwJylcbiAgICAgIC5yZXBsYWNlKC9cXHQvZywgJ1xcXFx0JylcbiAgICAgIC5yZXBsYWNlKC9cXG4vZywgJ1xcXFxuJylcbiAgICAgIC5yZXBsYWNlKC9cXHIvZywgJ1xcXFxyJylcbiAgICAgIC5yZXBsYWNlKC9bXFx4MDAtXFx4MEZdL2csICAgICAgICAgIGZ1bmN0aW9uKGNoKSB7IHJldHVybiAnXFxcXHgwJyArIGhleChjaCk7IH0pXG4gICAgICAucmVwbGFjZSgvW1xceDEwLVxceDFGXFx4N0YtXFx4OUZdL2csIGZ1bmN0aW9uKGNoKSB7IHJldHVybiAnXFxcXHgnICArIGhleChjaCk7IH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gY2xhc3NFc2NhcGUocykge1xuICAgIHJldHVybiBzXG4gICAgICAucmVwbGFjZSgvXFxcXC9nLCAnXFxcXFxcXFwnKVxuICAgICAgLnJlcGxhY2UoL1xcXS9nLCAnXFxcXF0nKVxuICAgICAgLnJlcGxhY2UoL1xcXi9nLCAnXFxcXF4nKVxuICAgICAgLnJlcGxhY2UoLy0vZywgICdcXFxcLScpXG4gICAgICAucmVwbGFjZSgvXFwwL2csICdcXFxcMCcpXG4gICAgICAucmVwbGFjZSgvXFx0L2csICdcXFxcdCcpXG4gICAgICAucmVwbGFjZSgvXFxuL2csICdcXFxcbicpXG4gICAgICAucmVwbGFjZSgvXFxyL2csICdcXFxccicpXG4gICAgICAucmVwbGFjZSgvW1xceDAwLVxceDBGXS9nLCAgICAgICAgICBmdW5jdGlvbihjaCkgeyByZXR1cm4gJ1xcXFx4MCcgKyBoZXgoY2gpOyB9KVxuICAgICAgLnJlcGxhY2UoL1tcXHgxMC1cXHgxRlxceDdGLVxceDlGXS9nLCBmdW5jdGlvbihjaCkgeyByZXR1cm4gJ1xcXFx4JyAgKyBoZXgoY2gpOyB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlc2NyaWJlRXhwZWN0YXRpb24oZXhwZWN0YXRpb24pIHtcbiAgICByZXR1cm4gREVTQ1JJQkVfRVhQRUNUQVRJT05fRk5TW2V4cGVjdGF0aW9uLnR5cGVdKGV4cGVjdGF0aW9uKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlc2NyaWJlRXhwZWN0ZWQoZXhwZWN0ZWQpIHtcbiAgICB2YXIgZGVzY3JpcHRpb25zID0gbmV3IEFycmF5KGV4cGVjdGVkLmxlbmd0aCksXG4gICAgICAgIGksIGo7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgZXhwZWN0ZWQubGVuZ3RoOyBpKyspIHtcbiAgICAgIGRlc2NyaXB0aW9uc1tpXSA9IGRlc2NyaWJlRXhwZWN0YXRpb24oZXhwZWN0ZWRbaV0pO1xuICAgIH1cblxuICAgIGRlc2NyaXB0aW9ucy5zb3J0KCk7XG5cbiAgICBpZiAoZGVzY3JpcHRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAoaSA9IDEsIGogPSAxOyBpIDwgZGVzY3JpcHRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChkZXNjcmlwdGlvbnNbaSAtIDFdICE9PSBkZXNjcmlwdGlvbnNbaV0pIHtcbiAgICAgICAgICBkZXNjcmlwdGlvbnNbal0gPSBkZXNjcmlwdGlvbnNbaV07XG4gICAgICAgICAgaisrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBkZXNjcmlwdGlvbnMubGVuZ3RoID0gajtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGRlc2NyaXB0aW9ucy5sZW5ndGgpIHtcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgcmV0dXJuIGRlc2NyaXB0aW9uc1swXTtcblxuICAgICAgY2FzZSAyOlxuICAgICAgICByZXR1cm4gZGVzY3JpcHRpb25zWzBdICsgXCIgb3IgXCIgKyBkZXNjcmlwdGlvbnNbMV07XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBkZXNjcmlwdGlvbnMuc2xpY2UoMCwgLTEpLmpvaW4oXCIsIFwiKVxuICAgICAgICAgICsgXCIsIG9yIFwiXG4gICAgICAgICAgKyBkZXNjcmlwdGlvbnNbZGVzY3JpcHRpb25zLmxlbmd0aCAtIDFdO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGRlc2NyaWJlRm91bmQoZm91bmQpIHtcbiAgICByZXR1cm4gZm91bmQgPyBcIlxcXCJcIiArIGxpdGVyYWxFc2NhcGUoZm91bmQpICsgXCJcXFwiXCIgOiBcImVuZCBvZiBpbnB1dFwiO1xuICB9XG5cbiAgcmV0dXJuIFwiRXhwZWN0ZWQgXCIgKyBkZXNjcmliZUV4cGVjdGVkKGV4cGVjdGVkKSArIFwiIGJ1dCBcIiArIGRlc2NyaWJlRm91bmQoZm91bmQpICsgXCIgZm91bmQuXCI7XG59O1xuXG5mdW5jdGlvbiBwZWckcGFyc2UoaW5wdXQsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgIT09IHZvaWQgMCA/IG9wdGlvbnMgOiB7fTtcblxuICB2YXIgcGVnJEZBSUxFRCA9IHt9LFxuXG4gICAgICBwZWckc3RhcnRSdWxlRnVuY3Rpb25zID0geyBzdGFydDogcGVnJHBhcnNlc3RhcnQgfSxcbiAgICAgIHBlZyRzdGFydFJ1bGVGdW5jdGlvbiAgPSBwZWckcGFyc2VzdGFydCxcblxuICAgICAgcGVnJGMwID0gcGVnJGFueUV4cGVjdGF0aW9uKCksXG4gICAgICBwZWckYzEgPSBmdW5jdGlvbihleHByLCBsYWJlbCkge1xuICAgICAgXHRleHByLnJvb3QgPSB0cnVlO1xuXG4gICAgICBcdGlmIChsYWJlbCkge1xuICAgICAgXHRcdGV4cHIubGFiZWwgPSBsYWJlbC5qb2luKFwiXCIpO1xuICAgICAgXHR9XG5cbiAgICAgIFx0cmV0dXJuIGV4cHI7XG4gICAgICB9LFxuICAgICAgcGVnJGMyID0gXCJbW1wiLFxuICAgICAgcGVnJGMzID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIltbXCIsIGZhbHNlKSxcbiAgICAgIHBlZyRjNCA9IFwiXV1cIixcbiAgICAgIHBlZyRjNSA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJdXVwiLCBmYWxzZSksXG4gICAgICBwZWckYzYgPSBmdW5jdGlvbihleHByKSB7XG4gICAgICBcdHJldHVybiB7XG4gICAgICBcdFx0dHlwZTogXCJpbmxpbmVcIixcbiAgICAgIFx0XHRleHByLFxuICAgICAgXHR9XG4gICAgICB9LFxuICAgICAgcGVnJGM3ID0gZnVuY3Rpb24ocm9sbCwgbGFiZWwpIHtcbiAgICAgIFx0aWYgKGxhYmVsKSB7XG4gICAgICBcdFx0cm9sbC5sYWJlbCA9IGxhYmVsO1xuICAgICAgXHR9XG5cbiAgICAgIFx0cmV0dXJuIHJvbGw7XG4gICAgICB9LFxuICAgICAgcGVnJGM4ID0gZnVuY3Rpb24oZ3JvdXAsIG1vZHMsIGxhYmVsKSB7XG4gICAgICBcdGlmIChtb2RzLmxlbmd0aCA+IDApIHtcbiAgICAgIFx0XHRncm91cC5tb2RzID0gKGdyb3VwLm1vZHMgfHwgW10pLmNvbmNhdChtb2RzKTtcbiAgICAgIFx0fVxuXG4gICAgICBcdGlmIChsYWJlbCkge1xuICAgICAgXHRcdGdyb3VwLmxhYmVsID0gbGFiZWw7XG4gICAgICBcdH1cblxuICAgICAgXHRyZXR1cm4gZ3JvdXA7XG4gICAgICB9LFxuICAgICAgcGVnJGM5ID0gXCI+XCIsXG4gICAgICBwZWckYzEwID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIj5cIiwgZmFsc2UpLFxuICAgICAgcGVnJGMxMSA9IFwiPFwiLFxuICAgICAgcGVnJGMxMiA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCI8XCIsIGZhbHNlKSxcbiAgICAgIHBlZyRjMTMgPSBcIj1cIixcbiAgICAgIHBlZyRjMTQgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiPVwiLCBmYWxzZSksXG4gICAgICBwZWckYzE1ID0gZnVuY3Rpb24obW9kLCBleHByKSB7XG4gICAgICBcdHJldHVybiB7XG4gICAgICBcdFx0dHlwZTogXCJzdWNjZXNzXCIsXG4gICAgICBcdFx0bW9kLFxuICAgICAgXHRcdGV4cHIsXG4gICAgICBcdH1cbiAgICAgIH0sXG4gICAgICBwZWckYzE2ID0gXCJmXCIsXG4gICAgICBwZWckYzE3ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcImZcIiwgZmFsc2UpLFxuICAgICAgcGVnJGMxOCA9IGZ1bmN0aW9uKG1vZCwgZXhwcikge1xuICAgICAgXHRyZXR1cm4ge1xuICAgICAgXHRcdHR5cGU6IFwiZmFpbHVyZVwiLFxuICAgICAgXHRcdG1vZCxcbiAgICAgIFx0XHRleHByLFxuICAgICAgXHR9XG4gICAgICB9LFxuICAgICAgcGVnJGMxOSA9IFwiY3NcIixcbiAgICAgIHBlZyRjMjAgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiY3NcIiwgZmFsc2UpLFxuICAgICAgcGVnJGMyMSA9IGZ1bmN0aW9uKG1vZCwgZXhwcikge1xuICAgICAgXHRyZXR1cm4ge1xuICAgICAgXHRcdHR5cGU6IFwiY3JpdFwiLFxuICAgICAgXHRcdG1vZCxcbiAgICAgIFx0XHRleHByLFxuICAgICAgXHR9XG4gICAgICB9LFxuICAgICAgcGVnJGMyMiA9IFwiY2ZcIixcbiAgICAgIHBlZyRjMjMgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiY2ZcIiwgZmFsc2UpLFxuICAgICAgcGVnJGMyNCA9IGZ1bmN0aW9uKG1vZCwgZXhwcikge1xuICAgICAgXHRyZXR1cm4ge1xuICAgICAgXHRcdHR5cGU6IFwiY3JpdGZhaWxcIixcbiAgICAgIFx0XHRtb2QsXG4gICAgICBcdFx0ZXhwcixcbiAgICAgIFx0fVxuICAgICAgfSxcbiAgICAgIHBlZyRjMjUgPSBmdW5jdGlvbihtb2QsIGV4cHIpIHtcbiAgICAgIFx0cmV0dXJuIHtcbiAgICAgIFx0XHRtb2QsXG4gICAgICBcdFx0ZXhwcixcbiAgICAgIFx0fVxuICAgICAgfSxcbiAgICAgIHBlZyRjMjYgPSBcIm1cIixcbiAgICAgIHBlZyRjMjcgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwibVwiLCBmYWxzZSksXG4gICAgICBwZWckYzI4ID0gXCJ0XCIsXG4gICAgICBwZWckYzI5ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcInRcIiwgZmFsc2UpLFxuICAgICAgcGVnJGMzMCA9IGZ1bmN0aW9uKGNvdW50LCBtaW4sIHRhcmdldCkge1xuICAgICAgXHRjb25zdCBtYXRjaCA9IHtcbiAgICAgIFx0XHR0eXBlOiBcIm1hdGNoXCIsXG4gICAgICBcdFx0bWluOiBtaW4gfHwgeyB0eXBlOiBcIm51bWJlclwiLCB2YWx1ZTogMiB9LFxuICAgICAgXHRcdGNvdW50OiAhIWNvdW50LFxuICAgICAgXHR9XG5cbiAgICAgIFx0aWYgKHRhcmdldCkge1xuICAgICAgXHRcdG1hdGNoLm1vZCA9IHRhcmdldC5tb2Q7XG4gICAgICBcdFx0bWF0Y2guZXhwciA9IHRhcmdldC5leHByO1xuICAgICAgXHR9XG5cbiAgICAgIFx0cmV0dXJuIG1hdGNoO1xuICAgICAgfSxcbiAgICAgIHBlZyRjMzEgPSBcImtcIixcbiAgICAgIHBlZyRjMzIgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwia1wiLCBmYWxzZSksXG4gICAgICBwZWckYzMzID0gXCJsXCIsXG4gICAgICBwZWckYzM0ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcImxcIiwgZmFsc2UpLFxuICAgICAgcGVnJGMzNSA9IFwiaFwiLFxuICAgICAgcGVnJGMzNiA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJoXCIsIGZhbHNlKSxcbiAgICAgIHBlZyRjMzcgPSBmdW5jdGlvbihoaWdobG93LCBleHByKSB7XG4gICAgICBcdHJldHVybiB7XG4gICAgICBcdFx0dHlwZTogXCJrZWVwXCIsXG4gICAgICBcdFx0aGlnaGxvdyxcbiAgICAgIFx0XHRleHByOiBleHByIHx8IGRlZmF1bHRFeHByZXNzaW9uLFxuICAgICAgXHR9XG4gICAgICB9LFxuICAgICAgcGVnJGMzOCA9IFwiZFwiLFxuICAgICAgcGVnJGMzOSA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJkXCIsIGZhbHNlKSxcbiAgICAgIHBlZyRjNDAgPSBmdW5jdGlvbihoaWdobG93LCBleHByKSB7XG4gICAgICBcdHJldHVybiB7XG4gICAgICBcdFx0dHlwZTogXCJkcm9wXCIsXG4gICAgICBcdFx0aGlnaGxvdyxcbiAgICAgIFx0XHRleHByOiBleHByIHx8IGRlZmF1bHRFeHByZXNzaW9uLFxuICAgICAgXHR9XG4gICAgICB9LFxuICAgICAgcGVnJGM0MSA9IFwie1wiLFxuICAgICAgcGVnJGM0MiA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJ7XCIsIGZhbHNlKSxcbiAgICAgIHBlZyRjNDMgPSBcIixcIixcbiAgICAgIHBlZyRjNDQgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiLFwiLCBmYWxzZSksXG4gICAgICBwZWckYzQ1ID0gXCJ9XCIsXG4gICAgICBwZWckYzQ2ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIn1cIiwgZmFsc2UpLFxuICAgICAgcGVnJGM0NyA9IGZ1bmN0aW9uKGhlYWQsIHRhaWwpIHtcbiAgICAgIFx0cmV0dXJuIHtcbiAgICAgIFx0XHRyb2xsczogW2hlYWQsIC4uLnRhaWwubWFwKChlbCkgPT4gZWxbM10pXSxcbiAgICAgIFx0XHR0eXBlOiBcImdyb3VwXCIsXG4gICAgICBcdH1cbiAgICAgIH0sXG4gICAgICBwZWckYzQ4ID0gXCIrXCIsXG4gICAgICBwZWckYzQ5ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIitcIiwgZmFsc2UpLFxuICAgICAgcGVnJGM1MCA9IGZ1bmN0aW9uKGhlYWQsIHRhaWwpIHtcbiAgICAgIFx0aWYgKHRhaWwubGVuZ3RoID09IDApIHtcbiAgICAgIFx0XHRyZXR1cm4gaGVhZDtcbiAgICAgIFx0fVxuXG4gICAgICBcdGNvbnN0IG9wcyA9IHRhaWxcbiAgICAgIFx0XHQubWFwKChlbGVtZW50KSA9PiAoe1xuICAgICAgXHRcdFx0dHlwZTogXCJtYXRoXCIsXG4gICAgICBcdFx0XHRvcDogZWxlbWVudFsxXSxcbiAgICAgIFx0XHRcdHRhaWw6IGVsZW1lbnRbM11cbiAgICAgIFx0XHR9KSk7XG5cbiAgICAgIFx0cmV0dXJuIHtcbiAgICAgIFx0XHRoZWFkOiBoZWFkLFxuICAgICAgXHRcdHR5cGU6IFwiZGljZUV4cHJlc3Npb25cIixcbiAgICAgIFx0XHRvcHMsXG4gICAgICBcdH07XG4gICAgICB9LFxuICAgICAgcGVnJGM1MSA9IGZ1bmN0aW9uKGhlYWQsIG1vZHMsIG1hdGNoLCBzb3J0KSB7XG4gICAgICBcdGNvbnN0IHRhcmdldHMgPSBtb2RzLmZpbHRlcigobW9kKSA9PiBbXCJzdWNjZXNzXCIsIFwiZmFpbHVyZVwiXS5pbmNsdWRlcyhtb2QudHlwZSkpO1xuICAgICAgXHRtb2RzID0gbW9kcy5maWx0ZXIoKG1vZCkgPT4gIXRhcmdldHMuaW5jbHVkZXMobW9kKSk7XG5cbiAgICAgIFx0aGVhZC5tb2RzID0gKGhlYWQubW9kcyB8fCBbXSkuY29uY2F0KG1vZHMpO1xuXG4gICAgICBcdGlmICh0YXJnZXRzLmxlbmd0aCA+IDApIHtcbiAgICAgIFx0XHRoZWFkLnRhcmdldHMgPSB0YXJnZXRzO1xuICAgICAgXHR9XG5cbiAgICAgIFx0aWYgKG1hdGNoKSB7XG4gICAgICBcdFx0aGVhZC5tYXRjaCA9IG1hdGNoO1xuICAgICAgXHR9XG5cbiAgICAgIFx0aWYgKHNvcnQpIHtcbiAgICAgIFx0XHRoZWFkLnNvcnQgPSBzb3J0O1xuICAgICAgXHR9XG5cbiAgICAgIFx0cmV0dXJuIGhlYWQ7XG4gICAgICB9LFxuICAgICAgcGVnJGM1MiA9IFwic2FcIixcbiAgICAgIHBlZyRjNTMgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwic2FcIiwgZmFsc2UpLFxuICAgICAgcGVnJGM1NCA9IGZ1bmN0aW9uKCkge1xuICAgICAgXHRyZXR1cm4ge1xuICAgICAgXHRcdHR5cGU6IFwic29ydFwiLFxuICAgICAgXHRcdGFzYzogdHJ1ZVxuICAgICAgXHR9XG4gICAgICB9LFxuICAgICAgcGVnJGM1NSA9IFwic2RcIixcbiAgICAgIHBlZyRjNTYgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwic2RcIiwgZmFsc2UpLFxuICAgICAgcGVnJGM1NyA9IGZ1bmN0aW9uKCkge1xuICAgICAgXHRyZXR1cm4ge1xuICAgICAgXHRcdHR5cGU6IFwic29ydFwiLFxuICAgICAgXHRcdGFzYzogZmFsc2VcbiAgICAgIFx0fVxuICAgICAgfSxcbiAgICAgIHBlZyRjNTggPSBmdW5jdGlvbihoZWFkLCB0YWlsKSB7XG4gICAgICBcdGhlYWQubW9kcyA9IChoZWFkLm1vZHMgfHwgW10pLmNvbmNhdCh0YWlsKTtcbiAgICAgIFx0cmV0dXJuIGhlYWQ7XG4gICAgICB9LFxuICAgICAgcGVnJGM1OSA9IFwiIVwiLFxuICAgICAgcGVnJGM2MCA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCIhXCIsIGZhbHNlKSxcbiAgICAgIHBlZyRjNjEgPSBmdW5jdGlvbih0YXJnZXQpIHtcbiAgICAgIFx0cmV0dXJuIHtcbiAgICAgIFx0XHR0eXBlOiBcImV4cGxvZGVcIixcbiAgICAgIFx0XHR0YXJnZXQsXG4gICAgICBcdH1cbiAgICAgIH0sXG4gICAgICBwZWckYzYyID0gXCIhIVwiLFxuICAgICAgcGVnJGM2MyA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCIhIVwiLCBmYWxzZSksXG4gICAgICBwZWckYzY0ID0gZnVuY3Rpb24odGFyZ2V0KSB7XG4gICAgICBcdHJldHVybiB7XG4gICAgICBcdFx0dHlwZTogXCJjb21wb3VuZFwiLFxuICAgICAgXHRcdHRhcmdldCxcbiAgICAgIFx0fVxuICAgICAgfSxcbiAgICAgIHBlZyRjNjUgPSBcIiFwXCIsXG4gICAgICBwZWckYzY2ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIiFwXCIsIGZhbHNlKSxcbiAgICAgIHBlZyRjNjcgPSBmdW5jdGlvbih0YXJnZXQpIHtcbiAgICAgIFx0cmV0dXJuIHtcbiAgICAgIFx0XHR0eXBlOiBcInBlbmV0cmF0ZVwiLFxuICAgICAgXHRcdHRhcmdldCxcbiAgICAgIFx0fVxuICAgICAgfSxcbiAgICAgIHBlZyRjNjggPSBcInJcIixcbiAgICAgIHBlZyRjNjkgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiclwiLCBmYWxzZSksXG4gICAgICBwZWckYzcwID0gZnVuY3Rpb24odGFyZ2V0KSB7XG4gICAgICBcdHRhcmdldCA9IHRhcmdldCB8fCBkZWZhdWx0VGFyZ2V0O1xuXG4gICAgICBcdHJldHVybiB7XG4gICAgICBcdFx0dHlwZTogXCJyZXJvbGxcIixcbiAgICAgIFx0XHR0YXJnZXQsXG4gICAgICBcdH1cbiAgICAgIH0sXG4gICAgICBwZWckYzcxID0gXCJyb1wiLFxuICAgICAgcGVnJGM3MiA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJyb1wiLCBmYWxzZSksXG4gICAgICBwZWckYzczID0gZnVuY3Rpb24odGFyZ2V0KSB7XG4gICAgICBcdHRhcmdldCA9IHRhcmdldCB8fCBkZWZhdWx0VGFyZ2V0O1xuXG4gICAgICBcdHJldHVybiB7XG4gICAgICBcdFx0dHlwZTogXCJyZXJvbGxPbmNlXCIsXG4gICAgICBcdFx0dGFyZ2V0LFxuICAgICAgXHR9XG4gICAgICB9LFxuICAgICAgcGVnJGM3NCA9IGZ1bmN0aW9uKG1vZCwgdmFsdWUpIHtcbiAgICAgIFx0cmV0dXJuIHtcbiAgICAgIFx0XHR0eXBlOiBcInRhcmdldFwiLFxuICAgICAgXHRcdG1vZCxcbiAgICAgIFx0XHR2YWx1ZSxcbiAgICAgIFx0fVxuICAgICAgfSxcbiAgICAgIHBlZyRjNzUgPSBmdW5jdGlvbihoZWFkLCB0YWlsKSB7XG4gICAgICBcdGhlYWQgPSBoZWFkID8gaGVhZCA6IHsgdHlwZTogXCJudW1iZXJcIiwgdmFsdWU6IDEgfTtcblxuICAgICAgXHRyZXR1cm4ge1xuICAgICAgXHRcdGRpZTogdGFpbCxcbiAgICAgIFx0XHRjb3VudDogaGVhZCxcbiAgICAgIFx0XHR0eXBlOiBcImRpZVwiXG4gICAgICBcdH07XG4gICAgICB9LFxuICAgICAgcGVnJGM3NiA9IFwiRlwiLFxuICAgICAgcGVnJGM3NyA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJGXCIsIGZhbHNlKSxcbiAgICAgIHBlZyRjNzggPSBmdW5jdGlvbigpIHtcbiAgICAgIFx0cmV0dXJuIHtcbiAgICAgIFx0XHR0eXBlOiBcImZhdGVcIixcbiAgICAgIFx0fVxuICAgICAgfSxcbiAgICAgIHBlZyRjNzkgPSBcIiVcIixcbiAgICAgIHBlZyRjODAgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiJVwiLCBmYWxzZSksXG4gICAgICBwZWckYzgxID0gZnVuY3Rpb24oKSB7XG4gICAgICBcdHJldHVybiB7XG4gICAgICBcdFx0dHlwZTogXCJudW1iZXJcIixcbiAgICAgIFx0XHR2YWx1ZTogXCIxMDBcIixcbiAgICAgIFx0fVxuICAgICAgfSxcbiAgICAgIHBlZyRjODIgPSBcIihcIixcbiAgICAgIHBlZyRjODMgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiKFwiLCBmYWxzZSksXG4gICAgICBwZWckYzg0ID0gXCIpXCIsXG4gICAgICBwZWckYzg1ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIilcIiwgZmFsc2UpLFxuICAgICAgcGVnJGM4NiA9IGZ1bmN0aW9uKGV4cHIsIGxhYmVsKSB7XG4gICAgICBcdGlmIChsYWJlbCkge1xuICAgICAgXHRcdGV4cHIubGFiZWwgPSBsYWJlbDtcbiAgICAgIFx0fVxuXG4gICAgICBcdHJldHVybiBleHByO1xuICAgICAgfSxcbiAgICAgIHBlZyRjODcgPSBcIi1cIixcbiAgICAgIHBlZyRjODggPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiLVwiLCBmYWxzZSksXG4gICAgICBwZWckYzg5ID0gZnVuY3Rpb24oaGVhZCwgdGFpbCkge1xuICAgICAgXHRpZiAodGFpbC5sZW5ndGggPT0gMCkge1xuICAgICAgXHRcdHJldHVybiBoZWFkO1xuICAgICAgXHR9XG5cbiAgICAgIFx0Y29uc3Qgb3BzID0gdGFpbFxuICAgICAgXHRcdC5tYXAoKGVsZW1lbnQpID0+ICh7XG4gICAgICBcdFx0XHR0eXBlOiBcIm1hdGhcIixcbiAgICAgIFx0XHRcdG9wOiBlbGVtZW50WzFdLFxuICAgICAgXHRcdFx0dGFpbDogZWxlbWVudFszXSxcbiAgICAgIFx0XHR9KSk7XG5cbiAgICAgIFx0cmV0dXJuIHtcbiAgICAgIFx0XHRoZWFkLFxuICAgICAgXHRcdHR5cGU6IFwiZXhwcmVzc2lvblwiLFxuICAgICAgXHRcdG9wcyxcbiAgICAgIFx0fTtcbiAgICAgIH0sXG4gICAgICBwZWckYzkwID0gXCIqXCIsXG4gICAgICBwZWckYzkxID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIipcIiwgZmFsc2UpLFxuICAgICAgcGVnJGM5MiA9IFwiL1wiLFxuICAgICAgcGVnJGM5MyA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCIvXCIsIGZhbHNlKSxcbiAgICAgIHBlZyRjOTQgPSBcIioqXCIsXG4gICAgICBwZWckYzk1ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIioqXCIsIGZhbHNlKSxcbiAgICAgIHBlZyRjOTYgPSBcImZsb29yXCIsXG4gICAgICBwZWckYzk3ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcImZsb29yXCIsIGZhbHNlKSxcbiAgICAgIHBlZyRjOTggPSBcImNlaWxcIixcbiAgICAgIHBlZyRjOTkgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiY2VpbFwiLCBmYWxzZSksXG4gICAgICBwZWckYzEwMCA9IFwicm91bmRcIixcbiAgICAgIHBlZyRjMTAxID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcInJvdW5kXCIsIGZhbHNlKSxcbiAgICAgIHBlZyRjMTAyID0gXCJhYnNcIixcbiAgICAgIHBlZyRjMTAzID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcImFic1wiLCBmYWxzZSksXG4gICAgICBwZWckYzEwNCA9IGZ1bmN0aW9uKG9wLCBleHByKSB7XG4gICAgICBcdHJldHVybiB7XG4gICAgICBcdFx0dHlwZTogXCJtYXRoZnVuY3Rpb25cIixcbiAgICAgIFx0XHRvcCxcbiAgICAgIFx0XHRleHByXG4gICAgICBcdH07XG4gICAgICB9LFxuICAgICAgcGVnJGMxMDUgPSBwZWckb3RoZXJFeHBlY3RhdGlvbihcImludGVnZXJcIiksXG4gICAgICBwZWckYzEwNiA9IC9eWzAtOV0vLFxuICAgICAgcGVnJGMxMDcgPSBwZWckY2xhc3NFeHBlY3RhdGlvbihbW1wiMFwiLCBcIjlcIl1dLCBmYWxzZSwgZmFsc2UpLFxuICAgICAgcGVnJGMxMDggPSBmdW5jdGlvbigpIHtcbiAgICAgIFx0Y29uc3QgbnVtID0gcGFyc2VJbnQodGV4dCgpLCAxMCk7XG4gICAgICBcdHJldHVybiB7XG4gICAgICBcdFx0dHlwZTogXCJudW1iZXJcIixcbiAgICAgIFx0XHR2YWx1ZTogbnVtLFxuICAgICAgXHR9XG4gICAgICB9LFxuICAgICAgcGVnJGMxMDkgPSBcIltcIixcbiAgICAgIHBlZyRjMTEwID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIltcIiwgZmFsc2UpLFxuICAgICAgcGVnJGMxMTEgPSAvXlteXFxdXS8sXG4gICAgICBwZWckYzExMiA9IHBlZyRjbGFzc0V4cGVjdGF0aW9uKFtcIl1cIl0sIHRydWUsIGZhbHNlKSxcbiAgICAgIHBlZyRjMTEzID0gXCJdXCIsXG4gICAgICBwZWckYzExNCA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJdXCIsIGZhbHNlKSxcbiAgICAgIHBlZyRjMTE1ID0gZnVuY3Rpb24obGFiZWwpIHtcbiAgICAgIFx0cmV0dXJuIGxhYmVsLmpvaW4oXCJcIilcbiAgICAgIH0sXG4gICAgICBwZWckYzExNiA9IHBlZyRvdGhlckV4cGVjdGF0aW9uKFwid2hpdGVzcGFjZVwiKSxcbiAgICAgIHBlZyRjMTE3ID0gL15bIFxcdFxcblxccl0vLFxuICAgICAgcGVnJGMxMTggPSBwZWckY2xhc3NFeHBlY3RhdGlvbihbXCIgXCIsIFwiXFx0XCIsIFwiXFxuXCIsIFwiXFxyXCJdLCBmYWxzZSwgZmFsc2UpLFxuXG4gICAgICBwZWckY3VyclBvcyAgICAgICAgICA9IDAsXG4gICAgICBwZWckc2F2ZWRQb3MgICAgICAgICA9IDAsXG4gICAgICBwZWckcG9zRGV0YWlsc0NhY2hlICA9IFt7IGxpbmU6IDEsIGNvbHVtbjogMSB9XSxcbiAgICAgIHBlZyRtYXhGYWlsUG9zICAgICAgID0gMCxcbiAgICAgIHBlZyRtYXhGYWlsRXhwZWN0ZWQgID0gW10sXG4gICAgICBwZWckc2lsZW50RmFpbHMgICAgICA9IDAsXG5cbiAgICAgIHBlZyRyZXN1bHQ7XG5cbiAgaWYgKFwic3RhcnRSdWxlXCIgaW4gb3B0aW9ucykge1xuICAgIGlmICghKG9wdGlvbnMuc3RhcnRSdWxlIGluIHBlZyRzdGFydFJ1bGVGdW5jdGlvbnMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCBzdGFydCBwYXJzaW5nIGZyb20gcnVsZSBcXFwiXCIgKyBvcHRpb25zLnN0YXJ0UnVsZSArIFwiXFxcIi5cIik7XG4gICAgfVxuXG4gICAgcGVnJHN0YXJ0UnVsZUZ1bmN0aW9uID0gcGVnJHN0YXJ0UnVsZUZ1bmN0aW9uc1tvcHRpb25zLnN0YXJ0UnVsZV07XG4gIH1cblxuICBmdW5jdGlvbiB0ZXh0KCkge1xuICAgIHJldHVybiBpbnB1dC5zdWJzdHJpbmcocGVnJHNhdmVkUG9zLCBwZWckY3VyclBvcyk7XG4gIH1cblxuICBmdW5jdGlvbiBsb2NhdGlvbigpIHtcbiAgICByZXR1cm4gcGVnJGNvbXB1dGVMb2NhdGlvbihwZWckc2F2ZWRQb3MsIHBlZyRjdXJyUG9zKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGV4cGVjdGVkKGRlc2NyaXB0aW9uLCBsb2NhdGlvbikge1xuICAgIGxvY2F0aW9uID0gbG9jYXRpb24gIT09IHZvaWQgMCA/IGxvY2F0aW9uIDogcGVnJGNvbXB1dGVMb2NhdGlvbihwZWckc2F2ZWRQb3MsIHBlZyRjdXJyUG9zKVxuXG4gICAgdGhyb3cgcGVnJGJ1aWxkU3RydWN0dXJlZEVycm9yKFxuICAgICAgW3BlZyRvdGhlckV4cGVjdGF0aW9uKGRlc2NyaXB0aW9uKV0sXG4gICAgICBpbnB1dC5zdWJzdHJpbmcocGVnJHNhdmVkUG9zLCBwZWckY3VyclBvcyksXG4gICAgICBsb2NhdGlvblxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBlcnJvcihtZXNzYWdlLCBsb2NhdGlvbikge1xuICAgIGxvY2F0aW9uID0gbG9jYXRpb24gIT09IHZvaWQgMCA/IGxvY2F0aW9uIDogcGVnJGNvbXB1dGVMb2NhdGlvbihwZWckc2F2ZWRQb3MsIHBlZyRjdXJyUG9zKVxuXG4gICAgdGhyb3cgcGVnJGJ1aWxkU2ltcGxlRXJyb3IobWVzc2FnZSwgbG9jYXRpb24pO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbih0ZXh0LCBpZ25vcmVDYXNlKSB7XG4gICAgcmV0dXJuIHsgdHlwZTogXCJsaXRlcmFsXCIsIHRleHQ6IHRleHQsIGlnbm9yZUNhc2U6IGlnbm9yZUNhc2UgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRjbGFzc0V4cGVjdGF0aW9uKHBhcnRzLCBpbnZlcnRlZCwgaWdub3JlQ2FzZSkge1xuICAgIHJldHVybiB7IHR5cGU6IFwiY2xhc3NcIiwgcGFydHM6IHBhcnRzLCBpbnZlcnRlZDogaW52ZXJ0ZWQsIGlnbm9yZUNhc2U6IGlnbm9yZUNhc2UgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRhbnlFeHBlY3RhdGlvbigpIHtcbiAgICByZXR1cm4geyB0eXBlOiBcImFueVwiIH07XG4gIH1cblxuICBmdW5jdGlvbiBwZWckZW5kRXhwZWN0YXRpb24oKSB7XG4gICAgcmV0dXJuIHsgdHlwZTogXCJlbmRcIiB9O1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJG90aGVyRXhwZWN0YXRpb24oZGVzY3JpcHRpb24pIHtcbiAgICByZXR1cm4geyB0eXBlOiBcIm90aGVyXCIsIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbiB9O1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJGNvbXB1dGVQb3NEZXRhaWxzKHBvcykge1xuICAgIHZhciBkZXRhaWxzID0gcGVnJHBvc0RldGFpbHNDYWNoZVtwb3NdLCBwO1xuXG4gICAgaWYgKGRldGFpbHMpIHtcbiAgICAgIHJldHVybiBkZXRhaWxzO1xuICAgIH0gZWxzZSB7XG4gICAgICBwID0gcG9zIC0gMTtcbiAgICAgIHdoaWxlICghcGVnJHBvc0RldGFpbHNDYWNoZVtwXSkge1xuICAgICAgICBwLS07XG4gICAgICB9XG5cbiAgICAgIGRldGFpbHMgPSBwZWckcG9zRGV0YWlsc0NhY2hlW3BdO1xuICAgICAgZGV0YWlscyA9IHtcbiAgICAgICAgbGluZTogICBkZXRhaWxzLmxpbmUsXG4gICAgICAgIGNvbHVtbjogZGV0YWlscy5jb2x1bW5cbiAgICAgIH07XG5cbiAgICAgIHdoaWxlIChwIDwgcG9zKSB7XG4gICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHApID09PSAxMCkge1xuICAgICAgICAgIGRldGFpbHMubGluZSsrO1xuICAgICAgICAgIGRldGFpbHMuY29sdW1uID0gMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZXRhaWxzLmNvbHVtbisrO1xuICAgICAgICB9XG5cbiAgICAgICAgcCsrO1xuICAgICAgfVxuXG4gICAgICBwZWckcG9zRGV0YWlsc0NhY2hlW3Bvc10gPSBkZXRhaWxzO1xuICAgICAgcmV0dXJuIGRldGFpbHM7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcGVnJGNvbXB1dGVMb2NhdGlvbihzdGFydFBvcywgZW5kUG9zKSB7XG4gICAgdmFyIHN0YXJ0UG9zRGV0YWlscyA9IHBlZyRjb21wdXRlUG9zRGV0YWlscyhzdGFydFBvcyksXG4gICAgICAgIGVuZFBvc0RldGFpbHMgICA9IHBlZyRjb21wdXRlUG9zRGV0YWlscyhlbmRQb3MpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXJ0OiB7XG4gICAgICAgIG9mZnNldDogc3RhcnRQb3MsXG4gICAgICAgIGxpbmU6ICAgc3RhcnRQb3NEZXRhaWxzLmxpbmUsXG4gICAgICAgIGNvbHVtbjogc3RhcnRQb3NEZXRhaWxzLmNvbHVtblxuICAgICAgfSxcbiAgICAgIGVuZDoge1xuICAgICAgICBvZmZzZXQ6IGVuZFBvcyxcbiAgICAgICAgbGluZTogICBlbmRQb3NEZXRhaWxzLmxpbmUsXG4gICAgICAgIGNvbHVtbjogZW5kUG9zRGV0YWlscy5jb2x1bW5cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJGZhaWwoZXhwZWN0ZWQpIHtcbiAgICBpZiAocGVnJGN1cnJQb3MgPCBwZWckbWF4RmFpbFBvcykgeyByZXR1cm47IH1cblxuICAgIGlmIChwZWckY3VyclBvcyA+IHBlZyRtYXhGYWlsUG9zKSB7XG4gICAgICBwZWckbWF4RmFpbFBvcyA9IHBlZyRjdXJyUG9zO1xuICAgICAgcGVnJG1heEZhaWxFeHBlY3RlZCA9IFtdO1xuICAgIH1cblxuICAgIHBlZyRtYXhGYWlsRXhwZWN0ZWQucHVzaChleHBlY3RlZCk7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckYnVpbGRTaW1wbGVFcnJvcihtZXNzYWdlLCBsb2NhdGlvbikge1xuICAgIHJldHVybiBuZXcgcGVnJFN5bnRheEVycm9yKG1lc3NhZ2UsIG51bGwsIG51bGwsIGxvY2F0aW9uKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRidWlsZFN0cnVjdHVyZWRFcnJvcihleHBlY3RlZCwgZm91bmQsIGxvY2F0aW9uKSB7XG4gICAgcmV0dXJuIG5ldyBwZWckU3ludGF4RXJyb3IoXG4gICAgICBwZWckU3ludGF4RXJyb3IuYnVpbGRNZXNzYWdlKGV4cGVjdGVkLCBmb3VuZCksXG4gICAgICBleHBlY3RlZCxcbiAgICAgIGZvdW5kLFxuICAgICAgbG9jYXRpb25cbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlc3RhcnQoKSB7XG4gICAgdmFyIHMwLCBzMSwgczIsIHMzO1xuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBzMSA9IHBlZyRwYXJzZUV4cHJlc3Npb24oKTtcbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMyID0gW107XG4gICAgICBpZiAoaW5wdXQubGVuZ3RoID4gcGVnJGN1cnJQb3MpIHtcbiAgICAgICAgczMgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMCk7IH1cbiAgICAgIH1cbiAgICAgIHdoaWxlIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMi5wdXNoKHMzKTtcbiAgICAgICAgaWYgKGlucHV0Lmxlbmd0aCA+IHBlZyRjdXJyUG9zKSB7XG4gICAgICAgICAgczMgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMwKTsgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgIHMxID0gcGVnJGMxKHMxLCBzMik7XG4gICAgICAgIHMwID0gczE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlSW5saW5lRXhwcmVzc2lvbigpIHtcbiAgICB2YXIgczAsIHMxLCBzMiwgczM7XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDIpID09PSBwZWckYzIpIHtcbiAgICAgIHMxID0gcGVnJGMyO1xuICAgICAgcGVnJGN1cnJQb3MgKz0gMjtcbiAgICB9IGVsc2Uge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzMpOyB9XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgczIgPSBwZWckcGFyc2VFeHByZXNzaW9uKCk7XG4gICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMikgPT09IHBlZyRjNCkge1xuICAgICAgICAgIHMzID0gcGVnJGM0O1xuICAgICAgICAgIHBlZyRjdXJyUG9zICs9IDI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM1KTsgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgIHMxID0gcGVnJGM2KHMyKTtcbiAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlQW55Um9sbCgpIHtcbiAgICB2YXIgczAsIHMxLCBzMiwgczM7XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIHMxID0gcGVnJHBhcnNlTW9kR3JvdXBlZFJvbGwoKTtcbiAgICBpZiAoczEgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMxID0gcGVnJHBhcnNlRnVsbFJvbGwoKTtcbiAgICAgIGlmIChzMSA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMSA9IHBlZyRwYXJzZUludGVnZXIoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMiA9IHBlZyRwYXJzZV8oKTtcbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMyA9IHBlZyRwYXJzZUxhYmVsKCk7XG4gICAgICAgIGlmIChzMyA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHMzID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICBzMSA9IHBlZyRjNyhzMSwgczMpO1xuICAgICAgICAgIHMwID0gczE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VNb2RHcm91cGVkUm9sbCgpIHtcbiAgICB2YXIgczAsIHMxLCBzMiwgczMsIHM0O1xuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBzMSA9IHBlZyRwYXJzZUdyb3VwZWRSb2xsKCk7XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMiA9IFtdO1xuICAgICAgczMgPSBwZWckcGFyc2VLZWVwTW9kKCk7XG4gICAgICBpZiAoczMgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczMgPSBwZWckcGFyc2VEcm9wTW9kKCk7XG4gICAgICAgIGlmIChzMyA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHMzID0gcGVnJHBhcnNlU3VjY2Vzc01vZCgpO1xuICAgICAgICAgIGlmIChzMyA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczMgPSBwZWckcGFyc2VGYWlsdXJlTW9kKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB3aGlsZSAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczIucHVzaChzMyk7XG4gICAgICAgIHMzID0gcGVnJHBhcnNlS2VlcE1vZCgpO1xuICAgICAgICBpZiAoczMgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzMyA9IHBlZyRwYXJzZURyb3BNb2QoKTtcbiAgICAgICAgICBpZiAoczMgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHMzID0gcGVnJHBhcnNlU3VjY2Vzc01vZCgpO1xuICAgICAgICAgICAgaWYgKHMzID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHMzID0gcGVnJHBhcnNlRmFpbHVyZU1vZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMzID0gcGVnJHBhcnNlXygpO1xuICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzNCA9IHBlZyRwYXJzZUxhYmVsKCk7XG4gICAgICAgICAgaWYgKHM0ID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzNCA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICBzMSA9IHBlZyRjOChzMSwgczIsIHM0KTtcbiAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlU3VjY2Vzc01vZCgpIHtcbiAgICB2YXIgczAsIHMxLCBzMjtcblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA2Mikge1xuICAgICAgczEgPSBwZWckYzk7XG4gICAgICBwZWckY3VyclBvcysrO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTApOyB9XG4gICAgfVxuICAgIGlmIChzMSA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA2MCkge1xuICAgICAgICBzMSA9IHBlZyRjMTE7XG4gICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxMik7IH1cbiAgICAgIH1cbiAgICAgIGlmIChzMSA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDYxKSB7XG4gICAgICAgICAgczEgPSBwZWckYzEzO1xuICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxNCk7IH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMyID0gcGVnJHBhcnNlUm9sbEV4cHIoKTtcbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgczEgPSBwZWckYzE1KHMxLCBzMik7XG4gICAgICAgIHMwID0gczE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlRmFpbHVyZU1vZCgpIHtcbiAgICB2YXIgczAsIHMxLCBzMiwgczM7XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMTAyKSB7XG4gICAgICBzMSA9IHBlZyRjMTY7XG4gICAgICBwZWckY3VyclBvcysrO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTcpOyB9XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA2Mikge1xuICAgICAgICBzMiA9IHBlZyRjOTtcbiAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMyID0gcGVnJEZBSUxFRDtcbiAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzEwKTsgfVxuICAgICAgfVxuICAgICAgaWYgKHMyID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gNjApIHtcbiAgICAgICAgICBzMiA9IHBlZyRjMTE7XG4gICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMiA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzEyKTsgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzMiA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gNjEpIHtcbiAgICAgICAgICAgIHMyID0gcGVnJGMxMztcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHMyID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxNCk7IH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzMiA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMiA9IG51bGw7XG4gICAgICB9XG4gICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczMgPSBwZWckcGFyc2VSb2xsRXhwcigpO1xuICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICBzMSA9IHBlZyRjMTgoczIsIHMzKTtcbiAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlQ3JpdGljYWxTdWNjZXNzTW9kKCkge1xuICAgIHZhciBzMCwgczEsIHMyLCBzMztcblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMikgPT09IHBlZyRjMTkpIHtcbiAgICAgIHMxID0gcGVnJGMxOTtcbiAgICAgIHBlZyRjdXJyUG9zICs9IDI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMyMCk7IH1cbiAgICB9XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDYyKSB7XG4gICAgICAgIHMyID0gcGVnJGM5O1xuICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczIgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTApOyB9XG4gICAgICB9XG4gICAgICBpZiAoczIgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA2MCkge1xuICAgICAgICAgIHMyID0gcGVnJGMxMTtcbiAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHMyID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTIpOyB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHMyID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA2MSkge1xuICAgICAgICAgICAgczIgPSBwZWckYzEzO1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgczIgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzE0KTsgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHMyID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMyID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMyA9IHBlZyRwYXJzZVJvbGxFeHByKCk7XG4gICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgIHMxID0gcGVnJGMyMShzMiwgczMpO1xuICAgICAgICAgIHMwID0gczE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VDcml0aWNhbEZhaWx1cmVNb2QoKSB7XG4gICAgdmFyIHMwLCBzMSwgczIsIHMzO1xuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCAyKSA9PT0gcGVnJGMyMikge1xuICAgICAgczEgPSBwZWckYzIyO1xuICAgICAgcGVnJGN1cnJQb3MgKz0gMjtcbiAgICB9IGVsc2Uge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzIzKTsgfVxuICAgIH1cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gNjIpIHtcbiAgICAgICAgczIgPSBwZWckYzk7XG4gICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzMiA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxMCk7IH1cbiAgICAgIH1cbiAgICAgIGlmIChzMiA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDYwKSB7XG4gICAgICAgICAgczIgPSBwZWckYzExO1xuICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgczIgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxMik7IH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoczIgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDYxKSB7XG4gICAgICAgICAgICBzMiA9IHBlZyRjMTM7XG4gICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzMiA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTQpOyB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoczIgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczIgPSBudWxsO1xuICAgICAgfVxuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMzID0gcGVnJHBhcnNlUm9sbEV4cHIoKTtcbiAgICAgICAgaWYgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgczEgPSBwZWckYzI0KHMyLCBzMyk7XG4gICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZU1hdGNoVGFyZ2V0KCkge1xuICAgIHZhciBzMCwgczEsIHMyO1xuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDYyKSB7XG4gICAgICBzMSA9IHBlZyRjOTtcbiAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxMCk7IH1cbiAgICB9XG4gICAgaWYgKHMxID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDYwKSB7XG4gICAgICAgIHMxID0gcGVnJGMxMTtcbiAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzEyKTsgfVxuICAgICAgfVxuICAgICAgaWYgKHMxID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gNjEpIHtcbiAgICAgICAgICBzMSA9IHBlZyRjMTM7XG4gICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzE0KTsgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgczIgPSBwZWckcGFyc2VSb2xsRXhwcigpO1xuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICBzMSA9IHBlZyRjMjUoczEsIHMyKTtcbiAgICAgICAgczAgPSBzMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VNYXRjaE1vZCgpIHtcbiAgICB2YXIgczAsIHMxLCBzMiwgczMsIHM0O1xuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDEwOSkge1xuICAgICAgczEgPSBwZWckYzI2O1xuICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICB9IGVsc2Uge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzI3KTsgfVxuICAgIH1cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMTE2KSB7XG4gICAgICAgIHMyID0gcGVnJGMyODtcbiAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMyID0gcGVnJEZBSUxFRDtcbiAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzI5KTsgfVxuICAgICAgfVxuICAgICAgaWYgKHMyID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMyID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMyA9IHBlZyRwYXJzZUludGVnZXIoKTtcbiAgICAgICAgaWYgKHMzID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczMgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHM0ID0gcGVnJHBhcnNlTWF0Y2hUYXJnZXQoKTtcbiAgICAgICAgICBpZiAoczQgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHM0ID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgIHMxID0gcGVnJGMzMChzMiwgczMsIHM0KTtcbiAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlS2VlcE1vZCgpIHtcbiAgICB2YXIgczAsIHMxLCBzMiwgczM7XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMTA3KSB7XG4gICAgICBzMSA9IHBlZyRjMzE7XG4gICAgICBwZWckY3VyclBvcysrO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMzIpOyB9XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSAxMDgpIHtcbiAgICAgICAgczIgPSBwZWckYzMzO1xuICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczIgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMzQpOyB9XG4gICAgICB9XG4gICAgICBpZiAoczIgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSAxMDQpIHtcbiAgICAgICAgICBzMiA9IHBlZyRjMzU7XG4gICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMiA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzM2KTsgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoczIgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczIgPSBudWxsO1xuICAgICAgfVxuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMzID0gcGVnJHBhcnNlUm9sbEV4cHIoKTtcbiAgICAgICAgaWYgKHMzID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczMgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgIHMxID0gcGVnJGMzNyhzMiwgczMpO1xuICAgICAgICAgIHMwID0gczE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VEcm9wTW9kKCkge1xuICAgIHZhciBzMCwgczEsIHMyLCBzMztcblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSAxMDApIHtcbiAgICAgIHMxID0gcGVnJGMzODtcbiAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMzOSk7IH1cbiAgICB9XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDEwOCkge1xuICAgICAgICBzMiA9IHBlZyRjMzM7XG4gICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzMiA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMzNCk7IH1cbiAgICAgIH1cbiAgICAgIGlmIChzMiA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDEwNCkge1xuICAgICAgICAgIHMyID0gcGVnJGMzNTtcbiAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHMyID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMzYpOyB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzMiA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMiA9IG51bGw7XG4gICAgICB9XG4gICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczMgPSBwZWckcGFyc2VSb2xsRXhwcigpO1xuICAgICAgICBpZiAoczMgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzMyA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgczEgPSBwZWckYzQwKHMyLCBzMyk7XG4gICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZUdyb3VwZWRSb2xsKCkge1xuICAgIHZhciBzMCwgczEsIHMyLCBzMywgczQsIHM1LCBzNiwgczcsIHM4LCBzOTtcblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSAxMjMpIHtcbiAgICAgIHMxID0gcGVnJGM0MTtcbiAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM0Mik7IH1cbiAgICB9XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMiA9IHBlZyRwYXJzZV8oKTtcbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMyA9IHBlZyRwYXJzZVJvbGxFeHByZXNzaW9uKCk7XG4gICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHM0ID0gW107XG4gICAgICAgICAgczUgPSBwZWckY3VyclBvcztcbiAgICAgICAgICBzNiA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgICBpZiAoczYgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gNDQpIHtcbiAgICAgICAgICAgICAgczcgPSBwZWckYzQzO1xuICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgczcgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjNDQpOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoczcgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgczggPSBwZWckcGFyc2VfKCk7XG4gICAgICAgICAgICAgIGlmIChzOCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHM5ID0gcGVnJHBhcnNlUm9sbEV4cHJlc3Npb24oKTtcbiAgICAgICAgICAgICAgICBpZiAoczkgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgIHM2ID0gW3M2LCBzNywgczgsIHM5XTtcbiAgICAgICAgICAgICAgICAgIHM1ID0gczY7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczU7XG4gICAgICAgICAgICAgICAgICBzNSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczU7XG4gICAgICAgICAgICAgICAgczUgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHM1O1xuICAgICAgICAgICAgICBzNSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczU7XG4gICAgICAgICAgICBzNSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIHdoaWxlIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczQucHVzaChzNSk7XG4gICAgICAgICAgICBzNSA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgICAgczYgPSBwZWckcGFyc2VfKCk7XG4gICAgICAgICAgICBpZiAoczYgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA0NCkge1xuICAgICAgICAgICAgICAgIHM3ID0gcGVnJGM0MztcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHM3ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjNDQpOyB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHM3ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgczggPSBwZWckcGFyc2VfKCk7XG4gICAgICAgICAgICAgICAgaWYgKHM4ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICBzOSA9IHBlZyRwYXJzZVJvbGxFeHByZXNzaW9uKCk7XG4gICAgICAgICAgICAgICAgICBpZiAoczkgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgczYgPSBbczYsIHM3LCBzOCwgczldO1xuICAgICAgICAgICAgICAgICAgICBzNSA9IHM2O1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzNTtcbiAgICAgICAgICAgICAgICAgICAgczUgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHM1O1xuICAgICAgICAgICAgICAgICAgczUgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHM1O1xuICAgICAgICAgICAgICAgIHM1ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzNTtcbiAgICAgICAgICAgICAgczUgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHM1ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMTI1KSB7XG4gICAgICAgICAgICAgICAgczYgPSBwZWckYzQ1O1xuICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgczYgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM0Nik7IH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoczYgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICBzMSA9IHBlZyRjNDcoczMsIHM0KTtcbiAgICAgICAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlUm9sbEV4cHJlc3Npb24oKSB7XG4gICAgdmFyIHMwLCBzMSwgczIsIHMzLCBzNCwgczUsIHM2LCBzNztcblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgczEgPSBwZWckcGFyc2VSb2xsT3JFeHByZXNzaW9uKCk7XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMiA9IFtdO1xuICAgICAgczMgPSBwZWckY3VyclBvcztcbiAgICAgIHM0ID0gcGVnJHBhcnNlXygpO1xuICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gNDMpIHtcbiAgICAgICAgICBzNSA9IHBlZyRjNDg7XG4gICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzNSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzQ5KTsgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHM2ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczcgPSBwZWckcGFyc2VSb2xsT3JFeHByZXNzaW9uKCk7XG4gICAgICAgICAgICBpZiAoczcgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgczQgPSBbczQsIHM1LCBzNiwgczddO1xuICAgICAgICAgICAgICBzMyA9IHM0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgICAgd2hpbGUgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMyLnB1c2goczMpO1xuICAgICAgICBzMyA9IHBlZyRjdXJyUG9zO1xuICAgICAgICBzNCA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA0Mykge1xuICAgICAgICAgICAgczUgPSBwZWckYzQ4O1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgczUgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzQ5KTsgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoczUgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHM2ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICAgICAgaWYgKHM2ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHM3ID0gcGVnJHBhcnNlUm9sbE9yRXhwcmVzc2lvbigpO1xuICAgICAgICAgICAgICBpZiAoczcgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBzNCA9IFtzNCwgczUsIHM2LCBzN107XG4gICAgICAgICAgICAgICAgczMgPSBzNDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICBzMSA9IHBlZyRjNTAoczEsIHMyKTtcbiAgICAgICAgczAgPSBzMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VSb2xsT3JFeHByZXNzaW9uKCkge1xuICAgIHZhciBzMDtcblxuICAgIHMwID0gcGVnJHBhcnNlRnVsbFJvbGwoKTtcbiAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMwID0gcGVnJHBhcnNlRXhwcmVzc2lvbigpO1xuICAgIH1cblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZUZ1bGxSb2xsKCkge1xuICAgIHZhciBzMCwgczEsIHMyLCBzMztcblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgczEgPSBwZWckcGFyc2VUYXJnZXRlZFJvbGwoKTtcbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMyID0gcGVnJHBhcnNlXygpO1xuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMzID0gcGVnJHBhcnNlTGFiZWwoKTtcbiAgICAgICAgaWYgKHMzID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczMgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgIHMxID0gcGVnJGM3KHMxLCBzMyk7XG4gICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZVRhcmdldGVkUm9sbCgpIHtcbiAgICB2YXIgczAsIHMxLCBzMiwgczMsIHM0O1xuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBzMSA9IHBlZyRwYXJzZVJvbGxlZE1vZFJvbGwoKTtcbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMyID0gW107XG4gICAgICBzMyA9IHBlZyRwYXJzZURyb3BNb2QoKTtcbiAgICAgIGlmIChzMyA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMyA9IHBlZyRwYXJzZUtlZXBNb2QoKTtcbiAgICAgICAgaWYgKHMzID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczMgPSBwZWckcGFyc2VTdWNjZXNzTW9kKCk7XG4gICAgICAgICAgaWYgKHMzID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzMyA9IHBlZyRwYXJzZUZhaWx1cmVNb2QoKTtcbiAgICAgICAgICAgIGlmIChzMyA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzMyA9IHBlZyRwYXJzZUNyaXRpY2FsRmFpbHVyZU1vZCgpO1xuICAgICAgICAgICAgICBpZiAoczMgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBzMyA9IHBlZyRwYXJzZUNyaXRpY2FsU3VjY2Vzc01vZCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB3aGlsZSAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczIucHVzaChzMyk7XG4gICAgICAgIHMzID0gcGVnJHBhcnNlRHJvcE1vZCgpO1xuICAgICAgICBpZiAoczMgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzMyA9IHBlZyRwYXJzZUtlZXBNb2QoKTtcbiAgICAgICAgICBpZiAoczMgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHMzID0gcGVnJHBhcnNlU3VjY2Vzc01vZCgpO1xuICAgICAgICAgICAgaWYgKHMzID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHMzID0gcGVnJHBhcnNlRmFpbHVyZU1vZCgpO1xuICAgICAgICAgICAgICBpZiAoczMgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBzMyA9IHBlZyRwYXJzZUNyaXRpY2FsRmFpbHVyZU1vZCgpO1xuICAgICAgICAgICAgICAgIGlmIChzMyA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgczMgPSBwZWckcGFyc2VDcml0aWNhbFN1Y2Nlc3NNb2QoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMyA9IHBlZyRwYXJzZU1hdGNoTW9kKCk7XG4gICAgICAgIGlmIChzMyA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHMzID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzNCA9IHBlZyRwYXJzZVNvcnRBc2NNb2QoKTtcbiAgICAgICAgICBpZiAoczQgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHM0ID0gcGVnJHBhcnNlU29ydERlc2NNb2QoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHM0ID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzNCA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICBzMSA9IHBlZyRjNTEoczEsIHMyLCBzMywgczQpO1xuICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VTb3J0QXNjTW9kKCkge1xuICAgIHZhciBzMCwgczE7XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDIpID09PSBwZWckYzUyKSB7XG4gICAgICBzMSA9IHBlZyRjNTI7XG4gICAgICBwZWckY3VyclBvcyArPSAyO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjNTMpOyB9XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICBzMSA9IHBlZyRjNTQoKTtcbiAgICB9XG4gICAgczAgPSBzMTtcblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZVNvcnREZXNjTW9kKCkge1xuICAgIHZhciBzMCwgczE7XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDIpID09PSBwZWckYzU1KSB7XG4gICAgICBzMSA9IHBlZyRjNTU7XG4gICAgICBwZWckY3VyclBvcyArPSAyO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjNTYpOyB9XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICBzMSA9IHBlZyRjNTcoKTtcbiAgICB9XG4gICAgczAgPSBzMTtcblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZVJvbGxlZE1vZFJvbGwoKSB7XG4gICAgdmFyIHMwLCBzMSwgczIsIHMzO1xuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBzMSA9IHBlZyRwYXJzZURpY2VSb2xsKCk7XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMiA9IFtdO1xuICAgICAgczMgPSBwZWckcGFyc2VDb21wb3VuZFJvbGwoKTtcbiAgICAgIGlmIChzMyA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMyA9IHBlZyRwYXJzZVBlbmV0cmF0ZVJvbGwoKTtcbiAgICAgICAgaWYgKHMzID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczMgPSBwZWckcGFyc2VFeHBsb2RlUm9sbCgpO1xuICAgICAgICAgIGlmIChzMyA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczMgPSBwZWckcGFyc2VSZVJvbGxPbmNlTW9kKCk7XG4gICAgICAgICAgICBpZiAoczMgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgczMgPSBwZWckcGFyc2VSZVJvbGxNb2QoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHdoaWxlIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMi5wdXNoKHMzKTtcbiAgICAgICAgczMgPSBwZWckcGFyc2VDb21wb3VuZFJvbGwoKTtcbiAgICAgICAgaWYgKHMzID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczMgPSBwZWckcGFyc2VQZW5ldHJhdGVSb2xsKCk7XG4gICAgICAgICAgaWYgKHMzID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzMyA9IHBlZyRwYXJzZUV4cGxvZGVSb2xsKCk7XG4gICAgICAgICAgICBpZiAoczMgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgczMgPSBwZWckcGFyc2VSZVJvbGxPbmNlTW9kKCk7XG4gICAgICAgICAgICAgIGlmIChzMyA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHMzID0gcGVnJHBhcnNlUmVSb2xsTW9kKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgczEgPSBwZWckYzU4KHMxLCBzMik7XG4gICAgICAgIHMwID0gczE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlRXhwbG9kZVJvbGwoKSB7XG4gICAgdmFyIHMwLCBzMSwgczI7XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMzMpIHtcbiAgICAgIHMxID0gcGVnJGM1OTtcbiAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM2MCk7IH1cbiAgICB9XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMiA9IHBlZyRwYXJzZVRhcmdldE1vZCgpO1xuICAgICAgaWYgKHMyID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMyID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgczEgPSBwZWckYzYxKHMyKTtcbiAgICAgICAgczAgPSBzMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VDb21wb3VuZFJvbGwoKSB7XG4gICAgdmFyIHMwLCBzMSwgczI7XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDIpID09PSBwZWckYzYyKSB7XG4gICAgICBzMSA9IHBlZyRjNjI7XG4gICAgICBwZWckY3VyclBvcyArPSAyO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjNjMpOyB9XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgczIgPSBwZWckcGFyc2VUYXJnZXRNb2QoKTtcbiAgICAgIGlmIChzMiA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMiA9IG51bGw7XG4gICAgICB9XG4gICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgIHMxID0gcGVnJGM2NChzMik7XG4gICAgICAgIHMwID0gczE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlUGVuZXRyYXRlUm9sbCgpIHtcbiAgICB2YXIgczAsIHMxLCBzMjtcblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMikgPT09IHBlZyRjNjUpIHtcbiAgICAgIHMxID0gcGVnJGM2NTtcbiAgICAgIHBlZyRjdXJyUG9zICs9IDI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM2Nik7IH1cbiAgICB9XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMiA9IHBlZyRwYXJzZVRhcmdldE1vZCgpO1xuICAgICAgaWYgKHMyID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMyID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgczEgPSBwZWckYzY3KHMyKTtcbiAgICAgICAgczAgPSBzMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VSZVJvbGxNb2QoKSB7XG4gICAgdmFyIHMwLCBzMSwgczI7XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMTE0KSB7XG4gICAgICBzMSA9IHBlZyRjNjg7XG4gICAgICBwZWckY3VyclBvcysrO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjNjkpOyB9XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgczIgPSBwZWckcGFyc2VUYXJnZXRNb2QoKTtcbiAgICAgIGlmIChzMiA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMiA9IG51bGw7XG4gICAgICB9XG4gICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgIHMxID0gcGVnJGM3MChzMik7XG4gICAgICAgIHMwID0gczE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlUmVSb2xsT25jZU1vZCgpIHtcbiAgICB2YXIgczAsIHMxLCBzMjtcblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMikgPT09IHBlZyRjNzEpIHtcbiAgICAgIHMxID0gcGVnJGM3MTtcbiAgICAgIHBlZyRjdXJyUG9zICs9IDI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM3Mik7IH1cbiAgICB9XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMiA9IHBlZyRwYXJzZVRhcmdldE1vZCgpO1xuICAgICAgaWYgKHMyID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMyID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgczEgPSBwZWckYzczKHMyKTtcbiAgICAgICAgczAgPSBzMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VUYXJnZXRNb2QoKSB7XG4gICAgdmFyIHMwLCBzMSwgczI7XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gNjIpIHtcbiAgICAgIHMxID0gcGVnJGM5O1xuICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICB9IGVsc2Uge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzEwKTsgfVxuICAgIH1cbiAgICBpZiAoczEgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gNjApIHtcbiAgICAgICAgczEgPSBwZWckYzExO1xuICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTIpOyB9XG4gICAgICB9XG4gICAgICBpZiAoczEgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA2MSkge1xuICAgICAgICAgIHMxID0gcGVnJGMxMztcbiAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTQpOyB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHMxID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMSA9IG51bGw7XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgczIgPSBwZWckcGFyc2VSb2xsRXhwcigpO1xuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICBzMSA9IHBlZyRjNzQoczEsIHMyKTtcbiAgICAgICAgczAgPSBzMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VEaWNlUm9sbCgpIHtcbiAgICB2YXIgczAsIHMxLCBzMiwgczM7XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIHMxID0gcGVnJHBhcnNlUm9sbEV4cHIoKTtcbiAgICBpZiAoczEgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMxID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDEwMCkge1xuICAgICAgICBzMiA9IHBlZyRjMzg7XG4gICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzMiA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMzOSk7IH1cbiAgICAgIH1cbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMyA9IHBlZyRwYXJzZUZhdGVFeHByKCk7XG4gICAgICAgIGlmIChzMyA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHMzID0gcGVnJHBhcnNlUGVyY2VudEV4cHIoKTtcbiAgICAgICAgICBpZiAoczMgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHMzID0gcGVnJHBhcnNlUm9sbEV4cHIoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgczEgPSBwZWckYzc1KHMxLCBzMyk7XG4gICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZUZhdGVFeHByKCkge1xuICAgIHZhciBzMCwgczE7XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gNzApIHtcbiAgICAgIHMxID0gcGVnJGM3NjtcbiAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM3Nyk7IH1cbiAgICB9XG4gICAgaWYgKHMxID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDEwMikge1xuICAgICAgICBzMSA9IHBlZyRjMTY7XG4gICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxNyk7IH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgIHMxID0gcGVnJGM3OCgpO1xuICAgIH1cbiAgICBzMCA9IHMxO1xuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlUGVyY2VudEV4cHIoKSB7XG4gICAgdmFyIHMwLCBzMTtcblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSAzNykge1xuICAgICAgczEgPSBwZWckYzc5O1xuICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICB9IGVsc2Uge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzgwKTsgfVxuICAgIH1cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgczEgPSBwZWckYzgxKCk7XG4gICAgfVxuICAgIHMwID0gczE7XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VSb2xsRXhwcigpIHtcbiAgICB2YXIgczA7XG5cbiAgICBzMCA9IHBlZyRwYXJzZUJyYWNrZXRFeHByZXNzaW9uKCk7XG4gICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMCA9IHBlZyRwYXJzZUludGVnZXIoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VFeHByZXNzaW9uKCkge1xuICAgIHZhciBzMDtcblxuICAgIHMwID0gcGVnJHBhcnNlSW5saW5lRXhwcmVzc2lvbigpO1xuICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgczAgPSBwZWckcGFyc2VBZGRTdWJFeHByZXNzaW9uKCk7XG4gICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczAgPSBwZWckcGFyc2VCcmFja2V0RXhwcmVzc2lvbigpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZUJyYWNrZXRFeHByZXNzaW9uKCkge1xuICAgIHZhciBzMCwgczEsIHMyLCBzMywgczQsIHM1O1xuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDQwKSB7XG4gICAgICBzMSA9IHBlZyRjODI7XG4gICAgICBwZWckY3VyclBvcysrO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjODMpOyB9XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgczIgPSBwZWckcGFyc2VBZGRTdWJFeHByZXNzaW9uKCk7XG4gICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA0MSkge1xuICAgICAgICAgIHMzID0gcGVnJGM4NDtcbiAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjODUpOyB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczQgPSBwZWckcGFyc2VfKCk7XG4gICAgICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzNSA9IHBlZyRwYXJzZUxhYmVsKCk7XG4gICAgICAgICAgICBpZiAoczUgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgczUgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgICBzMSA9IHBlZyRjODYoczIsIHM1KTtcbiAgICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VBZGRTdWJFeHByZXNzaW9uKCkge1xuICAgIHZhciBzMCwgczEsIHMyLCBzMywgczQsIHM1LCBzNiwgczc7XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIHMxID0gcGVnJHBhcnNlTXVsdERpdkV4cHJlc3Npb24oKTtcbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMyID0gW107XG4gICAgICBzMyA9IHBlZyRjdXJyUG9zO1xuICAgICAgczQgPSBwZWckcGFyc2VfKCk7XG4gICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA0Mykge1xuICAgICAgICAgIHM1ID0gcGVnJGM0ODtcbiAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHM1ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjNDkpOyB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHM1ID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA0NSkge1xuICAgICAgICAgICAgczUgPSBwZWckYzg3O1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgczUgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzg4KTsgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoczUgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzNiA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgICBpZiAoczYgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHM3ID0gcGVnJHBhcnNlTXVsdERpdkV4cHJlc3Npb24oKTtcbiAgICAgICAgICAgIGlmIChzNyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzNCA9IFtzNCwgczUsIHM2LCBzN107XG4gICAgICAgICAgICAgIHMzID0gczQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgICB3aGlsZSAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczIucHVzaChzMyk7XG4gICAgICAgIHMzID0gcGVnJGN1cnJQb3M7XG4gICAgICAgIHM0ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDQzKSB7XG4gICAgICAgICAgICBzNSA9IHBlZyRjNDg7XG4gICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzNSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjNDkpOyB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzNSA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA0NSkge1xuICAgICAgICAgICAgICBzNSA9IHBlZyRjODc7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzNSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM4OCk7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzNiA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzNyA9IHBlZyRwYXJzZU11bHREaXZFeHByZXNzaW9uKCk7XG4gICAgICAgICAgICAgIGlmIChzNyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHM0ID0gW3M0LCBzNSwgczYsIHM3XTtcbiAgICAgICAgICAgICAgICBzMyA9IHM0O1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgIHMxID0gcGVnJGM4OShzMSwgczIpO1xuICAgICAgICBzMCA9IHMxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZU11bHREaXZFeHByZXNzaW9uKCkge1xuICAgIHZhciBzMCwgczEsIHMyLCBzMywgczQsIHM1LCBzNiwgczc7XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIHMxID0gcGVnJHBhcnNlTW9kRXhwb0V4cHJlc3Npb24oKTtcbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMyID0gW107XG4gICAgICBzMyA9IHBlZyRjdXJyUG9zO1xuICAgICAgczQgPSBwZWckcGFyc2VfKCk7XG4gICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA0Mikge1xuICAgICAgICAgIHM1ID0gcGVnJGM5MDtcbiAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHM1ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjOTEpOyB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHM1ID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA0Nykge1xuICAgICAgICAgICAgczUgPSBwZWckYzkyO1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgczUgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzkzKTsgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoczUgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzNiA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgICBpZiAoczYgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHM3ID0gcGVnJHBhcnNlTW9kRXhwb0V4cHJlc3Npb24oKTtcbiAgICAgICAgICAgIGlmIChzNyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzNCA9IFtzNCwgczUsIHM2LCBzN107XG4gICAgICAgICAgICAgIHMzID0gczQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgICB3aGlsZSAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczIucHVzaChzMyk7XG4gICAgICAgIHMzID0gcGVnJGN1cnJQb3M7XG4gICAgICAgIHM0ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDQyKSB7XG4gICAgICAgICAgICBzNSA9IHBlZyRjOTA7XG4gICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzNSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjOTEpOyB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzNSA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA0Nykge1xuICAgICAgICAgICAgICBzNSA9IHBlZyRjOTI7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzNSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM5Myk7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzNiA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzNyA9IHBlZyRwYXJzZU1vZEV4cG9FeHByZXNzaW9uKCk7XG4gICAgICAgICAgICAgIGlmIChzNyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHM0ID0gW3M0LCBzNSwgczYsIHM3XTtcbiAgICAgICAgICAgICAgICBzMyA9IHM0O1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgIHMxID0gcGVnJGM4OShzMSwgczIpO1xuICAgICAgICBzMCA9IHMxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZU1vZEV4cG9FeHByZXNzaW9uKCkge1xuICAgIHZhciBzMCwgczEsIHMyLCBzMywgczQsIHM1LCBzNiwgczc7XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIHMxID0gcGVnJHBhcnNlRnVuY3Rpb25PclJvbGwoKTtcbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMyID0gW107XG4gICAgICBzMyA9IHBlZyRjdXJyUG9zO1xuICAgICAgczQgPSBwZWckcGFyc2VfKCk7XG4gICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMikgPT09IHBlZyRjOTQpIHtcbiAgICAgICAgICBzNSA9IHBlZyRjOTQ7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgKz0gMjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzNSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzk1KTsgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzNSA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMzcpIHtcbiAgICAgICAgICAgIHM1ID0gcGVnJGM3OTtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHM1ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM4MCk7IH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczYgPSBwZWckcGFyc2VfKCk7XG4gICAgICAgICAgaWYgKHM2ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzNyA9IHBlZyRwYXJzZUZ1bmN0aW9uT3JSb2xsKCk7XG4gICAgICAgICAgICBpZiAoczcgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgczQgPSBbczQsIHM1LCBzNiwgczddO1xuICAgICAgICAgICAgICBzMyA9IHM0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgICAgd2hpbGUgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMyLnB1c2goczMpO1xuICAgICAgICBzMyA9IHBlZyRjdXJyUG9zO1xuICAgICAgICBzNCA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMikgPT09IHBlZyRjOTQpIHtcbiAgICAgICAgICAgIHM1ID0gcGVnJGM5NDtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zICs9IDI7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHM1ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM5NSk7IH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHM1ID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDM3KSB7XG4gICAgICAgICAgICAgIHM1ID0gcGVnJGM3OTtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHM1ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzgwKTsgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoczUgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHM2ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICAgICAgaWYgKHM2ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHM3ID0gcGVnJHBhcnNlRnVuY3Rpb25PclJvbGwoKTtcbiAgICAgICAgICAgICAgaWYgKHM3ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgczQgPSBbczQsIHM1LCBzNiwgczddO1xuICAgICAgICAgICAgICAgIHMzID0gczQ7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgczEgPSBwZWckYzg5KHMxLCBzMik7XG4gICAgICAgIHMwID0gczE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlTWF0aEZ1bmN0aW9uKCkge1xuICAgIHZhciBzMDtcblxuICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDUpID09PSBwZWckYzk2KSB7XG4gICAgICBzMCA9IHBlZyRjOTY7XG4gICAgICBwZWckY3VyclBvcyArPSA1O1xuICAgIH0gZWxzZSB7XG4gICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjOTcpOyB9XG4gICAgfVxuICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNCkgPT09IHBlZyRjOTgpIHtcbiAgICAgICAgczAgPSBwZWckYzk4O1xuICAgICAgICBwZWckY3VyclBvcyArPSA0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjOTkpOyB9XG4gICAgICB9XG4gICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNSkgPT09IHBlZyRjMTAwKSB7XG4gICAgICAgICAgczAgPSBwZWckYzEwMDtcbiAgICAgICAgICBwZWckY3VyclBvcyArPSA1O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTAxKTsgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDMpID09PSBwZWckYzEwMikge1xuICAgICAgICAgICAgczAgPSBwZWckYzEwMjtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zICs9IDM7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxMDMpOyB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlTWF0aEZuRXhwcmVzc2lvbigpIHtcbiAgICB2YXIgczAsIHMxLCBzMiwgczMsIHM0LCBzNSwgczYsIHM3O1xuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBzMSA9IHBlZyRwYXJzZU1hdGhGdW5jdGlvbigpO1xuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgczIgPSBwZWckcGFyc2VfKCk7XG4gICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA0MCkge1xuICAgICAgICAgIHMzID0gcGVnJGM4MjtcbiAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjODMpOyB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczQgPSBwZWckcGFyc2VfKCk7XG4gICAgICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzNSA9IHBlZyRwYXJzZUFkZFN1YkV4cHJlc3Npb24oKTtcbiAgICAgICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzNiA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgICAgICAgaWYgKHM2ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA0MSkge1xuICAgICAgICAgICAgICAgICAgczcgPSBwZWckYzg0O1xuICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgczcgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzg1KTsgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoczcgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgczEgPSBwZWckYzEwNChzMSwgczUpO1xuICAgICAgICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VGdW5jdGlvbk9yUm9sbCgpIHtcbiAgICB2YXIgczA7XG5cbiAgICBzMCA9IHBlZyRwYXJzZU1hdGhGbkV4cHJlc3Npb24oKTtcbiAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMwID0gcGVnJHBhcnNlQW55Um9sbCgpO1xuICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMwID0gcGVnJHBhcnNlQnJhY2tldEV4cHJlc3Npb24oKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VJbnRlZ2VyKCkge1xuICAgIHZhciBzMCwgczEsIHMyLCBzMztcblxuICAgIHBlZyRzaWxlbnRGYWlscysrO1xuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA0NSkge1xuICAgICAgczEgPSBwZWckYzg3O1xuICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICB9IGVsc2Uge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzg4KTsgfVxuICAgIH1cbiAgICBpZiAoczEgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMxID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMiA9IFtdO1xuICAgICAgaWYgKHBlZyRjMTA2LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgczMgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTA3KTsgfVxuICAgICAgfVxuICAgICAgaWYgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHdoaWxlIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHMyLnB1c2goczMpO1xuICAgICAgICAgIGlmIChwZWckYzEwNi50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgICAgICBzMyA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTA3KTsgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczIgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICBzMSA9IHBlZyRjMTA4KCk7XG4gICAgICAgIHMwID0gczE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuICAgIHBlZyRzaWxlbnRGYWlscy0tO1xuICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzEwNSk7IH1cbiAgICB9XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VMYWJlbCgpIHtcbiAgICB2YXIgczAsIHMxLCBzMiwgczM7XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gOTEpIHtcbiAgICAgIHMxID0gcGVnJGMxMDk7XG4gICAgICBwZWckY3VyclBvcysrO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTEwKTsgfVxuICAgIH1cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMyID0gW107XG4gICAgICBpZiAocGVnJGMxMTEudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICBzMyA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxMTIpOyB9XG4gICAgICB9XG4gICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgd2hpbGUgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczIucHVzaChzMyk7XG4gICAgICAgICAgaWYgKHBlZyRjMTExLnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICAgIHMzID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxMTIpOyB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzMiA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA5Mykge1xuICAgICAgICAgIHMzID0gcGVnJGMxMTM7XG4gICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzExNCk7IH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICBzMSA9IHBlZyRjMTE1KHMyKTtcbiAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlXygpIHtcbiAgICB2YXIgczAsIHMxO1xuXG4gICAgcGVnJHNpbGVudEZhaWxzKys7XG4gICAgczAgPSBbXTtcbiAgICBpZiAocGVnJGMxMTcudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgczEgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICB9IGVsc2Uge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzExOCk7IH1cbiAgICB9XG4gICAgd2hpbGUgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMC5wdXNoKHMxKTtcbiAgICAgIGlmIChwZWckYzExNy50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgIHMxID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzExOCk7IH1cbiAgICAgIH1cbiAgICB9XG4gICAgcGVnJHNpbGVudEZhaWxzLS07XG4gICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTE2KTsgfVxuICAgIH1cblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG5cbiAgXHRjb25zdCBkZWZhdWx0VGFyZ2V0ID0ge1xuICBcdFx0dHlwZTogXCJ0YXJnZXRcIixcbiAgXHRcdG1vZDogXCI9XCIsXG4gIFx0XHR2YWx1ZToge1xuICBcdFx0XHR0eXBlOiBcIm51bWJlclwiLFxuICBcdFx0XHR2YWx1ZTogMSxcbiAgXHRcdH0sXG4gIFx0fVxuXG4gIFx0Y29uc3QgZGVmYXVsdEV4cHJlc3Npb24gPSB7XG4gIFx0XHR0eXBlOiBcIm51bWJlclwiLFxuICBcdFx0dmFsdWU6IDEsXG4gIFx0fVxuXG5cbiAgcGVnJHJlc3VsdCA9IHBlZyRzdGFydFJ1bGVGdW5jdGlvbigpO1xuXG4gIGlmIChwZWckcmVzdWx0ICE9PSBwZWckRkFJTEVEICYmIHBlZyRjdXJyUG9zID09PSBpbnB1dC5sZW5ndGgpIHtcbiAgICByZXR1cm4gcGVnJHJlc3VsdDtcbiAgfSBlbHNlIHtcbiAgICBpZiAocGVnJHJlc3VsdCAhPT0gcGVnJEZBSUxFRCAmJiBwZWckY3VyclBvcyA8IGlucHV0Lmxlbmd0aCkge1xuICAgICAgcGVnJGZhaWwocGVnJGVuZEV4cGVjdGF0aW9uKCkpO1xuICAgIH1cblxuICAgIHRocm93IHBlZyRidWlsZFN0cnVjdHVyZWRFcnJvcihcbiAgICAgIHBlZyRtYXhGYWlsRXhwZWN0ZWQsXG4gICAgICBwZWckbWF4RmFpbFBvcyA8IGlucHV0Lmxlbmd0aCA/IGlucHV0LmNoYXJBdChwZWckbWF4RmFpbFBvcykgOiBudWxsLFxuICAgICAgcGVnJG1heEZhaWxQb3MgPCBpbnB1dC5sZW5ndGhcbiAgICAgICAgPyBwZWckY29tcHV0ZUxvY2F0aW9uKHBlZyRtYXhGYWlsUG9zLCBwZWckbWF4RmFpbFBvcyArIDEpXG4gICAgICAgIDogcGVnJGNvbXB1dGVMb2NhdGlvbihwZWckbWF4RmFpbFBvcywgcGVnJG1heEZhaWxQb3MpXG4gICAgKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgU3ludGF4RXJyb3I6IHBlZyRTeW50YXhFcnJvcixcbiAgcGFyc2U6ICAgICAgIHBlZyRwYXJzZVxufTtcbiIsImltcG9ydCB7IFJvbGxCYXNlLCBEaWNlRXhwcmVzc2lvblJvbGwsIEdyb3VwUm9sbCwgRGljZVJvbGxSZXN1bHQsIEV4cHJlc3Npb25Sb2xsLCBEaWVSb2xsLCBGYXRlRGllUm9sbCwgTWF0aEZ1bmN0aW9uUm9sbCB9IGZyb20gXCIuL3JvbGxUeXBlc1wiO1xuXG4vKiogQW4gZXhhbXBsZSByZW5kZXJlciBjbGFzcyB0aGF0IHJlbmRlcnMgYSByb2xsIHRvIGEgc3RyaW5nIGluIGEgbWFya2Rvd24gZm9ybWF0LCBjb21wYXRpYmxlIHdpdGggRGlzY29yZCAqL1xuZXhwb3J0IGNsYXNzIERpc2NvcmRSb2xsUmVuZGVyZXIge1xuXHQvKipcblx0ICogUmVuZGVycyBhIGRpY2Ugcm9sbCBpbiBhIGZvcm1hdCBjb21wYXRpYmxlIHdpdGggRGlzY29yZFxuXHQgKiBAcGFyYW0gcm9sbCBhIHtAbGluayBSb2xsQmFzZX0gb2JqZWN0IHRoYXQgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IHRoZSB7QGxpbmsgRGljZVJvbGxlcn1cblx0ICogQHJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSByb2xsIHRoYXQgY2FuIGJlIHVzZWQgb24gRGlzY29yZFxuXHQgKi9cblx0cHVibGljIHJlbmRlcihyb2xsOiBSb2xsQmFzZSkge1xuXHRcdHJldHVybiB0aGlzLmRvUmVuZGVyKHJvbGwsIHRydWUpO1xuXHR9XG5cblx0cHJpdmF0ZSBkb1JlbmRlcihyb2xsOiBSb2xsQmFzZSwgcm9vdCA9IGZhbHNlKSB7XG5cdFx0bGV0IHJlbmRlciA9IFwiXCI7XG5cblx0XHRjb25zdCB0eXBlID0gcm9sbC50eXBlO1xuXG5cdFx0c3dpdGNoICh0eXBlKSB7XG5cdFx0XHRjYXNlIFwiZGljZWV4cHJlc3Npb25yb2xsXCI6XG5cdFx0XHRcdHJlbmRlciA9IHRoaXMucmVuZGVyR3JvdXBFeHByKHJvbGwgYXMgRGljZUV4cHJlc3Npb25Sb2xsKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiZ3JvdXByb2xsXCI6XG5cdFx0XHRcdHJlbmRlciA9IHRoaXMucmVuZGVyR3JvdXAocm9sbCBhcyBHcm91cFJvbGwpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJkaWVcIjpcblx0XHRcdFx0cmVuZGVyID0gdGhpcy5yZW5kZXJEaWUocm9sbCBhcyBEaWNlUm9sbFJlc3VsdCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcImV4cHJlc3Npb25yb2xsXCI6XG5cdFx0XHRcdHJlbmRlciA9IHRoaXMucmVuZGVyRXhwcmVzc2lvbihyb2xsIGFzIEV4cHJlc3Npb25Sb2xsKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwibWF0aGZ1bmN0aW9uXCI6XG5cdFx0XHRcdHJlbmRlciA9IHRoaXMucmVuZGVyRnVuY3Rpb24ocm9sbCBhcyBNYXRoRnVuY3Rpb25Sb2xsKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwicm9sbFwiOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5yZW5kZXJSb2xsKHJvbGwgYXMgRGllUm9sbCk7XG5cdFx0XHRjYXNlIFwiZmF0ZXJvbGxcIjpcblx0XHRcdFx0cmV0dXJuIHRoaXMucmVuZGVyRmF0ZVJvbGwocm9sbCBhcyBGYXRlRGllUm9sbCk7XG5cdFx0XHRjYXNlIFwibnVtYmVyXCI6XG5cdFx0XHRcdGNvbnN0IGxhYmVsID0gcm9sbC5sYWJlbFxuXHRcdFx0XHRcdD8gYCAoJHtyb2xsLmxhYmVsfSlgXG5cdFx0XHRcdFx0OiBcIlwiO1xuXHRcdFx0XHRyZXR1cm4gYCR7cm9sbC52YWx1ZX0ke2xhYmVsfWA7XG5cdFx0XHRjYXNlIFwiZmF0ZVwiOlxuXHRcdFx0XHRyZXR1cm4gYEZgO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiVW5hYmxlIHRvIHJlbmRlclwiKTtcblx0XHR9XG5cblx0XHRpZiAoIXJvbGwudmFsaWQpIHtcblx0XHRcdHJlbmRlciA9IFwifn5cIiArIHJlbmRlci5yZXBsYWNlKC9+fi9nLCBcIlwiKSArIFwifn5cIjtcblx0XHR9XG5cblx0XHRpZiAocm9vdCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuc3RyaXBCcmFja2V0cyhyZW5kZXIpO1xuXHRcdH1cblxuXHRcdHJldHVybiByb2xsLmxhYmVsID8gYCgke3JvbGwubGFiZWx9OiAke3JlbmRlcn0pYCA6IHJlbmRlcjtcblx0fVxuXG5cdHByaXZhdGUgcmVuZGVyR3JvdXAoZ3JvdXA6IEdyb3VwUm9sbCkge1xuXHRcdGNvbnN0IHJlcGxpZXM6IHN0cmluZ1tdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGRpZSBvZiBncm91cC5kaWNlKSB7XG5cdFx0XHRyZXBsaWVzLnB1c2godGhpcy5kb1JlbmRlcihkaWUpKTtcblx0XHR9XG5cblx0XHRpZiAocmVwbGllcy5sZW5ndGggPiAxKSB7XG5cdFx0XHRyZXR1cm4gYHsgJHtyZXBsaWVzLmpvaW4oXCIgKyBcIil9IH0gPSAke2dyb3VwLnZhbHVlfWA7XG5cdFx0fVxuXG5cdFx0Y29uc3QgcmVwbHkgPSB0aGlzLnN0cmlwQnJhY2tldHMocmVwbGllc1swXSk7XG5cdFx0cmV0dXJuIGB7ICR7cmVwbHl9IH0gPSAke2dyb3VwLnZhbHVlfWA7XG5cdH1cblxuXHRwcml2YXRlIHJlbmRlckdyb3VwRXhwcihncm91cDogRGljZUV4cHJlc3Npb25Sb2xsKSB7XG5cdFx0Y29uc3QgcmVwbGllczogc3RyaW5nW10gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgZGllIG9mIGdyb3VwLmRpY2UpIHtcblx0XHRcdHJlcGxpZXMucHVzaCh0aGlzLmRvUmVuZGVyKGRpZSkpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXBsaWVzLmxlbmd0aCA+IDEgPyBgKCR7cmVwbGllcy5qb2luKFwiICsgXCIpfSA9ICR7Z3JvdXAudmFsdWV9KWAgOiByZXBsaWVzWzBdO1xuXHR9XG5cblx0cHJpdmF0ZSByZW5kZXJEaWUoZGllOiBEaWNlUm9sbFJlc3VsdCkge1xuXHRcdGNvbnN0IHJlcGxpZXM6IHN0cmluZ1tdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IHJvbGwgb2YgZGllLnJvbGxzKSB7XG5cdFx0XHRyZXBsaWVzLnB1c2godGhpcy5kb1JlbmRlcihyb2xsKSk7XG5cdFx0fVxuXG5cdFx0bGV0IHJlcGx5ID0gYCR7cmVwbGllcy5qb2luKFwiLCBcIil9YDtcblxuXHRcdGlmICghW1wibnVtYmVyXCIsIFwiZmF0ZVwiXS5pbmNsdWRlcyhkaWUuZGllLnR5cGUpIHx8IGRpZS5jb3VudC50eXBlICE9PSBcIm51bWJlclwiKSB7XG5cdFx0XHRyZXBseSArPSBgWypSb2xsaW5nOiAke3RoaXMuZG9SZW5kZXIoZGllLmNvdW50KX1kJHt0aGlzLmRvUmVuZGVyKGRpZS5kaWUpfSpdYDtcblx0XHR9XG5cblx0XHRjb25zdCBtYXRjaGVzID0gZGllLm1hdGNoZWRcblx0XHRcdD8gYCBNYXRjaCR7ZGllLnZhbHVlID09PSAxID8gXCJcIiA6IFwiZXNcIn1gXG5cdFx0XHQ6IFwiXCI7XG5cdFx0cmVwbHkgKz0gYCA9ICR7ZGllLnZhbHVlfSR7bWF0Y2hlc31gO1xuXHRcdHJldHVybiBgKCR7cmVwbHl9KWA7XG5cdH1cblxuXHRwcml2YXRlIHJlbmRlckV4cHJlc3Npb24oZXhwcjogRXhwcmVzc2lvblJvbGwpIHtcblx0XHRpZiAoZXhwci5kaWNlLmxlbmd0aCA+IDEpIHtcblx0XHRcdGNvbnN0IGV4cHJlc3Npb25zOiBzdHJpbmdbXSA9IFtdO1xuXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGV4cHIuZGljZS5sZW5ndGggLSAxOyBpKyspIHtcblx0XHRcdFx0ZXhwcmVzc2lvbnMucHVzaCh0aGlzLmRvUmVuZGVyKGV4cHIuZGljZVtpXSkpO1xuXHRcdFx0XHRleHByZXNzaW9ucy5wdXNoKGV4cHIub3BzW2ldKTtcblx0XHRcdH1cblxuXHRcdFx0ZXhwcmVzc2lvbnMucHVzaCh0aGlzLmRvUmVuZGVyKGV4cHIuZGljZS5zbGljZSgtMSlbMF0pKTtcblx0XHRcdGV4cHJlc3Npb25zLnB1c2goXCI9XCIpO1xuXHRcdFx0ZXhwcmVzc2lvbnMucHVzaChleHByLnZhbHVlICsgXCJcIik7XG5cblx0XHRcdHJldHVybiBgKCR7ZXhwcmVzc2lvbnMuam9pbihcIiBcIil9KWA7XG5cdFx0fSBlbHNlIGlmIChleHByLmRpY2VbMF0udHlwZSA9PT0gXCJudW1iZXJcIikge1xuXHRcdFx0cmV0dXJuIGV4cHIudmFsdWUgKyBcIlwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5kb1JlbmRlcihleHByLmRpY2VbMF0pO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgcmVuZGVyRnVuY3Rpb24ocm9sbDogTWF0aEZ1bmN0aW9uUm9sbCkge1xuXHRcdGNvbnN0IHJlbmRlciA9IHRoaXMuZG9SZW5kZXIocm9sbC5leHByKTtcblx0XHRyZXR1cm4gYCgke3JvbGwub3B9JHt0aGlzLmFkZEJyYWNrZXRzKHJlbmRlcil9ID0gJHtyb2xsLnZhbHVlfSlgO1xuXHR9XG5cblx0cHJpdmF0ZSBhZGRCcmFja2V0cyhyZW5kZXI6IHN0cmluZykge1xuXHRcdGlmICghcmVuZGVyLnN0YXJ0c1dpdGgoXCIoXCIpKSB7XG5cdFx0XHRyZW5kZXIgPSBgKCR7cmVuZGVyfWA7XG5cdFx0fVxuXHRcdGlmICghcmVuZGVyLmVuZHNXaXRoKFwiKVwiKSkge1xuXHRcdFx0cmVuZGVyID0gYCR7cmVuZGVyfSlgO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVuZGVyO1xuXHR9XG5cblx0cHJpdmF0ZSBzdHJpcEJyYWNrZXRzKHJlbmRlcjogc3RyaW5nKSB7XG5cdFx0aWYgKHJlbmRlci5zdGFydHNXaXRoKFwiKFwiKSkge1xuXHRcdFx0cmVuZGVyID0gcmVuZGVyLnN1YnN0cmluZygxKTtcblx0XHR9XG5cdFx0aWYgKHJlbmRlci5lbmRzV2l0aChcIilcIikpIHtcblx0XHRcdHJlbmRlciA9IHJlbmRlci5zdWJzdHJpbmcoMCwgcmVuZGVyLmxlbmd0aCAtIDEpO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVuZGVyO1xuXHR9XG5cblx0cHJpdmF0ZSByZW5kZXJSb2xsKHJvbGw6IERpZVJvbGwpIHtcblx0XHRsZXQgcm9sbERpc3BsYXkgPSBgJHtyb2xsLnJvbGx9YDtcblx0XHRpZiAoIXJvbGwudmFsaWQpIHtcblx0XHRcdHJvbGxEaXNwbGF5ID0gYH5+JHtyb2xsLnJvbGx9fn5gO1xuXHRcdH0gZWxzZSBpZiAocm9sbC5zdWNjZXNzICYmIHJvbGwudmFsdWUgPT09IDEpIHtcblx0XHRcdHJvbGxEaXNwbGF5ID0gYCoqJHtyb2xsLnJvbGx9KipgO1xuXHRcdH0gZWxzZSBpZiAocm9sbC5zdWNjZXNzICYmIHJvbGwudmFsdWUgPT09IC0xKSB7XG5cdFx0XHRyb2xsRGlzcGxheSA9IGAqJHtyb2xsLnJvbGx9KmA7XG5cdFx0fSBlbHNlIGlmICghcm9sbC5zdWNjZXNzICYmIHJvbGwuY3JpdGljYWwgPT09IFwic3VjY2Vzc1wiKSB7XG5cdFx0XHRyb2xsRGlzcGxheSA9IGAqKiR7cm9sbC5yb2xsfSoqYDtcblx0XHR9IGVsc2UgaWYgKCFyb2xsLnN1Y2Nlc3MgJiYgcm9sbC5jcml0aWNhbCA9PT0gXCJmYWlsdXJlXCIpIHtcblx0XHRcdHJvbGxEaXNwbGF5ID0gYCoke3JvbGwucm9sbH0qYDtcblx0XHR9XG5cblx0XHRpZiAocm9sbC5tYXRjaGVkKSB7XG5cdFx0XHRyb2xsRGlzcGxheSA9IGBfXyR7cm9sbERpc3BsYXl9X19gO1xuXHRcdH1cblxuXHRcdHJldHVybiByb2xsRGlzcGxheTtcblx0fVxuXG5cdHByaXZhdGUgcmVuZGVyRmF0ZVJvbGwocm9sbDogRmF0ZURpZVJvbGwpIHtcblx0XHRjb25zdCByb2xsVmFsdWU6IHN0cmluZyA9IHJvbGwucm9sbCA9PT0gMFxuXHRcdFx0PyBcIjBcIlxuXHRcdFx0OiByb2xsLnJvbGwgPiAwXG5cdFx0XHRcdD8gXCIrXCJcblx0XHRcdFx0OiBcIi1cIjtcblxuXHRcdGxldCByb2xsRGlzcGxheSA9IGAke3JvbGwucm9sbH1gO1xuXHRcdGlmICghcm9sbC52YWxpZCkge1xuXHRcdFx0cm9sbERpc3BsYXkgPSBgfn4ke3JvbGxWYWx1ZX1+fmA7XG5cdFx0fSBlbHNlIGlmIChyb2xsLnN1Y2Nlc3MgJiYgcm9sbC52YWx1ZSA9PT0gMSkge1xuXHRcdFx0cm9sbERpc3BsYXkgPSBgKioke3JvbGxWYWx1ZX0qKmA7XG5cdFx0fSBlbHNlIGlmIChyb2xsLnN1Y2Nlc3MgJiYgcm9sbC52YWx1ZSA9PT0gLTEpIHtcblx0XHRcdHJvbGxEaXNwbGF5ID0gYCoke3JvbGxWYWx1ZX0qYDtcblx0XHR9XG5cblx0XHRpZiAocm9sbC5tYXRjaGVkKSB7XG5cdFx0XHRyb2xsRGlzcGxheSA9IGBfXyR7cm9sbERpc3BsYXl9X19gO1xuXHRcdH1cblxuXHRcdHJldHVybiByb2xsRGlzcGxheTtcblx0fVxufSJdLCJzb3VyY2VSb290IjoiIn0=