You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

3 lines
1.4 MiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

"use strict";var t=require("obsidian");function e(t,e,n,r){return new(n||(n=Promise))((function(i,a){function o(t){try{u(r.next(t))}catch(t){a(t)}}function l(t){try{u(r.throw(t))}catch(t){a(t)}}function u(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(o,l)}u((r=r.apply(t,e||[])).next())}))}function n(t,e){return null==t||null==e?NaN:t<e?-1:t>e?1:t>=e?0:NaN}function r(t,e){return null==t||null==e?NaN:e<t?-1:e>t?1:e>=t?0:NaN}function i(t){let e,i,o;function l(t,n,r=0,a=t.length){if(r<a){if(0!==e(n,n))return a;do{const e=r+a>>>1;i(t[e],n)<0?r=e+1:a=e}while(r<a)}return r}return 2!==t.length?(e=n,i=(e,r)=>n(t(e),r),o=(e,n)=>t(e)-n):(e=t===n||t===r?t:a,i=t,o=t),{left:l,center:function(t,e,n=0,r=t.length){const i=l(t,e,n,r-1);return i>n&&o(t[i-1],e)>-o(t[i],e)?i-1:i},right:function(t,n,r=0,a=t.length){if(r<a){if(0!==e(n,n))return a;do{const e=r+a>>>1;i(t[e],n)<=0?r=e+1:a=e}while(r<a)}return r}}}function a(){return 0}"function"==typeof SuppressedError&&SuppressedError;const o=i(n).right;i((function(t){return null===t?NaN:+t})).center;class l extends Map{constructor(t,e=s){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:e}}),null!=t)for(const[e,n]of t)this.set(e,n)}get(t){return super.get(u(this,t))}has(t){return super.has(u(this,t))}set(t,e){return super.set(function({_intern:t,_key:e},n){const r=e(n);return t.has(r)?t.get(r):(t.set(r,n),n)}(this,t),e)}delete(t){return super.delete(function({_intern:t,_key:e},n){const r=e(n);t.has(r)&&(n=t.get(r),t.delete(r));return n}(this,t))}}function u({_intern:t,_key:e},n){const r=e(n);return t.has(r)?t.get(r):n}function s(t){return null!==t&&"object"==typeof t?t.valueOf():t}function f(t,e){return(null==t||!(t>=t))-(null==e||!(e>=e))||(t<e?-1:t>e?1:0)}const c=Math.sqrt(50),h=Math.sqrt(10),d=Math.sqrt(2);function g(t,e,n){const r=(e-t)/Math.max(0,n),i=Math.floor(Math.log10(r)),a=r/Math.pow(10,i),o=a>=c?10:a>=h?5:a>=d?2:1;let l,u,s;return i<0?(s=Math.pow(10,-i)/o,l=Math.round(t*s),u=Math.round(e*s),l/s<t&&++l,u/s>e&&--u,s=-s):(s=Math.pow(10,i)*o,l=Math.round(t/s),u=Math.round(e/s),l*s<t&&++l,u*s>e&&--u),u<l&&.5<=n&&n<2?g(t,e,2*n):[l,u,s]}function p(t,e,n){return g(t=+t,e=+e,n=+n)[2]}function y(t,e,n){n=+n;const r=(e=+e)<(t=+t),i=r?p(e,t,n):p(t,e,n);return(r?-1:1)*(i<0?1/-i:i)}function m(t,e){let n;if(void 0===e)for(const e of t)null!=e&&(n<e||void 0===n&&e>=e)&&(n=e);else{let r=-1;for(let i of t)null!=(i=e(i,++r,t))&&(n<i||void 0===n&&i>=i)&&(n=i)}return n}function v(t,e){let n;if(void 0===e)for(const e of t)null!=e&&(n>e||void 0===n&&e>=e)&&(n=e);else{let r=-1;for(let i of t)null!=(i=e(i,++r,t))&&(n>i||void 0===n&&i>=i)&&(n=i)}return n}function x(t,e,r=0,i=1/0,a){if(e=Math.floor(e),r=Math.floor(Math.max(0,r)),i=Math.floor(Math.min(t.length-1,i)),!(r<=e&&e<=i))return t;for(a=void 0===a?f:function(t=n){if(t===n)return f;if("function"!=typeof t)throw new TypeError("compare is not a function");return(e,n)=>{const r=t(e,n);return r||0===r?r:(0===t(n,n))-(0===t(e,e))}}(a);i>r;){if(i-r>600){const n=i-r+1,o=e-r+1,l=Math.log(n),u=.5*Math.exp(2*l/3),s=.5*Math.sqrt(l*u*(n-u)/n)*(o-n/2<0?-1:1);x(t,e,Math.max(r,Math.floor(e-o*u/n+s)),Math.min(i,Math.floor(e+(n-o)*u/n+s)),a)}const n=t[e];let o=r,l=i;for(A(t,r,e),a(t[i],n)>0&&A(t,r,i);o<l;){for(A(t,o,l),++o,--l;a(t[o],n)<0;)++o;for(;a(t[l],n)>0;)--l}0===a(t[r],n)?A(t,r,l):(++l,A(t,l,i)),l<=e&&(r=l+1),e<=l&&(i=l-1)}return t}function A(t,e,n){const r=t[e];t[e]=t[n],t[n]=r}function w(t,e){return function(t,e,n){if(t=Float64Array.from(function*(t,e){if(void 0===e)for(let e of t)null!=e&&(e=+e)>=e&&(yield e);else{let n=-1;for(let r of t)null!=(r=e(r,++n,t))&&(r=+r)>=r&&(yield r)}}(t,n)),(r=t.length)&&!isNaN(e=+e)){if(e<=0||r<2)return v(t);if(e>=1)return m(t);var r,i=(r-1)*e,a=Math.floor(i),o=m(x(t,a).subarray(0,a+1));return o+(v(t.subarray(a+1))-o)*(i-a)}}(t,.5,e)}function b(t,e,n){t=+t,e=+e,n=(i=arguments.length)<2?(e=t,t=0,1):i<3?1:+n;for(var r=-1,i=0|Math.max(0,Math.ceil((e-t)/n)),a=new Array(i);++r<i;)a[r]=t+r*n;return a}function D(t,e){let n=0;if(void 0===e)for(let e of t)(e=+e)&&(n+=e);else{let r=-1;for(let i of t)(i=+e(i,++r,t))&&(n+=i)}return n}function k(t){return t}var C=1,M=2,T=3,_=4,E=1e-6;function F(t){return"translate("+t+",0)"}function S(t){return"translate(0,"+t+")"}function B(t){return e=>+t(e)}function N(t,e){return e=Math.max(0,t.bandwidth()-2*e)/2,t.round()&&(e=Math.round(e)),n=>+t(n)+e}function I(){return!this.__axis}function L(t,e){var n=[],r=null,i=null,a=6,o=6,l=3,u="undefined"!=typeof window&&window.devicePixelRatio>1?0:.5,s=t===C||t===_?-1:1,f=t===_||t===M?"x":"y",c=t===C||t===T?F:S;function h(h){var d=null==r?e.ticks?e.ticks.apply(e,n):e.domain():r,g=null==i?e.tickFormat?e.tickFormat.apply(e,n):k:i,p=Math.max(a,0)+l,y=e.range(),m=+y[0]+u,v=+y[y.length-1]+u,x=(e.bandwidth?N:B)(e.copy(),u),A=h.selection?h.selection():h,w=A.selectAll(".domain").data([null]),b=A.selectAll(".tick").data(d,e).order(),D=b.exit(),F=b.enter().append("g").attr("class","tick"),S=b.select("line"),L=b.select("text");w=w.merge(w.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),b=b.merge(F),S=S.merge(F.append("line").attr("stroke","currentColor").attr(f+"2",s*a)),L=L.merge(F.append("text").attr("fill","currentColor").attr(f,s*p).attr("dy",t===C?"0em":t===T?"0.71em":"0.32em")),h!==A&&(w=w.transition(h),b=b.transition(h),S=S.transition(h),L=L.transition(h),D=D.transition(h).attr("opacity",E).attr("transform",(function(t){return isFinite(t=x(t))?c(t+u):this.getAttribute("transform")})),F.attr("opacity",E).attr("transform",(function(t){var e=this.parentNode.__axis;return c((e&&isFinite(e=e(t))?e:x(t))+u)}))),D.remove(),w.attr("d",t===_||t===M?o?"M"+s*o+","+m+"H"+u+"V"+v+"H"+s*o:"M"+u+","+m+"V"+v:o?"M"+m+","+s*o+"V"+u+"H"+v+"V"+s*o:"M"+m+","+u+"H"+v),b.attr("opacity",1).attr("transform",(function(t){return c(x(t)+u)})),S.attr(f+"2",s*a),L.attr(f,s*p).text(g),A.filter(I).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",t===M?"start":t===_?"end":"middle"),A.each((function(){this.__axis=x}))}return h.scale=function(t){return arguments.length?(e=t,h):e},h.ticks=function(){return n=Array.from(arguments),h},h.tickArguments=function(t){return arguments.length?(n=null==t?[]:Array.from(t),h):n.slice()},h.tickValues=function(t){return arguments.length?(r=null==t?null:Array.from(t),h):r&&r.slice()},h.tickFormat=function(t){return arguments.length?(i=t,h):i},h.tickSize=function(t){return arguments.length?(a=o=+t,h):a},h.tickSizeInner=function(t){return arguments.length?(a=+t,h):a},h.tickSizeOuter=function(t){return arguments.length?(o=+t,h):o},h.tickPadding=function(t){return arguments.length?(l=+t,h):l},h.offset=function(t){return arguments.length?(u=+t,h):u},h}function V(t){return L(T,t)}function O(t){return L(_,t)}var P={value:()=>{}};function $(){for(var t,e=0,n=arguments.length,r={};e<n;++e){if(!(t=arguments[e]+"")||t in r||/[\s.]/.test(t))throw new Error("illegal type: "+t);r[t]=[]}return new Y(r)}function Y(t){this._=t}function z(t,e){for(var n,r=0,i=t.length;r<i;++r)if((n=t[r]).name===e)return n.value}function R(t,e,n){for(var r=0,i=t.length;r<i;++r)if(t[r].name===e){t[r]=P,t=t.slice(0,r).concat(t.slice(r+1));break}return null!=n&&t.push({name:e,value:n}),t}Y.prototype=$.prototype={constructor:Y,on:function(t,e){var n,r,i=this._,a=(r=i,(t+"").trim().split(/^|\s+/).map((function(t){var e="",n=t.indexOf(".");if(n>=0&&(e=t.slice(n+1),t=t.slice(0,n)),t&&!r.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:e}}))),o=-1,l=a.length;if(!(arguments.length<2)){if(null!=e&&"function"!=typeof e)throw new Error("invalid callback: "+e);for(;++o<l;)if(n=(t=a[o]).type)i[n]=R(i[n],t.name,e);else if(null==e)for(n in i)i[n]=R(i[n],t.name,null);return this}for(;++o<l;)if((n=(t=a[o]).type)&&(n=z(i[n],t.name)))return n},copy:function(){var t={},e=this._;for(var n in e)t[n]=e[n].slice();return new Y(t)},call:function(t,e){if((n=arguments.length-2)>0)for(var n,r,i=new Array(n),a=0;a<n;++a)i[a]=arguments[a+2];if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(a=0,n=(r=this._[t]).length;a<n;++a)r[a].value.apply(e,i)},apply:function(t,e,n){if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(var r=this._[t],i=0,a=r.length;i<a;++i)r[i].value.apply(e,n)}};var U="http://www.w3.org/1999/xhtml",H={svg:"http://www.w3.org/2000/svg",xhtml:U,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};function X(t){var e=t+="",n=e.indexOf(":");return n>=0&&"xmlns"!==(e=t.slice(0,n))&&(t=t.slice(n+1)),H.hasOwnProperty(e)?{space:H[e],local:t}:t}function W(t){return function(){var e=this.ownerDocument,n=this.namespaceURI;return n===U&&e.documentElement.namespaceURI===U?e.createElement(t):e.createElementNS(n,t)}}function j(t){return function(){return this.ownerDocument.createElementNS(t.space,t.local)}}function q(t){var e=X(t);return(e.local?j:W)(e)}function G(){}function Q(t){return null==t?G:function(){return this.querySelector(t)}}function Z(){return[]}function K(t){return null==t?Z:function(){return this.querySelectorAll(t)}}function J(t){return function(){return function(t){return null==t?[]:Array.isArray(t)?t:Array.from(t)}(t.apply(this,arguments))}}function tt(t){return function(){return this.matches(t)}}function et(t){return function(e){return e.matches(t)}}var nt=Array.prototype.find;function rt(){return this.firstElementChild}var it=Array.prototype.filter;function at(){return Array.from(this.children)}function ot(t){return new Array(t.length)}function lt(t,e){this.ownerDocument=t.ownerDocument,this.namespaceURI=t.namespaceURI,this._next=null,this._parent=t,this.__data__=e}function ut(t,e,n,r,i,a){for(var o,l=0,u=e.length,s=a.length;l<s;++l)(o=e[l])?(o.__data__=a[l],r[l]=o):n[l]=new lt(t,a[l]);for(;l<u;++l)(o=e[l])&&(i[l]=o)}function st(t,e,n,r,i,a,o){var l,u,s,f=new Map,c=e.length,h=a.length,d=new Array(c);for(l=0;l<c;++l)(u=e[l])&&(d[l]=s=o.call(u,u.__data__,l,e)+"",f.has(s)?i[l]=u:f.set(s,u));for(l=0;l<h;++l)s=o.call(t,a[l],l,a)+"",(u=f.get(s))?(r[l]=u,u.__data__=a[l],f.delete(s)):n[l]=new lt(t,a[l]);for(l=0;l<c;++l)(u=e[l])&&f.get(d[l])===u&&(i[l]=u)}function ft(t){return t.__data__}function ct(t){return"object"==typeof t&&"length"in t?t:Array.from(t)}function ht(t,e){return t<e?-1:t>e?1:t>=e?0:NaN}function dt(t){return function(){this.removeAttribute(t)}}function gt(t){return function(){this.removeAttributeNS(t.space,t.local)}}function pt(t,e){return function(){this.setAttribute(t,e)}}function yt(t,e){return function(){this.setAttributeNS(t.space,t.local,e)}}function mt(t,e){return function(){var n=e.apply(this,arguments);null==n?this.removeAttribute(t):this.setAttribute(t,n)}}function vt(t,e){return function(){var n=e.apply(this,arguments);null==n?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,n)}}function xt(t){return t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView}function At(t){return function(){this.style.removeProperty(t)}}function wt(t,e,n){return function(){this.style.setProperty(t,e,n)}}function bt(t,e,n){return function(){var r=e.apply(this,arguments);null==r?this.style.removeProperty(t):this.style.setProperty(t,r,n)}}function Dt(t,e){return t.style.getPropertyValue(e)||xt(t).getComputedStyle(t,null).getPropertyValue(e)}function kt(t){return function(){delete this[t]}}function Ct(t,e){return function(){this[t]=e}}function Mt(t,e){return function(){var n=e.apply(this,arguments);null==n?delete this[t]:this[t]=n}}function Tt(t){return t.trim().split(/^|\s+/)}function _t(t){return t.classList||new Et(t)}function Et(t){this._node=t,this._names=Tt(t.getAttribute("class")||"")}function Ft(t,e){for(var n=_t(t),r=-1,i=e.length;++r<i;)n.add(e[r])}function St(t,e){for(var n=_t(t),r=-1,i=e.length;++r<i;)n.remove(e[r])}function Bt(t){return function(){Ft(this,t)}}function Nt(t){return function(){St(this,t)}}function It(t,e){return function(){(e.apply(this,arguments)?Ft:St)(this,t)}}function Lt(){this.textContent=""}function Vt(t){return function(){this.textContent=t}}function Ot(t){return function(){var e=t.apply(this,arguments);this.textContent=null==e?"":e}}function Pt(){this.innerHTML=""}function $t(t){return function(){this.innerHTML=t}}function Yt(t){return function(){var e=t.apply(this,arguments);this.innerHTML=null==e?"":e}}function zt(){this.nextSibling&&this.parentNode.appendChild(this)}function Rt(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function Ut(){return null}function Ht(){var t=this.parentNode;t&&t.removeChild(this)}function Xt(){var t=this.cloneNode(!1),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function Wt(){var t=this.cloneNode(!0),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function jt(t){return function(){var e=this.__on;if(e){for(var n,r=0,i=-1,a=e.length;r<a;++r)n=e[r],t.type&&n.type!==t.type||n.name!==t.name?e[++i]=n:this.removeEventListener(n.type,n.listener,n.options);++i?e.length=i:delete this.__on}}}function qt(t,e,n){return function(){var r,i=this.__on,a=function(t){return function(e){t.call(this,e,this.__data__)}}(e);if(i)for(var o=0,l=i.length;o<l;++o)if((r=i[o]).type===t.type&&r.name===t.name)return this.removeEventListener(r.type,r.listener,r.options),this.addEventListener(r.type,r.listener=a,r.options=n),void(r.value=e);this.addEventListener(t.type,a,n),r={type:t.type,name:t.name,value:e,listener:a,options:n},i?i.push(r):this.__on=[r]}}function Gt(t,e,n){var r=xt(t),i=r.CustomEvent;"function"==typeof i?i=new i(e,n):(i=r.document.createEvent("Event"),n?(i.initEvent(e,n.bubbles,n.cancelable),i.detail=n.detail):i.initEvent(e,!1,!1)),t.dispatchEvent(i)}function Qt(t,e){return function(){return Gt(this,t,e)}}function Zt(t,e){return function(){return Gt(this,t,e.apply(this,arguments))}}lt.prototype={constructor:lt,appendChild:function(t){return this._parent.insertBefore(t,this._next)},insertBefore:function(t,e){return this._parent.insertBefore(t,e)},querySelector:function(t){return this._parent.querySelector(t)},querySelectorAll:function(t){return this._parent.querySelectorAll(t)}},Et.prototype={add:function(t){this._names.indexOf(t)<0&&(this._names.push(t),this._node.setAttribute("class",this._names.join(" ")))},remove:function(t){var e=this._names.indexOf(t);e>=0&&(this._names.splice(e,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(t){return this._names.indexOf(t)>=0}};var Kt=[null];function Jt(t,e){this._groups=t,this._parents=e}function te(){return new Jt([[document.documentElement]],Kt)}function ee(t){return"string"==typeof t?new Jt([[document.querySelector(t)]],[document.documentElement]):new Jt([[t]],Kt)}function ne(t,e,n){t.prototype=e.prototype=n,n.constructor=t}function re(t,e){var n=Object.create(t.prototype);for(var r in e)n[r]=e[r];return n}function ie(){}Jt.prototype=te.prototype={constructor:Jt,select:function(t){"function"!=typeof t&&(t=Q(t));for(var e=this._groups,n=e.length,r=new Array(n),i=0;i<n;++i)for(var a,o,l=e[i],u=l.length,s=r[i]=new Array(u),f=0;f<u;++f)(a=l[f])&&(o=t.call(a,a.__data__,f,l))&&("__data__"in a&&(o.__data__=a.__data__),s[f]=o);return new Jt(r,this._parents)},selectAll:function(t){t="function"==typeof t?J(t):K(t);for(var e=this._groups,n=e.length,r=[],i=[],a=0;a<n;++a)for(var o,l=e[a],u=l.length,s=0;s<u;++s)(o=l[s])&&(r.push(t.call(o,o.__data__,s,l)),i.push(o));return new Jt(r,i)},selectChild:function(t){return this.select(null==t?rt:function(t){return function(){return nt.call(this.children,t)}}("function"==typeof t?t:et(t)))},selectChildren:function(t){return this.selectAll(null==t?at:function(t){return function(){return it.call(this.children,t)}}("function"==typeof t?t:et(t)))},filter:function(t){"function"!=typeof t&&(t=tt(t));for(var e=this._groups,n=e.length,r=new Array(n),i=0;i<n;++i)for(var a,o=e[i],l=o.length,u=r[i]=[],s=0;s<l;++s)(a=o[s])&&t.call(a,a.__data__,s,o)&&u.push(a);return new Jt(r,this._parents)},data:function(t,e){if(!arguments.length)return Array.from(this,ft);var n=e?st:ut,r=this._parents,i=this._groups;"function"!=typeof t&&(t=function(t){return function(){return t}}(t));for(var a=i.length,o=new Array(a),l=new Array(a),u=new Array(a),s=0;s<a;++s){var f=r[s],c=i[s],h=c.length,d=ct(t.call(f,f&&f.__data__,s,r)),g=d.length,p=l[s]=new Array(g),y=o[s]=new Array(g);n(f,c,p,y,u[s]=new Array(h),d,e);for(var m,v,x=0,A=0;x<g;++x)if(m=p[x]){for(x>=A&&(A=x+1);!(v=y[A])&&++A<g;);m._next=v||null}}return(o=new Jt(o,r))._enter=l,o._exit=u,o},enter:function(){return new Jt(this._enter||this._groups.map(ot),this._parents)},exit:function(){return new Jt(this._exit||this._groups.map(ot),this._parents)},join:function(t,e,n){var r=this.enter(),i=this,a=this.exit();return"function"==typeof t?(r=t(r))&&(r=r.selection()):r=r.append(t+""),null!=e&&(i=e(i))&&(i=i.selection()),null==n?a.remove():n(a),r&&i?r.merge(i).order():i},merge:function(t){for(var e=t.selection?t.selection():t,n=this._groups,r=e._groups,i=n.length,a=r.length,o=Math.min(i,a),l=new Array(i),u=0;u<o;++u)for(var s,f=n[u],c=r[u],h=f.length,d=l[u]=new Array(h),g=0;g<h;++g)(s=f[g]||c[g])&&(d[g]=s);for(;u<i;++u)l[u]=n[u];return new Jt(l,this._parents)},selection:function(){return this},order:function(){for(var t=this._groups,e=-1,n=t.length;++e<n;)for(var r,i=t[e],a=i.length-1,o=i[a];--a>=0;)(r=i[a])&&(o&&4^r.compareDocumentPosition(o)&&o.parentNode.insertBefore(r,o),o=r);return this},sort:function(t){function e(e,n){return e&&n?t(e.__data__,n.__data__):!e-!n}t||(t=ht);for(var n=this._groups,r=n.length,i=new Array(r),a=0;a<r;++a){for(var o,l=n[a],u=l.length,s=i[a]=new Array(u),f=0;f<u;++f)(o=l[f])&&(s[f]=o);s.sort(e)}return new Jt(i,this._parents).order()},call:function(){var t=arguments[0];return arguments[0]=this,t.apply(null,arguments),this},nodes:function(){return Array.from(this)},node:function(){for(var t=this._groups,e=0,n=t.length;e<n;++e)for(var r=t[e],i=0,a=r.length;i<a;++i){var o=r[i];if(o)return o}return null},size:function(){let t=0;for(const e of this)++t;return t},empty:function(){return!this.node()},each:function(t){for(var e=this._groups,n=0,r=e.length;n<r;++n)for(var i,a=e[n],o=0,l=a.length;o<l;++o)(i=a[o])&&t.call(i,i.__data__,o,a);return this},attr:function(t,e){var n=X(t);if(arguments.length<2){var r=this.node();return n.local?r.getAttributeNS(n.space,n.local):r.getAttribute(n)}return this.each((null==e?n.local?gt:dt:"function"==typeof e?n.local?vt:mt:n.local?yt:pt)(n,e))},style:function(t,e,n){return arguments.length>1?this.each((null==e?At:"function"==typeof e?bt:wt)(t,e,null==n?"":n)):Dt(this.node(),t)},property:function(t,e){return arguments.length>1?this.each((null==e?kt:"function"==typeof e?Mt:Ct)(t,e)):this.node()[t]},classed:function(t,e){var n=Tt(t+"");if(arguments.length<2){for(var r=_t(this.node()),i=-1,a=n.length;++i<a;)if(!r.contains(n[i]))return!1;return!0}return this.each(("function"==typeof e?It:e?Bt:Nt)(n,e))},text:function(t){return arguments.length?this.each(null==t?Lt:("function"==typeof t?Ot:Vt)(t)):this.node().textContent},html:function(t){return arguments.length?this.each(null==t?Pt:("function"==typeof t?Yt:$t)(t)):this.node().innerHTML},raise:function(){return this.each(zt)},lower:function(){return this.each(Rt)},append:function(t){var e="function"==typeof t?t:q(t);return this.select((function(){return this.appendChild(e.apply(this,arguments))}))},insert:function(t,e){var n="function"==typeof t?t:q(t),r=null==e?Ut:"function"==typeof e?e:Q(e);return this.select((function(){return this.insertBefore(n.apply(this,arguments),r.apply(this,arguments)||null)}))},remove:function(){return this.each(Ht)},clone:function(t){return this.select(t?Wt:Xt)},datum:function(t){return arguments.length?this.property("__data__",t):this.node().__data__},on:function(t,e,n){var r,i,a=function(t){return t.trim().split(/^|\s+/).map((function(t){var e="",n=t.indexOf(".");return n>=0&&(e=t.slice(n+1),t=t.slice(0,n)),{type:t,name:e}}))}(t+""),o=a.length;if(!(arguments.length<2)){for(l=e?qt:jt,r=0;r<o;++r)this.each(l(a[r],e,n));return this}var l=this.node().__on;if(l)for(var u,s=0,f=l.length;s<f;++s)for(r=0,u=l[s];r<o;++r)if((i=a[r]).type===u.type&&i.name===u.name)return u.value},dispatch:function(t,e){return this.each(("function"==typeof e?Zt:Qt)(t,e))},[Symbol.iterator]:function*(){for(var t=this._groups,e=0,n=t.length;e<n;++e)for(var r,i=t[e],a=0,o=i.length;a<o;++a)(r=i[a])&&(yield r)}};var ae=.7,oe=1/ae,le="\\s*([+-]?\\d+)\\s*",ue="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",se="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",fe=/^#([0-9a-f]{3,8})$/,ce=new RegExp(`^rgb\\(${le},${le},${le}\\)$`),he=new RegExp(`^rgb\\(${se},${se},${se}\\)$`),de=new RegExp(`^rgba\\(${le},${le},${le},${ue}\\)$`),ge=new RegExp(`^rgba\\(${se},${se},${se},${ue}\\)$`),pe=new RegExp(`^hsl\\(${ue},${se},${se}\\)$`),ye=new RegExp(`^hsla\\(${ue},${se},${se},${ue}\\)$`),me={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};function ve(){return this.rgb().formatHex()}function xe(){return this.rgb().formatRgb()}function Ae(t){var e,n;return t=(t+"").trim().toLowerCase(),(e=fe.exec(t))?(n=e[1].length,e=parseInt(e[1],16),6===n?we(e):3===n?new Ce(e>>8&15|e>>4&240,e>>4&15|240&e,(15&e)<<4|15&e,1):8===n?be(e>>24&255,e>>16&255,e>>8&255,(255&e)/255):4===n?be(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|240&e,((15&e)<<4|15&e)/255):null):(e=ce.exec(t))?new Ce(e[1],e[2],e[3],1):(e=he.exec(t))?new Ce(255*e[1]/100,255*e[2]/100,255*e[3]/100,1):(e=de.exec(t))?be(e[1],e[2],e[3],e[4]):(e=ge.exec(t))?be(255*e[1]/100,255*e[2]/100,255*e[3]/100,e[4]):(e=pe.exec(t))?Se(e[1],e[2]/100,e[3]/100,1):(e=ye.exec(t))?Se(e[1],e[2]/100,e[3]/100,e[4]):me.hasOwnProperty(t)?we(me[t]):"transparent"===t?new Ce(NaN,NaN,NaN,0):null}function we(t){return new Ce(t>>16&255,t>>8&255,255&t,1)}function be(t,e,n,r){return r<=0&&(t=e=n=NaN),new Ce(t,e,n,r)}function De(t){return t instanceof ie||(t=Ae(t)),t?new Ce((t=t.rgb()).r,t.g,t.b,t.opacity):new Ce}function ke(t,e,n,r){return 1===arguments.length?De(t):new Ce(t,e,n,null==r?1:r)}function Ce(t,e,n,r){this.r=+t,this.g=+e,this.b=+n,this.opacity=+r}function Me(){return`#${Fe(this.r)}${Fe(this.g)}${Fe(this.b)}`}function Te(){const t=_e(this.opacity);return`${1===t?"rgb(":"rgba("}${Ee(this.r)}, ${Ee(this.g)}, ${Ee(this.b)}${1===t?")":`, ${t})`}`}function _e(t){return isNaN(t)?1:Math.max(0,Math.min(1,t))}function Ee(t){return Math.max(0,Math.min(255,Math.round(t)||0))}function Fe(t){return((t=Ee(t))<16?"0":"")+t.toString(16)}function Se(t,e,n,r){return r<=0?t=e=n=NaN:n<=0||n>=1?t=e=NaN:e<=0&&(t=NaN),new Ne(t,e,n,r)}function Be(t){if(t instanceof Ne)return new Ne(t.h,t.s,t.l,t.opacity);if(t instanceof ie||(t=Ae(t)),!t)return new Ne;if(t instanceof Ne)return t;var e=(t=t.rgb()).r/255,n=t.g/255,r=t.b/255,i=Math.min(e,n,r),a=Math.max(e,n,r),o=NaN,l=a-i,u=(a+i)/2;return l?(o=e===a?(n-r)/l+6*(n<r):n===a?(r-e)/l+2:(e-n)/l+4,l/=u<.5?a+i:2-a-i,o*=60):l=u>0&&u<1?0:o,new Ne(o,l,u,t.opacity)}function Ne(t,e,n,r){this.h=+t,this.s=+e,this.l=+n,this.opacity=+r}function Ie(t){return(t=(t||0)%360)<0?t+360:t}function Le(t){return Math.max(0,Math.min(1,t||0))}function Ve(t,e,n){return 255*(t<60?e+(n-e)*t/60:t<180?n:t<240?e+(n-e)*(240-t)/60:e)}ne(ie,Ae,{copy(t){return Object.assign(new this.constructor,this,t)},displayable(){return this.rgb().displayable()},hex:ve,formatHex:ve,formatHex8:function(){return this.rgb().formatHex8()},formatHsl:function(){return Be(this).formatHsl()},formatRgb:xe,toString:xe}),ne(Ce,ke,re(ie,{brighter(t){return t=null==t?oe:Math.pow(oe,t),new Ce(this.r*t,this.g*t,this.b*t,this.opacity)},darker(t){return t=null==t?ae:Math.pow(ae,t),new Ce(this.r*t,this.g*t,this.b*t,this.opacity)},rgb(){return this},clamp(){return new Ce(Ee(this.r),Ee(this.g),Ee(this.b),_e(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:Me,formatHex:Me,formatHex8:function(){return`#${Fe(this.r)}${Fe(this.g)}${Fe(this.b)}${Fe(255*(isNaN(this.opacity)?1:this.opacity))}`},formatRgb:Te,toString:Te})),ne(Ne,(function(t,e,n,r){return 1===arguments.length?Be(t):new Ne(t,e,n,null==r?1:r)}),re(ie,{brighter(t){return t=null==t?oe:Math.pow(oe,t),new Ne(this.h,this.s,this.l*t,this.opacity)},darker(t){return t=null==t?ae:Math.pow(ae,t),new Ne(this.h,this.s,this.l*t,this.opacity)},rgb(){var t=this.h%360+360*(this.h<0),e=isNaN(t)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*e,i=2*n-r;return new Ce(Ve(t>=240?t-240:t+120,i,r),Ve(t,i,r),Ve(t<120?t+240:t-120,i,r),this.opacity)},clamp(){return new Ne(Ie(this.h),Le(this.s),Le(this.l),_e(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const t=_e(this.opacity);return`${1===t?"hsl(":"hsla("}${Ie(this.h)}, ${100*Le(this.s)}%, ${100*Le(this.l)}%${1===t?")":`, ${t})`}`}}));const Oe=Math.PI/180,Pe=180/Math.PI,$e=.96422,Ye=1,ze=.82521,Re=4/29,Ue=6/29,He=3*Ue*Ue,Xe=Ue*Ue*Ue;function We(t){if(t instanceof qe)return new qe(t.l,t.a,t.b,t.opacity);if(t instanceof Je)return tn(t);t instanceof Ce||(t=De(t));var e,n,r=Ke(t.r),i=Ke(t.g),a=Ke(t.b),o=Ge((.2225045*r+.7168786*i+.0606169*a)/Ye);return r===i&&i===a?e=n=o:(e=Ge((.4360747*r+.3850649*i+.1430804*a)/$e),n=Ge((.0139322*r+.0971045*i+.7141733*a)/ze)),new qe(116*o-16,500*(e-o),200*(o-n),t.opacity)}function je(t,e,n,r){return 1===arguments.length?We(t):new qe(t,e,n,null==r?1:r)}function qe(t,e,n,r){this.l=+t,this.a=+e,this.b=+n,this.opacity=+r}function Ge(t){return t>Xe?Math.pow(t,1/3):t/He+Re}function Qe(t){return t>Ue?t*t*t:He*(t-Re)}function Ze(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function Ke(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function Je(t,e,n,r){this.h=+t,this.c=+e,this.l=+n,this.opacity=+r}function tn(t){if(isNaN(t.h))return new qe(t.l,0,0,t.opacity);var e=t.h*Oe;return new qe(t.l,Math.cos(e)*t.c,Math.sin(e)*t.c,t.opacity)}ne(qe,je,re(ie,{brighter(t){return new qe(this.l+18*(null==t?1:t),this.a,this.b,this.opacity)},darker(t){return new qe(this.l-18*(null==t?1:t),this.a,this.b,this.opacity)},rgb(){var t=(this.l+16)/116,e=isNaN(this.a)?t:t+this.a/500,n=isNaN(this.b)?t:t-this.b/200;return new Ce(Ze(3.1338561*(e=$e*Qe(e))-1.6168667*(t=Ye*Qe(t))-.4906146*(n=ze*Qe(n))),Ze(-.9787684*e+1.9161415*t+.033454*n),Ze(.0719453*e-.2289914*t+1.4052427*n),this.opacity)}})),ne(Je,(function(t,e,n,r){return 1===arguments.length?function(t){if(t instanceof Je)return new Je(t.h,t.c,t.l,t.opacity);if(t instanceof qe||(t=We(t)),0===t.a&&0===t.b)return new Je(NaN,0<t.l&&t.l<100?0:NaN,t.l,t.opacity);var e=Math.atan2(t.b,t.a)*Pe;return new Je(e<0?e+360:e,Math.sqrt(t.a*t.a+t.b*t.b),t.l,t.opacity)}(t):new Je(t,e,n,null==r?1:r)}),re(ie,{brighter(t){return new Je(this.h,this.c,this.l+18*(null==t?1:t),this.opacity)},darker(t){return new Je(this.h,this.c,this.l-18*(null==t?1:t),this.opacity)},rgb(){return tn(this).rgb()}}));var en=t=>()=>t;function nn(t){return 1==(t=+t)?rn:function(e,n){return n-e?function(t,e,n){return t=Math.pow(t,n),e=Math.pow(e,n)-t,n=1/n,function(r){return Math.pow(t+r*e,n)}}(e,n,t):en(isNaN(e)?n:e)}}function rn(t,e){var n=e-t;return n?function(t,e){return function(n){return t+n*e}}(t,n):en(isNaN(t)?e:t)}var an=function t(e){var n=nn(e);function r(t,e){var r=n((t=ke(t)).r,(e=ke(e)).r),i=n(t.g,e.g),a=n(t.b,e.b),o=rn(t.opacity,e.opacity);return function(e){return t.r=r(e),t.g=i(e),t.b=a(e),t.opacity=o(e),t+""}}return r.gamma=t,r}(1);var on,ln=(on=function(t){var e=t.length-1;return function(n){var r=n<=0?n=0:n>=1?(n=1,e-1):Math.floor(n*e),i=t[r],a=t[r+1],o=r>0?t[r-1]:2*i-a,l=r<e-1?t[r+2]:2*a-i;return function(t,e,n,r,i){var a=t*t,o=a*t;return((1-3*t+3*a-o)*e+(4-6*a+3*o)*n+(1+3*t+3*a-3*o)*r+o*i)/6}((n-r/e)*e,o,i,a,l)}},function(t){var e,n,r=t.length,i=new Array(r),a=new Array(r),o=new Array(r);for(e=0;e<r;++e)n=ke(t[e]),i[e]=n.r||0,a[e]=n.g||0,o[e]=n.b||0;return i=on(i),a=on(a),o=on(o),n.opacity=1,function(t){return n.r=i(t),n.g=a(t),n.b=o(t),n+""}});function un(t,e){e||(e=[]);var n,r=t?Math.min(e.length,t.length):0,i=e.slice();return function(a){for(n=0;n<r;++n)i[n]=t[n]*(1-a)+e[n]*a;return i}}function sn(t,e){var n,r=e?e.length:0,i=t?Math.min(r,t.length):0,a=new Array(i),o=new Array(r);for(n=0;n<i;++n)a[n]=yn(t[n],e[n]);for(;n<r;++n)o[n]=e[n];return function(t){for(n=0;n<i;++n)o[n]=a[n](t);return o}}function fn(t,e){var n=new Date;return t=+t,e=+e,function(r){return n.setTime(t*(1-r)+e*r),n}}function cn(t,e){return t=+t,e=+e,function(n){return t*(1-n)+e*n}}function hn(t,e){var n,r={},i={};for(n in null!==t&&"object"==typeof t||(t={}),null!==e&&"object"==typeof e||(e={}),e)n in t?r[n]=yn(t[n],e[n]):i[n]=e[n];return function(t){for(n in r)i[n]=r[n](t);return i}}var dn=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,gn=new RegExp(dn.source,"g");function pn(t,e){var n,r,i,a=dn.lastIndex=gn.lastIndex=0,o=-1,l=[],u=[];for(t+="",e+="";(n=dn.exec(t))&&(r=gn.exec(e));)(i=r.index)>a&&(i=e.slice(a,i),l[o]?l[o]+=i:l[++o]=i),(n=n[0])===(r=r[0])?l[o]?l[o]+=r:l[++o]=r:(l[++o]=null,u.push({i:o,x:cn(n,r)})),a=gn.lastIndex;return a<e.length&&(i=e.slice(a),l[o]?l[o]+=i:l[++o]=i),l.length<2?u[0]?function(t){return function(e){return t(e)+""}}(u[0].x):function(t){return function(){return t}}(e):(e=u.length,function(t){for(var n,r=0;r<e;++r)l[(n=u[r]).i]=n.x(t);return l.join("")})}function yn(t,e){var n,r=typeof e;return null==e||"boolean"===r?en(e):("number"===r?cn:"string"===r?(n=Ae(e))?(e=n,an):pn:e instanceof Ae?an:e instanceof Date?fn:function(t){return ArrayBuffer.isView(t)&&!(t instanceof DataView)}(e)?un:Array.isArray(e)?sn:"function"!=typeof e.valueOf&&"function"!=typeof e.toString||isNaN(e)?hn:cn)(t,e)}function mn(t,e){return t=+t,e=+e,function(n){return Math.round(t*(1-n)+e*n)}}var vn,xn=180/Math.PI,An={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};function wn(t,e,n,r,i,a){var o,l,u;return(o=Math.sqrt(t*t+e*e))&&(t/=o,e/=o),(u=t*n+e*r)&&(n-=t*u,r-=e*u),(l=Math.sqrt(n*n+r*r))&&(n/=l,r/=l,u/=l),t*r<e*n&&(t=-t,e=-e,u=-u,o=-o),{translateX:i,translateY:a,rotate:Math.atan2(e,t)*xn,skewX:Math.atan(u)*xn,scaleX:o,scaleY:l}}function bn(t,e,n,r){function i(t){return t.length?t.pop()+" ":""}return function(a,o){var l=[],u=[];return a=t(a),o=t(o),function(t,r,i,a,o,l){if(t!==i||r!==a){var u=o.push("translate(",null,e,null,n);l.push({i:u-4,x:cn(t,i)},{i:u-2,x:cn(r,a)})}else(i||a)&&o.push("translate("+i+e+a+n)}(a.translateX,a.translateY,o.translateX,o.translateY,l,u),function(t,e,n,a){t!==e?(t-e>180?e+=360:e-t>180&&(t+=360),a.push({i:n.push(i(n)+"rotate(",null,r)-2,x:cn(t,e)})):e&&n.push(i(n)+"rotate("+e+r)}(a.rotate,o.rotate,l,u),function(t,e,n,a){t!==e?a.push({i:n.push(i(n)+"skewX(",null,r)-2,x:cn(t,e)}):e&&n.push(i(n)+"skewX("+e+r)}(a.skewX,o.skewX,l,u),function(t,e,n,r,a,o){if(t!==n||e!==r){var l=a.push(i(a)+"scale(",null,",",null,")");o.push({i:l-4,x:cn(t,n)},{i:l-2,x:cn(e,r)})}else 1===n&&1===r||a.push(i(a)+"scale("+n+","+r+")")}(a.scaleX,a.scaleY,o.scaleX,o.scaleY,l,u),a=o=null,function(t){for(var e,n=-1,r=u.length;++n<r;)l[(e=u[n]).i]=e.x(t);return l.join("")}}}var Dn=bn((function(t){const e=new("function"==typeof DOMMatrix?DOMMatrix:WebKitCSSMatrix)(t+"");return e.isIdentity?An:wn(e.a,e.b,e.c,e.d,e.e,e.f)}),"px, ","px)","deg)"),kn=bn((function(t){return null==t?An:(vn||(vn=document.createElementNS("http://www.w3.org/2000/svg","g")),vn.setAttribute("transform",t),(t=vn.transform.baseVal.consolidate())?wn((t=t.matrix).a,t.b,t.c,t.d,t.e,t.f):An)}),", ",")",")");function Cn(t,e){var n=rn((t=je(t)).l,(e=je(e)).l),r=rn(t.a,e.a),i=rn(t.b,e.b),a=rn(t.opacity,e.opacity);return function(e){return t.l=n(e),t.a=r(e),t.b=i(e),t.opacity=a(e),t+""}}var Mn,Tn,_n=0,En=0,Fn=0,Sn=1e3,Bn=0,Nn=0,In=0,Ln="object"==typeof performance&&performance.now?performance:Date,Vn="object"==typeof window&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(t){setTimeout(t,17)};function On(){return Nn||(Vn(Pn),Nn=Ln.now()+In)}function Pn(){Nn=0}function $n(){this._call=this._time=this._next=null}function Yn(t,e,n){var r=new $n;return r.restart(t,e,n),r}function zn(){Nn=(Bn=Ln.now())+In,_n=En=0;try{!function(){On(),++_n;for(var t,e=Mn;e;)(t=Nn-e._time)>=0&&e._call.call(void 0,t),e=e._next;--_n}()}finally{_n=0,function(){var t,e,n=Mn,r=1/0;for(;n;)n._call?(r>n._time&&(r=n._time),t=n,n=n._next):(e=n._next,n._next=null,n=t?t._next=e:Mn=e);Tn=t,Un(r)}(),Nn=0}}function Rn(){var t=Ln.now(),e=t-Bn;e>Sn&&(In-=e,Bn=t)}function Un(t){_n||(En&&(En=clearTimeout(En)),t-Nn>24?(t<1/0&&(En=setTimeout(zn,t-Ln.now()-In)),Fn&&(Fn=clearInterval(Fn))):(Fn||(Bn=Ln.now(),Fn=setInterval(Rn,Sn)),_n=1,Vn(zn)))}function Hn(t,e,n){var r=new $n;return e=null==e?0:+e,r.restart((n=>{r.stop(),t(n+e)}),e,n),r}$n.prototype=Yn.prototype={constructor:$n,restart:function(t,e,n){if("function"!=typeof t)throw new TypeError("callback is not a function");n=(null==n?On():+n)+(null==e?0:+e),this._next||Tn===this||(Tn?Tn._next=this:Mn=this,Tn=this),this._call=t,this._time=n,Un()},stop:function(){this._call&&(this._call=null,this._time=1/0,Un())}};var Xn=$("start","end","cancel","interrupt"),Wn=[],jn=0,qn=1,Gn=2,Qn=3,Zn=4,Kn=5,Jn=6;function tr(t,e,n,r,i,a){var o=t.__transition;if(o){if(n in o)return}else t.__transition={};!function(t,e,n){var r,i=t.__transition;function a(t){n.state=qn,n.timer.restart(o,n.delay,n.time),n.delay<=t&&o(t-n.delay)}function o(a){var s,f,c,h;if(n.state!==qn)return u();for(s in i)if((h=i[s]).name===n.name){if(h.state===Qn)return Hn(o);h.state===Zn?(h.state=Jn,h.timer.stop(),h.on.call("interrupt",t,t.__data__,h.index,h.group),delete i[s]):+s<e&&(h.state=Jn,h.timer.stop(),h.on.call("cancel",t,t.__data__,h.index,h.group),delete i[s])}if(Hn((function(){n.state===Qn&&(n.state=Zn,n.timer.restart(l,n.delay,n.time),l(a))})),n.state=Gn,n.on.call("start",t,t.__data__,n.index,n.group),n.state===Gn){for(n.state=Qn,r=new Array(c=n.tween.length),s=0,f=-1;s<c;++s)(h=n.tween[s].value.call(t,t.__data__,n.index,n.group))&&(r[++f]=h);r.length=f+1}}function l(e){for(var i=e<n.duration?n.ease.call(null,e/n.duration):(n.timer.restart(u),n.state=Kn,1),a=-1,o=r.length;++a<o;)r[a].call(t,i);n.state===Kn&&(n.on.call("end",t,t.__data__,n.index,n.group),u())}function u(){for(var r in n.state=Jn,n.timer.stop(),delete i[e],i)return;delete t.__transition}i[e]=n,n.timer=Yn(a,0,n.time)}(t,n,{name:e,index:r,group:i,on:Xn,tween:Wn,time:a.time,delay:a.delay,duration:a.duration,ease:a.ease,timer:null,state:jn})}function er(t,e){var n=rr(t,e);if(n.state>jn)throw new Error("too late; already scheduled");return n}function nr(t,e){var n=rr(t,e);if(n.state>Qn)throw new Error("too late; already running");return n}function rr(t,e){var n=t.__transition;if(!n||!(n=n[e]))throw new Error("transition not found");return n}function ir(t,e){var n,r;return function(){var i=nr(this,t),a=i.tween;if(a!==n)for(var o=0,l=(r=n=a).length;o<l;++o)if(r[o].name===e){(r=r.slice()).splice(o,1);break}i.tween=r}}function ar(t,e,n){var r,i;if("function"!=typeof n)throw new Error;return function(){var a=nr(this,t),o=a.tween;if(o!==r){i=(r=o).slice();for(var l={name:e,value:n},u=0,s=i.length;u<s;++u)if(i[u].name===e){i[u]=l;break}u===s&&i.push(l)}a.tween=i}}function or(t,e,n){var r=t._id;return t.each((function(){var t=nr(this,r);(t.value||(t.value={}))[e]=n.apply(this,arguments)})),function(t){return rr(t,r).value[e]}}function lr(t,e){var n;return("number"==typeof e?cn:e instanceof Ae?an:(n=Ae(e))?(e=n,an):pn)(t,e)}function ur(t){return function(){this.removeAttribute(t)}}function sr(t){return function(){this.removeAttributeNS(t.space,t.local)}}function fr(t,e,n){var r,i,a=n+"";return function(){var o=this.getAttribute(t);return o===a?null:o===r?i:i=e(r=o,n)}}function cr(t,e,n){var r,i,a=n+"";return function(){var o=this.getAttributeNS(t.space,t.local);return o===a?null:o===r?i:i=e(r=o,n)}}function hr(t,e,n){var r,i,a;return function(){var o,l,u=n(this);if(null!=u)return(o=this.getAttribute(t))===(l=u+"")?null:o===r&&l===i?a:(i=l,a=e(r=o,u));this.removeAttribute(t)}}function dr(t,e,n){var r,i,a;return function(){var o,l,u=n(this);if(null!=u)return(o=this.getAttributeNS(t.space,t.local))===(l=u+"")?null:o===r&&l===i?a:(i=l,a=e(r=o,u));this.removeAttributeNS(t.space,t.local)}}function gr(t,e){var n,r;function i(){var i=e.apply(this,arguments);return i!==r&&(n=(r=i)&&function(t,e){return function(n){this.setAttributeNS(t.space,t.local,e.call(this,n))}}(t,i)),n}return i._value=e,i}function pr(t,e){var n,r;function i(){var i=e.apply(this,arguments);return i!==r&&(n=(r=i)&&function(t,e){return function(n){this.setAttribute(t,e.call(this,n))}}(t,i)),n}return i._value=e,i}function yr(t,e){return function(){er(this,t).delay=+e.apply(this,arguments)}}function mr(t,e){return e=+e,function(){er(this,t).delay=e}}function vr(t,e){return function(){nr(this,t).duration=+e.apply(this,arguments)}}function xr(t,e){return e=+e,function(){nr(this,t).duration=e}}var Ar=te.prototype.constructor;function wr(t){return function(){this.style.removeProperty(t)}}var br=0;function Dr(t,e,n,r){this._groups=t,this._parents=e,this._name=n,this._id=r}function kr(){return++br}var Cr=te.prototype;Dr.prototype={constructor:Dr,select:function(t){var e=this._name,n=this._id;"function"!=typeof t&&(t=Q(t));for(var r=this._groups,i=r.length,a=new Array(i),o=0;o<i;++o)for(var l,u,s=r[o],f=s.length,c=a[o]=new Array(f),h=0;h<f;++h)(l=s[h])&&(u=t.call(l,l.__data__,h,s))&&("__data__"in l&&(u.__data__=l.__data__),c[h]=u,tr(c[h],e,n,h,c,rr(l,n)));return new Dr(a,this._parents,e,n)},selectAll:function(t){var e=this._name,n=this._id;"function"!=typeof t&&(t=K(t));for(var r=this._groups,i=r.length,a=[],o=[],l=0;l<i;++l)for(var u,s=r[l],f=s.length,c=0;c<f;++c)if(u=s[c]){for(var h,d=t.call(u,u.__data__,c,s),g=rr(u,n),p=0,y=d.length;p<y;++p)(h=d[p])&&tr(h,e,n,p,d,g);a.push(d),o.push(u)}return new Dr(a,o,e,n)},selectChild:Cr.selectChild,selectChildren:Cr.selectChildren,filter:function(t){"function"!=typeof t&&(t=tt(t));for(var e=this._groups,n=e.length,r=new Array(n),i=0;i<n;++i)for(var a,o=e[i],l=o.length,u=r[i]=[],s=0;s<l;++s)(a=o[s])&&t.call(a,a.__data__,s,o)&&u.push(a);return new Dr(r,this._parents,this._name,this._id)},merge:function(t){if(t._id!==this._id)throw new Error;for(var e=this._groups,n=t._groups,r=e.length,i=n.length,a=Math.min(r,i),o=new Array(r),l=0;l<a;++l)for(var u,s=e[l],f=n[l],c=s.length,h=o[l]=new Array(c),d=0;d<c;++d)(u=s[d]||f[d])&&(h[d]=u);for(;l<r;++l)o[l]=e[l];return new Dr(o,this._parents,this._name,this._id)},selection:function(){return new Ar(this._groups,this._parents)},transition:function(){for(var t=this._name,e=this._id,n=kr(),r=this._groups,i=r.length,a=0;a<i;++a)for(var o,l=r[a],u=l.length,s=0;s<u;++s)if(o=l[s]){var f=rr(o,e);tr(o,t,n,s,l,{time:f.time+f.delay+f.duration,delay:0,duration:f.duration,ease:f.ease})}return new Dr(r,this._parents,t,n)},call:Cr.call,nodes:Cr.nodes,node:Cr.node,size:Cr.size,empty:Cr.empty,each:Cr.each,on:function(t,e){var n=this._id;return arguments.length<2?rr(this.node(),n).on.on(t):this.each(function(t,e,n){var r,i,a=function(t){return(t+"").trim().split(/^|\s+/).every((function(t){var e=t.indexOf(".");return e>=0&&(t=t.slice(0,e)),!t||"start"===t}))}(e)?er:nr;return function(){var o=a(this,t),l=o.on;l!==r&&(i=(r=l).copy()).on(e,n),o.on=i}}(n,t,e))},attr:function(t,e){var n=X(t),r="transform"===n?kn:lr;return this.attrTween(t,"function"==typeof e?(n.local?dr:hr)(n,r,or(this,"attr."+t,e)):null==e?(n.local?sr:ur)(n):(n.local?cr:fr)(n,r,e))},attrTween:function(t,e){var n="attr."+t;if(arguments.length<2)return(n=this.tween(n))&&n._value;if(null==e)return this.tween(n,null);if("function"!=typeof e)throw new Error;var r=X(t);return this.tween(n,(r.local?gr:pr)(r,e))},style:function(t,e,n){var r="transform"==(t+="")?Dn:lr;return null==e?this.styleTween(t,function(t,e){var n,r,i;return function(){var a=Dt(this,t),o=(this.style.removeProperty(t),Dt(this,t));return a===o?null:a===n&&o===r?i:i=e(n=a,r=o)}}(t,r)).on("end.style."+t,wr(t)):"function"==typeof e?this.styleTween(t,function(t,e,n){var r,i,a;return function(){var o=Dt(this,t),l=n(this),u=l+"";return null==l&&(this.style.removeProperty(t),u=l=Dt(this,t)),o===u?null:o===r&&u===i?a:(i=u,a=e(r=o,l))}}(t,r,or(this,"style."+t,e))).each(function(t,e){var n,r,i,a,o="style."+e,l="end."+o;return function(){var u=nr(this,t),s=u.on,f=null==u.value[o]?a||(a=wr(e)):void 0;s===n&&i===f||(r=(n=s).copy()).on(l,i=f),u.on=r}}(this._id,t)):this.styleTween(t,function(t,e,n){var r,i,a=n+"";return function(){var o=Dt(this,t);return o===a?null:o===r?i:i=e(r=o,n)}}(t,r,e),n).on("end.style."+t,null)},styleTween:function(t,e,n){var r="style."+(t+="");if(arguments.length<2)return(r=this.tween(r))&&r._value;if(null==e)return this.tween(r,null);if("function"!=typeof e)throw new Error;return this.tween(r,function(t,e,n){var r,i;function a(){var a=e.apply(this,arguments);return a!==i&&(r=(i=a)&&function(t,e,n){return function(r){this.style.setProperty(t,e.call(this,r),n)}}(t,a,n)),r}return a._value=e,a}(t,e,null==n?"":n))},text:function(t){return this.tween("text","function"==typeof t?function(t){return function(){var e=t(this);this.textContent=null==e?"":e}}(or(this,"text",t)):function(t){return function(){this.textContent=t}}(null==t?"":t+""))},textTween:function(t){var e="text";if(arguments.length<1)return(e=this.tween(e))&&e._value;if(null==t)return this.tween(e,null);if("function"!=typeof t)throw new Error;return this.tween(e,function(t){var e,n;function r(){var r=t.apply(this,arguments);return r!==n&&(e=(n=r)&&function(t){return function(e){this.textContent=t.call(this,e)}}(r)),e}return r._value=t,r}(t))},remove:function(){return this.on("end.remove",function(t){return function(){var e=this.parentNode;for(var n in this.__transition)if(+n!==t)return;e&&e.removeChild(this)}}(this._id))},tween:function(t,e){var n=this._id;if(t+="",arguments.length<2){for(var r,i=rr(this.node(),n).tween,a=0,o=i.length;a<o;++a)if((r=i[a]).name===t)return r.value;return null}return this.each((null==e?ir:ar)(n,t,e))},delay:function(t){var e=this._id;return arguments.length?this.each(("function"==typeof t?yr:mr)(e,t)):rr(this.node(),e).delay},duration:function(t){var e=this._id;return arguments.length?this.each(("function"==typeof t?vr:xr)(e,t)):rr(this.node(),e).duration},ease:function(t){var e=this._id;return arguments.length?this.each(function(t,e){if("function"!=typeof e)throw new Error;return function(){nr(this,t).ease=e}}(e,t)):rr(this.node(),e).ease},easeVarying:function(t){if("function"!=typeof t)throw new Error;return this.each(function(t,e){return function(){var n=e.apply(this,arguments);if("function"!=typeof n)throw new Error;nr(this,t).ease=n}}(this._id,t))},end:function(){var t,e,n=this,r=n._id,i=n.size();return new Promise((function(a,o){var l={value:o},u={value:function(){0==--i&&a()}};n.each((function(){var n=nr(this,r),i=n.on;i!==t&&((e=(t=i).copy())._.cancel.push(l),e._.interrupt.push(l),e._.end.push(u)),n.on=e})),0===i&&a()}))},[Symbol.iterator]:Cr[Symbol.iterator]};var Mr={time:null,delay:0,duration:250,ease:function(t){return((t*=2)<=1?t*t*t:(t-=2)*t*t+2)/2}};function Tr(t,e){for(var n;!(n=t.__transition)||!(n=n[e]);)if(!(t=t.parentNode))throw new Error(`transition ${e} not found`);return n}te.prototype.interrupt=function(t){return this.each((function(){!function(t,e){var n,r,i,a=t.__transition,o=!0;if(a){for(i in e=null==e?null:e+"",a)(n=a[i]).name===e?(r=n.state>Gn&&n.state<Kn,n.state=Jn,n.timer.stop(),n.on.call(r?"interrupt":"cancel",t,t.__data__,n.index,n.group),delete a[i]):o=!1;o&&delete t.__transition}}(this,t)}))},te.prototype.transition=function(t){var e,n;t instanceof Dr?(e=t._id,t=t._name):(e=kr(),(n=Mr).time=On(),t=null==t?null:t+"");for(var r=this._groups,i=r.length,a=0;a<i;++a)for(var o,l=r[a],u=l.length,s=0;s<u;++s)(o=l[s])&&tr(o,t,e,s,l,n||Tr(o,e));return new Dr(r,this._parents,t,e)};const _r=Math.PI,Er=2*_r,Fr=1e-6,Sr=Er-Fr;function Br(t){this._+=t[0];for(let e=1,n=t.length;e<n;++e)this._+=arguments[e]+t[e]}class Nr{constructor(t){this._x0=this._y0=this._x1=this._y1=null,this._="",this._append=null==t?Br:function(t){let e=Math.floor(t);if(!(e>=0))throw new Error(`invalid digits: ${t}`);if(e>15)return Br;const n=10**e;return function(t){this._+=t[0];for(let e=1,r=t.length;e<r;++e)this._+=Math.round(arguments[e]*n)/n+t[e]}}(t)}moveTo(t,e){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+e}`}closePath(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._append`Z`)}lineTo(t,e){this._append`L${this._x1=+t},${this._y1=+e}`}quadraticCurveTo(t,e,n,r){this._append`Q${+t},${+e},${this._x1=+n},${this._y1=+r}`}bezierCurveTo(t,e,n,r,i,a){this._append`C${+t},${+e},${+n},${+r},${this._x1=+i},${this._y1=+a}`}arcTo(t,e,n,r,i){if(t=+t,e=+e,n=+n,r=+r,(i=+i)<0)throw new Error(`negative radius: ${i}`);let a=this._x1,o=this._y1,l=n-t,u=r-e,s=a-t,f=o-e,c=s*s+f*f;if(null===this._x1)this._append`M${this._x1=t},${this._y1=e}`;else if(c>Fr)if(Math.abs(f*l-u*s)>Fr&&i){let h=n-a,d=r-o,g=l*l+u*u,p=h*h+d*d,y=Math.sqrt(g),m=Math.sqrt(c),v=i*Math.tan((_r-Math.acos((g+c-p)/(2*y*m)))/2),x=v/m,A=v/y;Math.abs(x-1)>Fr&&this._append`L${t+x*s},${e+x*f}`,this._append`A${i},${i},0,0,${+(f*h>s*d)},${this._x1=t+A*l},${this._y1=e+A*u}`}else this._append`L${this._x1=t},${this._y1=e}`;else;}arc(t,e,n,r,i,a){if(t=+t,e=+e,a=!!a,(n=+n)<0)throw new Error(`negative radius: ${n}`);let o=n*Math.cos(r),l=n*Math.sin(r),u=t+o,s=e+l,f=1^a,c=a?r-i:i-r;null===this._x1?this._append`M${u},${s}`:(Math.abs(this._x1-u)>Fr||Math.abs(this._y1-s)>Fr)&&this._append`L${u},${s}`,n&&(c<0&&(c=c%Er+Er),c>Sr?this._append`A${n},${n},0,1,${f},${t-o},${e-l}A${n},${n},0,1,${f},${this._x1=u},${this._y1=s}`:c>Fr&&this._append`A${n},${n},0,${+(c>=_r)},${f},${this._x1=t+n*Math.cos(i)},${this._y1=e+n*Math.sin(i)}`)}rect(t,e,n,r){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+e}h${n=+n}v${+r}h${-n}Z`}toString(){return this._}}function Ir(t,e){if((n=(t=e?t.toExponential(e-1):t.toExponential()).indexOf("e"))<0)return null;var n,r=t.slice(0,n);return[r.length>1?r[0]+r.slice(2):r,+t.slice(n+1)]}function Lr(t){return(t=Ir(Math.abs(t)))?t[1]:NaN}var Vr,Or=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function Pr(t){if(!(e=Or.exec(t)))throw new Error("invalid format: "+t);var e;return new $r({fill:e[1],align:e[2],sign:e[3],symbol:e[4],zero:e[5],width:e[6],comma:e[7],precision:e[8]&&e[8].slice(1),trim:e[9],type:e[10]})}function $r(t){this.fill=void 0===t.fill?" ":t.fill+"",this.align=void 0===t.align?">":t.align+"",this.sign=void 0===t.sign?"-":t.sign+"",this.symbol=void 0===t.symbol?"":t.symbol+"",this.zero=!!t.zero,this.width=void 0===t.width?void 0:+t.width,this.comma=!!t.comma,this.precision=void 0===t.precision?void 0:+t.precision,this.trim=!!t.trim,this.type=void 0===t.type?"":t.type+""}function Yr(t,e){var n=Ir(t,e);if(!n)return t+"";var r=n[0],i=n[1];return i<0?"0."+new Array(-i).join("0")+r:r.length>i+1?r.slice(0,i+1)+"."+r.slice(i+1):r+new Array(i-r.length+2).join("0")}Pr.prototype=$r.prototype,$r.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(void 0===this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(void 0===this.precision?"":"."+Math.max(0,0|this.precision))+(this.trim?"~":"")+this.type};var zr={"%":(t,e)=>(100*t).toFixed(e),b:t=>Math.round(t).toString(2),c:t=>t+"",d:function(t){return Math.abs(t=Math.round(t))>=1e21?t.toLocaleString("en").replace(/,/g,""):t.toString(10)},e:(t,e)=>t.toExponential(e),f:(t,e)=>t.toFixed(e),g:(t,e)=>t.toPrecision(e),o:t=>Math.round(t).toString(8),p:(t,e)=>Yr(100*t,e),r:Yr,s:function(t,e){var n=Ir(t,e);if(!n)return t+"";var r=n[0],i=n[1],a=i-(Vr=3*Math.max(-8,Math.min(8,Math.floor(i/3))))+1,o=r.length;return a===o?r:a>o?r+new Array(a-o+1).join("0"):a>0?r.slice(0,a)+"."+r.slice(a):"0."+new Array(1-a).join("0")+Ir(t,Math.max(0,e+a-1))[0]},X:t=>Math.round(t).toString(16).toUpperCase(),x:t=>Math.round(t).toString(16)};function Rr(t){return t}var Ur,Hr,Xr,Wr=Array.prototype.map,jr=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function qr(t){var e,n,r=void 0===t.grouping||void 0===t.thousands?Rr:(e=Wr.call(t.grouping,Number),n=t.thousands+"",function(t,r){for(var i=t.length,a=[],o=0,l=e[0],u=0;i>0&&l>0&&(u+l+1>r&&(l=Math.max(1,r-u)),a.push(t.substring(i-=l,i+l)),!((u+=l+1)>r));)l=e[o=(o+1)%e.length];return a.reverse().join(n)}),i=void 0===t.currency?"":t.currency[0]+"",a=void 0===t.currency?"":t.currency[1]+"",o=void 0===t.decimal?".":t.decimal+"",l=void 0===t.numerals?Rr:function(t){return function(e){return e.replace(/[0-9]/g,(function(e){return t[+e]}))}}(Wr.call(t.numerals,String)),u=void 0===t.percent?"%":t.percent+"",s=void 0===t.minus?"":t.minus+"",f=void 0===t.nan?"NaN":t.nan+"";function c(t){var e=(t=Pr(t)).fill,n=t.align,c=t.sign,h=t.symbol,d=t.zero,g=t.width,p=t.comma,y=t.precision,m=t.trim,v=t.type;"n"===v?(p=!0,v="g"):zr[v]||(void 0===y&&(y=12),m=!0,v="g"),(d||"0"===e&&"="===n)&&(d=!0,e="0",n="=");var x="$"===h?i:"#"===h&&/[boxX]/.test(v)?"0"+v.toLowerCase():"",A="$"===h?a:/[%p]/.test(v)?u:"",w=zr[v],b=/[defgprs%]/.test(v);function D(t){var i,a,u,h=x,D=A;if("c"===v)D=w(t)+D,t="";else{var k=(t=+t)<0||1/t<0;if(t=isNaN(t)?f:w(Math.abs(t),y),m&&(t=function(t){t:for(var e,n=t.length,r=1,i=-1;r<n;++r)switch(t[r]){case".":i=e=r;break;case"0":0===i&&(i=r),e=r;break;default:if(!+t[r])break t;i>0&&(i=0)}return i>0?t.slice(0,i)+t.slice(e+1):t}(t)),k&&0==+t&&"+"!==c&&(k=!1),h=(k?"("===c?c:s:"-"===c||"("===c?"":c)+h,D=("s"===v?jr[8+Vr/3]:"")+D+(k&&"("===c?")":""),b)for(i=-1,a=t.length;++i<a;)if(48>(u=t.charCodeAt(i))||u>57){D=(46===u?o+t.slice(i+1):t.slice(i))+D,t=t.slice(0,i);break}}p&&!d&&(t=r(t,1/0));var C=h.length+t.length+D.length,M=C<g?new Array(g-C+1).join(e):"";switch(p&&d&&(t=r(M+t,M.length?g-D.length:1/0),M=""),n){case"<":t=h+t+D+M;break;case"=":t=h+M+t+D;break;case"^":t=M.slice(0,C=M.length>>1)+h+t+D+M.slice(C);break;default:t=M+h+t+D}return l(t)}return y=void 0===y?6:/[gprs]/.test(v)?Math.max(1,Math.min(21,y)):Math.max(0,Math.min(20,y)),D.toString=function(){return t+""},D}return{format:c,formatPrefix:function(t,e){var n=c(((t=Pr(t)).type="f",t)),r=3*Math.max(-8,Math.min(8,Math.floor(Lr(e)/3))),i=Math.pow(10,-r),a=jr[8+r/3];return function(t){return n(i*t)+a}}}}function Gr(t,e){switch(arguments.length){case 0:break;case 1:this.range(t);break;default:this.range(e).domain(t)}return this}Ur=qr({thousands:",",grouping:[3],currency:["$",""]}),Hr=Ur.format,Xr=Ur.formatPrefix;const Qr=Symbol("implicit");function Zr(){var t=new l,e=[],n=[],r=Qr;function i(i){let a=t.get(i);if(void 0===a){if(r!==Qr)return r;t.set(i,a=e.push(i)-1)}return n[a%n.length]}return i.domain=function(n){if(!arguments.length)return e.slice();e=[],t=new l;for(const r of n)t.has(r)||t.set(r,e.push(r)-1);return i},i.range=function(t){return arguments.length?(n=Array.from(t),i):n.slice()},i.unknown=function(t){return arguments.length?(r=t,i):r},i.copy=function(){return Zr(e,n).unknown(r)},Gr.apply(i,arguments),i}function Kr(t){return+t}var Jr=[0,1];function ti(t){return t}function ei(t,e){return(e-=t=+t)?function(n){return(n-t)/e}:function(t){return function(){return t}}(isNaN(e)?NaN:.5)}function ni(t,e,n){var r=t[0],i=t[1],a=e[0],o=e[1];return i<r?(r=ei(i,r),a=n(o,a)):(r=ei(r,i),a=n(a,o)),function(t){return a(r(t))}}function ri(t,e,n){var r=Math.min(t.length,e.length)-1,i=new Array(r),a=new Array(r),l=-1;for(t[r]<t[0]&&(t=t.slice().reverse(),e=e.slice().reverse());++l<r;)i[l]=ei(t[l],t[l+1]),a[l]=n(e[l],e[l+1]);return function(e){var n=o(t,e,1,r)-1;return a[n](i[n](e))}}function ii(t,e){return e.domain(t.domain()).range(t.range()).interpolate(t.interpolate()).clamp(t.clamp()).unknown(t.unknown())}function ai(){var t,e,n,r,i,a,o=Jr,l=Jr,u=yn,s=ti;function f(){var t,e,n,u=Math.min(o.length,l.length);return s!==ti&&(t=o[0],e=o[u-1],t>e&&(n=t,t=e,e=n),s=function(n){return Math.max(t,Math.min(e,n))}),r=u>2?ri:ni,i=a=null,c}function c(e){return null==e||isNaN(e=+e)?n:(i||(i=r(o.map(t),l,u)))(t(s(e)))}return c.invert=function(n){return s(e((a||(a=r(l,o.map(t),cn)))(n)))},c.domain=function(t){return arguments.length?(o=Array.from(t,Kr),f()):o.slice()},c.range=function(t){return arguments.length?(l=Array.from(t),f()):l.slice()},c.rangeRound=function(t){return l=Array.from(t),u=mn,f()},c.clamp=function(t){return arguments.length?(s=!!t||ti,f()):s!==ti},c.interpolate=function(t){return arguments.length?(u=t,f()):u},c.unknown=function(t){return arguments.length?(n=t,c):n},function(n,r){return t=n,e=r,f()}}function oi(){return ai()(ti,ti)}function li(t,e,n,r){var i,a=y(t,e,n);switch((r=Pr(null==r?",f":r)).type){case"s":var o=Math.max(Math.abs(t),Math.abs(e));return null!=r.precision||isNaN(i=function(t,e){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(Lr(e)/3)))-Lr(Math.abs(t)))}(a,o))||(r.precision=i),Xr(r,o);case"":case"e":case"g":case"p":case"r":null!=r.precision||isNaN(i=function(t,e){return t=Math.abs(t),e=Math.abs(e)-t,Math.max(0,Lr(e)-Lr(t))+1}(a,Math.max(Math.abs(t),Math.abs(e))))||(r.precision=i-("e"===r.type));break;case"f":case"%":null!=r.precision||isNaN(i=function(t){return Math.max(0,-Lr(Math.abs(t)))}(a))||(r.precision=i-2*("%"===r.type))}return Hr(r)}function ui(t){var e=t.domain;return t.ticks=function(t){var n=e();return function(t,e,n){if(!((n=+n)>0))return[];if((t=+t)==(e=+e))return[t];const r=e<t,[i,a,o]=r?g(e,t,n):g(t,e,n);if(!(a>=i))return[];const l=a-i+1,u=new Array(l);if(r)if(o<0)for(let t=0;t<l;++t)u[t]=(a-t)/-o;else for(let t=0;t<l;++t)u[t]=(a-t)*o;else if(o<0)for(let t=0;t<l;++t)u[t]=(i+t)/-o;else for(let t=0;t<l;++t)u[t]=(i+t)*o;return u}(n[0],n[n.length-1],null==t?10:t)},t.tickFormat=function(t,n){var r=e();return li(r[0],r[r.length-1],null==t?10:t,n)},t.nice=function(n){null==n&&(n=10);var r,i,a=e(),o=0,l=a.length-1,u=a[o],s=a[l],f=10;for(s<u&&(i=u,u=s,s=i,i=o,o=l,l=i);f-- >0;){if((i=p(u,s,n))===r)return a[o]=u,a[l]=s,e(a);if(i>0)u=Math.floor(u/i)*i,s=Math.ceil(s/i)*i;else{if(!(i<0))break;u=Math.ceil(u*i)/i,s=Math.floor(s*i)/i}r=i}return t},t}function si(){var t=oi();return t.copy=function(){return ii(t,si())},Gr.apply(t,arguments),ui(t)}const fi=new Date,ci=new Date;function hi(t,e,n,r){function i(e){return t(e=0===arguments.length?new Date:new Date(+e)),e}return i.floor=e=>(t(e=new Date(+e)),e),i.ceil=n=>(t(n=new Date(n-1)),e(n,1),t(n),n),i.round=t=>{const e=i(t),n=i.ceil(t);return t-e<n-t?e:n},i.offset=(t,n)=>(e(t=new Date(+t),null==n?1:Math.floor(n)),t),i.range=(n,r,a)=>{const o=[];if(n=i.ceil(n),a=null==a?1:Math.floor(a),!(n<r&&a>0))return o;let l;do{o.push(l=new Date(+n)),e(n,a),t(n)}while(l<n&&n<r);return o},i.filter=n=>hi((e=>{if(e>=e)for(;t(e),!n(e);)e.setTime(e-1)}),((t,r)=>{if(t>=t)if(r<0)for(;++r<=0;)for(;e(t,-1),!n(t););else for(;--r>=0;)for(;e(t,1),!n(t););})),n&&(i.count=(e,r)=>(fi.setTime(+e),ci.setTime(+r),t(fi),t(ci),Math.floor(n(fi,ci))),i.every=t=>(t=Math.floor(t),isFinite(t)&&t>0?t>1?i.filter(r?e=>r(e)%t==0:e=>i.count(0,e)%t==0):i:null)),i}const di=hi((()=>{}),((t,e)=>{t.setTime(+t+e)}),((t,e)=>e-t));di.every=t=>(t=Math.floor(t),isFinite(t)&&t>0?t>1?hi((e=>{e.setTime(Math.floor(e/t)*t)}),((e,n)=>{e.setTime(+e+n*t)}),((e,n)=>(n-e)/t)):di:null),di.range;const gi=1e3,pi=6e4,yi=36e5,mi=864e5,vi=6048e5,xi=2592e6,Ai=31536e6,wi=hi((t=>{t.setTime(t-t.getMilliseconds())}),((t,e)=>{t.setTime(+t+e*gi)}),((t,e)=>(e-t)/gi),(t=>t.getUTCSeconds()));wi.range;const bi=hi((t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*gi)}),((t,e)=>{t.setTime(+t+e*pi)}),((t,e)=>(e-t)/pi),(t=>t.getMinutes()));bi.range;const Di=hi((t=>{t.setUTCSeconds(0,0)}),((t,e)=>{t.setTime(+t+e*pi)}),((t,e)=>(e-t)/pi),(t=>t.getUTCMinutes()));Di.range;const ki=hi((t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*gi-t.getMinutes()*pi)}),((t,e)=>{t.setTime(+t+e*yi)}),((t,e)=>(e-t)/yi),(t=>t.getHours()));ki.range;const Ci=hi((t=>{t.setUTCMinutes(0,0,0)}),((t,e)=>{t.setTime(+t+e*yi)}),((t,e)=>(e-t)/yi),(t=>t.getUTCHours()));Ci.range;const Mi=hi((t=>t.setHours(0,0,0,0)),((t,e)=>t.setDate(t.getDate()+e)),((t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*pi)/mi),(t=>t.getDate()-1));Mi.range;const Ti=hi((t=>{t.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCDate(t.getUTCDate()+e)}),((t,e)=>(e-t)/mi),(t=>t.getUTCDate()-1));Ti.range;const _i=hi((t=>{t.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCDate(t.getUTCDate()+e)}),((t,e)=>(e-t)/mi),(t=>Math.floor(t/mi)));function Ei(t){return hi((e=>{e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)}),((t,e)=>{t.setDate(t.getDate()+7*e)}),((t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*pi)/vi))}_i.range;const Fi=Ei(0),Si=Ei(1),Bi=Ei(2),Ni=Ei(3),Ii=Ei(4),Li=Ei(5),Vi=Ei(6);function Oi(t){return hi((e=>{e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCDate(t.getUTCDate()+7*e)}),((t,e)=>(e-t)/vi))}Fi.range,Si.range,Bi.range,Ni.range,Ii.range,Li.range,Vi.range;const Pi=Oi(0),$i=Oi(1),Yi=Oi(2),zi=Oi(3),Ri=Oi(4),Ui=Oi(5),Hi=Oi(6);Pi.range,$i.range,Yi.range,zi.range,Ri.range,Ui.range,Hi.range;const Xi=hi((t=>{t.setDate(1),t.setHours(0,0,0,0)}),((t,e)=>{t.setMonth(t.getMonth()+e)}),((t,e)=>e.getMonth()-t.getMonth()+12*(e.getFullYear()-t.getFullYear())),(t=>t.getMonth()));Xi.range;const Wi=hi((t=>{t.setUTCDate(1),t.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCMonth(t.getUTCMonth()+e)}),((t,e)=>e.getUTCMonth()-t.getUTCMonth()+12*(e.getUTCFullYear()-t.getUTCFullYear())),(t=>t.getUTCMonth()));Wi.range;const ji=hi((t=>{t.setMonth(0,1),t.setHours(0,0,0,0)}),((t,e)=>{t.setFullYear(t.getFullYear()+e)}),((t,e)=>e.getFullYear()-t.getFullYear()),(t=>t.getFullYear()));ji.every=t=>isFinite(t=Math.floor(t))&&t>0?hi((e=>{e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)}),((e,n)=>{e.setFullYear(e.getFullYear()+n*t)})):null,ji.range;const qi=hi((t=>{t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCFullYear(t.getUTCFullYear()+e)}),((t,e)=>e.getUTCFullYear()-t.getUTCFullYear()),(t=>t.getUTCFullYear()));qi.every=t=>isFinite(t=Math.floor(t))&&t>0?hi((e=>{e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)}),((e,n)=>{e.setUTCFullYear(e.getUTCFullYear()+n*t)})):null,qi.range;const[Gi,Qi]=function(t,e,n,r,a,o){const l=[[wi,1,gi],[wi,5,5e3],[wi,15,15e3],[wi,30,3e4],[o,1,pi],[o,5,3e5],[o,15,9e5],[o,30,18e5],[a,1,yi],[a,3,108e5],[a,6,216e5],[a,12,432e5],[r,1,mi],[r,2,1728e5],[n,1,vi],[e,1,xi],[e,3,7776e6],[t,1,Ai]];function u(e,n,r){const a=Math.abs(n-e)/r,o=i((([,,t])=>t)).right(l,a);if(o===l.length)return t.every(y(e/Ai,n/Ai,r));if(0===o)return di.every(Math.max(y(e,n,r),1));const[u,s]=l[a/l[o-1][2]<l[o][2]/a?o-1:o];return u.every(s)}return[function(t,e,n){const r=e<t;r&&([t,e]=[e,t]);const i=n&&"function"==typeof n.range?n:u(t,e,n),a=i?i.range(t,+e+1):[];return r?a.reverse():a},u]}(ji,Xi,Fi,Mi,ki,bi);function Zi(t){if(0<=t.y&&t.y<100){var e=new Date(-1,t.m,t.d,t.H,t.M,t.S,t.L);return e.setFullYear(t.y),e}return new Date(t.y,t.m,t.d,t.H,t.M,t.S,t.L)}function Ki(t){if(0<=t.y&&t.y<100){var e=new Date(Date.UTC(-1,t.m,t.d,t.H,t.M,t.S,t.L));return e.setUTCFullYear(t.y),e}return new Date(Date.UTC(t.y,t.m,t.d,t.H,t.M,t.S,t.L))}function Ji(t,e,n){return{y:t,m:e,d:n,H:0,M:0,S:0,L:0}}var ta,ea,na={"-":"",_:" ",0:"0"},ra=/^\s*\d+/,ia=/^%/,aa=/[\\^$*+?|[\]().{}]/g;function oa(t,e,n){var r=t<0?"-":"",i=(r?-t:t)+"",a=i.length;return r+(a<n?new Array(n-a+1).join(e)+i:i)}function la(t){return t.replace(aa,"\\$&")}function ua(t){return new RegExp("^(?:"+t.map(la).join("|")+")","i")}function sa(t){return new Map(t.map(((t,e)=>[t.toLowerCase(),e])))}function fa(t,e,n){var r=ra.exec(e.slice(n,n+1));return r?(t.w=+r[0],n+r[0].length):-1}function ca(t,e,n){var r=ra.exec(e.slice(n,n+1));return r?(t.u=+r[0],n+r[0].length):-1}function ha(t,e,n){var r=ra.exec(e.slice(n,n+2));return r?(t.U=+r[0],n+r[0].length):-1}function da(t,e,n){var r=ra.exec(e.slice(n,n+2));return r?(t.V=+r[0],n+r[0].length):-1}function ga(t,e,n){var r=ra.exec(e.slice(n,n+2));return r?(t.W=+r[0],n+r[0].length):-1}function pa(t,e,n){var r=ra.exec(e.slice(n,n+4));return r?(t.y=+r[0],n+r[0].length):-1}function ya(t,e,n){var r=ra.exec(e.slice(n,n+2));return r?(t.y=+r[0]+(+r[0]>68?1900:2e3),n+r[0].length):-1}function ma(t,e,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(n,n+6));return r?(t.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function va(t,e,n){var r=ra.exec(e.slice(n,n+1));return r?(t.q=3*r[0]-3,n+r[0].length):-1}function xa(t,e,n){var r=ra.exec(e.slice(n,n+2));return r?(t.m=r[0]-1,n+r[0].length):-1}function Aa(t,e,n){var r=ra.exec(e.slice(n,n+2));return r?(t.d=+r[0],n+r[0].length):-1}function wa(t,e,n){var r=ra.exec(e.slice(n,n+3));return r?(t.m=0,t.d=+r[0],n+r[0].length):-1}function ba(t,e,n){var r=ra.exec(e.slice(n,n+2));return r?(t.H=+r[0],n+r[0].length):-1}function Da(t,e,n){var r=ra.exec(e.slice(n,n+2));return r?(t.M=+r[0],n+r[0].length):-1}function ka(t,e,n){var r=ra.exec(e.slice(n,n+2));return r?(t.S=+r[0],n+r[0].length):-1}function Ca(t,e,n){var r=ra.exec(e.slice(n,n+3));return r?(t.L=+r[0],n+r[0].length):-1}function Ma(t,e,n){var r=ra.exec(e.slice(n,n+6));return r?(t.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function Ta(t,e,n){var r=ia.exec(e.slice(n,n+1));return r?n+r[0].length:-1}function _a(t,e,n){var r=ra.exec(e.slice(n));return r?(t.Q=+r[0],n+r[0].length):-1}function Ea(t,e,n){var r=ra.exec(e.slice(n));return r?(t.s=+r[0],n+r[0].length):-1}function Fa(t,e){return oa(t.getDate(),e,2)}function Sa(t,e){return oa(t.getHours(),e,2)}function Ba(t,e){return oa(t.getHours()%12||12,e,2)}function Na(t,e){return oa(1+Mi.count(ji(t),t),e,3)}function Ia(t,e){return oa(t.getMilliseconds(),e,3)}function La(t,e){return Ia(t,e)+"000"}function Va(t,e){return oa(t.getMonth()+1,e,2)}function Oa(t,e){return oa(t.getMinutes(),e,2)}function Pa(t,e){return oa(t.getSeconds(),e,2)}function $a(t){var e=t.getDay();return 0===e?7:e}function Ya(t,e){return oa(Fi.count(ji(t)-1,t),e,2)}function za(t){var e=t.getDay();return e>=4||0===e?Ii(t):Ii.ceil(t)}function Ra(t,e){return t=za(t),oa(Ii.count(ji(t),t)+(4===ji(t).getDay()),e,2)}function Ua(t){return t.getDay()}function Ha(t,e){return oa(Si.count(ji(t)-1,t),e,2)}function Xa(t,e){return oa(t.getFullYear()%100,e,2)}function Wa(t,e){return oa((t=za(t)).getFullYear()%100,e,2)}function ja(t,e){return oa(t.getFullYear()%1e4,e,4)}function qa(t,e){var n=t.getDay();return oa((t=n>=4||0===n?Ii(t):Ii.ceil(t)).getFullYear()%1e4,e,4)}function Ga(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+oa(e/60|0,"0",2)+oa(e%60,"0",2)}function Qa(t,e){return oa(t.getUTCDate(),e,2)}function Za(t,e){return oa(t.getUTCHours(),e,2)}function Ka(t,e){return oa(t.getUTCHours()%12||12,e,2)}function Ja(t,e){return oa(1+Ti.count(qi(t),t),e,3)}function to(t,e){return oa(t.getUTCMilliseconds(),e,3)}function eo(t,e){return to(t,e)+"000"}function no(t,e){return oa(t.getUTCMonth()+1,e,2)}function ro(t,e){return oa(t.getUTCMinutes(),e,2)}function io(t,e){return oa(t.getUTCSeconds(),e,2)}function ao(t){var e=t.getUTCDay();return 0===e?7:e}function oo(t,e){return oa(Pi.count(qi(t)-1,t),e,2)}function lo(t){var e=t.getUTCDay();return e>=4||0===e?Ri(t):Ri.ceil(t)}function uo(t,e){return t=lo(t),oa(Ri.count(qi(t),t)+(4===qi(t).getUTCDay()),e,2)}function so(t){return t.getUTCDay()}function fo(t,e){return oa($i.count(qi(t)-1,t),e,2)}function co(t,e){return oa(t.getUTCFullYear()%100,e,2)}function ho(t,e){return oa((t=lo(t)).getUTCFullYear()%100,e,2)}function go(t,e){return oa(t.getUTCFullYear()%1e4,e,4)}function po(t,e){var n=t.getUTCDay();return oa((t=n>=4||0===n?Ri(t):Ri.ceil(t)).getUTCFullYear()%1e4,e,4)}function yo(){return"+0000"}function mo(){return"%"}function vo(t){return+t}function xo(t){return Math.floor(+t/1e3)}function Ao(t){return new Date(t)}function wo(t){return t instanceof Date?+t:+new Date(+t)}function bo(t,e,n,r,i,a,o,l,u,s){var f=oi(),c=f.invert,h=f.domain,d=s(".%L"),g=s(":%S"),p=s("%I:%M"),y=s("%I %p"),m=s("%a %d"),v=s("%b %d"),x=s("%B"),A=s("%Y");function w(t){return(u(t)<t?d:l(t)<t?g:o(t)<t?p:a(t)<t?y:r(t)<t?i(t)<t?m:v:n(t)<t?x:A)(t)}return f.invert=function(t){return new Date(c(t))},f.domain=function(t){return arguments.length?h(Array.from(t,wo)):h().map(Ao)},f.ticks=function(e){var n=h();return t(n[0],n[n.length-1],null==e?10:e)},f.tickFormat=function(t,e){return null==e?w:s(e)},f.nice=function(t){var n=h();return t&&"function"==typeof t.range||(t=e(n[0],n[n.length-1],null==t?10:t)),t?h(function(t,e){var n,r=0,i=(t=t.slice()).length-1,a=t[r],o=t[i];return o<a&&(n=r,r=i,i=n,n=a,a=o,o=n),t[r]=e.floor(a),t[i]=e.ceil(o),t}(n,t)):f},f.copy=function(){return ii(f,bo(t,e,n,r,i,a,o,l,u,s))},f}function Do(){return Gr.apply(bo(Gi,Qi,ji,Xi,Fi,Mi,ki,bi,wi,ea).domain([new Date(2e3,0,1),new Date(2e3,0,2)]),arguments)}!function(t){ta=function(t){var e=t.dateTime,n=t.date,r=t.time,i=t.periods,a=t.days,o=t.shortDays,l=t.months,u=t.shortMonths,s=ua(i),f=sa(i),c=ua(a),h=sa(a),d=ua(o),g=sa(o),p=ua(l),y=sa(l),m=ua(u),v=sa(u),x={a:function(t){return o[t.getDay()]},A:function(t){return a[t.getDay()]},b:function(t){return u[t.getMonth()]},B:function(t){return l[t.getMonth()]},c:null,d:Fa,e:Fa,f:La,g:Wa,G:qa,H:Sa,I:Ba,j:Na,L:Ia,m:Va,M:Oa,p:function(t){return i[+(t.getHours()>=12)]},q:function(t){return 1+~~(t.getMonth()/3)},Q:vo,s:xo,S:Pa,u:$a,U:Ya,V:Ra,w:Ua,W:Ha,x:null,X:null,y:Xa,Y:ja,Z:Ga,"%":mo},A={a:function(t){return o[t.getUTCDay()]},A:function(t){return a[t.getUTCDay()]},b:function(t){return u[t.getUTCMonth()]},B:function(t){return l[t.getUTCMonth()]},c:null,d:Qa,e:Qa,f:eo,g:ho,G:po,H:Za,I:Ka,j:Ja,L:to,m:no,M:ro,p:function(t){return i[+(t.getUTCHours()>=12)]},q:function(t){return 1+~~(t.getUTCMonth()/3)},Q:vo,s:xo,S:io,u:ao,U:oo,V:uo,w:so,W:fo,x:null,X:null,y:co,Y:go,Z:yo,"%":mo},w={a:function(t,e,n){var r=d.exec(e.slice(n));return r?(t.w=g.get(r[0].toLowerCase()),n+r[0].length):-1},A:function(t,e,n){var r=c.exec(e.slice(n));return r?(t.w=h.get(r[0].toLowerCase()),n+r[0].length):-1},b:function(t,e,n){var r=m.exec(e.slice(n));return r?(t.m=v.get(r[0].toLowerCase()),n+r[0].length):-1},B:function(t,e,n){var r=p.exec(e.slice(n));return r?(t.m=y.get(r[0].toLowerCase()),n+r[0].length):-1},c:function(t,n,r){return k(t,e,n,r)},d:Aa,e:Aa,f:Ma,g:ya,G:pa,H:ba,I:ba,j:wa,L:Ca,m:xa,M:Da,p:function(t,e,n){var r=s.exec(e.slice(n));return r?(t.p=f.get(r[0].toLowerCase()),n+r[0].length):-1},q:va,Q:_a,s:Ea,S:ka,u:ca,U:ha,V:da,w:fa,W:ga,x:function(t,e,r){return k(t,n,e,r)},X:function(t,e,n){return k(t,r,e,n)},y:ya,Y:pa,Z:ma,"%":Ta};function b(t,e){return function(n){var r,i,a,o=[],l=-1,u=0,s=t.length;for(n instanceof Date||(n=new Date(+n));++l<s;)37===t.charCodeAt(l)&&(o.push(t.slice(u,l)),null!=(i=na[r=t.charAt(++l)])?r=t.charAt(++l):i="e"===r?" ":"0",(a=e[r])&&(r=a(n,i)),o.push(r),u=l+1);return o.push(t.slice(u,l)),o.join("")}}function D(t,e){return function(n){var r,i,a=Ji(1900,void 0,1);if(k(a,t,n+="",0)!=n.length)return null;if("Q"in a)return new Date(a.Q);if("s"in a)return new Date(1e3*a.s+("L"in a?a.L:0));if(e&&!("Z"in a)&&(a.Z=0),"p"in a&&(a.H=a.H%12+12*a.p),void 0===a.m&&(a.m="q"in a?a.q:0),"V"in a){if(a.V<1||a.V>53)return null;"w"in a||(a.w=1),"Z"in a?(i=(r=Ki(Ji(a.y,0,1))).getUTCDay(),r=i>4||0===i?$i.ceil(r):$i(r),r=Ti.offset(r,7*(a.V-1)),a.y=r.getUTCFullYear(),a.m=r.getUTCMonth(),a.d=r.getUTCDate()+(a.w+6)%7):(i=(r=Zi(Ji(a.y,0,1))).getDay(),r=i>4||0===i?Si.ceil(r):Si(r),r=Mi.offset(r,7*(a.V-1)),a.y=r.getFullYear(),a.m=r.getMonth(),a.d=r.getDate()+(a.w+6)%7)}else("W"in a||"U"in a)&&("w"in a||(a.w="u"in a?a.u%7:"W"in a?1:0),i="Z"in a?Ki(Ji(a.y,0,1)).getUTCDay():Zi(Ji(a.y,0,1)).getDay(),a.m=0,a.d="W"in a?(a.w+6)%7+7*a.W-(i+5)%7:a.w+7*a.U-(i+6)%7);return"Z"in a?(a.H+=a.Z/100|0,a.M+=a.Z%100,Ki(a)):Zi(a)}}function k(t,e,n,r){for(var i,a,o=0,l=e.length,u=n.length;o<l;){if(r>=u)return-1;if(37===(i=e.charCodeAt(o++))){if(i=e.charAt(o++),!(a=w[i in na?e.charAt(o++):i])||(r=a(t,n,r))<0)return-1}else if(i!=n.charCodeAt(r++))return-1}return r}return x.x=b(n,x),x.X=b(r,x),x.c=b(e,x),A.x=b(n,A),A.X=b(r,A),A.c=b(e,A),{format:function(t){var e=b(t+="",x);return e.toString=function(){return t},e},parse:function(t){var e=D(t+="",!1);return e.toString=function(){return t},e},utcFormat:function(t){var e=b(t+="",A);return e.toString=function(){return t},e},utcParse:function(t){var e=D(t+="",!0);return e.toString=function(){return t},e}}}(t),ea=ta.format,ta.parse,ta.utcFormat,ta.utcParse}({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});var ko=new Array(3).concat("fc8d59ffffbf99d594","d7191cfdae61abdda42b83ba","d7191cfdae61ffffbfabdda42b83ba","d53e4ffc8d59fee08be6f59899d5943288bd","d53e4ffc8d59fee08bffffbfe6f59899d5943288bd","d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd","d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd","9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2","9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2").map((function(t){for(var e=t.length/6|0,n=new Array(e),r=0;r<e;)n[r]="#"+t.slice(6*r,6*++r);return n}));function Co(t){return function(){return t}}(t=>{ln(t[t.length-1])})(ko);const Mo=Math.abs,To=Math.atan2,_o=Math.cos,Eo=Math.max,Fo=Math.min,So=Math.sin,Bo=Math.sqrt,No=1e-12,Io=Math.PI,Lo=Io/2,Vo=2*Io;function Oo(t){return t>=1?Lo:t<=-1?-Lo:Math.asin(t)}function Po(t){let e=3;return t.digits=function(n){if(!arguments.length)return e;if(null==n)e=null;else{const t=Math.floor(n);if(!(t>=0))throw new RangeError(`invalid digits: ${n}`);e=t}return t},()=>new Nr(e)}function $o(t){return t.innerRadius}function Yo(t){return t.outerRadius}function zo(t){return t.startAngle}function Ro(t){return t.endAngle}function Uo(t){return t&&t.padAngle}function Ho(t,e,n,r,i,a,o){var l=t-n,u=e-r,s=(o?a:-a)/Bo(l*l+u*u),f=s*u,c=-s*l,h=t+f,d=e+c,g=n+f,p=r+c,y=(h+g)/2,m=(d+p)/2,v=g-h,x=p-d,A=v*v+x*x,w=i-a,b=h*p-g*d,D=(x<0?-1:1)*Bo(Eo(0,w*w*A-b*b)),k=(b*x-v*D)/A,C=(-b*v-x*D)/A,M=(b*x+v*D)/A,T=(-b*v+x*D)/A,_=k-y,E=C-m,F=M-y,S=T-m;return _*_+E*E>F*F+S*S&&(k=M,C=T),{cx:k,cy:C,x01:-f,y01:-c,x11:k*(i/w-1),y11:C*(i/w-1)}}function Xo(){var t=$o,e=Yo,n=Co(0),r=null,i=zo,a=Ro,o=Uo,l=null,u=Po(s);function s(){var s,f,c=+t.apply(this,arguments),h=+e.apply(this,arguments),d=i.apply(this,arguments)-Lo,g=a.apply(this,arguments)-Lo,p=Mo(g-d),y=g>d;if(l||(l=s=u()),h<c&&(f=h,h=c,c=f),h>No)if(p>Vo-No)l.moveTo(h*_o(d),h*So(d)),l.arc(0,0,h,d,g,!y),c>No&&(l.moveTo(c*_o(g),c*So(g)),l.arc(0,0,c,g,d,y));else{var m,v,x=d,A=g,w=d,b=g,D=p,k=p,C=o.apply(this,arguments)/2,M=C>No&&(r?+r.apply(this,arguments):Bo(c*c+h*h)),T=Fo(Mo(h-c)/2,+n.apply(this,arguments)),_=T,E=T;if(M>No){var F=Oo(M/c*So(C)),S=Oo(M/h*So(C));(D-=2*F)>No?(w+=F*=y?1:-1,b-=F):(D=0,w=b=(d+g)/2),(k-=2*S)>No?(x+=S*=y?1:-1,A-=S):(k=0,x=A=(d+g)/2)}var B=h*_o(x),N=h*So(x),I=c*_o(b),L=c*So(b);if(T>No){var V,O=h*_o(A),P=h*So(A),$=c*_o(w),Y=c*So(w);if(p<Io)if(V=function(t,e,n,r,i,a,o,l){var u=n-t,s=r-e,f=o-i,c=l-a,h=c*u-f*s;if(!(h*h<No))return[t+(h=(f*(e-a)-c*(t-i))/h)*u,e+h*s]}(B,N,$,Y,O,P,I,L)){var z=B-V[0],R=N-V[1],U=O-V[0],H=P-V[1],X=1/So(function(t){return t>1?0:t<-1?Io:Math.acos(t)}((z*U+R*H)/(Bo(z*z+R*R)*Bo(U*U+H*H)))/2),W=Bo(V[0]*V[0]+V[1]*V[1]);_=Fo(T,(c-W)/(X-1)),E=Fo(T,(h-W)/(X+1))}else _=E=0}k>No?E>No?(m=Ho($,Y,B,N,h,E,y),v=Ho(O,P,I,L,h,E,y),l.moveTo(m.cx+m.x01,m.cy+m.y01),E<T?l.arc(m.cx,m.cy,E,To(m.y01,m.x01),To(v.y01,v.x01),!y):(l.arc(m.cx,m.cy,E,To(m.y01,m.x01),To(m.y11,m.x11),!y),l.arc(0,0,h,To(m.cy+m.y11,m.cx+m.x11),To(v.cy+v.y11,v.cx+v.x11),!y),l.arc(v.cx,v.cy,E,To(v.y11,v.x11),To(v.y01,v.x01),!y))):(l.moveTo(B,N),l.arc(0,0,h,x,A,!y)):l.moveTo(B,N),c>No&&D>No?_>No?(m=Ho(I,L,O,P,c,-_,y),v=Ho(B,N,$,Y,c,-_,y),l.lineTo(m.cx+m.x01,m.cy+m.y01),_<T?l.arc(m.cx,m.cy,_,To(m.y01,m.x01),To(v.y01,v.x01),!y):(l.arc(m.cx,m.cy,_,To(m.y01,m.x01),To(m.y11,m.x11),!y),l.arc(0,0,c,To(m.cy+m.y11,m.cx+m.x11),To(v.cy+v.y11,v.cx+v.x11),y),l.arc(v.cx,v.cy,_,To(v.y11,v.x11),To(v.y01,v.x01),!y))):l.arc(0,0,c,b,w,y):l.lineTo(I,L)}else l.moveTo(0,0);if(l.closePath(),s)return l=null,s+""||null}return s.centroid=function(){var n=(+t.apply(this,arguments)+ +e.apply(this,arguments))/2,r=(+i.apply(this,arguments)+ +a.apply(this,arguments))/2-Io/2;return[_o(r)*n,So(r)*n]},s.innerRadius=function(e){return arguments.length?(t="function"==typeof e?e:Co(+e),s):t},s.outerRadius=function(t){return arguments.length?(e="function"==typeof t?t:Co(+t),s):e},s.cornerRadius=function(t){return arguments.length?(n="function"==typeof t?t:Co(+t),s):n},s.padRadius=function(t){return arguments.length?(r=null==t?null:"function"==typeof t?t:Co(+t),s):r},s.startAngle=function(t){return arguments.length?(i="function"==typeof t?t:Co(+t),s):i},s.endAngle=function(t){return arguments.length?(a="function"==typeof t?t:Co(+t),s):a},s.padAngle=function(t){return arguments.length?(o="function"==typeof t?t:Co(+t),s):o},s.context=function(t){return arguments.length?(l=null==t?null:t,s):l},s}function Wo(t){return"object"==typeof t&&"length"in t?t:Array.from(t)}function jo(t){this._context=t}function qo(t){return new jo(t)}function Go(t){return t[0]}function Qo(t){return t[1]}function Zo(t,e){return e<t?-1:e>t?1:e>=t?0:NaN}function Ko(t){return t}function Jo(t,e,n){this.k=t,this.x=e,this.y=n}var tl,el,nl;jo.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:this._context.lineTo(t,e)}}},Jo.prototype={constructor:Jo,scale:function(t){return 1===t?this:new Jo(this.k*t,this.x,this.y)},translate:function(t,e){return 0===t&0===e?this:new Jo(this.k,this.x+this.k*t,this.y+this.k*e)},apply:function(t){return[t[0]*this.k+this.x,t[1]*this.k+this.y]},applyX:function(t){return t*this.k+this.x},applyY:function(t){return t*this.k+this.y},invert:function(t){return[(t[0]-this.x)/this.k,(t[1]-this.y)/this.k]},invertX:function(t){return(t-this.x)/this.k},invertY:function(t){return(t-this.y)/this.k},rescaleX:function(t){return t.copy().domain(t.range().map(this.invertX,this).map(t.invert,t))},rescaleY:function(t){return t.copy().domain(t.range().map(this.invertY,this).map(t.invert,t))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}},Jo.prototype,function(t){t[t.Tag=0]="Tag",t[t.Frontmatter=1]="Frontmatter",t[t.Wiki=2]="Wiki",t[t.WikiLink=3]="WikiLink",t[t.WikiDisplay=4]="WikiDisplay",t[t.Text=5]="Text",t[t.dvField=6]="dvField",t[t.Table=7]="Table",t[t.FileMeta=8]="FileMeta",t[t.Task=9]="Task",t[t.TaskDone=10]="TaskDone",t[t.TaskNotDone=11]="TaskNotDone"}(tl||(tl={})),function(t){t[t.Line=0]="Line",t[t.Bar=1]="Bar",t[t.Pie=2]="Pie",t[t.Radar=3]="Radar",t[t.Summary=4]="Summary",t[t.Table=5]="Table",t[t.Month=6]="Month",t[t.Heatmap=7]="Heatmap",t[t.Bullet=8]="Bullet",t[t.Unknown=9]="Unknown"}(el||(el={})),function(t){t[t.Number=0]="Number",t[t.Int=1]="Int",t[t.Date=2]="Date",t[t.Time=3]="Time",t[t.DateTime=4]="DateTime",t[t.String=5]="String"}(nl||(nl={}));class rl{constructor(t,e){this.date=t,this.value=e}}class il{constructor(t,e,n){if(this.type=e,this.target=n,this.separator="",this.id=t,this.accessor=-1,this.accessor1=-1,this.accessor2=-1,this.valueType=nl.Number,this.usedAsXDataset=!1,this.numTargets=0,e===tl.Table){let t,e=new RegExp("\\[(?<accessor>[0-9]+)\\]\\[(?<accessor1>[0-9]+)\\](\\[(?<accessor2>[0-9]+)\\])?","gm");for(;t=e.exec(n);)if(void 0!==t.groups.accessor){let r=parseFloat(t.groups.accessor);if(Number.isNumber(r)&&void 0!==t.groups.accessor1){let i=parseFloat(t.groups.accessor1);if(Number.isNumber(i)){let a;void 0!==t.groups.accessor2&&(a=parseFloat(t.groups.accessor2)),this.accessor=r,this.accessor1=i,Number.isNumber(a)&&(this.accessor2=a),this.parentTarget=n.replace(e,"")}break}}}else{let t,e=new RegExp("\\[(?<accessor>[0-9]+)\\]","gm");for(;t=e.exec(n);)if(void 0!==t.groups.accessor){let r=parseFloat(t.groups.accessor);Number.isNumber(r)&&(this.accessor=r,this.parentTarget=n.replace(e,""));break}}}equalTo(t){return this.type===t.type&&this.target===t.target}getType(){return this.type}getTarget(){return this.target}getParentTarget(){return this.parentTarget}getId(){return this.id}getAccessor(t=0){switch(t){case 0:return this.accessor;case 1:return this.accessor1;case 2:return this.accessor2}return null}setSeparator(t){this.separator=t}getSeparator(t=!1){return""===this.separator?t?",":"/":this.separator}addNumTargets(t=1){this.numTargets=this.numTargets+t}getNumTargets(){return this.numTargets}}class al{constructor(t,e){this.currentIndex=0,this.name="untitled",this.query=e,this.values=[],this.parent=t,this.id=-1,this.yMin=null,this.yMax=null,this.startDate=null,this.endDate=null,this.numTargets=0,this.lineInfo=null,this.barInfo=null,this.isTmpDataset=!1,this.valueType=null==e?void 0:e.valueType;for(let e=0;e<t.getDates().length;e++)this.values.push(null)}cloneToTmpDataset(){if(!this.isTmpDataset){let t=new al(this.parent,null);return t.name="tmp",t.values=[...this.values],t.yMin=this.yMin,t.yMax=this.yMax,t.startDate=this.startDate.clone(),t.endDate=this.endDate.clone(),t.numTargets=this.numTargets,t.isTmpDataset=!0,t.valueType=this.valueType,t}return this}getName(){return this.name}setName(t){this.name=t}getId(){return this.id}setId(t){this.id=t}addNumTargets(t){this.numTargets=this.numTargets+t}getNumTargets(){return this.numTargets}getValue(t,e=0){let n=this.parent.getIndexOfDate(t)+Math.floor(e);return n>=0&&n<this.values.length?this.values[n]:null}setValue(t,e){let n=this.parent.getIndexOfDate(t);n>=0&&n<this.values.length&&(this.values[n]=e,(null===this.yMin||e<this.yMin)&&(this.yMin=e),(null===this.yMax||e>this.yMax)&&(this.yMax=e),(null===this.startDate||t<this.startDate)&&(this.startDate=t.clone()),(null===this.endDate||t>this.endDate)&&(this.endDate=t.clone()))}recalculateMinMax(){this.yMin=Math.min(...this.values),this.yMax=Math.max(...this.values)}getYMin(){return this.yMin}getYMax(){return this.yMax}getStartDate(){return this.startDate}getEndDate(){return this.endDate}shift(t,e){let n=!1;for(let r=0;r<this.values.length;r++)null!==this.values[r]&&(null===e||this.values[r]>=e)&&(this.values[r]=this.values[r]+t,n=!0);n&&(this.yMin=this.yMin+t,this.yMax=this.yMax+t)}setPenalty(t){for(let e=0;e<this.values.length;e++)null===this.values[e]&&(this.values[e]=t,t<this.yMin&&(this.yMin=t),t>this.yMax&&(this.yMax=t))}getQuery(){return this.query}accumulateValues(){let t=0;for(let e=0;e<this.values.length;e++)null!==this.values[e]&&(t+=this.values[e]),this.values[e]=t,t<this.yMin&&(this.yMin=t),t>this.yMax&&(this.yMax=t)}getValues(){return this.values}getLength(){return this.values.length}getLengthNotNull(){let t=0;for(let e=0;e<this.values.length;e++)null!==this.values[e]&&t++;return t}next(){if(this.currentIndex<this.values.length){let t=this.currentIndex++;return{done:!1,value:new rl(this.parent.getDates()[t],this.values[t])}}return this.currentIndex=0,{done:!0,value:null}}[Symbol.iterator](){return this}}class ol{constructor(t,e){this.currentIndex=0,this.dates=[],this.datasets=[];const n=t.creationData().format.toString();for(let r=t.clone();r<=e;r.add(1,"days")){let t=window.moment(r.format(n),n,!0);this.dates.push(t)}}createDataset(t,e){let n=new al(this,t);return n.setId(t.getId()),e&&n.setName(e.datasetName[t.getId()]),this.datasets.push(n),n}getIndexOfDate(t){const e=t.creationData().format.toString();for(let n=0;n<this.dates.length;n++)if(this.dates[n].format(e)===t.format(e))return n;return-1}getDatasetByQuery(t){for(let e of this.datasets)if(e.getQuery().equalTo(t))return e;return null}getDatasetById(t){for(let e of this.datasets)if(e.getId()===t)return e;return null}getXDatasetIds(){let t=[];for(let e of this.datasets)if(e.getQuery().usedAsXDataset){let n=e.getQuery().getId();t.includes(n)||-1===n||t.push(n)}return t}getDates(){return this.dates}getNames(){let t=[];for(let e of this.datasets)t.push(e.getName());return t}next(){return this.currentIndex<this.datasets.length?{done:!1,value:this.datasets[this.currentIndex++]}:(this.currentIndex=0,{done:!0,value:null})}[Symbol.iterator](){return this}}class ll{constructor(t){this.queries=t,this.xDataset=[],this.folder="/",this.file=[],this.specifiedFilesOnly=!1,this.fileContainsLinkedFiles=[],this.fileMultiplierAfterLink="",this.dateFormat="YYYY-MM-DD",this.dateFormatPrefix="",this.dateFormatSuffix="",this.startDate=null,this.endDate=null,this.datasetName=[],this.constValue=[1],this.ignoreAttachedValue=[],this.ignoreZeroValue=[],this.accum=[],this.penalty=[],this.valueShift=[],this.shiftOnlyValueLargerThan=[],this.valueType=[],this.textValueMap={},this.dataAreaSize=new ml(300,300),this.aspectRatio=new vl(1,1),this.margin=new xl(10,10,10,10),this.fixedScale=1,this.fitPanelWidth=!1,this.output=[],this.line=[],this.bar=[],this.pie=[],this.summary=[],this.month=[],this.heatmap=[],this.bullet=[],this.customDataset=[],this.datasets=null}getQueryById(t){for(let e of this.queries)if(e.getId()===t)return e}}class ul{constructor(){this.id=-1,this.name="",this.xData=[],this.yData=[]}}class sl{constructor(){this.title="",this.xAxisLabel="Date",this.xAxisColor="",this.xAxisLabelColor="",this.yAxisLabel=[],this.yAxisColor=[],this.yAxisLabelColor=[],this.yAxisUnit=[],this.xAxisTickInterval=null,this.yAxisTickInterval=[],this.xAxisTickLabelFormat=null,this.yAxisTickLabelFormat=[],this.yMin=[],this.yMax=[],this.reverseYAxis=[],this.allowInspectData=!0,this.showLegend=!1,this.legendPosition="",this.legendOrientation="",this.legendBgColor="",this.legendBorderColor=""}GetGraphType(){return el.Unknown}}class fl extends sl{constructor(){super(),this.lineColor=[],this.lineWidth=[],this.showLine=[],this.showPoint=[],this.pointColor=[],this.pointBorderColor=[],this.pointBorderWidth=[],this.pointSize=[],this.fillGap=[],this.yAxisLocation=[]}GetGraphType(){return el.Line}}class cl extends sl{constructor(){super(),this.barColor=[],this.yAxisLocation=[]}GetGraphType(){return el.Bar}}class hl{constructor(){this.title="",this.data=[],this.dataColor=[],this.dataName=[],this.label=[],this.hideLabelLessThan=.03,this.extLabel=[],this.showExtLabelOnlyIfNoLabel=!1,this.ratioInnerRadius=0,this.showLegend=!1,this.legendPosition="",this.legendOrientation="",this.legendBgColor="",this.legendBorderColor=""}GetGraphType(){return el.Pie}}class dl{constructor(){this.template="",this.style=""}GetGraphType(){return el.Summary}}class gl{constructor(){this.mode="circle",this.dataset=[],this.startWeekOn="Sun",this.threshold=[],this.yMin=[],this.yMax=[],this.color=null,this.dimNotInMonth=!0,this.initMonth="",this.showSelectedValue=!0,this.headerYearColor=null,this.headerMonthColor=null,this.dividingLineColor=null,this.showCircle=!0,this.showStreak=!0,this.showTodayRing=!0,this.showSelectedRing=!0,this.circleColor=null,this.circleColorByValue=!1,this.todayRingColor="",this.selectedRingColor="firebrick",this.showAnnotation=!0,this.annotation=[],this.showAnnotationOfAllTargets=!0,this.selectedDate="",this.selectedDataset=null}GetGraphType(){return el.Month}}class pl{constructor(){this.dataset="0",this.startWeekOn="Sun",this.orientation="vertical",this.yMin=null,this.yMax=null,this.color=null}GetGraphType(){return el.Heatmap}}class yl{constructor(){this.title="",this.dataset="0",this.orientation="horizontal",this.value="",this.valueUnit="",this.valueColor="#69b3a2",this.range=[],this.rangeColor=[],this.showMarker=!1,this.markerValue=0,this.markerColor=""}GetGraphType(){return el.Bullet}}class ml{constructor(t,e){this.width=t,this.height=e}}class vl{constructor(t,e){this.x=t,this.y=e}recalculateSize(t){let e=this.x/this.y,n=parseFloat((t.width*e).toFixed(2));return new ml(n,t.height)}}class xl{constructor(t,e,n,r){this.top=t,this.right=e,this.bottom=n,this.left=r}}class Al{constructor(t){if(this.translateX=0,this.translateY=0,"string"==typeof t){let e=t.match(/translate\(\s*(?<x>[\d\.\/-]+)\s*,\s*(?<y>[\d\.\/-]+)\s*\)/).groups;e&&(this.translateX=parseFloat(e.x),this.translateY=parseFloat(e.y))}}}class wl{constructor(t,e){this.filePath=t,this.tableIndex=e,this.xDataset=null,this.yDatasets=[]}}class bl{constructor(){this.fileTotal=0,this.fileAvailable=0,this.fileOutOfDateRange=0,this.fileNotInFormat=0,this.errorMessage="",this.minDate=window.moment(""),this.maxDate=window.moment(""),this.gotAnyValidXValue=!1,this.gotAnyValidYValue=!1}}const Dl=function(){const t=["HH","H","hh","h"],e=["mm","m"],n=["ss","s",""];let r=[];for(let i of t)for(let t of e)for(let e of n){let n=`${i}:${t}`;""!==e&&(n+=`:${e}`),i.contains("h")&&(n+=" a"),r.push(n)}return r}();function kl(t,e,n){if(!e&&!n)return t;let r=t;if(r.startsWith("^")&&(r=r.slice(1)),e){let t=new RegExp("^("+e+")","gm");t.test(r)&&(r=r.replace(t,""))}if(n){let t=new RegExp("("+n+")$","gm");t.test(r)&&(r=r.replace(t,""))}return r}function Cl(t,e){let n=e;t.length>4&&t.startsWith("[[")&&t.endsWith("]]")&&(t=t.substring(2,t.length-2)),"iso-8601"===e.toLowerCase()&&(n=window.moment.ISO_8601);let r=window.moment(t,n,!0);return r=r.startOf("day"),r}function Ml(t,e,n=!0){if(!t||!e||0===e.length)return[null,t];let r=null;const i="^(?<value>[0-9]+)("+e.join("|")+")$",a=new RegExp(i,"gm");let o=a.exec(t);return o&&void 0!==o.groups&&void 0!==o.groups.value&&(r=parseFloat(o.groups.value),Number.isNumber(r)&&!Number.isNaN(r))?(n&&(t=t.replace(a,"")),[r,t]):[null,t]}function Tl(t){if(!t)return null;let e=window.moment.duration(0),n=!1,r=!1;t.startsWith("+")&&(r=!1,t=t.substring(1)),t.startsWith("-")&&(r=!0,t=t.substring(1));let i=null;[i,t]=Ml(t,["year","years","Y","y"]),null!==i&&(r&&(i*=-1),e.add(i,"years"),n=!0);let a=null;[a,t]=Ml(t,["month","months","M"]),null!==a&&(r&&(a*=-1),e.add(a,"months"),n=!0);let o=null;[o,t]=Ml(t,["week","weeks","W","w"]),null!==o&&(r&&(o*=-1),e.add(o,"weeks"),n=!0);let l=null;[l,t]=Ml(t,["day","days","D","d"]),null!==l&&(r&&(l*=-1),e.add(l,"days"),n=!0);let u=null;[u,t]=Ml(t,["hour","hours","H","h"]),null!==u&&(r&&(u*=-1),e.add(u,"hours"),n=!0);let s=null;[s,t]=Ml(t,["minute","minutes","m"]),null!==s&&(r&&(s*=-1),e.add(s,"minutes"),n=!0);let f=null;return[f,t]=Ml(t,["second","seconds","S","s"]),null!==f&&(r&&(f*=-1),e.add(f,"seconds"),n=!0),n?e:null}function _l(t,e){let n=null,r=Tl(t);return r&&window.moment.isDuration(r)&&(n=Sl(e),n=n.add(r),n&&n.isValid()),n}function El(t,e){return null==t?null:"iso-8601"===e.toLowerCase()?t.format():t.format(e)}function Fl(t,e){return Cl(El(window.moment(t),e),e)}function Sl(t){return Cl(El(window.moment(),t),t)}function Bl(t,e){for(var n=(e=e.replace(/^\./,"")).split("."),r=0,i=n.length;r<i;++r){var a=n[r];if(!(a in t))return null;t=t[a]}return"string"==typeof t||Array.isArray(t)?t:"number"==typeof t||"boolean"==typeof t?t.toString():null}function Nl(t,e){const n=Array.from(t),r=n.findIndex((t=>t!==e)),i=n.reverse().findIndex((t=>t!==e));return-1===r&&-1===i?t:t.substring(r,t.length-i)}function Il(t){if(null===t)return null;let e=new RegExp('<img[^>]*?alt\\s*=\\s*[""\']?(?<emoji>[^\'"" >]+?)[ \'""][^>]*?>',"g");return t.replace(e,((...t)=>{let e=t[t.length-1];return e&&e.emoji?e.emoji.trim():""}))}function Ll(t,e=null){let n=null,r=nl.Number;if("string"==typeof t)if(t.includes(":")){let e=!1;t.startsWith("-")&&(e=!0,t=t.substring(1));let i=window.moment(t,Dl,!0);i.isValid()&&(n=i.diff(window.moment("00:00","HH:mm",!0),"seconds"),e&&(n*=-1),r=nl.Time)}else if(e){const r=Object.keys(e);for(let n of r)if("string"==typeof n){let r=new RegExp(n,"gm");if(r.test(t)&&Number.isNumber(e[n])){let i=e[n].toString();t=t.replace(r,i);break}}n=parseFloat(t),Number.isNaN(n)&&(n=null)}else n=parseFloat(t),Number.isNaN(n)&&(n=null);else"number"==typeof t&&(n=t);return{type:r,value:n}}function Vl(t,e="",n=""){var r=ee("body").append("svg");let i=r.append("text").text(t).attr("x",-99999).attr("y",-99999);e&&i.attr("class",e),n&&i.attr("transform","rotate("+n+")");var a=r.node().getBBox();return r.remove(),{width:a.width,height:a.height}}function Ol(t,e,n){let r=(0|parseFloat(t.attr("width")))+e,i=(0|parseFloat(t.attr("height")))+n;t.attr("width",r),t.attr("height",i)}function Pl(t,e,n){let r=new Al(t.attr("transform"));t.attr("transform","translate("+(r.translateX+e)+","+(r.translateY+n)+")")}function $l(t){return t=(t=(t=t.replace(/(^\\s\*)|(\\s\*$)/gi,"")).replace(/\[ \]{2,}/gi," ")).replace(/\\n /,"\\n")}class Yl{static get version(){return"1.3.8"}static toString(){return"JavaScript Expression Parser (JSEP) v"+Yl.version}static addUnaryOp(t){return Yl.max_unop_len=Math.max(t.length,Yl.max_unop_len),Yl.unary_ops[t]=1,Yl}static addBinaryOp(t,e,n){return Yl.max_binop_len=Math.max(t.length,Yl.max_binop_len),Yl.binary_ops[t]=e,n?Yl.right_associative.add(t):Yl.right_associative.delete(t),Yl}static addIdentifierChar(t){return Yl.additional_identifier_chars.add(t),Yl}static addLiteral(t,e){return Yl.literals[t]=e,Yl}static removeUnaryOp(t){return delete Yl.unary_ops[t],t.length===Yl.max_unop_len&&(Yl.max_unop_len=Yl.getMaxKeyLen(Yl.unary_ops)),Yl}static removeAllUnaryOps(){return Yl.unary_ops={},Yl.max_unop_len=0,Yl}static removeIdentifierChar(t){return Yl.additional_identifier_chars.delete(t),Yl}static removeBinaryOp(t){return delete Yl.binary_ops[t],t.length===Yl.max_binop_len&&(Yl.max_binop_len=Yl.getMaxKeyLen(Yl.binary_ops)),Yl.right_associative.delete(t),Yl}static removeAllBinaryOps(){return Yl.binary_ops={},Yl.max_binop_len=0,Yl}static removeLiteral(t){return delete Yl.literals[t],Yl}static removeAllLiterals(){return Yl.literals={},Yl}get char(){return this.expr.charAt(this.index)}get code(){return this.expr.charCodeAt(this.index)}constructor(t){this.expr=t,this.index=0}static parse(t){return new Yl(t).parse()}static getMaxKeyLen(t){return Math.max(0,...Object.keys(t).map((t=>t.length)))}static isDecimalDigit(t){return t>=48&&t<=57}static binaryPrecedence(t){return Yl.binary_ops[t]||0}static isIdentifierStart(t){return t>=65&&t<=90||t>=97&&t<=122||t>=128&&!Yl.binary_ops[String.fromCharCode(t)]||Yl.additional_identifier_chars.has(String.fromCharCode(t))}static isIdentifierPart(t){return Yl.isIdentifierStart(t)||Yl.isDecimalDigit(t)}throwError(t){const e=new Error(t+" at character "+this.index);throw e.index=this.index,e.description=t,e}runHook(t,e){if(Yl.hooks[t]){const n={context:this,node:e};return Yl.hooks.run(t,n),n.node}return e}searchHook(t){if(Yl.hooks[t]){const e={context:this};return Yl.hooks[t].find((function(t){return t.call(e.context,e),e.node})),e.node}}gobbleSpaces(){let t=this.code;for(;t===Yl.SPACE_CODE||t===Yl.TAB_CODE||t===Yl.LF_CODE||t===Yl.CR_CODE;)t=this.expr.charCodeAt(++this.index);this.runHook("gobble-spaces")}parse(){this.runHook("before-all");const t=this.gobbleExpressions(),e=1===t.length?t[0]:{type:Yl.COMPOUND,body:t};return this.runHook("after-all",e)}gobbleExpressions(t){let e,n,r=[];for(;this.index<this.expr.length;)if(e=this.code,e===Yl.SEMCOL_CODE||e===Yl.COMMA_CODE)this.index++;else if(n=this.gobbleExpression())r.push(n);else if(this.index<this.expr.length){if(e===t)break;this.throwError('Unexpected "'+this.char+'"')}return r}gobbleExpression(){const t=this.searchHook("gobble-expression")||this.gobbleBinaryExpression();return this.gobbleSpaces(),this.runHook("after-expression",t)}gobbleBinaryOp(){this.gobbleSpaces();let t=this.expr.substr(this.index,Yl.max_binop_len),e=t.length;for(;e>0;){if(Yl.binary_ops.hasOwnProperty(t)&&(!Yl.isIdentifierStart(this.code)||this.index+t.length<this.expr.length&&!Yl.isIdentifierPart(this.expr.charCodeAt(this.index+t.length))))return this.index+=e,t;t=t.substr(0,--e)}return!1}gobbleBinaryExpression(){let t,e,n,r,i,a,o,l,u;if(a=this.gobbleToken(),!a)return a;if(e=this.gobbleBinaryOp(),!e)return a;for(i={value:e,prec:Yl.binaryPrecedence(e),right_a:Yl.right_associative.has(e)},o=this.gobbleToken(),o||this.throwError("Expected expression after "+e),r=[a,i,o];e=this.gobbleBinaryOp();){if(n=Yl.binaryPrecedence(e),0===n){this.index-=e.length;break}i={value:e,prec:n,right_a:Yl.right_associative.has(e)},u=e;const l=t=>i.right_a&&t.right_a?n>t.prec:n<=t.prec;for(;r.length>2&&l(r[r.length-2]);)o=r.pop(),e=r.pop().value,a=r.pop(),t={type:Yl.BINARY_EXP,operator:e,left:a,right:o},r.push(t);t=this.gobbleToken(),t||this.throwError("Expected expression after "+u),r.push(i,t)}for(l=r.length-1,t=r[l];l>1;)t={type:Yl.BINARY_EXP,operator:r[l-1].value,left:r[l-2],right:t},l-=2;return t}gobbleToken(){let t,e,n,r;if(this.gobbleSpaces(),r=this.searchHook("gobble-token"),r)return this.runHook("after-token",r);if(t=this.code,Yl.isDecimalDigit(t)||t===Yl.PERIOD_CODE)return this.gobbleNumericLiteral();if(t===Yl.SQUOTE_CODE||t===Yl.DQUOTE_CODE)r=this.gobbleStringLiteral();else if(t===Yl.OBRACK_CODE)r=this.gobbleArray();else{for(e=this.expr.substr(this.index,Yl.max_unop_len),n=e.length;n>0;){if(Yl.unary_ops.hasOwnProperty(e)&&(!Yl.isIdentifierStart(this.code)||this.index+e.length<this.expr.length&&!Yl.isIdentifierPart(this.expr.charCodeAt(this.index+e.length)))){this.index+=n;const t=this.gobbleToken();return t||this.throwError("missing unaryOp argument"),this.runHook("after-token",{type:Yl.UNARY_EXP,operator:e,argument:t,prefix:!0})}e=e.substr(0,--n)}Yl.isIdentifierStart(t)?(r=this.gobbleIdentifier(),Yl.literals.hasOwnProperty(r.name)?r={type:Yl.LITERAL,value:Yl.literals[r.name],raw:r.name}:r.name===Yl.this_str&&(r={type:Yl.THIS_EXP})):t===Yl.OPAREN_CODE&&(r=this.gobbleGroup())}return r?(r=this.gobbleTokenProperty(r),this.runHook("after-token",r)):this.runHook("after-token",!1)}gobbleTokenProperty(t){this.gobbleSpaces();let e=this.code;for(;e===Yl.PERIOD_CODE||e===Yl.OBRACK_CODE||e===Yl.OPAREN_CODE||e===Yl.QUMARK_CODE;){let n;if(e===Yl.QUMARK_CODE){if(this.expr.charCodeAt(this.index+1)!==Yl.PERIOD_CODE)break;n=!0,this.index+=2,this.gobbleSpaces(),e=this.code}this.index++,e===Yl.OBRACK_CODE?(t={type:Yl.MEMBER_EXP,computed:!0,object:t,property:this.gobbleExpression()},this.gobbleSpaces(),e=this.code,e!==Yl.CBRACK_CODE&&this.throwError("Unclosed ["),this.index++):e===Yl.OPAREN_CODE?t={type:Yl.CALL_EXP,arguments:this.gobbleArguments(Yl.CPAREN_CODE),callee:t}:(e===Yl.PERIOD_CODE||n)&&(n&&this.index--,this.gobbleSpaces(),t={type:Yl.MEMBER_EXP,computed:!1,object:t,property:this.gobbleIdentifier()}),n&&(t.optional=!0),this.gobbleSpaces(),e=this.code}return t}gobbleNumericLiteral(){let t,e,n="";for(;Yl.isDecimalDigit(this.code);)n+=this.expr.charAt(this.index++);if(this.code===Yl.PERIOD_CODE)for(n+=this.expr.charAt(this.index++);Yl.isDecimalDigit(this.code);)n+=this.expr.charAt(this.index++);if(t=this.char,"e"===t||"E"===t){for(n+=this.expr.charAt(this.index++),t=this.char,"+"!==t&&"-"!==t||(n+=this.expr.charAt(this.index++));Yl.isDecimalDigit(this.code);)n+=this.expr.charAt(this.index++);Yl.isDecimalDigit(this.expr.charCodeAt(this.index-1))||this.throwError("Expected exponent ("+n+this.char+")")}return e=this.code,Yl.isIdentifierStart(e)?this.throwError("Variable names cannot start with a number ("+n+this.char+")"):(e===Yl.PERIOD_CODE||1===n.length&&n.charCodeAt(0)===Yl.PERIOD_CODE)&&this.throwError("Unexpected period"),{type:Yl.LITERAL,value:parseFloat(n),raw:n}}gobbleStringLiteral(){let t="";const e=this.index,n=this.expr.charAt(this.index++);let r=!1;for(;this.index<this.expr.length;){let e=this.expr.charAt(this.index++);if(e===n){r=!0;break}if("\\"===e)switch(e=this.expr.charAt(this.index++),e){case"n":t+="\n";break;case"r":t+="\r";break;case"t":t+="\t";break;case"b":t+="\b";break;case"f":t+="\f";break;case"v":t+="\v";break;default:t+=e}else t+=e}return r||this.throwError('Unclosed quote after "'+t+'"'),{type:Yl.LITERAL,value:t,raw:this.expr.substring(e,this.index)}}gobbleIdentifier(){let t=this.code,e=this.index;for(Yl.isIdentifierStart(t)?this.index++:this.throwError("Unexpected "+this.char);this.index<this.expr.length&&(t=this.code,Yl.isIdentifierPart(t));)this.index++;return{type:Yl.IDENTIFIER,name:this.expr.slice(e,this.index)}}gobbleArguments(t){const e=[];let n=!1,r=0;for(;this.index<this.expr.length;){this.gobbleSpaces();let i=this.code;if(i===t){n=!0,this.index++,t===Yl.CPAREN_CODE&&r&&r>=e.length&&this.throwError("Unexpected token "+String.fromCharCode(t));break}if(i===Yl.COMMA_CODE){if(this.index++,r++,r!==e.length)if(t===Yl.CPAREN_CODE)this.throwError("Unexpected token ,");else if(t===Yl.CBRACK_CODE)for(let t=e.length;t<r;t++)e.push(null)}else if(e.length!==r&&0!==r)this.throwError("Expected comma");else{const t=this.gobbleExpression();t&&t.type!==Yl.COMPOUND||this.throwError("Expected comma"),e.push(t)}}return n||this.throwError("Expected "+String.fromCharCode(t)),e}gobbleGroup(){this.index++;let t=this.gobbleExpressions(Yl.CPAREN_CODE);if(this.code===Yl.CPAREN_CODE)return this.index++,1===t.length?t[0]:!!t.length&&{type:Yl.SEQUENCE_EXP,expressions:t};this.throwError("Unclosed (")}gobbleArray(){return this.index++,{type:Yl.ARRAY_EXP,elements:this.gobbleArguments(Yl.CBRACK_CODE)}}}const zl=new class{add(t,e,n){if("string"!=typeof arguments[0])for(let t in arguments[0])this.add(t,arguments[0][t],arguments[1]);else(Array.isArray(t)?t:[t]).forEach((function(t){this[t]=this[t]||[],e&&this[t][n?"unshift":"push"](e)}),this)}run(t,e){this[t]=this[t]||[],this[t].forEach((function(t){t.call(e&&e.context?e.context:e,e)}))}};Object.assign(Yl,{hooks:zl,plugins:new class{constructor(t){this.jsep=t,this.registered={}}register(...t){t.forEach((t=>{if("object"!=typeof t||!t.name||!t.init)throw new Error("Invalid JSEP plugin format");this.registered[t.name]||(t.init(this.jsep),this.registered[t.name]=t)}))}}(Yl),COMPOUND:"Compound",SEQUENCE_EXP:"SequenceExpression",IDENTIFIER:"Identifier",MEMBER_EXP:"MemberExpression",LITERAL:"Literal",THIS_EXP:"ThisExpression",CALL_EXP:"CallExpression",UNARY_EXP:"UnaryExpression",BINARY_EXP:"BinaryExpression",ARRAY_EXP:"ArrayExpression",TAB_CODE:9,LF_CODE:10,CR_CODE:13,SPACE_CODE:32,PERIOD_CODE:46,COMMA_CODE:44,SQUOTE_CODE:39,DQUOTE_CODE:34,OPAREN_CODE:40,CPAREN_CODE:41,OBRACK_CODE:91,CBRACK_CODE:93,QUMARK_CODE:63,SEMCOL_CODE:59,COLON_CODE:58,unary_ops:{"-":1,"!":1,"~":1,"+":1},binary_ops:{"||":1,"&&":2,"|":3,"^":4,"&":5,"==":6,"!=":6,"===":6,"!==":6,"<":7,">":7,"<=":7,">=":7,"<<":8,">>":8,">>>":8,"+":9,"-":9,"*":10,"/":10,"%":10},right_associative:new Set,additional_identifier_chars:new Set(["$","_"]),literals:{true:!0,false:!1,null:null},this_str:"this"}),Yl.max_unop_len=Yl.getMaxKeyLen(Yl.unary_ops),Yl.max_binop_len=Yl.getMaxKeyLen(Yl.binary_ops);const Rl=t=>new Yl(t).parse();Object.getOwnPropertyNames(Yl).forEach((t=>{void 0===Rl[t]&&"prototype"!==t&&(Rl[t]=Yl[t])})),Rl.Jsep=Yl;var Ul={name:"ternary",init(t){t.hooks.add("after-expression",(function(e){if(e.node&&this.code===t.QUMARK_CODE){this.index++;const n=e.node,r=this.gobbleExpression();if(r||this.throwError("Expected expression"),this.gobbleSpaces(),this.code===t.COLON_CODE){this.index++;const i=this.gobbleExpression();if(i||this.throwError("Expected expression"),e.node={type:"ConditionalExpression",test:n,consequent:r,alternate:i},n.operator&&t.binary_ops[n.operator]<=.9){let r=n;for(;r.right.operator&&t.binary_ops[r.right.operator]<=.9;)r=r.right;e.node.test=r.right,r.right=e.node,e.node=n}}else this.throwError("Expected :")}}))}};Rl.plugins.register(Ul);var Hl,Xl={};function Wl(t){if("number"==typeof t){if(0===t)return!1}else if(t instanceof al&&t.getValues().some((function(t){return 0===t})))return!1;return!0}Hl=Xl,function(){var t={not_string:/[^s]/,not_bool:/[^t]/,not_type:/[^T]/,not_primitive:/[^v]/,number:/[diefg]/,numeric_arg:/[bcdiefguxX]/,json:/[j]/,not_json:/[^j]/,text:/^[^\x25]+/,modulo:/^\x25{2}/,placeholder:/^\x25(?:([1-9]\d*)\$|\(([^)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-gijostTuvxX])/,key:/^([a-z_][a-z_\d]*)/i,key_access:/^\.([a-z_][a-z_\d]*)/i,index_access:/^\[(\d+)\]/,sign:/^[+-]/};function e(n){return function(n,r){var i,a,o,l,u,s,f,c,h,d=1,g=n.length,p="";for(a=0;a<g;a++)if("string"==typeof n[a])p+=n[a];else if("object"==typeof n[a]){if((l=n[a]).keys)for(i=r[d],o=0;o<l.keys.length;o++){if(null==i)throw new Error(e('[sprintf] Cannot access property "%s" of undefined value "%s"',l.keys[o],l.keys[o-1]));i=i[l.keys[o]]}else i=l.param_no?r[l.param_no]:r[d++];if(t.not_type.test(l.type)&&t.not_primitive.test(l.type)&&i instanceof Function&&(i=i()),t.numeric_arg.test(l.type)&&"number"!=typeof i&&isNaN(i))throw new TypeError(e("[sprintf] expecting number but found %T",i));switch(t.number.test(l.type)&&(c=i>=0),l.type){case"b":i=parseInt(i,10).toString(2);break;case"c":i=String.fromCharCode(parseInt(i,10));break;case"d":case"i":i=parseInt(i,10);break;case"j":i=JSON.stringify(i,null,l.width?parseInt(l.width):0);break;case"e":i=l.precision?parseFloat(i).toExponential(l.precision):parseFloat(i).toExponential();break;case"f":i=l.precision?parseFloat(i).toFixed(l.precision):parseFloat(i);break;case"g":i=l.precision?String(Number(i.toPrecision(l.precision))):parseFloat(i);break;case"o":i=(parseInt(i,10)>>>0).toString(8);break;case"s":i=String(i),i=l.precision?i.substring(0,l.precision):i;break;case"t":i=String(!!i),i=l.precision?i.substring(0,l.precision):i;break;case"T":i=Object.prototype.toString.call(i).slice(8,-1).toLowerCase(),i=l.precision?i.substring(0,l.precision):i;break;case"u":i=parseInt(i,10)>>>0;break;case"v":i=i.valueOf(),i=l.precision?i.substring(0,l.precision):i;break;case"x":i=(parseInt(i,10)>>>0).toString(16);break;case"X":i=(parseInt(i,10)>>>0).toString(16).toUpperCase()}t.json.test(l.type)?p+=i:(!t.number.test(l.type)||c&&!l.sign?h="":(h=c?"+":"-",i=i.toString().replace(t.sign,"")),s=l.pad_char?"0"===l.pad_char?"0":l.pad_char.charAt(1):" ",f=l.width-(h+i).length,u=l.width&&f>0?s.repeat(f):"",p+=l.align?h+i+u:"0"===s?h+u+i:u+h+i)}return p}(function(e){if(r[e])return r[e];for(var n,i=e,a=[],o=0;i;){if(null!==(n=t.text.exec(i)))a.push(n[0]);else if(null!==(n=t.modulo.exec(i)))a.push("%");else{if(null===(n=t.placeholder.exec(i)))throw new SyntaxError("[sprintf] unexpected placeholder");if(n[2]){o|=1;var l=[],u=n[2],s=[];if(null===(s=t.key.exec(u)))throw new SyntaxError("[sprintf] failed to parse named argument key");for(l.push(s[1]);""!==(u=u.substring(s[0].length));)if(null!==(s=t.key_access.exec(u)))l.push(s[1]);else{if(null===(s=t.index_access.exec(u)))throw new SyntaxError("[sprintf] failed to parse named argument key");l.push(s[1])}n[2]=l}else o|=2;if(3===o)throw new Error("[sprintf] mixing positional and named placeholders is not (yet) supported");a.push({placeholder:n[0],param_no:n[1],keys:n[2],sign:n[3],pad_char:n[4],align:n[5],width:n[6],precision:n[7],type:n[8]})}i=i.substring(n[0].length)}return r[e]=a}(n),arguments)}function n(t,n){return e.apply(null,[t].concat(n||[]))}var r=Object.create(null);Hl.sprintf=e,Hl.vsprintf=n,"undefined"!=typeof window&&(window.sprintf=e,window.vsprintf=n)}();const jl={min:function(t,e){return v(t.getValues())},minDate:function(t,e){let n=v(t.getValues());if(Number.isNumber(n)){let e=Array.from(t);for(let t of e.reverse())if(null!==t.value&&t.value===n)return t.date}return"Error: min not found"},max:function(t,e){return m(t.getValues())},maxDate:function(t,e){let n=m(t.getValues());if(Number.isNumber(n)){let e=Array.from(t);for(let t of e.reverse())if(null!==t.value&&t.value===n)return t.date}return"Error: max not found"},startDate:function(t,e){if(t){let e=t.getStartDate();if(e&&e.isValid())return e}return e.startDate},endDate:function(t,e){if(t){let e=t.getEndDate();if(e&&e.isValid())return e}return e.endDate},sum:function(t,e){return D(t.getValues())},count:function(t,e){return"Error: deprecated function 'count'"},numTargets:function(t,e){return t.getNumTargets()},days:function(t,e){return"Error: deprecated function 'days'"},numDays:function(t,e){return t.getLength()},numDaysHavingData:function(t,e){return t.getLengthNotNull()},maxStreak:function(t,e){let n=0,r=0;for(let e of t)e.value?n++:n=0,n>=r&&(r=n);return r},maxStreakStart:function(t,e){let n=0,r=0,i=null,a=null;if(t)for(let e of t)e.value?(0===n&&(i=e.date),n++):n=0,n>=r&&(r=n,a=i);return a},maxStreakEnd:function(t,e){let n=0,r=0,i=null,a=null;if(t){let e=Array.from(t);for(let t=0;t<e.length;t++){let o=e[t],l=null;t<e.length-1&&(l=e[t+1]),o.value?(n++,(null==l?void 0:l.value)||(i=o.date)):n=0,n>=r&&(r=n,a=i)}}return a},maxBreaks:function(t,e){let n=0,r=0;for(let e of t)e.value?n=0:n++,n>r&&(r=n);return r},maxBreaksStart:function(t,e){let n=0,r=0,i=null,a=null;if(t)for(let e of t)e.value?n=0:(0===n&&(i=e.date),n++),n>=r&&(r=n,a=i);return a},maxBreaksEnd:function(t,e){let n=0,r=0,i=null,a=null;if(t){let e=Array.from(t);for(let t=0;t<e.length;t++){let o=e[t],l=null;t<e.length-1&&(l=e[t+1]),o.value?n=0:(n++,(null==l?void 0:l.value)&&(i=o.date)),n>=r&&(r=n,a=i)}}return a},lastStreak:function(t,e){return"Error: deprecated function 'lastStreak'"},currentStreak:function(t,e){let n=0;if(t){let e=Array.from(t);for(let t=e.length-1;t>=0;t--){if(!e[t].value)break;n++}}return n},currentStreakStart:function(t,e){let n=null;if(t){let e=Array.from(t);for(let t=e.length-1;t>=0;t--){let r=e[t];if(t<e.length-1&&(n=e[t+1].date),!r.value)break}}return null===n?"Error: absense":n},currentStreakEnd:function(t,e){let n=0,r=null;if(t){let e=Array.from(t);for(let t=e.length-1;t>=0;t--){let i=e[t];if(!i.value)break;0===n&&(r=i.date),n++}}return null===r?"Error: absense":r},currentBreaks:function(t,e){let n=0;if(t){let e=Array.from(t);for(let t=e.length-1;t>=0;t--){if(e[t].value)break;n++}}return n},currentBreaksStart:function(t,e){let n=null;if(t){let e=Array.from(t);for(let t=e.length-1;t>=0;t--){let r=e[t];if(t<e.length-1&&(n=e[t+1].date),r.value)break}}return null===n?"Error: absense":n},currentBreaksEnd:function(t,e){let n=0,r=null;if(t){let e=Array.from(t);for(let t=e.length-1;t>=0;t--){let i=e[t];if(i.value)break;0===n&&(r=i.date),n++}}return null===r?"Error: absense":r},average:function(t,e){let n=t.getLengthNotNull();return Wl(n)?D(t.getValues())/n:"Error: divide by zero in expression"},median:function(t,e){return w(t.getValues())},variance:function(t,e){return function(t,e){let n,r=0,i=0,a=0;if(void 0===e)for(let e of t)null!=e&&(e=+e)>=e&&(n=e-i,i+=n/++r,a+=n*(e-i));else{let o=-1;for(let l of t)null!=(l=e(l,++o,t))&&(l=+l)>=l&&(n=l-i,i+=n/++r,a+=n*(l-i))}if(r>1)return a/(r-1)}(t.getValues())}},ql={"-":function(t){if("number"==typeof t)return-1*t;if(t instanceof al){let e=t.cloneToTmpDataset();return e.getValues().forEach((function(t,e,n){null!==n[e]&&(n[e]=-1*t)})),e.recalculateMinMax(),e}return"Error: unknown operation for '-'"},"+":function(t){if("number"==typeof t)return t;if(t instanceof al){return t.cloneToTmpDataset()}return"Error: unknown operation for '+'"}},Gl={"+":function(t,e){if("number"==typeof t&&"number"==typeof e)return t+e;if("number"==typeof t&&e instanceof al){let n=e.cloneToTmpDataset();return n.getValues().forEach((function(e,n,r){null!==r[n]?r[n]=t+e:r[n]=null})),n.recalculateMinMax(),n}if(t instanceof al&&"number"==typeof e){let n=t.cloneToTmpDataset();return n.getValues().forEach((function(t,n,r){null!==r[n]?r[n]=t+e:r[n]=null})),n.recalculateMinMax(),n}if(t instanceof al&&e instanceof al){let n=t.cloneToTmpDataset();return n.getValues().forEach((function(t,n,r){null!==r[n]?r[n]=t+e.getValues()[n]:r[n]=null})),n.recalculateMinMax(),n}return"Error: unknown operation for '+'"},"-":function(t,e){if("number"==typeof t&&"number"==typeof e)return t-e;if("number"==typeof t&&e instanceof al){let n=e.cloneToTmpDataset();return n.getValues().forEach((function(e,n,r){null!==r[n]?r[n]=t-e:r[n]=null})),n.recalculateMinMax(),n}if(t instanceof al&&"number"==typeof e){let n=t.cloneToTmpDataset();return n.getValues().forEach((function(t,n,r){null!==r[n]?r[n]=t-e:r[n]=null})),n}if(t instanceof al&&e instanceof al){let n=t.cloneToTmpDataset();return n.getValues().forEach((function(t,n,r){null!==r[n]?r[n]=t-e.getValues()[n]:r[n]=null})),n.recalculateMinMax(),n}return"Error: unknown operation for '-'"},"*":function(t,e){if("number"==typeof t&&"number"==typeof e)return t*e;if("number"==typeof t&&e instanceof al){let n=e.cloneToTmpDataset();return n.getValues().forEach((function(e,n,r){null!==r[n]?r[n]=t*e:r[n]=null})),n.recalculateMinMax(),n}if(t instanceof al&&"number"==typeof e){let n=t.cloneToTmpDataset();return n.getValues().forEach((function(t,n,r){null!==r[n]?r[n]=t*e:r[n]=null})),n.recalculateMinMax(),n}if(t instanceof al&&e instanceof al){let n=t.cloneToTmpDataset();return n.getValues().forEach((function(t,n,r){null!==r[n]?r[n]=t*e.getValues()[n]:r[n]=null})),n.recalculateMinMax(),n}return"Error: unknown operation for '*'"},"/":function(t,e){if(!Wl(e))return"Error: divide by zero in expression";if("number"==typeof t&&"number"==typeof e)return t/e;if("number"==typeof t&&e instanceof al){let n=e.cloneToTmpDataset();return n.getValues().forEach((function(e,n,r){null!==r[n]?r[n]=t/e:r[n]=null})),n.recalculateMinMax(),n}if(t instanceof al&&"number"==typeof e){let n=t.cloneToTmpDataset();return n.getValues().forEach((function(t,n,r){null!==r[n]?r[n]=t/e:r[n]=null})),n.recalculateMinMax(),n}if(t instanceof al&&e instanceof al){let n=t.cloneToTmpDataset();return n.getValues().forEach((function(t,n,r){null!==r[n]?r[n]=t/e.getValues()[n]:r[n]=null})),n.recalculateMinMax(),n}return"Error: unknown operation for '/'"},"%":function(t,e){if(!Wl(e))return"Error: divide by zero in expression";if("number"==typeof t&&"number"==typeof e)return t%e;if("number"==typeof t&&e instanceof al){let n=e.cloneToTmpDataset();return n.getValues().forEach((function(e,n,r){null!==r[n]?r[n]=t%e:r[n]=null})),n.recalculateMinMax(),n}if(t instanceof al&&"number"==typeof e){let n=t.cloneToTmpDataset();return n.getValues().forEach((function(t,n,r){null!==r[n]?r[n]=t%e:r[n]=null})),n.recalculateMinMax(),n}if(t instanceof al&&e instanceof al){let n=t.cloneToTmpDataset();return n.getValues().forEach((function(t,n,r){null!==r[n]?r[n]=t%e.getValues()[n]:r[n]=null})),n.recalculateMinMax(),n}return"Error: unknown operation for '%'"}},Ql={normalize:function(t,e,n){let r=t.getYMin(),i=t.getYMax();if(null!==r&&null!==i&&i>r){let e=t.cloneToTmpDataset();return e.getValues().forEach((function(t,e,n){n[e]=(t-r)/(i-r)})),e.recalculateMinMax(),e}return"Error: invalid data range for function 'normalize'"},setMissingValues:function(t,e,n){if(e&&e.length>0){let n=e[0],r=t.cloneToTmpDataset();return Number.isNumber(n)&&!Number.isNaN(n)?(r.getValues().forEach((function(t,e,r){null===t&&(r[e]=n)})),r.recalculateMinMax(),r):"Error: invalid arguments for function 'setMissingValues'"}return"Error: invalid arguments for function 'setMissingValues"}};function Zl(t,e){switch(t.type){case"Literal":return t.value;case"Identifier":let n=t.name;return n in jl||n in Ql?`Error: deprecated template variable '${n}', use '${n}()' instead`:`Error: unknown function name '${n}'`;case"UnaryExpression":let r=t,i=Zl(r.argument,e);return"string"==typeof i?i:ql[r.operator](i);case"BinaryExpression":let a=t,o=Zl(a.left,e),l=Zl(a.right,e),u=function(t,e){return"string"==typeof t?t:"string"==typeof e?e:"number"==typeof t||window.moment.isMoment(t)||t instanceof al?"number"==typeof e||window.moment.isMoment(e)||e instanceof al?"":"Error: invalide operant type":"Error: invalid operant type"}(o,l);return"string"==typeof u&&u.startsWith("Error:")?u:Gl[a.operator](o,l);case"CallExpression":let s=t,f=s.callee.name,c=function(t,e){return t.map((function(t){return Zl(t,e)}))}(s.arguments,e);if("string"==typeof c)return c;if("dataset"===f){if(1===c.length){let t=c[0];if("string"==typeof t)return t;if("number"!=typeof t)return"Error: function 'dataset' only accepts id in number";let n=function(t,e){return e.datasets.getDatasetById(t)}(t,e);return n||`Error: no dataset found for id '${t}'`}}else{if(f in jl){if(0===c.length){let t=null;for(let n of e.datasets)t||n.getQuery().usedAsXDataset||(t=n);return t?jl[f](t,e):`No available dataset found for function ${f}`}if(1===c.length){let t=c[0];return"string"==typeof t?t:t instanceof al?jl[f](t,e):`Error: function '${f}' only accepts Dataset`}return`Error: Too many arguments for function ${f}`}if(f in Ql){if(1===c.length){if("string"==typeof c[0])return c[0];if(c[0]instanceof al){let t=c[0];return Ql[f](t,null,e)}return`Error: function ${f} only accept Dataset`}if(c.length>1){if("string"==typeof c[0])return c[0];if(c[0]instanceof al){let t=c[0];return Ql[f](t,c.filter((function(t,e,n){return e>0})),e)}return`Error: function ${f} only accept Dataset`}return`Error: Too many arguments for function ${f}`}}return`Error: unknown function name '${f}'`}return"Error: unknown expression"}function Kl(t,e){let n,r=[],i=new RegExp("{{(?<expr>[\\w+\\-*\\/0-9\\s()\\[\\]%.,]+)(::(?<format>[\\w+\\-*\\/0-9\\s()\\[\\]%.:]+))?}}","gm");for(;n=i.exec(t);){let t=n[0];if(!r.some((e=>e.source===t))&&(void 0!==n.groups&&void 0!==n.groups.expr)){let i=n.groups.expr,a=null;try{a=Rl(i)}catch(t){return"Error:"+t.message}if(!a)return"Error: failed to parse expression";const o=Zl(a,e);if("string"==typeof o)return o;if("number"==typeof o||window.moment.isMoment(o)){let e=null;void 0!==n.groups.format&&(e=n.groups.format),r.push({source:t,value:o,format:e})}}}return r}function Jl(t,e){let n=Kl(t,e);if("string"==typeof n)return n;let r=n;for(let n of r){let r=n.source,i=n.value,a=n.format,o="";"number"==typeof i?o=a?Xl.sprintf("%"+a,i):i.toFixed(1):window.moment.isMoment(i)&&(o=El(i,a||e.dateFormat)),o&&(t=t.split(r).join(o))}return t}function tu(t,e){if(t=t.trim(),/^([\-]?[0-9]+[\.][0-9]+|[\-]?[0-9]+)$/.test(t))return parseFloat(t);let n=Kl(t,e);if("string"==typeof n)return n;let r=n;return r.length>0?r[0].value:"Error: failed to resolve values"}function eu(t,e,n,r){let i="",a=.5*n.dataAreaSize.width,o=.7*a,l=o*r.ratioInnerRadius,u=[];for(let t of r.data){let e=tu(t,n);if("string"==typeof e){i=e;break}"number"==typeof e&&u.push(e)}if(""!==i)return i;let s=[];for(let t of r.label){let e=Jl(t,n);if(e.startsWith("Error")){i=e;break}s.push(e)}if(""!==i)return i;let f=r.hideLabelLessThan,c=s.map((function(t){return Vl(t,"tracker-tick-label")})),h=[];for(let t of r.extLabel){let e=Jl(t,n);if(e.startsWith("Error")){i=e;break}h.push(e)}if(""!==i)return i;let d=h.map((function(t){return Vl(t,"tracker-pie-label")})),g=r.showExtLabelOnlyIfNoLabel,p=Zr().range(r.dataColor),y=e.dataArea.append("g");y.attr("transform",(function(){return"translate("+.5*n.dataAreaSize.width+","+.5*n.dataAreaSize.height+")"}));let m=function(){var t=Ko,e=Zo,n=null,r=Co(0),i=Co(Vo),a=Co(0);function o(o){var l,u,s,f,c,h=(o=Wo(o)).length,d=0,g=new Array(h),p=new Array(h),y=+r.apply(this,arguments),m=Math.min(Vo,Math.max(-Vo,i.apply(this,arguments)-y)),v=Math.min(Math.abs(m)/h,a.apply(this,arguments)),x=v*(m<0?-1:1);for(l=0;l<h;++l)(c=p[g[l]=l]=+t(o[l],l,o))>0&&(d+=c);for(null!=e?g.sort((function(t,n){return e(p[t],p[n])})):null!=n&&g.sort((function(t,e){return n(o[t],o[e])})),l=0,s=d?(m-h*x)/d:0;l<h;++l,y=f)u=g[l],f=y+((c=p[u])>0?c*s:0)+x,p[u]={data:o[u],index:l,value:c,startAngle:y,endAngle:f,padAngle:v};return p}return o.value=function(e){return arguments.length?(t="function"==typeof e?e:Co(+e),o):t},o.sortValues=function(t){return arguments.length?(e=t,n=null,o):e},o.sort=function(t){return arguments.length?(n=t,e=null,o):n},o.startAngle=function(t){return arguments.length?(r="function"==typeof t?t:Co(+t),o):r},o.endAngle=function(t){return arguments.length?(i="function"==typeof t?t:Co(+t),o):i},o.padAngle=function(t){return arguments.length?(a="function"==typeof t?t:Co(+t),o):a},o}(),v=m(u),x=y.selectAll("sector").data(v).enter().append("g").attr("class","sector"),A=Xo().innerRadius(l).outerRadius(o);var w=Xo().innerRadius(.9*a).outerRadius(.9*a);function b(t){return(t.endAngle-t.startAngle)/(2*Math.PI)<f}function D(t){return t.startAngle+(t.endAngle-t.startAngle)/2}function k(t,e){let n=c[e].width,r=d[e].width;b(t);let i=D(t),o=A.centroid(t),l=w.centroid(t),u=w.centroid(t),f=Math.sqrt(Math.pow(l[0]-o[0],2)+Math.pow(l[1]-o[1],2));return""!==s[e]&&(o[0]=o[0]+(l[0]-o[0])*n/f,o[1]=o[1]+(l[1]-o[1])*n/f,u[0]=(.99*a-r-3)*(i<Math.PI?1:-1)),f=Math.sqrt(Math.pow(l[0]-o[0],2)+Math.pow(l[1]-o[1],2)),f>Math.sqrt(Math.pow(u[0]-o[0],2)+Math.pow(u[1]-o[1],2))?[o,u]:[o,l,u]}x.append("path").attr("fill",(function(t,e){return p(e.toString())})).attr("d",A),y.selectAll("label").data(m(u)).enter().append("text").text((function(t,e){return b(t)?"":s[e]})).attr("transform",(function(t){return"translate("+A.centroid(t)[0]+","+A.centroid(t)[1]+")"})).style("text-anchor","middle").attr("class","tracker-pie-label"),y.selectAll("extLabel").data(v).enter().append("text").text((function(t,e){return g?""===s[e]||b(t)?h[e]:"":h[e]})).attr("transform",(function(t,e){let n=w.centroid(t),r=D(t);return n[0]=(.99*a-d[e].width)*(r<Math.PI?1:-1),"translate("+n[0]+","+n[1]+")"})).style("text-anchor",(function(t){return D(t)<Math.PI?"start":"end"})).attr("class","tracker-pie-label"),y.selectAll("line").data(v).enter().append("polyline").attr("stroke","black").style("fill","none").attr("stroke-width",1).attr("points",(function(t,e){if(g){if((""===s[e]||b(t))&&""!==h[e])return k(t,e)}else if(""!==h[e])return k(t,e)})).attr("class","tracker-axis")}function nu(t,e,n){if(!e||!n)return;let r={};r=function(t,e,n,r){ee(e).select("#svg").remove();for(var i=Object.getOwnPropertyNames(t),a=0;a<i.length;a++)delete t[i[a]];let o=ee(e).append("svg").attr("id","svg").attr("width",n.dataAreaSize.width+n.margin.left+n.margin.right).attr("height",n.dataAreaSize.height+n.margin.top+n.margin.bottom);t.svg=o;let l=o.append("g").attr("id","graphArea").attr("transform","translate("+n.margin.left+","+n.margin.top+")").attr("width",n.dataAreaSize.width+n.margin.right).attr("height",n.dataAreaSize.height+n.margin.bottom);t.graphArea=l;let u=l.append("g").attr("id","dataArea").attr("width",n.dataAreaSize.width).attr("height",n.dataAreaSize.height);return t.dataArea=u,t}(r,t,e);let i=ko[n.dataColor.length];for(let t=0;t<n.dataColor.length;t++)null===n.dataColor[t]&&(n.dataColor[t]=i[t]);!function(t,e,n,r){if(!n||!r)return;if(!r.title)return;let i=Vl(r.title,"tracker-title"),a=e.graphArea.append("text").text(r.title).attr("id","title").attr("transform","translate("+n.dataAreaSize.width/2+","+i.height/2+")").attr("height",i.height).attr("class","tracker-title");e.title=a,Ol(e.svg,0,i.height),Ol(e.graphArea,0,i.height),Pl(e.dataArea,0,i.height)}(0,r,e,n),eu(0,r,e,n),n.showLegend&&function(t,e,n,r){let i=e.svg;e.graphArea;let a=e.dataArea,o=e.title,l=0;o&&(l=parseFloat(o.attr("height")));let u=r.dataName,s=u.map((function(t){return Vl(t,"tracker-legend-label")})),f=0,c=0;for(let t=0;t<u.length;t++)s[t].width>c&&(c=s[t].width,f=t);let h=c/u[f].length,d=s[f].height,g=u.length,p=2*h,y=d,m=2*h,v=0,x=0;"vertical"===r.legendOrientation?(v=3*p+m+c,x=(g+1)*y):"horizontal"===r.legendOrientation&&(v=(2*p+m)*g+p+D(s,(function(t,e){return t.width})),x=y+d);let A=0,w=0;if("top"===r.legendPosition)A=n.dataAreaSize.width/2-v/2,w=l,Ol(i,0,x+y),Pl(a,0,x+y);else if("bottom"===r.legendPosition)A=n.dataAreaSize.width/2-v/2,w=l+n.dataAreaSize.height+y,Ol(i,0,x+y);else if("left"===r.legendPosition)A=0,w=l+n.dataAreaSize.height/2-x/2,Ol(i,v+p,0),Pl(a,v+p,0);else{if("right"!==r.legendPosition)return;A=n.dataAreaSize.width+p,w=l+n.dataAreaSize.height/2-x/2,Ol(i,v+p,0)}let b=e.graphArea.append("g").attr("id","legend").attr("transform","translate("+A+","+w+")"),k=b.append("rect").attr("class","tracker-legend").attr("width",v).attr("height",x);r.legendBgColor&&k.style("fill",r.legendBgColor),r.legendBorderColor&&k.style("stroke",r.legendBorderColor);let C=p,M=d,T=C+p+m,_=M;if("vertical"===r.legendOrientation)b.selectAll("markers").data(u).enter().append("circle").attr("cx",C+m/2).attr("cy",(function(t,e){return M+e*y})).attr("r",(function(t,e){return 5})).style("fill",(function(t,e){return r.dataColor[e]})),b.selectAll("labels").data(u).enter().append("text").attr("x",T).attr("y",(function(t,e){return _+e*y})).text((function(t,e){return t})).style("alignment-baseline","middle").attr("class","tracker-legend-label").style("fill",(function(t,e){return r.dataColor[e]}));else if("horizontal"===r.legendOrientation){let t=0;t=0,b.selectAll("markers").data(u).enter().append("circle").attr("cx",(function(e,n){return 0===n?t=C+m/2:t+=s[n].width+p+m+p,t})).attr("cy",M).attr("r",(function(t,e){return 5})).style("fill",(function(t,e){return r.dataColor[e]})),t=0,b.selectAll("labels").data(u).enter().append("text").attr("x",(function(e,n){return 0===n?t=T:t+=s[n].width+p+m+p,t})).attr("y",_).text((function(t,e){return t})).style("alignment-baseline","middle").attr("class","tracker-legend-label").style("fill",(function(t,e){return r.dataColor[e]}))}}(0,r,e,n),function(t,e,n){let r=ee(t),i=e.svg,a=parseFloat(i.attr("width")),o=parseFloat(i.attr("height"));i.attr("width",null).attr("height",null).attr("viewBox",`0 0 ${a} ${o}`).attr("preserveAspectRatio","xMidYMid meet"),n.fitPanelWidth?r.style("width","100%"):(r.style("width",(a*n.fixedScale).toString()+"px"),r.style("height",(o*n.fixedScale).toString()+"px"))}(t,r,e)}function ru(t,e,n){if(!e||!n)return;let r="";n.template,r=n.template;let i=Jl(r,e);if(i.startsWith("Error:"))return i;if(r=i,""!==r){let e=ee(t).append("div");if(r.includes("\n")||r.includes("\\n")){let t=r.split(/(\n|\\n)/);for(let n of t)"\n"!==n&&"\\n"!==n&&e.append("div").text(n)}else e.text(r);""!==n.style&&e.attr("style",n.style)}}let iu=!1,au=2.8,ou=1.8;function lu(t,e){let n=e.dataset;if(0===n.length)return!1;let r=null;if(null===e.selectedDataset){for(let e of n)if(r=t.datasets.getDatasetById(e),r&&!r.getQuery().usedAsXDataset)break;if(r)return e.selectedDataset=r.getId(),!0}else{let i=e.selectedDataset,a=n.findIndex((t=>t===i));if(a>=0){if(a===e.dataset.length-1){for(let e of n)if(r=t.datasets.getDatasetById(e),r&&!r.getQuery().usedAsXDataset)break;return!!r&&(e.selectedDataset=r.getId(),!0)}{a++;let i=n[a];if(r=t.datasets.getDatasetById(i),e.selectedDataset=i,r&&!r.getQuery().usedAsXDataset)return!0;lu(t,e)}}}return!1}function uu(t,e,n,r){ee(e).select("#svg").remove();for(var i=Object.getOwnPropertyNames(t),a=0;a<i.length;a++)delete t[i[a]];let o=ee(e).append("svg").attr("id","svg").attr("width",n.dataAreaSize.width+n.margin.left+n.margin.right).attr("height",n.dataAreaSize.height+n.margin.top+n.margin.bottom);t.svg=o;let l=o.append("g").attr("id","graphArea").attr("transform","translate("+n.margin.left+","+n.margin.top+")").attr("width",n.dataAreaSize.width+n.margin.right).attr("height",n.dataAreaSize.height+n.margin.bottom);t.graphArea=l;let u=l.append("g").attr("id","dataArea").attr("width",n.dataAreaSize.width).attr("height",n.dataAreaSize.height);return t.dataArea=u,t}function su(t,e){let n=t.svg.selectAll("circle");for(let t of n){let e=ee(t).attr("id");e&&e.startsWith("tracker-selected-circle-")&&ee(t).style("stroke","none")}e.selectedDate="",t.monitor.text("")}function fu(t,e,n,r,i){if(!n||!r)return;let a=r.selectedDataset;if(null===a)return;let o=n.datasets.getDatasetById(a);if(!o)return;let l=o.getName();i.month(),i.daysInMonth(),i.year();let u=Vl("30","tracker-month-label"),s=Math.max(u.width,u.height)*au,f=i.format("YYYY"),c=i.format("MMM"),h=Vl(f,"tracker-month-header-year"),d=Vl(c,"tracker-month-header-month"),g=0,p=e.graphArea.append("g"),y=null;r.headerMonthColor?y=r.headerMonthColor:r.color&&(y=r.color);let m=p.append("text").text(c).attr("id","titleMonth").attr("transform","translate("+s/4+","+d.height+")").attr("class","tracker-month-header-month").style("cursor","default").on("click",(function(t){su(e,r)}));y&&m.style("fill",y),g+=d.height;let v=null;r.headerYearColor?v=r.headerYearColor:r.color&&(v=r.color);let x=p.append("text").text(f).attr("id","titleYear").attr("transform","translate("+s/4+","+(g+h.height)+")").attr("class","tracker-month-header-year").style("cursor","default").attr("font-weight","bold").on("click",(function(t){su(e,r)}));v&&x.style("fill",v),g+=h.height;let A=Vl(l,"tracker-month-title-rotator");if("circle"===r.mode||"annotation"===r.mode&&!r.showAnnotationOfAllTargets){let a=p.append("text").text(l).attr("transform","translate("+3.5*s+","+A.height+")").attr("class","tracker-month-title-rotator").style("cursor","pointer").on("click",(function(a){lu(n,r)&&(su(e,r),hu(t,e,n,r,i))}));e.rotator=a}let w=Vl("0.0000","tracker-month-title-monitor"),b=p.append("text").text("").attr("id","monitor").attr("class","tracker-month-title-monitor").attr("transform","translate("+3.5*s+","+(A.height+w.height)+")").style("cursor","pointer").style("fill",r.selectedRingColor);e.monitor=b;let D=Vl("<","tracker-month-title-arrow");p.append("text").text("<").attr("id","arrowLeft").attr("transform","translate("+5.5*s+","+(g/2+D.height/2)+")").attr("class","tracker-month-title-arrow").on("click",(function(a){su(e,r),r.selectedDate="";let o=i.clone().add(-1,"month");hu(t,e,n,r,o)})).style("cursor","pointer"),p.append("text").text(">").attr("id","arrowLeft").attr("transform","translate("+6.5*s+","+(g/2+D.height/2)+")").attr("class","tracker-month-title-arrow").on("click",(function(a){su(e,r);let o=i.clone().add(1,"month");hu(t,e,n,r,o)})).style("cursor","pointer"),p.append("text").text("◦").attr("id","arrowToday").attr("transform","translate("+6*s+","+(g/2+D.height/2)+")").attr("class","tracker-month-title-arrow").on("click",(function(i){su(e,r);let a=Sl(n.dateFormat);hu(t,e,n,r,a)})).style("cursor","pointer"),g+=8;let k=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];"mon"===r.startWeekOn.toLowerCase()&&k.push(k.shift());let C=Vl(k[0],"tracker-month-weekday");e.graphArea.selectAll("weekDays").data(k).enter().append("text").text((function(t){return t})).attr("transform",(function(t,e){return"translate("+(e+.5)*s+","+(g+C.height)+")"})).attr("class","tracker-month-weekday").attr("text-anchor","middle").style("cursor","default").on("click",(function(t){su(e,r)})),g+=C.height+8;let M=null;r.dividingLineColor?M=r.dividingLineColor:r.color&&(M=r.color);let T=e.graphArea.append("rect").attr("x",0).attr("y",g).attr("width",6.5*s+C.width).attr("height",1).attr("class","tracker-month-dividing-line");M&&T.style("fill",M),g+=1,p.attr("height",g),e.header=p,Pl(e.dataArea,0,g)}function cu(t,e,n,r,i){if(!n||!r)return;let a=r.mode;if("circle"!==a&&"annotation"!==a)return"Unknown month view mode";let o=r.selectedDataset;if(null===o)return;let l=n.datasets.getDatasetById(o);if(!l)return;let u=r.dataset.findIndex((t=>t===o));o<0&&(u=0);let s=r.threshold[u];i.month(),i.daysInMonth();let f=Vl("30","tracker-month-label"),c=Math.max(f.width,f.height)*au,h=c/au*ou/2,d=(c-2*h)/2,g=v(l.getValues());null!==r.yMin[u]&&(g=r.yMin[u]);let p=m(l.getValues());null!==r.yMax[u]&&(p=r.yMax[u]);let y=!0;(null===p||null===g||p<=g)&&(y=!1);const x=i.clone().startOf("month");let A=x.clone().subtract(x.day(),"days");"mon"===r.startWeekOn.toLowerCase()&&(A=A.add(1,"days"));const w=i.clone().endOf("month");let b=w.clone().add(7-w.day()-1,"days");"mon"===r.startWeekOn.toLowerCase()&&(b=b.add(1,"days"));const D=l.getStartDate(),k=l.getEndDate();let C=r.showAnnotation,M=r.annotation,T=M[u],_=r.showAnnotationOfAllTargets,E=[],F=0,S=0,B=0;for(let t=A.clone();t<=b;t.add(1,"days")){t=Cl(El(t,n.dateFormat),n.dateFormat),"2021-09-13"===t.format("YYYY-MM-DD")&&(iu=!1),"mon"===r.startWeekOn.toLowerCase()?(F=t.day()-1,F<0&&(F=6),S=Math.floor(B/7)):(F=t.day(),S=Math.floor(B/7));let e=!0;(t.diff(x)<0||t.diff(w)>0)&&(e=!1);let i=!0;D&&k&&t.diff(D)>=0&&t.diff(k)<=0&&(i=!1);const a=l.getValue(t);iu&&(console.log(l),console.log(El(t,n.dateFormat)),console.log(a));let o=!1;r.circleColorByValue?(y||null!==a&&a>s)&&(o=!0):null!==a&&a>s&&(o=!0);let u=null;r.circleColorByValue&&y&&null!==a&&(u=(a-g)/(p-g)),iu&&(console.log(g),console.log(p),console.log(u));let f=l.getValue(t,1),c=l.getValue(t,-1),h=!1;null!==a&&a>s&&null!==c&&c>s&&(h=!0);let d=!1;null!==a&&a>s&&null!==f&&f>s&&(d=!0),iu&&(console.log(`preValue: ${c}, curValue: ${a}, nextValue: ${f}`),console.log(r.threshold),console.log(`streakIn: ${h}, streakOut: ${d}`));let m="";if(C)if(_)for(let e of r.dataset){let i=r.dataset.findIndex((t=>t===e));if(i>=0){let a=n.datasets.getDatasetById(e).getValue(t),o=r.threshold[i];null!==a&&a>o&&(m+=M[i])}}else a>s&&(m=T);E.push({date:El(t,n.dateFormat),value:a,scaledValue:u,dayInMonth:t.date(),isInThisMonth:e,isOutOfDataRange:i,row:S,col:F,showCircle:o,streakIn:h,streakOut:d,annotation:m}),B++,iu&&(iu=!1)}let N=(F+1)*c,I=si().domain([-.5,6.5]).range([0,N]);if("circle"===a&&r.showCircle&&r.showStreak){let t="#69b3a2";r.circleColor?t=r.circleColor:r.color&&(t=r.color),e.dataArea.selectAll("streakIn").data(E.filter((function(t){return t.streakIn}))).enter().append("rect").attr("x",(function(t){return I(t.col)-h-d})).attr("y",(function(t){return I(t.row)-1.5})).attr("width",d).attr("height",3).style("fill",(function(e){return e.showCircle?r.circleColorByValue?null!==e.scaledValue?Cn("white",t)(.8*e.scaledValue+.2):"none":t:"none"})).style("opacity",(function(t){return t.isOutOfDataRange||r.dimNotInMonth&&!t.isInThisMonth?.2:1})),e.dataArea.selectAll("streakOut").data(E.filter((function(t){return t.streakOut}))).enter().append("rect").attr("x",(function(t){return I(t.col)+h})).attr("y",(function(t){return I(t.row)-1.5})).attr("width",d).attr("height",3).style("fill",(function(e){return e.showCircle?r.circleColorByValue?null!==e.scaledValue?Cn("white",t)(.8*e.scaledValue+.2):"none":t:"none"})).style("opacity",(function(t){return t.isOutOfDataRange||r.dimNotInMonth&&!t.isInThisMonth?.2:1}))}let L="#69b3a2";r.circleColor?L=r.circleColor:r.color&&(L=r.color),"circle"===a&&r.showCircle&&e.dataArea.selectAll("dot").data(E).enter().append("circle").attr("r",h).attr("cx",(function(t){return I(t.col)})).attr("cy",(function(t){return I(t.row)})).style("fill",(function(t){if(t.showCircle){if(!r.circleColorByValue)return L;if(null!==t.scaledValue){return Cn("white",L)(.8*t.scaledValue+.2)}return"none"}return"none"})).style("opacity",(function(t){return t.isOutOfDataRange||r.dimNotInMonth&&!t.isInThisMonth?.2:1})).style("cursor","default");let V=El(window.moment(),n.dateFormat);if("circle"===a&&r.showTodayRing){let t=e.dataArea.selectAll("todayRing").data(E.filter((function(t){return t.date===V}))).enter().append("circle").attr("r",.9*h).attr("cx",(function(t){return I(t.col)})).attr("cy",(function(t){return I(t.row)})).attr("class","tracker-month-today-circle").style("cursor","default");""!==r.todayRingColor?t.style("stroke",r.todayRingColor):t.style("stroke","white")}"circle"===a&&r.showSelectedRing&&e.dataArea.selectAll("selectedRing").data(E).enter().append("circle").attr("r",h).attr("cx",(function(t){return I(t.col)})).attr("cy",(function(t){return I(t.row)})).attr("id",(function(t){return"tracker-selected-circle-"+t.date})).attr("class","tracker-month-selected-circle").style("cursor","default").style("stroke","none"),e.dataArea.selectAll("dayLabel").data(E).enter().append("text").text((function(t){return t.dayInMonth.toString()})).attr("transform",(function(t){return"translate("+I(t.col)+","+(I(t.row)+f.height/4)+")"})).style("fill-opacity",(function(t){return t.isOutOfDataRange||r.dimNotInMonth&&!t.isInThisMonth?.2:1})).attr("date",(function(t){return t.date})).attr("value",(function(t){return t.value})).attr("valueType",(function(t){return nl[l.valueType]})).attr("class","tracker-month-label").on("click",(function(t){su(e,r);let n=ee(this).attr("date");if(r.selectedDate=n,r.showSelectedRing&&e.dataArea.select("#tracker-selected-circle-"+n).style("stroke",r.selectedRingColor),r.showSelectedValue){let t=ee(this).attr("value"),n="";if("Time"===ee(this).attr("valueType")){n=window.moment("00:00","HH:mm",!0).add(parseFloat(t),"seconds").format("HH:mm")}else n=t;e.monitor.text(n)}})).style("cursor","pointer"),"annotation"===a&&C&&e.dataArea.selectAll("dayAnnotation").data(E).enter().append("text").text((function(t){return t.annotation})).attr("transform",(function(t){let e=I(t.col),n=I(t.row)+f.height/4;return t.annotation&&(n+=h),"translate("+e+","+n+")"})).attr("class","tracker-month-annotation");let O=parseFloat(e.svg.attr("width")),P=parseFloat(e.svg.attr("height")),$=parseFloat(e.graphArea.attr("width")),Y=parseFloat(e.graphArea.attr("height")),z=7*c+parseFloat(e.header.attr("height")),R=7*c;z>P&&Ol(e.svg,0,z-P),R>O&&Ol(e.svg,R-O,0),z>Y&&Ol(e.graphArea,0,z-Y),R>$&&Ol(e.svg,R-$,0)}function hu(t,e,n,r,i){n&&du&&(fu(t,e=uu(e,t,n),n,r,i),cu(0,e,n,r,i))}function du(t,e,n){if(!e||!du)return;n.dataset;let r=0;for(let t of e.datasets)t.getQuery().usedAsXDataset||r++;if(0===r)return"No available dataset found";if(lu(e,n),null===n.selectedDataset)return"No available dataset found";let i={};i=uu(i,t,e);let a=null;if(n.initMonth){if(a=_l(n.initMonth,e.dateFormat),!a){let t=window.moment(n.initMonth,"YYYY-MM",!0);if(!t.isValid())return"Invalid initMonth";a=t}}else a=e.datasets.getDates().last();a&&(fu(t,i,e,n,a),cu(0,i,e,n,a),function(t,e,n){let r=ee(t),i=e.svg,a=parseFloat(i.attr("width")),o=parseFloat(i.attr("height"));i.attr("width",null).attr("height",null).attr("viewBox",`0 0 ${a} ${o}`).attr("preserveAspectRatio","xMidYMid meet"),n.fitPanelWidth?r.style("width","100%"):(r.style("width",(a*n.fixedScale).toString()+"px"),r.style("height",(o*n.fixedScale).toString()+"px"))}(t,i,e))}function gu(t,e,n){if(e&&gu)return"Under construction"}function pu(t,e,n){if(!e||!n)return;let r=parseFloat(n.dataset);e.datasets.getDatasetById(r),"horizontal"===n.orientation?e.dataAreaSize={width:250,height:24}:"vertical"===n.orientation&&(e.dataAreaSize={width:24,height:250});let i=function(t,e,n){let r={};if(!e||!n)return;let i=ee(t).append("svg").attr("id","svg").attr("width",e.dataAreaSize.width+e.margin.left+e.margin.right).attr("height",e.dataAreaSize.height+e.margin.top+e.margin.bottom);r.svg=i;let a=i.append("g").attr("id","graphArea").attr("transform","translate("+e.margin.left+","+e.margin.top+")").attr("width",e.dataAreaSize.width+e.margin.right).attr("height",e.dataAreaSize.height+e.margin.bottom);r.graphArea=a;let o=a.append("g").attr("id","dataArea").attr("width",e.dataAreaSize.width).attr("height",e.dataAreaSize.height);return r.dataArea=o,r}(t,e,n),a=function(t,e,n,r){if(!e||!n)return;let i=n.range,a=i[i.length-1],o=[0,a],l=n.valueUnit,u=function(t){return l&&l.endsWith("%")?li(0,a,7)(t)+" %":li(0,a,7)(t)},s=Vl(u(a),"tracker-tick-label");if("horizontal"===n.orientation){let n=si();n.domain(o).range([0,e.dataAreaSize.width]),t.scale=n;let r=V(n);r.tickFormat(u);let i=t.dataArea.append("g").attr("id","axis").attr("transform","translate(0,"+e.dataAreaSize.height+")").call(r).attr("class","tracker-axis");t.axis=i,i.selectAll("path").style("stroke","none"),i.selectAll("line"),i.selectAll("text").attr("class","tracker-tick-label"),i.attr("width",e.dataAreaSize.width+s.width),i.attr("height",6+s.height),Ol(t.svg,+s.width,6+s.height),Ol(t.graphArea,+s.width,6+s.height)}else if("vertical"===n.orientation){let n=si();n.domain(o).range([e.dataAreaSize.height,0]),t.scale=n;let r=O(n);r.tickFormat(u);let i=t.dataArea.append("g").attr("id","axis").attr("x",0).attr("y",0).call(r).attr("class","tracker-axis");t.axis=i,i.selectAll("path").style("stroke","none"),i.selectAll("line"),i.selectAll("text").attr("class","tracker-tick-label"),i.attr("width",6+s.width),i.attr("height",e.dataAreaSize.width),Ol(t.svg,6+s.width,0),Ol(t.graphArea,6+s.width,0),Pl(t.dataArea,6+s.width,0)}}(i,e,n);if("string"==typeof a)return a;!function(t,e,n){if(!e||!n)return;if(n.title){let r=Vl(n.title,"tracker-title-small");if("horizontal"===n.orientation){let i=t.graphArea.append("text").text(n.title).attr("id","title").attr("x",r.width/2).attr("y",e.dataAreaSize.height/2).attr("height",r.height).attr("class","tracker-title-small");t.title=i,Ol(t.svg,r.width+6,0),Ol(t.graphArea,r.width+6,0),Pl(t.dataArea,r.width+6,0)}else if("vertical"===n.orientation){let i=e.dataAreaSize.width/2;r.width>e.dataAreaSize.width&&(Ol(t.svg,r.width-e.dataAreaSize.width,0),Ol(t.graphArea,r.width-e.dataAreaSize.width,0),Pl(t.dataArea,r.width/2-e.dataAreaSize.width/2,0),i=r.width/2);let a=parseFloat(t.axis.attr("width")),o=t.graphArea.append("text").text(n.title).attr("id","title").attr("x",i+a).attr("y",r.height/2).attr("height",r.height).attr("class","tracker-title-small");t.title=o,Ol(t.svg,0,r.height+6),Ol(t.graphArea,0,r.height+6),Pl(t.dataArea,0,r.height+6)}}if(n.valueUnit){let r=Vl(n.valueUnit,"tracker-tick-label");if("horizontal"===n.orientation){let i=t.dataArea.append("text").text(n.valueUnit).attr("id","unit").attr("x",-1*(r.width+6)).attr("y",e.dataAreaSize.height+6).attr("height",r.height).attr("class","tracker-tick-label");t.unit=i}else if("vertical"===n.orientation){let i=t.dataArea.append("text").text(n.valueUnit).attr("id","unit").attr("x",e.dataAreaSize.width/2-r.width/2).attr("y",-(r.height/2+6)).attr("height",r.height).attr("class","tracker-tick-label");t.unit=i,Ol(t.svg,0,r.height+6),Ol(t.graphArea,0,r.height+6),Pl(t.dataArea,0,r.height+6)}}}(i,e,n),function(t,e,n,r){if(!e||!n)return;let i=t.scale,a=n.range,o=n.rangeColor,l=[],u=0;for(let t=0;t<a.length;t++)l.push({start:u,end:a[t],color:o[t]}),u=a[t];"horizontal"===n.orientation?t.dataArea.selectAll("backPanel").data(l).enter().append("rect").attr("x",(function(t,e){return Math.floor(i(t.start))})).attr("y",(function(t){return 0})).attr("width",(function(t,e){return Math.ceil(i(t.end-t.start))})).attr("height",e.dataAreaSize.height).style("fill",(function(t){return t.color})):"vertical"===n.orientation&&t.dataArea.selectAll("backPanel").data(l).enter().append("rect").attr("x",(function(t,e){return 0})).attr("y",(function(t){return Math.floor(i(t.end))})).attr("width",e.dataAreaSize.width).attr("height",(function(t){return e.dataAreaSize.height-Math.floor(i(t.end-t.start))})).style("fill",(function(t){return t.color}))}(i,e,n);let o=function(t,e,n,r){let i="";if(!e||!n)return;let a=tu(n.value,e);if("string"==typeof a)return a;let o=a;if(Number.isNaN(o))return i="Invalid input value: "+a,i;let l=n.valueColor,u=t.scale;if("horizontal"===n.orientation){let n=e.dataAreaSize.height/3;t.dataArea.append("rect").attr("x",u(0)).attr("y",n).attr("width",Math.floor(u(o))).attr("height",n).style("fill",l)}else if("vertical"===n.orientation){let n=e.dataAreaSize.width/3;t.dataArea.append("rect").attr("x",n).attr("y",Math.floor(u(o))).attr("width",n).attr("height",e.dataAreaSize.height-Math.floor(u(o))).style("fill",l)}}(i,e,n);if("string"==typeof o)return o;!function(t,e,n,r){if(!e||!n)return;if(!n.showMarker)return;let i=n.markerValue,a=n.markerColor,o=t.scale;if("horizontal"===n.orientation){let n=2*e.dataAreaSize.height/3;t.dataArea.append("rect").attr("x",o(i)-1.5).attr("y",n/4).attr("width",3).attr("height",n).style("fill",a)}else if("vertical"===n.orientation){let n=2*e.dataAreaSize.width/3;t.dataArea.append("rect").attr("x",n/4).attr("y",o(i)-1.5).attr("width",n).attr("height",3).style("fill",a)}}(i,e,n),function(t,e,n){let r=ee(t),i=e.svg,a=parseFloat(i.attr("width")),o=parseFloat(i.attr("height"));i.attr("width",null).attr("height",null).attr("viewBox",`0 0 ${a} ${o}`).attr("preserveAspectRatio","xMidYMid meet"),n.fitPanelWidth?r.style("width","100%"):(r.style("width",(a*n.fixedScale).toString()+"px"),r.style("height",(o*n.fixedScale).toString()+"px"))}(t,i,e)}function yu(t,e,n){if(!e||!n)return;let r=e.datasets,i=function(t,e){let n,r;if(void 0===e)for(const e of t)null!=e&&(void 0===n?e>=e&&(n=r=e):(n>e&&(n=e),r<e&&(r=e)));else{let i=-1;for(let a of t)null!=(a=e(a,++i,t))&&(void 0===n?a>=a&&(n=r=a):(n>a&&(n=a),r<a&&(r=a)))}return[n,r]}(r.getDates()),a=Do().domain(i).range([0,e.dataAreaSize.width]);t.xScale=a;let o=Tl(n.xAxisTickInterval),[l,u]=function(t,e){let n=[],r=null;if(e){let r=t[0],i=t[t.length-1];n=Mi.range(r.toDate(),i.toDate(),e.asDays())}else{let e=t.length;r=e<=15?Mi:e<=60?Mi.every(4):e<=105?Fi:e<=450?Xi:e<=900?Xi.every(2):ji}return[n,r]}(r.getDates(),o),s=function(t,e){if(e){function n(t){return El(window.moment(t),e)}return n}{let r=null,i=t.length;return r=ea(i<=15||i<=60||i<=105?"%y-%m-%d":i<=450||i<=900?"%y %b":"%Y"),r}}(r.getDates(),n.xAxisTickLabelFormat),f=V(a);l&&0!==l.length?f.tickValues(l):u&&f.ticks(u),s&&f.tickFormat(s);let c=t.dataArea.append("g").attr("id","xAxis").attr("transform","translate(0,"+e.dataAreaSize.height+")").call(f).attr("class","tracker-axis");n.xAxisColor&&c.style("stroke",n.xAxisColor),t.xAxis=c;let h=Vl("99-99-99"),d=c.selectAll("text").attr("x",-1*h.height*Math.cos(65/180*Math.PI)).attr("y",0).attr("transform","rotate(-65)").style("text-anchor","end").attr("class","tracker-tick-label");n.xAxisColor&&d.style("fill",n.xAxisColor);let g=h.width*Math.sin(65/180*Math.PI),p=c.append("text").text(n.xAxisLabel).attr("transform","translate("+e.dataAreaSize.width/2+","+(6+g)+")").attr("class","tracker-axis-label");n.xAxisLabelColor&&p.style("fill",n.xAxisLabelColor),c.attr("height",6+g),Ol(t.svg,0,6+g),Ol(t.graphArea,0,6+g)}function mu(t,e,n,r,i){if(!e||!n)return;let a=e.datasets;if(0===i.length)return;if("left"!==r&&"right"!==r)return;let o=null,l=null,u=null,s=!1;for(let t of i){let e=a.getDatasetById(t);if(!e.getQuery().usedAsXDataset)if((null===o||e.getYMin()<o)&&(o=e.getYMin()),(null===l||e.getYMax()>l)&&(l=e.getYMax()),s=e.valueType===nl.Time,null===u)u=s;else if(s!==u)return"Not all values in time format"}let f=null;"left"===r?f=n.yMin[0]:"right"===r&&(f=n.yMin[1]);let c=!1;"number"!=typeof f?f=o:c=!0;let h=null;"left"===r?h=n.yMax[0]:"right"===r&&(h=n.yMax[1]);let d=!1;if("number"!=typeof h?h=l:d=!0,h<f){let t=f;f=h,h=t;let e=c;c=d,d=e}let g,p,y=h-f,m=si();g=c?f:f-.2*y,p=d?h:h+.2*y,n.GetGraphType()===el.Bar&&(p<0&&(p=0),g>0&&(g=0));let v=[g,p];("left"===r&&n.reverseYAxis[0]||"right"===r&&n.reverseYAxis[1])&&(v=[p,g]),m.domain(v).range([e.dataAreaSize.height,0]),"left"===r?t.leftYScale=m:"right"===r&&(t.rightYScale=m);let x="";"left"===r?x=n.yAxisColor[0]:"right"===r&&(x=n.yAxisColor[1]);let A="";"left"===r?A=n.yAxisLabelColor[0]:"right"===r&&(A=n.yAxisLabelColor[1]);let w="";"left"===r?w=n.yAxisLabel[0]:"right"===r&&(w=n.yAxisLabel[1]);let D="",k=null,C=null;"left"===r?(D=n.yAxisUnit[0],k=n.yAxisTickInterval[0],C=n.yAxisTickLabelFormat[0]):"right"===r&&(D=n.yAxisUnit[1],k=n.yAxisTickInterval[1],C=n.yAxisTickLabelFormat[1]);let T,_=null;if(s?_=Tl(k):(_=parseFloat(k),Number.isNumber(_)&&!Number.isNaN(_)||(_=null)),"left"===r?T=O(m):"right"===r&&(T=L(M,m)),T){let t=function(t,e,n,r=!1){if(r){if(n){function i(t){return window.moment("00:00","HH:mm",!0).add(t,"seconds").format(n)}return i}{function a(n){const r=Math.abs(e-t);let i=window.moment("00:00","HH:mm",!0).add(n,"seconds").format("HH:mm");return r>43200&&(n<t||n>e||(n-t)/3600%2<1)&&(i=""),i}return a}}if(n){function o(t){return Xl.sprintf("%"+n,t)}return o}return li(t,e,10)}(g,p,C,s);t&&T.tickFormat(t);let e=function(t,e,n,r=!1){const i=Math.abs(e-t);let a=[];r?a=n&&window.moment.isDuration(n)?b(t,e,Math.abs(n.asSeconds())):i>18e3?b(t=3600*Math.floor(t/3600),e=3600*Math.ceil(e/3600),3600):b(t=1800*Math.floor(t/1800),e=1800*Math.ceil(e/1800),1800):n&&"number"==typeof n&&(a=b(t,e,n));return 0===a.length?null:a}(g,p,_,s);e&&T.tickValues(e)}let E=t.dataArea.append("g").attr("id","yAxis").call(T).attr("class","tracker-axis");"right"==r&&E.attr("transform","translate("+e.dataAreaSize.width+" ,0)"),"left"===r?t.leftYAxis=E:"right"===r&&(t.rightYAxis=E);let F=E.selectAll("path");x&&F.style("stroke",x);let S=E.selectAll("line");x&&S.style("stroke",x);let B=E.selectAll("text").attr("class","tracker-tick-label");x&&B.style("fill",x);let N=0;for(let t of B)if(t.textContent){let e=Vl(t.textContent,"tracker-axis-label");e.width>N&&(N=e.width)}""!==D&&(w+=" ("+D+")");let I=Vl(w),V=E.append("text").text(w).attr("transform","rotate(-90)").attr("x",-1*e.dataAreaSize.height/2).attr("class","tracker-axis-label");"left"===r?V.attr("y",-6-N-I.height/2):V.attr("y",6+N+I.height),A&&V.style("fill",A);let P=I.height+N+6;E.attr("width",P),Ol(t.svg,P,0),Ol(t.graphArea,P,0),"left"===r&&(Pl(t.dataArea,P,0),t.title&&Pl(t.title,P,0))}function vu(t,e,n,r,i){if(!e||!n)return;let a=null;if("left"===i?a=t.leftYScale:"right"===i&&(a=t.rightYScale),n.showLine[r.getId()]){let e=function(t,e){var n=Co(!0),r=null,i=qo,a=null,o=Po(l);function l(l){var u,s,f,c=(l=Wo(l)).length,h=!1;for(null==r&&(a=i(f=o())),u=0;u<=c;++u)!(u<c&&n(s=l[u],u,l))===h&&((h=!h)?a.lineStart():a.lineEnd()),h&&a.point(+t(s,u,l),+e(s,u,l));if(f)return a=null,f+""||null}return t="function"==typeof t?t:void 0===t?Go:Co(t),e="function"==typeof e?e:void 0===e?Qo:Co(e),l.x=function(e){return arguments.length?(t="function"==typeof e?e:Co(+e),l):t},l.y=function(t){return arguments.length?(e="function"==typeof t?t:Co(+t),l):e},l.defined=function(t){return arguments.length?(n="function"==typeof t?t:Co(!!t),l):n},l.curve=function(t){return arguments.length?(i=t,null!=r&&(a=i(r)),l):i},l.context=function(t){return arguments.length?(null==t?r=a=null:a=i(r=t),l):r},l}().defined((function(t){return null!==t.value})).x((function(e){return t.xScale(e.date)})).y((function(t){return a(t.value)})),i=t.dataArea.append("path").attr("class","tracker-line").style("stroke-width",n.lineWidth[r.getId()]);n.fillGap[r.getId()]?i.datum(Array.from(r).filter((function(t){return null!==t.value}))).attr("d",e):i.datum(r).attr("d",e),n.lineColor[r.getId()]&&i.style("stroke",n.lineColor[r.getId()])}}function xu(t,e,n,r,i){if(!e||!n)return;let a=null;if("left"===i?a=t.leftYScale:"right"===i&&(a=t.rightYScale),n.showPoint[r.getId()]){let i=t.dataArea.selectAll("dot").data(Array.from(r).filter((function(t){return null!==t.value}))).enter().append("circle").attr("r",n.pointSize[r.getId()]).attr("cx",(function(e){return t.xScale(e.date)})).attr("cy",(function(t){return a(t.value)})).attr("date",(function(t){return ea("%y-%m-%d")(t.date)})).attr("value",(function(t){if(null!==t.value)return Number.isInteger(t.value)?t.value.toFixed(0):t.value.toFixed(2)})).attr("valueType",nl[r.valueType]).attr("class","tracker-dot");n.pointColor[r.getId()]&&(i.style("fill",n.pointColor[r.getId()]),n.pointBorderColor[r.getId()]&&n.pointBorderWidth[r.getId()]>0&&(i.style("stroke",n.pointBorderColor[r.getId()]),i.style("stroke-width",n.pointBorderWidth[r.getId()]))),n.allowInspectData&&function(t,e,n){let r=e.dataArea.append("svg").style("opacity",0),i=r.append("rect").attr("x",0).attr("y",0),a=r.append("text"),o=a.append("tspan").attr("class","tracker-tooltip-label"),l=a.append("tspan").attr("class","tracker-tooltip-label"),u=3,s=3;t.on("mouseenter",(function(t){const[e,f]=function(t,e){if(t=function(t){let e;for(;e=t.sourceEvent;)t=e;return t}(t),void 0===e&&(e=t.currentTarget),e){var n=e.ownerSVGElement||e;if(n.createSVGPoint){var r=n.createSVGPoint();return r.x=t.clientX,r.y=t.clientY,[(r=r.matrixTransform(e.getScreenCTM().inverse())).x,r.y]}if(e.getBoundingClientRect){var i=e.getBoundingClientRect();return[t.clientX-i.left-e.clientLeft,t.clientY-i.top-e.clientTop]}}return[t.pageX,t.pageY]}(t);let c=0,h=0,d="date: "+ee(this).attr("date"),g=Vl(d,"tracker-tooltip-label");o.text(d),g.width>c&&(c=g.width),h+=g.height,o.attr("x",u).attr("y",h);let p="value: ",y=ee(this).attr("valueType"),m=ee(this).attr("value");if("Time"===y){p+=window.moment("00:00","HH:mm",!0).add(parseFloat(m),"seconds").format("HH:mm"),l.text(p)}else p+=m,l.text(p);let v=Vl(p,"tracker-tooltip-label");v.width>c&&(c=v.width),h+=s+v.height,l.attr("x",u).attr("y",h),c+=2*u,h+=2*s,a.attr("width",c).attr("height",h),i.attr("width",c).attr("height",h).attr("class","tracker-tooltip");let x=e,A=f,w=12,b=12;x=e+w+c>n.dataAreaSize.width?e-c-w:e+w,A=f-b-h<0?f+b:f-b-h,r.attr("x",x).attr("y",A),r.transition().duration(200).style("opacity",1)})).on("mouseleave",(function(){r.transition().duration(500).style("opacity",0)}))}(i,t,e)}}function Au(t,e,n,r,i,a,o){if(!e||!n)return;let l=e.dataAreaSize.width/r.getLength(),u=l;l-1>0&&(u=l-1),u/=o;let s=null;"left"===i?s=t.leftYScale:"right"===i&&(s=t.rightYScale);let f=t.dataArea.selectAll("bar").data(Array.from(r).filter((function(t){return null!==t.value}))).enter().append("rect").attr("x",(function(e,n){if(0===n){let n=a+1-o/2;if(n<1)return t.xScale(e.date)-l/2+a*u+n*u}return t.xScale(e.date)-l/2+a*u})).attr("y",(function(t){return s(Math.max(t.value,0))})).attr("width",(function(t,e){if(0===e){let t=a+1-o/2;return t<0?0:t<1?u*t:u}if(e===r.getLength()-1){let t=1-(a+1-o/2);return t<0?0:t<1?u*t:u}return u})).attr("height",(function(t){if(null!==t.value)return Math.abs(s(t.value)-s(0))})).attr("class","tracker-bar");n.barColor[r.getId()]&&f.style("fill",n.barColor[r.getId()])}function wu(t,e,n){let r=t.svg;t.graphArea;let i=t.dataArea,a=t.title,o=t.xAxis,l=t.leftYAxis,u=t.rightYAxis,s=0;a&&(s=parseFloat(a.attr("height")));let f=parseFloat(o.attr("height")),c=0;l&&(c=parseFloat(l.attr("width")));let h=0;u&&(h=parseFloat(u.attr("width")));let d=e.datasets,g=d.getXDatasetIds(),p=d.getNames(),y=p.map((function(t){return Vl(t,"tracker-legend-label")})),m=0,v=0;for(let t=0;t<p.length;t++)g.includes(t)||y[t].width>v&&(v=y[t].width,m=t);let x=v/p[m].length,A=y[m].height,w=p.length-g.length,b=2*x,k=A,C=2*x,M=0,T=0;"vertical"===n.legendOrientation?(M=3*b+C+v,T=(w+1)*k):"horizontal"===n.legendOrientation&&(M=(2*b+C)*w+b+D(y,(function(t,e){return g.includes(e)?0:t.width})),T=k+A);let _=0,E=0;if("top"===n.legendPosition)_=c+e.dataAreaSize.width/2-M/2,E=s,Ol(r,0,T+k),Pl(i,0,T+k);else if("bottom"===n.legendPosition)_=c+e.dataAreaSize.width/2-M/2,E=s+e.dataAreaSize.height+f+k,Ol(r,0,T+k);else if("left"===n.legendPosition)_=0,E=s+e.dataAreaSize.height/2-T/2,Ol(r,M+b,0),Pl(i,M+b,0);else{if("right"!==n.legendPosition)return;_=e.dataAreaSize.width+c+h+b,E=s+e.dataAreaSize.height/2-T/2,Ol(r,M+b,0)}let F=t.graphArea.append("g").attr("id","legend").attr("transform","translate("+_+","+E+")"),S=F.append("rect").attr("class","tracker-legend").attr("width",M).attr("height",T);n.legendBgColor&&S.style("fill",n.legendBgColor),n.legendBorderColor&&S.style("stroke",n.legendBorderColor);let B=b,N=A,I=B+b+C,L=N;if("vertical"===n.legendOrientation){n.GetGraphType()===el.Line?(F.selectAll("markers").data(p).enter().append("line").attr("x1",B).attr("x2",B+C).attr("y1",(function(t,e){let n=g.filter((t=>t<e)).length;return N+(e-=n)*k})).attr("y2",(function(t,e){let n=g.filter((t=>t<e)).length;return N+(e-=n)*k})).style("stroke",(function(t,e){if(!g.includes(e))return n.lineColor[e]})),F.selectAll("markers").data(p).enter().append("circle").attr("cx",B+C/2).attr("cy",(function(t,e){let n=g.filter((t=>t<e)).length;return N+(e-=n)*k})).attr("r",(function(t,e){if(!g.includes(e))return n.showPoint[e]?n.pointSize[e]:0})).style("fill",(function(t,e){if(!g.includes(e))return n.pointColor[e]}))):n.GetGraphType()===el.Bar&&F.selectAll("markers").data(p).enter().append("rect").attr("x",B).attr("y",(function(t,e){let n=g.filter((t=>t<e)).length;return N+(e-=n)*k-A/2})).attr("width",C).attr("height",A).style("fill",(function(t,e){if(!g.includes(e))return n.barColor[e]}));let t=F.selectAll("labels").data(p).enter().append("text").attr("x",I).attr("y",(function(t,e){let n=g.filter((t=>t<e)).length;return L+(e-=n)*k})).text((function(t,e){return g.includes(e)?"":t})).style("alignment-baseline","middle").attr("class","tracker-legend-label");n.GetGraphType()===el.Line?t.style("fill",(function(t,e){if(!g.includes(e))return n.lineColor[e]})):n.GetGraphType()===el.Bar&&t.style("fill",(function(t,e){if(!g.includes(e))return n.barColor[e]}))}else if("horizontal"===n.legendOrientation){n.GetGraphType()===el.Line?(F.selectAll("markers").data(p).enter().append("line").attr("x1",(function(t,e){let n=b;for(let[t,r]of y.entries())if(!g.includes(t)){if(!(t<e))break;n+=C+b+r.width+b}return n})).attr("x2",(function(t,e){let n=b+C;for(let[t,r]of y.entries())if(!g.includes(t)){if(!(t<e))break;n+=b+r.width+b+C}return n})).attr("y1",N).attr("y2",N).style("stroke",(function(t,e){if(!g.includes(e))return n.lineColor[e]})),F.selectAll("markers").data(p).enter().append("circle").attr("cx",(function(t,e){let n=b+C/2;for(let[t,r]of y.entries())if(!g.includes(t)){if(!(t<e))break;n+=C/2+b+r.width+b+C/2}return n})).attr("cy",N).attr("r",(function(t,e){if(!g.includes(e))return n.showPoint[e]?n.pointSize[e]:0})).style("fill",(function(t,e){if(!g.includes(e))return n.pointColor[e]}))):n.GetGraphType()===el.Bar&&F.selectAll("markers").data(p.filter(((t,e)=>!g.includes(e)))).enter().append("rect").attr("x",(function(t,e){let n=b;for(let[t,r]of y.entries())if(!g.includes(t)){if(!(t<e))break;n+=C+b+r.width+b}return n})).attr("y",N-A/2).attr("width",C).attr("height",A).style("fill",(function(t,e){if(!g.includes(e))return n.barColor[e]}));let t=F.selectAll("labels").data(p).enter().append("text").attr("x",(function(t,e){let n=b+C+b;for(let[t,r]of y.entries())if(!g.includes(t)){if(!(t<e))break;n+=r.width+b+C+b}return n})).attr("y",L).text((function(t,e){return g.includes(e)?"":t})).style("alignment-baseline","middle").attr("class","tracker-legend-label");n.GetGraphType()===el.Line?t.style("fill",(function(t,e){if(!g.includes(e))return n.lineColor[e]})):n.GetGraphType()===el.Bar&&t.style("fill",(function(t,e){if(!g.includes(e))return n.barColor[e]}))}}function bu(t,e,n){if(!e||!n)return;if(!n.title)return;let r=Vl(n.title,"tracker-title"),i=t.graphArea.append("text").text(n.title).attr("id","title").attr("transform","translate("+e.dataAreaSize.width/2+","+r.height/2+")").attr("height",r.height).attr("class","tracker-title");t.title=i,Ol(t.svg,0,r.height),Ol(t.graphArea,0,r.height),Pl(t.dataArea,0,r.height)}function Du(t,e,n){let r=ee(t),i=e.svg,a=parseFloat(i.attr("width")),o=parseFloat(i.attr("height"));i.attr("width",null).attr("height",null).attr("viewBox",`0 0 ${a} ${o}`).attr("preserveAspectRatio","xMidYMid meet"),n.fitPanelWidth?r.style("width","100%"):(r.style("width",(a*n.fixedScale).toString()+"px"),r.style("height",(o*n.fixedScale).toString()+"px"))}function ku(t,e){let n={},r=ee(t).append("svg").attr("id","svg").attr("width",e.dataAreaSize.width+e.margin.left+e.margin.right).attr("height",e.dataAreaSize.height+e.margin.top+e.margin.bottom);n.svg=r;let i=r.append("g").attr("id","graphArea").attr("transform","translate("+e.margin.left+","+e.margin.top+")").attr("width",e.dataAreaSize.width+e.margin.right).attr("height",e.dataAreaSize.height+e.margin.bottom);n.graphArea=i;let a=i.append("g").attr("id","dataArea").attr("width",e.dataAreaSize.width).attr("height",e.dataAreaSize.height);return n.dataArea=a,n}function Cu(t,e,n){if(!e||!n)return;let r=ku(t,e);bu(r,e,n),yu(r,e,n);let i=[],a=[],o=e.datasets.getXDatasetIds();for(let t=0;t<n.yAxisLocation.length;t++){if(o.includes(t))continue;let e=n.yAxisLocation[t];"left"===e.toLowerCase()?i.push(t):"right"===e.toLocaleLowerCase()&&a.push(t)}let l=mu(r,e,n,"left",i);if("string"==typeof l)return l;if(r.leftYAxis&&r.leftYScale)for(let t of i){let i=e.datasets.getDatasetById(t);i.getQuery().usedAsXDataset||(vu(r,e,n,i,"left"),xu(r,e,n,i,"left"))}let u=mu(r,e,n,"right",a);if("string"==typeof u)return u;if(r.rightYAxis&&r.rightYScale)for(let t of a){let i=e.datasets.getDatasetById(t);i.getQuery().usedAsXDataset||(vu(r,e,n,i,"right"),xu(r,e,n,i,"right"))}n.showLegend&&wu(r,e,n),Du(t,r,e)}function Mu(t,e,n){if(!e||!n)return;let r=ku(t,e);bu(r,e,n),yu(r,e,n);let i=[],a=[],o=e.datasets.getXDatasetIds();for(let t=0;t<n.yAxisLocation.length;t++){if(o.includes(t))continue;let e=n.yAxisLocation[t];"left"===e.toLowerCase()?i.push(t):"right"===e.toLocaleLowerCase()&&a.push(t)}let l=mu(r,e,n,"left",i);if("string"==typeof l)return l;let u=i.length+a.length,s=0;if(r.leftYAxis&&r.leftYScale)for(let t of i){let i=e.datasets.getDatasetById(t);i.getQuery().usedAsXDataset||(Au(r,e,n,i,"left",s,u),s++)}let f=mu(r,e,n,"right",a);if("string"==typeof f)return f;if(r.rightYAxis&&r.rightYScale)for(let t of a){let i=e.datasets.getDatasetById(t);i.getQuery().usedAsXDataset||(Au(r,e,n,i,"right",s,u),s++)}n.showLegend&&wu(r,e,n),Du(t,r,e)}function Tu(t){switch(t=t.trim().toLowerCase()){case"true":case"1":case"on":case"yes":return!0;case"false":case"0":case"off":case"no":return!1}return null}function _u(t){return"tag"===t.toLowerCase()||"text"===t.toLowerCase()||"frontmatter"===t.toLowerCase()||"wiki"===t.toLowerCase()||"wiki.link"===t.toLowerCase()||"wiki.display"===t.toLowerCase()||"dvfield"===t.toLowerCase()||"table"===t.toLowerCase()||"filemeta"===t.toLowerCase()||"task"===t.toLowerCase()||"task.all"===t.toLowerCase()||"task.done"===t.toLowerCase()||"task.notdone"===t.toLowerCase()}function Eu(t){return"left"===t||"right"===t||"none"===t}function Fu(t){return!0}function Su(t){const e="::::::tracker::::::";let n=t.split("\\,").join(e).split(",");for(let t=0;t<n.length;t++)n[t]=n[t].split(e).join(",");return n}function Bu(t,e,n,r,i){let a=[],o="",l=0;for(;n>a.length;)a.push(r);if(null==e);else if("object"==typeof e&&null!==e){if(Array.isArray(e)){if(e.length>n)return o="Too many inputs for parameter '"+t+"'",o;if(0===e.length)return o="Empty array not allowd for "+t,o;for(let n=0;n<a.length;n++)if(n<e.length){let i=e[n],u=null;if(n>0&&(u=e[n-1].trim()),"string"==typeof i){if(i=i.trim(),""!==i){o="Invalid inputs for "+t;break}a[n]=null!==u?u:r}else{if("boolean"!=typeof i){o="Invalid inputs for "+t;break}a[n]=i,l++}}else{let t=e[e.length-1];a[n]=l>0?t:r}}}else if("string"==typeof e){let i=Su(e);if(i.length>1){if(i.length>n)return o="Too many inputs for parameter '"+t+"'",o;for(let e=0;e<a.length;e++)if(e<i.length){let n=i[e].trim(),u=null;if(e>0&&(u=Tu(i[e-1].trim())),""===n)a[e]=null!==u?u:r;else{let r=Tu(n);if(null===r){o="Invalid inputs for "+t;break}a[e]=r,l++}}else{let t=Tu(i[i.length-1].trim());a[e]=l>0&&null!==t?t:r}}else if(""===e);else{let n=Tu(e);if(null!==n){a[0]=n,l++;for(let t=1;t<a.length;t++)a[t]=n}else o="Invalid inputs for "+t}}else if("boolean"==typeof e){a[0]=e,l++;for(let t=1;t<a.length;t++)a[t]=e}else o="Invalid inputs for "+t;return i||0!==l||(o="No valid input for "+t),""!==o?o:a}function Nu(t,e,n,r,i){let a=[],o="",l=0;for(;n>a.length;)a.push(r);if(null==e);else if("object"==typeof e&&null!==e){if(Array.isArray(e)){if(e.length>n)return o="Too many inputs for parameter '"+t+"'",o;if(0===e.length)return o="Empty array not allowd for "+t,o;for(let n=0;n<a.length;n++)if(n<e.length){let i=e[n],u=null;if(n>0&&(u=e[n-1].trim()),"string"==typeof i){if(i=i.trim(),""!==i){o="Invalid inputs for "+t;break}a[n]=null!==u?u:r}else{if("number"!=typeof i){o="Invalid inputs for "+t;break}a[n]=i,l++}}else{let t=e[e.length-1];a[n]=l>0?t:r}}}else if("string"==typeof e){let i=Su(e);if(i.length>1){if(i.length>n)return o="Too many inputs for parameter '"+t+"'",o;for(let n=0;n<a.length;n++)if(n<i.length){let e=i[n].trim(),u=null;if(n>0&&(u=Ll(i[n-1].trim()).value),""===e)null!==u&&Number.isNumber(u)?a[n]=u:a[n]=r;else{let r=Ll(e).value;if(null===r){o="Invalid inputs for "+t;break}a[n]=r,l++}}else{let t=Ll(i[e.length-1].trim()).value;a[n]=l>0&&null!==t?t:r}}else if(""===e);else{let n=Ll(e).value;if(null!==n){a[0]=n,l++;for(let t=1;t<a.length;t++)a[t]=n}else o="Invalid inputs for "+t}}else if("number"==typeof e)if(Number.isNumber(e)){a[0]=e,l++;for(let t=1;t<a.length;t++)a[t]=e}else o="Invalid inputs for "+t;else o="Invalid inputs for "+t;return i||0!==l||(o="No valid input for "+t),""!==o?o:a}function Iu(t,e){return"string"==typeof t?Il(t):"number"==typeof t?t.toString():e}function Lu(t,e,n,r,i,a){let o=[],l="",u=0;for(;n>o.length;)o.push(r);if(null==e);else if("object"==typeof e&&null!==e){if(Array.isArray(e)){if(e.length>n)return l="Too many inputs for parameter '"+t+"'",l;if(0===e.length)return l="Empty array not allowd for "+t,l;for(let n=0;n<o.length;n++)if(n<e.length){let a=e[n],s=null;if(n>0&&(s=e[n-1].trim()),"string"!=typeof a){l="Invalid inputs for "+t;break}if(a=a.trim(),""===a)o[n]=null!==s?s:r;else if(i){if(!i(a)){l="Invalid inputs for "+t;break}o[n]=a,u++}else o[n]=a,u++}else{let t=e[e.length-1].trim();o[n]=u>0?t:r}}}else if("string"==typeof e){let a=Su(e);if(a.length>1){if(a.length>n)return l="Too many inputs for parameter '"+t+"'",l;for(let e=0;e<o.length;e++)if(e<a.length){let n=a[e].trim(),s=null;if(e>0&&(s=a[e-1].trim()),""===n)o[e]=null!==s?s:r;else if(i){if(!i(n)){l="Invalid inputs for "+t;break}o[e]=n,u++}else o[e]=n,u++}else{let t=a[a.length-1].trim();o[e]=u>0?t:r}}else if(""===e);else if(i)if(i(e)){o[0]=e,u++;for(let t=1;t<o.length;t++)o[t]=e}else l="Invalid inputs for "+t;else{o[0]=e,u++;for(let t=1;t<o.length;t++)o[t]=e}}else if("number"==typeof e){let n=e.toString();if(i)if(i(n)){o[0]=n,u++;for(let t=1;t<o.length;t++)o[t]=n}else l="Invalid inputs for "+t;else{o[0]=n,u++;for(let t=1;t<o.length;t++)o[t]=n}}else l="Invalid inputs for "+t;if(a||0!==u||(l="No valid input for "+t),""!==l)return l;for(let t=0;t<o.length;t++)o[t]=Il(o[t]);return o}function Vu(t,e){let n=[];if(null==e)return n;if("object"==typeof e){if(Array.isArray(e))for(let r of e)if("string"==typeof r){let e=parseFloat(r);if(!Number.isNumber(e)){return`Parameter '${t}' accepts only numbers`}n.push(e)}}else if("string"==typeof e){let r=Su(e);if(r.length>1)for(let e of r){let r=parseFloat(e.trim());if(Number.isNaN(r)){return`Parameter '${t}' accepts only numbers`}n.push(r)}else{if(""===e){return`Empty ${t} is not allowed.`}{let r=parseFloat(e);if(!Number.isNumber(r)){return`Parameter '${t}' accepts only numbers`}n.push(r)}}}else{if("number"!=typeof e){return`Invalid ${t}`}n.push(e)}return n}function Ou(t,e){let n=[];if(null==e)return n;if("object"==typeof e){if(Array.isArray(e))for(let t of e)"string"==typeof t&&n.push(t.trim())}else{if("string"!=typeof e){return`Invalid ${t}`}{let r=Su(e);if(r.length>1)for(let t of r)n.push(t.trim());else{if(""===e){return`Empty ${t} is not allowed.`}n.push(e)}}}for(let t=0;t<n.length;t++)n[t]=Il(n[t]);return n}function Pu(t,e){t&&(e.title=Iu(null==t?void 0:t.title,e.title),e.xAxisLabel=Iu(null==t?void 0:t.xAxisLabel,e.xAxisLabel),e.xAxisColor=Iu(null==t?void 0:t.xAxisColor,e.xAxisColor),e.xAxisLabelColor=Iu(null==t?void 0:t.xAxisLabelColor,e.xAxisLabelColor),"boolean"==typeof t.allowInspectData&&(e.allowInspectData=t.allowInspectData),"boolean"==typeof t.showLegend&&(e.showLegend=t.showLegend),"string"==typeof t.legendPosition?e.legendPosition=t.legendPosition:e.legendPosition="bottom","string"==typeof t.legendOrientation?e.legendOrientation=t.legendOrientation:"top"===e.legendPosition||"bottom"===e.legendPosition?e.legendOrientation="horizontal":"left"===e.legendPosition||"right"===e.legendPosition?e.legendOrientation="vertical":e.legendOrientation="horizontal",e.legendBgColor=Iu(null==t?void 0:t.legendBgColor,e.legendBgColor),e.legendBorderColor=Iu(null==t?void 0:t.legendBorderColor,e.legendBorderColor));let n=Lu("yAxisLabel",null==t?void 0:t.yAxisLabel,2,"Value",null,!0);if("string"==typeof n)return n;if(n.length>2)return"yAxisLabel accepts not more than two values for left and right y-axes";e.yAxisLabel=n;let r=Lu("yAxisColor",null==t?void 0:t.yAxisColor,2,"",Fu,!0);if("string"==typeof r)return r;if(r.length>2)return"yAxisColor accepts not more than two values for left and right y-axes";e.yAxisColor=r;let i=Lu("yAxisLabelColor",null==t?void 0:t.yAxisLabelColor,2,"",Fu,!0);if("string"==typeof i)return i;if(i.length>2)return"yAxisLabelColor accepts not more than two values for left and right y-axes";e.yAxisLabelColor=i;let a=Lu("yAxisUnit",null==t?void 0:t.yAxisUnit,2,"",null,!0);if("string"==typeof a)return a;if(a.length>2)return"yAxisUnit accepts not more than two values for left and right y-axes";e.yAxisUnit=a,e.xAxisTickInterval=Iu(null==t?void 0:t.xAxisTickInterval,e.xAxisTickInterval);let o=Lu("yAxisTickInterval",null==t?void 0:t.yAxisTickInterval,2,null,null,!0);if("string"==typeof o)return o;if(o.length>2)return"yAxisTickInterval accepts not more than two values for left and right y-axes";e.yAxisTickInterval=o,e.xAxisTickLabelFormat=Iu(null==t?void 0:t.xAxisTickLabelFormat,e.xAxisTickLabelFormat);let l=Lu("yAxisTickLabelFormat",null==t?void 0:t.yAxisTickLabelFormat,2,null,null,!0);if("string"==typeof l)return l;if(l.length>2)return"yAxisTickLabelFormat accepts not more than two values for left and right y-axes";e.yAxisTickLabelFormat=l;let u=Nu("yMin",null==t?void 0:t.yMin,2,null,!0);if("string"==typeof u)return u;if(u.length>2)return"yMin accepts not more than two values for left and right y-axes";e.yMin=u;let s=Nu("yMax",null==t?void 0:t.yMax,2,null,!0);if("string"==typeof s)return s;if(s.length>2)return"yMax accepts not more than two values for left and right y-axes";e.yMax=s;let f=Bu("reverseYAxis",null==t?void 0:t.reverseYAxis,2,!1,!0);return"string"==typeof f?f:f.length>2?"reverseYAxis accepts not more than two values for left and right y-axes":void(e.reverseYAxis=f)}function $u(t){let e=[];if(null!==t){const n=Object.keys(t);for(let t of n)e.push(t.toString())}return e}function Yu(t,e){return Cl(kl(t.basename,e.dateFormatPrefix,e.dateFormatSuffix),e.dateFormat)}function zu(t,e,n){let r=window.moment(""),i=t.frontmatter;if(i&&Bl(i,e.getTarget())){let t=Bl(i,e.getTarget());"string"==typeof t&&(t=kl(t,n.dateFormatPrefix,n.dateFormatSuffix),r=Cl(t,n.dateFormat))}return r}function Ru(t,e,n){let r,i=window.moment(""),a=new RegExp(e,"gm");for(;r=a.exec(t);)if(void 0!==r.groups&&void 0!==r.groups.value){let t=r.groups.value.trim();if(t=kl(t,n.dateFormatPrefix,n.dateFormatSuffix),i=Cl(t,n.dateFormat),i.isValid())return i}return i}function Uu(t,e,n){window.moment("");let r=e.getTarget();return e.getParentTarget()&&(r=e.getParentTarget()),Ru(t,"(^|\\s)#"+r+"(\\/[\\w-]+)*(:(?<value>[\\d\\.\\/-]*)[a-zA-Z]*)?([\\.!,\\?;~-]*)?(\\s|$)",n)}function Hu(t,e,n){return window.moment(""),Ru(t,e.getTarget(),n)}function Xu(t,e,n){window.moment("");let r=e.getTarget();return e.getParentTarget()&&(r=e.getParentTarget()),r=r.replace("-","[\\s\\-]"),Ru(t,"(^| |\\t)\\*{0,2}"+r+"\\*{0,2}(::[ |\\t]*(?<value>[\\d\\.\\/\\-\\w,@; \\t:]*))(\\r\\?\\n|\\r|$)",n)}function Wu(e,n,r){let i=window.moment("");if(e&&e instanceof t.TFile){let t=n.getTarget();if("cDate"===t){i=Fl(e.stat.ctime,r.dateFormat)}else if("mDate"===t){i=Fl(e.stat.mtime,r.dateFormat)}else"name"===t&&(i=Yu(e,r))}return i}function ju(t,e,n){window.moment("");let r=e.getType(),i=e.getTarget();return i=r===tl.Task?"\\[[\\sx]\\]\\s"+i:r===tl.TaskDone?"\\[x\\]\\s"+i:r===tl.TaskNotDone?"\\[\\s\\]\\s"+i:"\\[[\\sx]\\]\\s"+i,Ru(t,i,n)}function qu(t,e,n,r){if(t.has(e)){t.get(e).push({query:n,value:r})}else{let i=new Array;i.push({query:n,value:r}),t.set(e,i)}}function Gu(t,e,n,r,i,a){let o,l=new RegExp(e,"gmu"),u=0,s=!1;for(;o=l.exec(t);)if(a.ignoreAttachedValue[n.getId()])u+=a.constValue[n.getId()],s=!0,n.addNumTargets();else if(void 0!==o.groups&&void 0!==o.groups.value){let t=o.groups.value.trim().split(n.getSeparator());if(!t)continue;if(1===t.length){let e=Ll(t[0].trim(),a.textValueMap);null!==e.value&&(e.type===nl.Time?(u=e.value,s=!0,n.valueType=nl.Time,n.addNumTargets()):a.ignoreZeroValue[n.getId()]&&0===e.value||(u+=e.value,s=!0,n.addNumTargets()))}else if(t.length>n.getAccessor()&&n.getAccessor()>=0){let e=Ll(t[n.getAccessor()].trim(),a.textValueMap);null!==e.value&&(e.type===nl.Time?(u=e.value,s=!0,n.valueType=nl.Time,n.addNumTargets()):(u+=e.value,s=!0,n.addNumTargets()))}}else u+=a.constValue[n.getId()],s=!0,n.addNumTargets();if(s){return qu(r,i.get(a.xDataset[n.getId()]),n,u),!0}return!1}function Qu(e,n,r,i,a,o){if(e&&e instanceof t.TFile){let t=r.getTarget(),l=o.get(i.xDataset[r.getId()]);if("cDate"===t){let t=e.stat.ctime;return r.valueType=nl.Date,r.addNumTargets(),qu(a,l,r,t),!0}if("mDate"===t){let t=e.stat.mtime;return r.valueType=nl.Date,r.addNumTargets(),qu(a,l,r,t),!0}if("size"===t){let t=e.stat.size;return r.addNumTargets(),qu(a,l,r,t),!0}if("numWords"===t){return qu(a,l,r,function(t){t=$l(t);var e=new RegExp(["(?:[0-9]+(?:(?:,|\\.)[0-9]+)*|[\\-"+/A-Za-z\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B4\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC/.source+"])+",/[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u4E00-\u9FD5]{1}/.source].join("|"),"g");return(t.match(e)||[]).length}(n)),!0}if("numChars"===t){let t=n.length;return r.addNumTargets(),qu(a,l,r,t),!0}if("numSentences"===t){let t=function(t){return(((t=$l(t))||"").match(/[^.。!?\s][^.。!?]*(?:[.!?](?!['"“”「」『』]?\s|$)[^.。!?]*)*[.。!?]?['"”」』]?(?=\s||$)/gm)||[]).length}(n);return r.addNumTargets(),qu(a,l,r,t),!0}if("name"===t){let t=0,n=!1,o=Ll(e.basename,i.textValueMap);null!==o.value&&(o.type===nl.Time?(t=o.value,n=!0,r.valueType=nl.Time,r.addNumTargets()):i.ignoreZeroValue[r.getId()]&&0===o.value||(t+=o.value,n=!0,r.addNumTargets()));let u=null;if(n&&(u=t),null!==u)return qu(a,l,r,u),!0}}return!1}const Zu={folder:"/",dateFormat:"YYYY-MM-DD"};class Ku extends t.PluginSettingTab{constructor(t,e){super(t,e),this.plugin=e}display(){let{containerEl:n}=this;n.empty(),new t.Setting(n).setName("Default folder location").setDesc("Files in this folder will be parsed and used as input data of the tracker plugin.\nYou can also override it using 'folder' argument in the tracker codeblock.").addText((t=>t.setPlaceholder("Folder Path").setValue(this.plugin.settings.folder).onChange((t=>e(this,void 0,void 0,(function*(){this.plugin.settings.folder=t,yield this.plugin.saveSettings()})))))),new t.Setting(n).setName("Default date format").setDesc("This format is used to parse the date in your diary title.\nYou can also override it using 'dateFormat' argument in the tracker codeblock.").addText((t=>t.setPlaceholder("YYYY-MM-DD").setValue(this.plugin.settings.dateFormat).onChange((t=>e(this,void 0,void 0,(function*(){this.plugin.settings.dateFormat=t,yield this.plugin.saveSettings()}))))))}}class Ju extends t.Plugin{onload(){return e(this,void 0,void 0,(function*(){console.log("loading obsidian-tracker plugin"),yield this.loadSettings(),this.addSettingTab(new Ku(this.app,this)),this.registerMarkdownCodeBlockProcessor("tracker",this.postprocessor.bind(this)),this.addCommand({id:"add-line-chart-tracker",name:"Add Line Chart Tracker",callback:()=>this.addCodeBlock(el.Line)}),this.addCommand({id:"add-bar-chart-tracker",name:"Add Bar Chart Tracker",callback:()=>this.addCodeBlock(el.Bar)}),this.addCommand({id:"add-summary-tracker",name:"Add Summary Tracker",callback:()=>this.addCodeBlock(el.Summary)})}))}loadSettings(){return e(this,void 0,void 0,(function*(){this.settings=Object.assign({},Zu,yield this.loadData())}))}saveSettings(){return e(this,void 0,void 0,(function*(){yield this.saveData(this.settings)}))}renderErrorMessage(t,e,n){!function(t,e){ee(t).select("#svg").remove(),ee(t).append("div").text(e).style("background-color","white").style("margin-bottom","20px").style("padding","10px").style("color","red")}(e,t),n.appendChild(e)}onunload(){console.log("unloading obsidian-tracker plugin")}getFilesInFolder(e,n=!0){let r=[];for(let i of e.children)i instanceof t.TFile?"md"===i.extension&&r.push(i):i instanceof t.TFolder&&n&&(r=r.concat(this.getFilesInFolder(i)));return r}getFiles(n,r){return e(this,arguments,void 0,(function*(e,n,r=!0){if(!e)return;let i=n.folder,a=n.specifiedFilesOnly,o=n.file,l=n.fileContainsLinkedFiles,u=n.fileMultiplierAfterLink;if(!a){let n=this.app.vault.getAbstractFileByPath(t.normalizePath(i));if(n&&n instanceof t.TFolder){let t=this.getFilesInFolder(n);for(let n of t)e.push(n)}}for(let n of o){let r=n;r.endsWith(".md")||(r+=".md"),r=t.normalizePath(r);let i=this.app.vault.getAbstractFileByPath(r);i&&i instanceof t.TFile&&e.push(i)}let s=1,f=!0;""===u?f=!1:/^[0-9]+$/.test(u)?(s=parseFloat(u),f=!1):/\?<value>/.test(u)||(f=!1);for(let r of l){r.endsWith(".md")||(r+=".md");let i=this.app.vault.getAbstractFileByPath(t.normalizePath(r));if(i&&i instanceof t.TFile){let a=this.app.metadataCache.getFileCache(i),o=(yield this.app.vault.adapter.read(i.path)).split(/\r\n|[\n\v\f\r\x85\u2028\u2029]/);if(!(null==a?void 0:a.links))continue;for(let i of a.links){if(!i)continue;let a=this.app.metadataCache.getFirstLinkpathDest(i.link,r);if(a&&a instanceof t.TFile){if(f){let t=i.position.end.line;if(t>=0&&t<o.length){let e=o[t].split(i.original);if(2===e.length){let t,r=e[1].trim(),i=new RegExp(u,"gm");for(;t=i.exec(r);)if(void 0!==t.groups&&void 0!==t.groups.value){let e=Ll(t.groups.value.trim(),n.textValueMap);if(null!==e.value){s=e.value;break}}}}}for(let t=0;t<s;t++)e.push(a)}}}}}))}postprocessor(n,r,i){return e(this,void 0,void 0,(function*(){const i=document.createElement("div");let a=n.trim(),o=this.app.vault.getConfig("tabSize"),l=Array(o).fill(" ").join("");a=a.replace(/\t/gm,l);let u=function(e,n){let r;try{r=t.parseYaml(e)}catch(t){let e="Error parsing YAML";return console.log(t),e}if(!r)return"Error parsing YAML";let i=$u(r),a="";if(!i.includes("searchTarget"))return"Parameter 'searchTarget' not found in YAML";let o=[];if("object"==typeof r.searchTarget&&null!==r.searchTarget){if(Array.isArray(r.searchTarget))for(let t of r.searchTarget)if("string"==typeof t){if(""===t){a="Empty search target is not allowed.";break}o.push(t)}}else if("string"==typeof r.searchTarget){let t=Su(r.searchTarget);if(t.length>1)for(let e of t){if(e=e.trim(),""===e){a="Empty search target is not allowed.";break}o.push(e)}else""===r.searchTarget?a="Empty search target is not allowed.":o.push(r.searchTarget)}else a="Invalid search target (searchTarget)";for(let t=0;t<o.length;t++)o[t]=Il(o[t]);if(""!==a)return a;let l=o.length;if(!i.includes("searchType"))return"Parameter 'searchType' not found in YAML";let u=[],s=Lu("searchType",r.searchType,l,"",_u,!1);if("string"==typeof s)return s;for(let t of s)switch(t.toLowerCase()){case"tag":u.push(tl.Tag);break;case"frontmatter":u.push(tl.Frontmatter);break;case"wiki":u.push(tl.Wiki);break;case"wiki.link":u.push(tl.WikiLink);break;case"wiki.display":u.push(tl.WikiDisplay);break;case"text":u.push(tl.Text);break;case"dvfield":u.push(tl.dvField);break;case"table":u.push(tl.Table);break;case"filemeta":u.push(tl.FileMeta);break;case"task":case"task.all":u.push(tl.Task);break;case"task.done":u.push(tl.TaskDone);break;case"task.notdone":u.push(tl.TaskNotDone)}if(u.includes(tl.Table)&&u.filter((t=>t!==tl.Table)).length>0)return"searchType 'table' doestn't work with other types for now";let f=[],c=Lu("separator",r.separator,l,"",null,!0);if("string"==typeof c)return c;f=c.map((t=>"comma"===t||"\\,"===t?",":t));let h=Nu("xDataset",r.xDataset,l,-1,!0);if("string"==typeof h)return h;let d=h.map((t=>t<0||t>=l?-1:t)),g=[];for(let t=0;t<o.length;t++){let e=new il(g.length,u[t],o[t]);e.setSeparator(f[t]),d.includes(t)&&(e.usedAsXDataset=!0),g.push(e)}let p=new ll(g),y=$u(p),m=["searchType","searchTarget","separator"],v=[],x=[],A=[],w=[],b=[],D=[],k=[];for(let t of i)/^line[0-9]*$/.test(t)&&(v.push(t),m.push(t)),/^bar[0-9]*$/.test(t)&&(x.push(t),m.push(t)),/^pie[0-9]*$/.test(t)&&(A.push(t),m.push(t)),/^summary[0-9]*$/.test(t)&&(w.push(t),m.push(t)),/^bullet[0-9]*$/.test(t)&&(k.push(t),m.push(t)),/^month[0-9]*$/.test(t)&&(b.push(t),m.push(t)),/^heatmap[0-9]*$/.test(t)&&(D.push(t),m.push(t));let C=[];for(let t of i)if(/^dataset[0-9]*$/.test(t)){let e=-1,n=t.replace("dataset","");if(e=""===n?0:parseFloat(n),g.some((t=>t.getId()===e)))return a="Duplicated dataset id for key '"+t+"'",a;C.push(t),m.push(t)}for(let t of i)if(!y.includes(t)&&!m.includes(t))return a="'"+t+"' is not an available key",a;if(0===v.length+x.length+A.length+w.length+k.length+b.length+D.length)return"No output parameter provided, please place line, bar, pie, month, bullet, or summary.";p.folder=Iu(null==r?void 0:r.folder,n.settings.folder),""===p.folder.trim()&&(p.folder=n.settings.folder);let M=n.app.vault.getAbstractFileByPath(t.normalizePath(p.folder));if(!(M&&M instanceof t.TFolder))return"Folder '"+p.folder+"' doesn't exist";if("string"==typeof r.file){let t=Ou("file",r.file);if("string"==typeof t)return t;p.file=t}if("boolean"==typeof r.specifiedFilesOnly&&(p.specifiedFilesOnly=r.specifiedFilesOnly),"string"==typeof r.fileContainsLinkedFiles){let t=Ou("fileContainsLinkedFiles",r.fileContainsLinkedFiles);if("string"==typeof t)return t;p.fileContainsLinkedFiles=t}p.fileMultiplierAfterLink=Iu(null==r?void 0:r.fileMultiplierAfterLink,p.fileMultiplierAfterLink);const T=r.dateFormat;if("string"==typeof r.dateFormat?""===r.dateFormat?p.dateFormat=n.settings.dateFormat:p.dateFormat=T:p.dateFormat=n.settings.dateFormat,p.dateFormatPrefix=Iu(null==r?void 0:r.dateFormatPrefix,p.dateFormatPrefix),p.dateFormatSuffix=Iu(null==r?void 0:r.dateFormatSuffix,p.dateFormatSuffix),"string"==typeof r.startDate){if(/^([\-]?[0-9]+[\.][0-9]+|[\-]?[0-9]+)m$/.test(r.startDate))return"'m' for 'minute' is too small for parameter startDate, please use 'd' for 'day' or 'M' for month";let t=kl(r.startDate,p.dateFormatPrefix,p.dateFormatSuffix),e=null,n=!1;if(e=_l(t,p.dateFormat),e?n=!0:(e=Cl(t,p.dateFormat),e.isValid()&&(n=!0)),!n||null===e)return"Invalid startDate, the format of startDate may not match your dateFormat "+p.dateFormat;p.startDate=e}if("string"==typeof r.endDate){if(/^([\-]?[0-9]+[\.][0-9]+|[\-]?[0-9]+)m$/.test(r.endDate))return"'m' for 'minute' is too small for parameter endDate, please use 'd' for 'day' or 'M' for month";let t=kl(r.endDate,p.dateFormatPrefix,p.dateFormatSuffix),e=null,n=!1;if(e=_l(t,p.dateFormat),e?n=!0:(e=Cl(t,p.dateFormat),e.isValid()&&(n=!0)),!n||null===e)return"Invalid endDate, the format of endDate may not match your dateFormat "+p.dateFormat;p.endDate=e}if(null!==p.startDate&&p.startDate.isValid()&&null!==p.endDate&&p.endDate.isValid()&&p.endDate<p.startDate)return"Invalid date range (startDate larger than endDate)";p.xDataset=d;let _=Lu("datasetName",r.datasetName,l,"untitled",null,!0);if("string"==typeof _)return _;let E=0;for(let t=0;t<_.length;t++)p.xDataset.includes(t)||"untitled"===_[t]&&(_[t]="untitled"+E.toString(),E++);if(new Set(_).size!==_.length)return"Not enough dataset names or duplicated names";p.datasetName=_;let F=Nu("constValue",r.constValue,l,1,!0);if("string"==typeof F)return F;p.constValue=F;let S=Bu("ignoreAttachedValue",r.ignoreAttachedValue,l,!1,!0);if("string"==typeof S)return S;p.ignoreAttachedValue=S;let B=Bu("ignoreZeroValue",r.ignoreZeroValue,l,!1,!0);if("string"==typeof B)return B;p.ignoreZeroValue=B;let N=Bu("accum",r.accum,l,!1,!0);if("string"==typeof N)return N;p.accum=N;let I=Nu("penalty",r.penalty,l,null,!0);if("string"==typeof I)return I;p.penalty=I;let L=Nu("valueShift",r.valueShift,l,0,!0);if("string"==typeof L)return L;p.valueShift=L;let V=Nu("shiftOnlyValueLargerThan",r.shiftOnlyValueLargerThan,l,null,!0);if("string"==typeof V)return V;if(p.shiftOnlyValueLargerThan=V,void 0!==r.textValueMap){let t=$u(r.textValueMap);for(let e of t){let t=e.trim();p.textValueMap[t]=r.textValueMap[t]}}if("number"==typeof r.fixedScale&&(p.fixedScale=r.fixedScale),"boolean"==typeof r.fitPanelWidth&&(p.fitPanelWidth=r.fitPanelWidth),"string"==typeof r.aspectRatio){let t=/([0-9]*):([0-9]*)/,e=r.aspectRatio.match(t);e.shift(),e=e.map((t=>parseInt(t,10))),2==e.length&&(p.aspectRatio=new vl(e[0],e[1]),p.dataAreaSize=p.aspectRatio.recalculateSize(p.dataAreaSize))}let O=Nu("margin",r.margin,4,10,!0);if("string"==typeof O)return O;if(O.length>4)return"margin accepts not more than four values for top, right, bottom, and left margins.";p.margin=new xl(O[0],O[1],O[2],O[3]);for(let t of C){let e=new ul,n=r[t],i=$u(e),o=$u(n);for(let t of o)if(!i.includes(t))return a="'"+t+"' is not an available key",a;let l=-1,u=t.replace("dataset","");l=""===u?0:parseFloat(u),e.id=l,e.name=Iu(null==n?void 0:n.name,e.name);let s=Ou("xData",null==n?void 0:n.xData);if("string"==typeof s)return s;e.xData=s;let f=e.xData.length,c=Ou("yData",null==n?void 0:n.yData);if("string"==typeof c)return c;if(e.yData=c,e.yData.length!==f)return"Number of elements in xData and yData not matched";p.customDataset.push(e)}for(let t of v){let e=new fl,n=r[t],i=$u(e),o=$u(n);for(let t of o)if(!i.includes(t))return a="'"+t+"' is not an available key",a;let u=Pu(n,e);if("string"==typeof u)return u;let s=Lu("lineColor",null==n?void 0:n.lineColor,l,"",Fu,!0);if("string"==typeof s)return s;e.lineColor=s;let f=Nu("lineWidth",null==n?void 0:n.lineWidth,l,1.5,!0);if("string"==typeof f)return f;e.lineWidth=f;let c=Bu("showLine",null==n?void 0:n.showLine,l,!0,!0);if("string"==typeof c)return c;e.showLine=c;let h=Bu("showPoint",null==n?void 0:n.showPoint,l,!0,!0);if("string"==typeof h)return h;e.showPoint=h;let d=Lu("pointColor",null==n?void 0:n.pointColor,l,"#69b3a2",Fu,!0);if("string"==typeof d)return d;e.pointColor=d;let g=Lu("pointBorderColor",null==n?void 0:n.pointBorderColor,l,"#69b3a2",Fu,!0);if("string"==typeof g)return g;e.pointBorderColor=g;let y=Nu("pointBorderWidth",null==n?void 0:n.pointBorderWidth,l,0,!0);if("string"==typeof y)return y;e.pointBorderWidth=y;let m=Nu("pointSize",null==n?void 0:n.pointSize,l,3,!0);if("string"==typeof m)return m;e.pointSize=m;let v=Bu("fillGap",null==n?void 0:n.fillGap,l,!1,!0);if("string"==typeof v)return v;e.fillGap=v;let x=Lu("yAxisLocation",null==n?void 0:n.yAxisLocation,l,"left",Eu,!0);if("string"==typeof x)return x;e.yAxisLocation=x,p.line.push(e)}for(let t of x){let e=new cl,n=r[t],i=$u(e),o=$u(n);for(let t of o)if(!i.includes(t))return a="'"+t+"' is not an available key",a;let u=Pu(n,e);if("string"==typeof u)return u;let s=Lu("barColor",null==n?void 0:n.barColor,l,"",Fu,!0);if("string"==typeof s)return s;e.barColor=s;let f=Lu("yAxisLocation",null==n?void 0:n.yAxisLocation,l,"left",Eu,!0);if("string"==typeof f)return f;e.yAxisLocation=f,p.bar.push(e)}for(let t of A){let e=new hl,n=r[t],i=$u(e),o=$u(n);for(let t of o)if(!i.includes(t))return a="'"+t+"' is not an available key",a;e.title=Iu(null==n?void 0:n.title,e.title);let l=Ou("data",null==n?void 0:n.data);if("string"==typeof l)return l;e.data=l;let u=e.data.length,s=Lu("dataColor",null==n?void 0:n.dataColor,u,null,Fu,!0);if("string"==typeof s)return s;e.dataColor=s;let f=Lu("dataName",null==n?void 0:n.dataName,u,"",null,!0);if("string"==typeof f)return f;e.dataName=f;let c=Lu("label",null==n?void 0:n.label,u,"",null,!0);if("string"==typeof c)return c;e.label=c,"number"==typeof(null==n?void 0:n.hideLabelLessThan)&&(e.hideLabelLessThan=n.hideLabelLessThan);let h=Lu("extLabel",null==n?void 0:n.extLabel,u,"",null,!0);if("string"==typeof h)return h;e.extLabel=h,"boolean"==typeof(null==n?void 0:n.showExtLabelOnlyIfNoLabel)&&(e.showExtLabelOnlyIfNoLabel=n.showExtLabelOnlyIfNoLabel),"number"==typeof(null==n?void 0:n.ratioInnerRadius)&&(e.ratioInnerRadius=n.ratioInnerRadius),"boolean"==typeof(null==n?void 0:n.showLegend)&&(e.showLegend=n.showLegend),e.legendPosition=Iu(null==n?void 0:n.legendPosition,"right");let d="horizontal";d="top"===e.legendPosition||"bottom"===e.legendPosition?"horizontal":"left"===e.legendPosition||"right"===e.legendPosition?"vertical":"horizontal",e.legendOrientation=Iu(null==n?void 0:n.legendOrientation,d),e.legendBgColor=Iu(null==n?void 0:n.legendBgColor,e.legendBgColor),e.legendBorderColor=Iu(null==n?void 0:n.legendBorderColor,e.legendBorderColor),p.pie.push(e)}for(let t of w){let e=new dl,n=r[t],i=$u(e),o=$u(n);for(let t of o)if(!i.includes(t))return a="'"+t+"' is not an available key",a;e.template=Iu(null==n?void 0:n.template,e.template),e.style=Iu(null==n?void 0:n.style,e.style),p.summary.push(e)}for(let t of b){let e=new gl,n=r[t],i=$u(e),o=$u(n);for(let t of o)if(!i.includes(t))return a="'"+t+"' is not an available key",a;e.mode=Iu(null==n?void 0:n.mode,e.mode);let l=Vu("dataset",null==n?void 0:n.dataset);if("string"==typeof l)return l;if(0===l.length)for(let t of g)l.push(t.getId());e.dataset=l;let u=e.dataset.length;e.startWeekOn=Iu(null==n?void 0:n.startWeekOn,e.startWeekOn),"boolean"==typeof(null==n?void 0:n.showCircle)&&(e.showCircle=n.showCircle);let s=Vu("threshold",null==n?void 0:n.threshold);if("string"==typeof s)return s;if(e.threshold=s,0===e.threshold.length)for(let t=0;t<u;t++)e.threshold.push(0);if(e.threshold.length!==e.dataset.length)return"The number of inputs of threshold and dataset not matched";let f=Vu("yMin",null==n?void 0:n.yMin);if("string"==typeof f)return f;if(e.yMin=f,0===e.yMin.length)for(let t=0;t<u;t++)e.yMin.push(null);if(e.yMin.length!==e.dataset.length)return"The number of inputs of yMin and dataset not matched";let c=Vu("yMax",null==n?void 0:n.yMax);if("string"==typeof c)return c;if(e.yMax=c,0===e.yMax.length)for(let t=0;t<u;t++)e.yMax.push(null);if(e.yMax.length!==e.dataset.length)return"The number of inputs of yMin and dataset not matched";e.color=Iu(null==n?void 0:n.color,e.color),"boolean"==typeof(null==n?void 0:n.dimNotInMonth)&&(e.dimNotInMonth=n.dimNotInMonth),"boolean"==typeof(null==n?void 0:n.showStreak)&&(e.showStreak=n.showStreak),"boolean"==typeof(null==n?void 0:n.showTodayRing)&&(e.showTodayRing=n.showTodayRing),"boolean"==typeof(null==n?void 0:n.showSelectedValue)&&(e.showSelectedValue=n.showSelectedValue),"boolean"==typeof(null==n?void 0:n.showSelectedRing)&&(e.showSelectedRing=n.showSelectedRing),e.circleColor=Iu(null==n?void 0:n.circleColor,e.circleColor),"boolean"==typeof(null==n?void 0:n.circleColorByValue)&&(e.circleColorByValue=n.circleColorByValue),e.headerYearColor=Iu(null==n?void 0:n.headerYearColor,e.headerYearColor),e.headerMonthColor=Iu(null==n?void 0:n.headerMonthColor,e.headerMonthColor),e.dividingLineColor=Iu(null==n?void 0:n.dividingLineColor,e.dividingLineColor),e.todayRingColor=Iu(null==n?void 0:n.todayRingColor,e.todayRingColor),e.selectedRingColor=Iu(null==n?void 0:n.selectedRingColor,e.selectedRingColor),e.initMonth=Iu(null==n?void 0:n.initMonth,e.initMonth),"boolean"==typeof(null==n?void 0:n.showAnnotation)&&(e.showAnnotation=n.showAnnotation);let h=Ou("annotation",null==n?void 0:n.annotation);if("string"==typeof h)return h;if(e.annotation=h,0===e.annotation.length)for(let t=0;t<u;t++)e.annotation.push(null);if(e.annotation.length!==e.dataset.length)return"The number of inputs of annotation and dataset not matched";"boolean"==typeof(null==n?void 0:n.showAnnotationOfAllTargets)&&(e.showAnnotationOfAllTargets=n.showAnnotationOfAllTargets),p.month.push(e)}for(let t of D){let e=new pl,n=r[t],i=$u(e),o=$u(n);for(let t of o)if(!i.includes(t))return a="'"+t+"' is not an available key",a;p.heatmap.push(e)}for(let t of k){let e=new yl,n=r[t],i=$u(e),o=$u(n);for(let t of o)if(!i.includes(t))return a="'"+t+"' is not an available key",a;e.title=Iu(null==n?void 0:n.title,e.title),e.dataset=Iu(null==n?void 0:n.dataset,e.dataset),e.orientation=Iu(null==n?void 0:n.orientation,e.orientation);let l=Vu("range",null==n?void 0:n.range);if("string"==typeof l)return l;let u=l;if(1===u.length){if(u[0]<0)return a="Negative range value is not allowed",a}else{if(!(u.length>1))return a="Empty range is not allowed",a;{let t=u[0];if(t<0)return a="Negative range value is not allowed",a;for(let e=1;e<u.length;e++)if(u[e]<=t)return a="Values in parameter 'range' should be monotonically increasing",a}}e.range=u;let s=u.length,f=Lu("rangeColor",null==n?void 0:n.rangeColor,s,"",Fu,!0);if("string"==typeof f)return f;e.rangeColor=f,e.value=Iu(null==n?void 0:n.value,e.value),e.valueUnit=Iu(null==n?void 0:n.valueUnit,e.valueUnit),e.valueColor=Iu(null==n?void 0:n.valueColor,e.valueColor),"boolean"==typeof(null==n?void 0:n.showMarker)&&(e.showMarker=n.showMarker),"number"==typeof(null==n?void 0:n.markerValue)&&(e.markerValue=n.markerValue),e.markerColor=Iu(null==n?void 0:n.markerColor,e.markerColor),p.bullet.push(e)}return p}(a,this);if("string"==typeof u)return this.renderErrorMessage(u,i,r);let s=u,f=[];try{yield this.getFiles(f,s)}catch(t){return this.renderErrorMessage(t.message,i,r)}if(0===f.length)return this.renderErrorMessage("No markdown files found in folder",i,r);let c=new Map,h=new bl;h.fileTotal=f.length;const d=f.map((t=>e(this,void 0,void 0,(function*(){let n=null;s.queries.some((t=>{let e=t.getType();return t.getTarget(),e===tl.Frontmatter||e===tl.Tag||e===tl.Wiki||e===tl.WikiLink||e===tl.WikiDisplay}))&&(n=this.app.metadataCache.getFileCache(t));let r=null;s.queries.some((t=>{let e=t.getType(),n=t.getTarget();return e===tl.Tag||e===tl.Text||e===tl.dvField||e===tl.Task||e===tl.TaskDone||e===tl.TaskNotDone||e===tl.FileMeta&&("numWords"===n||"numChars"===n||"numSentences"===n)}))&&(r=yield this.app.vault.adapter.read(t.path));let i=new Map,a=!1;for(let e of s.xDataset)if(!i.has(e)){let o=window.moment("");if(-1===e)o=Yu(t,s);else{let i=s.queries[e];switch(i.getType()){case tl.Frontmatter:o=zu(n,i,s);break;case tl.Tag:o=Uu(r,i,s);break;case tl.Text:o=Hu(r,i,s);break;case tl.dvField:o=Xu(r,i,s);break;case tl.FileMeta:o=Wu(t,i,s);break;case tl.Task:case tl.TaskDone:case tl.TaskNotDone:o=ju(r,i,s)}}o.isValid()?(null!==s.startDate&&o<s.startDate&&(a=!0,h.fileOutOfDateRange++),null!==s.endDate&&o>s.endDate&&(a=!0,h.fileOutOfDateRange++)):(a=!0,h.fileNotInFormat++),a||(h.gotAnyValidXValue||(h.gotAnyValidXValue=!0),i.set(e,El(o,s.dateFormat)),h.fileAvailable++,1==h.fileAvailable?(h.minDate=o.clone(),h.maxDate=o.clone()):(o<h.minDate&&(h.minDate=o.clone()),o>h.maxDate&&(h.maxDate=o.clone())))}if(a)return;const o=s.queries.filter((t=>t.getType()!==tl.Table&&!t.usedAsXDataset)).map((a=>e(this,void 0,void 0,(function*(){if(n&&a.getType()===tl.Tag){let t=function(t,e,n,r,i){let a=t.frontmatter,o=[];if(a&&a.tags){let t=0,l=!1;if(Array.isArray(a.tags))o=o.concat(a.tags);else if("string"==typeof a.tags){let t=a.tags.split(e.getSeparator(!0));for(let e of t){let t=e.trim();""!==t&&o.push(t)}}for(let a of o){if(a===e.getTarget())t+=n.constValue[e.getId()],l=!0,e.addNumTargets();else{if(!a.startsWith(e.getTarget()+"/"))continue;t+=n.constValue[e.getId()],l=!0,e.addNumTargets()}let o=null;return l&&(o=t),qu(r,i.get(n.xDataset[e.getId()]),e,o),!0}}return!1}(n,a,s,c,i);h.gotAnyValidYValue||(h.gotAnyValidYValue=t)}if(n&&a.getType()===tl.Frontmatter&&"tags"!==a.getTarget()){let t=function(t,e,n,r,i){let a=t.frontmatter;if(a){let t=Bl(a,e.getTarget());if(t){let a=Ll(t,n.textValueMap);if(null===a.value&&("true"!==t&&"false"!==t||(a.type=nl.Number,a.value="true"===t?1:0)),null!==a.value)return a.type===nl.Time&&(e.valueType=nl.Time),e.addNumTargets(),qu(r,i.get(n.xDataset[e.getId()]),e,a.value),!0}else if(e.getParentTarget()&&Bl(a,e.getParentTarget())){let t=Bl(a,e.getParentTarget()),o=null;if(Array.isArray(t)?o=t.map((t=>t.toString())):"string"==typeof t&&(o=t.split(e.getSeparator())),o&&o.length>e.getAccessor()&&e.getAccessor()>=0){let t=Ll(o[e.getAccessor()].trim(),n.textValueMap);if(null!==t.value)return t.type===nl.Time&&(e.valueType=nl.Time),e.addNumTargets(),qu(r,i.get(n.xDataset[e.getId()]),e,t.value),!0}}}return!1}(n,a,s,c,i);h.gotAnyValidYValue||(h.gotAnyValidYValue=t)}if(n&&(a.getType()===tl.Wiki||a.getType()===tl.WikiLink||a.getType()===tl.WikiDisplay)){let t=function(t,e,n,r,i){let a=t.links;if(!a)return!1;let o=e.getTarget(),l=e.getType(),u="",s=o;for(let t of a){if(!t)continue;let e="";l===tl.Wiki?e=t.displayText?t.displayText:t.link:l===tl.WikiLink?e=t.link:l===tl.WikiDisplay?t.displayText&&(e=t.displayText):e=t.displayText?t.displayText:t.link,e=e.trim(),u+=e+"\n"}return Gu(u,s,e,r,i,n)}(n,a,s,c,i);h.gotAnyValidYValue||(h.gotAnyValidYValue=t)}if(r&&a.getType()===tl.Tag){let t=function(t,e,n,r,i){let a=e.getTarget();return e.getParentTarget()&&(a=e.getParentTarget()),a.length>1&&a.startsWith("#")&&(a=a.substring(1)),Gu(t,"(^|\\s)#"+a+"(\\/[\\w-]+)*(:(?<value>[\\d\\.\\/-]*)[a-zA-Z]*)?([\\.!,\\?;~-]*)?(\\s|$)",e,r,i,n)}(r,a,s,c,i);h.gotAnyValidYValue||(h.gotAnyValidYValue=t)}if(r&&a.getType()===tl.Text){let t=function(t,e,n,r,i){return Gu(t,e.getTarget(),e,r,i,n)}(r,a,s,c,i);h.gotAnyValidYValue||(h.gotAnyValidYValue=t)}if(a.getType()===tl.FileMeta){let e=Qu(t,r,a,s,c,i);h.gotAnyValidYValue||(h.gotAnyValidYValue=e)}if(r&&a.getType()===tl.dvField){let t=function(t,e,n,r,i){let a=e.getTarget();return e.getParentTarget()&&(a=e.getParentTarget()),a=a.replace("-","[\\s\\-]"),Gu(t,String.raw`(^| |\t|\|)(\[|\()?\*{0,2}`+a+String.raw`\*{0,2}(::[ |\t]*(?<value>[\p{ExtPict}\d\.\/\-\w,@; \t:`+"\\w$€£¥¢₹₨₱₩฿₫₪α-ωΑ-Ω©®℗™℠一-鿿㐀-䶿 、-〿"+String.raw`]*)(\]|\))?)`,e,r,i,n)}(r,a,s,c,i);h.gotAnyValidYValue||(h.gotAnyValidYValue=t)}if(r&&(a.getType()===tl.Task||a.getType()===tl.TaskDone||a.getType()===tl.TaskNotDone)){let t=function(t,e,n,r,i){let a=e.getType(),o=e.getTarget();return o=a===tl.Task?"\\[[\\sx]\\]\\s"+o:a===tl.TaskDone?"\\[x\\]\\s"+o:a===tl.TaskNotDone?"\\[\\s\\]\\s"+o:"\\[[\\sx]\\]\\s"+o,Gu(t,o,e,r,i,n)}(r,a,s,c,i);h.gotAnyValidYValue||(h.gotAnyValidYValue=t)}}))));yield Promise.all(o)}))));if(yield Promise.all(d),yield this.collectDataFromTable(c,s,h),h.errorMessage)return this.renderErrorMessage(h.errorMessage,i,r);let g="";if(h.minDate.isValid()&&h.maxDate.isValid()&&0!==h.fileAvailable&&h.gotAnyValidXValue||(g="No valid date as X value found in notes",h.fileOutOfDateRange>0&&(g+=`\n${h.fileOutOfDateRange} files are out of the date range.`),h.fileNotInFormat&&(g+=`\n${h.fileNotInFormat} files are not in the right format.`)),null===s.startDate&&null===s.endDate?(s.startDate=h.minDate.clone(),s.endDate=h.maxDate.clone()):null!==s.startDate&&null===s.endDate?s.startDate<h.maxDate?s.endDate=h.maxDate.clone():g="Invalid date range":null!==s.endDate&&null===s.startDate?s.endDate>h.minDate?s.startDate=h.minDate.clone():g="Invalid date range":(s.startDate<h.minDate&&s.endDate<h.minDate||s.startDate>h.maxDate&&s.endDate>h.maxDate)&&(g="Invalid date range"),g)return this.renderErrorMessage(g,i,r);if(!h.gotAnyValidYValue)return this.renderErrorMessage("No valid Y value found in notes",i,r);let p=new ol(s.startDate,s.endDate);for(let t of s.queries){let e=p.createDataset(t,s);e.addNumTargets(t.getNumTargets());for(let n=s.startDate.clone();n<=s.endDate;n.add(1,"days"))if(c.has(El(n,s.dateFormat))){let r=c.get(El(n,s.dateFormat)).filter((function(e){return e.query.equalTo(t)}));if(r.length>0){let t=null;for(let e=0;e<r.length;e++){let n=r[e].value;Number.isNumber(n)&&!Number.isNaN(n)&&(null===t?t=n:t+=n)}null!==t&&e.setValue(n,t)}}}s.datasets=p;let y=function(t,e){for(let t of e.datasets){if(t.getQuery().usedAsXDataset)continue;let n=e.valueShift[t.getId()];null!==n&&0!==n&&t.shift(n,e.shiftOnlyValueLargerThan[t.getId()]),null!==e.penalty[t.getId()]&&t.setPenalty(e.penalty[t.getId()]),e.accum[t.getId()]&&t.accumulateValues()}for(let n of e.line){let r=Cu(t,e,n);if("string"==typeof r)return r}for(let n of e.bar){let r=Mu(t,e,n);if("string"==typeof r)return r}for(let n of e.pie){let r=nu(t,e,n);if("string"==typeof r)return r}for(let n of e.summary){let r=ru(t,e,n);if("string"==typeof r)return r}for(let n of e.bullet){let r=pu(t,e,n);if("string"==typeof r)return r}for(let n of e.month){let r=du(t,e,n);if("string"==typeof r)return r}for(let t of e.heatmap){let t=gu(0,e);if("string"==typeof t)return t}}(i,s);if("string"==typeof y)return this.renderErrorMessage(y,i,r);r.appendChild(i)}))}collectDataFromTable(n,r,i){return e(this,void 0,void 0,(function*(){let e=r.queries.filter((t=>t.getType()===tl.Table)),a=[],o=!1;for(let n of e){let e=n.getParentTarget(),r=this.app.vault.getAbstractFileByPath(t.normalizePath(e+".md"));if(!(r&&r instanceof t.TFile)){o=!0;break}let i=n.getAccessor(),l=n.usedAsXDataset,u=a.find((t=>t.filePath===e&&t.tableIndex===i));if(u)l?u.xDataset=n:u.yDatasets.push(n);else{let t=new wl(e,i);l?t.xDataset=n:t.yDatasets.push(n),a.push(t)}}if(o)i.errorMessage="File containing tables not found";else for(let e of a){let a=e.xDataset;if(!a)continue;let o=e.yDatasets,l=a.getParentTarget(),u=a.getAccessor(),s="";l+=".md";let f=this.app.vault.getAbstractFileByPath(t.normalizePath(l));if(!(f&&f instanceof t.TFile))continue;{i.fileAvailable++;let t,e=yield this.app.vault.adapter.read(f.path),n=new RegExp("((\\r?\\n){2}|^)([^\\r\\n]*\\|[^\\r\\n]*(\\r?\\n)?)+(?=(\\r?\\n){2}|$)","gm"),r=0;for(;t=n.exec(e);){if(r===u){s=t[0];break}r++}}let c=s.split(/\r?\n/);c=c.filter((t=>""!==t));let h=0,d=0;if(c.length>=2){let t=c.shift().trim();t=Nl(t,"|"),h=t.split("|").length;let e=c.shift().trim();e=Nl(e,"|");let n=e.split("|");for(let t of n)if(!t.includes("-"))break;d=c.length}if(0==d)continue;let g=a.getAccessor(1);if(g>=h)continue;let p=[];for(let t of c){let e=Nl(t.trim(),"|").split("|");if(g<e.length){let t=Cl(e[g].trim(),r.dateFormat);t.isValid()?(p.push(t),i.minDate.isValid()||i.maxDate.isValid()?(t<i.minDate&&(i.minDate=t.clone()),t>i.maxDate&&(i.maxDate=t.clone())):(i.minDate=t.clone(),i.maxDate=t.clone())):p.push(null)}else p.push(null)}if(p.every((t=>null===t)))return void(i.errorMessage="No valid date as X value found in table");i.gotAnyValidXValue||(i.gotAnyValidXValue=!0);for(let t of o){let e=t.getAccessor(1);if(e>=h)continue;let a=0;for(let o of c){let l=Nl(o.trim(),"|").split("|");if(e<l.length){let o=l[e].trim().split(t.getSeparator());if(!o)continue;if(1===o.length){let e=Ll(o[0],r.textValueMap);if(null!==e.value){e.type===nl.Time&&(t.valueType=nl.Time);let o=e.value;a<p.length&&p[a]&&(i.gotAnyValidYValue||(i.gotAnyValidYValue=!0),qu(n,El(p[a],r.dateFormat),t,o))}}else if(o.length>t.getAccessor(2)&&t.getAccessor(2)>=0){let e=null,l=Ll(o[t.getAccessor(2)].trim(),r.textValueMap);null!==l.value&&(l.type===nl.Time&&(t.valueType=nl.Time),e=l.value,a<p.length&&p[a]&&(i.gotAnyValidYValue||(i.gotAnyValidYValue=!0),qu(n,El(p[a],r.dateFormat),t,e)))}}a++}}}}))}getEditor(){return this.app.workspace.getActiveViewOfType(t.MarkdownView).editor}addCodeBlock(e){if(!(this.app.workspace.activeLeaf.view instanceof t.MarkdownView))return;let n="";switch(e){case el.Line:n='``` tracker\nsearchType: tag\nsearchTarget: tagName\nfolder: /\nstartDate:\nendDate:\nline:\n title: "Line Chart"\n xAxisLabel: Date\n yAxisLabel: Value\n```';break;case el.Bar:n='``` tracker\nsearchType: tag\nsearchTarget: tagName\nfolder: /\nstartDate:\nendDate:\nbar:\n title: "Bar Chart"\n xAxisLabel: Date\n yAxisLabel: Value\n```';break;case el.Summary:n='``` tracker\nsearchType: tag\nsearchTarget: tagName\nfolder: /\nstartDate:\nendDate:\nsummary:\n template: "Average value of tagName is {{average()}}"\n style: "color:white;"\n```'}""!==n&&this.insertToNextLine(n)}insertToNextLine(t){let e=this.getEditor();if(e){let n=e.getCursor(),r=n.line,i=e.getLine(r);return n.ch=i.length,e.setSelection(n),e.replaceSelection("\n"+t),!0}return!1}}module.exports=Ju;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXMiOlsibm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsIm5vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvYXNjZW5kaW5nLmpzIiwibm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9kZXNjZW5kaW5nLmpzIiwibm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9iaXNlY3Rvci5qcyIsIm5vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvYmlzZWN0LmpzIiwibm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9udW1iZXIuanMiLCJub2RlX21vZHVsZXMvaW50ZXJubWFwL3NyYy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvc29ydC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvdGlja3MuanMiLCJub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL21heC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvbWluLmpzIiwibm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9xdWlja3NlbGVjdC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvbWVkaWFuLmpzIiwibm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9xdWFudGlsZS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvcmFuZ2UuanMiLCJub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3N1bS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1heGlzL3NyYy9pZGVudGl0eS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1heGlzL3NyYy9heGlzLmpzIiwibm9kZV9tb2R1bGVzL2QzLWRpc3BhdGNoL3NyYy9kaXNwYXRjaC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL25hbWVzcGFjZXMuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9uYW1lc3BhY2UuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9jcmVhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0b3IuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3RvckFsbC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9zZWxlY3RBbGwuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9hcnJheS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL21hdGNoZXIuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc2VsZWN0Q2hpbGQuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc2VsZWN0Q2hpbGRyZW4uanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc3BhcnNlLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2VudGVyLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2RhdGEuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc29ydC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9hdHRyLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvd2luZG93LmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3N0eWxlLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3Byb3BlcnR5LmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2NsYXNzZWQuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vdGV4dC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9odG1sLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3JhaXNlLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2xvd2VyLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2luc2VydC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9yZW1vdmUuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vY2xvbmUuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vb24uanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZGlzcGF0Y2guanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3QuanMiLCJub2RlX21vZHVsZXMvZDMtY29sb3Ivc3JjL2RlZmluZS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1jb2xvci9zcmMvY29sb3IuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc2VsZWN0LmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2ZpbHRlci5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL2NvbnN0YW50LmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2V4aXQuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vam9pbi5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9tZXJnZS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9vcmRlci5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9jYWxsLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL25vZGVzLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL25vZGUuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc2l6ZS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9lbXB0eS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9lYWNoLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2FwcGVuZC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9kYXR1bS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9pdGVyYXRvci5qcyIsIm5vZGVfbW9kdWxlcy9kMy1jb2xvci9zcmMvbWF0aC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1jb2xvci9zcmMvbGFiLmpzIiwibm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9jb25zdGFudC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvY29sb3IuanMiLCJub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3JnYi5qcyIsIm5vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvYmFzaXMuanMiLCJub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL251bWJlckFycmF5LmpzIiwibm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9hcnJheS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvZGF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvbnVtYmVyLmpzIiwibm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9vYmplY3QuanMiLCJub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3N0cmluZy5qcyIsIm5vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvdmFsdWUuanMiLCJub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3JvdW5kLmpzIiwibm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy90cmFuc2Zvcm0vZGVjb21wb3NlLmpzIiwibm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy90cmFuc2Zvcm0vcGFyc2UuanMiLCJub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3RyYW5zZm9ybS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvbGFiLmpzIiwibm9kZV9tb2R1bGVzL2QzLXRpbWVyL3NyYy90aW1lci5qcyIsIm5vZGVfbW9kdWxlcy9kMy10aW1lci9zcmMvdGltZW91dC5qcyIsIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3NjaGVkdWxlLmpzIiwibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vdHdlZW4uanMiLCJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9pbnRlcnBvbGF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2F0dHIuanMiLCJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9hdHRyVHdlZW4uanMiLCJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9kZWxheS5qcyIsIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2R1cmF0aW9uLmpzIiwibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc2VsZWN0aW9uLmpzIiwibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc3R5bGUuanMiLCJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3NlbGVjdC5qcyIsIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3NlbGVjdEFsbC5qcyIsIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2ZpbHRlci5qcyIsIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL21lcmdlLmpzIiwibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vdHJhbnNpdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL29uLmpzIiwibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc3R5bGVUd2Vlbi5qcyIsIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3RleHQuanMiLCJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi90ZXh0VHdlZW4uanMiLCJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9yZW1vdmUuanMiLCJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9lYXNlLmpzIiwibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vZWFzZVZhcnlpbmcuanMiLCJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9lbmQuanMiLCJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvc2VsZWN0aW9uL3RyYW5zaXRpb24uanMiLCJub2RlX21vZHVsZXMvZDMtZWFzZS9zcmMvY3ViaWMuanMiLCJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvc2VsZWN0aW9uL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3NlbGVjdGlvbi9pbnRlcnJ1cHQuanMiLCJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvaW50ZXJydXB0LmpzIiwibm9kZV9tb2R1bGVzL2QzLXBhdGgvc3JjL3BhdGguanMiLCJub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXREZWNpbWFsLmpzIiwibm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZXhwb25lbnQuanMiLCJub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXRTcGVjaWZpZXIuanMiLCJub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXRQcmVmaXhBdXRvLmpzIiwibm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0Um91bmRlZC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdFR5cGVzLmpzIiwibm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvaWRlbnRpdHkuanMiLCJub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9sb2NhbGUuanMiLCJub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9kZWZhdWx0TG9jYWxlLmpzIiwibm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0R3JvdXAuanMiLCJub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXROdW1lcmFscy5qcyIsIm5vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdFRyaW0uanMiLCJub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2luaXQuanMiLCJub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL29yZGluYWwuanMiLCJub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL251bWJlci5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvY29udGludW91cy5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvY29uc3RhbnQuanMiLCJub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL3RpY2tGb3JtYXQuanMiLCJub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9wcmVjaXNpb25QcmVmaXguanMiLCJub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9wcmVjaXNpb25Sb3VuZC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL3ByZWNpc2lvbkZpeGVkLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9saW5lYXIuanMiLCJub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvaW50ZXJ2YWwuanMiLCJub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvbWlsbGlzZWNvbmQuanMiLCJub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvZHVyYXRpb24uanMiLCJub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvc2Vjb25kLmpzIiwibm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL21pbnV0ZS5qcyIsIm5vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy9ob3VyLmpzIiwibm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL2RheS5qcyIsIm5vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy93ZWVrLmpzIiwibm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL21vbnRoLmpzIiwibm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL3llYXIuanMiLCJub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvdGlja3MuanMiLCJub2RlX21vZHVsZXMvZDMtdGltZS1mb3JtYXQvc3JjL2xvY2FsZS5qcyIsIm5vZGVfbW9kdWxlcy9kMy10aW1lLWZvcm1hdC9zcmMvZGVmYXVsdExvY2FsZS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvdGltZS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvbmljZS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3JhbXAuanMiLCJub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9kaXZlcmdpbmcvU3BlY3RyYWwuanMiLCJub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9jb2xvcnMuanMiLCJub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2NvbnN0YW50LmpzIiwibm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9tYXRoLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9wYXRoLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9hcmMuanMiLCJub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2FycmF5LmpzIiwibm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9saW5lYXIuanMiLCJub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL3BvaW50LmpzIiwibm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9kZXNjZW5kaW5nLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9pZGVudGl0eS5qcyIsIm5vZGVfbW9kdWxlcy9kMy16b29tL3NyYy90cmFuc2Zvcm0uanMiLCJzcmMvZGF0YS50cyIsInNyYy9oZWxwZXIudHMiLCJub2RlX21vZHVsZXMvanNlcC9kaXN0L2pzZXAuanMiLCJzcmMvZXhwci50cyIsIm5vZGVfbW9kdWxlcy9zcHJpbnRmLWpzL3NyYy9zcHJpbnRmLmpzIiwibm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy92YXJpYW5jZS5qcyIsInNyYy9waWUudHMiLCJub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL3BpZS5qcyIsInNyYy9zdW1tYXJ5LnRzIiwic3JjL21vbnRoLnRzIiwic3JjL2hlYXRtYXAudHMiLCJzcmMvYnVsbGV0LnRzIiwic3JjL3JlbmRlcmluZy50cyIsIm5vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvZXh0ZW50LmpzIiwibm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9saW5lLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvcG9pbnRlci5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NvdXJjZUV2ZW50LmpzIiwic3JjL3BhcnNpbmcudHMiLCJzcmMvY29sbGVjdGluZy50cyIsInNyYy9zZXR0aW5ncy50cyIsInNyYy9tYWluLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXHJcblxyXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcclxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxyXG5cclxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxyXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcclxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxyXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cclxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1JcclxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxyXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSwgU3VwcHJlc3NlZEVycm9yLCBTeW1ib2wgKi9cclxuXHJcbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcclxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xyXG4gICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcclxuICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xyXG4gICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxyXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XHJcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xyXG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH1cclxuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcclxuICAgIHZhciB0ID0ge307XHJcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcclxuICAgICAgICB0W3BdID0gc1twXTtcclxuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcclxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xyXG4gICAgICAgIH1cclxuICAgIHJldHVybiB0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcGFyYW0ocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXNEZWNvcmF0ZShjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykge1xyXG4gICAgZnVuY3Rpb24gYWNjZXB0KGYpIHsgaWYgKGYgIT09IHZvaWQgMCAmJiB0eXBlb2YgZiAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRnVuY3Rpb24gZXhwZWN0ZWRcIik7IHJldHVybiBmOyB9XHJcbiAgICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkgPSBraW5kID09PSBcImdldHRlclwiID8gXCJnZXRcIiA6IGtpbmQgPT09IFwic2V0dGVyXCIgPyBcInNldFwiIDogXCJ2YWx1ZVwiO1xyXG4gICAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJbltcInN0YXRpY1wiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7XHJcbiAgICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTtcclxuICAgIHZhciBfLCBkb25lID0gZmFsc2U7XHJcbiAgICBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIHZhciBjb250ZXh0ID0ge307XHJcbiAgICAgICAgZm9yICh2YXIgcCBpbiBjb250ZXh0SW4pIGNvbnRleHRbcF0gPSBwID09PSBcImFjY2Vzc1wiID8ge30gOiBjb250ZXh0SW5bcF07XHJcbiAgICAgICAgZm9yICh2YXIgcCBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0LmFjY2Vzc1twXSA9IGNvbnRleHRJbi5hY2Nlc3NbcF07XHJcbiAgICAgICAgY29udGV4dC5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uIChmKSB7IGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkXCIpOyBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmIHx8IG51bGwpKTsgfTtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaV0pKGtpbmQgPT09IFwiYWNjZXNzb3JcIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXldLCBjb250ZXh0KTtcclxuICAgICAgICBpZiAoa2luZCA9PT0gXCJhY2Nlc3NvclwiKSB7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gXCJvYmplY3RcIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBleHBlY3RlZFwiKTtcclxuICAgICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXztcclxuICAgICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXztcclxuICAgICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoXyA9IGFjY2VwdChyZXN1bHQpKSB7XHJcbiAgICAgICAgICAgIGlmIChraW5kID09PSBcImZpZWxkXCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF8pO1xyXG4gICAgICAgICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5XSA9IF87XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpO1xyXG4gICAgZG9uZSA9IHRydWU7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19ydW5Jbml0aWFsaXplcnModGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZSkge1xyXG4gICAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhbHVlID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaV0uY2FsbCh0aGlzQXJnLCB2YWx1ZSkgOiBpbml0aWFsaXplcnNbaV0uY2FsbCh0aGlzQXJnKTtcclxuICAgIH1cclxuICAgIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlIDogdm9pZCAwO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcHJvcEtleSh4KSB7XHJcbiAgICByZXR1cm4gdHlwZW9mIHggPT09IFwic3ltYm9sXCIgPyB4IDogXCJcIi5jb25jYXQoeCk7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19zZXRGdW5jdGlvbk5hbWUoZiwgbmFtZSwgcHJlZml4KSB7XHJcbiAgICBpZiAodHlwZW9mIG5hbWUgPT09IFwic3ltYm9sXCIpIG5hbWUgPSBuYW1lLmRlc2NyaXB0aW9uID8gXCJbXCIuY29uY2F0KG5hbWUuZGVzY3JpcHRpb24sIFwiXVwiKSA6IFwiXCI7XHJcbiAgICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGYsIFwibmFtZVwiLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IHByZWZpeCA/IFwiXCIuY29uY2F0KHByZWZpeCwgXCIgXCIsIG5hbWUpIDogbmFtZSB9KTtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcclxuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XHJcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xyXG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcclxuICAgICAgICB3aGlsZSAoZyAmJiAoZyA9IDAsIG9wWzBdICYmIChfID0gMCkpLCBfKSB0cnkge1xyXG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XHJcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcclxuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xyXG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XHJcbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgX19jcmVhdGVCaW5kaW5nID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xyXG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcclxuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XHJcbiAgICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcclxuICAgIH1cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XHJcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XHJcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xyXG4gICAgb1trMl0gPSBtW2tdO1xyXG59KTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4cG9ydFN0YXIobSwgbykge1xyXG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBwKSkgX19jcmVhdGVCaW5kaW5nKG8sIG0sIHApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX192YWx1ZXMobykge1xyXG4gICAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcclxuICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xyXG4gICAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xyXG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcclxuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3JlYWQobywgbikge1xyXG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xyXG4gICAgaWYgKCFtKSByZXR1cm4gbztcclxuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxyXG4gICAgZmluYWxseSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG4vKiogQGRlcHJlY2F0ZWQgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkKCkge1xyXG4gICAgZm9yICh2YXIgYXIgPSBbXSwgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgYXIgPSBhci5jb25jYXQoX19yZWFkKGFyZ3VtZW50c1tpXSkpO1xyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG4vKiogQGRlcHJlY2F0ZWQgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXlzKCkge1xyXG4gICAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSBzICs9IGFyZ3VtZW50c1tpXS5sZW5ndGg7XHJcbiAgICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXHJcbiAgICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXHJcbiAgICAgICAgICAgIHJba10gPSBhW2pdO1xyXG4gICAgcmV0dXJuIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5KHRvLCBmcm9tLCBwYWNrKSB7XHJcbiAgICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcclxuICAgICAgICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcclxuICAgICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdCh2KSB7XHJcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpZiAoZ1tuXSkgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxyXG4gICAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XHJcbiAgICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcclxuICAgIHZhciBpLCBwO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IGZhbHNlIH0gOiBmID8gZih2KSA6IHY7IH0gOiBmOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xyXG4gICAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlbbl0gPSBvW25dICYmIGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHYgPSBvW25dKHYpLCBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB2LmRvbmUsIHYudmFsdWUpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tYWtlVGVtcGxhdGVPYmplY3QoY29va2VkLCByYXcpIHtcclxuICAgIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvb2tlZCwgXCJyYXdcIiwgeyB2YWx1ZTogcmF3IH0pOyB9IGVsc2UgeyBjb29rZWQucmF3ID0gcmF3OyB9XHJcbiAgICByZXR1cm4gY29va2VkO1xyXG59O1xyXG5cclxudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xyXG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcclxuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydFN0YXIobW9kKSB7XHJcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xyXG4gICAgdmFyIHJlc3VsdCA9IHt9O1xyXG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xyXG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydERlZmF1bHQobW9kKSB7XHJcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IGRlZmF1bHQ6IG1vZCB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEdldChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHtcclxuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtcclxuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xyXG4gICAgcmV0dXJuIGtpbmQgPT09IFwibVwiID8gZiA6IGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRTZXQocmVjZWl2ZXIsIHN0YXRlLCB2YWx1ZSwga2luZCwgZikge1xyXG4gICAgaWYgKGtpbmQgPT09IFwibVwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBtZXRob2QgaXMgbm90IHdyaXRhYmxlXCIpO1xyXG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgc2V0dGVyXCIpO1xyXG4gICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcclxuICAgIHJldHVybiAoa2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIsIHZhbHVlKSA6IGYgPyBmLnZhbHVlID0gdmFsdWUgOiBzdGF0ZS5zZXQocmVjZWl2ZXIsIHZhbHVlKSksIHZhbHVlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEluKHN0YXRlLCByZWNlaXZlcikge1xyXG4gICAgaWYgKHJlY2VpdmVyID09PSBudWxsIHx8ICh0eXBlb2YgcmVjZWl2ZXIgIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHJlY2VpdmVyICE9PSBcImZ1bmN0aW9uXCIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHVzZSAnaW4nIG9wZXJhdG9yIG9uIG5vbi1vYmplY3RcIik7XHJcbiAgICByZXR1cm4gdHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciA9PT0gc3RhdGUgOiBzdGF0ZS5oYXMocmVjZWl2ZXIpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hZGREaXNwb3NhYmxlUmVzb3VyY2UoZW52LCB2YWx1ZSwgYXN5bmMpIHtcclxuICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdm9pZCAwKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBleHBlY3RlZC5cIik7XHJcbiAgICAgICAgdmFyIGRpc3Bvc2U7XHJcbiAgICAgICAgaWYgKGFzeW5jKSB7XHJcbiAgICAgICAgICAgIGlmICghU3ltYm9sLmFzeW5jRGlzcG9zZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0Rpc3Bvc2UgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgICAgICAgICBkaXNwb3NlID0gdmFsdWVbU3ltYm9sLmFzeW5jRGlzcG9zZV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkaXNwb3NlID09PSB2b2lkIDApIHtcclxuICAgICAgICAgICAgaWYgKCFTeW1ib2wuZGlzcG9zZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5kaXNwb3NlIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgICAgICAgICAgZGlzcG9zZSA9IHZhbHVlW1N5bWJvbC5kaXNwb3NlXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5cGVvZiBkaXNwb3NlICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3Qgbm90IGRpc3Bvc2FibGUuXCIpO1xyXG4gICAgICAgIGVudi5zdGFjay5wdXNoKHsgdmFsdWU6IHZhbHVlLCBkaXNwb3NlOiBkaXNwb3NlLCBhc3luYzogYXN5bmMgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChhc3luYykge1xyXG4gICAgICAgIGVudi5zdGFjay5wdXNoKHsgYXN5bmM6IHRydWUgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsdWU7XHJcbn1cclxuXHJcbnZhciBfU3VwcHJlc3NlZEVycm9yID0gdHlwZW9mIFN1cHByZXNzZWRFcnJvciA9PT0gXCJmdW5jdGlvblwiID8gU3VwcHJlc3NlZEVycm9yIDogZnVuY3Rpb24gKGVycm9yLCBzdXBwcmVzc2VkLCBtZXNzYWdlKSB7XHJcbiAgICB2YXIgZSA9IG5ldyBFcnJvcihtZXNzYWdlKTtcclxuICAgIHJldHVybiBlLm5hbWUgPSBcIlN1cHByZXNzZWRFcnJvclwiLCBlLmVycm9yID0gZXJyb3IsIGUuc3VwcHJlc3NlZCA9IHN1cHByZXNzZWQsIGU7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19kaXNwb3NlUmVzb3VyY2VzKGVudikge1xyXG4gICAgZnVuY3Rpb24gZmFpbChlKSB7XHJcbiAgICAgICAgZW52LmVycm9yID0gZW52Lmhhc0Vycm9yID8gbmV3IF9TdXBwcmVzc2VkRXJyb3IoZSwgZW52LmVycm9yLCBcIkFuIGVycm9yIHdhcyBzdXBwcmVzc2VkIGR1cmluZyBkaXNwb3NhbC5cIikgOiBlO1xyXG4gICAgICAgIGVudi5oYXNFcnJvciA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBuZXh0KCkge1xyXG4gICAgICAgIHdoaWxlIChlbnYuc3RhY2subGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHZhciByZWMgPSBlbnYuc3RhY2sucG9wKCk7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gcmVjLmRpc3Bvc2UgJiYgcmVjLmRpc3Bvc2UuY2FsbChyZWMudmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlYy5hc3luYykgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXN1bHQpLnRoZW4obmV4dCwgZnVuY3Rpb24oZSkgeyBmYWlsKGUpOyByZXR1cm4gbmV4dCgpOyB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgZmFpbChlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZW52Lmhhc0Vycm9yKSB0aHJvdyBlbnYuZXJyb3I7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmV4dCgpO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgICBfX2V4dGVuZHM6IF9fZXh0ZW5kcyxcclxuICAgIF9fYXNzaWduOiBfX2Fzc2lnbixcclxuICAgIF9fcmVzdDogX19yZXN0LFxyXG4gICAgX19kZWNvcmF0ZTogX19kZWNvcmF0ZSxcclxuICAgIF9fcGFyYW06IF9fcGFyYW0sXHJcbiAgICBfX21ldGFkYXRhOiBfX21ldGFkYXRhLFxyXG4gICAgX19hd2FpdGVyOiBfX2F3YWl0ZXIsXHJcbiAgICBfX2dlbmVyYXRvcjogX19nZW5lcmF0b3IsXHJcbiAgICBfX2NyZWF0ZUJpbmRpbmc6IF9fY3JlYXRlQmluZGluZyxcclxuICAgIF9fZXhwb3J0U3RhcjogX19leHBvcnRTdGFyLFxyXG4gICAgX192YWx1ZXM6IF9fdmFsdWVzLFxyXG4gICAgX19yZWFkOiBfX3JlYWQsXHJcbiAgICBfX3NwcmVhZDogX19zcHJlYWQsXHJcbiAgICBfX3NwcmVhZEFycmF5czogX19zcHJlYWRBcnJheXMsXHJcbiAgICBfX3NwcmVhZEFycmF5OiBfX3NwcmVhZEFycmF5LFxyXG4gICAgX19hd2FpdDogX19hd2FpdCxcclxuICAgIF9fYXN5bmNHZW5lcmF0b3I6IF9fYXN5bmNHZW5lcmF0b3IsXHJcbiAgICBfX2FzeW5jRGVsZWdhdG9yOiBfX2FzeW5jRGVsZWdhdG9yLFxyXG4gICAgX19hc3luY1ZhbHVlczogX19hc3luY1ZhbHVlcyxcclxuICAgIF9fbWFrZVRlbXBsYXRlT2JqZWN0OiBfX21ha2VUZW1wbGF0ZU9iamVjdCxcclxuICAgIF9faW1wb3J0U3RhcjogX19pbXBvcnRTdGFyLFxyXG4gICAgX19pbXBvcnREZWZhdWx0OiBfX2ltcG9ydERlZmF1bHQsXHJcbiAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0OiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0LFxyXG4gICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldDogX19jbGFzc1ByaXZhdGVGaWVsZFNldCxcclxuICAgIF9fY2xhc3NQcml2YXRlRmllbGRJbjogX19jbGFzc1ByaXZhdGVGaWVsZEluLFxyXG4gICAgX19hZGREaXNwb3NhYmxlUmVzb3VyY2U6IF9fYWRkRGlzcG9zYWJsZVJlc291cmNlLFxyXG4gICAgX19kaXNwb3NlUmVzb3VyY2VzOiBfX2Rpc3Bvc2VSZXNvdXJjZXMsXHJcbn07XHJcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGFzY2VuZGluZyhhLCBiKSB7XG4gIHJldHVybiBhID09IG51bGwgfHwgYiA9PSBudWxsID8gTmFOIDogYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IGEgPj0gYiA/IDAgOiBOYU47XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkZXNjZW5kaW5nKGEsIGIpIHtcbiAgcmV0dXJuIGEgPT0gbnVsbCB8fCBiID09IG51bGwgPyBOYU5cbiAgICA6IGIgPCBhID8gLTFcbiAgICA6IGIgPiBhID8gMVxuICAgIDogYiA+PSBhID8gMFxuICAgIDogTmFOO1xufVxuIiwiaW1wb3J0IGFzY2VuZGluZyBmcm9tIFwiLi9hc2NlbmRpbmcuanNcIjtcbmltcG9ydCBkZXNjZW5kaW5nIGZyb20gXCIuL2Rlc2NlbmRpbmcuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYmlzZWN0b3IoZikge1xuICBsZXQgY29tcGFyZTEsIGNvbXBhcmUyLCBkZWx0YTtcblxuICAvLyBJZiBhbiBhY2Nlc3NvciBpcyBzcGVjaWZpZWQsIHByb21vdGUgaXQgdG8gYSBjb21wYXJhdG9yLiBJbiB0aGlzIGNhc2Ugd2VcbiAgLy8gY2FuIHRlc3Qgd2hldGhlciB0aGUgc2VhcmNoIHZhbHVlIGlzIChzZWxmLSkgY29tcGFyYWJsZS4gV2UgY2Fu4oCZdCBkbyB0aGlzXG4gIC8vIGZvciBhIGNvbXBhcmF0b3IgKGV4Y2VwdCBmb3Igc3BlY2lmaWMsIGtub3duIGNvbXBhcmF0b3JzKSBiZWNhdXNlIHdlIGNhbuKAmXRcbiAgLy8gdGVsbCBpZiB0aGUgY29tcGFyYXRvciBpcyBzeW1tZXRyaWMsIGFuZCBhbiBhc3ltbWV0cmljIGNvbXBhcmF0b3IgY2Fu4oCZdCBiZVxuICAvLyB1c2VkIHRvIHRlc3Qgd2hldGhlciBhIHNpbmdsZSB2YWx1ZSBpcyBjb21wYXJhYmxlLlxuICBpZiAoZi5sZW5ndGggIT09IDIpIHtcbiAgICBjb21wYXJlMSA9IGFzY2VuZGluZztcbiAgICBjb21wYXJlMiA9IChkLCB4KSA9PiBhc2NlbmRpbmcoZihkKSwgeCk7XG4gICAgZGVsdGEgPSAoZCwgeCkgPT4gZihkKSAtIHg7XG4gIH0gZWxzZSB7XG4gICAgY29tcGFyZTEgPSBmID09PSBhc2NlbmRpbmcgfHwgZiA9PT0gZGVzY2VuZGluZyA/IGYgOiB6ZXJvO1xuICAgIGNvbXBhcmUyID0gZjtcbiAgICBkZWx0YSA9IGY7XG4gIH1cblxuICBmdW5jdGlvbiBsZWZ0KGEsIHgsIGxvID0gMCwgaGkgPSBhLmxlbmd0aCkge1xuICAgIGlmIChsbyA8IGhpKSB7XG4gICAgICBpZiAoY29tcGFyZTEoeCwgeCkgIT09IDApIHJldHVybiBoaTtcbiAgICAgIGRvIHtcbiAgICAgICAgY29uc3QgbWlkID0gKGxvICsgaGkpID4+PiAxO1xuICAgICAgICBpZiAoY29tcGFyZTIoYVttaWRdLCB4KSA8IDApIGxvID0gbWlkICsgMTtcbiAgICAgICAgZWxzZSBoaSA9IG1pZDtcbiAgICAgIH0gd2hpbGUgKGxvIDwgaGkpO1xuICAgIH1cbiAgICByZXR1cm4gbG87XG4gIH1cblxuICBmdW5jdGlvbiByaWdodChhLCB4LCBsbyA9IDAsIGhpID0gYS5sZW5ndGgpIHtcbiAgICBpZiAobG8gPCBoaSkge1xuICAgICAgaWYgKGNvbXBhcmUxKHgsIHgpICE9PSAwKSByZXR1cm4gaGk7XG4gICAgICBkbyB7XG4gICAgICAgIGNvbnN0IG1pZCA9IChsbyArIGhpKSA+Pj4gMTtcbiAgICAgICAgaWYgKGNvbXBhcmUyKGFbbWlkXSwgeCkgPD0gMCkgbG8gPSBtaWQgKyAxO1xuICAgICAgICBlbHNlIGhpID0gbWlkO1xuICAgICAgfSB3aGlsZSAobG8gPCBoaSk7XG4gICAgfVxuICAgIHJldHVybiBsbztcbiAgfVxuXG4gIGZ1bmN0aW9uIGNlbnRlcihhLCB4LCBsbyA9IDAsIGhpID0gYS5sZW5ndGgpIHtcbiAgICBjb25zdCBpID0gbGVmdChhLCB4LCBsbywgaGkgLSAxKTtcbiAgICByZXR1cm4gaSA+IGxvICYmIGRlbHRhKGFbaSAtIDFdLCB4KSA+IC1kZWx0YShhW2ldLCB4KSA/IGkgLSAxIDogaTtcbiAgfVxuXG4gIHJldHVybiB7bGVmdCwgY2VudGVyLCByaWdodH07XG59XG5cbmZ1bmN0aW9uIHplcm8oKSB7XG4gIHJldHVybiAwO1xufVxuIiwiaW1wb3J0IGFzY2VuZGluZyBmcm9tIFwiLi9hc2NlbmRpbmcuanNcIjtcbmltcG9ydCBiaXNlY3RvciBmcm9tIFwiLi9iaXNlY3Rvci5qc1wiO1xuaW1wb3J0IG51bWJlciBmcm9tIFwiLi9udW1iZXIuanNcIjtcblxuY29uc3QgYXNjZW5kaW5nQmlzZWN0ID0gYmlzZWN0b3IoYXNjZW5kaW5nKTtcbmV4cG9ydCBjb25zdCBiaXNlY3RSaWdodCA9IGFzY2VuZGluZ0Jpc2VjdC5yaWdodDtcbmV4cG9ydCBjb25zdCBiaXNlY3RMZWZ0ID0gYXNjZW5kaW5nQmlzZWN0LmxlZnQ7XG5leHBvcnQgY29uc3QgYmlzZWN0Q2VudGVyID0gYmlzZWN0b3IobnVtYmVyKS5jZW50ZXI7XG5leHBvcnQgZGVmYXVsdCBiaXNlY3RSaWdodDtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gIHJldHVybiB4ID09PSBudWxsID8gTmFOIDogK3g7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiogbnVtYmVycyh2YWx1ZXMsIHZhbHVlb2YpIHtcbiAgaWYgKHZhbHVlb2YgPT09IHVuZGVmaW5lZCkge1xuICAgIGZvciAobGV0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgKHZhbHVlID0gK3ZhbHVlKSA+PSB2YWx1ZSkge1xuICAgICAgICB5aWVsZCB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbGV0IGluZGV4ID0gLTE7XG4gICAgZm9yIChsZXQgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICBpZiAoKHZhbHVlID0gdmFsdWVvZih2YWx1ZSwgKytpbmRleCwgdmFsdWVzKSkgIT0gbnVsbCAmJiAodmFsdWUgPSArdmFsdWUpID49IHZhbHVlKSB7XG4gICAgICAgIHlpZWxkIHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiZXhwb3J0IGNsYXNzIEludGVybk1hcCBleHRlbmRzIE1hcCB7XG4gIGNvbnN0cnVjdG9yKGVudHJpZXMsIGtleSA9IGtleW9mKSB7XG4gICAgc3VwZXIoKTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLCB7X2ludGVybjoge3ZhbHVlOiBuZXcgTWFwKCl9LCBfa2V5OiB7dmFsdWU6IGtleX19KTtcbiAgICBpZiAoZW50cmllcyAhPSBudWxsKSBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBlbnRyaWVzKSB0aGlzLnNldChrZXksIHZhbHVlKTtcbiAgfVxuICBnZXQoa2V5KSB7XG4gICAgcmV0dXJuIHN1cGVyLmdldChpbnRlcm5fZ2V0KHRoaXMsIGtleSkpO1xuICB9XG4gIGhhcyhrZXkpIHtcbiAgICByZXR1cm4gc3VwZXIuaGFzKGludGVybl9nZXQodGhpcywga2V5KSk7XG4gIH1cbiAgc2V0KGtleSwgdmFsdWUpIHtcbiAgICByZXR1cm4gc3VwZXIuc2V0KGludGVybl9zZXQodGhpcywga2V5KSwgdmFsdWUpO1xuICB9XG4gIGRlbGV0ZShrZXkpIHtcbiAgICByZXR1cm4gc3VwZXIuZGVsZXRlKGludGVybl9kZWxldGUodGhpcywga2V5KSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEludGVyblNldCBleHRlbmRzIFNldCB7XG4gIGNvbnN0cnVjdG9yKHZhbHVlcywga2V5ID0ga2V5b2YpIHtcbiAgICBzdXBlcigpO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMsIHtfaW50ZXJuOiB7dmFsdWU6IG5ldyBNYXAoKX0sIF9rZXk6IHt2YWx1ZToga2V5fX0pO1xuICAgIGlmICh2YWx1ZXMgIT0gbnVsbCkgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHRoaXMuYWRkKHZhbHVlKTtcbiAgfVxuICBoYXModmFsdWUpIHtcbiAgICByZXR1cm4gc3VwZXIuaGFzKGludGVybl9nZXQodGhpcywgdmFsdWUpKTtcbiAgfVxuICBhZGQodmFsdWUpIHtcbiAgICByZXR1cm4gc3VwZXIuYWRkKGludGVybl9zZXQodGhpcywgdmFsdWUpKTtcbiAgfVxuICBkZWxldGUodmFsdWUpIHtcbiAgICByZXR1cm4gc3VwZXIuZGVsZXRlKGludGVybl9kZWxldGUodGhpcywgdmFsdWUpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbnRlcm5fZ2V0KHtfaW50ZXJuLCBfa2V5fSwgdmFsdWUpIHtcbiAgY29uc3Qga2V5ID0gX2tleSh2YWx1ZSk7XG4gIHJldHVybiBfaW50ZXJuLmhhcyhrZXkpID8gX2ludGVybi5nZXQoa2V5KSA6IHZhbHVlO1xufVxuXG5mdW5jdGlvbiBpbnRlcm5fc2V0KHtfaW50ZXJuLCBfa2V5fSwgdmFsdWUpIHtcbiAgY29uc3Qga2V5ID0gX2tleSh2YWx1ZSk7XG4gIGlmIChfaW50ZXJuLmhhcyhrZXkpKSByZXR1cm4gX2ludGVybi5nZXQoa2V5KTtcbiAgX2ludGVybi5zZXQoa2V5LCB2YWx1ZSk7XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gaW50ZXJuX2RlbGV0ZSh7X2ludGVybiwgX2tleX0sIHZhbHVlKSB7XG4gIGNvbnN0IGtleSA9IF9rZXkodmFsdWUpO1xuICBpZiAoX2ludGVybi5oYXMoa2V5KSkge1xuICAgIHZhbHVlID0gX2ludGVybi5nZXQoa2V5KTtcbiAgICBfaW50ZXJuLmRlbGV0ZShrZXkpO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZnVuY3Rpb24ga2V5b2YodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiA/IHZhbHVlLnZhbHVlT2YoKSA6IHZhbHVlO1xufVxuIiwiaW1wb3J0IGFzY2VuZGluZyBmcm9tIFwiLi9hc2NlbmRpbmcuanNcIjtcbmltcG9ydCBwZXJtdXRlIGZyb20gXCIuL3Blcm11dGUuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc29ydCh2YWx1ZXMsIC4uLkYpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZXNbU3ltYm9sLml0ZXJhdG9yXSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwidmFsdWVzIGlzIG5vdCBpdGVyYWJsZVwiKTtcbiAgdmFsdWVzID0gQXJyYXkuZnJvbSh2YWx1ZXMpO1xuICBsZXQgW2ZdID0gRjtcbiAgaWYgKChmICYmIGYubGVuZ3RoICE9PSAyKSB8fCBGLmxlbmd0aCA+IDEpIHtcbiAgICBjb25zdCBpbmRleCA9IFVpbnQzMkFycmF5LmZyb20odmFsdWVzLCAoZCwgaSkgPT4gaSk7XG4gICAgaWYgKEYubGVuZ3RoID4gMSkge1xuICAgICAgRiA9IEYubWFwKGYgPT4gdmFsdWVzLm1hcChmKSk7XG4gICAgICBpbmRleC5zb3J0KChpLCBqKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgZiBvZiBGKSB7XG4gICAgICAgICAgY29uc3QgYyA9IGFzY2VuZGluZ0RlZmluZWQoZltpXSwgZltqXSk7XG4gICAgICAgICAgaWYgKGMpIHJldHVybiBjO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZiA9IHZhbHVlcy5tYXAoZik7XG4gICAgICBpbmRleC5zb3J0KChpLCBqKSA9PiBhc2NlbmRpbmdEZWZpbmVkKGZbaV0sIGZbal0pKTtcbiAgICB9XG4gICAgcmV0dXJuIHBlcm11dGUodmFsdWVzLCBpbmRleCk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlcy5zb3J0KGNvbXBhcmVEZWZpbmVkKGYpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXBhcmVEZWZpbmVkKGNvbXBhcmUgPSBhc2NlbmRpbmcpIHtcbiAgaWYgKGNvbXBhcmUgPT09IGFzY2VuZGluZykgcmV0dXJuIGFzY2VuZGluZ0RlZmluZWQ7XG4gIGlmICh0eXBlb2YgY29tcGFyZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiY29tcGFyZSBpcyBub3QgYSBmdW5jdGlvblwiKTtcbiAgcmV0dXJuIChhLCBiKSA9PiB7XG4gICAgY29uc3QgeCA9IGNvbXBhcmUoYSwgYik7XG4gICAgaWYgKHggfHwgeCA9PT0gMCkgcmV0dXJuIHg7XG4gICAgcmV0dXJuIChjb21wYXJlKGIsIGIpID09PSAwKSAtIChjb21wYXJlKGEsIGEpID09PSAwKTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzY2VuZGluZ0RlZmluZWQoYSwgYikge1xuICByZXR1cm4gKGEgPT0gbnVsbCB8fCAhKGEgPj0gYSkpIC0gKGIgPT0gbnVsbCB8fCAhKGIgPj0gYikpIHx8IChhIDwgYiA/IC0xIDogYSA+IGIgPyAxIDogMCk7XG59XG4iLCJjb25zdCBlMTAgPSBNYXRoLnNxcnQoNTApLFxuICAgIGU1ID0gTWF0aC5zcXJ0KDEwKSxcbiAgICBlMiA9IE1hdGguc3FydCgyKTtcblxuZnVuY3Rpb24gdGlja1NwZWMoc3RhcnQsIHN0b3AsIGNvdW50KSB7XG4gIGNvbnN0IHN0ZXAgPSAoc3RvcCAtIHN0YXJ0KSAvIE1hdGgubWF4KDAsIGNvdW50KSxcbiAgICAgIHBvd2VyID0gTWF0aC5mbG9vcihNYXRoLmxvZzEwKHN0ZXApKSxcbiAgICAgIGVycm9yID0gc3RlcCAvIE1hdGgucG93KDEwLCBwb3dlciksXG4gICAgICBmYWN0b3IgPSBlcnJvciA+PSBlMTAgPyAxMCA6IGVycm9yID49IGU1ID8gNSA6IGVycm9yID49IGUyID8gMiA6IDE7XG4gIGxldCBpMSwgaTIsIGluYztcbiAgaWYgKHBvd2VyIDwgMCkge1xuICAgIGluYyA9IE1hdGgucG93KDEwLCAtcG93ZXIpIC8gZmFjdG9yO1xuICAgIGkxID0gTWF0aC5yb3VuZChzdGFydCAqIGluYyk7XG4gICAgaTIgPSBNYXRoLnJvdW5kKHN0b3AgKiBpbmMpO1xuICAgIGlmIChpMSAvIGluYyA8IHN0YXJ0KSArK2kxO1xuICAgIGlmIChpMiAvIGluYyA+IHN0b3ApIC0taTI7XG4gICAgaW5jID0gLWluYztcbiAgfSBlbHNlIHtcbiAgICBpbmMgPSBNYXRoLnBvdygxMCwgcG93ZXIpICogZmFjdG9yO1xuICAgIGkxID0gTWF0aC5yb3VuZChzdGFydCAvIGluYyk7XG4gICAgaTIgPSBNYXRoLnJvdW5kKHN0b3AgLyBpbmMpO1xuICAgIGlmIChpMSAqIGluYyA8IHN0YXJ0KSArK2kxO1xuICAgIGlmIChpMiAqIGluYyA+IHN0b3ApIC0taTI7XG4gIH1cbiAgaWYgKGkyIDwgaTEgJiYgMC41IDw9IGNvdW50ICYmIGNvdW50IDwgMikgcmV0dXJuIHRpY2tTcGVjKHN0YXJ0LCBzdG9wLCBjb3VudCAqIDIpO1xuICByZXR1cm4gW2kxLCBpMiwgaW5jXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdGlja3Moc3RhcnQsIHN0b3AsIGNvdW50KSB7XG4gIHN0b3AgPSArc3RvcCwgc3RhcnQgPSArc3RhcnQsIGNvdW50ID0gK2NvdW50O1xuICBpZiAoIShjb3VudCA+IDApKSByZXR1cm4gW107XG4gIGlmIChzdGFydCA9PT0gc3RvcCkgcmV0dXJuIFtzdGFydF07XG4gIGNvbnN0IHJldmVyc2UgPSBzdG9wIDwgc3RhcnQsIFtpMSwgaTIsIGluY10gPSByZXZlcnNlID8gdGlja1NwZWMoc3RvcCwgc3RhcnQsIGNvdW50KSA6IHRpY2tTcGVjKHN0YXJ0LCBzdG9wLCBjb3VudCk7XG4gIGlmICghKGkyID49IGkxKSkgcmV0dXJuIFtdO1xuICBjb25zdCBuID0gaTIgLSBpMSArIDEsIHRpY2tzID0gbmV3IEFycmF5KG4pO1xuICBpZiAocmV2ZXJzZSkge1xuICAgIGlmIChpbmMgPCAwKSBmb3IgKGxldCBpID0gMDsgaSA8IG47ICsraSkgdGlja3NbaV0gPSAoaTIgLSBpKSAvIC1pbmM7XG4gICAgZWxzZSBmb3IgKGxldCBpID0gMDsgaSA8IG47ICsraSkgdGlja3NbaV0gPSAoaTIgLSBpKSAqIGluYztcbiAgfSBlbHNlIHtcbiAgICBpZiAoaW5jIDwgMCkgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyArK2kpIHRpY2tzW2ldID0gKGkxICsgaSkgLyAtaW5jO1xuICAgIGVsc2UgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyArK2kpIHRpY2tzW2ldID0gKGkxICsgaSkgKiBpbmM7XG4gIH1cbiAgcmV0dXJuIHRpY2tzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGlja0luY3JlbWVudChzdGFydCwgc3RvcCwgY291bnQpIHtcbiAgc3RvcCA9ICtzdG9wLCBzdGFydCA9ICtzdGFydCwgY291bnQgPSArY291bnQ7XG4gIHJldHVybiB0aWNrU3BlYyhzdGFydCwgc3RvcCwgY291bnQpWzJdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGlja1N0ZXAoc3RhcnQsIHN0b3AsIGNvdW50KSB7XG4gIHN0b3AgPSArc3RvcCwgc3RhcnQgPSArc3RhcnQsIGNvdW50ID0gK2NvdW50O1xuICBjb25zdCByZXZlcnNlID0gc3RvcCA8IHN0YXJ0LCBpbmMgPSByZXZlcnNlID8gdGlja0luY3JlbWVudChzdG9wLCBzdGFydCwgY291bnQpIDogdGlja0luY3JlbWVudChzdGFydCwgc3RvcCwgY291bnQpO1xuICByZXR1cm4gKHJldmVyc2UgPyAtMSA6IDEpICogKGluYyA8IDAgPyAxIC8gLWluYyA6IGluYyk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtYXgodmFsdWVzLCB2YWx1ZW9mKSB7XG4gIGxldCBtYXg7XG4gIGlmICh2YWx1ZW9mID09PSB1bmRlZmluZWQpIHtcbiAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgaWYgKHZhbHVlICE9IG51bGxcbiAgICAgICAgICAmJiAobWF4IDwgdmFsdWUgfHwgKG1heCA9PT0gdW5kZWZpbmVkICYmIHZhbHVlID49IHZhbHVlKSkpIHtcbiAgICAgICAgbWF4ID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGxldCBpbmRleCA9IC0xO1xuICAgIGZvciAobGV0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgaWYgKCh2YWx1ZSA9IHZhbHVlb2YodmFsdWUsICsraW5kZXgsIHZhbHVlcykpICE9IG51bGxcbiAgICAgICAgICAmJiAobWF4IDwgdmFsdWUgfHwgKG1heCA9PT0gdW5kZWZpbmVkICYmIHZhbHVlID49IHZhbHVlKSkpIHtcbiAgICAgICAgbWF4ID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBtYXg7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtaW4odmFsdWVzLCB2YWx1ZW9mKSB7XG4gIGxldCBtaW47XG4gIGlmICh2YWx1ZW9mID09PSB1bmRlZmluZWQpIHtcbiAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgaWYgKHZhbHVlICE9IG51bGxcbiAgICAgICAgICAmJiAobWluID4gdmFsdWUgfHwgKG1pbiA9PT0gdW5kZWZpbmVkICYmIHZhbHVlID49IHZhbHVlKSkpIHtcbiAgICAgICAgbWluID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGxldCBpbmRleCA9IC0xO1xuICAgIGZvciAobGV0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgaWYgKCh2YWx1ZSA9IHZhbHVlb2YodmFsdWUsICsraW5kZXgsIHZhbHVlcykpICE9IG51bGxcbiAgICAgICAgICAmJiAobWluID4gdmFsdWUgfHwgKG1pbiA9PT0gdW5kZWZpbmVkICYmIHZhbHVlID49IHZhbHVlKSkpIHtcbiAgICAgICAgbWluID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBtaW47XG59XG4iLCJpbXBvcnQge2FzY2VuZGluZ0RlZmluZWQsIGNvbXBhcmVEZWZpbmVkfSBmcm9tIFwiLi9zb3J0LmpzXCI7XG5cbi8vIEJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3VybmVyL3F1aWNrc2VsZWN0XG4vLyBJU0MgbGljZW5zZSwgQ29weXJpZ2h0IDIwMTggVmxhZGltaXIgQWdhZm9ua2luLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcXVpY2tzZWxlY3QoYXJyYXksIGssIGxlZnQgPSAwLCByaWdodCA9IEluZmluaXR5LCBjb21wYXJlKSB7XG4gIGsgPSBNYXRoLmZsb29yKGspO1xuICBsZWZ0ID0gTWF0aC5mbG9vcihNYXRoLm1heCgwLCBsZWZ0KSk7XG4gIHJpZ2h0ID0gTWF0aC5mbG9vcihNYXRoLm1pbihhcnJheS5sZW5ndGggLSAxLCByaWdodCkpO1xuXG4gIGlmICghKGxlZnQgPD0gayAmJiBrIDw9IHJpZ2h0KSkgcmV0dXJuIGFycmF5O1xuXG4gIGNvbXBhcmUgPSBjb21wYXJlID09PSB1bmRlZmluZWQgPyBhc2NlbmRpbmdEZWZpbmVkIDogY29tcGFyZURlZmluZWQoY29tcGFyZSk7XG5cbiAgd2hpbGUgKHJpZ2h0ID4gbGVmdCkge1xuICAgIGlmIChyaWdodCAtIGxlZnQgPiA2MDApIHtcbiAgICAgIGNvbnN0IG4gPSByaWdodCAtIGxlZnQgKyAxO1xuICAgICAgY29uc3QgbSA9IGsgLSBsZWZ0ICsgMTtcbiAgICAgIGNvbnN0IHogPSBNYXRoLmxvZyhuKTtcbiAgICAgIGNvbnN0IHMgPSAwLjUgKiBNYXRoLmV4cCgyICogeiAvIDMpO1xuICAgICAgY29uc3Qgc2QgPSAwLjUgKiBNYXRoLnNxcnQoeiAqIHMgKiAobiAtIHMpIC8gbikgKiAobSAtIG4gLyAyIDwgMCA/IC0xIDogMSk7XG4gICAgICBjb25zdCBuZXdMZWZ0ID0gTWF0aC5tYXgobGVmdCwgTWF0aC5mbG9vcihrIC0gbSAqIHMgLyBuICsgc2QpKTtcbiAgICAgIGNvbnN0IG5ld1JpZ2h0ID0gTWF0aC5taW4ocmlnaHQsIE1hdGguZmxvb3IoayArIChuIC0gbSkgKiBzIC8gbiArIHNkKSk7XG4gICAgICBxdWlja3NlbGVjdChhcnJheSwgaywgbmV3TGVmdCwgbmV3UmlnaHQsIGNvbXBhcmUpO1xuICAgIH1cblxuICAgIGNvbnN0IHQgPSBhcnJheVtrXTtcbiAgICBsZXQgaSA9IGxlZnQ7XG4gICAgbGV0IGogPSByaWdodDtcblxuICAgIHN3YXAoYXJyYXksIGxlZnQsIGspO1xuICAgIGlmIChjb21wYXJlKGFycmF5W3JpZ2h0XSwgdCkgPiAwKSBzd2FwKGFycmF5LCBsZWZ0LCByaWdodCk7XG5cbiAgICB3aGlsZSAoaSA8IGopIHtcbiAgICAgIHN3YXAoYXJyYXksIGksIGopLCArK2ksIC0tajtcbiAgICAgIHdoaWxlIChjb21wYXJlKGFycmF5W2ldLCB0KSA8IDApICsraTtcbiAgICAgIHdoaWxlIChjb21wYXJlKGFycmF5W2pdLCB0KSA+IDApIC0tajtcbiAgICB9XG5cbiAgICBpZiAoY29tcGFyZShhcnJheVtsZWZ0XSwgdCkgPT09IDApIHN3YXAoYXJyYXksIGxlZnQsIGopO1xuICAgIGVsc2UgKytqLCBzd2FwKGFycmF5LCBqLCByaWdodCk7XG5cbiAgICBpZiAoaiA8PSBrKSBsZWZ0ID0gaiArIDE7XG4gICAgaWYgKGsgPD0gaikgcmlnaHQgPSBqIC0gMTtcbiAgfVxuXG4gIHJldHVybiBhcnJheTtcbn1cblxuZnVuY3Rpb24gc3dhcChhcnJheSwgaSwgaikge1xuICBjb25zdCB0ID0gYXJyYXlbaV07XG4gIGFycmF5W2ldID0gYXJyYXlbal07XG4gIGFycmF5W2pdID0gdDtcbn1cbiIsImltcG9ydCBxdWFudGlsZSwge3F1YW50aWxlSW5kZXh9IGZyb20gXCIuL3F1YW50aWxlLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1lZGlhbih2YWx1ZXMsIHZhbHVlb2YpIHtcbiAgcmV0dXJuIHF1YW50aWxlKHZhbHVlcywgMC41LCB2YWx1ZW9mKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1lZGlhbkluZGV4KHZhbHVlcywgdmFsdWVvZikge1xuICByZXR1cm4gcXVhbnRpbGVJbmRleCh2YWx1ZXMsIDAuNSwgdmFsdWVvZik7XG59XG4iLCJpbXBvcnQgbWF4IGZyb20gXCIuL21heC5qc1wiO1xuaW1wb3J0IG1heEluZGV4IGZyb20gXCIuL21heEluZGV4LmpzXCI7XG5pbXBvcnQgbWluIGZyb20gXCIuL21pbi5qc1wiO1xuaW1wb3J0IG1pbkluZGV4IGZyb20gXCIuL21pbkluZGV4LmpzXCI7XG5pbXBvcnQgcXVpY2tzZWxlY3QgZnJvbSBcIi4vcXVpY2tzZWxlY3QuanNcIjtcbmltcG9ydCBudW1iZXIsIHtudW1iZXJzfSBmcm9tIFwiLi9udW1iZXIuanNcIjtcbmltcG9ydCB7YXNjZW5kaW5nRGVmaW5lZH0gZnJvbSBcIi4vc29ydC5qc1wiO1xuaW1wb3J0IGdyZWF0ZXN0IGZyb20gXCIuL2dyZWF0ZXN0LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHF1YW50aWxlKHZhbHVlcywgcCwgdmFsdWVvZikge1xuICB2YWx1ZXMgPSBGbG9hdDY0QXJyYXkuZnJvbShudW1iZXJzKHZhbHVlcywgdmFsdWVvZikpO1xuICBpZiAoIShuID0gdmFsdWVzLmxlbmd0aCkgfHwgaXNOYU4ocCA9ICtwKSkgcmV0dXJuO1xuICBpZiAocCA8PSAwIHx8IG4gPCAyKSByZXR1cm4gbWluKHZhbHVlcyk7XG4gIGlmIChwID49IDEpIHJldHVybiBtYXgodmFsdWVzKTtcbiAgdmFyIG4sXG4gICAgICBpID0gKG4gLSAxKSAqIHAsXG4gICAgICBpMCA9IE1hdGguZmxvb3IoaSksXG4gICAgICB2YWx1ZTAgPSBtYXgocXVpY2tzZWxlY3QodmFsdWVzLCBpMCkuc3ViYXJyYXkoMCwgaTAgKyAxKSksXG4gICAgICB2YWx1ZTEgPSBtaW4odmFsdWVzLnN1YmFycmF5KGkwICsgMSkpO1xuICByZXR1cm4gdmFsdWUwICsgKHZhbHVlMSAtIHZhbHVlMCkgKiAoaSAtIGkwKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHF1YW50aWxlU29ydGVkKHZhbHVlcywgcCwgdmFsdWVvZiA9IG51bWJlcikge1xuICBpZiAoIShuID0gdmFsdWVzLmxlbmd0aCkgfHwgaXNOYU4ocCA9ICtwKSkgcmV0dXJuO1xuICBpZiAocCA8PSAwIHx8IG4gPCAyKSByZXR1cm4gK3ZhbHVlb2YodmFsdWVzWzBdLCAwLCB2YWx1ZXMpO1xuICBpZiAocCA+PSAxKSByZXR1cm4gK3ZhbHVlb2YodmFsdWVzW24gLSAxXSwgbiAtIDEsIHZhbHVlcyk7XG4gIHZhciBuLFxuICAgICAgaSA9IChuIC0gMSkgKiBwLFxuICAgICAgaTAgPSBNYXRoLmZsb29yKGkpLFxuICAgICAgdmFsdWUwID0gK3ZhbHVlb2YodmFsdWVzW2kwXSwgaTAsIHZhbHVlcyksXG4gICAgICB2YWx1ZTEgPSArdmFsdWVvZih2YWx1ZXNbaTAgKyAxXSwgaTAgKyAxLCB2YWx1ZXMpO1xuICByZXR1cm4gdmFsdWUwICsgKHZhbHVlMSAtIHZhbHVlMCkgKiAoaSAtIGkwKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHF1YW50aWxlSW5kZXgodmFsdWVzLCBwLCB2YWx1ZW9mID0gbnVtYmVyKSB7XG4gIGlmIChpc05hTihwID0gK3ApKSByZXR1cm47XG4gIG51bWJlcnMgPSBGbG9hdDY0QXJyYXkuZnJvbSh2YWx1ZXMsIChfLCBpKSA9PiBudW1iZXIodmFsdWVvZih2YWx1ZXNbaV0sIGksIHZhbHVlcykpKTtcbiAgaWYgKHAgPD0gMCkgcmV0dXJuIG1pbkluZGV4KG51bWJlcnMpO1xuICBpZiAocCA+PSAxKSByZXR1cm4gbWF4SW5kZXgobnVtYmVycyk7XG4gIHZhciBudW1iZXJzLFxuICAgICAgaW5kZXggPSBVaW50MzJBcnJheS5mcm9tKHZhbHVlcywgKF8sIGkpID0+IGkpLFxuICAgICAgaiA9IG51bWJlcnMubGVuZ3RoIC0gMSxcbiAgICAgIGkgPSBNYXRoLmZsb29yKGogKiBwKTtcbiAgcXVpY2tzZWxlY3QoaW5kZXgsIGksIDAsIGosIChpLCBqKSA9PiBhc2NlbmRpbmdEZWZpbmVkKG51bWJlcnNbaV0sIG51bWJlcnNbal0pKTtcbiAgaSA9IGdyZWF0ZXN0KGluZGV4LnN1YmFycmF5KDAsIGkgKyAxKSwgKGkpID0+IG51bWJlcnNbaV0pO1xuICByZXR1cm4gaSA+PSAwID8gaSA6IC0xO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmFuZ2Uoc3RhcnQsIHN0b3AsIHN0ZXApIHtcbiAgc3RhcnQgPSArc3RhcnQsIHN0b3AgPSArc3RvcCwgc3RlcCA9IChuID0gYXJndW1lbnRzLmxlbmd0aCkgPCAyID8gKHN0b3AgPSBzdGFydCwgc3RhcnQgPSAwLCAxKSA6IG4gPCAzID8gMSA6ICtzdGVwO1xuXG4gIHZhciBpID0gLTEsXG4gICAgICBuID0gTWF0aC5tYXgoMCwgTWF0aC5jZWlsKChzdG9wIC0gc3RhcnQpIC8gc3RlcCkpIHwgMCxcbiAgICAgIHJhbmdlID0gbmV3IEFycmF5KG4pO1xuXG4gIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgcmFuZ2VbaV0gPSBzdGFydCArIGkgKiBzdGVwO1xuICB9XG5cbiAgcmV0dXJuIHJhbmdlO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3VtKHZhbHVlcywgdmFsdWVvZikge1xuICBsZXQgc3VtID0gMDtcbiAgaWYgKHZhbHVlb2YgPT09IHVuZGVmaW5lZCkge1xuICAgIGZvciAobGV0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgaWYgKHZhbHVlID0gK3ZhbHVlKSB7XG4gICAgICAgIHN1bSArPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbGV0IGluZGV4ID0gLTE7XG4gICAgZm9yIChsZXQgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICBpZiAodmFsdWUgPSArdmFsdWVvZih2YWx1ZSwgKytpbmRleCwgdmFsdWVzKSkge1xuICAgICAgICBzdW0gKz0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBzdW07XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiB4O1xufVxuIiwiaW1wb3J0IGlkZW50aXR5IGZyb20gXCIuL2lkZW50aXR5LmpzXCI7XG5cbnZhciB0b3AgPSAxLFxuICAgIHJpZ2h0ID0gMixcbiAgICBib3R0b20gPSAzLFxuICAgIGxlZnQgPSA0LFxuICAgIGVwc2lsb24gPSAxZS02O1xuXG5mdW5jdGlvbiB0cmFuc2xhdGVYKHgpIHtcbiAgcmV0dXJuIFwidHJhbnNsYXRlKFwiICsgeCArIFwiLDApXCI7XG59XG5cbmZ1bmN0aW9uIHRyYW5zbGF0ZVkoeSkge1xuICByZXR1cm4gXCJ0cmFuc2xhdGUoMCxcIiArIHkgKyBcIilcIjtcbn1cblxuZnVuY3Rpb24gbnVtYmVyKHNjYWxlKSB7XG4gIHJldHVybiBkID0+ICtzY2FsZShkKTtcbn1cblxuZnVuY3Rpb24gY2VudGVyKHNjYWxlLCBvZmZzZXQpIHtcbiAgb2Zmc2V0ID0gTWF0aC5tYXgoMCwgc2NhbGUuYmFuZHdpZHRoKCkgLSBvZmZzZXQgKiAyKSAvIDI7XG4gIGlmIChzY2FsZS5yb3VuZCgpKSBvZmZzZXQgPSBNYXRoLnJvdW5kKG9mZnNldCk7XG4gIHJldHVybiBkID0+ICtzY2FsZShkKSArIG9mZnNldDtcbn1cblxuZnVuY3Rpb24gZW50ZXJpbmcoKSB7XG4gIHJldHVybiAhdGhpcy5fX2F4aXM7XG59XG5cbmZ1bmN0aW9uIGF4aXMob3JpZW50LCBzY2FsZSkge1xuICB2YXIgdGlja0FyZ3VtZW50cyA9IFtdLFxuICAgICAgdGlja1ZhbHVlcyA9IG51bGwsXG4gICAgICB0aWNrRm9ybWF0ID0gbnVsbCxcbiAgICAgIHRpY2tTaXplSW5uZXIgPSA2LFxuICAgICAgdGlja1NpemVPdXRlciA9IDYsXG4gICAgICB0aWNrUGFkZGluZyA9IDMsXG4gICAgICBvZmZzZXQgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvID4gMSA/IDAgOiAwLjUsXG4gICAgICBrID0gb3JpZW50ID09PSB0b3AgfHwgb3JpZW50ID09PSBsZWZ0ID8gLTEgOiAxLFxuICAgICAgeCA9IG9yaWVudCA9PT0gbGVmdCB8fCBvcmllbnQgPT09IHJpZ2h0ID8gXCJ4XCIgOiBcInlcIixcbiAgICAgIHRyYW5zZm9ybSA9IG9yaWVudCA9PT0gdG9wIHx8IG9yaWVudCA9PT0gYm90dG9tID8gdHJhbnNsYXRlWCA6IHRyYW5zbGF0ZVk7XG5cbiAgZnVuY3Rpb24gYXhpcyhjb250ZXh0KSB7XG4gICAgdmFyIHZhbHVlcyA9IHRpY2tWYWx1ZXMgPT0gbnVsbCA/IChzY2FsZS50aWNrcyA/IHNjYWxlLnRpY2tzLmFwcGx5KHNjYWxlLCB0aWNrQXJndW1lbnRzKSA6IHNjYWxlLmRvbWFpbigpKSA6IHRpY2tWYWx1ZXMsXG4gICAgICAgIGZvcm1hdCA9IHRpY2tGb3JtYXQgPT0gbnVsbCA/IChzY2FsZS50aWNrRm9ybWF0ID8gc2NhbGUudGlja0Zvcm1hdC5hcHBseShzY2FsZSwgdGlja0FyZ3VtZW50cykgOiBpZGVudGl0eSkgOiB0aWNrRm9ybWF0LFxuICAgICAgICBzcGFjaW5nID0gTWF0aC5tYXgodGlja1NpemVJbm5lciwgMCkgKyB0aWNrUGFkZGluZyxcbiAgICAgICAgcmFuZ2UgPSBzY2FsZS5yYW5nZSgpLFxuICAgICAgICByYW5nZTAgPSArcmFuZ2VbMF0gKyBvZmZzZXQsXG4gICAgICAgIHJhbmdlMSA9ICtyYW5nZVtyYW5nZS5sZW5ndGggLSAxXSArIG9mZnNldCxcbiAgICAgICAgcG9zaXRpb24gPSAoc2NhbGUuYmFuZHdpZHRoID8gY2VudGVyIDogbnVtYmVyKShzY2FsZS5jb3B5KCksIG9mZnNldCksXG4gICAgICAgIHNlbGVjdGlvbiA9IGNvbnRleHQuc2VsZWN0aW9uID8gY29udGV4dC5zZWxlY3Rpb24oKSA6IGNvbnRleHQsXG4gICAgICAgIHBhdGggPSBzZWxlY3Rpb24uc2VsZWN0QWxsKFwiLmRvbWFpblwiKS5kYXRhKFtudWxsXSksXG4gICAgICAgIHRpY2sgPSBzZWxlY3Rpb24uc2VsZWN0QWxsKFwiLnRpY2tcIikuZGF0YSh2YWx1ZXMsIHNjYWxlKS5vcmRlcigpLFxuICAgICAgICB0aWNrRXhpdCA9IHRpY2suZXhpdCgpLFxuICAgICAgICB0aWNrRW50ZXIgPSB0aWNrLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJ0aWNrXCIpLFxuICAgICAgICBsaW5lID0gdGljay5zZWxlY3QoXCJsaW5lXCIpLFxuICAgICAgICB0ZXh0ID0gdGljay5zZWxlY3QoXCJ0ZXh0XCIpO1xuXG4gICAgcGF0aCA9IHBhdGgubWVyZ2UocGF0aC5lbnRlcigpLmluc2VydChcInBhdGhcIiwgXCIudGlja1wiKVxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwiZG9tYWluXCIpXG4gICAgICAgIC5hdHRyKFwic3Ryb2tlXCIsIFwiY3VycmVudENvbG9yXCIpKTtcblxuICAgIHRpY2sgPSB0aWNrLm1lcmdlKHRpY2tFbnRlcik7XG5cbiAgICBsaW5lID0gbGluZS5tZXJnZSh0aWNrRW50ZXIuYXBwZW5kKFwibGluZVwiKVxuICAgICAgICAuYXR0cihcInN0cm9rZVwiLCBcImN1cnJlbnRDb2xvclwiKVxuICAgICAgICAuYXR0cih4ICsgXCIyXCIsIGsgKiB0aWNrU2l6ZUlubmVyKSk7XG5cbiAgICB0ZXh0ID0gdGV4dC5tZXJnZSh0aWNrRW50ZXIuYXBwZW5kKFwidGV4dFwiKVxuICAgICAgICAuYXR0cihcImZpbGxcIiwgXCJjdXJyZW50Q29sb3JcIilcbiAgICAgICAgLmF0dHIoeCwgayAqIHNwYWNpbmcpXG4gICAgICAgIC5hdHRyKFwiZHlcIiwgb3JpZW50ID09PSB0b3AgPyBcIjBlbVwiIDogb3JpZW50ID09PSBib3R0b20gPyBcIjAuNzFlbVwiIDogXCIwLjMyZW1cIikpO1xuXG4gICAgaWYgKGNvbnRleHQgIT09IHNlbGVjdGlvbikge1xuICAgICAgcGF0aCA9IHBhdGgudHJhbnNpdGlvbihjb250ZXh0KTtcbiAgICAgIHRpY2sgPSB0aWNrLnRyYW5zaXRpb24oY29udGV4dCk7XG4gICAgICBsaW5lID0gbGluZS50cmFuc2l0aW9uKGNvbnRleHQpO1xuICAgICAgdGV4dCA9IHRleHQudHJhbnNpdGlvbihjb250ZXh0KTtcblxuICAgICAgdGlja0V4aXQgPSB0aWNrRXhpdC50cmFuc2l0aW9uKGNvbnRleHQpXG4gICAgICAgICAgLmF0dHIoXCJvcGFjaXR5XCIsIGVwc2lsb24pXG4gICAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gaXNGaW5pdGUoZCA9IHBvc2l0aW9uKGQpKSA/IHRyYW5zZm9ybShkICsgb2Zmc2V0KSA6IHRoaXMuZ2V0QXR0cmlidXRlKFwidHJhbnNmb3JtXCIpOyB9KTtcblxuICAgICAgdGlja0VudGVyXG4gICAgICAgICAgLmF0dHIoXCJvcGFjaXR5XCIsIGVwc2lsb24pXG4gICAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgZnVuY3Rpb24oZCkgeyB2YXIgcCA9IHRoaXMucGFyZW50Tm9kZS5fX2F4aXM7IHJldHVybiB0cmFuc2Zvcm0oKHAgJiYgaXNGaW5pdGUocCA9IHAoZCkpID8gcCA6IHBvc2l0aW9uKGQpKSArIG9mZnNldCk7IH0pO1xuICAgIH1cblxuICAgIHRpY2tFeGl0LnJlbW92ZSgpO1xuXG4gICAgcGF0aFxuICAgICAgICAuYXR0cihcImRcIiwgb3JpZW50ID09PSBsZWZ0IHx8IG9yaWVudCA9PT0gcmlnaHRcbiAgICAgICAgICAgID8gKHRpY2tTaXplT3V0ZXIgPyBcIk1cIiArIGsgKiB0aWNrU2l6ZU91dGVyICsgXCIsXCIgKyByYW5nZTAgKyBcIkhcIiArIG9mZnNldCArIFwiVlwiICsgcmFuZ2UxICsgXCJIXCIgKyBrICogdGlja1NpemVPdXRlciA6IFwiTVwiICsgb2Zmc2V0ICsgXCIsXCIgKyByYW5nZTAgKyBcIlZcIiArIHJhbmdlMSlcbiAgICAgICAgICAgIDogKHRpY2tTaXplT3V0ZXIgPyBcIk1cIiArIHJhbmdlMCArIFwiLFwiICsgayAqIHRpY2tTaXplT3V0ZXIgKyBcIlZcIiArIG9mZnNldCArIFwiSFwiICsgcmFuZ2UxICsgXCJWXCIgKyBrICogdGlja1NpemVPdXRlciA6IFwiTVwiICsgcmFuZ2UwICsgXCIsXCIgKyBvZmZzZXQgKyBcIkhcIiArIHJhbmdlMSkpO1xuXG4gICAgdGlja1xuICAgICAgICAuYXR0cihcIm9wYWNpdHlcIiwgMSlcbiAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gdHJhbnNmb3JtKHBvc2l0aW9uKGQpICsgb2Zmc2V0KTsgfSk7XG5cbiAgICBsaW5lXG4gICAgICAgIC5hdHRyKHggKyBcIjJcIiwgayAqIHRpY2tTaXplSW5uZXIpO1xuXG4gICAgdGV4dFxuICAgICAgICAuYXR0cih4LCBrICogc3BhY2luZylcbiAgICAgICAgLnRleHQoZm9ybWF0KTtcblxuICAgIHNlbGVjdGlvbi5maWx0ZXIoZW50ZXJpbmcpXG4gICAgICAgIC5hdHRyKFwiZmlsbFwiLCBcIm5vbmVcIilcbiAgICAgICAgLmF0dHIoXCJmb250LXNpemVcIiwgMTApXG4gICAgICAgIC5hdHRyKFwiZm9udC1mYW1pbHlcIiwgXCJzYW5zLXNlcmlmXCIpXG4gICAgICAgIC5hdHRyKFwidGV4dC1hbmNob3JcIiwgb3JpZW50ID09PSByaWdodCA/IFwic3RhcnRcIiA6IG9yaWVudCA9PT0gbGVmdCA/IFwiZW5kXCIgOiBcIm1pZGRsZVwiKTtcblxuICAgIHNlbGVjdGlvblxuICAgICAgICAuZWFjaChmdW5jdGlvbigpIHsgdGhpcy5fX2F4aXMgPSBwb3NpdGlvbjsgfSk7XG4gIH1cblxuICBheGlzLnNjYWxlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHNjYWxlID0gXywgYXhpcykgOiBzY2FsZTtcbiAgfTtcblxuICBheGlzLnRpY2tzID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRpY2tBcmd1bWVudHMgPSBBcnJheS5mcm9tKGFyZ3VtZW50cyksIGF4aXM7XG4gIH07XG5cbiAgYXhpcy50aWNrQXJndW1lbnRzID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRpY2tBcmd1bWVudHMgPSBfID09IG51bGwgPyBbXSA6IEFycmF5LmZyb20oXyksIGF4aXMpIDogdGlja0FyZ3VtZW50cy5zbGljZSgpO1xuICB9O1xuXG4gIGF4aXMudGlja1ZhbHVlcyA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0aWNrVmFsdWVzID0gXyA9PSBudWxsID8gbnVsbCA6IEFycmF5LmZyb20oXyksIGF4aXMpIDogdGlja1ZhbHVlcyAmJiB0aWNrVmFsdWVzLnNsaWNlKCk7XG4gIH07XG5cbiAgYXhpcy50aWNrRm9ybWF0ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRpY2tGb3JtYXQgPSBfLCBheGlzKSA6IHRpY2tGb3JtYXQ7XG4gIH07XG5cbiAgYXhpcy50aWNrU2l6ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0aWNrU2l6ZUlubmVyID0gdGlja1NpemVPdXRlciA9ICtfLCBheGlzKSA6IHRpY2tTaXplSW5uZXI7XG4gIH07XG5cbiAgYXhpcy50aWNrU2l6ZUlubmVyID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRpY2tTaXplSW5uZXIgPSArXywgYXhpcykgOiB0aWNrU2l6ZUlubmVyO1xuICB9O1xuXG4gIGF4aXMudGlja1NpemVPdXRlciA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0aWNrU2l6ZU91dGVyID0gK18sIGF4aXMpIDogdGlja1NpemVPdXRlcjtcbiAgfTtcblxuICBheGlzLnRpY2tQYWRkaW5nID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRpY2tQYWRkaW5nID0gK18sIGF4aXMpIDogdGlja1BhZGRpbmc7XG4gIH07XG5cbiAgYXhpcy5vZmZzZXQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAob2Zmc2V0ID0gK18sIGF4aXMpIDogb2Zmc2V0O1xuICB9O1xuXG4gIHJldHVybiBheGlzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXhpc1RvcChzY2FsZSkge1xuICByZXR1cm4gYXhpcyh0b3AsIHNjYWxlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF4aXNSaWdodChzY2FsZSkge1xuICByZXR1cm4gYXhpcyhyaWdodCwgc2NhbGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXhpc0JvdHRvbShzY2FsZSkge1xuICByZXR1cm4gYXhpcyhib3R0b20sIHNjYWxlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF4aXNMZWZ0KHNjYWxlKSB7XG4gIHJldHVybiBheGlzKGxlZnQsIHNjYWxlKTtcbn1cbiIsInZhciBub29wID0ge3ZhbHVlOiAoKSA9PiB7fX07XG5cbmZ1bmN0aW9uIGRpc3BhdGNoKCkge1xuICBmb3IgKHZhciBpID0gMCwgbiA9IGFyZ3VtZW50cy5sZW5ndGgsIF8gPSB7fSwgdDsgaSA8IG47ICsraSkge1xuICAgIGlmICghKHQgPSBhcmd1bWVudHNbaV0gKyBcIlwiKSB8fCAodCBpbiBfKSB8fCAvW1xccy5dLy50ZXN0KHQpKSB0aHJvdyBuZXcgRXJyb3IoXCJpbGxlZ2FsIHR5cGU6IFwiICsgdCk7XG4gICAgX1t0XSA9IFtdO1xuICB9XG4gIHJldHVybiBuZXcgRGlzcGF0Y2goXyk7XG59XG5cbmZ1bmN0aW9uIERpc3BhdGNoKF8pIHtcbiAgdGhpcy5fID0gXztcbn1cblxuZnVuY3Rpb24gcGFyc2VUeXBlbmFtZXModHlwZW5hbWVzLCB0eXBlcykge1xuICByZXR1cm4gdHlwZW5hbWVzLnRyaW0oKS5zcGxpdCgvXnxcXHMrLykubWFwKGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgbmFtZSA9IFwiXCIsIGkgPSB0LmluZGV4T2YoXCIuXCIpO1xuICAgIGlmIChpID49IDApIG5hbWUgPSB0LnNsaWNlKGkgKyAxKSwgdCA9IHQuc2xpY2UoMCwgaSk7XG4gICAgaWYgKHQgJiYgIXR5cGVzLmhhc093blByb3BlcnR5KHQpKSB0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIHR5cGU6IFwiICsgdCk7XG4gICAgcmV0dXJuIHt0eXBlOiB0LCBuYW1lOiBuYW1lfTtcbiAgfSk7XG59XG5cbkRpc3BhdGNoLnByb3RvdHlwZSA9IGRpc3BhdGNoLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IERpc3BhdGNoLFxuICBvbjogZnVuY3Rpb24odHlwZW5hbWUsIGNhbGxiYWNrKSB7XG4gICAgdmFyIF8gPSB0aGlzLl8sXG4gICAgICAgIFQgPSBwYXJzZVR5cGVuYW1lcyh0eXBlbmFtZSArIFwiXCIsIF8pLFxuICAgICAgICB0LFxuICAgICAgICBpID0gLTEsXG4gICAgICAgIG4gPSBULmxlbmd0aDtcblxuICAgIC8vIElmIG5vIGNhbGxiYWNrIHdhcyBzcGVjaWZpZWQsIHJldHVybiB0aGUgY2FsbGJhY2sgb2YgdGhlIGdpdmVuIHR5cGUgYW5kIG5hbWUuXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgICB3aGlsZSAoKytpIDwgbikgaWYgKCh0ID0gKHR5cGVuYW1lID0gVFtpXSkudHlwZSkgJiYgKHQgPSBnZXQoX1t0XSwgdHlwZW5hbWUubmFtZSkpKSByZXR1cm4gdDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJZiBhIHR5cGUgd2FzIHNwZWNpZmllZCwgc2V0IHRoZSBjYWxsYmFjayBmb3IgdGhlIGdpdmVuIHR5cGUgYW5kIG5hbWUuXG4gICAgLy8gT3RoZXJ3aXNlLCBpZiBhIG51bGwgY2FsbGJhY2sgd2FzIHNwZWNpZmllZCwgcmVtb3ZlIGNhbGxiYWNrcyBvZiB0aGUgZ2l2ZW4gbmFtZS5cbiAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCAmJiB0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBjYWxsYmFjazogXCIgKyBjYWxsYmFjayk7XG4gICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgIGlmICh0ID0gKHR5cGVuYW1lID0gVFtpXSkudHlwZSkgX1t0XSA9IHNldChfW3RdLCB0eXBlbmFtZS5uYW1lLCBjYWxsYmFjayk7XG4gICAgICBlbHNlIGlmIChjYWxsYmFjayA9PSBudWxsKSBmb3IgKHQgaW4gXykgX1t0XSA9IHNldChfW3RdLCB0eXBlbmFtZS5uYW1lLCBudWxsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgY29weTogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGNvcHkgPSB7fSwgXyA9IHRoaXMuXztcbiAgICBmb3IgKHZhciB0IGluIF8pIGNvcHlbdF0gPSBfW3RdLnNsaWNlKCk7XG4gICAgcmV0dXJuIG5ldyBEaXNwYXRjaChjb3B5KTtcbiAgfSxcbiAgY2FsbDogZnVuY3Rpb24odHlwZSwgdGhhdCkge1xuICAgIGlmICgobiA9IGFyZ3VtZW50cy5sZW5ndGggLSAyKSA+IDApIGZvciAodmFyIGFyZ3MgPSBuZXcgQXJyYXkobiksIGkgPSAwLCBuLCB0OyBpIDwgbjsgKytpKSBhcmdzW2ldID0gYXJndW1lbnRzW2kgKyAyXTtcbiAgICBpZiAoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eSh0eXBlKSkgdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biB0eXBlOiBcIiArIHR5cGUpO1xuICAgIGZvciAodCA9IHRoaXMuX1t0eXBlXSwgaSA9IDAsIG4gPSB0Lmxlbmd0aDsgaSA8IG47ICsraSkgdFtpXS52YWx1ZS5hcHBseSh0aGF0LCBhcmdzKTtcbiAgfSxcbiAgYXBwbHk6IGZ1bmN0aW9uKHR5cGUsIHRoYXQsIGFyZ3MpIHtcbiAgICBpZiAoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eSh0eXBlKSkgdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biB0eXBlOiBcIiArIHR5cGUpO1xuICAgIGZvciAodmFyIHQgPSB0aGlzLl9bdHlwZV0sIGkgPSAwLCBuID0gdC5sZW5ndGg7IGkgPCBuOyArK2kpIHRbaV0udmFsdWUuYXBwbHkodGhhdCwgYXJncyk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGdldCh0eXBlLCBuYW1lKSB7XG4gIGZvciAodmFyIGkgPSAwLCBuID0gdHlwZS5sZW5ndGgsIGM7IGkgPCBuOyArK2kpIHtcbiAgICBpZiAoKGMgPSB0eXBlW2ldKS5uYW1lID09PSBuYW1lKSB7XG4gICAgICByZXR1cm4gYy52YWx1ZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0KHR5cGUsIG5hbWUsIGNhbGxiYWNrKSB7XG4gIGZvciAodmFyIGkgPSAwLCBuID0gdHlwZS5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICBpZiAodHlwZVtpXS5uYW1lID09PSBuYW1lKSB7XG4gICAgICB0eXBlW2ldID0gbm9vcCwgdHlwZSA9IHR5cGUuc2xpY2UoMCwgaSkuY29uY2F0KHR5cGUuc2xpY2UoaSArIDEpKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBpZiAoY2FsbGJhY2sgIT0gbnVsbCkgdHlwZS5wdXNoKHtuYW1lOiBuYW1lLCB2YWx1ZTogY2FsbGJhY2t9KTtcbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGRpc3BhdGNoO1xuIiwiZXhwb3J0IHZhciB4aHRtbCA9IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHN2ZzogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICB4aHRtbDogeGh0bWwsXG4gIHhsaW5rOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcbiAgeG1sOiBcImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZVwiLFxuICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zL1wiXG59O1xuIiwiaW1wb3J0IG5hbWVzcGFjZXMgZnJvbSBcIi4vbmFtZXNwYWNlcy5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lKSB7XG4gIHZhciBwcmVmaXggPSBuYW1lICs9IFwiXCIsIGkgPSBwcmVmaXguaW5kZXhPZihcIjpcIik7XG4gIGlmIChpID49IDAgJiYgKHByZWZpeCA9IG5hbWUuc2xpY2UoMCwgaSkpICE9PSBcInhtbG5zXCIpIG5hbWUgPSBuYW1lLnNsaWNlKGkgKyAxKTtcbiAgcmV0dXJuIG5hbWVzcGFjZXMuaGFzT3duUHJvcGVydHkocHJlZml4KSA/IHtzcGFjZTogbmFtZXNwYWNlc1twcmVmaXhdLCBsb2NhbDogbmFtZX0gOiBuYW1lOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xufVxuIiwiaW1wb3J0IG5hbWVzcGFjZSBmcm9tIFwiLi9uYW1lc3BhY2UuanNcIjtcbmltcG9ydCB7eGh0bWx9IGZyb20gXCIuL25hbWVzcGFjZXMuanNcIjtcblxuZnVuY3Rpb24gY3JlYXRvckluaGVyaXQobmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGRvY3VtZW50ID0gdGhpcy5vd25lckRvY3VtZW50LFxuICAgICAgICB1cmkgPSB0aGlzLm5hbWVzcGFjZVVSSTtcbiAgICByZXR1cm4gdXJpID09PSB4aHRtbCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJID09PSB4aHRtbFxuICAgICAgICA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQobmFtZSlcbiAgICAgICAgOiBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlModXJpLCBuYW1lKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRvckZpeGVkKGZ1bGxuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lKSB7XG4gIHZhciBmdWxsbmFtZSA9IG5hbWVzcGFjZShuYW1lKTtcbiAgcmV0dXJuIChmdWxsbmFtZS5sb2NhbFxuICAgICAgPyBjcmVhdG9yRml4ZWRcbiAgICAgIDogY3JlYXRvckluaGVyaXQpKGZ1bGxuYW1lKTtcbn1cbiIsImZ1bmN0aW9uIG5vbmUoKSB7fVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3Rvcikge1xuICByZXR1cm4gc2VsZWN0b3IgPT0gbnVsbCA/IG5vbmUgOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTtcbiAgfTtcbn1cbiIsImZ1bmN0aW9uIGVtcHR5KCkge1xuICByZXR1cm4gW107XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdG9yKSB7XG4gIHJldHVybiBzZWxlY3RvciA9PSBudWxsID8gZW1wdHkgOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTtcbiAgfTtcbn1cbiIsImltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuaW1wb3J0IGFycmF5IGZyb20gXCIuLi9hcnJheS5qc1wiO1xuaW1wb3J0IHNlbGVjdG9yQWxsIGZyb20gXCIuLi9zZWxlY3RvckFsbC5qc1wiO1xuXG5mdW5jdGlvbiBhcnJheUFsbChzZWxlY3QpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBhcnJheShzZWxlY3QuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdCkge1xuICBpZiAodHlwZW9mIHNlbGVjdCA9PT0gXCJmdW5jdGlvblwiKSBzZWxlY3QgPSBhcnJheUFsbChzZWxlY3QpO1xuICBlbHNlIHNlbGVjdCA9IHNlbGVjdG9yQWxsKHNlbGVjdCk7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc3ViZ3JvdXBzID0gW10sIHBhcmVudHMgPSBbXSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgICAgc3ViZ3JvdXBzLnB1c2goc2VsZWN0LmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApKTtcbiAgICAgICAgcGFyZW50cy5wdXNoKG5vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgU2VsZWN0aW9uKHN1Ymdyb3VwcywgcGFyZW50cyk7XG59XG4iLCIvLyBHaXZlbiBzb21ldGhpbmcgYXJyYXkgbGlrZSAob3IgbnVsbCksIHJldHVybnMgc29tZXRoaW5nIHRoYXQgaXMgc3RyaWN0bHkgYW5cbi8vIGFycmF5LiBUaGlzIGlzIHVzZWQgdG8gZW5zdXJlIHRoYXQgYXJyYXktbGlrZSBvYmplY3RzIHBhc3NlZCB0byBkMy5zZWxlY3RBbGxcbi8vIG9yIHNlbGVjdGlvbi5zZWxlY3RBbGwgYXJlIGNvbnZlcnRlZCBpbnRvIHByb3BlciBhcnJheXMgd2hlbiBjcmVhdGluZyBhXG4vLyBzZWxlY3Rpb247IHdlIGRvbuKAmXQgZXZlciB3YW50IHRvIGNyZWF0ZSBhIHNlbGVjdGlvbiBiYWNrZWQgYnkgYSBsaXZlXG4vLyBIVE1MQ29sbGVjdGlvbiBvciBOb2RlTGlzdC4gSG93ZXZlciwgbm90ZSB0aGF0IHNlbGVjdGlvbi5zZWxlY3RBbGwgd2lsbCB1c2UgYVxuLy8gc3RhdGljIE5vZGVMaXN0IGFzIGEgZ3JvdXAsIHNpbmNlIGl0IHNhZmVseSBkZXJpdmVkIGZyb20gcXVlcnlTZWxlY3RvckFsbC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGFycmF5KHgpIHtcbiAgcmV0dXJuIHggPT0gbnVsbCA/IFtdIDogQXJyYXkuaXNBcnJheSh4KSA/IHggOiBBcnJheS5mcm9tKHgpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VsZWN0b3IpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLm1hdGNoZXMoc2VsZWN0b3IpO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hpbGRNYXRjaGVyKHNlbGVjdG9yKSB7XG4gIHJldHVybiBmdW5jdGlvbihub2RlKSB7XG4gICAgcmV0dXJuIG5vZGUubWF0Y2hlcyhzZWxlY3Rvcik7XG4gIH07XG59XG5cbiIsImltcG9ydCB7Y2hpbGRNYXRjaGVyfSBmcm9tIFwiLi4vbWF0Y2hlci5qc1wiO1xuXG52YXIgZmluZCA9IEFycmF5LnByb3RvdHlwZS5maW5kO1xuXG5mdW5jdGlvbiBjaGlsZEZpbmQobWF0Y2gpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBmaW5kLmNhbGwodGhpcy5jaGlsZHJlbiwgbWF0Y2gpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBjaGlsZEZpcnN0KCkge1xuICByZXR1cm4gdGhpcy5maXJzdEVsZW1lbnRDaGlsZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obWF0Y2gpIHtcbiAgcmV0dXJuIHRoaXMuc2VsZWN0KG1hdGNoID09IG51bGwgPyBjaGlsZEZpcnN0XG4gICAgICA6IGNoaWxkRmluZCh0eXBlb2YgbWF0Y2ggPT09IFwiZnVuY3Rpb25cIiA/IG1hdGNoIDogY2hpbGRNYXRjaGVyKG1hdGNoKSkpO1xufVxuIiwiaW1wb3J0IHtjaGlsZE1hdGNoZXJ9IGZyb20gXCIuLi9tYXRjaGVyLmpzXCI7XG5cbnZhciBmaWx0ZXIgPSBBcnJheS5wcm90b3R5cGUuZmlsdGVyO1xuXG5mdW5jdGlvbiBjaGlsZHJlbigpIHtcbiAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5jaGlsZHJlbik7XG59XG5cbmZ1bmN0aW9uIGNoaWxkcmVuRmlsdGVyKG1hdGNoKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZmlsdGVyLmNhbGwodGhpcy5jaGlsZHJlbiwgbWF0Y2gpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihtYXRjaCkge1xuICByZXR1cm4gdGhpcy5zZWxlY3RBbGwobWF0Y2ggPT0gbnVsbCA/IGNoaWxkcmVuXG4gICAgICA6IGNoaWxkcmVuRmlsdGVyKHR5cGVvZiBtYXRjaCA9PT0gXCJmdW5jdGlvblwiID8gbWF0Y2ggOiBjaGlsZE1hdGNoZXIobWF0Y2gpKSk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih1cGRhdGUpIHtcbiAgcmV0dXJuIG5ldyBBcnJheSh1cGRhdGUubGVuZ3RoKTtcbn1cbiIsImltcG9ydCBzcGFyc2UgZnJvbSBcIi4vc3BhcnNlLmpzXCI7XG5pbXBvcnQge1NlbGVjdGlvbn0gZnJvbSBcIi4vaW5kZXguanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgU2VsZWN0aW9uKHRoaXMuX2VudGVyIHx8IHRoaXMuX2dyb3Vwcy5tYXAoc3BhcnNlKSwgdGhpcy5fcGFyZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBFbnRlck5vZGUocGFyZW50LCBkYXR1bSkge1xuICB0aGlzLm93bmVyRG9jdW1lbnQgPSBwYXJlbnQub3duZXJEb2N1bWVudDtcbiAgdGhpcy5uYW1lc3BhY2VVUkkgPSBwYXJlbnQubmFtZXNwYWNlVVJJO1xuICB0aGlzLl9uZXh0ID0gbnVsbDtcbiAgdGhpcy5fcGFyZW50ID0gcGFyZW50O1xuICB0aGlzLl9fZGF0YV9fID0gZGF0dW07XG59XG5cbkVudGVyTm9kZS5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBFbnRlck5vZGUsXG4gIGFwcGVuZENoaWxkOiBmdW5jdGlvbihjaGlsZCkgeyByZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShjaGlsZCwgdGhpcy5fbmV4dCk7IH0sXG4gIGluc2VydEJlZm9yZTogZnVuY3Rpb24oY2hpbGQsIG5leHQpIHsgcmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoY2hpbGQsIG5leHQpOyB9LFxuICBxdWVyeVNlbGVjdG9yOiBmdW5jdGlvbihzZWxlY3RvcikgeyByZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpOyB9LFxuICBxdWVyeVNlbGVjdG9yQWxsOiBmdW5jdGlvbihzZWxlY3RvcikgeyByZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpOyB9XG59O1xuIiwiaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5pbXBvcnQge0VudGVyTm9kZX0gZnJvbSBcIi4vZW50ZXIuanNcIjtcbmltcG9ydCBjb25zdGFudCBmcm9tIFwiLi4vY29uc3RhbnQuanNcIjtcblxuZnVuY3Rpb24gYmluZEluZGV4KHBhcmVudCwgZ3JvdXAsIGVudGVyLCB1cGRhdGUsIGV4aXQsIGRhdGEpIHtcbiAgdmFyIGkgPSAwLFxuICAgICAgbm9kZSxcbiAgICAgIGdyb3VwTGVuZ3RoID0gZ3JvdXAubGVuZ3RoLFxuICAgICAgZGF0YUxlbmd0aCA9IGRhdGEubGVuZ3RoO1xuXG4gIC8vIFB1dCBhbnkgbm9uLW51bGwgbm9kZXMgdGhhdCBmaXQgaW50byB1cGRhdGUuXG4gIC8vIFB1dCBhbnkgbnVsbCBub2RlcyBpbnRvIGVudGVyLlxuICAvLyBQdXQgYW55IHJlbWFpbmluZyBkYXRhIGludG8gZW50ZXIuXG4gIGZvciAoOyBpIDwgZGF0YUxlbmd0aDsgKytpKSB7XG4gICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgbm9kZS5fX2RhdGFfXyA9IGRhdGFbaV07XG4gICAgICB1cGRhdGVbaV0gPSBub2RlO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbnRlcltpXSA9IG5ldyBFbnRlck5vZGUocGFyZW50LCBkYXRhW2ldKTtcbiAgICB9XG4gIH1cblxuICAvLyBQdXQgYW55IG5vbi1udWxsIG5vZGVzIHRoYXQgZG9u4oCZdCBmaXQgaW50byBleGl0LlxuICBmb3IgKDsgaSA8IGdyb3VwTGVuZ3RoOyArK2kpIHtcbiAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICBleGl0W2ldID0gbm9kZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYmluZEtleShwYXJlbnQsIGdyb3VwLCBlbnRlciwgdXBkYXRlLCBleGl0LCBkYXRhLCBrZXkpIHtcbiAgdmFyIGksXG4gICAgICBub2RlLFxuICAgICAgbm9kZUJ5S2V5VmFsdWUgPSBuZXcgTWFwLFxuICAgICAgZ3JvdXBMZW5ndGggPSBncm91cC5sZW5ndGgsXG4gICAgICBkYXRhTGVuZ3RoID0gZGF0YS5sZW5ndGgsXG4gICAgICBrZXlWYWx1ZXMgPSBuZXcgQXJyYXkoZ3JvdXBMZW5ndGgpLFxuICAgICAga2V5VmFsdWU7XG5cbiAgLy8gQ29tcHV0ZSB0aGUga2V5IGZvciBlYWNoIG5vZGUuXG4gIC8vIElmIG11bHRpcGxlIG5vZGVzIGhhdmUgdGhlIHNhbWUga2V5LCB0aGUgZHVwbGljYXRlcyBhcmUgYWRkZWQgdG8gZXhpdC5cbiAgZm9yIChpID0gMDsgaSA8IGdyb3VwTGVuZ3RoOyArK2kpIHtcbiAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICBrZXlWYWx1ZXNbaV0gPSBrZXlWYWx1ZSA9IGtleS5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIGksIGdyb3VwKSArIFwiXCI7XG4gICAgICBpZiAobm9kZUJ5S2V5VmFsdWUuaGFzKGtleVZhbHVlKSkge1xuICAgICAgICBleGl0W2ldID0gbm9kZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vZGVCeUtleVZhbHVlLnNldChrZXlWYWx1ZSwgbm9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQ29tcHV0ZSB0aGUga2V5IGZvciBlYWNoIGRhdHVtLlxuICAvLyBJZiB0aGVyZSBhIG5vZGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMga2V5LCBqb2luIGFuZCBhZGQgaXQgdG8gdXBkYXRlLlxuICAvLyBJZiB0aGVyZSBpcyBub3QgKG9yIHRoZSBrZXkgaXMgYSBkdXBsaWNhdGUpLCBhZGQgaXQgdG8gZW50ZXIuXG4gIGZvciAoaSA9IDA7IGkgPCBkYXRhTGVuZ3RoOyArK2kpIHtcbiAgICBrZXlWYWx1ZSA9IGtleS5jYWxsKHBhcmVudCwgZGF0YVtpXSwgaSwgZGF0YSkgKyBcIlwiO1xuICAgIGlmIChub2RlID0gbm9kZUJ5S2V5VmFsdWUuZ2V0KGtleVZhbHVlKSkge1xuICAgICAgdXBkYXRlW2ldID0gbm9kZTtcbiAgICAgIG5vZGUuX19kYXRhX18gPSBkYXRhW2ldO1xuICAgICAgbm9kZUJ5S2V5VmFsdWUuZGVsZXRlKGtleVZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZW50ZXJbaV0gPSBuZXcgRW50ZXJOb2RlKHBhcmVudCwgZGF0YVtpXSk7XG4gICAgfVxuICB9XG5cbiAgLy8gQWRkIGFueSByZW1haW5pbmcgbm9kZXMgdGhhdCB3ZXJlIG5vdCBib3VuZCB0byBkYXRhIHRvIGV4aXQuXG4gIGZvciAoaSA9IDA7IGkgPCBncm91cExlbmd0aDsgKytpKSB7XG4gICAgaWYgKChub2RlID0gZ3JvdXBbaV0pICYmIChub2RlQnlLZXlWYWx1ZS5nZXQoa2V5VmFsdWVzW2ldKSA9PT0gbm9kZSkpIHtcbiAgICAgIGV4aXRbaV0gPSBub2RlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBkYXR1bShub2RlKSB7XG4gIHJldHVybiBub2RlLl9fZGF0YV9fO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIEFycmF5LmZyb20odGhpcywgZGF0dW0pO1xuXG4gIHZhciBiaW5kID0ga2V5ID8gYmluZEtleSA6IGJpbmRJbmRleCxcbiAgICAgIHBhcmVudHMgPSB0aGlzLl9wYXJlbnRzLFxuICAgICAgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzO1xuXG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdmFsdWUgPSBjb25zdGFudCh2YWx1ZSk7XG5cbiAgZm9yICh2YXIgbSA9IGdyb3Vwcy5sZW5ndGgsIHVwZGF0ZSA9IG5ldyBBcnJheShtKSwgZW50ZXIgPSBuZXcgQXJyYXkobSksIGV4aXQgPSBuZXcgQXJyYXkobSksIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgdmFyIHBhcmVudCA9IHBhcmVudHNbal0sXG4gICAgICAgIGdyb3VwID0gZ3JvdXBzW2pdLFxuICAgICAgICBncm91cExlbmd0aCA9IGdyb3VwLmxlbmd0aCxcbiAgICAgICAgZGF0YSA9IGFycmF5bGlrZSh2YWx1ZS5jYWxsKHBhcmVudCwgcGFyZW50ICYmIHBhcmVudC5fX2RhdGFfXywgaiwgcGFyZW50cykpLFxuICAgICAgICBkYXRhTGVuZ3RoID0gZGF0YS5sZW5ndGgsXG4gICAgICAgIGVudGVyR3JvdXAgPSBlbnRlcltqXSA9IG5ldyBBcnJheShkYXRhTGVuZ3RoKSxcbiAgICAgICAgdXBkYXRlR3JvdXAgPSB1cGRhdGVbal0gPSBuZXcgQXJyYXkoZGF0YUxlbmd0aCksXG4gICAgICAgIGV4aXRHcm91cCA9IGV4aXRbal0gPSBuZXcgQXJyYXkoZ3JvdXBMZW5ndGgpO1xuXG4gICAgYmluZChwYXJlbnQsIGdyb3VwLCBlbnRlckdyb3VwLCB1cGRhdGVHcm91cCwgZXhpdEdyb3VwLCBkYXRhLCBrZXkpO1xuXG4gICAgLy8gTm93IGNvbm5lY3QgdGhlIGVudGVyIG5vZGVzIHRvIHRoZWlyIGZvbGxvd2luZyB1cGRhdGUgbm9kZSwgc3VjaCB0aGF0XG4gICAgLy8gYXBwZW5kQ2hpbGQgY2FuIGluc2VydCB0aGUgbWF0ZXJpYWxpemVkIGVudGVyIG5vZGUgYmVmb3JlIHRoaXMgbm9kZSxcbiAgICAvLyByYXRoZXIgdGhhbiBhdCB0aGUgZW5kIG9mIHRoZSBwYXJlbnQgbm9kZS5cbiAgICBmb3IgKHZhciBpMCA9IDAsIGkxID0gMCwgcHJldmlvdXMsIG5leHQ7IGkwIDwgZGF0YUxlbmd0aDsgKytpMCkge1xuICAgICAgaWYgKHByZXZpb3VzID0gZW50ZXJHcm91cFtpMF0pIHtcbiAgICAgICAgaWYgKGkwID49IGkxKSBpMSA9IGkwICsgMTtcbiAgICAgICAgd2hpbGUgKCEobmV4dCA9IHVwZGF0ZUdyb3VwW2kxXSkgJiYgKytpMSA8IGRhdGFMZW5ndGgpO1xuICAgICAgICBwcmV2aW91cy5fbmV4dCA9IG5leHQgfHwgbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB1cGRhdGUgPSBuZXcgU2VsZWN0aW9uKHVwZGF0ZSwgcGFyZW50cyk7XG4gIHVwZGF0ZS5fZW50ZXIgPSBlbnRlcjtcbiAgdXBkYXRlLl9leGl0ID0gZXhpdDtcbiAgcmV0dXJuIHVwZGF0ZTtcbn1cblxuLy8gR2l2ZW4gc29tZSBkYXRhLCB0aGlzIHJldHVybnMgYW4gYXJyYXktbGlrZSB2aWV3IG9mIGl0OiBhbiBvYmplY3QgdGhhdFxuLy8gZXhwb3NlcyBhIGxlbmd0aCBwcm9wZXJ0eSBhbmQgYWxsb3dzIG51bWVyaWMgaW5kZXhpbmcuIE5vdGUgdGhhdCB1bmxpa2Vcbi8vIHNlbGVjdEFsbCwgdGhpcyBpc27igJl0IHdvcnJpZWQgYWJvdXQg4oCcbGl2ZeKAnSBjb2xsZWN0aW9ucyBiZWNhdXNlIHRoZSByZXN1bHRpbmdcbi8vIGFycmF5IHdpbGwgb25seSBiZSB1c2VkIGJyaWVmbHkgd2hpbGUgZGF0YSBpcyBiZWluZyBib3VuZC4gKEl0IGlzIHBvc3NpYmxlIHRvXG4vLyBjYXVzZSB0aGUgZGF0YSB0byBjaGFuZ2Ugd2hpbGUgaXRlcmF0aW5nIGJ5IHVzaW5nIGEga2V5IGZ1bmN0aW9uLCBidXQgcGxlYXNlXG4vLyBkb27igJl0OyB3ZeKAmWQgcmF0aGVyIGF2b2lkIGEgZ3JhdHVpdG91cyBjb3B5LilcbmZ1bmN0aW9uIGFycmF5bGlrZShkYXRhKSB7XG4gIHJldHVybiB0eXBlb2YgZGF0YSA9PT0gXCJvYmplY3RcIiAmJiBcImxlbmd0aFwiIGluIGRhdGFcbiAgICA/IGRhdGEgLy8gQXJyYXksIFR5cGVkQXJyYXksIE5vZGVMaXN0LCBhcnJheS1saWtlXG4gICAgOiBBcnJheS5mcm9tKGRhdGEpOyAvLyBNYXAsIFNldCwgaXRlcmFibGUsIHN0cmluZywgb3IgYW55dGhpbmcgZWxzZVxufVxuIiwiaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNvbXBhcmUpIHtcbiAgaWYgKCFjb21wYXJlKSBjb21wYXJlID0gYXNjZW5kaW5nO1xuXG4gIGZ1bmN0aW9uIGNvbXBhcmVOb2RlKGEsIGIpIHtcbiAgICByZXR1cm4gYSAmJiBiID8gY29tcGFyZShhLl9fZGF0YV9fLCBiLl9fZGF0YV9fKSA6ICFhIC0gIWI7XG4gIH1cblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBzb3J0Z3JvdXBzID0gbmV3IEFycmF5KG0pLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBzb3J0Z3JvdXAgPSBzb3J0Z3JvdXBzW2pdID0gbmV3IEFycmF5KG4pLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgICBzb3J0Z3JvdXBbaV0gPSBub2RlO1xuICAgICAgfVxuICAgIH1cbiAgICBzb3J0Z3JvdXAuc29ydChjb21wYXJlTm9kZSk7XG4gIH1cblxuICByZXR1cm4gbmV3IFNlbGVjdGlvbihzb3J0Z3JvdXBzLCB0aGlzLl9wYXJlbnRzKS5vcmRlcigpO1xufVxuXG5mdW5jdGlvbiBhc2NlbmRpbmcoYSwgYikge1xuICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IGEgPj0gYiA/IDAgOiBOYU47XG59XG4iLCJpbXBvcnQgbmFtZXNwYWNlIGZyb20gXCIuLi9uYW1lc3BhY2UuanNcIjtcblxuZnVuY3Rpb24gYXR0clJlbW92ZShuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0clJlbW92ZU5TKGZ1bGxuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJDb25zdGFudChuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyQ29uc3RhbnROUyhmdWxsbmFtZSwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsLCB2YWx1ZSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJGdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmICh2ID09IG51bGwpIHRoaXMucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICAgIGVsc2UgdGhpcy5zZXRBdHRyaWJ1dGUobmFtZSwgdik7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJGdW5jdGlvbk5TKGZ1bGxuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmICh2ID09IG51bGwpIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKTtcbiAgICBlbHNlIHRoaXMuc2V0QXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsLCB2KTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgdmFyIGZ1bGxuYW1lID0gbmFtZXNwYWNlKG5hbWUpO1xuXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHZhciBub2RlID0gdGhpcy5ub2RlKCk7XG4gICAgcmV0dXJuIGZ1bGxuYW1lLmxvY2FsXG4gICAgICAgID8gbm9kZS5nZXRBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpXG4gICAgICAgIDogbm9kZS5nZXRBdHRyaWJ1dGUoZnVsbG5hbWUpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuZWFjaCgodmFsdWUgPT0gbnVsbFxuICAgICAgPyAoZnVsbG5hbWUubG9jYWwgPyBhdHRyUmVtb3ZlTlMgOiBhdHRyUmVtb3ZlKSA6ICh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgPyAoZnVsbG5hbWUubG9jYWwgPyBhdHRyRnVuY3Rpb25OUyA6IGF0dHJGdW5jdGlvbilcbiAgICAgIDogKGZ1bGxuYW1lLmxvY2FsID8gYXR0ckNvbnN0YW50TlMgOiBhdHRyQ29uc3RhbnQpKSkoZnVsbG5hbWUsIHZhbHVlKSk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihub2RlKSB7XG4gIHJldHVybiAobm9kZS5vd25lckRvY3VtZW50ICYmIG5vZGUub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldykgLy8gbm9kZSBpcyBhIE5vZGVcbiAgICAgIHx8IChub2RlLmRvY3VtZW50ICYmIG5vZGUpIC8vIG5vZGUgaXMgYSBXaW5kb3dcbiAgICAgIHx8IG5vZGUuZGVmYXVsdFZpZXc7IC8vIG5vZGUgaXMgYSBEb2N1bWVudFxufVxuIiwiaW1wb3J0IGRlZmF1bHRWaWV3IGZyb20gXCIuLi93aW5kb3cuanNcIjtcblxuZnVuY3Rpb24gc3R5bGVSZW1vdmUobmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuYW1lKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gc3R5bGVDb25zdGFudChuYW1lLCB2YWx1ZSwgcHJpb3JpdHkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuc3R5bGUuc2V0UHJvcGVydHkobmFtZSwgdmFsdWUsIHByaW9yaXR5KTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gc3R5bGVGdW5jdGlvbihuYW1lLCB2YWx1ZSwgcHJpb3JpdHkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2ID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAodiA9PSBudWxsKSB0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG5hbWUpO1xuICAgIGVsc2UgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShuYW1lLCB2LCBwcmlvcml0eSk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIHZhbHVlLCBwcmlvcml0eSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA+IDFcbiAgICAgID8gdGhpcy5lYWNoKCh2YWx1ZSA9PSBudWxsXG4gICAgICAgICAgICA/IHN0eWxlUmVtb3ZlIDogdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICAgID8gc3R5bGVGdW5jdGlvblxuICAgICAgICAgICAgOiBzdHlsZUNvbnN0YW50KShuYW1lLCB2YWx1ZSwgcHJpb3JpdHkgPT0gbnVsbCA/IFwiXCIgOiBwcmlvcml0eSkpXG4gICAgICA6IHN0eWxlVmFsdWUodGhpcy5ub2RlKCksIG5hbWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3R5bGVWYWx1ZShub2RlLCBuYW1lKSB7XG4gIHJldHVybiBub2RlLnN0eWxlLmdldFByb3BlcnR5VmFsdWUobmFtZSlcbiAgICAgIHx8IGRlZmF1bHRWaWV3KG5vZGUpLmdldENvbXB1dGVkU3R5bGUobm9kZSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShuYW1lKTtcbn1cbiIsImZ1bmN0aW9uIHByb3BlcnR5UmVtb3ZlKG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIGRlbGV0ZSB0aGlzW25hbWVdO1xuICB9O1xufVxuXG5mdW5jdGlvbiBwcm9wZXJ0eUNvbnN0YW50KG5hbWUsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzW25hbWVdID0gdmFsdWU7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHByb3BlcnR5RnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2ID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAodiA9PSBudWxsKSBkZWxldGUgdGhpc1tuYW1lXTtcbiAgICBlbHNlIHRoaXNbbmFtZV0gPSB2O1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA+IDFcbiAgICAgID8gdGhpcy5lYWNoKCh2YWx1ZSA9PSBudWxsXG4gICAgICAgICAgPyBwcm9wZXJ0eVJlbW92ZSA6IHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgPyBwcm9wZXJ0eUZ1bmN0aW9uXG4gICAgICAgICAgOiBwcm9wZXJ0eUNvbnN0YW50KShuYW1lLCB2YWx1ZSkpXG4gICAgICA6IHRoaXMubm9kZSgpW25hbWVdO1xufVxuIiwiZnVuY3Rpb24gY2xhc3NBcnJheShzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZy50cmltKCkuc3BsaXQoL158XFxzKy8pO1xufVxuXG5mdW5jdGlvbiBjbGFzc0xpc3Qobm9kZSkge1xuICByZXR1cm4gbm9kZS5jbGFzc0xpc3QgfHwgbmV3IENsYXNzTGlzdChub2RlKTtcbn1cblxuZnVuY3Rpb24gQ2xhc3NMaXN0KG5vZGUpIHtcbiAgdGhpcy5fbm9kZSA9IG5vZGU7XG4gIHRoaXMuX25hbWVzID0gY2xhc3NBcnJheShub2RlLmdldEF0dHJpYnV0ZShcImNsYXNzXCIpIHx8IFwiXCIpO1xufVxuXG5DbGFzc0xpc3QucHJvdG90eXBlID0ge1xuICBhZGQ6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICB2YXIgaSA9IHRoaXMuX25hbWVzLmluZGV4T2YobmFtZSk7XG4gICAgaWYgKGkgPCAwKSB7XG4gICAgICB0aGlzLl9uYW1lcy5wdXNoKG5hbWUpO1xuICAgICAgdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCB0aGlzLl9uYW1lcy5qb2luKFwiIFwiKSk7XG4gICAgfVxuICB9LFxuICByZW1vdmU6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICB2YXIgaSA9IHRoaXMuX25hbWVzLmluZGV4T2YobmFtZSk7XG4gICAgaWYgKGkgPj0gMCkge1xuICAgICAgdGhpcy5fbmFtZXMuc3BsaWNlKGksIDEpO1xuICAgICAgdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCB0aGlzLl9uYW1lcy5qb2luKFwiIFwiKSk7XG4gICAgfVxuICB9LFxuICBjb250YWluczogZnVuY3Rpb24obmFtZSkge1xuICAgIHJldHVybiB0aGlzLl9uYW1lcy5pbmRleE9mKG5hbWUpID49IDA7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGNsYXNzZWRBZGQobm9kZSwgbmFtZXMpIHtcbiAgdmFyIGxpc3QgPSBjbGFzc0xpc3Qobm9kZSksIGkgPSAtMSwgbiA9IG5hbWVzLmxlbmd0aDtcbiAgd2hpbGUgKCsraSA8IG4pIGxpc3QuYWRkKG5hbWVzW2ldKTtcbn1cblxuZnVuY3Rpb24gY2xhc3NlZFJlbW92ZShub2RlLCBuYW1lcykge1xuICB2YXIgbGlzdCA9IGNsYXNzTGlzdChub2RlKSwgaSA9IC0xLCBuID0gbmFtZXMubGVuZ3RoO1xuICB3aGlsZSAoKytpIDwgbikgbGlzdC5yZW1vdmUobmFtZXNbaV0pO1xufVxuXG5mdW5jdGlvbiBjbGFzc2VkVHJ1ZShuYW1lcykge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgY2xhc3NlZEFkZCh0aGlzLCBuYW1lcyk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNsYXNzZWRGYWxzZShuYW1lcykge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgY2xhc3NlZFJlbW92ZSh0aGlzLCBuYW1lcyk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNsYXNzZWRGdW5jdGlvbihuYW1lcywgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICh2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpID8gY2xhc3NlZEFkZCA6IGNsYXNzZWRSZW1vdmUpKHRoaXMsIG5hbWVzKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgdmFyIG5hbWVzID0gY2xhc3NBcnJheShuYW1lICsgXCJcIik7XG5cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgdmFyIGxpc3QgPSBjbGFzc0xpc3QodGhpcy5ub2RlKCkpLCBpID0gLTEsIG4gPSBuYW1lcy5sZW5ndGg7XG4gICAgd2hpbGUgKCsraSA8IG4pIGlmICghbGlzdC5jb250YWlucyhuYW1lc1tpXSkpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLmVhY2goKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICA/IGNsYXNzZWRGdW5jdGlvbiA6IHZhbHVlXG4gICAgICA/IGNsYXNzZWRUcnVlXG4gICAgICA6IGNsYXNzZWRGYWxzZSkobmFtZXMsIHZhbHVlKSk7XG59XG4iLCJmdW5jdGlvbiB0ZXh0UmVtb3ZlKCkge1xuICB0aGlzLnRleHRDb250ZW50ID0gXCJcIjtcbn1cblxuZnVuY3Rpb24gdGV4dENvbnN0YW50KHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnRleHRDb250ZW50ID0gdmFsdWU7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHRleHRGdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIHRoaXMudGV4dENvbnRlbnQgPSB2ID09IG51bGwgPyBcIlwiIDogdjtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGhcbiAgICAgID8gdGhpcy5lYWNoKHZhbHVlID09IG51bGxcbiAgICAgICAgICA/IHRleHRSZW1vdmUgOiAodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICA/IHRleHRGdW5jdGlvblxuICAgICAgICAgIDogdGV4dENvbnN0YW50KSh2YWx1ZSkpXG4gICAgICA6IHRoaXMubm9kZSgpLnRleHRDb250ZW50O1xufVxuIiwiZnVuY3Rpb24gaHRtbFJlbW92ZSgpIHtcbiAgdGhpcy5pbm5lckhUTUwgPSBcIlwiO1xufVxuXG5mdW5jdGlvbiBodG1sQ29uc3RhbnQodmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuaW5uZXJIVE1MID0gdmFsdWU7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGh0bWxGdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIHRoaXMuaW5uZXJIVE1MID0gdiA9PSBudWxsID8gXCJcIiA6IHY7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMuZWFjaCh2YWx1ZSA9PSBudWxsXG4gICAgICAgICAgPyBodG1sUmVtb3ZlIDogKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgPyBodG1sRnVuY3Rpb25cbiAgICAgICAgICA6IGh0bWxDb25zdGFudCkodmFsdWUpKVxuICAgICAgOiB0aGlzLm5vZGUoKS5pbm5lckhUTUw7XG59XG4iLCJmdW5jdGlvbiByYWlzZSgpIHtcbiAgaWYgKHRoaXMubmV4dFNpYmxpbmcpIHRoaXMucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmVhY2gocmFpc2UpO1xufVxuIiwiZnVuY3Rpb24gbG93ZXIoKSB7XG4gIGlmICh0aGlzLnByZXZpb3VzU2libGluZykgdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLCB0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5lYWNoKGxvd2VyKTtcbn1cbiIsImltcG9ydCBjcmVhdG9yIGZyb20gXCIuLi9jcmVhdG9yLmpzXCI7XG5pbXBvcnQgc2VsZWN0b3IgZnJvbSBcIi4uL3NlbGVjdG9yLmpzXCI7XG5cbmZ1bmN0aW9uIGNvbnN0YW50TnVsbCgpIHtcbiAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIGJlZm9yZSkge1xuICB2YXIgY3JlYXRlID0gdHlwZW9mIG5hbWUgPT09IFwiZnVuY3Rpb25cIiA/IG5hbWUgOiBjcmVhdG9yKG5hbWUpLFxuICAgICAgc2VsZWN0ID0gYmVmb3JlID09IG51bGwgPyBjb25zdGFudE51bGwgOiB0eXBlb2YgYmVmb3JlID09PSBcImZ1bmN0aW9uXCIgPyBiZWZvcmUgOiBzZWxlY3RvcihiZWZvcmUpO1xuICByZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKGNyZWF0ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpLCBzZWxlY3QuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCBudWxsKTtcbiAgfSk7XG59XG4iLCJmdW5jdGlvbiByZW1vdmUoKSB7XG4gIHZhciBwYXJlbnQgPSB0aGlzLnBhcmVudE5vZGU7XG4gIGlmIChwYXJlbnQpIHBhcmVudC5yZW1vdmVDaGlsZCh0aGlzKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmVhY2gocmVtb3ZlKTtcbn1cbiIsImZ1bmN0aW9uIHNlbGVjdGlvbl9jbG9uZVNoYWxsb3coKSB7XG4gIHZhciBjbG9uZSA9IHRoaXMuY2xvbmVOb2RlKGZhbHNlKSwgcGFyZW50ID0gdGhpcy5wYXJlbnROb2RlO1xuICByZXR1cm4gcGFyZW50ID8gcGFyZW50Lmluc2VydEJlZm9yZShjbG9uZSwgdGhpcy5uZXh0U2libGluZykgOiBjbG9uZTtcbn1cblxuZnVuY3Rpb24gc2VsZWN0aW9uX2Nsb25lRGVlcCgpIHtcbiAgdmFyIGNsb25lID0gdGhpcy5jbG9uZU5vZGUodHJ1ZSksIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTtcbiAgcmV0dXJuIHBhcmVudCA/IHBhcmVudC5pbnNlcnRCZWZvcmUoY2xvbmUsIHRoaXMubmV4dFNpYmxpbmcpIDogY2xvbmU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGRlZXApIHtcbiAgcmV0dXJuIHRoaXMuc2VsZWN0KGRlZXAgPyBzZWxlY3Rpb25fY2xvbmVEZWVwIDogc2VsZWN0aW9uX2Nsb25lU2hhbGxvdyk7XG59XG4iLCJmdW5jdGlvbiBjb250ZXh0TGlzdGVuZXIobGlzdGVuZXIpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgbGlzdGVuZXIuY2FsbCh0aGlzLCBldmVudCwgdGhpcy5fX2RhdGFfXyk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHBhcnNlVHlwZW5hbWVzKHR5cGVuYW1lcykge1xuICByZXR1cm4gdHlwZW5hbWVzLnRyaW0oKS5zcGxpdCgvXnxcXHMrLykubWFwKGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgbmFtZSA9IFwiXCIsIGkgPSB0LmluZGV4T2YoXCIuXCIpO1xuICAgIGlmIChpID49IDApIG5hbWUgPSB0LnNsaWNlKGkgKyAxKSwgdCA9IHQuc2xpY2UoMCwgaSk7XG4gICAgcmV0dXJuIHt0eXBlOiB0LCBuYW1lOiBuYW1lfTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG9uUmVtb3ZlKHR5cGVuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgb24gPSB0aGlzLl9fb247XG4gICAgaWYgKCFvbikgcmV0dXJuO1xuICAgIGZvciAodmFyIGogPSAwLCBpID0gLTEsIG0gPSBvbi5sZW5ndGgsIG87IGogPCBtOyArK2opIHtcbiAgICAgIGlmIChvID0gb25bal0sICghdHlwZW5hbWUudHlwZSB8fCBvLnR5cGUgPT09IHR5cGVuYW1lLnR5cGUpICYmIG8ubmFtZSA9PT0gdHlwZW5hbWUubmFtZSkge1xuICAgICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoby50eXBlLCBvLmxpc3RlbmVyLCBvLm9wdGlvbnMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb25bKytpXSA9IG87XG4gICAgICB9XG4gICAgfVxuICAgIGlmICgrK2kpIG9uLmxlbmd0aCA9IGk7XG4gICAgZWxzZSBkZWxldGUgdGhpcy5fX29uO1xuICB9O1xufVxuXG5mdW5jdGlvbiBvbkFkZCh0eXBlbmFtZSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBvbiA9IHRoaXMuX19vbiwgbywgbGlzdGVuZXIgPSBjb250ZXh0TGlzdGVuZXIodmFsdWUpO1xuICAgIGlmIChvbikgZm9yICh2YXIgaiA9IDAsIG0gPSBvbi5sZW5ndGg7IGogPCBtOyArK2opIHtcbiAgICAgIGlmICgobyA9IG9uW2pdKS50eXBlID09PSB0eXBlbmFtZS50eXBlICYmIG8ubmFtZSA9PT0gdHlwZW5hbWUubmFtZSkge1xuICAgICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoby50eXBlLCBvLmxpc3RlbmVyLCBvLm9wdGlvbnMpO1xuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoby50eXBlLCBvLmxpc3RlbmVyID0gbGlzdGVuZXIsIG8ub3B0aW9ucyA9IG9wdGlvbnMpO1xuICAgICAgICBvLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKHR5cGVuYW1lLnR5cGUsIGxpc3RlbmVyLCBvcHRpb25zKTtcbiAgICBvID0ge3R5cGU6IHR5cGVuYW1lLnR5cGUsIG5hbWU6IHR5cGVuYW1lLm5hbWUsIHZhbHVlOiB2YWx1ZSwgbGlzdGVuZXI6IGxpc3RlbmVyLCBvcHRpb25zOiBvcHRpb25zfTtcbiAgICBpZiAoIW9uKSB0aGlzLl9fb24gPSBbb107XG4gICAgZWxzZSBvbi5wdXNoKG8pO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih0eXBlbmFtZSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgdmFyIHR5cGVuYW1lcyA9IHBhcnNlVHlwZW5hbWVzKHR5cGVuYW1lICsgXCJcIiksIGksIG4gPSB0eXBlbmFtZXMubGVuZ3RoLCB0O1xuXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHZhciBvbiA9IHRoaXMubm9kZSgpLl9fb247XG4gICAgaWYgKG9uKSBmb3IgKHZhciBqID0gMCwgbSA9IG9uLmxlbmd0aCwgbzsgaiA8IG07ICsraikge1xuICAgICAgZm9yIChpID0gMCwgbyA9IG9uW2pdOyBpIDwgbjsgKytpKSB7XG4gICAgICAgIGlmICgodCA9IHR5cGVuYW1lc1tpXSkudHlwZSA9PT0gby50eXBlICYmIHQubmFtZSA9PT0gby5uYW1lKSB7XG4gICAgICAgICAgcmV0dXJuIG8udmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgb24gPSB2YWx1ZSA/IG9uQWRkIDogb25SZW1vdmU7XG4gIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHRoaXMuZWFjaChvbih0eXBlbmFtZXNbaV0sIHZhbHVlLCBvcHRpb25zKSk7XG4gIHJldHVybiB0aGlzO1xufVxuIiwiaW1wb3J0IGRlZmF1bHRWaWV3IGZyb20gXCIuLi93aW5kb3cuanNcIjtcblxuZnVuY3Rpb24gZGlzcGF0Y2hFdmVudChub2RlLCB0eXBlLCBwYXJhbXMpIHtcbiAgdmFyIHdpbmRvdyA9IGRlZmF1bHRWaWV3KG5vZGUpLFxuICAgICAgZXZlbnQgPSB3aW5kb3cuQ3VzdG9tRXZlbnQ7XG5cbiAgaWYgKHR5cGVvZiBldmVudCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgZXZlbnQgPSBuZXcgZXZlbnQodHlwZSwgcGFyYW1zKTtcbiAgfSBlbHNlIHtcbiAgICBldmVudCA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFdmVudChcIkV2ZW50XCIpO1xuICAgIGlmIChwYXJhbXMpIGV2ZW50LmluaXRFdmVudCh0eXBlLCBwYXJhbXMuYnViYmxlcywgcGFyYW1zLmNhbmNlbGFibGUpLCBldmVudC5kZXRhaWwgPSBwYXJhbXMuZGV0YWlsO1xuICAgIGVsc2UgZXZlbnQuaW5pdEV2ZW50KHR5cGUsIGZhbHNlLCBmYWxzZSk7XG4gIH1cblxuICBub2RlLmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xufVxuXG5mdW5jdGlvbiBkaXNwYXRjaENvbnN0YW50KHR5cGUsIHBhcmFtcykge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRpc3BhdGNoRXZlbnQodGhpcywgdHlwZSwgcGFyYW1zKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZGlzcGF0Y2hGdW5jdGlvbih0eXBlLCBwYXJhbXMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBkaXNwYXRjaEV2ZW50KHRoaXMsIHR5cGUsIHBhcmFtcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odHlwZSwgcGFyYW1zKSB7XG4gIHJldHVybiB0aGlzLmVhY2goKHR5cGVvZiBwYXJhbXMgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgPyBkaXNwYXRjaEZ1bmN0aW9uXG4gICAgICA6IGRpc3BhdGNoQ29uc3RhbnQpKHR5cGUsIHBhcmFtcykpO1xufVxuIiwiaW1wb3J0IHNlbGVjdGlvbl9zZWxlY3QgZnJvbSBcIi4vc2VsZWN0LmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3NlbGVjdEFsbCBmcm9tIFwiLi9zZWxlY3RBbGwuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fc2VsZWN0Q2hpbGQgZnJvbSBcIi4vc2VsZWN0Q2hpbGQuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fc2VsZWN0Q2hpbGRyZW4gZnJvbSBcIi4vc2VsZWN0Q2hpbGRyZW4uanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fZmlsdGVyIGZyb20gXCIuL2ZpbHRlci5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9kYXRhIGZyb20gXCIuL2RhdGEuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fZW50ZXIgZnJvbSBcIi4vZW50ZXIuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fZXhpdCBmcm9tIFwiLi9leGl0LmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2pvaW4gZnJvbSBcIi4vam9pbi5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9tZXJnZSBmcm9tIFwiLi9tZXJnZS5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9vcmRlciBmcm9tIFwiLi9vcmRlci5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9zb3J0IGZyb20gXCIuL3NvcnQuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fY2FsbCBmcm9tIFwiLi9jYWxsLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX25vZGVzIGZyb20gXCIuL25vZGVzLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX25vZGUgZnJvbSBcIi4vbm9kZS5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9zaXplIGZyb20gXCIuL3NpemUuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fZW1wdHkgZnJvbSBcIi4vZW1wdHkuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fZWFjaCBmcm9tIFwiLi9lYWNoLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2F0dHIgZnJvbSBcIi4vYXR0ci5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9zdHlsZSBmcm9tIFwiLi9zdHlsZS5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9wcm9wZXJ0eSBmcm9tIFwiLi9wcm9wZXJ0eS5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9jbGFzc2VkIGZyb20gXCIuL2NsYXNzZWQuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fdGV4dCBmcm9tIFwiLi90ZXh0LmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2h0bWwgZnJvbSBcIi4vaHRtbC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9yYWlzZSBmcm9tIFwiLi9yYWlzZS5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9sb3dlciBmcm9tIFwiLi9sb3dlci5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9hcHBlbmQgZnJvbSBcIi4vYXBwZW5kLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2luc2VydCBmcm9tIFwiLi9pbnNlcnQuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fcmVtb3ZlIGZyb20gXCIuL3JlbW92ZS5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9jbG9uZSBmcm9tIFwiLi9jbG9uZS5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9kYXR1bSBmcm9tIFwiLi9kYXR1bS5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9vbiBmcm9tIFwiLi9vbi5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9kaXNwYXRjaCBmcm9tIFwiLi9kaXNwYXRjaC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9pdGVyYXRvciBmcm9tIFwiLi9pdGVyYXRvci5qc1wiO1xuXG5leHBvcnQgdmFyIHJvb3QgPSBbbnVsbF07XG5cbmV4cG9ydCBmdW5jdGlvbiBTZWxlY3Rpb24oZ3JvdXBzLCBwYXJlbnRzKSB7XG4gIHRoaXMuX2dyb3VwcyA9IGdyb3VwcztcbiAgdGhpcy5fcGFyZW50cyA9IHBhcmVudHM7XG59XG5cbmZ1bmN0aW9uIHNlbGVjdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24oW1tkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXSwgcm9vdCk7XG59XG5cbmZ1bmN0aW9uIHNlbGVjdGlvbl9zZWxlY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzO1xufVxuXG5TZWxlY3Rpb24ucHJvdG90eXBlID0gc2VsZWN0aW9uLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IFNlbGVjdGlvbixcbiAgc2VsZWN0OiBzZWxlY3Rpb25fc2VsZWN0LFxuICBzZWxlY3RBbGw6IHNlbGVjdGlvbl9zZWxlY3RBbGwsXG4gIHNlbGVjdENoaWxkOiBzZWxlY3Rpb25fc2VsZWN0Q2hpbGQsXG4gIHNlbGVjdENoaWxkcmVuOiBzZWxlY3Rpb25fc2VsZWN0Q2hpbGRyZW4sXG4gIGZpbHRlcjogc2VsZWN0aW9uX2ZpbHRlcixcbiAgZGF0YTogc2VsZWN0aW9uX2RhdGEsXG4gIGVudGVyOiBzZWxlY3Rpb25fZW50ZXIsXG4gIGV4aXQ6IHNlbGVjdGlvbl9leGl0LFxuICBqb2luOiBzZWxlY3Rpb25fam9pbixcbiAgbWVyZ2U6IHNlbGVjdGlvbl9tZXJnZSxcbiAgc2VsZWN0aW9uOiBzZWxlY3Rpb25fc2VsZWN0aW9uLFxuICBvcmRlcjogc2VsZWN0aW9uX29yZGVyLFxuICBzb3J0OiBzZWxlY3Rpb25fc29ydCxcbiAgY2FsbDogc2VsZWN0aW9uX2NhbGwsXG4gIG5vZGVzOiBzZWxlY3Rpb25fbm9kZXMsXG4gIG5vZGU6IHNlbGVjdGlvbl9ub2RlLFxuICBzaXplOiBzZWxlY3Rpb25fc2l6ZSxcbiAgZW1wdHk6IHNlbGVjdGlvbl9lbXB0eSxcbiAgZWFjaDogc2VsZWN0aW9uX2VhY2gsXG4gIGF0dHI6IHNlbGVjdGlvbl9hdHRyLFxuICBzdHlsZTogc2VsZWN0aW9uX3N0eWxlLFxuICBwcm9wZXJ0eTogc2VsZWN0aW9uX3Byb3BlcnR5LFxuICBjbGFzc2VkOiBzZWxlY3Rpb25fY2xhc3NlZCxcbiAgdGV4dDogc2VsZWN0aW9uX3RleHQsXG4gIGh0bWw6IHNlbGVjdGlvbl9odG1sLFxuICByYWlzZTogc2VsZWN0aW9uX3JhaXNlLFxuICBsb3dlcjogc2VsZWN0aW9uX2xvd2VyLFxuICBhcHBlbmQ6IHNlbGVjdGlvbl9hcHBlbmQsXG4gIGluc2VydDogc2VsZWN0aW9uX2luc2VydCxcbiAgcmVtb3ZlOiBzZWxlY3Rpb25fcmVtb3ZlLFxuICBjbG9uZTogc2VsZWN0aW9uX2Nsb25lLFxuICBkYXR1bTogc2VsZWN0aW9uX2RhdHVtLFxuICBvbjogc2VsZWN0aW9uX29uLFxuICBkaXNwYXRjaDogc2VsZWN0aW9uX2Rpc3BhdGNoLFxuICBbU3ltYm9sLml0ZXJhdG9yXTogc2VsZWN0aW9uX2l0ZXJhdG9yXG59O1xuXG5leHBvcnQgZGVmYXVsdCBzZWxlY3Rpb247XG4iLCJpbXBvcnQge1NlbGVjdGlvbiwgcm9vdH0gZnJvbSBcIi4vc2VsZWN0aW9uL2luZGV4LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdG9yKSB7XG4gIHJldHVybiB0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCJcbiAgICAgID8gbmV3IFNlbGVjdGlvbihbW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpXV0sIFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKVxuICAgICAgOiBuZXcgU2VsZWN0aW9uKFtbc2VsZWN0b3JdXSwgcm9vdCk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjb25zdHJ1Y3RvciwgZmFjdG9yeSwgcHJvdG90eXBlKSB7XG4gIGNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGZhY3RvcnkucHJvdG90eXBlID0gcHJvdG90eXBlO1xuICBwcm90b3R5cGUuY29uc3RydWN0b3IgPSBjb25zdHJ1Y3Rvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dGVuZChwYXJlbnQsIGRlZmluaXRpb24pIHtcbiAgdmFyIHByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUocGFyZW50LnByb3RvdHlwZSk7XG4gIGZvciAodmFyIGtleSBpbiBkZWZpbml0aW9uKSBwcm90b3R5cGVba2V5XSA9IGRlZmluaXRpb25ba2V5XTtcbiAgcmV0dXJuIHByb3RvdHlwZTtcbn1cbiIsImltcG9ydCBkZWZpbmUsIHtleHRlbmR9IGZyb20gXCIuL2RlZmluZS5qc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gQ29sb3IoKSB7fVxuXG5leHBvcnQgdmFyIGRhcmtlciA9IDAuNztcbmV4cG9ydCB2YXIgYnJpZ2h0ZXIgPSAxIC8gZGFya2VyO1xuXG52YXIgcmVJID0gXCJcXFxccyooWystXT9cXFxcZCspXFxcXHMqXCIsXG4gICAgcmVOID0gXCJcXFxccyooWystXT8oPzpcXFxcZCpcXFxcLik/XFxcXGQrKD86W2VFXVsrLV0/XFxcXGQrKT8pXFxcXHMqXCIsXG4gICAgcmVQID0gXCJcXFxccyooWystXT8oPzpcXFxcZCpcXFxcLik/XFxcXGQrKD86W2VFXVsrLV0/XFxcXGQrKT8pJVxcXFxzKlwiLFxuICAgIHJlSGV4ID0gL14jKFswLTlhLWZdezMsOH0pJC8sXG4gICAgcmVSZ2JJbnRlZ2VyID0gbmV3IFJlZ0V4cChgXnJnYlxcXFwoJHtyZUl9LCR7cmVJfSwke3JlSX1cXFxcKSRgKSxcbiAgICByZVJnYlBlcmNlbnQgPSBuZXcgUmVnRXhwKGBecmdiXFxcXCgke3JlUH0sJHtyZVB9LCR7cmVQfVxcXFwpJGApLFxuICAgIHJlUmdiYUludGVnZXIgPSBuZXcgUmVnRXhwKGBecmdiYVxcXFwoJHtyZUl9LCR7cmVJfSwke3JlSX0sJHtyZU59XFxcXCkkYCksXG4gICAgcmVSZ2JhUGVyY2VudCA9IG5ldyBSZWdFeHAoYF5yZ2JhXFxcXCgke3JlUH0sJHtyZVB9LCR7cmVQfSwke3JlTn1cXFxcKSRgKSxcbiAgICByZUhzbFBlcmNlbnQgPSBuZXcgUmVnRXhwKGBeaHNsXFxcXCgke3JlTn0sJHtyZVB9LCR7cmVQfVxcXFwpJGApLFxuICAgIHJlSHNsYVBlcmNlbnQgPSBuZXcgUmVnRXhwKGBeaHNsYVxcXFwoJHtyZU59LCR7cmVQfSwke3JlUH0sJHtyZU59XFxcXCkkYCk7XG5cbnZhciBuYW1lZCA9IHtcbiAgYWxpY2VibHVlOiAweGYwZjhmZixcbiAgYW50aXF1ZXdoaXRlOiAweGZhZWJkNyxcbiAgYXF1YTogMHgwMGZmZmYsXG4gIGFxdWFtYXJpbmU6IDB4N2ZmZmQ0LFxuICBhenVyZTogMHhmMGZmZmYsXG4gIGJlaWdlOiAweGY1ZjVkYyxcbiAgYmlzcXVlOiAweGZmZTRjNCxcbiAgYmxhY2s6IDB4MDAwMDAwLFxuICBibGFuY2hlZGFsbW9uZDogMHhmZmViY2QsXG4gIGJsdWU6IDB4MDAwMGZmLFxuICBibHVldmlvbGV0OiAweDhhMmJlMixcbiAgYnJvd246IDB4YTUyYTJhLFxuICBidXJseXdvb2Q6IDB4ZGViODg3LFxuICBjYWRldGJsdWU6IDB4NWY5ZWEwLFxuICBjaGFydHJldXNlOiAweDdmZmYwMCxcbiAgY2hvY29sYXRlOiAweGQyNjkxZSxcbiAgY29yYWw6IDB4ZmY3ZjUwLFxuICBjb3JuZmxvd2VyYmx1ZTogMHg2NDk1ZWQsXG4gIGNvcm5zaWxrOiAweGZmZjhkYyxcbiAgY3JpbXNvbjogMHhkYzE0M2MsXG4gIGN5YW46IDB4MDBmZmZmLFxuICBkYXJrYmx1ZTogMHgwMDAwOGIsXG4gIGRhcmtjeWFuOiAweDAwOGI4YixcbiAgZGFya2dvbGRlbnJvZDogMHhiODg2MGIsXG4gIGRhcmtncmF5OiAweGE5YTlhOSxcbiAgZGFya2dyZWVuOiAweDAwNjQwMCxcbiAgZGFya2dyZXk6IDB4YTlhOWE5LFxuICBkYXJra2hha2k6IDB4YmRiNzZiLFxuICBkYXJrbWFnZW50YTogMHg4YjAwOGIsXG4gIGRhcmtvbGl2ZWdyZWVuOiAweDU1NmIyZixcbiAgZGFya29yYW5nZTogMHhmZjhjMDAsXG4gIGRhcmtvcmNoaWQ6IDB4OTkzMmNjLFxuICBkYXJrcmVkOiAweDhiMDAwMCxcbiAgZGFya3NhbG1vbjogMHhlOTk2N2EsXG4gIGRhcmtzZWFncmVlbjogMHg4ZmJjOGYsXG4gIGRhcmtzbGF0ZWJsdWU6IDB4NDgzZDhiLFxuICBkYXJrc2xhdGVncmF5OiAweDJmNGY0ZixcbiAgZGFya3NsYXRlZ3JleTogMHgyZjRmNGYsXG4gIGRhcmt0dXJxdW9pc2U6IDB4MDBjZWQxLFxuICBkYXJrdmlvbGV0OiAweDk0MDBkMyxcbiAgZGVlcHBpbms6IDB4ZmYxNDkzLFxuICBkZWVwc2t5Ymx1ZTogMHgwMGJmZmYsXG4gIGRpbWdyYXk6IDB4Njk2OTY5LFxuICBkaW1ncmV5OiAweDY5Njk2OSxcbiAgZG9kZ2VyYmx1ZTogMHgxZTkwZmYsXG4gIGZpcmVicmljazogMHhiMjIyMjIsXG4gIGZsb3JhbHdoaXRlOiAweGZmZmFmMCxcbiAgZm9yZXN0Z3JlZW46IDB4MjI4YjIyLFxuICBmdWNoc2lhOiAweGZmMDBmZixcbiAgZ2FpbnNib3JvOiAweGRjZGNkYyxcbiAgZ2hvc3R3aGl0ZTogMHhmOGY4ZmYsXG4gIGdvbGQ6IDB4ZmZkNzAwLFxuICBnb2xkZW5yb2Q6IDB4ZGFhNTIwLFxuICBncmF5OiAweDgwODA4MCxcbiAgZ3JlZW46IDB4MDA4MDAwLFxuICBncmVlbnllbGxvdzogMHhhZGZmMmYsXG4gIGdyZXk6IDB4ODA4MDgwLFxuICBob25leWRldzogMHhmMGZmZjAsXG4gIGhvdHBpbms6IDB4ZmY2OWI0LFxuICBpbmRpYW5yZWQ6IDB4Y2Q1YzVjLFxuICBpbmRpZ286IDB4NGIwMDgyLFxuICBpdm9yeTogMHhmZmZmZjAsXG4gIGtoYWtpOiAweGYwZTY4YyxcbiAgbGF2ZW5kZXI6IDB4ZTZlNmZhLFxuICBsYXZlbmRlcmJsdXNoOiAweGZmZjBmNSxcbiAgbGF3bmdyZWVuOiAweDdjZmMwMCxcbiAgbGVtb25jaGlmZm9uOiAweGZmZmFjZCxcbiAgbGlnaHRibHVlOiAweGFkZDhlNixcbiAgbGlnaHRjb3JhbDogMHhmMDgwODAsXG4gIGxpZ2h0Y3lhbjogMHhlMGZmZmYsXG4gIGxpZ2h0Z29sZGVucm9keWVsbG93OiAweGZhZmFkMixcbiAgbGlnaHRncmF5OiAweGQzZDNkMyxcbiAgbGlnaHRncmVlbjogMHg5MGVlOTAsXG4gIGxpZ2h0Z3JleTogMHhkM2QzZDMsXG4gIGxpZ2h0cGluazogMHhmZmI2YzEsXG4gIGxpZ2h0c2FsbW9uOiAweGZmYTA3YSxcbiAgbGlnaHRzZWFncmVlbjogMHgyMGIyYWEsXG4gIGxpZ2h0c2t5Ymx1ZTogMHg4N2NlZmEsXG4gIGxpZ2h0c2xhdGVncmF5OiAweDc3ODg5OSxcbiAgbGlnaHRzbGF0ZWdyZXk6IDB4Nzc4ODk5LFxuICBsaWdodHN0ZWVsYmx1ZTogMHhiMGM0ZGUsXG4gIGxpZ2h0eWVsbG93OiAweGZmZmZlMCxcbiAgbGltZTogMHgwMGZmMDAsXG4gIGxpbWVncmVlbjogMHgzMmNkMzIsXG4gIGxpbmVuOiAweGZhZjBlNixcbiAgbWFnZW50YTogMHhmZjAwZmYsXG4gIG1hcm9vbjogMHg4MDAwMDAsXG4gIG1lZGl1bWFxdWFtYXJpbmU6IDB4NjZjZGFhLFxuICBtZWRpdW1ibHVlOiAweDAwMDBjZCxcbiAgbWVkaXVtb3JjaGlkOiAweGJhNTVkMyxcbiAgbWVkaXVtcHVycGxlOiAweDkzNzBkYixcbiAgbWVkaXVtc2VhZ3JlZW46IDB4M2NiMzcxLFxuICBtZWRpdW1zbGF0ZWJsdWU6IDB4N2I2OGVlLFxuICBtZWRpdW1zcHJpbmdncmVlbjogMHgwMGZhOWEsXG4gIG1lZGl1bXR1cnF1b2lzZTogMHg0OGQxY2MsXG4gIG1lZGl1bXZpb2xldHJlZDogMHhjNzE1ODUsXG4gIG1pZG5pZ2h0Ymx1ZTogMHgxOTE5NzAsXG4gIG1pbnRjcmVhbTogMHhmNWZmZmEsXG4gIG1pc3R5cm9zZTogMHhmZmU0ZTEsXG4gIG1vY2Nhc2luOiAweGZmZTRiNSxcbiAgbmF2YWpvd2hpdGU6IDB4ZmZkZWFkLFxuICBuYXZ5OiAweDAwMDA4MCxcbiAgb2xkbGFjZTogMHhmZGY1ZTYsXG4gIG9saXZlOiAweDgwODAwMCxcbiAgb2xpdmVkcmFiOiAweDZiOGUyMyxcbiAgb3JhbmdlOiAweGZmYTUwMCxcbiAgb3JhbmdlcmVkOiAweGZmNDUwMCxcbiAgb3JjaGlkOiAweGRhNzBkNixcbiAgcGFsZWdvbGRlbnJvZDogMHhlZWU4YWEsXG4gIHBhbGVncmVlbjogMHg5OGZiOTgsXG4gIHBhbGV0dXJxdW9pc2U6IDB4YWZlZWVlLFxuICBwYWxldmlvbGV0cmVkOiAweGRiNzA5MyxcbiAgcGFwYXlhd2hpcDogMHhmZmVmZDUsXG4gIHBlYWNocHVmZjogMHhmZmRhYjksXG4gIHBlcnU6IDB4Y2Q4NTNmLFxuICBwaW5rOiAweGZmYzBjYixcbiAgcGx1bTogMHhkZGEwZGQsXG4gIHBvd2RlcmJsdWU6IDB4YjBlMGU2LFxuICBwdXJwbGU6IDB4ODAwMDgwLFxuICByZWJlY2NhcHVycGxlOiAweDY2MzM5OSxcbiAgcmVkOiAweGZmMDAwMCxcbiAgcm9zeWJyb3duOiAweGJjOGY4ZixcbiAgcm95YWxibHVlOiAweDQxNjllMSxcbiAgc2FkZGxlYnJvd246IDB4OGI0NTEzLFxuICBzYWxtb246IDB4ZmE4MDcyLFxuICBzYW5keWJyb3duOiAweGY0YTQ2MCxcbiAgc2VhZ3JlZW46IDB4MmU4YjU3LFxuICBzZWFzaGVsbDogMHhmZmY1ZWUsXG4gIHNpZW5uYTogMHhhMDUyMmQsXG4gIHNpbHZlcjogMHhjMGMwYzAsXG4gIHNreWJsdWU6IDB4ODdjZWViLFxuICBzbGF0ZWJsdWU6IDB4NmE1YWNkLFxuICBzbGF0ZWdyYXk6IDB4NzA4MDkwLFxuICBzbGF0ZWdyZXk6IDB4NzA4MDkwLFxuICBzbm93OiAweGZmZmFmYSxcbiAgc3ByaW5nZ3JlZW46IDB4MDBmZjdmLFxuICBzdGVlbGJsdWU6IDB4NDY4MmI0LFxuICB0YW46IDB4ZDJiNDhjLFxuICB0ZWFsOiAweDAwODA4MCxcbiAgdGhpc3RsZTogMHhkOGJmZDgsXG4gIHRvbWF0bzogMHhmZjYzNDcsXG4gIHR1cnF1b2lzZTogMHg0MGUwZDAsXG4gIHZpb2xldDogMHhlZTgyZWUsXG4gIHdoZWF0OiAweGY1ZGViMyxcbiAgd2hpdGU6IDB4ZmZmZmZmLFxuICB3aGl0ZXNtb2tlOiAweGY1ZjVmNSxcbiAgeWVsbG93OiAweGZmZmYwMCxcbiAgeWVsbG93Z3JlZW46IDB4OWFjZDMyXG59O1xuXG5kZWZpbmUoQ29sb3IsIGNvbG9yLCB7XG4gIGNvcHkoY2hhbm5lbHMpIHtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgdGhpcy5jb25zdHJ1Y3RvciwgdGhpcywgY2hhbm5lbHMpO1xuICB9LFxuICBkaXNwbGF5YWJsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpO1xuICB9LFxuICBoZXg6IGNvbG9yX2Zvcm1hdEhleCwgLy8gRGVwcmVjYXRlZCEgVXNlIGNvbG9yLmZvcm1hdEhleC5cbiAgZm9ybWF0SGV4OiBjb2xvcl9mb3JtYXRIZXgsXG4gIGZvcm1hdEhleDg6IGNvbG9yX2Zvcm1hdEhleDgsXG4gIGZvcm1hdEhzbDogY29sb3JfZm9ybWF0SHNsLFxuICBmb3JtYXRSZ2I6IGNvbG9yX2Zvcm1hdFJnYixcbiAgdG9TdHJpbmc6IGNvbG9yX2Zvcm1hdFJnYlxufSk7XG5cbmZ1bmN0aW9uIGNvbG9yX2Zvcm1hdEhleCgpIHtcbiAgcmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4KCk7XG59XG5cbmZ1bmN0aW9uIGNvbG9yX2Zvcm1hdEhleDgoKSB7XG4gIHJldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleDgoKTtcbn1cblxuZnVuY3Rpb24gY29sb3JfZm9ybWF0SHNsKCkge1xuICByZXR1cm4gaHNsQ29udmVydCh0aGlzKS5mb3JtYXRIc2woKTtcbn1cblxuZnVuY3Rpb24gY29sb3JfZm9ybWF0UmdiKCkge1xuICByZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRSZ2IoKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29sb3IoZm9ybWF0KSB7XG4gIHZhciBtLCBsO1xuICBmb3JtYXQgPSAoZm9ybWF0ICsgXCJcIikudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiAobSA9IHJlSGV4LmV4ZWMoZm9ybWF0KSkgPyAobCA9IG1bMV0ubGVuZ3RoLCBtID0gcGFyc2VJbnQobVsxXSwgMTYpLCBsID09PSA2ID8gcmdibihtKSAvLyAjZmYwMDAwXG4gICAgICA6IGwgPT09IDMgPyBuZXcgUmdiKChtID4+IDggJiAweGYpIHwgKG0gPj4gNCAmIDB4ZjApLCAobSA+PiA0ICYgMHhmKSB8IChtICYgMHhmMCksICgobSAmIDB4ZikgPDwgNCkgfCAobSAmIDB4ZiksIDEpIC8vICNmMDBcbiAgICAgIDogbCA9PT0gOCA/IHJnYmEobSA+PiAyNCAmIDB4ZmYsIG0gPj4gMTYgJiAweGZmLCBtID4+IDggJiAweGZmLCAobSAmIDB4ZmYpIC8gMHhmZikgLy8gI2ZmMDAwMDAwXG4gICAgICA6IGwgPT09IDQgPyByZ2JhKChtID4+IDEyICYgMHhmKSB8IChtID4+IDggJiAweGYwKSwgKG0gPj4gOCAmIDB4ZikgfCAobSA+PiA0ICYgMHhmMCksIChtID4+IDQgJiAweGYpIHwgKG0gJiAweGYwKSwgKCgobSAmIDB4ZikgPDwgNCkgfCAobSAmIDB4ZikpIC8gMHhmZikgLy8gI2YwMDBcbiAgICAgIDogbnVsbCkgLy8gaW52YWxpZCBoZXhcbiAgICAgIDogKG0gPSByZVJnYkludGVnZXIuZXhlYyhmb3JtYXQpKSA/IG5ldyBSZ2IobVsxXSwgbVsyXSwgbVszXSwgMSkgLy8gcmdiKDI1NSwgMCwgMClcbiAgICAgIDogKG0gPSByZVJnYlBlcmNlbnQuZXhlYyhmb3JtYXQpKSA/IG5ldyBSZ2IobVsxXSAqIDI1NSAvIDEwMCwgbVsyXSAqIDI1NSAvIDEwMCwgbVszXSAqIDI1NSAvIDEwMCwgMSkgLy8gcmdiKDEwMCUsIDAlLCAwJSlcbiAgICAgIDogKG0gPSByZVJnYmFJbnRlZ2VyLmV4ZWMoZm9ybWF0KSkgPyByZ2JhKG1bMV0sIG1bMl0sIG1bM10sIG1bNF0pIC8vIHJnYmEoMjU1LCAwLCAwLCAxKVxuICAgICAgOiAobSA9IHJlUmdiYVBlcmNlbnQuZXhlYyhmb3JtYXQpKSA/IHJnYmEobVsxXSAqIDI1NSAvIDEwMCwgbVsyXSAqIDI1NSAvIDEwMCwgbVszXSAqIDI1NSAvIDEwMCwgbVs0XSkgLy8gcmdiKDEwMCUsIDAlLCAwJSwgMSlcbiAgICAgIDogKG0gPSByZUhzbFBlcmNlbnQuZXhlYyhmb3JtYXQpKSA/IGhzbGEobVsxXSwgbVsyXSAvIDEwMCwgbVszXSAvIDEwMCwgMSkgLy8gaHNsKDEyMCwgNTAlLCA1MCUpXG4gICAgICA6IChtID0gcmVIc2xhUGVyY2VudC5leGVjKGZvcm1hdCkpID8gaHNsYShtWzFdLCBtWzJdIC8gMTAwLCBtWzNdIC8gMTAwLCBtWzRdKSAvLyBoc2xhKDEyMCwgNTAlLCA1MCUsIDEpXG4gICAgICA6IG5hbWVkLmhhc093blByb3BlcnR5KGZvcm1hdCkgPyByZ2JuKG5hbWVkW2Zvcm1hdF0pIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgICA6IGZvcm1hdCA9PT0gXCJ0cmFuc3BhcmVudFwiID8gbmV3IFJnYihOYU4sIE5hTiwgTmFOLCAwKVxuICAgICAgOiBudWxsO1xufVxuXG5mdW5jdGlvbiByZ2JuKG4pIHtcbiAgcmV0dXJuIG5ldyBSZ2IobiA+PiAxNiAmIDB4ZmYsIG4gPj4gOCAmIDB4ZmYsIG4gJiAweGZmLCAxKTtcbn1cblxuZnVuY3Rpb24gcmdiYShyLCBnLCBiLCBhKSB7XG4gIGlmIChhIDw9IDApIHIgPSBnID0gYiA9IE5hTjtcbiAgcmV0dXJuIG5ldyBSZ2IociwgZywgYiwgYSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZ2JDb252ZXJ0KG8pIHtcbiAgaWYgKCEobyBpbnN0YW5jZW9mIENvbG9yKSkgbyA9IGNvbG9yKG8pO1xuICBpZiAoIW8pIHJldHVybiBuZXcgUmdiO1xuICBvID0gby5yZ2IoKTtcbiAgcmV0dXJuIG5ldyBSZ2Ioby5yLCBvLmcsIG8uYiwgby5vcGFjaXR5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJnYihyLCBnLCBiLCBvcGFjaXR5KSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID09PSAxID8gcmdiQ29udmVydChyKSA6IG5ldyBSZ2IociwgZywgYiwgb3BhY2l0eSA9PSBudWxsID8gMSA6IG9wYWNpdHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gUmdiKHIsIGcsIGIsIG9wYWNpdHkpIHtcbiAgdGhpcy5yID0gK3I7XG4gIHRoaXMuZyA9ICtnO1xuICB0aGlzLmIgPSArYjtcbiAgdGhpcy5vcGFjaXR5ID0gK29wYWNpdHk7XG59XG5cbmRlZmluZShSZ2IsIHJnYiwgZXh0ZW5kKENvbG9yLCB7XG4gIGJyaWdodGVyKGspIHtcbiAgICBrID0gayA9PSBudWxsID8gYnJpZ2h0ZXIgOiBNYXRoLnBvdyhicmlnaHRlciwgayk7XG4gICAgcmV0dXJuIG5ldyBSZ2IodGhpcy5yICogaywgdGhpcy5nICogaywgdGhpcy5iICogaywgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgZGFya2VyKGspIHtcbiAgICBrID0gayA9PSBudWxsID8gZGFya2VyIDogTWF0aC5wb3coZGFya2VyLCBrKTtcbiAgICByZXR1cm4gbmV3IFJnYih0aGlzLnIgKiBrLCB0aGlzLmcgKiBrLCB0aGlzLmIgKiBrLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICByZ2IoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG4gIGNsYW1wKCkge1xuICAgIHJldHVybiBuZXcgUmdiKGNsYW1waSh0aGlzLnIpLCBjbGFtcGkodGhpcy5nKSwgY2xhbXBpKHRoaXMuYiksIGNsYW1wYSh0aGlzLm9wYWNpdHkpKTtcbiAgfSxcbiAgZGlzcGxheWFibGUoKSB7XG4gICAgcmV0dXJuICgtMC41IDw9IHRoaXMuciAmJiB0aGlzLnIgPCAyNTUuNSlcbiAgICAgICAgJiYgKC0wLjUgPD0gdGhpcy5nICYmIHRoaXMuZyA8IDI1NS41KVxuICAgICAgICAmJiAoLTAuNSA8PSB0aGlzLmIgJiYgdGhpcy5iIDwgMjU1LjUpXG4gICAgICAgICYmICgwIDw9IHRoaXMub3BhY2l0eSAmJiB0aGlzLm9wYWNpdHkgPD0gMSk7XG4gIH0sXG4gIGhleDogcmdiX2Zvcm1hdEhleCwgLy8gRGVwcmVjYXRlZCEgVXNlIGNvbG9yLmZvcm1hdEhleC5cbiAgZm9ybWF0SGV4OiByZ2JfZm9ybWF0SGV4LFxuICBmb3JtYXRIZXg4OiByZ2JfZm9ybWF0SGV4OCxcbiAgZm9ybWF0UmdiOiByZ2JfZm9ybWF0UmdiLFxuICB0b1N0cmluZzogcmdiX2Zvcm1hdFJnYlxufSkpO1xuXG5mdW5jdGlvbiByZ2JfZm9ybWF0SGV4KCkge1xuICByZXR1cm4gYCMke2hleCh0aGlzLnIpfSR7aGV4KHRoaXMuZyl9JHtoZXgodGhpcy5iKX1gO1xufVxuXG5mdW5jdGlvbiByZ2JfZm9ybWF0SGV4OCgpIHtcbiAgcmV0dXJuIGAjJHtoZXgodGhpcy5yKX0ke2hleCh0aGlzLmcpfSR7aGV4KHRoaXMuYil9JHtoZXgoKGlzTmFOKHRoaXMub3BhY2l0eSkgPyAxIDogdGhpcy5vcGFjaXR5KSAqIDI1NSl9YDtcbn1cblxuZnVuY3Rpb24gcmdiX2Zvcm1hdFJnYigpIHtcbiAgY29uc3QgYSA9IGNsYW1wYSh0aGlzLm9wYWNpdHkpO1xuICByZXR1cm4gYCR7YSA9PT0gMSA/IFwicmdiKFwiIDogXCJyZ2JhKFwifSR7Y2xhbXBpKHRoaXMucil9LCAke2NsYW1waSh0aGlzLmcpfSwgJHtjbGFtcGkodGhpcy5iKX0ke2EgPT09IDEgPyBcIilcIiA6IGAsICR7YX0pYH1gO1xufVxuXG5mdW5jdGlvbiBjbGFtcGEob3BhY2l0eSkge1xuICByZXR1cm4gaXNOYU4ob3BhY2l0eSkgPyAxIDogTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgb3BhY2l0eSkpO1xufVxuXG5mdW5jdGlvbiBjbGFtcGkodmFsdWUpIHtcbiAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgTWF0aC5yb3VuZCh2YWx1ZSkgfHwgMCkpO1xufVxuXG5mdW5jdGlvbiBoZXgodmFsdWUpIHtcbiAgdmFsdWUgPSBjbGFtcGkodmFsdWUpO1xuICByZXR1cm4gKHZhbHVlIDwgMTYgPyBcIjBcIiA6IFwiXCIpICsgdmFsdWUudG9TdHJpbmcoMTYpO1xufVxuXG5mdW5jdGlvbiBoc2xhKGgsIHMsIGwsIGEpIHtcbiAgaWYgKGEgPD0gMCkgaCA9IHMgPSBsID0gTmFOO1xuICBlbHNlIGlmIChsIDw9IDAgfHwgbCA+PSAxKSBoID0gcyA9IE5hTjtcbiAgZWxzZSBpZiAocyA8PSAwKSBoID0gTmFOO1xuICByZXR1cm4gbmV3IEhzbChoLCBzLCBsLCBhKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhzbENvbnZlcnQobykge1xuICBpZiAobyBpbnN0YW5jZW9mIEhzbCkgcmV0dXJuIG5ldyBIc2woby5oLCBvLnMsIG8ubCwgby5vcGFjaXR5KTtcbiAgaWYgKCEobyBpbnN0YW5jZW9mIENvbG9yKSkgbyA9IGNvbG9yKG8pO1xuICBpZiAoIW8pIHJldHVybiBuZXcgSHNsO1xuICBpZiAobyBpbnN0YW5jZW9mIEhzbCkgcmV0dXJuIG87XG4gIG8gPSBvLnJnYigpO1xuICB2YXIgciA9IG8uciAvIDI1NSxcbiAgICAgIGcgPSBvLmcgLyAyNTUsXG4gICAgICBiID0gby5iIC8gMjU1LFxuICAgICAgbWluID0gTWF0aC5taW4ociwgZywgYiksXG4gICAgICBtYXggPSBNYXRoLm1heChyLCBnLCBiKSxcbiAgICAgIGggPSBOYU4sXG4gICAgICBzID0gbWF4IC0gbWluLFxuICAgICAgbCA9IChtYXggKyBtaW4pIC8gMjtcbiAgaWYgKHMpIHtcbiAgICBpZiAociA9PT0gbWF4KSBoID0gKGcgLSBiKSAvIHMgKyAoZyA8IGIpICogNjtcbiAgICBlbHNlIGlmIChnID09PSBtYXgpIGggPSAoYiAtIHIpIC8gcyArIDI7XG4gICAgZWxzZSBoID0gKHIgLSBnKSAvIHMgKyA0O1xuICAgIHMgLz0gbCA8IDAuNSA/IG1heCArIG1pbiA6IDIgLSBtYXggLSBtaW47XG4gICAgaCAqPSA2MDtcbiAgfSBlbHNlIHtcbiAgICBzID0gbCA+IDAgJiYgbCA8IDEgPyAwIDogaDtcbiAgfVxuICByZXR1cm4gbmV3IEhzbChoLCBzLCBsLCBvLm9wYWNpdHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHNsKGgsIHMsIGwsIG9wYWNpdHkpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyBoc2xDb252ZXJ0KGgpIDogbmV3IEhzbChoLCBzLCBsLCBvcGFjaXR5ID09IG51bGwgPyAxIDogb3BhY2l0eSk7XG59XG5cbmZ1bmN0aW9uIEhzbChoLCBzLCBsLCBvcGFjaXR5KSB7XG4gIHRoaXMuaCA9ICtoO1xuICB0aGlzLnMgPSArcztcbiAgdGhpcy5sID0gK2w7XG4gIHRoaXMub3BhY2l0eSA9ICtvcGFjaXR5O1xufVxuXG5kZWZpbmUoSHNsLCBoc2wsIGV4dGVuZChDb2xvciwge1xuICBicmlnaHRlcihrKSB7XG4gICAgayA9IGsgPT0gbnVsbCA/IGJyaWdodGVyIDogTWF0aC5wb3coYnJpZ2h0ZXIsIGspO1xuICAgIHJldHVybiBuZXcgSHNsKHRoaXMuaCwgdGhpcy5zLCB0aGlzLmwgKiBrLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICBkYXJrZXIoaykge1xuICAgIGsgPSBrID09IG51bGwgPyBkYXJrZXIgOiBNYXRoLnBvdyhkYXJrZXIsIGspO1xuICAgIHJldHVybiBuZXcgSHNsKHRoaXMuaCwgdGhpcy5zLCB0aGlzLmwgKiBrLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICByZ2IoKSB7XG4gICAgdmFyIGggPSB0aGlzLmggJSAzNjAgKyAodGhpcy5oIDwgMCkgKiAzNjAsXG4gICAgICAgIHMgPSBpc05hTihoKSB8fCBpc05hTih0aGlzLnMpID8gMCA6IHRoaXMucyxcbiAgICAgICAgbCA9IHRoaXMubCxcbiAgICAgICAgbTIgPSBsICsgKGwgPCAwLjUgPyBsIDogMSAtIGwpICogcyxcbiAgICAgICAgbTEgPSAyICogbCAtIG0yO1xuICAgIHJldHVybiBuZXcgUmdiKFxuICAgICAgaHNsMnJnYihoID49IDI0MCA/IGggLSAyNDAgOiBoICsgMTIwLCBtMSwgbTIpLFxuICAgICAgaHNsMnJnYihoLCBtMSwgbTIpLFxuICAgICAgaHNsMnJnYihoIDwgMTIwID8gaCArIDI0MCA6IGggLSAxMjAsIG0xLCBtMiksXG4gICAgICB0aGlzLm9wYWNpdHlcbiAgICApO1xuICB9LFxuICBjbGFtcCgpIHtcbiAgICByZXR1cm4gbmV3IEhzbChjbGFtcGgodGhpcy5oKSwgY2xhbXB0KHRoaXMucyksIGNsYW1wdCh0aGlzLmwpLCBjbGFtcGEodGhpcy5vcGFjaXR5KSk7XG4gIH0sXG4gIGRpc3BsYXlhYmxlKCkge1xuICAgIHJldHVybiAoMCA8PSB0aGlzLnMgJiYgdGhpcy5zIDw9IDEgfHwgaXNOYU4odGhpcy5zKSlcbiAgICAgICAgJiYgKDAgPD0gdGhpcy5sICYmIHRoaXMubCA8PSAxKVxuICAgICAgICAmJiAoMCA8PSB0aGlzLm9wYWNpdHkgJiYgdGhpcy5vcGFjaXR5IDw9IDEpO1xuICB9LFxuICBmb3JtYXRIc2woKSB7XG4gICAgY29uc3QgYSA9IGNsYW1wYSh0aGlzLm9wYWNpdHkpO1xuICAgIHJldHVybiBgJHthID09PSAxID8gXCJoc2woXCIgOiBcImhzbGEoXCJ9JHtjbGFtcGgodGhpcy5oKX0sICR7Y2xhbXB0KHRoaXMucykgKiAxMDB9JSwgJHtjbGFtcHQodGhpcy5sKSAqIDEwMH0lJHthID09PSAxID8gXCIpXCIgOiBgLCAke2F9KWB9YDtcbiAgfVxufSkpO1xuXG5mdW5jdGlvbiBjbGFtcGgodmFsdWUpIHtcbiAgdmFsdWUgPSAodmFsdWUgfHwgMCkgJSAzNjA7XG4gIHJldHVybiB2YWx1ZSA8IDAgPyB2YWx1ZSArIDM2MCA6IHZhbHVlO1xufVxuXG5mdW5jdGlvbiBjbGFtcHQodmFsdWUpIHtcbiAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWluKDEsIHZhbHVlIHx8IDApKTtcbn1cblxuLyogRnJvbSBGdkQgMTMuMzcsIENTUyBDb2xvciBNb2R1bGUgTGV2ZWwgMyAqL1xuZnVuY3Rpb24gaHNsMnJnYihoLCBtMSwgbTIpIHtcbiAgcmV0dXJuIChoIDwgNjAgPyBtMSArIChtMiAtIG0xKSAqIGggLyA2MFxuICAgICAgOiBoIDwgMTgwID8gbTJcbiAgICAgIDogaCA8IDI0MCA/IG0xICsgKG0yIC0gbTEpICogKDI0MCAtIGgpIC8gNjBcbiAgICAgIDogbTEpICogMjU1O1xufVxuIiwiaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5pbXBvcnQgc2VsZWN0b3IgZnJvbSBcIi4uL3NlbGVjdG9yLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdCkge1xuICBpZiAodHlwZW9mIHNlbGVjdCAhPT0gXCJmdW5jdGlvblwiKSBzZWxlY3QgPSBzZWxlY3RvcihzZWxlY3QpO1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIHN1Ymdyb3VwcyA9IG5ldyBBcnJheShtKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgc3ViZ3JvdXAgPSBzdWJncm91cHNbal0gPSBuZXcgQXJyYXkobiksIG5vZGUsIHN1Ym5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAoKG5vZGUgPSBncm91cFtpXSkgJiYgKHN1Ym5vZGUgPSBzZWxlY3QuY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBncm91cCkpKSB7XG4gICAgICAgIGlmIChcIl9fZGF0YV9fXCIgaW4gbm9kZSkgc3Vibm9kZS5fX2RhdGFfXyA9IG5vZGUuX19kYXRhX187XG4gICAgICAgIHN1Ymdyb3VwW2ldID0gc3Vibm9kZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFNlbGVjdGlvbihzdWJncm91cHMsIHRoaXMuX3BhcmVudHMpO1xufVxuIiwiaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5pbXBvcnQgbWF0Y2hlciBmcm9tIFwiLi4vbWF0Y2hlci5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihtYXRjaCkge1xuICBpZiAodHlwZW9mIG1hdGNoICE9PSBcImZ1bmN0aW9uXCIpIG1hdGNoID0gbWF0Y2hlcihtYXRjaCk7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc3ViZ3JvdXBzID0gbmV3IEFycmF5KG0pLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBzdWJncm91cCA9IHN1Ymdyb3Vwc1tqXSA9IFtdLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKChub2RlID0gZ3JvdXBbaV0pICYmIG1hdGNoLmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApKSB7XG4gICAgICAgIHN1Ymdyb3VwLnB1c2gobm9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24oc3ViZ3JvdXBzLCB0aGlzLl9wYXJlbnRzKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB4O1xuICB9O1xufVxuIiwiaW1wb3J0IHNwYXJzZSBmcm9tIFwiLi9zcGFyc2UuanNcIjtcbmltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24odGhpcy5fZXhpdCB8fCB0aGlzLl9ncm91cHMubWFwKHNwYXJzZSksIHRoaXMuX3BhcmVudHMpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ob25lbnRlciwgb251cGRhdGUsIG9uZXhpdCkge1xuICB2YXIgZW50ZXIgPSB0aGlzLmVudGVyKCksIHVwZGF0ZSA9IHRoaXMsIGV4aXQgPSB0aGlzLmV4aXQoKTtcbiAgaWYgKHR5cGVvZiBvbmVudGVyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBlbnRlciA9IG9uZW50ZXIoZW50ZXIpO1xuICAgIGlmIChlbnRlcikgZW50ZXIgPSBlbnRlci5zZWxlY3Rpb24oKTtcbiAgfSBlbHNlIHtcbiAgICBlbnRlciA9IGVudGVyLmFwcGVuZChvbmVudGVyICsgXCJcIik7XG4gIH1cbiAgaWYgKG9udXBkYXRlICE9IG51bGwpIHtcbiAgICB1cGRhdGUgPSBvbnVwZGF0ZSh1cGRhdGUpO1xuICAgIGlmICh1cGRhdGUpIHVwZGF0ZSA9IHVwZGF0ZS5zZWxlY3Rpb24oKTtcbiAgfVxuICBpZiAob25leGl0ID09IG51bGwpIGV4aXQucmVtb3ZlKCk7IGVsc2Ugb25leGl0KGV4aXQpO1xuICByZXR1cm4gZW50ZXIgJiYgdXBkYXRlID8gZW50ZXIubWVyZ2UodXBkYXRlKS5vcmRlcigpIDogdXBkYXRlO1xufVxuIiwiaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgdmFyIHNlbGVjdGlvbiA9IGNvbnRleHQuc2VsZWN0aW9uID8gY29udGV4dC5zZWxlY3Rpb24oKSA6IGNvbnRleHQ7XG5cbiAgZm9yICh2YXIgZ3JvdXBzMCA9IHRoaXMuX2dyb3VwcywgZ3JvdXBzMSA9IHNlbGVjdGlvbi5fZ3JvdXBzLCBtMCA9IGdyb3VwczAubGVuZ3RoLCBtMSA9IGdyb3VwczEubGVuZ3RoLCBtID0gTWF0aC5taW4obTAsIG0xKSwgbWVyZ2VzID0gbmV3IEFycmF5KG0wKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cDAgPSBncm91cHMwW2pdLCBncm91cDEgPSBncm91cHMxW2pdLCBuID0gZ3JvdXAwLmxlbmd0aCwgbWVyZ2UgPSBtZXJnZXNbal0gPSBuZXcgQXJyYXkobiksIG5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwMFtpXSB8fCBncm91cDFbaV0pIHtcbiAgICAgICAgbWVyZ2VbaV0gPSBub2RlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZvciAoOyBqIDwgbTA7ICsraikge1xuICAgIG1lcmdlc1tqXSA9IGdyb3VwczBbal07XG4gIH1cblxuICByZXR1cm4gbmV3IFNlbGVjdGlvbihtZXJnZXMsIHRoaXMuX3BhcmVudHMpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBqID0gLTEsIG0gPSBncm91cHMubGVuZ3RoOyArK2ogPCBtOykge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBpID0gZ3JvdXAubGVuZ3RoIC0gMSwgbmV4dCA9IGdyb3VwW2ldLCBub2RlOyAtLWkgPj0gMDspIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgICAgaWYgKG5leHQgJiYgbm9kZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihuZXh0KSBeIDQpIG5leHQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobm9kZSwgbmV4dCk7XG4gICAgICAgIG5leHQgPSBub2RlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBjYWxsYmFjayA9IGFyZ3VtZW50c1swXTtcbiAgYXJndW1lbnRzWzBdID0gdGhpcztcbiAgY2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgcmV0dXJuIHRoaXM7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIEFycmF5LmZyb20odGhpcyk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIGogPSAwLCBtID0gZ3JvdXBzLmxlbmd0aDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBpID0gMCwgbiA9IGdyb3VwLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgICAgdmFyIG5vZGUgPSBncm91cFtpXTtcbiAgICAgIGlmIChub2RlKSByZXR1cm4gbm9kZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICBsZXQgc2l6ZSA9IDA7XG4gIGZvciAoY29uc3Qgbm9kZSBvZiB0aGlzKSArK3NpemU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgcmV0dXJuIHNpemU7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuICF0aGlzLm5vZGUoKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBqID0gMCwgbSA9IGdyb3Vwcy5sZW5ndGg7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgaSA9IDAsIG4gPSBncm91cC5sZW5ndGgsIG5vZGU7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIGNhbGxiYWNrLmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufVxuIiwiaW1wb3J0IGNyZWF0b3IgZnJvbSBcIi4uL2NyZWF0b3IuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSkge1xuICB2YXIgY3JlYXRlID0gdHlwZW9mIG5hbWUgPT09IFwiZnVuY3Rpb25cIiA/IG5hbWUgOiBjcmVhdG9yKG5hbWUpO1xuICByZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQoY3JlYXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuICB9KTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMucHJvcGVydHkoXCJfX2RhdGFfX1wiLCB2YWx1ZSlcbiAgICAgIDogdGhpcy5ub2RlKCkuX19kYXRhX187XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiooKSB7XG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgaiA9IDAsIG0gPSBncm91cHMubGVuZ3RoOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIGkgPSAwLCBuID0gZ3JvdXAubGVuZ3RoLCBub2RlOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB5aWVsZCBub2RlO1xuICAgIH1cbiAgfVxufVxuIiwiZXhwb3J0IGNvbnN0IHJhZGlhbnMgPSBNYXRoLlBJIC8gMTgwO1xuZXhwb3J0IGNvbnN0IGRlZ3JlZXMgPSAxODAgLyBNYXRoLlBJO1xuIiwiaW1wb3J0IGRlZmluZSwge2V4dGVuZH0gZnJvbSBcIi4vZGVmaW5lLmpzXCI7XG5pbXBvcnQge0NvbG9yLCByZ2JDb252ZXJ0LCBSZ2J9IGZyb20gXCIuL2NvbG9yLmpzXCI7XG5pbXBvcnQge2RlZ3JlZXMsIHJhZGlhbnN9IGZyb20gXCIuL21hdGguanNcIjtcblxuLy8gaHR0cHM6Ly9vYnNlcnZhYmxlaHEuY29tL0BtYm9zdG9jay9sYWItYW5kLXJnYlxuY29uc3QgSyA9IDE4LFxuICAgIFhuID0gMC45NjQyMixcbiAgICBZbiA9IDEsXG4gICAgWm4gPSAwLjgyNTIxLFxuICAgIHQwID0gNCAvIDI5LFxuICAgIHQxID0gNiAvIDI5LFxuICAgIHQyID0gMyAqIHQxICogdDEsXG4gICAgdDMgPSB0MSAqIHQxICogdDE7XG5cbmZ1bmN0aW9uIGxhYkNvbnZlcnQobykge1xuICBpZiAobyBpbnN0YW5jZW9mIExhYikgcmV0dXJuIG5ldyBMYWIoby5sLCBvLmEsIG8uYiwgby5vcGFjaXR5KTtcbiAgaWYgKG8gaW5zdGFuY2VvZiBIY2wpIHJldHVybiBoY2wybGFiKG8pO1xuICBpZiAoIShvIGluc3RhbmNlb2YgUmdiKSkgbyA9IHJnYkNvbnZlcnQobyk7XG4gIHZhciByID0gcmdiMmxyZ2Ioby5yKSxcbiAgICAgIGcgPSByZ2IybHJnYihvLmcpLFxuICAgICAgYiA9IHJnYjJscmdiKG8uYiksXG4gICAgICB5ID0geHl6MmxhYigoMC4yMjI1MDQ1ICogciArIDAuNzE2ODc4NiAqIGcgKyAwLjA2MDYxNjkgKiBiKSAvIFluKSwgeCwgejtcbiAgaWYgKHIgPT09IGcgJiYgZyA9PT0gYikgeCA9IHogPSB5OyBlbHNlIHtcbiAgICB4ID0geHl6MmxhYigoMC40MzYwNzQ3ICogciArIDAuMzg1MDY0OSAqIGcgKyAwLjE0MzA4MDQgKiBiKSAvIFhuKTtcbiAgICB6ID0geHl6MmxhYigoMC4wMTM5MzIyICogciArIDAuMDk3MTA0NSAqIGcgKyAwLjcxNDE3MzMgKiBiKSAvIFpuKTtcbiAgfVxuICByZXR1cm4gbmV3IExhYigxMTYgKiB5IC0gMTYsIDUwMCAqICh4IC0geSksIDIwMCAqICh5IC0geiksIG8ub3BhY2l0eSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBncmF5KGwsIG9wYWNpdHkpIHtcbiAgcmV0dXJuIG5ldyBMYWIobCwgMCwgMCwgb3BhY2l0eSA9PSBudWxsID8gMSA6IG9wYWNpdHkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBsYWIobCwgYSwgYiwgb3BhY2l0eSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IGxhYkNvbnZlcnQobCkgOiBuZXcgTGFiKGwsIGEsIGIsIG9wYWNpdHkgPT0gbnVsbCA/IDEgOiBvcGFjaXR5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIExhYihsLCBhLCBiLCBvcGFjaXR5KSB7XG4gIHRoaXMubCA9ICtsO1xuICB0aGlzLmEgPSArYTtcbiAgdGhpcy5iID0gK2I7XG4gIHRoaXMub3BhY2l0eSA9ICtvcGFjaXR5O1xufVxuXG5kZWZpbmUoTGFiLCBsYWIsIGV4dGVuZChDb2xvciwge1xuICBicmlnaHRlcihrKSB7XG4gICAgcmV0dXJuIG5ldyBMYWIodGhpcy5sICsgSyAqIChrID09IG51bGwgPyAxIDogayksIHRoaXMuYSwgdGhpcy5iLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICBkYXJrZXIoaykge1xuICAgIHJldHVybiBuZXcgTGFiKHRoaXMubCAtIEsgKiAoayA9PSBudWxsID8gMSA6IGspLCB0aGlzLmEsIHRoaXMuYiwgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgcmdiKCkge1xuICAgIHZhciB5ID0gKHRoaXMubCArIDE2KSAvIDExNixcbiAgICAgICAgeCA9IGlzTmFOKHRoaXMuYSkgPyB5IDogeSArIHRoaXMuYSAvIDUwMCxcbiAgICAgICAgeiA9IGlzTmFOKHRoaXMuYikgPyB5IDogeSAtIHRoaXMuYiAvIDIwMDtcbiAgICB4ID0gWG4gKiBsYWIyeHl6KHgpO1xuICAgIHkgPSBZbiAqIGxhYjJ4eXooeSk7XG4gICAgeiA9IFpuICogbGFiMnh5eih6KTtcbiAgICByZXR1cm4gbmV3IFJnYihcbiAgICAgIGxyZ2IycmdiKCAzLjEzMzg1NjEgKiB4IC0gMS42MTY4NjY3ICogeSAtIDAuNDkwNjE0NiAqIHopLFxuICAgICAgbHJnYjJyZ2IoLTAuOTc4NzY4NCAqIHggKyAxLjkxNjE0MTUgKiB5ICsgMC4wMzM0NTQwICogeiksXG4gICAgICBscmdiMnJnYiggMC4wNzE5NDUzICogeCAtIDAuMjI4OTkxNCAqIHkgKyAxLjQwNTI0MjcgKiB6KSxcbiAgICAgIHRoaXMub3BhY2l0eVxuICAgICk7XG4gIH1cbn0pKTtcblxuZnVuY3Rpb24geHl6MmxhYih0KSB7XG4gIHJldHVybiB0ID4gdDMgPyBNYXRoLnBvdyh0LCAxIC8gMykgOiB0IC8gdDIgKyB0MDtcbn1cblxuZnVuY3Rpb24gbGFiMnh5eih0KSB7XG4gIHJldHVybiB0ID4gdDEgPyB0ICogdCAqIHQgOiB0MiAqICh0IC0gdDApO1xufVxuXG5mdW5jdGlvbiBscmdiMnJnYih4KSB7XG4gIHJldHVybiAyNTUgKiAoeCA8PSAwLjAwMzEzMDggPyAxMi45MiAqIHggOiAxLjA1NSAqIE1hdGgucG93KHgsIDEgLyAyLjQpIC0gMC4wNTUpO1xufVxuXG5mdW5jdGlvbiByZ2IybHJnYih4KSB7XG4gIHJldHVybiAoeCAvPSAyNTUpIDw9IDAuMDQwNDUgPyB4IC8gMTIuOTIgOiBNYXRoLnBvdygoeCArIDAuMDU1KSAvIDEuMDU1LCAyLjQpO1xufVxuXG5mdW5jdGlvbiBoY2xDb252ZXJ0KG8pIHtcbiAgaWYgKG8gaW5zdGFuY2VvZiBIY2wpIHJldHVybiBuZXcgSGNsKG8uaCwgby5jLCBvLmwsIG8ub3BhY2l0eSk7XG4gIGlmICghKG8gaW5zdGFuY2VvZiBMYWIpKSBvID0gbGFiQ29udmVydChvKTtcbiAgaWYgKG8uYSA9PT0gMCAmJiBvLmIgPT09IDApIHJldHVybiBuZXcgSGNsKE5hTiwgMCA8IG8ubCAmJiBvLmwgPCAxMDAgPyAwIDogTmFOLCBvLmwsIG8ub3BhY2l0eSk7XG4gIHZhciBoID0gTWF0aC5hdGFuMihvLmIsIG8uYSkgKiBkZWdyZWVzO1xuICByZXR1cm4gbmV3IEhjbChoIDwgMCA/IGggKyAzNjAgOiBoLCBNYXRoLnNxcnQoby5hICogby5hICsgby5iICogby5iKSwgby5sLCBvLm9wYWNpdHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGNoKGwsIGMsIGgsIG9wYWNpdHkpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyBoY2xDb252ZXJ0KGwpIDogbmV3IEhjbChoLCBjLCBsLCBvcGFjaXR5ID09IG51bGwgPyAxIDogb3BhY2l0eSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoY2woaCwgYywgbCwgb3BhY2l0eSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IGhjbENvbnZlcnQoaCkgOiBuZXcgSGNsKGgsIGMsIGwsIG9wYWNpdHkgPT0gbnVsbCA/IDEgOiBvcGFjaXR5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEhjbChoLCBjLCBsLCBvcGFjaXR5KSB7XG4gIHRoaXMuaCA9ICtoO1xuICB0aGlzLmMgPSArYztcbiAgdGhpcy5sID0gK2w7XG4gIHRoaXMub3BhY2l0eSA9ICtvcGFjaXR5O1xufVxuXG5mdW5jdGlvbiBoY2wybGFiKG8pIHtcbiAgaWYgKGlzTmFOKG8uaCkpIHJldHVybiBuZXcgTGFiKG8ubCwgMCwgMCwgby5vcGFjaXR5KTtcbiAgdmFyIGggPSBvLmggKiByYWRpYW5zO1xuICByZXR1cm4gbmV3IExhYihvLmwsIE1hdGguY29zKGgpICogby5jLCBNYXRoLnNpbihoKSAqIG8uYywgby5vcGFjaXR5KTtcbn1cblxuZGVmaW5lKEhjbCwgaGNsLCBleHRlbmQoQ29sb3IsIHtcbiAgYnJpZ2h0ZXIoaykge1xuICAgIHJldHVybiBuZXcgSGNsKHRoaXMuaCwgdGhpcy5jLCB0aGlzLmwgKyBLICogKGsgPT0gbnVsbCA/IDEgOiBrKSwgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgZGFya2VyKGspIHtcbiAgICByZXR1cm4gbmV3IEhjbCh0aGlzLmgsIHRoaXMuYywgdGhpcy5sIC0gSyAqIChrID09IG51bGwgPyAxIDogayksIHRoaXMub3BhY2l0eSk7XG4gIH0sXG4gIHJnYigpIHtcbiAgICByZXR1cm4gaGNsMmxhYih0aGlzKS5yZ2IoKTtcbiAgfVxufSkpO1xuIiwiZXhwb3J0IGRlZmF1bHQgeCA9PiAoKSA9PiB4O1xuIiwiaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuL2NvbnN0YW50LmpzXCI7XG5cbmZ1bmN0aW9uIGxpbmVhcihhLCBkKSB7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIGEgKyB0ICogZDtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZXhwb25lbnRpYWwoYSwgYiwgeSkge1xuICByZXR1cm4gYSA9IE1hdGgucG93KGEsIHkpLCBiID0gTWF0aC5wb3coYiwgeSkgLSBhLCB5ID0gMSAvIHksIGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gTWF0aC5wb3coYSArIHQgKiBiLCB5KTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh1ZShhLCBiKSB7XG4gIHZhciBkID0gYiAtIGE7XG4gIHJldHVybiBkID8gbGluZWFyKGEsIGQgPiAxODAgfHwgZCA8IC0xODAgPyBkIC0gMzYwICogTWF0aC5yb3VuZChkIC8gMzYwKSA6IGQpIDogY29uc3RhbnQoaXNOYU4oYSkgPyBiIDogYSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnYW1tYSh5KSB7XG4gIHJldHVybiAoeSA9ICt5KSA9PT0gMSA/IG5vZ2FtbWEgOiBmdW5jdGlvbihhLCBiKSB7XG4gICAgcmV0dXJuIGIgLSBhID8gZXhwb25lbnRpYWwoYSwgYiwgeSkgOiBjb25zdGFudChpc05hTihhKSA/IGIgOiBhKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbm9nYW1tYShhLCBiKSB7XG4gIHZhciBkID0gYiAtIGE7XG4gIHJldHVybiBkID8gbGluZWFyKGEsIGQpIDogY29uc3RhbnQoaXNOYU4oYSkgPyBiIDogYSk7XG59XG4iLCJpbXBvcnQge3JnYiBhcyBjb2xvclJnYn0gZnJvbSBcImQzLWNvbG9yXCI7XG5pbXBvcnQgYmFzaXMgZnJvbSBcIi4vYmFzaXMuanNcIjtcbmltcG9ydCBiYXNpc0Nsb3NlZCBmcm9tIFwiLi9iYXNpc0Nsb3NlZC5qc1wiO1xuaW1wb3J0IG5vZ2FtbWEsIHtnYW1tYX0gZnJvbSBcIi4vY29sb3IuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgKGZ1bmN0aW9uIHJnYkdhbW1hKHkpIHtcbiAgdmFyIGNvbG9yID0gZ2FtbWEoeSk7XG5cbiAgZnVuY3Rpb24gcmdiKHN0YXJ0LCBlbmQpIHtcbiAgICB2YXIgciA9IGNvbG9yKChzdGFydCA9IGNvbG9yUmdiKHN0YXJ0KSkuciwgKGVuZCA9IGNvbG9yUmdiKGVuZCkpLnIpLFxuICAgICAgICBnID0gY29sb3Ioc3RhcnQuZywgZW5kLmcpLFxuICAgICAgICBiID0gY29sb3Ioc3RhcnQuYiwgZW5kLmIpLFxuICAgICAgICBvcGFjaXR5ID0gbm9nYW1tYShzdGFydC5vcGFjaXR5LCBlbmQub3BhY2l0eSk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICAgIHN0YXJ0LnIgPSByKHQpO1xuICAgICAgc3RhcnQuZyA9IGcodCk7XG4gICAgICBzdGFydC5iID0gYih0KTtcbiAgICAgIHN0YXJ0Lm9wYWNpdHkgPSBvcGFjaXR5KHQpO1xuICAgICAgcmV0dXJuIHN0YXJ0ICsgXCJcIjtcbiAgICB9O1xuICB9XG5cbiAgcmdiLmdhbW1hID0gcmdiR2FtbWE7XG5cbiAgcmV0dXJuIHJnYjtcbn0pKDEpO1xuXG5mdW5jdGlvbiByZ2JTcGxpbmUoc3BsaW5lKSB7XG4gIHJldHVybiBmdW5jdGlvbihjb2xvcnMpIHtcbiAgICB2YXIgbiA9IGNvbG9ycy5sZW5ndGgsXG4gICAgICAgIHIgPSBuZXcgQXJyYXkobiksXG4gICAgICAgIGcgPSBuZXcgQXJyYXkobiksXG4gICAgICAgIGIgPSBuZXcgQXJyYXkobiksXG4gICAgICAgIGksIGNvbG9yO1xuICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGNvbG9yID0gY29sb3JSZ2IoY29sb3JzW2ldKTtcbiAgICAgIHJbaV0gPSBjb2xvci5yIHx8IDA7XG4gICAgICBnW2ldID0gY29sb3IuZyB8fCAwO1xuICAgICAgYltpXSA9IGNvbG9yLmIgfHwgMDtcbiAgICB9XG4gICAgciA9IHNwbGluZShyKTtcbiAgICBnID0gc3BsaW5lKGcpO1xuICAgIGIgPSBzcGxpbmUoYik7XG4gICAgY29sb3Iub3BhY2l0eSA9IDE7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICAgIGNvbG9yLnIgPSByKHQpO1xuICAgICAgY29sb3IuZyA9IGcodCk7XG4gICAgICBjb2xvci5iID0gYih0KTtcbiAgICAgIHJldHVybiBjb2xvciArIFwiXCI7XG4gICAgfTtcbiAgfTtcbn1cblxuZXhwb3J0IHZhciByZ2JCYXNpcyA9IHJnYlNwbGluZShiYXNpcyk7XG5leHBvcnQgdmFyIHJnYkJhc2lzQ2xvc2VkID0gcmdiU3BsaW5lKGJhc2lzQ2xvc2VkKTtcbiIsImV4cG9ydCBmdW5jdGlvbiBiYXNpcyh0MSwgdjAsIHYxLCB2MiwgdjMpIHtcbiAgdmFyIHQyID0gdDEgKiB0MSwgdDMgPSB0MiAqIHQxO1xuICByZXR1cm4gKCgxIC0gMyAqIHQxICsgMyAqIHQyIC0gdDMpICogdjBcbiAgICAgICsgKDQgLSA2ICogdDIgKyAzICogdDMpICogdjFcbiAgICAgICsgKDEgKyAzICogdDEgKyAzICogdDIgLSAzICogdDMpICogdjJcbiAgICAgICsgdDMgKiB2MykgLyA2O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZXMpIHtcbiAgdmFyIG4gPSB2YWx1ZXMubGVuZ3RoIC0gMTtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgaSA9IHQgPD0gMCA/ICh0ID0gMCkgOiB0ID49IDEgPyAodCA9IDEsIG4gLSAxKSA6IE1hdGguZmxvb3IodCAqIG4pLFxuICAgICAgICB2MSA9IHZhbHVlc1tpXSxcbiAgICAgICAgdjIgPSB2YWx1ZXNbaSArIDFdLFxuICAgICAgICB2MCA9IGkgPiAwID8gdmFsdWVzW2kgLSAxXSA6IDIgKiB2MSAtIHYyLFxuICAgICAgICB2MyA9IGkgPCBuIC0gMSA/IHZhbHVlc1tpICsgMl0gOiAyICogdjIgLSB2MTtcbiAgICByZXR1cm4gYmFzaXMoKHQgLSBpIC8gbikgKiBuLCB2MCwgdjEsIHYyLCB2Myk7XG4gIH07XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIGlmICghYikgYiA9IFtdO1xuICB2YXIgbiA9IGEgPyBNYXRoLm1pbihiLmxlbmd0aCwgYS5sZW5ndGgpIDogMCxcbiAgICAgIGMgPSBiLnNsaWNlKCksXG4gICAgICBpO1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIGNbaV0gPSBhW2ldICogKDEgLSB0KSArIGJbaV0gKiB0O1xuICAgIHJldHVybiBjO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOdW1iZXJBcnJheSh4KSB7XG4gIHJldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcoeCkgJiYgISh4IGluc3RhbmNlb2YgRGF0YVZpZXcpO1xufVxuIiwiaW1wb3J0IHZhbHVlIGZyb20gXCIuL3ZhbHVlLmpzXCI7XG5pbXBvcnQgbnVtYmVyQXJyYXksIHtpc051bWJlckFycmF5fSBmcm9tIFwiLi9udW1iZXJBcnJheS5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHJldHVybiAoaXNOdW1iZXJBcnJheShiKSA/IG51bWJlckFycmF5IDogZ2VuZXJpY0FycmF5KShhLCBiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyaWNBcnJheShhLCBiKSB7XG4gIHZhciBuYiA9IGIgPyBiLmxlbmd0aCA6IDAsXG4gICAgICBuYSA9IGEgPyBNYXRoLm1pbihuYiwgYS5sZW5ndGgpIDogMCxcbiAgICAgIHggPSBuZXcgQXJyYXkobmEpLFxuICAgICAgYyA9IG5ldyBBcnJheShuYiksXG4gICAgICBpO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBuYTsgKytpKSB4W2ldID0gdmFsdWUoYVtpXSwgYltpXSk7XG4gIGZvciAoOyBpIDwgbmI7ICsraSkgY1tpXSA9IGJbaV07XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbmE7ICsraSkgY1tpXSA9IHhbaV0odCk7XG4gICAgcmV0dXJuIGM7XG4gIH07XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHZhciBkID0gbmV3IERhdGU7XG4gIHJldHVybiBhID0gK2EsIGIgPSArYiwgZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBkLnNldFRpbWUoYSAqICgxIC0gdCkgKyBiICogdCksIGQ7XG4gIH07XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHJldHVybiBhID0gK2EsIGIgPSArYiwgZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBhICogKDEgLSB0KSArIGIgKiB0O1xuICB9O1xufVxuIiwiaW1wb3J0IHZhbHVlIGZyb20gXCIuL3ZhbHVlLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgdmFyIGkgPSB7fSxcbiAgICAgIGMgPSB7fSxcbiAgICAgIGs7XG5cbiAgaWYgKGEgPT09IG51bGwgfHwgdHlwZW9mIGEgIT09IFwib2JqZWN0XCIpIGEgPSB7fTtcbiAgaWYgKGIgPT09IG51bGwgfHwgdHlwZW9mIGIgIT09IFwib2JqZWN0XCIpIGIgPSB7fTtcblxuICBmb3IgKGsgaW4gYikge1xuICAgIGlmIChrIGluIGEpIHtcbiAgICAgIGlba10gPSB2YWx1ZShhW2tdLCBiW2tdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY1trXSA9IGJba107XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICBmb3IgKGsgaW4gaSkgY1trXSA9IGlba10odCk7XG4gICAgcmV0dXJuIGM7XG4gIH07XG59XG4iLCJpbXBvcnQgbnVtYmVyIGZyb20gXCIuL251bWJlci5qc1wiO1xuXG52YXIgcmVBID0gL1stK10/KD86XFxkK1xcLj9cXGQqfFxcLj9cXGQrKSg/OltlRV1bLStdP1xcZCspPy9nLFxuICAgIHJlQiA9IG5ldyBSZWdFeHAocmVBLnNvdXJjZSwgXCJnXCIpO1xuXG5mdW5jdGlvbiB6ZXJvKGIpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBiO1xuICB9O1xufVxuXG5mdW5jdGlvbiBvbmUoYikge1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBiKHQpICsgXCJcIjtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICB2YXIgYmkgPSByZUEubGFzdEluZGV4ID0gcmVCLmxhc3RJbmRleCA9IDAsIC8vIHNjYW4gaW5kZXggZm9yIG5leHQgbnVtYmVyIGluIGJcbiAgICAgIGFtLCAvLyBjdXJyZW50IG1hdGNoIGluIGFcbiAgICAgIGJtLCAvLyBjdXJyZW50IG1hdGNoIGluIGJcbiAgICAgIGJzLCAvLyBzdHJpbmcgcHJlY2VkaW5nIGN1cnJlbnQgbnVtYmVyIGluIGIsIGlmIGFueVxuICAgICAgaSA9IC0xLCAvLyBpbmRleCBpbiBzXG4gICAgICBzID0gW10sIC8vIHN0cmluZyBjb25zdGFudHMgYW5kIHBsYWNlaG9sZGVyc1xuICAgICAgcSA9IFtdOyAvLyBudW1iZXIgaW50ZXJwb2xhdG9yc1xuXG4gIC8vIENvZXJjZSBpbnB1dHMgdG8gc3RyaW5ncy5cbiAgYSA9IGEgKyBcIlwiLCBiID0gYiArIFwiXCI7XG5cbiAgLy8gSW50ZXJwb2xhdGUgcGFpcnMgb2YgbnVtYmVycyBpbiBhICYgYi5cbiAgd2hpbGUgKChhbSA9IHJlQS5leGVjKGEpKVxuICAgICAgJiYgKGJtID0gcmVCLmV4ZWMoYikpKSB7XG4gICAgaWYgKChicyA9IGJtLmluZGV4KSA+IGJpKSB7IC8vIGEgc3RyaW5nIHByZWNlZGVzIHRoZSBuZXh0IG51bWJlciBpbiBiXG4gICAgICBicyA9IGIuc2xpY2UoYmksIGJzKTtcbiAgICAgIGlmIChzW2ldKSBzW2ldICs9IGJzOyAvLyBjb2FsZXNjZSB3aXRoIHByZXZpb3VzIHN0cmluZ1xuICAgICAgZWxzZSBzWysraV0gPSBicztcbiAgICB9XG4gICAgaWYgKChhbSA9IGFtWzBdKSA9PT0gKGJtID0gYm1bMF0pKSB7IC8vIG51bWJlcnMgaW4gYSAmIGIgbWF0Y2hcbiAgICAgIGlmIChzW2ldKSBzW2ldICs9IGJtOyAvLyBjb2FsZXNjZSB3aXRoIHByZXZpb3VzIHN0cmluZ1xuICAgICAgZWxzZSBzWysraV0gPSBibTtcbiAgICB9IGVsc2UgeyAvLyBpbnRlcnBvbGF0ZSBub24tbWF0Y2hpbmcgbnVtYmVyc1xuICAgICAgc1srK2ldID0gbnVsbDtcbiAgICAgIHEucHVzaCh7aTogaSwgeDogbnVtYmVyKGFtLCBibSl9KTtcbiAgICB9XG4gICAgYmkgPSByZUIubGFzdEluZGV4O1xuICB9XG5cbiAgLy8gQWRkIHJlbWFpbnMgb2YgYi5cbiAgaWYgKGJpIDwgYi5sZW5ndGgpIHtcbiAgICBicyA9IGIuc2xpY2UoYmkpO1xuICAgIGlmIChzW2ldKSBzW2ldICs9IGJzOyAvLyBjb2FsZXNjZSB3aXRoIHByZXZpb3VzIHN0cmluZ1xuICAgIGVsc2Ugc1srK2ldID0gYnM7XG4gIH1cblxuICAvLyBTcGVjaWFsIG9wdGltaXphdGlvbiBmb3Igb25seSBhIHNpbmdsZSBtYXRjaC5cbiAgLy8gT3RoZXJ3aXNlLCBpbnRlcnBvbGF0ZSBlYWNoIG9mIHRoZSBudW1iZXJzIGFuZCByZWpvaW4gdGhlIHN0cmluZy5cbiAgcmV0dXJuIHMubGVuZ3RoIDwgMiA/IChxWzBdXG4gICAgICA/IG9uZShxWzBdLngpXG4gICAgICA6IHplcm8oYikpXG4gICAgICA6IChiID0gcS5sZW5ndGgsIGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbzsgaSA8IGI7ICsraSkgc1sobyA9IHFbaV0pLmldID0gby54KHQpO1xuICAgICAgICAgIHJldHVybiBzLmpvaW4oXCJcIik7XG4gICAgICAgIH0pO1xufVxuIiwiaW1wb3J0IHtjb2xvcn0gZnJvbSBcImQzLWNvbG9yXCI7XG5pbXBvcnQgcmdiIGZyb20gXCIuL3JnYi5qc1wiO1xuaW1wb3J0IHtnZW5lcmljQXJyYXl9IGZyb20gXCIuL2FycmF5LmpzXCI7XG5pbXBvcnQgZGF0ZSBmcm9tIFwiLi9kYXRlLmpzXCI7XG5pbXBvcnQgbnVtYmVyIGZyb20gXCIuL251bWJlci5qc1wiO1xuaW1wb3J0IG9iamVjdCBmcm9tIFwiLi9vYmplY3QuanNcIjtcbmltcG9ydCBzdHJpbmcgZnJvbSBcIi4vc3RyaW5nLmpzXCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnQuanNcIjtcbmltcG9ydCBudW1iZXJBcnJheSwge2lzTnVtYmVyQXJyYXl9IGZyb20gXCIuL251bWJlckFycmF5LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgdmFyIHQgPSB0eXBlb2YgYiwgYztcbiAgcmV0dXJuIGIgPT0gbnVsbCB8fCB0ID09PSBcImJvb2xlYW5cIiA/IGNvbnN0YW50KGIpXG4gICAgICA6ICh0ID09PSBcIm51bWJlclwiID8gbnVtYmVyXG4gICAgICA6IHQgPT09IFwic3RyaW5nXCIgPyAoKGMgPSBjb2xvcihiKSkgPyAoYiA9IGMsIHJnYikgOiBzdHJpbmcpXG4gICAgICA6IGIgaW5zdGFuY2VvZiBjb2xvciA/IHJnYlxuICAgICAgOiBiIGluc3RhbmNlb2YgRGF0ZSA/IGRhdGVcbiAgICAgIDogaXNOdW1iZXJBcnJheShiKSA/IG51bWJlckFycmF5XG4gICAgICA6IEFycmF5LmlzQXJyYXkoYikgPyBnZW5lcmljQXJyYXlcbiAgICAgIDogdHlwZW9mIGIudmFsdWVPZiAhPT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBiLnRvU3RyaW5nICE9PSBcImZ1bmN0aW9uXCIgfHwgaXNOYU4oYikgPyBvYmplY3RcbiAgICAgIDogbnVtYmVyKShhLCBiKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgcmV0dXJuIGEgPSArYSwgYiA9ICtiLCBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQoYSAqICgxIC0gdCkgKyBiICogdCk7XG4gIH07XG59XG4iLCJ2YXIgZGVncmVlcyA9IDE4MCAvIE1hdGguUEk7XG5cbmV4cG9ydCB2YXIgaWRlbnRpdHkgPSB7XG4gIHRyYW5zbGF0ZVg6IDAsXG4gIHRyYW5zbGF0ZVk6IDAsXG4gIHJvdGF0ZTogMCxcbiAgc2tld1g6IDAsXG4gIHNjYWxlWDogMSxcbiAgc2NhbGVZOiAxXG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiLCBjLCBkLCBlLCBmKSB7XG4gIHZhciBzY2FsZVgsIHNjYWxlWSwgc2tld1g7XG4gIGlmIChzY2FsZVggPSBNYXRoLnNxcnQoYSAqIGEgKyBiICogYikpIGEgLz0gc2NhbGVYLCBiIC89IHNjYWxlWDtcbiAgaWYgKHNrZXdYID0gYSAqIGMgKyBiICogZCkgYyAtPSBhICogc2tld1gsIGQgLT0gYiAqIHNrZXdYO1xuICBpZiAoc2NhbGVZID0gTWF0aC5zcXJ0KGMgKiBjICsgZCAqIGQpKSBjIC89IHNjYWxlWSwgZCAvPSBzY2FsZVksIHNrZXdYIC89IHNjYWxlWTtcbiAgaWYgKGEgKiBkIDwgYiAqIGMpIGEgPSAtYSwgYiA9IC1iLCBza2V3WCA9IC1za2V3WCwgc2NhbGVYID0gLXNjYWxlWDtcbiAgcmV0dXJuIHtcbiAgICB0cmFuc2xhdGVYOiBlLFxuICAgIHRyYW5zbGF0ZVk6IGYsXG4gICAgcm90YXRlOiBNYXRoLmF0YW4yKGIsIGEpICogZGVncmVlcyxcbiAgICBza2V3WDogTWF0aC5hdGFuKHNrZXdYKSAqIGRlZ3JlZXMsXG4gICAgc2NhbGVYOiBzY2FsZVgsXG4gICAgc2NhbGVZOiBzY2FsZVlcbiAgfTtcbn1cbiIsImltcG9ydCBkZWNvbXBvc2UsIHtpZGVudGl0eX0gZnJvbSBcIi4vZGVjb21wb3NlLmpzXCI7XG5cbnZhciBzdmdOb2RlO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlZiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQ3NzKHZhbHVlKSB7XG4gIGNvbnN0IG0gPSBuZXcgKHR5cGVvZiBET01NYXRyaXggPT09IFwiZnVuY3Rpb25cIiA/IERPTU1hdHJpeCA6IFdlYktpdENTU01hdHJpeCkodmFsdWUgKyBcIlwiKTtcbiAgcmV0dXJuIG0uaXNJZGVudGl0eSA/IGlkZW50aXR5IDogZGVjb21wb3NlKG0uYSwgbS5iLCBtLmMsIG0uZCwgbS5lLCBtLmYpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTdmcodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiBpZGVudGl0eTtcbiAgaWYgKCFzdmdOb2RlKSBzdmdOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgXCJnXCIpO1xuICBzdmdOb2RlLnNldEF0dHJpYnV0ZShcInRyYW5zZm9ybVwiLCB2YWx1ZSk7XG4gIGlmICghKHZhbHVlID0gc3ZnTm9kZS50cmFuc2Zvcm0uYmFzZVZhbC5jb25zb2xpZGF0ZSgpKSkgcmV0dXJuIGlkZW50aXR5O1xuICB2YWx1ZSA9IHZhbHVlLm1hdHJpeDtcbiAgcmV0dXJuIGRlY29tcG9zZSh2YWx1ZS5hLCB2YWx1ZS5iLCB2YWx1ZS5jLCB2YWx1ZS5kLCB2YWx1ZS5lLCB2YWx1ZS5mKTtcbn1cbiIsImltcG9ydCBudW1iZXIgZnJvbSBcIi4uL251bWJlci5qc1wiO1xuaW1wb3J0IHtwYXJzZUNzcywgcGFyc2VTdmd9IGZyb20gXCIuL3BhcnNlLmpzXCI7XG5cbmZ1bmN0aW9uIGludGVycG9sYXRlVHJhbnNmb3JtKHBhcnNlLCBweENvbW1hLCBweFBhcmVuLCBkZWdQYXJlbikge1xuXG4gIGZ1bmN0aW9uIHBvcChzKSB7XG4gICAgcmV0dXJuIHMubGVuZ3RoID8gcy5wb3AoKSArIFwiIFwiIDogXCJcIjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRyYW5zbGF0ZSh4YSwgeWEsIHhiLCB5YiwgcywgcSkge1xuICAgIGlmICh4YSAhPT0geGIgfHwgeWEgIT09IHliKSB7XG4gICAgICB2YXIgaSA9IHMucHVzaChcInRyYW5zbGF0ZShcIiwgbnVsbCwgcHhDb21tYSwgbnVsbCwgcHhQYXJlbik7XG4gICAgICBxLnB1c2goe2k6IGkgLSA0LCB4OiBudW1iZXIoeGEsIHhiKX0sIHtpOiBpIC0gMiwgeDogbnVtYmVyKHlhLCB5Yil9KTtcbiAgICB9IGVsc2UgaWYgKHhiIHx8IHliKSB7XG4gICAgICBzLnB1c2goXCJ0cmFuc2xhdGUoXCIgKyB4YiArIHB4Q29tbWEgKyB5YiArIHB4UGFyZW4pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJvdGF0ZShhLCBiLCBzLCBxKSB7XG4gICAgaWYgKGEgIT09IGIpIHtcbiAgICAgIGlmIChhIC0gYiA+IDE4MCkgYiArPSAzNjA7IGVsc2UgaWYgKGIgLSBhID4gMTgwKSBhICs9IDM2MDsgLy8gc2hvcnRlc3QgcGF0aFxuICAgICAgcS5wdXNoKHtpOiBzLnB1c2gocG9wKHMpICsgXCJyb3RhdGUoXCIsIG51bGwsIGRlZ1BhcmVuKSAtIDIsIHg6IG51bWJlcihhLCBiKX0pO1xuICAgIH0gZWxzZSBpZiAoYikge1xuICAgICAgcy5wdXNoKHBvcChzKSArIFwicm90YXRlKFwiICsgYiArIGRlZ1BhcmVuKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBza2V3WChhLCBiLCBzLCBxKSB7XG4gICAgaWYgKGEgIT09IGIpIHtcbiAgICAgIHEucHVzaCh7aTogcy5wdXNoKHBvcChzKSArIFwic2tld1goXCIsIG51bGwsIGRlZ1BhcmVuKSAtIDIsIHg6IG51bWJlcihhLCBiKX0pO1xuICAgIH0gZWxzZSBpZiAoYikge1xuICAgICAgcy5wdXNoKHBvcChzKSArIFwic2tld1goXCIgKyBiICsgZGVnUGFyZW4pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNjYWxlKHhhLCB5YSwgeGIsIHliLCBzLCBxKSB7XG4gICAgaWYgKHhhICE9PSB4YiB8fCB5YSAhPT0geWIpIHtcbiAgICAgIHZhciBpID0gcy5wdXNoKHBvcChzKSArIFwic2NhbGUoXCIsIG51bGwsIFwiLFwiLCBudWxsLCBcIilcIik7XG4gICAgICBxLnB1c2goe2k6IGkgLSA0LCB4OiBudW1iZXIoeGEsIHhiKX0sIHtpOiBpIC0gMiwgeDogbnVtYmVyKHlhLCB5Yil9KTtcbiAgICB9IGVsc2UgaWYgKHhiICE9PSAxIHx8IHliICE9PSAxKSB7XG4gICAgICBzLnB1c2gocG9wKHMpICsgXCJzY2FsZShcIiArIHhiICsgXCIsXCIgKyB5YiArIFwiKVwiKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24oYSwgYikge1xuICAgIHZhciBzID0gW10sIC8vIHN0cmluZyBjb25zdGFudHMgYW5kIHBsYWNlaG9sZGVyc1xuICAgICAgICBxID0gW107IC8vIG51bWJlciBpbnRlcnBvbGF0b3JzXG4gICAgYSA9IHBhcnNlKGEpLCBiID0gcGFyc2UoYik7XG4gICAgdHJhbnNsYXRlKGEudHJhbnNsYXRlWCwgYS50cmFuc2xhdGVZLCBiLnRyYW5zbGF0ZVgsIGIudHJhbnNsYXRlWSwgcywgcSk7XG4gICAgcm90YXRlKGEucm90YXRlLCBiLnJvdGF0ZSwgcywgcSk7XG4gICAgc2tld1goYS5za2V3WCwgYi5za2V3WCwgcywgcSk7XG4gICAgc2NhbGUoYS5zY2FsZVgsIGEuc2NhbGVZLCBiLnNjYWxlWCwgYi5zY2FsZVksIHMsIHEpO1xuICAgIGEgPSBiID0gbnVsbDsgLy8gZ2NcbiAgICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgICAgdmFyIGkgPSAtMSwgbiA9IHEubGVuZ3RoLCBvO1xuICAgICAgd2hpbGUgKCsraSA8IG4pIHNbKG8gPSBxW2ldKS5pXSA9IG8ueCh0KTtcbiAgICAgIHJldHVybiBzLmpvaW4oXCJcIik7XG4gICAgfTtcbiAgfTtcbn1cblxuZXhwb3J0IHZhciBpbnRlcnBvbGF0ZVRyYW5zZm9ybUNzcyA9IGludGVycG9sYXRlVHJhbnNmb3JtKHBhcnNlQ3NzLCBcInB4LCBcIiwgXCJweClcIiwgXCJkZWcpXCIpO1xuZXhwb3J0IHZhciBpbnRlcnBvbGF0ZVRyYW5zZm9ybVN2ZyA9IGludGVycG9sYXRlVHJhbnNmb3JtKHBhcnNlU3ZnLCBcIiwgXCIsIFwiKVwiLCBcIilcIik7XG4iLCJpbXBvcnQge2xhYiBhcyBjb2xvckxhYn0gZnJvbSBcImQzLWNvbG9yXCI7XG5pbXBvcnQgY29sb3IgZnJvbSBcIi4vY29sb3IuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbGFiKHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGwgPSBjb2xvcigoc3RhcnQgPSBjb2xvckxhYihzdGFydCkpLmwsIChlbmQgPSBjb2xvckxhYihlbmQpKS5sKSxcbiAgICAgIGEgPSBjb2xvcihzdGFydC5hLCBlbmQuYSksXG4gICAgICBiID0gY29sb3Ioc3RhcnQuYiwgZW5kLmIpLFxuICAgICAgb3BhY2l0eSA9IGNvbG9yKHN0YXJ0Lm9wYWNpdHksIGVuZC5vcGFjaXR5KTtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICBzdGFydC5sID0gbCh0KTtcbiAgICBzdGFydC5hID0gYSh0KTtcbiAgICBzdGFydC5iID0gYih0KTtcbiAgICBzdGFydC5vcGFjaXR5ID0gb3BhY2l0eSh0KTtcbiAgICByZXR1cm4gc3RhcnQgKyBcIlwiO1xuICB9O1xufVxuIiwidmFyIGZyYW1lID0gMCwgLy8gaXMgYW4gYW5pbWF0aW9uIGZyYW1lIHBlbmRpbmc/XG4gICAgdGltZW91dCA9IDAsIC8vIGlzIGEgdGltZW91dCBwZW5kaW5nP1xuICAgIGludGVydmFsID0gMCwgLy8gYXJlIGFueSB0aW1lcnMgYWN0aXZlP1xuICAgIHBva2VEZWxheSA9IDEwMDAsIC8vIGhvdyBmcmVxdWVudGx5IHdlIGNoZWNrIGZvciBjbG9jayBza2V3XG4gICAgdGFza0hlYWQsXG4gICAgdGFza1RhaWwsXG4gICAgY2xvY2tMYXN0ID0gMCxcbiAgICBjbG9ja05vdyA9IDAsXG4gICAgY2xvY2tTa2V3ID0gMCxcbiAgICBjbG9jayA9IHR5cGVvZiBwZXJmb3JtYW5jZSA9PT0gXCJvYmplY3RcIiAmJiBwZXJmb3JtYW5jZS5ub3cgPyBwZXJmb3JtYW5jZSA6IERhdGUsXG4gICAgc2V0RnJhbWUgPSB0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiICYmIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPyB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KSA6IGZ1bmN0aW9uKGYpIHsgc2V0VGltZW91dChmLCAxNyk7IH07XG5cbmV4cG9ydCBmdW5jdGlvbiBub3coKSB7XG4gIHJldHVybiBjbG9ja05vdyB8fCAoc2V0RnJhbWUoY2xlYXJOb3cpLCBjbG9ja05vdyA9IGNsb2NrLm5vdygpICsgY2xvY2tTa2V3KTtcbn1cblxuZnVuY3Rpb24gY2xlYXJOb3coKSB7XG4gIGNsb2NrTm93ID0gMDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFRpbWVyKCkge1xuICB0aGlzLl9jYWxsID1cbiAgdGhpcy5fdGltZSA9XG4gIHRoaXMuX25leHQgPSBudWxsO1xufVxuXG5UaW1lci5wcm90b3R5cGUgPSB0aW1lci5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBUaW1lcixcbiAgcmVzdGFydDogZnVuY3Rpb24oY2FsbGJhY2ssIGRlbGF5LCB0aW1lKSB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb25cIik7XG4gICAgdGltZSA9ICh0aW1lID09IG51bGwgPyBub3coKSA6ICt0aW1lKSArIChkZWxheSA9PSBudWxsID8gMCA6ICtkZWxheSk7XG4gICAgaWYgKCF0aGlzLl9uZXh0ICYmIHRhc2tUYWlsICE9PSB0aGlzKSB7XG4gICAgICBpZiAodGFza1RhaWwpIHRhc2tUYWlsLl9uZXh0ID0gdGhpcztcbiAgICAgIGVsc2UgdGFza0hlYWQgPSB0aGlzO1xuICAgICAgdGFza1RhaWwgPSB0aGlzO1xuICAgIH1cbiAgICB0aGlzLl9jYWxsID0gY2FsbGJhY2s7XG4gICAgdGhpcy5fdGltZSA9IHRpbWU7XG4gICAgc2xlZXAoKTtcbiAgfSxcbiAgc3RvcDogZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuX2NhbGwpIHtcbiAgICAgIHRoaXMuX2NhbGwgPSBudWxsO1xuICAgICAgdGhpcy5fdGltZSA9IEluZmluaXR5O1xuICAgICAgc2xlZXAoKTtcbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCBmdW5jdGlvbiB0aW1lcihjYWxsYmFjaywgZGVsYXksIHRpbWUpIHtcbiAgdmFyIHQgPSBuZXcgVGltZXI7XG4gIHQucmVzdGFydChjYWxsYmFjaywgZGVsYXksIHRpbWUpO1xuICByZXR1cm4gdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRpbWVyRmx1c2goKSB7XG4gIG5vdygpOyAvLyBHZXQgdGhlIGN1cnJlbnQgdGltZSwgaWYgbm90IGFscmVhZHkgc2V0LlxuICArK2ZyYW1lOyAvLyBQcmV0ZW5kIHdl4oCZdmUgc2V0IGFuIGFsYXJtLCBpZiB3ZSBoYXZlbuKAmXQgYWxyZWFkeS5cbiAgdmFyIHQgPSB0YXNrSGVhZCwgZTtcbiAgd2hpbGUgKHQpIHtcbiAgICBpZiAoKGUgPSBjbG9ja05vdyAtIHQuX3RpbWUpID49IDApIHQuX2NhbGwuY2FsbCh1bmRlZmluZWQsIGUpO1xuICAgIHQgPSB0Ll9uZXh0O1xuICB9XG4gIC0tZnJhbWU7XG59XG5cbmZ1bmN0aW9uIHdha2UoKSB7XG4gIGNsb2NrTm93ID0gKGNsb2NrTGFzdCA9IGNsb2NrLm5vdygpKSArIGNsb2NrU2tldztcbiAgZnJhbWUgPSB0aW1lb3V0ID0gMDtcbiAgdHJ5IHtcbiAgICB0aW1lckZsdXNoKCk7XG4gIH0gZmluYWxseSB7XG4gICAgZnJhbWUgPSAwO1xuICAgIG5hcCgpO1xuICAgIGNsb2NrTm93ID0gMDtcbiAgfVxufVxuXG5mdW5jdGlvbiBwb2tlKCkge1xuICB2YXIgbm93ID0gY2xvY2subm93KCksIGRlbGF5ID0gbm93IC0gY2xvY2tMYXN0O1xuICBpZiAoZGVsYXkgPiBwb2tlRGVsYXkpIGNsb2NrU2tldyAtPSBkZWxheSwgY2xvY2tMYXN0ID0gbm93O1xufVxuXG5mdW5jdGlvbiBuYXAoKSB7XG4gIHZhciB0MCwgdDEgPSB0YXNrSGVhZCwgdDIsIHRpbWUgPSBJbmZpbml0eTtcbiAgd2hpbGUgKHQxKSB7XG4gICAgaWYgKHQxLl9jYWxsKSB7XG4gICAgICBpZiAodGltZSA+IHQxLl90aW1lKSB0aW1lID0gdDEuX3RpbWU7XG4gICAgICB0MCA9IHQxLCB0MSA9IHQxLl9uZXh0O1xuICAgIH0gZWxzZSB7XG4gICAgICB0MiA9IHQxLl9uZXh0LCB0MS5fbmV4dCA9IG51bGw7XG4gICAgICB0MSA9IHQwID8gdDAuX25leHQgPSB0MiA6IHRhc2tIZWFkID0gdDI7XG4gICAgfVxuICB9XG4gIHRhc2tUYWlsID0gdDA7XG4gIHNsZWVwKHRpbWUpO1xufVxuXG5mdW5jdGlvbiBzbGVlcCh0aW1lKSB7XG4gIGlmIChmcmFtZSkgcmV0dXJuOyAvLyBTb29uZXN0IGFsYXJtIGFscmVhZHkgc2V0LCBvciB3aWxsIGJlLlxuICBpZiAodGltZW91dCkgdGltZW91dCA9IGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgdmFyIGRlbGF5ID0gdGltZSAtIGNsb2NrTm93OyAvLyBTdHJpY3RseSBsZXNzIHRoYW4gaWYgd2UgcmVjb21wdXRlZCBjbG9ja05vdy5cbiAgaWYgKGRlbGF5ID4gMjQpIHtcbiAgICBpZiAodGltZSA8IEluZmluaXR5KSB0aW1lb3V0ID0gc2V0VGltZW91dCh3YWtlLCB0aW1lIC0gY2xvY2subm93KCkgLSBjbG9ja1NrZXcpO1xuICAgIGlmIChpbnRlcnZhbCkgaW50ZXJ2YWwgPSBjbGVhckludGVydmFsKGludGVydmFsKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoIWludGVydmFsKSBjbG9ja0xhc3QgPSBjbG9jay5ub3coKSwgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChwb2tlLCBwb2tlRGVsYXkpO1xuICAgIGZyYW1lID0gMSwgc2V0RnJhbWUod2FrZSk7XG4gIH1cbn1cbiIsImltcG9ydCB7VGltZXJ9IGZyb20gXCIuL3RpbWVyLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNhbGxiYWNrLCBkZWxheSwgdGltZSkge1xuICB2YXIgdCA9IG5ldyBUaW1lcjtcbiAgZGVsYXkgPSBkZWxheSA9PSBudWxsID8gMCA6ICtkZWxheTtcbiAgdC5yZXN0YXJ0KGVsYXBzZWQgPT4ge1xuICAgIHQuc3RvcCgpO1xuICAgIGNhbGxiYWNrKGVsYXBzZWQgKyBkZWxheSk7XG4gIH0sIGRlbGF5LCB0aW1lKTtcbiAgcmV0dXJuIHQ7XG59XG4iLCJpbXBvcnQge2Rpc3BhdGNofSBmcm9tIFwiZDMtZGlzcGF0Y2hcIjtcbmltcG9ydCB7dGltZXIsIHRpbWVvdXR9IGZyb20gXCJkMy10aW1lclwiO1xuXG52YXIgZW1wdHlPbiA9IGRpc3BhdGNoKFwic3RhcnRcIiwgXCJlbmRcIiwgXCJjYW5jZWxcIiwgXCJpbnRlcnJ1cHRcIik7XG52YXIgZW1wdHlUd2VlbiA9IFtdO1xuXG5leHBvcnQgdmFyIENSRUFURUQgPSAwO1xuZXhwb3J0IHZhciBTQ0hFRFVMRUQgPSAxO1xuZXhwb3J0IHZhciBTVEFSVElORyA9IDI7XG5leHBvcnQgdmFyIFNUQVJURUQgPSAzO1xuZXhwb3J0IHZhciBSVU5OSU5HID0gNDtcbmV4cG9ydCB2YXIgRU5ESU5HID0gNTtcbmV4cG9ydCB2YXIgRU5ERUQgPSA2O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihub2RlLCBuYW1lLCBpZCwgaW5kZXgsIGdyb3VwLCB0aW1pbmcpIHtcbiAgdmFyIHNjaGVkdWxlcyA9IG5vZGUuX190cmFuc2l0aW9uO1xuICBpZiAoIXNjaGVkdWxlcykgbm9kZS5fX3RyYW5zaXRpb24gPSB7fTtcbiAgZWxzZSBpZiAoaWQgaW4gc2NoZWR1bGVzKSByZXR1cm47XG4gIGNyZWF0ZShub2RlLCBpZCwge1xuICAgIG5hbWU6IG5hbWUsXG4gICAgaW5kZXg6IGluZGV4LCAvLyBGb3IgY29udGV4dCBkdXJpbmcgY2FsbGJhY2suXG4gICAgZ3JvdXA6IGdyb3VwLCAvLyBGb3IgY29udGV4dCBkdXJpbmcgY2FsbGJhY2suXG4gICAgb246IGVtcHR5T24sXG4gICAgdHdlZW46IGVtcHR5VHdlZW4sXG4gICAgdGltZTogdGltaW5nLnRpbWUsXG4gICAgZGVsYXk6IHRpbWluZy5kZWxheSxcbiAgICBkdXJhdGlvbjogdGltaW5nLmR1cmF0aW9uLFxuICAgIGVhc2U6IHRpbWluZy5lYXNlLFxuICAgIHRpbWVyOiBudWxsLFxuICAgIHN0YXRlOiBDUkVBVEVEXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdChub2RlLCBpZCkge1xuICB2YXIgc2NoZWR1bGUgPSBnZXQobm9kZSwgaWQpO1xuICBpZiAoc2NoZWR1bGUuc3RhdGUgPiBDUkVBVEVEKSB0aHJvdyBuZXcgRXJyb3IoXCJ0b28gbGF0ZTsgYWxyZWFkeSBzY2hlZHVsZWRcIik7XG4gIHJldHVybiBzY2hlZHVsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldChub2RlLCBpZCkge1xuICB2YXIgc2NoZWR1bGUgPSBnZXQobm9kZSwgaWQpO1xuICBpZiAoc2NoZWR1bGUuc3RhdGUgPiBTVEFSVEVEKSB0aHJvdyBuZXcgRXJyb3IoXCJ0b28gbGF0ZTsgYWxyZWFkeSBydW5uaW5nXCIpO1xuICByZXR1cm4gc2NoZWR1bGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXQobm9kZSwgaWQpIHtcbiAgdmFyIHNjaGVkdWxlID0gbm9kZS5fX3RyYW5zaXRpb247XG4gIGlmICghc2NoZWR1bGUgfHwgIShzY2hlZHVsZSA9IHNjaGVkdWxlW2lkXSkpIHRocm93IG5ldyBFcnJvcihcInRyYW5zaXRpb24gbm90IGZvdW5kXCIpO1xuICByZXR1cm4gc2NoZWR1bGU7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZShub2RlLCBpZCwgc2VsZikge1xuICB2YXIgc2NoZWR1bGVzID0gbm9kZS5fX3RyYW5zaXRpb24sXG4gICAgICB0d2VlbjtcblxuICAvLyBJbml0aWFsaXplIHRoZSBzZWxmIHRpbWVyIHdoZW4gdGhlIHRyYW5zaXRpb24gaXMgY3JlYXRlZC5cbiAgLy8gTm90ZSB0aGUgYWN0dWFsIGRlbGF5IGlzIG5vdCBrbm93biB1bnRpbCB0aGUgZmlyc3QgY2FsbGJhY2shXG4gIHNjaGVkdWxlc1tpZF0gPSBzZWxmO1xuICBzZWxmLnRpbWVyID0gdGltZXIoc2NoZWR1bGUsIDAsIHNlbGYudGltZSk7XG5cbiAgZnVuY3Rpb24gc2NoZWR1bGUoZWxhcHNlZCkge1xuICAgIHNlbGYuc3RhdGUgPSBTQ0hFRFVMRUQ7XG4gICAgc2VsZi50aW1lci5yZXN0YXJ0KHN0YXJ0LCBzZWxmLmRlbGF5LCBzZWxmLnRpbWUpO1xuXG4gICAgLy8gSWYgdGhlIGVsYXBzZWQgZGVsYXkgaXMgbGVzcyB0aGFuIG91ciBmaXJzdCBzbGVlcCwgc3RhcnQgaW1tZWRpYXRlbHkuXG4gICAgaWYgKHNlbGYuZGVsYXkgPD0gZWxhcHNlZCkgc3RhcnQoZWxhcHNlZCAtIHNlbGYuZGVsYXkpO1xuICB9XG5cbiAgZnVuY3Rpb24gc3RhcnQoZWxhcHNlZCkge1xuICAgIHZhciBpLCBqLCBuLCBvO1xuXG4gICAgLy8gSWYgdGhlIHN0YXRlIGlzIG5vdCBTQ0hFRFVMRUQsIHRoZW4gd2UgcHJldmlvdXNseSBlcnJvcmVkIG9uIHN0YXJ0LlxuICAgIGlmIChzZWxmLnN0YXRlICE9PSBTQ0hFRFVMRUQpIHJldHVybiBzdG9wKCk7XG5cbiAgICBmb3IgKGkgaW4gc2NoZWR1bGVzKSB7XG4gICAgICBvID0gc2NoZWR1bGVzW2ldO1xuICAgICAgaWYgKG8ubmFtZSAhPT0gc2VsZi5uYW1lKSBjb250aW51ZTtcblxuICAgICAgLy8gV2hpbGUgdGhpcyBlbGVtZW50IGFscmVhZHkgaGFzIGEgc3RhcnRpbmcgdHJhbnNpdGlvbiBkdXJpbmcgdGhpcyBmcmFtZSxcbiAgICAgIC8vIGRlZmVyIHN0YXJ0aW5nIGFuIGludGVycnVwdGluZyB0cmFuc2l0aW9uIHVudGlsIHRoYXQgdHJhbnNpdGlvbiBoYXMgYVxuICAgICAgLy8gY2hhbmNlIHRvIHRpY2sgKGFuZCBwb3NzaWJseSBlbmQpOyBzZWUgZDMvZDMtdHJhbnNpdGlvbiM1NCFcbiAgICAgIGlmIChvLnN0YXRlID09PSBTVEFSVEVEKSByZXR1cm4gdGltZW91dChzdGFydCk7XG5cbiAgICAgIC8vIEludGVycnVwdCB0aGUgYWN0aXZlIHRyYW5zaXRpb24sIGlmIGFueS5cbiAgICAgIGlmIChvLnN0YXRlID09PSBSVU5OSU5HKSB7XG4gICAgICAgIG8uc3RhdGUgPSBFTkRFRDtcbiAgICAgICAgby50aW1lci5zdG9wKCk7XG4gICAgICAgIG8ub24uY2FsbChcImludGVycnVwdFwiLCBub2RlLCBub2RlLl9fZGF0YV9fLCBvLmluZGV4LCBvLmdyb3VwKTtcbiAgICAgICAgZGVsZXRlIHNjaGVkdWxlc1tpXTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2FuY2VsIGFueSBwcmUtZW1wdGVkIHRyYW5zaXRpb25zLlxuICAgICAgZWxzZSBpZiAoK2kgPCBpZCkge1xuICAgICAgICBvLnN0YXRlID0gRU5ERUQ7XG4gICAgICAgIG8udGltZXIuc3RvcCgpO1xuICAgICAgICBvLm9uLmNhbGwoXCJjYW5jZWxcIiwgbm9kZSwgbm9kZS5fX2RhdGFfXywgby5pbmRleCwgby5ncm91cCk7XG4gICAgICAgIGRlbGV0ZSBzY2hlZHVsZXNbaV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRGVmZXIgdGhlIGZpcnN0IHRpY2sgdG8gZW5kIG9mIHRoZSBjdXJyZW50IGZyYW1lOyBzZWUgZDMvZDMjMTU3Ni5cbiAgICAvLyBOb3RlIHRoZSB0cmFuc2l0aW9uIG1heSBiZSBjYW5jZWxlZCBhZnRlciBzdGFydCBhbmQgYmVmb3JlIHRoZSBmaXJzdCB0aWNrIVxuICAgIC8vIE5vdGUgdGhpcyBtdXN0IGJlIHNjaGVkdWxlZCBiZWZvcmUgdGhlIHN0YXJ0IGV2ZW50OyBzZWUgZDMvZDMtdHJhbnNpdGlvbiMxNiFcbiAgICAvLyBBc3N1bWluZyB0aGlzIGlzIHN1Y2Nlc3NmdWwsIHN1YnNlcXVlbnQgY2FsbGJhY2tzIGdvIHN0cmFpZ2h0IHRvIHRpY2suXG4gICAgdGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgIGlmIChzZWxmLnN0YXRlID09PSBTVEFSVEVEKSB7XG4gICAgICAgIHNlbGYuc3RhdGUgPSBSVU5OSU5HO1xuICAgICAgICBzZWxmLnRpbWVyLnJlc3RhcnQodGljaywgc2VsZi5kZWxheSwgc2VsZi50aW1lKTtcbiAgICAgICAgdGljayhlbGFwc2VkKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIERpc3BhdGNoIHRoZSBzdGFydCBldmVudC5cbiAgICAvLyBOb3RlIHRoaXMgbXVzdCBiZSBkb25lIGJlZm9yZSB0aGUgdHdlZW4gYXJlIGluaXRpYWxpemVkLlxuICAgIHNlbGYuc3RhdGUgPSBTVEFSVElORztcbiAgICBzZWxmLm9uLmNhbGwoXCJzdGFydFwiLCBub2RlLCBub2RlLl9fZGF0YV9fLCBzZWxmLmluZGV4LCBzZWxmLmdyb3VwKTtcbiAgICBpZiAoc2VsZi5zdGF0ZSAhPT0gU1RBUlRJTkcpIHJldHVybjsgLy8gaW50ZXJydXB0ZWRcbiAgICBzZWxmLnN0YXRlID0gU1RBUlRFRDtcblxuICAgIC8vIEluaXRpYWxpemUgdGhlIHR3ZWVuLCBkZWxldGluZyBudWxsIHR3ZWVuLlxuICAgIHR3ZWVuID0gbmV3IEFycmF5KG4gPSBzZWxmLnR3ZWVuLmxlbmd0aCk7XG4gICAgZm9yIChpID0gMCwgaiA9IC0xOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobyA9IHNlbGYudHdlZW5baV0udmFsdWUuY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBzZWxmLmluZGV4LCBzZWxmLmdyb3VwKSkge1xuICAgICAgICB0d2VlblsrK2pdID0gbztcbiAgICAgIH1cbiAgICB9XG4gICAgdHdlZW4ubGVuZ3RoID0gaiArIDE7XG4gIH1cblxuICBmdW5jdGlvbiB0aWNrKGVsYXBzZWQpIHtcbiAgICB2YXIgdCA9IGVsYXBzZWQgPCBzZWxmLmR1cmF0aW9uID8gc2VsZi5lYXNlLmNhbGwobnVsbCwgZWxhcHNlZCAvIHNlbGYuZHVyYXRpb24pIDogKHNlbGYudGltZXIucmVzdGFydChzdG9wKSwgc2VsZi5zdGF0ZSA9IEVORElORywgMSksXG4gICAgICAgIGkgPSAtMSxcbiAgICAgICAgbiA9IHR3ZWVuLmxlbmd0aDtcblxuICAgIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgICB0d2VlbltpXS5jYWxsKG5vZGUsIHQpO1xuICAgIH1cblxuICAgIC8vIERpc3BhdGNoIHRoZSBlbmQgZXZlbnQuXG4gICAgaWYgKHNlbGYuc3RhdGUgPT09IEVORElORykge1xuICAgICAgc2VsZi5vbi5jYWxsKFwiZW5kXCIsIG5vZGUsIG5vZGUuX19kYXRhX18sIHNlbGYuaW5kZXgsIHNlbGYuZ3JvdXApO1xuICAgICAgc3RvcCgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHN0b3AoKSB7XG4gICAgc2VsZi5zdGF0ZSA9IEVOREVEO1xuICAgIHNlbGYudGltZXIuc3RvcCgpO1xuICAgIGRlbGV0ZSBzY2hlZHVsZXNbaWRdO1xuICAgIGZvciAodmFyIGkgaW4gc2NoZWR1bGVzKSByZXR1cm47IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICBkZWxldGUgbm9kZS5fX3RyYW5zaXRpb247XG4gIH1cbn1cbiIsImltcG9ydCB7Z2V0LCBzZXR9IGZyb20gXCIuL3NjaGVkdWxlLmpzXCI7XG5cbmZ1bmN0aW9uIHR3ZWVuUmVtb3ZlKGlkLCBuYW1lKSB7XG4gIHZhciB0d2VlbjAsIHR3ZWVuMTtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzY2hlZHVsZSA9IHNldCh0aGlzLCBpZCksXG4gICAgICAgIHR3ZWVuID0gc2NoZWR1bGUudHdlZW47XG5cbiAgICAvLyBJZiB0aGlzIG5vZGUgc2hhcmVkIHR3ZWVuIHdpdGggdGhlIHByZXZpb3VzIG5vZGUsXG4gICAgLy8ganVzdCBhc3NpZ24gdGhlIHVwZGF0ZWQgc2hhcmVkIHR3ZWVuIGFuZCB3ZeKAmXJlIGRvbmUhXG4gICAgLy8gT3RoZXJ3aXNlLCBjb3B5LW9uLXdyaXRlLlxuICAgIGlmICh0d2VlbiAhPT0gdHdlZW4wKSB7XG4gICAgICB0d2VlbjEgPSB0d2VlbjAgPSB0d2VlbjtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBuID0gdHdlZW4xLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgICAgICBpZiAodHdlZW4xW2ldLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgICAgICB0d2VlbjEgPSB0d2VlbjEuc2xpY2UoKTtcbiAgICAgICAgICB0d2VlbjEuc3BsaWNlKGksIDEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgc2NoZWR1bGUudHdlZW4gPSB0d2VlbjE7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHR3ZWVuRnVuY3Rpb24oaWQsIG5hbWUsIHZhbHVlKSB7XG4gIHZhciB0d2VlbjAsIHR3ZWVuMTtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3I7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc2NoZWR1bGUgPSBzZXQodGhpcywgaWQpLFxuICAgICAgICB0d2VlbiA9IHNjaGVkdWxlLnR3ZWVuO1xuXG4gICAgLy8gSWYgdGhpcyBub2RlIHNoYXJlZCB0d2VlbiB3aXRoIHRoZSBwcmV2aW91cyBub2RlLFxuICAgIC8vIGp1c3QgYXNzaWduIHRoZSB1cGRhdGVkIHNoYXJlZCB0d2VlbiBhbmQgd2XigJlyZSBkb25lIVxuICAgIC8vIE90aGVyd2lzZSwgY29weS1vbi13cml0ZS5cbiAgICBpZiAodHdlZW4gIT09IHR3ZWVuMCkge1xuICAgICAgdHdlZW4xID0gKHR3ZWVuMCA9IHR3ZWVuKS5zbGljZSgpO1xuICAgICAgZm9yICh2YXIgdCA9IHtuYW1lOiBuYW1lLCB2YWx1ZTogdmFsdWV9LCBpID0gMCwgbiA9IHR3ZWVuMS5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICAgICAgaWYgKHR3ZWVuMVtpXS5uYW1lID09PSBuYW1lKSB7XG4gICAgICAgICAgdHdlZW4xW2ldID0gdDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGkgPT09IG4pIHR3ZWVuMS5wdXNoKHQpO1xuICAgIH1cblxuICAgIHNjaGVkdWxlLnR3ZWVuID0gdHdlZW4xO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICB2YXIgaWQgPSB0aGlzLl9pZDtcblxuICBuYW1lICs9IFwiXCI7XG5cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgdmFyIHR3ZWVuID0gZ2V0KHRoaXMubm9kZSgpLCBpZCkudHdlZW47XG4gICAgZm9yICh2YXIgaSA9IDAsIG4gPSB0d2Vlbi5sZW5ndGgsIHQ7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmICgodCA9IHR3ZWVuW2ldKS5uYW1lID09PSBuYW1lKSB7XG4gICAgICAgIHJldHVybiB0LnZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiB0aGlzLmVhY2goKHZhbHVlID09IG51bGwgPyB0d2VlblJlbW92ZSA6IHR3ZWVuRnVuY3Rpb24pKGlkLCBuYW1lLCB2YWx1ZSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHdlZW5WYWx1ZSh0cmFuc2l0aW9uLCBuYW1lLCB2YWx1ZSkge1xuICB2YXIgaWQgPSB0cmFuc2l0aW9uLl9pZDtcblxuICB0cmFuc2l0aW9uLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgdmFyIHNjaGVkdWxlID0gc2V0KHRoaXMsIGlkKTtcbiAgICAoc2NoZWR1bGUudmFsdWUgfHwgKHNjaGVkdWxlLnZhbHVlID0ge30pKVtuYW1lXSA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH0pO1xuXG4gIHJldHVybiBmdW5jdGlvbihub2RlKSB7XG4gICAgcmV0dXJuIGdldChub2RlLCBpZCkudmFsdWVbbmFtZV07XG4gIH07XG59XG4iLCJpbXBvcnQge2NvbG9yfSBmcm9tIFwiZDMtY29sb3JcIjtcbmltcG9ydCB7aW50ZXJwb2xhdGVOdW1iZXIsIGludGVycG9sYXRlUmdiLCBpbnRlcnBvbGF0ZVN0cmluZ30gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgdmFyIGM7XG4gIHJldHVybiAodHlwZW9mIGIgPT09IFwibnVtYmVyXCIgPyBpbnRlcnBvbGF0ZU51bWJlclxuICAgICAgOiBiIGluc3RhbmNlb2YgY29sb3IgPyBpbnRlcnBvbGF0ZVJnYlxuICAgICAgOiAoYyA9IGNvbG9yKGIpKSA/IChiID0gYywgaW50ZXJwb2xhdGVSZ2IpXG4gICAgICA6IGludGVycG9sYXRlU3RyaW5nKShhLCBiKTtcbn1cbiIsImltcG9ydCB7aW50ZXJwb2xhdGVUcmFuc2Zvcm1TdmcgYXMgaW50ZXJwb2xhdGVUcmFuc2Zvcm19IGZyb20gXCJkMy1pbnRlcnBvbGF0ZVwiO1xuaW1wb3J0IHtuYW1lc3BhY2V9IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcbmltcG9ydCB7dHdlZW5WYWx1ZX0gZnJvbSBcIi4vdHdlZW4uanNcIjtcbmltcG9ydCBpbnRlcnBvbGF0ZSBmcm9tIFwiLi9pbnRlcnBvbGF0ZS5qc1wiO1xuXG5mdW5jdGlvbiBhdHRyUmVtb3ZlKG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyUmVtb3ZlTlMoZnVsbG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0ckNvbnN0YW50KG5hbWUsIGludGVycG9sYXRlLCB2YWx1ZTEpIHtcbiAgdmFyIHN0cmluZzAwLFxuICAgICAgc3RyaW5nMSA9IHZhbHVlMSArIFwiXCIsXG4gICAgICBpbnRlcnBvbGF0ZTA7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RyaW5nMCA9IHRoaXMuZ2V0QXR0cmlidXRlKG5hbWUpO1xuICAgIHJldHVybiBzdHJpbmcwID09PSBzdHJpbmcxID8gbnVsbFxuICAgICAgICA6IHN0cmluZzAgPT09IHN0cmluZzAwID8gaW50ZXJwb2xhdGUwXG4gICAgICAgIDogaW50ZXJwb2xhdGUwID0gaW50ZXJwb2xhdGUoc3RyaW5nMDAgPSBzdHJpbmcwLCB2YWx1ZTEpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyQ29uc3RhbnROUyhmdWxsbmFtZSwgaW50ZXJwb2xhdGUsIHZhbHVlMSkge1xuICB2YXIgc3RyaW5nMDAsXG4gICAgICBzdHJpbmcxID0gdmFsdWUxICsgXCJcIixcbiAgICAgIGludGVycG9sYXRlMDtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdHJpbmcwID0gdGhpcy5nZXRBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpO1xuICAgIHJldHVybiBzdHJpbmcwID09PSBzdHJpbmcxID8gbnVsbFxuICAgICAgICA6IHN0cmluZzAgPT09IHN0cmluZzAwID8gaW50ZXJwb2xhdGUwXG4gICAgICAgIDogaW50ZXJwb2xhdGUwID0gaW50ZXJwb2xhdGUoc3RyaW5nMDAgPSBzdHJpbmcwLCB2YWx1ZTEpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyRnVuY3Rpb24obmFtZSwgaW50ZXJwb2xhdGUsIHZhbHVlKSB7XG4gIHZhciBzdHJpbmcwMCxcbiAgICAgIHN0cmluZzEwLFxuICAgICAgaW50ZXJwb2xhdGUwO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0cmluZzAsIHZhbHVlMSA9IHZhbHVlKHRoaXMpLCBzdHJpbmcxO1xuICAgIGlmICh2YWx1ZTEgPT0gbnVsbCkgcmV0dXJuIHZvaWQgdGhpcy5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgc3RyaW5nMCA9IHRoaXMuZ2V0QXR0cmlidXRlKG5hbWUpO1xuICAgIHN0cmluZzEgPSB2YWx1ZTEgKyBcIlwiO1xuICAgIHJldHVybiBzdHJpbmcwID09PSBzdHJpbmcxID8gbnVsbFxuICAgICAgICA6IHN0cmluZzAgPT09IHN0cmluZzAwICYmIHN0cmluZzEgPT09IHN0cmluZzEwID8gaW50ZXJwb2xhdGUwXG4gICAgICAgIDogKHN0cmluZzEwID0gc3RyaW5nMSwgaW50ZXJwb2xhdGUwID0gaW50ZXJwb2xhdGUoc3RyaW5nMDAgPSBzdHJpbmcwLCB2YWx1ZTEpKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0ckZ1bmN0aW9uTlMoZnVsbG5hbWUsIGludGVycG9sYXRlLCB2YWx1ZSkge1xuICB2YXIgc3RyaW5nMDAsXG4gICAgICBzdHJpbmcxMCxcbiAgICAgIGludGVycG9sYXRlMDtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdHJpbmcwLCB2YWx1ZTEgPSB2YWx1ZSh0aGlzKSwgc3RyaW5nMTtcbiAgICBpZiAodmFsdWUxID09IG51bGwpIHJldHVybiB2b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKTtcbiAgICBzdHJpbmcwID0gdGhpcy5nZXRBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpO1xuICAgIHN0cmluZzEgPSB2YWx1ZTEgKyBcIlwiO1xuICAgIHJldHVybiBzdHJpbmcwID09PSBzdHJpbmcxID8gbnVsbFxuICAgICAgICA6IHN0cmluZzAgPT09IHN0cmluZzAwICYmIHN0cmluZzEgPT09IHN0cmluZzEwID8gaW50ZXJwb2xhdGUwXG4gICAgICAgIDogKHN0cmluZzEwID0gc3RyaW5nMSwgaW50ZXJwb2xhdGUwID0gaW50ZXJwb2xhdGUoc3RyaW5nMDAgPSBzdHJpbmcwLCB2YWx1ZTEpKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgdmFyIGZ1bGxuYW1lID0gbmFtZXNwYWNlKG5hbWUpLCBpID0gZnVsbG5hbWUgPT09IFwidHJhbnNmb3JtXCIgPyBpbnRlcnBvbGF0ZVRyYW5zZm9ybSA6IGludGVycG9sYXRlO1xuICByZXR1cm4gdGhpcy5hdHRyVHdlZW4obmFtZSwgdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgID8gKGZ1bGxuYW1lLmxvY2FsID8gYXR0ckZ1bmN0aW9uTlMgOiBhdHRyRnVuY3Rpb24pKGZ1bGxuYW1lLCBpLCB0d2VlblZhbHVlKHRoaXMsIFwiYXR0ci5cIiArIG5hbWUsIHZhbHVlKSlcbiAgICAgIDogdmFsdWUgPT0gbnVsbCA/IChmdWxsbmFtZS5sb2NhbCA/IGF0dHJSZW1vdmVOUyA6IGF0dHJSZW1vdmUpKGZ1bGxuYW1lKVxuICAgICAgOiAoZnVsbG5hbWUubG9jYWwgPyBhdHRyQ29uc3RhbnROUyA6IGF0dHJDb25zdGFudCkoZnVsbG5hbWUsIGksIHZhbHVlKSk7XG59XG4iLCJpbXBvcnQge25hbWVzcGFjZX0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuXG5mdW5jdGlvbiBhdHRySW50ZXJwb2xhdGUobmFtZSwgaSkge1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKG5hbWUsIGkuY2FsbCh0aGlzLCB0KSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJJbnRlcnBvbGF0ZU5TKGZ1bGxuYW1lLCBpKSB7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwsIGkuY2FsbCh0aGlzLCB0KSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJUd2Vlbk5TKGZ1bGxuYW1lLCB2YWx1ZSkge1xuICB2YXIgdDAsIGkwO1xuICBmdW5jdGlvbiB0d2VlbigpIHtcbiAgICB2YXIgaSA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKGkgIT09IGkwKSB0MCA9IChpMCA9IGkpICYmIGF0dHJJbnRlcnBvbGF0ZU5TKGZ1bGxuYW1lLCBpKTtcbiAgICByZXR1cm4gdDA7XG4gIH1cbiAgdHdlZW4uX3ZhbHVlID0gdmFsdWU7XG4gIHJldHVybiB0d2Vlbjtcbn1cblxuZnVuY3Rpb24gYXR0clR3ZWVuKG5hbWUsIHZhbHVlKSB7XG4gIHZhciB0MCwgaTA7XG4gIGZ1bmN0aW9uIHR3ZWVuKCkge1xuICAgIHZhciBpID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAoaSAhPT0gaTApIHQwID0gKGkwID0gaSkgJiYgYXR0ckludGVycG9sYXRlKG5hbWUsIGkpO1xuICAgIHJldHVybiB0MDtcbiAgfVxuICB0d2Vlbi5fdmFsdWUgPSB2YWx1ZTtcbiAgcmV0dXJuIHR3ZWVuO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICB2YXIga2V5ID0gXCJhdHRyLlwiICsgbmFtZTtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSByZXR1cm4gKGtleSA9IHRoaXMudHdlZW4oa2V5KSkgJiYga2V5Ll92YWx1ZTtcbiAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiB0aGlzLnR3ZWVuKGtleSwgbnVsbCk7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yO1xuICB2YXIgZnVsbG5hbWUgPSBuYW1lc3BhY2UobmFtZSk7XG4gIHJldHVybiB0aGlzLnR3ZWVuKGtleSwgKGZ1bGxuYW1lLmxvY2FsID8gYXR0clR3ZWVuTlMgOiBhdHRyVHdlZW4pKGZ1bGxuYW1lLCB2YWx1ZSkpO1xufVxuIiwiaW1wb3J0IHtnZXQsIGluaXR9IGZyb20gXCIuL3NjaGVkdWxlLmpzXCI7XG5cbmZ1bmN0aW9uIGRlbGF5RnVuY3Rpb24oaWQsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBpbml0KHRoaXMsIGlkKS5kZWxheSA9ICt2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBkZWxheUNvbnN0YW50KGlkLCB2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPSArdmFsdWUsIGZ1bmN0aW9uKCkge1xuICAgIGluaXQodGhpcywgaWQpLmRlbGF5ID0gdmFsdWU7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHZhciBpZCA9IHRoaXMuX2lkO1xuXG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMuZWFjaCgodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICA/IGRlbGF5RnVuY3Rpb25cbiAgICAgICAgICA6IGRlbGF5Q29uc3RhbnQpKGlkLCB2YWx1ZSkpXG4gICAgICA6IGdldCh0aGlzLm5vZGUoKSwgaWQpLmRlbGF5O1xufVxuIiwiaW1wb3J0IHtnZXQsIHNldH0gZnJvbSBcIi4vc2NoZWR1bGUuanNcIjtcblxuZnVuY3Rpb24gZHVyYXRpb25GdW5jdGlvbihpZCwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHNldCh0aGlzLCBpZCkuZHVyYXRpb24gPSArdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZHVyYXRpb25Db25zdGFudChpZCwgdmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID0gK3ZhbHVlLCBmdW5jdGlvbigpIHtcbiAgICBzZXQodGhpcywgaWQpLmR1cmF0aW9uID0gdmFsdWU7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHZhciBpZCA9IHRoaXMuX2lkO1xuXG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMuZWFjaCgodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICA/IGR1cmF0aW9uRnVuY3Rpb25cbiAgICAgICAgICA6IGR1cmF0aW9uQ29uc3RhbnQpKGlkLCB2YWx1ZSkpXG4gICAgICA6IGdldCh0aGlzLm5vZGUoKSwgaWQpLmR1cmF0aW9uO1xufVxuIiwiaW1wb3J0IHtzZWxlY3Rpb259IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcblxudmFyIFNlbGVjdGlvbiA9IHNlbGVjdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3I7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFNlbGVjdGlvbih0aGlzLl9ncm91cHMsIHRoaXMuX3BhcmVudHMpO1xufVxuIiwiaW1wb3J0IHtpbnRlcnBvbGF0ZVRyYW5zZm9ybUNzcyBhcyBpbnRlcnBvbGF0ZVRyYW5zZm9ybX0gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5pbXBvcnQge3N0eWxlfSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQge3NldH0gZnJvbSBcIi4vc2NoZWR1bGUuanNcIjtcbmltcG9ydCB7dHdlZW5WYWx1ZX0gZnJvbSBcIi4vdHdlZW4uanNcIjtcbmltcG9ydCBpbnRlcnBvbGF0ZSBmcm9tIFwiLi9pbnRlcnBvbGF0ZS5qc1wiO1xuXG5mdW5jdGlvbiBzdHlsZU51bGwobmFtZSwgaW50ZXJwb2xhdGUpIHtcbiAgdmFyIHN0cmluZzAwLFxuICAgICAgc3RyaW5nMTAsXG4gICAgICBpbnRlcnBvbGF0ZTA7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RyaW5nMCA9IHN0eWxlKHRoaXMsIG5hbWUpLFxuICAgICAgICBzdHJpbmcxID0gKHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobmFtZSksIHN0eWxlKHRoaXMsIG5hbWUpKTtcbiAgICByZXR1cm4gc3RyaW5nMCA9PT0gc3RyaW5nMSA/IG51bGxcbiAgICAgICAgOiBzdHJpbmcwID09PSBzdHJpbmcwMCAmJiBzdHJpbmcxID09PSBzdHJpbmcxMCA/IGludGVycG9sYXRlMFxuICAgICAgICA6IGludGVycG9sYXRlMCA9IGludGVycG9sYXRlKHN0cmluZzAwID0gc3RyaW5nMCwgc3RyaW5nMTAgPSBzdHJpbmcxKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gc3R5bGVSZW1vdmUobmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuYW1lKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gc3R5bGVDb25zdGFudChuYW1lLCBpbnRlcnBvbGF0ZSwgdmFsdWUxKSB7XG4gIHZhciBzdHJpbmcwMCxcbiAgICAgIHN0cmluZzEgPSB2YWx1ZTEgKyBcIlwiLFxuICAgICAgaW50ZXJwb2xhdGUwO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0cmluZzAgPSBzdHlsZSh0aGlzLCBuYW1lKTtcbiAgICByZXR1cm4gc3RyaW5nMCA9PT0gc3RyaW5nMSA/IG51bGxcbiAgICAgICAgOiBzdHJpbmcwID09PSBzdHJpbmcwMCA/IGludGVycG9sYXRlMFxuICAgICAgICA6IGludGVycG9sYXRlMCA9IGludGVycG9sYXRlKHN0cmluZzAwID0gc3RyaW5nMCwgdmFsdWUxKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gc3R5bGVGdW5jdGlvbihuYW1lLCBpbnRlcnBvbGF0ZSwgdmFsdWUpIHtcbiAgdmFyIHN0cmluZzAwLFxuICAgICAgc3RyaW5nMTAsXG4gICAgICBpbnRlcnBvbGF0ZTA7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RyaW5nMCA9IHN0eWxlKHRoaXMsIG5hbWUpLFxuICAgICAgICB2YWx1ZTEgPSB2YWx1ZSh0aGlzKSxcbiAgICAgICAgc3RyaW5nMSA9IHZhbHVlMSArIFwiXCI7XG4gICAgaWYgKHZhbHVlMSA9PSBudWxsKSBzdHJpbmcxID0gdmFsdWUxID0gKHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobmFtZSksIHN0eWxlKHRoaXMsIG5hbWUpKTtcbiAgICByZXR1cm4gc3RyaW5nMCA9PT0gc3RyaW5nMSA/IG51bGxcbiAgICAgICAgOiBzdHJpbmcwID09PSBzdHJpbmcwMCAmJiBzdHJpbmcxID09PSBzdHJpbmcxMCA/IGludGVycG9sYXRlMFxuICAgICAgICA6IChzdHJpbmcxMCA9IHN0cmluZzEsIGludGVycG9sYXRlMCA9IGludGVycG9sYXRlKHN0cmluZzAwID0gc3RyaW5nMCwgdmFsdWUxKSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHN0eWxlTWF5YmVSZW1vdmUoaWQsIG5hbWUpIHtcbiAgdmFyIG9uMCwgb24xLCBsaXN0ZW5lcjAsIGtleSA9IFwic3R5bGUuXCIgKyBuYW1lLCBldmVudCA9IFwiZW5kLlwiICsga2V5LCByZW1vdmU7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc2NoZWR1bGUgPSBzZXQodGhpcywgaWQpLFxuICAgICAgICBvbiA9IHNjaGVkdWxlLm9uLFxuICAgICAgICBsaXN0ZW5lciA9IHNjaGVkdWxlLnZhbHVlW2tleV0gPT0gbnVsbCA/IHJlbW92ZSB8fCAocmVtb3ZlID0gc3R5bGVSZW1vdmUobmFtZSkpIDogdW5kZWZpbmVkO1xuXG4gICAgLy8gSWYgdGhpcyBub2RlIHNoYXJlZCBhIGRpc3BhdGNoIHdpdGggdGhlIHByZXZpb3VzIG5vZGUsXG4gICAgLy8ganVzdCBhc3NpZ24gdGhlIHVwZGF0ZWQgc2hhcmVkIGRpc3BhdGNoIGFuZCB3ZeKAmXJlIGRvbmUhXG4gICAgLy8gT3RoZXJ3aXNlLCBjb3B5LW9uLXdyaXRlLlxuICAgIGlmIChvbiAhPT0gb24wIHx8IGxpc3RlbmVyMCAhPT0gbGlzdGVuZXIpIChvbjEgPSAob24wID0gb24pLmNvcHkoKSkub24oZXZlbnQsIGxpc3RlbmVyMCA9IGxpc3RlbmVyKTtcblxuICAgIHNjaGVkdWxlLm9uID0gb24xO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSwgcHJpb3JpdHkpIHtcbiAgdmFyIGkgPSAobmFtZSArPSBcIlwiKSA9PT0gXCJ0cmFuc2Zvcm1cIiA/IGludGVycG9sYXRlVHJhbnNmb3JtIDogaW50ZXJwb2xhdGU7XG4gIHJldHVybiB2YWx1ZSA9PSBudWxsID8gdGhpc1xuICAgICAgLnN0eWxlVHdlZW4obmFtZSwgc3R5bGVOdWxsKG5hbWUsIGkpKVxuICAgICAgLm9uKFwiZW5kLnN0eWxlLlwiICsgbmFtZSwgc3R5bGVSZW1vdmUobmFtZSkpXG4gICAgOiB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIiA/IHRoaXNcbiAgICAgIC5zdHlsZVR3ZWVuKG5hbWUsIHN0eWxlRnVuY3Rpb24obmFtZSwgaSwgdHdlZW5WYWx1ZSh0aGlzLCBcInN0eWxlLlwiICsgbmFtZSwgdmFsdWUpKSlcbiAgICAgIC5lYWNoKHN0eWxlTWF5YmVSZW1vdmUodGhpcy5faWQsIG5hbWUpKVxuICAgIDogdGhpc1xuICAgICAgLnN0eWxlVHdlZW4obmFtZSwgc3R5bGVDb25zdGFudChuYW1lLCBpLCB2YWx1ZSksIHByaW9yaXR5KVxuICAgICAgLm9uKFwiZW5kLnN0eWxlLlwiICsgbmFtZSwgbnVsbCk7XG59XG4iLCJpbXBvcnQge3NlbGVjdGlvbn0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHRyYW5zaXRpb25fYXR0ciBmcm9tIFwiLi9hdHRyLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9hdHRyVHdlZW4gZnJvbSBcIi4vYXR0clR3ZWVuLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9kZWxheSBmcm9tIFwiLi9kZWxheS5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fZHVyYXRpb24gZnJvbSBcIi4vZHVyYXRpb24uanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX2Vhc2UgZnJvbSBcIi4vZWFzZS5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fZWFzZVZhcnlpbmcgZnJvbSBcIi4vZWFzZVZhcnlpbmcuanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX2ZpbHRlciBmcm9tIFwiLi9maWx0ZXIuanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX21lcmdlIGZyb20gXCIuL21lcmdlLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9vbiBmcm9tIFwiLi9vbi5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fcmVtb3ZlIGZyb20gXCIuL3JlbW92ZS5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fc2VsZWN0IGZyb20gXCIuL3NlbGVjdC5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fc2VsZWN0QWxsIGZyb20gXCIuL3NlbGVjdEFsbC5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fc2VsZWN0aW9uIGZyb20gXCIuL3NlbGVjdGlvbi5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fc3R5bGUgZnJvbSBcIi4vc3R5bGUuanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX3N0eWxlVHdlZW4gZnJvbSBcIi4vc3R5bGVUd2Vlbi5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fdGV4dCBmcm9tIFwiLi90ZXh0LmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl90ZXh0VHdlZW4gZnJvbSBcIi4vdGV4dFR3ZWVuLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl90cmFuc2l0aW9uIGZyb20gXCIuL3RyYW5zaXRpb24uanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX3R3ZWVuIGZyb20gXCIuL3R3ZWVuLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9lbmQgZnJvbSBcIi4vZW5kLmpzXCI7XG5cbnZhciBpZCA9IDA7XG5cbmV4cG9ydCBmdW5jdGlvbiBUcmFuc2l0aW9uKGdyb3VwcywgcGFyZW50cywgbmFtZSwgaWQpIHtcbiAgdGhpcy5fZ3JvdXBzID0gZ3JvdXBzO1xuICB0aGlzLl9wYXJlbnRzID0gcGFyZW50cztcbiAgdGhpcy5fbmFtZSA9IG5hbWU7XG4gIHRoaXMuX2lkID0gaWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRyYW5zaXRpb24obmFtZSkge1xuICByZXR1cm4gc2VsZWN0aW9uKCkudHJhbnNpdGlvbihuYW1lKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5ld0lkKCkge1xuICByZXR1cm4gKytpZDtcbn1cblxudmFyIHNlbGVjdGlvbl9wcm90b3R5cGUgPSBzZWxlY3Rpb24ucHJvdG90eXBlO1xuXG5UcmFuc2l0aW9uLnByb3RvdHlwZSA9IHRyYW5zaXRpb24ucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogVHJhbnNpdGlvbixcbiAgc2VsZWN0OiB0cmFuc2l0aW9uX3NlbGVjdCxcbiAgc2VsZWN0QWxsOiB0cmFuc2l0aW9uX3NlbGVjdEFsbCxcbiAgc2VsZWN0Q2hpbGQ6IHNlbGVjdGlvbl9wcm90b3R5cGUuc2VsZWN0Q2hpbGQsXG4gIHNlbGVjdENoaWxkcmVuOiBzZWxlY3Rpb25fcHJvdG90eXBlLnNlbGVjdENoaWxkcmVuLFxuICBmaWx0ZXI6IHRyYW5zaXRpb25fZmlsdGVyLFxuICBtZXJnZTogdHJhbnNpdGlvbl9tZXJnZSxcbiAgc2VsZWN0aW9uOiB0cmFuc2l0aW9uX3NlbGVjdGlvbixcbiAgdHJhbnNpdGlvbjogdHJhbnNpdGlvbl90cmFuc2l0aW9uLFxuICBjYWxsOiBzZWxlY3Rpb25fcHJvdG90eXBlLmNhbGwsXG4gIG5vZGVzOiBzZWxlY3Rpb25fcHJvdG90eXBlLm5vZGVzLFxuICBub2RlOiBzZWxlY3Rpb25fcHJvdG90eXBlLm5vZGUsXG4gIHNpemU6IHNlbGVjdGlvbl9wcm90b3R5cGUuc2l6ZSxcbiAgZW1wdHk6IHNlbGVjdGlvbl9wcm90b3R5cGUuZW1wdHksXG4gIGVhY2g6IHNlbGVjdGlvbl9wcm90b3R5cGUuZWFjaCxcbiAgb246IHRyYW5zaXRpb25fb24sXG4gIGF0dHI6IHRyYW5zaXRpb25fYXR0cixcbiAgYXR0clR3ZWVuOiB0cmFuc2l0aW9uX2F0dHJUd2VlbixcbiAgc3R5bGU6IHRyYW5zaXRpb25fc3R5bGUsXG4gIHN0eWxlVHdlZW46IHRyYW5zaXRpb25fc3R5bGVUd2VlbixcbiAgdGV4dDogdHJhbnNpdGlvbl90ZXh0LFxuICB0ZXh0VHdlZW46IHRyYW5zaXRpb25fdGV4dFR3ZWVuLFxuICByZW1vdmU6IHRyYW5zaXRpb25fcmVtb3ZlLFxuICB0d2VlbjogdHJhbnNpdGlvbl90d2VlbixcbiAgZGVsYXk6IHRyYW5zaXRpb25fZGVsYXksXG4gIGR1cmF0aW9uOiB0cmFuc2l0aW9uX2R1cmF0aW9uLFxuICBlYXNlOiB0cmFuc2l0aW9uX2Vhc2UsXG4gIGVhc2VWYXJ5aW5nOiB0cmFuc2l0aW9uX2Vhc2VWYXJ5aW5nLFxuICBlbmQ6IHRyYW5zaXRpb25fZW5kLFxuICBbU3ltYm9sLml0ZXJhdG9yXTogc2VsZWN0aW9uX3Byb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdXG59O1xuIiwiaW1wb3J0IHtzZWxlY3Rvcn0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHtUcmFuc2l0aW9ufSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuaW1wb3J0IHNjaGVkdWxlLCB7Z2V0fSBmcm9tIFwiLi9zY2hlZHVsZS5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3QpIHtcbiAgdmFyIG5hbWUgPSB0aGlzLl9uYW1lLFxuICAgICAgaWQgPSB0aGlzLl9pZDtcblxuICBpZiAodHlwZW9mIHNlbGVjdCAhPT0gXCJmdW5jdGlvblwiKSBzZWxlY3QgPSBzZWxlY3RvcihzZWxlY3QpO1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIHN1Ymdyb3VwcyA9IG5ldyBBcnJheShtKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgc3ViZ3JvdXAgPSBzdWJncm91cHNbal0gPSBuZXcgQXJyYXkobiksIG5vZGUsIHN1Ym5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAoKG5vZGUgPSBncm91cFtpXSkgJiYgKHN1Ym5vZGUgPSBzZWxlY3QuY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBncm91cCkpKSB7XG4gICAgICAgIGlmIChcIl9fZGF0YV9fXCIgaW4gbm9kZSkgc3Vibm9kZS5fX2RhdGFfXyA9IG5vZGUuX19kYXRhX187XG4gICAgICAgIHN1Ymdyb3VwW2ldID0gc3Vibm9kZTtcbiAgICAgICAgc2NoZWR1bGUoc3ViZ3JvdXBbaV0sIG5hbWUsIGlkLCBpLCBzdWJncm91cCwgZ2V0KG5vZGUsIGlkKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBUcmFuc2l0aW9uKHN1Ymdyb3VwcywgdGhpcy5fcGFyZW50cywgbmFtZSwgaWQpO1xufVxuIiwiaW1wb3J0IHtzZWxlY3RvckFsbH0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHtUcmFuc2l0aW9ufSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuaW1wb3J0IHNjaGVkdWxlLCB7Z2V0fSBmcm9tIFwiLi9zY2hlZHVsZS5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3QpIHtcbiAgdmFyIG5hbWUgPSB0aGlzLl9uYW1lLFxuICAgICAgaWQgPSB0aGlzLl9pZDtcblxuICBpZiAodHlwZW9mIHNlbGVjdCAhPT0gXCJmdW5jdGlvblwiKSBzZWxlY3QgPSBzZWxlY3RvckFsbChzZWxlY3QpO1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIHN1Ymdyb3VwcyA9IFtdLCBwYXJlbnRzID0gW10sIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIG4gPSBncm91cC5sZW5ndGgsIG5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICAgIGZvciAodmFyIGNoaWxkcmVuID0gc2VsZWN0LmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApLCBjaGlsZCwgaW5oZXJpdCA9IGdldChub2RlLCBpZCksIGsgPSAwLCBsID0gY2hpbGRyZW4ubGVuZ3RoOyBrIDwgbDsgKytrKSB7XG4gICAgICAgICAgaWYgKGNoaWxkID0gY2hpbGRyZW5ba10pIHtcbiAgICAgICAgICAgIHNjaGVkdWxlKGNoaWxkLCBuYW1lLCBpZCwgaywgY2hpbGRyZW4sIGluaGVyaXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzdWJncm91cHMucHVzaChjaGlsZHJlbik7XG4gICAgICAgIHBhcmVudHMucHVzaChub2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFRyYW5zaXRpb24oc3ViZ3JvdXBzLCBwYXJlbnRzLCBuYW1lLCBpZCk7XG59XG4iLCJpbXBvcnQge21hdGNoZXJ9IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcbmltcG9ydCB7VHJhbnNpdGlvbn0gZnJvbSBcIi4vaW5kZXguanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obWF0Y2gpIHtcbiAgaWYgKHR5cGVvZiBtYXRjaCAhPT0gXCJmdW5jdGlvblwiKSBtYXRjaCA9IG1hdGNoZXIobWF0Y2gpO1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIHN1Ymdyb3VwcyA9IG5ldyBBcnJheShtKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgc3ViZ3JvdXAgPSBzdWJncm91cHNbal0gPSBbXSwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmICgobm9kZSA9IGdyb3VwW2ldKSAmJiBtYXRjaC5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIGksIGdyb3VwKSkge1xuICAgICAgICBzdWJncm91cC5wdXNoKG5vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgVHJhbnNpdGlvbihzdWJncm91cHMsIHRoaXMuX3BhcmVudHMsIHRoaXMuX25hbWUsIHRoaXMuX2lkKTtcbn1cbiIsImltcG9ydCB7VHJhbnNpdGlvbn0gZnJvbSBcIi4vaW5kZXguanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odHJhbnNpdGlvbikge1xuICBpZiAodHJhbnNpdGlvbi5faWQgIT09IHRoaXMuX2lkKSB0aHJvdyBuZXcgRXJyb3I7XG5cbiAgZm9yICh2YXIgZ3JvdXBzMCA9IHRoaXMuX2dyb3VwcywgZ3JvdXBzMSA9IHRyYW5zaXRpb24uX2dyb3VwcywgbTAgPSBncm91cHMwLmxlbmd0aCwgbTEgPSBncm91cHMxLmxlbmd0aCwgbSA9IE1hdGgubWluKG0wLCBtMSksIG1lcmdlcyA9IG5ldyBBcnJheShtMCksIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAwID0gZ3JvdXBzMFtqXSwgZ3JvdXAxID0gZ3JvdXBzMVtqXSwgbiA9IGdyb3VwMC5sZW5ndGgsIG1lcmdlID0gbWVyZ2VzW2pdID0gbmV3IEFycmF5KG4pLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cDBbaV0gfHwgZ3JvdXAxW2ldKSB7XG4gICAgICAgIG1lcmdlW2ldID0gbm9kZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmb3IgKDsgaiA8IG0wOyArK2opIHtcbiAgICBtZXJnZXNbal0gPSBncm91cHMwW2pdO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBUcmFuc2l0aW9uKG1lcmdlcywgdGhpcy5fcGFyZW50cywgdGhpcy5fbmFtZSwgdGhpcy5faWQpO1xufVxuIiwiaW1wb3J0IHtUcmFuc2l0aW9uLCBuZXdJZH0gZnJvbSBcIi4vaW5kZXguanNcIjtcbmltcG9ydCBzY2hlZHVsZSwge2dldH0gZnJvbSBcIi4vc2NoZWR1bGUuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBuYW1lID0gdGhpcy5fbmFtZSxcbiAgICAgIGlkMCA9IHRoaXMuX2lkLFxuICAgICAgaWQxID0gbmV3SWQoKTtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgICB2YXIgaW5oZXJpdCA9IGdldChub2RlLCBpZDApO1xuICAgICAgICBzY2hlZHVsZShub2RlLCBuYW1lLCBpZDEsIGksIGdyb3VwLCB7XG4gICAgICAgICAgdGltZTogaW5oZXJpdC50aW1lICsgaW5oZXJpdC5kZWxheSArIGluaGVyaXQuZHVyYXRpb24sXG4gICAgICAgICAgZGVsYXk6IDAsXG4gICAgICAgICAgZHVyYXRpb246IGluaGVyaXQuZHVyYXRpb24sXG4gICAgICAgICAgZWFzZTogaW5oZXJpdC5lYXNlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgVHJhbnNpdGlvbihncm91cHMsIHRoaXMuX3BhcmVudHMsIG5hbWUsIGlkMSk7XG59XG4iLCJpbXBvcnQge2dldCwgc2V0LCBpbml0fSBmcm9tIFwiLi9zY2hlZHVsZS5qc1wiO1xuXG5mdW5jdGlvbiBzdGFydChuYW1lKSB7XG4gIHJldHVybiAobmFtZSArIFwiXCIpLnRyaW0oKS5zcGxpdCgvXnxcXHMrLykuZXZlcnkoZnVuY3Rpb24odCkge1xuICAgIHZhciBpID0gdC5pbmRleE9mKFwiLlwiKTtcbiAgICBpZiAoaSA+PSAwKSB0ID0gdC5zbGljZSgwLCBpKTtcbiAgICByZXR1cm4gIXQgfHwgdCA9PT0gXCJzdGFydFwiO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gb25GdW5jdGlvbihpZCwgbmFtZSwgbGlzdGVuZXIpIHtcbiAgdmFyIG9uMCwgb24xLCBzaXQgPSBzdGFydChuYW1lKSA/IGluaXQgOiBzZXQ7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc2NoZWR1bGUgPSBzaXQodGhpcywgaWQpLFxuICAgICAgICBvbiA9IHNjaGVkdWxlLm9uO1xuXG4gICAgLy8gSWYgdGhpcyBub2RlIHNoYXJlZCBhIGRpc3BhdGNoIHdpdGggdGhlIHByZXZpb3VzIG5vZGUsXG4gICAgLy8ganVzdCBhc3NpZ24gdGhlIHVwZGF0ZWQgc2hhcmVkIGRpc3BhdGNoIGFuZCB3ZeKAmXJlIGRvbmUhXG4gICAgLy8gT3RoZXJ3aXNlLCBjb3B5LW9uLXdyaXRlLlxuICAgIGlmIChvbiAhPT0gb24wKSAob24xID0gKG9uMCA9IG9uKS5jb3B5KCkpLm9uKG5hbWUsIGxpc3RlbmVyKTtcblxuICAgIHNjaGVkdWxlLm9uID0gb24xO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCBsaXN0ZW5lcikge1xuICB2YXIgaWQgPSB0aGlzLl9pZDtcblxuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDJcbiAgICAgID8gZ2V0KHRoaXMubm9kZSgpLCBpZCkub24ub24obmFtZSlcbiAgICAgIDogdGhpcy5lYWNoKG9uRnVuY3Rpb24oaWQsIG5hbWUsIGxpc3RlbmVyKSk7XG59XG4iLCJmdW5jdGlvbiBzdHlsZUludGVycG9sYXRlKG5hbWUsIGksIHByaW9yaXR5KSB7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShuYW1lLCBpLmNhbGwodGhpcywgdCksIHByaW9yaXR5KTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gc3R5bGVUd2VlbihuYW1lLCB2YWx1ZSwgcHJpb3JpdHkpIHtcbiAgdmFyIHQsIGkwO1xuICBmdW5jdGlvbiB0d2VlbigpIHtcbiAgICB2YXIgaSA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKGkgIT09IGkwKSB0ID0gKGkwID0gaSkgJiYgc3R5bGVJbnRlcnBvbGF0ZShuYW1lLCBpLCBwcmlvcml0eSk7XG4gICAgcmV0dXJuIHQ7XG4gIH1cbiAgdHdlZW4uX3ZhbHVlID0gdmFsdWU7XG4gIHJldHVybiB0d2Vlbjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUsIHByaW9yaXR5KSB7XG4gIHZhciBrZXkgPSBcInN0eWxlLlwiICsgKG5hbWUgKz0gXCJcIik7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikgcmV0dXJuIChrZXkgPSB0aGlzLnR3ZWVuKGtleSkpICYmIGtleS5fdmFsdWU7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdGhpcy50d2VlbihrZXksIG51bGwpO1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBFcnJvcjtcbiAgcmV0dXJuIHRoaXMudHdlZW4oa2V5LCBzdHlsZVR3ZWVuKG5hbWUsIHZhbHVlLCBwcmlvcml0eSA9PSBudWxsID8gXCJcIiA6IHByaW9yaXR5KSk7XG59XG4iLCJpbXBvcnQge3R3ZWVuVmFsdWV9IGZyb20gXCIuL3R3ZWVuLmpzXCI7XG5cbmZ1bmN0aW9uIHRleHRDb25zdGFudCh2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy50ZXh0Q29udGVudCA9IHZhbHVlO1xuICB9O1xufVxuXG5mdW5jdGlvbiB0ZXh0RnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2YWx1ZTEgPSB2YWx1ZSh0aGlzKTtcbiAgICB0aGlzLnRleHRDb250ZW50ID0gdmFsdWUxID09IG51bGwgPyBcIlwiIDogdmFsdWUxO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gdGhpcy50d2VlbihcInRleHRcIiwgdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgID8gdGV4dEZ1bmN0aW9uKHR3ZWVuVmFsdWUodGhpcywgXCJ0ZXh0XCIsIHZhbHVlKSlcbiAgICAgIDogdGV4dENvbnN0YW50KHZhbHVlID09IG51bGwgPyBcIlwiIDogdmFsdWUgKyBcIlwiKSk7XG59XG4iLCJmdW5jdGlvbiB0ZXh0SW50ZXJwb2xhdGUoaSkge1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHRoaXMudGV4dENvbnRlbnQgPSBpLmNhbGwodGhpcywgdCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHRleHRUd2Vlbih2YWx1ZSkge1xuICB2YXIgdDAsIGkwO1xuICBmdW5jdGlvbiB0d2VlbigpIHtcbiAgICB2YXIgaSA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKGkgIT09IGkwKSB0MCA9IChpMCA9IGkpICYmIHRleHRJbnRlcnBvbGF0ZShpKTtcbiAgICByZXR1cm4gdDA7XG4gIH1cbiAgdHdlZW4uX3ZhbHVlID0gdmFsdWU7XG4gIHJldHVybiB0d2Vlbjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWUpIHtcbiAgdmFyIGtleSA9IFwidGV4dFwiO1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHJldHVybiAoa2V5ID0gdGhpcy50d2VlbihrZXkpKSAmJiBrZXkuX3ZhbHVlO1xuICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHRoaXMudHdlZW4oa2V5LCBudWxsKTtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3I7XG4gIHJldHVybiB0aGlzLnR3ZWVuKGtleSwgdGV4dFR3ZWVuKHZhbHVlKSk7XG59XG4iLCJmdW5jdGlvbiByZW1vdmVGdW5jdGlvbihpZCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTtcbiAgICBmb3IgKHZhciBpIGluIHRoaXMuX190cmFuc2l0aW9uKSBpZiAoK2kgIT09IGlkKSByZXR1cm47XG4gICAgaWYgKHBhcmVudCkgcGFyZW50LnJlbW92ZUNoaWxkKHRoaXMpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMub24oXCJlbmQucmVtb3ZlXCIsIHJlbW92ZUZ1bmN0aW9uKHRoaXMuX2lkKSk7XG59XG4iLCJpbXBvcnQge2dldCwgc2V0fSBmcm9tIFwiLi9zY2hlZHVsZS5qc1wiO1xuXG5mdW5jdGlvbiBlYXNlQ29uc3RhbnQoaWQsIHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgc2V0KHRoaXMsIGlkKS5lYXNlID0gdmFsdWU7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHZhciBpZCA9IHRoaXMuX2lkO1xuXG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMuZWFjaChlYXNlQ29uc3RhbnQoaWQsIHZhbHVlKSlcbiAgICAgIDogZ2V0KHRoaXMubm9kZSgpLCBpZCkuZWFzZTtcbn1cbiIsImltcG9ydCB7c2V0fSBmcm9tIFwiLi9zY2hlZHVsZS5qc1wiO1xuXG5mdW5jdGlvbiBlYXNlVmFyeWluZyhpZCwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2ID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAodHlwZW9mIHYgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yO1xuICAgIHNldCh0aGlzLCBpZCkuZWFzZSA9IHY7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yO1xuICByZXR1cm4gdGhpcy5lYWNoKGVhc2VWYXJ5aW5nKHRoaXMuX2lkLCB2YWx1ZSkpO1xufVxuIiwiaW1wb3J0IHtzZXR9IGZyb20gXCIuL3NjaGVkdWxlLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgb24wLCBvbjEsIHRoYXQgPSB0aGlzLCBpZCA9IHRoYXQuX2lkLCBzaXplID0gdGhhdC5zaXplKCk7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICB2YXIgY2FuY2VsID0ge3ZhbHVlOiByZWplY3R9LFxuICAgICAgICBlbmQgPSB7dmFsdWU6IGZ1bmN0aW9uKCkgeyBpZiAoLS1zaXplID09PSAwKSByZXNvbHZlKCk7IH19O1xuXG4gICAgdGhhdC5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHNjaGVkdWxlID0gc2V0KHRoaXMsIGlkKSxcbiAgICAgICAgICBvbiA9IHNjaGVkdWxlLm9uO1xuXG4gICAgICAvLyBJZiB0aGlzIG5vZGUgc2hhcmVkIGEgZGlzcGF0Y2ggd2l0aCB0aGUgcHJldmlvdXMgbm9kZSxcbiAgICAgIC8vIGp1c3QgYXNzaWduIHRoZSB1cGRhdGVkIHNoYXJlZCBkaXNwYXRjaCBhbmQgd2XigJlyZSBkb25lIVxuICAgICAgLy8gT3RoZXJ3aXNlLCBjb3B5LW9uLXdyaXRlLlxuICAgICAgaWYgKG9uICE9PSBvbjApIHtcbiAgICAgICAgb24xID0gKG9uMCA9IG9uKS5jb3B5KCk7XG4gICAgICAgIG9uMS5fLmNhbmNlbC5wdXNoKGNhbmNlbCk7XG4gICAgICAgIG9uMS5fLmludGVycnVwdC5wdXNoKGNhbmNlbCk7XG4gICAgICAgIG9uMS5fLmVuZC5wdXNoKGVuZCk7XG4gICAgICB9XG5cbiAgICAgIHNjaGVkdWxlLm9uID0gb24xO1xuICAgIH0pO1xuXG4gICAgLy8gVGhlIHNlbGVjdGlvbiB3YXMgZW1wdHksIHJlc29sdmUgZW5kIGltbWVkaWF0ZWx5XG4gICAgaWYgKHNpemUgPT09IDApIHJlc29sdmUoKTtcbiAgfSk7XG59XG4iLCJpbXBvcnQge1RyYW5zaXRpb24sIG5ld0lkfSBmcm9tIFwiLi4vdHJhbnNpdGlvbi9pbmRleC5qc1wiO1xuaW1wb3J0IHNjaGVkdWxlIGZyb20gXCIuLi90cmFuc2l0aW9uL3NjaGVkdWxlLmpzXCI7XG5pbXBvcnQge2Vhc2VDdWJpY0luT3V0fSBmcm9tIFwiZDMtZWFzZVwiO1xuaW1wb3J0IHtub3d9IGZyb20gXCJkMy10aW1lclwiO1xuXG52YXIgZGVmYXVsdFRpbWluZyA9IHtcbiAgdGltZTogbnVsbCwgLy8gU2V0IG9uIHVzZS5cbiAgZGVsYXk6IDAsXG4gIGR1cmF0aW9uOiAyNTAsXG4gIGVhc2U6IGVhc2VDdWJpY0luT3V0XG59O1xuXG5mdW5jdGlvbiBpbmhlcml0KG5vZGUsIGlkKSB7XG4gIHZhciB0aW1pbmc7XG4gIHdoaWxlICghKHRpbWluZyA9IG5vZGUuX190cmFuc2l0aW9uKSB8fCAhKHRpbWluZyA9IHRpbWluZ1tpZF0pKSB7XG4gICAgaWYgKCEobm9kZSA9IG5vZGUucGFyZW50Tm9kZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgdHJhbnNpdGlvbiAke2lkfSBub3QgZm91bmRgKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRpbWluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSkge1xuICB2YXIgaWQsXG4gICAgICB0aW1pbmc7XG5cbiAgaWYgKG5hbWUgaW5zdGFuY2VvZiBUcmFuc2l0aW9uKSB7XG4gICAgaWQgPSBuYW1lLl9pZCwgbmFtZSA9IG5hbWUuX25hbWU7XG4gIH0gZWxzZSB7XG4gICAgaWQgPSBuZXdJZCgpLCAodGltaW5nID0gZGVmYXVsdFRpbWluZykudGltZSA9IG5vdygpLCBuYW1lID0gbmFtZSA9PSBudWxsID8gbnVsbCA6IG5hbWUgKyBcIlwiO1xuICB9XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgICAgc2NoZWR1bGUobm9kZSwgbmFtZSwgaWQsIGksIGdyb3VwLCB0aW1pbmcgfHwgaW5oZXJpdChub2RlLCBpZCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgVHJhbnNpdGlvbihncm91cHMsIHRoaXMuX3BhcmVudHMsIG5hbWUsIGlkKTtcbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBjdWJpY0luKHQpIHtcbiAgcmV0dXJuIHQgKiB0ICogdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGN1YmljT3V0KHQpIHtcbiAgcmV0dXJuIC0tdCAqIHQgKiB0ICsgMTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGN1YmljSW5PdXQodCkge1xuICByZXR1cm4gKCh0ICo9IDIpIDw9IDEgPyB0ICogdCAqIHQgOiAodCAtPSAyKSAqIHQgKiB0ICsgMikgLyAyO1xufVxuIiwiaW1wb3J0IHtzZWxlY3Rpb259IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcbmltcG9ydCBzZWxlY3Rpb25faW50ZXJydXB0IGZyb20gXCIuL2ludGVycnVwdC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl90cmFuc2l0aW9uIGZyb20gXCIuL3RyYW5zaXRpb24uanNcIjtcblxuc2VsZWN0aW9uLnByb3RvdHlwZS5pbnRlcnJ1cHQgPSBzZWxlY3Rpb25faW50ZXJydXB0O1xuc2VsZWN0aW9uLnByb3RvdHlwZS50cmFuc2l0aW9uID0gc2VsZWN0aW9uX3RyYW5zaXRpb247XG4iLCJpbXBvcnQgaW50ZXJydXB0IGZyb20gXCIuLi9pbnRlcnJ1cHQuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSkge1xuICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkge1xuICAgIGludGVycnVwdCh0aGlzLCBuYW1lKTtcbiAgfSk7XG59XG4iLCJpbXBvcnQge1NUQVJUSU5HLCBFTkRJTkcsIEVOREVEfSBmcm9tIFwiLi90cmFuc2l0aW9uL3NjaGVkdWxlLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5vZGUsIG5hbWUpIHtcbiAgdmFyIHNjaGVkdWxlcyA9IG5vZGUuX190cmFuc2l0aW9uLFxuICAgICAgc2NoZWR1bGUsXG4gICAgICBhY3RpdmUsXG4gICAgICBlbXB0eSA9IHRydWUsXG4gICAgICBpO1xuXG4gIGlmICghc2NoZWR1bGVzKSByZXR1cm47XG5cbiAgbmFtZSA9IG5hbWUgPT0gbnVsbCA/IG51bGwgOiBuYW1lICsgXCJcIjtcblxuICBmb3IgKGkgaW4gc2NoZWR1bGVzKSB7XG4gICAgaWYgKChzY2hlZHVsZSA9IHNjaGVkdWxlc1tpXSkubmFtZSAhPT0gbmFtZSkgeyBlbXB0eSA9IGZhbHNlOyBjb250aW51ZTsgfVxuICAgIGFjdGl2ZSA9IHNjaGVkdWxlLnN0YXRlID4gU1RBUlRJTkcgJiYgc2NoZWR1bGUuc3RhdGUgPCBFTkRJTkc7XG4gICAgc2NoZWR1bGUuc3RhdGUgPSBFTkRFRDtcbiAgICBzY2hlZHVsZS50aW1lci5zdG9wKCk7XG4gICAgc2NoZWR1bGUub24uY2FsbChhY3RpdmUgPyBcImludGVycnVwdFwiIDogXCJjYW5jZWxcIiwgbm9kZSwgbm9kZS5fX2RhdGFfXywgc2NoZWR1bGUuaW5kZXgsIHNjaGVkdWxlLmdyb3VwKTtcbiAgICBkZWxldGUgc2NoZWR1bGVzW2ldO1xuICB9XG5cbiAgaWYgKGVtcHR5KSBkZWxldGUgbm9kZS5fX3RyYW5zaXRpb247XG59XG4iLCJjb25zdCBwaSA9IE1hdGguUEksXG4gICAgdGF1ID0gMiAqIHBpLFxuICAgIGVwc2lsb24gPSAxZS02LFxuICAgIHRhdUVwc2lsb24gPSB0YXUgLSBlcHNpbG9uO1xuXG5mdW5jdGlvbiBhcHBlbmQoc3RyaW5ncykge1xuICB0aGlzLl8gKz0gc3RyaW5nc1swXTtcbiAgZm9yIChsZXQgaSA9IDEsIG4gPSBzdHJpbmdzLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgIHRoaXMuXyArPSBhcmd1bWVudHNbaV0gKyBzdHJpbmdzW2ldO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFwcGVuZFJvdW5kKGRpZ2l0cykge1xuICBsZXQgZCA9IE1hdGguZmxvb3IoZGlnaXRzKTtcbiAgaWYgKCEoZCA+PSAwKSkgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIGRpZ2l0czogJHtkaWdpdHN9YCk7XG4gIGlmIChkID4gMTUpIHJldHVybiBhcHBlbmQ7XG4gIGNvbnN0IGsgPSAxMCAqKiBkO1xuICByZXR1cm4gZnVuY3Rpb24oc3RyaW5ncykge1xuICAgIHRoaXMuXyArPSBzdHJpbmdzWzBdO1xuICAgIGZvciAobGV0IGkgPSAxLCBuID0gc3RyaW5ncy5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICAgIHRoaXMuXyArPSBNYXRoLnJvdW5kKGFyZ3VtZW50c1tpXSAqIGspIC8gayArIHN0cmluZ3NbaV07XG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgY2xhc3MgUGF0aCB7XG4gIGNvbnN0cnVjdG9yKGRpZ2l0cykge1xuICAgIHRoaXMuX3gwID0gdGhpcy5feTAgPSAvLyBzdGFydCBvZiBjdXJyZW50IHN1YnBhdGhcbiAgICB0aGlzLl94MSA9IHRoaXMuX3kxID0gbnVsbDsgLy8gZW5kIG9mIGN1cnJlbnQgc3VicGF0aFxuICAgIHRoaXMuXyA9IFwiXCI7XG4gICAgdGhpcy5fYXBwZW5kID0gZGlnaXRzID09IG51bGwgPyBhcHBlbmQgOiBhcHBlbmRSb3VuZChkaWdpdHMpO1xuICB9XG4gIG1vdmVUbyh4LCB5KSB7XG4gICAgdGhpcy5fYXBwZW5kYE0ke3RoaXMuX3gwID0gdGhpcy5feDEgPSAreH0sJHt0aGlzLl95MCA9IHRoaXMuX3kxID0gK3l9YDtcbiAgfVxuICBjbG9zZVBhdGgoKSB7XG4gICAgaWYgKHRoaXMuX3gxICE9PSBudWxsKSB7XG4gICAgICB0aGlzLl94MSA9IHRoaXMuX3gwLCB0aGlzLl95MSA9IHRoaXMuX3kwO1xuICAgICAgdGhpcy5fYXBwZW5kYFpgO1xuICAgIH1cbiAgfVxuICBsaW5lVG8oeCwgeSkge1xuICAgIHRoaXMuX2FwcGVuZGBMJHt0aGlzLl94MSA9ICt4fSwke3RoaXMuX3kxID0gK3l9YDtcbiAgfVxuICBxdWFkcmF0aWNDdXJ2ZVRvKHgxLCB5MSwgeCwgeSkge1xuICAgIHRoaXMuX2FwcGVuZGBRJHsreDF9LCR7K3kxfSwke3RoaXMuX3gxID0gK3h9LCR7dGhpcy5feTEgPSAreX1gO1xuICB9XG4gIGJlemllckN1cnZlVG8oeDEsIHkxLCB4MiwgeTIsIHgsIHkpIHtcbiAgICB0aGlzLl9hcHBlbmRgQyR7K3gxfSwkeyt5MX0sJHsreDJ9LCR7K3kyfSwke3RoaXMuX3gxID0gK3h9LCR7dGhpcy5feTEgPSAreX1gO1xuICB9XG4gIGFyY1RvKHgxLCB5MSwgeDIsIHkyLCByKSB7XG4gICAgeDEgPSAreDEsIHkxID0gK3kxLCB4MiA9ICt4MiwgeTIgPSAreTIsIHIgPSArcjtcblxuICAgIC8vIElzIHRoZSByYWRpdXMgbmVnYXRpdmU/IEVycm9yLlxuICAgIGlmIChyIDwgMCkgdGhyb3cgbmV3IEVycm9yKGBuZWdhdGl2ZSByYWRpdXM6ICR7cn1gKTtcblxuICAgIGxldCB4MCA9IHRoaXMuX3gxLFxuICAgICAgICB5MCA9IHRoaXMuX3kxLFxuICAgICAgICB4MjEgPSB4MiAtIHgxLFxuICAgICAgICB5MjEgPSB5MiAtIHkxLFxuICAgICAgICB4MDEgPSB4MCAtIHgxLFxuICAgICAgICB5MDEgPSB5MCAtIHkxLFxuICAgICAgICBsMDFfMiA9IHgwMSAqIHgwMSArIHkwMSAqIHkwMTtcblxuICAgIC8vIElzIHRoaXMgcGF0aCBlbXB0eT8gTW92ZSB0byAoeDEseTEpLlxuICAgIGlmICh0aGlzLl94MSA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5fYXBwZW5kYE0ke3RoaXMuX3gxID0geDF9LCR7dGhpcy5feTEgPSB5MX1gO1xuICAgIH1cblxuICAgIC8vIE9yLCBpcyAoeDEseTEpIGNvaW5jaWRlbnQgd2l0aCAoeDAseTApPyBEbyBub3RoaW5nLlxuICAgIGVsc2UgaWYgKCEobDAxXzIgPiBlcHNpbG9uKSk7XG5cbiAgICAvLyBPciwgYXJlICh4MCx5MCksICh4MSx5MSkgYW5kICh4Mix5MikgY29sbGluZWFyP1xuICAgIC8vIEVxdWl2YWxlbnRseSwgaXMgKHgxLHkxKSBjb2luY2lkZW50IHdpdGggKHgyLHkyKT9cbiAgICAvLyBPciwgaXMgdGhlIHJhZGl1cyB6ZXJvPyBMaW5lIHRvICh4MSx5MSkuXG4gICAgZWxzZSBpZiAoIShNYXRoLmFicyh5MDEgKiB4MjEgLSB5MjEgKiB4MDEpID4gZXBzaWxvbikgfHwgIXIpIHtcbiAgICAgIHRoaXMuX2FwcGVuZGBMJHt0aGlzLl94MSA9IHgxfSwke3RoaXMuX3kxID0geTF9YDtcbiAgICB9XG5cbiAgICAvLyBPdGhlcndpc2UsIGRyYXcgYW4gYXJjIVxuICAgIGVsc2Uge1xuICAgICAgbGV0IHgyMCA9IHgyIC0geDAsXG4gICAgICAgICAgeTIwID0geTIgLSB5MCxcbiAgICAgICAgICBsMjFfMiA9IHgyMSAqIHgyMSArIHkyMSAqIHkyMSxcbiAgICAgICAgICBsMjBfMiA9IHgyMCAqIHgyMCArIHkyMCAqIHkyMCxcbiAgICAgICAgICBsMjEgPSBNYXRoLnNxcnQobDIxXzIpLFxuICAgICAgICAgIGwwMSA9IE1hdGguc3FydChsMDFfMiksXG4gICAgICAgICAgbCA9IHIgKiBNYXRoLnRhbigocGkgLSBNYXRoLmFjb3MoKGwyMV8yICsgbDAxXzIgLSBsMjBfMikgLyAoMiAqIGwyMSAqIGwwMSkpKSAvIDIpLFxuICAgICAgICAgIHQwMSA9IGwgLyBsMDEsXG4gICAgICAgICAgdDIxID0gbCAvIGwyMTtcblxuICAgICAgLy8gSWYgdGhlIHN0YXJ0IHRhbmdlbnQgaXMgbm90IGNvaW5jaWRlbnQgd2l0aCAoeDAseTApLCBsaW5lIHRvLlxuICAgICAgaWYgKE1hdGguYWJzKHQwMSAtIDEpID4gZXBzaWxvbikge1xuICAgICAgICB0aGlzLl9hcHBlbmRgTCR7eDEgKyB0MDEgKiB4MDF9LCR7eTEgKyB0MDEgKiB5MDF9YDtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fYXBwZW5kYEEke3J9LCR7cn0sMCwwLCR7Kyh5MDEgKiB4MjAgPiB4MDEgKiB5MjApfSwke3RoaXMuX3gxID0geDEgKyB0MjEgKiB4MjF9LCR7dGhpcy5feTEgPSB5MSArIHQyMSAqIHkyMX1gO1xuICAgIH1cbiAgfVxuICBhcmMoeCwgeSwgciwgYTAsIGExLCBjY3cpIHtcbiAgICB4ID0gK3gsIHkgPSAreSwgciA9ICtyLCBjY3cgPSAhIWNjdztcblxuICAgIC8vIElzIHRoZSByYWRpdXMgbmVnYXRpdmU/IEVycm9yLlxuICAgIGlmIChyIDwgMCkgdGhyb3cgbmV3IEVycm9yKGBuZWdhdGl2ZSByYWRpdXM6ICR7cn1gKTtcblxuICAgIGxldCBkeCA9IHIgKiBNYXRoLmNvcyhhMCksXG4gICAgICAgIGR5ID0gciAqIE1hdGguc2luKGEwKSxcbiAgICAgICAgeDAgPSB4ICsgZHgsXG4gICAgICAgIHkwID0geSArIGR5LFxuICAgICAgICBjdyA9IDEgXiBjY3csXG4gICAgICAgIGRhID0gY2N3ID8gYTAgLSBhMSA6IGExIC0gYTA7XG5cbiAgICAvLyBJcyB0aGlzIHBhdGggZW1wdHk/IE1vdmUgdG8gKHgwLHkwKS5cbiAgICBpZiAodGhpcy5feDEgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuX2FwcGVuZGBNJHt4MH0sJHt5MH1gO1xuICAgIH1cblxuICAgIC8vIE9yLCBpcyAoeDAseTApIG5vdCBjb2luY2lkZW50IHdpdGggdGhlIHByZXZpb3VzIHBvaW50PyBMaW5lIHRvICh4MCx5MCkuXG4gICAgZWxzZSBpZiAoTWF0aC5hYnModGhpcy5feDEgLSB4MCkgPiBlcHNpbG9uIHx8IE1hdGguYWJzKHRoaXMuX3kxIC0geTApID4gZXBzaWxvbikge1xuICAgICAgdGhpcy5fYXBwZW5kYEwke3gwfSwke3kwfWA7XG4gICAgfVxuXG4gICAgLy8gSXMgdGhpcyBhcmMgZW1wdHk/IFdl4oCZcmUgZG9uZS5cbiAgICBpZiAoIXIpIHJldHVybjtcblxuICAgIC8vIERvZXMgdGhlIGFuZ2xlIGdvIHRoZSB3cm9uZyB3YXk/IEZsaXAgdGhlIGRpcmVjdGlvbi5cbiAgICBpZiAoZGEgPCAwKSBkYSA9IGRhICUgdGF1ICsgdGF1O1xuXG4gICAgLy8gSXMgdGhpcyBhIGNvbXBsZXRlIGNpcmNsZT8gRHJhdyB0d28gYXJjcyB0byBjb21wbGV0ZSB0aGUgY2lyY2xlLlxuICAgIGlmIChkYSA+IHRhdUVwc2lsb24pIHtcbiAgICAgIHRoaXMuX2FwcGVuZGBBJHtyfSwke3J9LDAsMSwke2N3fSwke3ggLSBkeH0sJHt5IC0gZHl9QSR7cn0sJHtyfSwwLDEsJHtjd30sJHt0aGlzLl94MSA9IHgwfSwke3RoaXMuX3kxID0geTB9YDtcbiAgICB9XG5cbiAgICAvLyBJcyB0aGlzIGFyYyBub24tZW1wdHk/IERyYXcgYW4gYXJjIVxuICAgIGVsc2UgaWYgKGRhID4gZXBzaWxvbikge1xuICAgICAgdGhpcy5fYXBwZW5kYEEke3J9LCR7cn0sMCwkeysoZGEgPj0gcGkpfSwke2N3fSwke3RoaXMuX3gxID0geCArIHIgKiBNYXRoLmNvcyhhMSl9LCR7dGhpcy5feTEgPSB5ICsgciAqIE1hdGguc2luKGExKX1gO1xuICAgIH1cbiAgfVxuICByZWN0KHgsIHksIHcsIGgpIHtcbiAgICB0aGlzLl9hcHBlbmRgTSR7dGhpcy5feDAgPSB0aGlzLl94MSA9ICt4fSwke3RoaXMuX3kwID0gdGhpcy5feTEgPSAreX1oJHt3ID0gK3d9diR7K2h9aCR7LXd9WmA7XG4gIH1cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuXztcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0aCgpIHtcbiAgcmV0dXJuIG5ldyBQYXRoO1xufVxuXG4vLyBBbGxvdyBpbnN0YW5jZW9mIGQzLnBhdGhcbnBhdGgucHJvdG90eXBlID0gUGF0aC5wcm90b3R5cGU7XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRoUm91bmQoZGlnaXRzID0gMykge1xuICByZXR1cm4gbmV3IFBhdGgoK2RpZ2l0cyk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiBNYXRoLmFicyh4ID0gTWF0aC5yb3VuZCh4KSkgPj0gMWUyMVxuICAgICAgPyB4LnRvTG9jYWxlU3RyaW5nKFwiZW5cIikucmVwbGFjZSgvLC9nLCBcIlwiKVxuICAgICAgOiB4LnRvU3RyaW5nKDEwKTtcbn1cblxuLy8gQ29tcHV0ZXMgdGhlIGRlY2ltYWwgY29lZmZpY2llbnQgYW5kIGV4cG9uZW50IG9mIHRoZSBzcGVjaWZpZWQgbnVtYmVyIHggd2l0aFxuLy8gc2lnbmlmaWNhbnQgZGlnaXRzIHAsIHdoZXJlIHggaXMgcG9zaXRpdmUgYW5kIHAgaXMgaW4gWzEsIDIxXSBvciB1bmRlZmluZWQuXG4vLyBGb3IgZXhhbXBsZSwgZm9ybWF0RGVjaW1hbFBhcnRzKDEuMjMpIHJldHVybnMgW1wiMTIzXCIsIDBdLlxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdERlY2ltYWxQYXJ0cyh4LCBwKSB7XG4gIGlmICgoaSA9ICh4ID0gcCA/IHgudG9FeHBvbmVudGlhbChwIC0gMSkgOiB4LnRvRXhwb25lbnRpYWwoKSkuaW5kZXhPZihcImVcIikpIDwgMCkgcmV0dXJuIG51bGw7IC8vIE5hTiwgwrFJbmZpbml0eVxuICB2YXIgaSwgY29lZmZpY2llbnQgPSB4LnNsaWNlKDAsIGkpO1xuXG4gIC8vIFRoZSBzdHJpbmcgcmV0dXJuZWQgYnkgdG9FeHBvbmVudGlhbCBlaXRoZXIgaGFzIHRoZSBmb3JtIFxcZFxcLlxcZCtlWy0rXVxcZCtcbiAgLy8gKGUuZy4sIDEuMmUrMykgb3IgdGhlIGZvcm0gXFxkZVstK11cXGQrIChlLmcuLCAxZSszKS5cbiAgcmV0dXJuIFtcbiAgICBjb2VmZmljaWVudC5sZW5ndGggPiAxID8gY29lZmZpY2llbnRbMF0gKyBjb2VmZmljaWVudC5zbGljZSgyKSA6IGNvZWZmaWNpZW50LFxuICAgICt4LnNsaWNlKGkgKyAxKVxuICBdO1xufVxuIiwiaW1wb3J0IHtmb3JtYXREZWNpbWFsUGFydHN9IGZyb20gXCIuL2Zvcm1hdERlY2ltYWwuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4geCA9IGZvcm1hdERlY2ltYWxQYXJ0cyhNYXRoLmFicyh4KSksIHggPyB4WzFdIDogTmFOO1xufVxuIiwiLy8gW1tmaWxsXWFsaWduXVtzaWduXVtzeW1ib2xdWzBdW3dpZHRoXVssXVsucHJlY2lzaW9uXVt+XVt0eXBlXVxudmFyIHJlID0gL14oPzooLik/KFs8Pj1eXSkpPyhbK1xcLSggXSk/KFskI10pPygwKT8oXFxkKyk/KCwpPyhcXC5cXGQrKT8ofik/KFthLXolXSk/JC9pO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmb3JtYXRTcGVjaWZpZXIoc3BlY2lmaWVyKSB7XG4gIGlmICghKG1hdGNoID0gcmUuZXhlYyhzcGVjaWZpZXIpKSkgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBmb3JtYXQ6IFwiICsgc3BlY2lmaWVyKTtcbiAgdmFyIG1hdGNoO1xuICByZXR1cm4gbmV3IEZvcm1hdFNwZWNpZmllcih7XG4gICAgZmlsbDogbWF0Y2hbMV0sXG4gICAgYWxpZ246IG1hdGNoWzJdLFxuICAgIHNpZ246IG1hdGNoWzNdLFxuICAgIHN5bWJvbDogbWF0Y2hbNF0sXG4gICAgemVybzogbWF0Y2hbNV0sXG4gICAgd2lkdGg6IG1hdGNoWzZdLFxuICAgIGNvbW1hOiBtYXRjaFs3XSxcbiAgICBwcmVjaXNpb246IG1hdGNoWzhdICYmIG1hdGNoWzhdLnNsaWNlKDEpLFxuICAgIHRyaW06IG1hdGNoWzldLFxuICAgIHR5cGU6IG1hdGNoWzEwXVxuICB9KTtcbn1cblxuZm9ybWF0U3BlY2lmaWVyLnByb3RvdHlwZSA9IEZvcm1hdFNwZWNpZmllci5wcm90b3R5cGU7IC8vIGluc3RhbmNlb2ZcblxuZXhwb3J0IGZ1bmN0aW9uIEZvcm1hdFNwZWNpZmllcihzcGVjaWZpZXIpIHtcbiAgdGhpcy5maWxsID0gc3BlY2lmaWVyLmZpbGwgPT09IHVuZGVmaW5lZCA/IFwiIFwiIDogc3BlY2lmaWVyLmZpbGwgKyBcIlwiO1xuICB0aGlzLmFsaWduID0gc3BlY2lmaWVyLmFsaWduID09PSB1bmRlZmluZWQgPyBcIj5cIiA6IHNwZWNpZmllci5hbGlnbiArIFwiXCI7XG4gIHRoaXMuc2lnbiA9IHNwZWNpZmllci5zaWduID09PSB1bmRlZmluZWQgPyBcIi1cIiA6IHNwZWNpZmllci5zaWduICsgXCJcIjtcbiAgdGhpcy5zeW1ib2wgPSBzcGVjaWZpZXIuc3ltYm9sID09PSB1bmRlZmluZWQgPyBcIlwiIDogc3BlY2lmaWVyLnN5bWJvbCArIFwiXCI7XG4gIHRoaXMuemVybyA9ICEhc3BlY2lmaWVyLnplcm87XG4gIHRoaXMud2lkdGggPSBzcGVjaWZpZXIud2lkdGggPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6ICtzcGVjaWZpZXIud2lkdGg7XG4gIHRoaXMuY29tbWEgPSAhIXNwZWNpZmllci5jb21tYTtcbiAgdGhpcy5wcmVjaXNpb24gPSBzcGVjaWZpZXIucHJlY2lzaW9uID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiArc3BlY2lmaWVyLnByZWNpc2lvbjtcbiAgdGhpcy50cmltID0gISFzcGVjaWZpZXIudHJpbTtcbiAgdGhpcy50eXBlID0gc3BlY2lmaWVyLnR5cGUgPT09IHVuZGVmaW5lZCA/IFwiXCIgOiBzcGVjaWZpZXIudHlwZSArIFwiXCI7XG59XG5cbkZvcm1hdFNwZWNpZmllci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZmlsbFxuICAgICAgKyB0aGlzLmFsaWduXG4gICAgICArIHRoaXMuc2lnblxuICAgICAgKyB0aGlzLnN5bWJvbFxuICAgICAgKyAodGhpcy56ZXJvID8gXCIwXCIgOiBcIlwiKVxuICAgICAgKyAodGhpcy53aWR0aCA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IE1hdGgubWF4KDEsIHRoaXMud2lkdGggfCAwKSlcbiAgICAgICsgKHRoaXMuY29tbWEgPyBcIixcIiA6IFwiXCIpXG4gICAgICArICh0aGlzLnByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IFwiLlwiICsgTWF0aC5tYXgoMCwgdGhpcy5wcmVjaXNpb24gfCAwKSlcbiAgICAgICsgKHRoaXMudHJpbSA/IFwiflwiIDogXCJcIilcbiAgICAgICsgdGhpcy50eXBlO1xufTtcbiIsImltcG9ydCB7Zm9ybWF0RGVjaW1hbFBhcnRzfSBmcm9tIFwiLi9mb3JtYXREZWNpbWFsLmpzXCI7XG5cbmV4cG9ydCB2YXIgcHJlZml4RXhwb25lbnQ7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgsIHApIHtcbiAgdmFyIGQgPSBmb3JtYXREZWNpbWFsUGFydHMoeCwgcCk7XG4gIGlmICghZCkgcmV0dXJuIHggKyBcIlwiO1xuICB2YXIgY29lZmZpY2llbnQgPSBkWzBdLFxuICAgICAgZXhwb25lbnQgPSBkWzFdLFxuICAgICAgaSA9IGV4cG9uZW50IC0gKHByZWZpeEV4cG9uZW50ID0gTWF0aC5tYXgoLTgsIE1hdGgubWluKDgsIE1hdGguZmxvb3IoZXhwb25lbnQgLyAzKSkpICogMykgKyAxLFxuICAgICAgbiA9IGNvZWZmaWNpZW50Lmxlbmd0aDtcbiAgcmV0dXJuIGkgPT09IG4gPyBjb2VmZmljaWVudFxuICAgICAgOiBpID4gbiA/IGNvZWZmaWNpZW50ICsgbmV3IEFycmF5KGkgLSBuICsgMSkuam9pbihcIjBcIilcbiAgICAgIDogaSA+IDAgPyBjb2VmZmljaWVudC5zbGljZSgwLCBpKSArIFwiLlwiICsgY29lZmZpY2llbnQuc2xpY2UoaSlcbiAgICAgIDogXCIwLlwiICsgbmV3IEFycmF5KDEgLSBpKS5qb2luKFwiMFwiKSArIGZvcm1hdERlY2ltYWxQYXJ0cyh4LCBNYXRoLm1heCgwLCBwICsgaSAtIDEpKVswXTsgLy8gbGVzcyB0aGFuIDF5IVxufVxuIiwiaW1wb3J0IHtmb3JtYXREZWNpbWFsUGFydHN9IGZyb20gXCIuL2Zvcm1hdERlY2ltYWwuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCwgcCkge1xuICB2YXIgZCA9IGZvcm1hdERlY2ltYWxQYXJ0cyh4LCBwKTtcbiAgaWYgKCFkKSByZXR1cm4geCArIFwiXCI7XG4gIHZhciBjb2VmZmljaWVudCA9IGRbMF0sXG4gICAgICBleHBvbmVudCA9IGRbMV07XG4gIHJldHVybiBleHBvbmVudCA8IDAgPyBcIjAuXCIgKyBuZXcgQXJyYXkoLWV4cG9uZW50KS5qb2luKFwiMFwiKSArIGNvZWZmaWNpZW50XG4gICAgICA6IGNvZWZmaWNpZW50Lmxlbmd0aCA+IGV4cG9uZW50ICsgMSA/IGNvZWZmaWNpZW50LnNsaWNlKDAsIGV4cG9uZW50ICsgMSkgKyBcIi5cIiArIGNvZWZmaWNpZW50LnNsaWNlKGV4cG9uZW50ICsgMSlcbiAgICAgIDogY29lZmZpY2llbnQgKyBuZXcgQXJyYXkoZXhwb25lbnQgLSBjb2VmZmljaWVudC5sZW5ndGggKyAyKS5qb2luKFwiMFwiKTtcbn1cbiIsImltcG9ydCBmb3JtYXREZWNpbWFsIGZyb20gXCIuL2Zvcm1hdERlY2ltYWwuanNcIjtcbmltcG9ydCBmb3JtYXRQcmVmaXhBdXRvIGZyb20gXCIuL2Zvcm1hdFByZWZpeEF1dG8uanNcIjtcbmltcG9ydCBmb3JtYXRSb3VuZGVkIGZyb20gXCIuL2Zvcm1hdFJvdW5kZWQuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBcIiVcIjogKHgsIHApID0+ICh4ICogMTAwKS50b0ZpeGVkKHApLFxuICBcImJcIjogKHgpID0+IE1hdGgucm91bmQoeCkudG9TdHJpbmcoMiksXG4gIFwiY1wiOiAoeCkgPT4geCArIFwiXCIsXG4gIFwiZFwiOiBmb3JtYXREZWNpbWFsLFxuICBcImVcIjogKHgsIHApID0+IHgudG9FeHBvbmVudGlhbChwKSxcbiAgXCJmXCI6ICh4LCBwKSA9PiB4LnRvRml4ZWQocCksXG4gIFwiZ1wiOiAoeCwgcCkgPT4geC50b1ByZWNpc2lvbihwKSxcbiAgXCJvXCI6ICh4KSA9PiBNYXRoLnJvdW5kKHgpLnRvU3RyaW5nKDgpLFxuICBcInBcIjogKHgsIHApID0+IGZvcm1hdFJvdW5kZWQoeCAqIDEwMCwgcCksXG4gIFwiclwiOiBmb3JtYXRSb3VuZGVkLFxuICBcInNcIjogZm9ybWF0UHJlZml4QXV0byxcbiAgXCJYXCI6ICh4KSA9PiBNYXRoLnJvdW5kKHgpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpLFxuICBcInhcIjogKHgpID0+IE1hdGgucm91bmQoeCkudG9TdHJpbmcoMTYpXG59O1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4geDtcbn1cbiIsImltcG9ydCBleHBvbmVudCBmcm9tIFwiLi9leHBvbmVudC5qc1wiO1xuaW1wb3J0IGZvcm1hdEdyb3VwIGZyb20gXCIuL2Zvcm1hdEdyb3VwLmpzXCI7XG5pbXBvcnQgZm9ybWF0TnVtZXJhbHMgZnJvbSBcIi4vZm9ybWF0TnVtZXJhbHMuanNcIjtcbmltcG9ydCBmb3JtYXRTcGVjaWZpZXIgZnJvbSBcIi4vZm9ybWF0U3BlY2lmaWVyLmpzXCI7XG5pbXBvcnQgZm9ybWF0VHJpbSBmcm9tIFwiLi9mb3JtYXRUcmltLmpzXCI7XG5pbXBvcnQgZm9ybWF0VHlwZXMgZnJvbSBcIi4vZm9ybWF0VHlwZXMuanNcIjtcbmltcG9ydCB7cHJlZml4RXhwb25lbnR9IGZyb20gXCIuL2Zvcm1hdFByZWZpeEF1dG8uanNcIjtcbmltcG9ydCBpZGVudGl0eSBmcm9tIFwiLi9pZGVudGl0eS5qc1wiO1xuXG52YXIgbWFwID0gQXJyYXkucHJvdG90eXBlLm1hcCxcbiAgICBwcmVmaXhlcyA9IFtcInlcIixcInpcIixcImFcIixcImZcIixcInBcIixcIm5cIixcIsK1XCIsXCJtXCIsXCJcIixcImtcIixcIk1cIixcIkdcIixcIlRcIixcIlBcIixcIkVcIixcIlpcIixcIllcIl07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGxvY2FsZSkge1xuICB2YXIgZ3JvdXAgPSBsb2NhbGUuZ3JvdXBpbmcgPT09IHVuZGVmaW5lZCB8fCBsb2NhbGUudGhvdXNhbmRzID09PSB1bmRlZmluZWQgPyBpZGVudGl0eSA6IGZvcm1hdEdyb3VwKG1hcC5jYWxsKGxvY2FsZS5ncm91cGluZywgTnVtYmVyKSwgbG9jYWxlLnRob3VzYW5kcyArIFwiXCIpLFxuICAgICAgY3VycmVuY3lQcmVmaXggPSBsb2NhbGUuY3VycmVuY3kgPT09IHVuZGVmaW5lZCA/IFwiXCIgOiBsb2NhbGUuY3VycmVuY3lbMF0gKyBcIlwiLFxuICAgICAgY3VycmVuY3lTdWZmaXggPSBsb2NhbGUuY3VycmVuY3kgPT09IHVuZGVmaW5lZCA/IFwiXCIgOiBsb2NhbGUuY3VycmVuY3lbMV0gKyBcIlwiLFxuICAgICAgZGVjaW1hbCA9IGxvY2FsZS5kZWNpbWFsID09PSB1bmRlZmluZWQgPyBcIi5cIiA6IGxvY2FsZS5kZWNpbWFsICsgXCJcIixcbiAgICAgIG51bWVyYWxzID0gbG9jYWxlLm51bWVyYWxzID09PSB1bmRlZmluZWQgPyBpZGVudGl0eSA6IGZvcm1hdE51bWVyYWxzKG1hcC5jYWxsKGxvY2FsZS5udW1lcmFscywgU3RyaW5nKSksXG4gICAgICBwZXJjZW50ID0gbG9jYWxlLnBlcmNlbnQgPT09IHVuZGVmaW5lZCA/IFwiJVwiIDogbG9jYWxlLnBlcmNlbnQgKyBcIlwiLFxuICAgICAgbWludXMgPSBsb2NhbGUubWludXMgPT09IHVuZGVmaW5lZCA/IFwi4oiSXCIgOiBsb2NhbGUubWludXMgKyBcIlwiLFxuICAgICAgbmFuID0gbG9jYWxlLm5hbiA9PT0gdW5kZWZpbmVkID8gXCJOYU5cIiA6IGxvY2FsZS5uYW4gKyBcIlwiO1xuXG4gIGZ1bmN0aW9uIG5ld0Zvcm1hdChzcGVjaWZpZXIpIHtcbiAgICBzcGVjaWZpZXIgPSBmb3JtYXRTcGVjaWZpZXIoc3BlY2lmaWVyKTtcblxuICAgIHZhciBmaWxsID0gc3BlY2lmaWVyLmZpbGwsXG4gICAgICAgIGFsaWduID0gc3BlY2lmaWVyLmFsaWduLFxuICAgICAgICBzaWduID0gc3BlY2lmaWVyLnNpZ24sXG4gICAgICAgIHN5bWJvbCA9IHNwZWNpZmllci5zeW1ib2wsXG4gICAgICAgIHplcm8gPSBzcGVjaWZpZXIuemVybyxcbiAgICAgICAgd2lkdGggPSBzcGVjaWZpZXIud2lkdGgsXG4gICAgICAgIGNvbW1hID0gc3BlY2lmaWVyLmNvbW1hLFxuICAgICAgICBwcmVjaXNpb24gPSBzcGVjaWZpZXIucHJlY2lzaW9uLFxuICAgICAgICB0cmltID0gc3BlY2lmaWVyLnRyaW0sXG4gICAgICAgIHR5cGUgPSBzcGVjaWZpZXIudHlwZTtcblxuICAgIC8vIFRoZSBcIm5cIiB0eXBlIGlzIGFuIGFsaWFzIGZvciBcIixnXCIuXG4gICAgaWYgKHR5cGUgPT09IFwiblwiKSBjb21tYSA9IHRydWUsIHR5cGUgPSBcImdcIjtcblxuICAgIC8vIFRoZSBcIlwiIHR5cGUsIGFuZCBhbnkgaW52YWxpZCB0eXBlLCBpcyBhbiBhbGlhcyBmb3IgXCIuMTJ+Z1wiLlxuICAgIGVsc2UgaWYgKCFmb3JtYXRUeXBlc1t0eXBlXSkgcHJlY2lzaW9uID09PSB1bmRlZmluZWQgJiYgKHByZWNpc2lvbiA9IDEyKSwgdHJpbSA9IHRydWUsIHR5cGUgPSBcImdcIjtcblxuICAgIC8vIElmIHplcm8gZmlsbCBpcyBzcGVjaWZpZWQsIHBhZGRpbmcgZ29lcyBhZnRlciBzaWduIGFuZCBiZWZvcmUgZGlnaXRzLlxuICAgIGlmICh6ZXJvIHx8IChmaWxsID09PSBcIjBcIiAmJiBhbGlnbiA9PT0gXCI9XCIpKSB6ZXJvID0gdHJ1ZSwgZmlsbCA9IFwiMFwiLCBhbGlnbiA9IFwiPVwiO1xuXG4gICAgLy8gQ29tcHV0ZSB0aGUgcHJlZml4IGFuZCBzdWZmaXguXG4gICAgLy8gRm9yIFNJLXByZWZpeCwgdGhlIHN1ZmZpeCBpcyBsYXppbHkgY29tcHV0ZWQuXG4gICAgdmFyIHByZWZpeCA9IHN5bWJvbCA9PT0gXCIkXCIgPyBjdXJyZW5jeVByZWZpeCA6IHN5bWJvbCA9PT0gXCIjXCIgJiYgL1tib3hYXS8udGVzdCh0eXBlKSA/IFwiMFwiICsgdHlwZS50b0xvd2VyQ2FzZSgpIDogXCJcIixcbiAgICAgICAgc3VmZml4ID0gc3ltYm9sID09PSBcIiRcIiA/IGN1cnJlbmN5U3VmZml4IDogL1slcF0vLnRlc3QodHlwZSkgPyBwZXJjZW50IDogXCJcIjtcblxuICAgIC8vIFdoYXQgZm9ybWF0IGZ1bmN0aW9uIHNob3VsZCB3ZSB1c2U/XG4gICAgLy8gSXMgdGhpcyBhbiBpbnRlZ2VyIHR5cGU/XG4gICAgLy8gQ2FuIHRoaXMgdHlwZSBnZW5lcmF0ZSBleHBvbmVudGlhbCBub3RhdGlvbj9cbiAgICB2YXIgZm9ybWF0VHlwZSA9IGZvcm1hdFR5cGVzW3R5cGVdLFxuICAgICAgICBtYXliZVN1ZmZpeCA9IC9bZGVmZ3BycyVdLy50ZXN0KHR5cGUpO1xuXG4gICAgLy8gU2V0IHRoZSBkZWZhdWx0IHByZWNpc2lvbiBpZiBub3Qgc3BlY2lmaWVkLFxuICAgIC8vIG9yIGNsYW1wIHRoZSBzcGVjaWZpZWQgcHJlY2lzaW9uIHRvIHRoZSBzdXBwb3J0ZWQgcmFuZ2UuXG4gICAgLy8gRm9yIHNpZ25pZmljYW50IHByZWNpc2lvbiwgaXQgbXVzdCBiZSBpbiBbMSwgMjFdLlxuICAgIC8vIEZvciBmaXhlZCBwcmVjaXNpb24sIGl0IG11c3QgYmUgaW4gWzAsIDIwXS5cbiAgICBwcmVjaXNpb24gPSBwcmVjaXNpb24gPT09IHVuZGVmaW5lZCA/IDZcbiAgICAgICAgOiAvW2dwcnNdLy50ZXN0KHR5cGUpID8gTWF0aC5tYXgoMSwgTWF0aC5taW4oMjEsIHByZWNpc2lvbikpXG4gICAgICAgIDogTWF0aC5tYXgoMCwgTWF0aC5taW4oMjAsIHByZWNpc2lvbikpO1xuXG4gICAgZnVuY3Rpb24gZm9ybWF0KHZhbHVlKSB7XG4gICAgICB2YXIgdmFsdWVQcmVmaXggPSBwcmVmaXgsXG4gICAgICAgICAgdmFsdWVTdWZmaXggPSBzdWZmaXgsXG4gICAgICAgICAgaSwgbiwgYztcblxuICAgICAgaWYgKHR5cGUgPT09IFwiY1wiKSB7XG4gICAgICAgIHZhbHVlU3VmZml4ID0gZm9ybWF0VHlwZSh2YWx1ZSkgKyB2YWx1ZVN1ZmZpeDtcbiAgICAgICAgdmFsdWUgPSBcIlwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgPSArdmFsdWU7XG5cbiAgICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBzaWduLiAtMCBpcyBub3QgbGVzcyB0aGFuIDAsIGJ1dCAxIC8gLTAgaXMhXG4gICAgICAgIHZhciB2YWx1ZU5lZ2F0aXZlID0gdmFsdWUgPCAwIHx8IDEgLyB2YWx1ZSA8IDA7XG5cbiAgICAgICAgLy8gUGVyZm9ybSB0aGUgaW5pdGlhbCBmb3JtYXR0aW5nLlxuICAgICAgICB2YWx1ZSA9IGlzTmFOKHZhbHVlKSA/IG5hbiA6IGZvcm1hdFR5cGUoTWF0aC5hYnModmFsdWUpLCBwcmVjaXNpb24pO1xuXG4gICAgICAgIC8vIFRyaW0gaW5zaWduaWZpY2FudCB6ZXJvcy5cbiAgICAgICAgaWYgKHRyaW0pIHZhbHVlID0gZm9ybWF0VHJpbSh2YWx1ZSk7XG5cbiAgICAgICAgLy8gSWYgYSBuZWdhdGl2ZSB2YWx1ZSByb3VuZHMgdG8gemVybyBhZnRlciBmb3JtYXR0aW5nLCBhbmQgbm8gZXhwbGljaXQgcG9zaXRpdmUgc2lnbiBpcyByZXF1ZXN0ZWQsIGhpZGUgdGhlIHNpZ24uXG4gICAgICAgIGlmICh2YWx1ZU5lZ2F0aXZlICYmICt2YWx1ZSA9PT0gMCAmJiBzaWduICE9PSBcIitcIikgdmFsdWVOZWdhdGl2ZSA9IGZhbHNlO1xuXG4gICAgICAgIC8vIENvbXB1dGUgdGhlIHByZWZpeCBhbmQgc3VmZml4LlxuICAgICAgICB2YWx1ZVByZWZpeCA9ICh2YWx1ZU5lZ2F0aXZlID8gKHNpZ24gPT09IFwiKFwiID8gc2lnbiA6IG1pbnVzKSA6IHNpZ24gPT09IFwiLVwiIHx8IHNpZ24gPT09IFwiKFwiID8gXCJcIiA6IHNpZ24pICsgdmFsdWVQcmVmaXg7XG4gICAgICAgIHZhbHVlU3VmZml4ID0gKHR5cGUgPT09IFwic1wiID8gcHJlZml4ZXNbOCArIHByZWZpeEV4cG9uZW50IC8gM10gOiBcIlwiKSArIHZhbHVlU3VmZml4ICsgKHZhbHVlTmVnYXRpdmUgJiYgc2lnbiA9PT0gXCIoXCIgPyBcIilcIiA6IFwiXCIpO1xuXG4gICAgICAgIC8vIEJyZWFrIHRoZSBmb3JtYXR0ZWQgdmFsdWUgaW50byB0aGUgaW50ZWdlciDigJx2YWx1ZeKAnSBwYXJ0IHRoYXQgY2FuIGJlXG4gICAgICAgIC8vIGdyb3VwZWQsIGFuZCBmcmFjdGlvbmFsIG9yIGV4cG9uZW50aWFsIOKAnHN1ZmZpeOKAnSBwYXJ0IHRoYXQgaXMgbm90LlxuICAgICAgICBpZiAobWF5YmVTdWZmaXgpIHtcbiAgICAgICAgICBpID0gLTEsIG4gPSB2YWx1ZS5sZW5ndGg7XG4gICAgICAgICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgICAgICAgIGlmIChjID0gdmFsdWUuY2hhckNvZGVBdChpKSwgNDggPiBjIHx8IGMgPiA1Nykge1xuICAgICAgICAgICAgICB2YWx1ZVN1ZmZpeCA9IChjID09PSA0NiA/IGRlY2ltYWwgKyB2YWx1ZS5zbGljZShpICsgMSkgOiB2YWx1ZS5zbGljZShpKSkgKyB2YWx1ZVN1ZmZpeDtcbiAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zbGljZSgwLCBpKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHRoZSBmaWxsIGNoYXJhY3RlciBpcyBub3QgXCIwXCIsIGdyb3VwaW5nIGlzIGFwcGxpZWQgYmVmb3JlIHBhZGRpbmcuXG4gICAgICBpZiAoY29tbWEgJiYgIXplcm8pIHZhbHVlID0gZ3JvdXAodmFsdWUsIEluZmluaXR5KTtcblxuICAgICAgLy8gQ29tcHV0ZSB0aGUgcGFkZGluZy5cbiAgICAgIHZhciBsZW5ndGggPSB2YWx1ZVByZWZpeC5sZW5ndGggKyB2YWx1ZS5sZW5ndGggKyB2YWx1ZVN1ZmZpeC5sZW5ndGgsXG4gICAgICAgICAgcGFkZGluZyA9IGxlbmd0aCA8IHdpZHRoID8gbmV3IEFycmF5KHdpZHRoIC0gbGVuZ3RoICsgMSkuam9pbihmaWxsKSA6IFwiXCI7XG5cbiAgICAgIC8vIElmIHRoZSBmaWxsIGNoYXJhY3RlciBpcyBcIjBcIiwgZ3JvdXBpbmcgaXMgYXBwbGllZCBhZnRlciBwYWRkaW5nLlxuICAgICAgaWYgKGNvbW1hICYmIHplcm8pIHZhbHVlID0gZ3JvdXAocGFkZGluZyArIHZhbHVlLCBwYWRkaW5nLmxlbmd0aCA/IHdpZHRoIC0gdmFsdWVTdWZmaXgubGVuZ3RoIDogSW5maW5pdHkpLCBwYWRkaW5nID0gXCJcIjtcblxuICAgICAgLy8gUmVjb25zdHJ1Y3QgdGhlIGZpbmFsIG91dHB1dCBiYXNlZCBvbiB0aGUgZGVzaXJlZCBhbGlnbm1lbnQuXG4gICAgICBzd2l0Y2ggKGFsaWduKSB7XG4gICAgICAgIGNhc2UgXCI8XCI6IHZhbHVlID0gdmFsdWVQcmVmaXggKyB2YWx1ZSArIHZhbHVlU3VmZml4ICsgcGFkZGluZzsgYnJlYWs7XG4gICAgICAgIGNhc2UgXCI9XCI6IHZhbHVlID0gdmFsdWVQcmVmaXggKyBwYWRkaW5nICsgdmFsdWUgKyB2YWx1ZVN1ZmZpeDsgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJeXCI6IHZhbHVlID0gcGFkZGluZy5zbGljZSgwLCBsZW5ndGggPSBwYWRkaW5nLmxlbmd0aCA+PiAxKSArIHZhbHVlUHJlZml4ICsgdmFsdWUgKyB2YWx1ZVN1ZmZpeCArIHBhZGRpbmcuc2xpY2UobGVuZ3RoKTsgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6IHZhbHVlID0gcGFkZGluZyArIHZhbHVlUHJlZml4ICsgdmFsdWUgKyB2YWx1ZVN1ZmZpeDsgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudW1lcmFscyh2YWx1ZSk7XG4gICAgfVxuXG4gICAgZm9ybWF0LnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gc3BlY2lmaWVyICsgXCJcIjtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGZvcm1hdDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFByZWZpeChzcGVjaWZpZXIsIHZhbHVlKSB7XG4gICAgdmFyIGYgPSBuZXdGb3JtYXQoKHNwZWNpZmllciA9IGZvcm1hdFNwZWNpZmllcihzcGVjaWZpZXIpLCBzcGVjaWZpZXIudHlwZSA9IFwiZlwiLCBzcGVjaWZpZXIpKSxcbiAgICAgICAgZSA9IE1hdGgubWF4KC04LCBNYXRoLm1pbig4LCBNYXRoLmZsb29yKGV4cG9uZW50KHZhbHVlKSAvIDMpKSkgKiAzLFxuICAgICAgICBrID0gTWF0aC5wb3coMTAsIC1lKSxcbiAgICAgICAgcHJlZml4ID0gcHJlZml4ZXNbOCArIGUgLyAzXTtcbiAgICByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHJldHVybiBmKGsgKiB2YWx1ZSkgKyBwcmVmaXg7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZm9ybWF0OiBuZXdGb3JtYXQsXG4gICAgZm9ybWF0UHJlZml4OiBmb3JtYXRQcmVmaXhcbiAgfTtcbn1cbiIsImltcG9ydCBmb3JtYXRMb2NhbGUgZnJvbSBcIi4vbG9jYWxlLmpzXCI7XG5cbnZhciBsb2NhbGU7XG5leHBvcnQgdmFyIGZvcm1hdDtcbmV4cG9ydCB2YXIgZm9ybWF0UHJlZml4O1xuXG5kZWZhdWx0TG9jYWxlKHtcbiAgdGhvdXNhbmRzOiBcIixcIixcbiAgZ3JvdXBpbmc6IFszXSxcbiAgY3VycmVuY3k6IFtcIiRcIiwgXCJcIl1cbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkZWZhdWx0TG9jYWxlKGRlZmluaXRpb24pIHtcbiAgbG9jYWxlID0gZm9ybWF0TG9jYWxlKGRlZmluaXRpb24pO1xuICBmb3JtYXQgPSBsb2NhbGUuZm9ybWF0O1xuICBmb3JtYXRQcmVmaXggPSBsb2NhbGUuZm9ybWF0UHJlZml4O1xuICByZXR1cm4gbG9jYWxlO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oZ3JvdXBpbmcsIHRob3VzYW5kcykge1xuICByZXR1cm4gZnVuY3Rpb24odmFsdWUsIHdpZHRoKSB7XG4gICAgdmFyIGkgPSB2YWx1ZS5sZW5ndGgsXG4gICAgICAgIHQgPSBbXSxcbiAgICAgICAgaiA9IDAsXG4gICAgICAgIGcgPSBncm91cGluZ1swXSxcbiAgICAgICAgbGVuZ3RoID0gMDtcblxuICAgIHdoaWxlIChpID4gMCAmJiBnID4gMCkge1xuICAgICAgaWYgKGxlbmd0aCArIGcgKyAxID4gd2lkdGgpIGcgPSBNYXRoLm1heCgxLCB3aWR0aCAtIGxlbmd0aCk7XG4gICAgICB0LnB1c2godmFsdWUuc3Vic3RyaW5nKGkgLT0gZywgaSArIGcpKTtcbiAgICAgIGlmICgobGVuZ3RoICs9IGcgKyAxKSA+IHdpZHRoKSBicmVhaztcbiAgICAgIGcgPSBncm91cGluZ1tqID0gKGogKyAxKSAlIGdyb3VwaW5nLmxlbmd0aF07XG4gICAgfVxuXG4gICAgcmV0dXJuIHQucmV2ZXJzZSgpLmpvaW4odGhvdXNhbmRzKTtcbiAgfTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG51bWVyYWxzKSB7XG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKC9bMC05XS9nLCBmdW5jdGlvbihpKSB7XG4gICAgICByZXR1cm4gbnVtZXJhbHNbK2ldO1xuICAgIH0pO1xuICB9O1xufVxuIiwiLy8gVHJpbXMgaW5zaWduaWZpY2FudCB6ZXJvcywgZS5nLiwgcmVwbGFjZXMgMS4yMDAwayB3aXRoIDEuMmsuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzKSB7XG4gIG91dDogZm9yICh2YXIgbiA9IHMubGVuZ3RoLCBpID0gMSwgaTAgPSAtMSwgaTE7IGkgPCBuOyArK2kpIHtcbiAgICBzd2l0Y2ggKHNbaV0pIHtcbiAgICAgIGNhc2UgXCIuXCI6IGkwID0gaTEgPSBpOyBicmVhaztcbiAgICAgIGNhc2UgXCIwXCI6IGlmIChpMCA9PT0gMCkgaTAgPSBpOyBpMSA9IGk7IGJyZWFrO1xuICAgICAgZGVmYXVsdDogaWYgKCErc1tpXSkgYnJlYWsgb3V0OyBpZiAoaTAgPiAwKSBpMCA9IDA7IGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gaTAgPiAwID8gcy5zbGljZSgwLCBpMCkgKyBzLnNsaWNlKGkxICsgMSkgOiBzO1xufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIGluaXRSYW5nZShkb21haW4sIHJhbmdlKSB7XG4gIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgIGNhc2UgMDogYnJlYWs7XG4gICAgY2FzZSAxOiB0aGlzLnJhbmdlKGRvbWFpbik7IGJyZWFrO1xuICAgIGRlZmF1bHQ6IHRoaXMucmFuZ2UocmFuZ2UpLmRvbWFpbihkb21haW4pOyBicmVhaztcbiAgfVxuICByZXR1cm4gdGhpcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRJbnRlcnBvbGF0b3IoZG9tYWluLCBpbnRlcnBvbGF0b3IpIHtcbiAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgY2FzZSAwOiBicmVhaztcbiAgICBjYXNlIDE6IHtcbiAgICAgIGlmICh0eXBlb2YgZG9tYWluID09PSBcImZ1bmN0aW9uXCIpIHRoaXMuaW50ZXJwb2xhdG9yKGRvbWFpbik7XG4gICAgICBlbHNlIHRoaXMucmFuZ2UoZG9tYWluKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICB0aGlzLmRvbWFpbihkb21haW4pO1xuICAgICAgaWYgKHR5cGVvZiBpbnRlcnBvbGF0b3IgPT09IFwiZnVuY3Rpb25cIikgdGhpcy5pbnRlcnBvbGF0b3IoaW50ZXJwb2xhdG9yKTtcbiAgICAgIGVsc2UgdGhpcy5yYW5nZShpbnRlcnBvbGF0b3IpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiB0aGlzO1xufVxuIiwiaW1wb3J0IHtJbnRlcm5NYXB9IGZyb20gXCJkMy1hcnJheVwiO1xuaW1wb3J0IHtpbml0UmFuZ2V9IGZyb20gXCIuL2luaXQuanNcIjtcblxuZXhwb3J0IGNvbnN0IGltcGxpY2l0ID0gU3ltYm9sKFwiaW1wbGljaXRcIik7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG9yZGluYWwoKSB7XG4gIHZhciBpbmRleCA9IG5ldyBJbnRlcm5NYXAoKSxcbiAgICAgIGRvbWFpbiA9IFtdLFxuICAgICAgcmFuZ2UgPSBbXSxcbiAgICAgIHVua25vd24gPSBpbXBsaWNpdDtcblxuICBmdW5jdGlvbiBzY2FsZShkKSB7XG4gICAgbGV0IGkgPSBpbmRleC5nZXQoZCk7XG4gICAgaWYgKGkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHVua25vd24gIT09IGltcGxpY2l0KSByZXR1cm4gdW5rbm93bjtcbiAgICAgIGluZGV4LnNldChkLCBpID0gZG9tYWluLnB1c2goZCkgLSAxKTtcbiAgICB9XG4gICAgcmV0dXJuIHJhbmdlW2kgJSByYW5nZS5sZW5ndGhdO1xuICB9XG5cbiAgc2NhbGUuZG9tYWluID0gZnVuY3Rpb24oXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGRvbWFpbi5zbGljZSgpO1xuICAgIGRvbWFpbiA9IFtdLCBpbmRleCA9IG5ldyBJbnRlcm5NYXAoKTtcbiAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIF8pIHtcbiAgICAgIGlmIChpbmRleC5oYXModmFsdWUpKSBjb250aW51ZTtcbiAgICAgIGluZGV4LnNldCh2YWx1ZSwgZG9tYWluLnB1c2godmFsdWUpIC0gMSk7XG4gICAgfVxuICAgIHJldHVybiBzY2FsZTtcbiAgfTtcblxuICBzY2FsZS5yYW5nZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChyYW5nZSA9IEFycmF5LmZyb20oXyksIHNjYWxlKSA6IHJhbmdlLnNsaWNlKCk7XG4gIH07XG5cbiAgc2NhbGUudW5rbm93biA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh1bmtub3duID0gXywgc2NhbGUpIDogdW5rbm93bjtcbiAgfTtcblxuICBzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG9yZGluYWwoZG9tYWluLCByYW5nZSkudW5rbm93bih1bmtub3duKTtcbiAgfTtcblxuICBpbml0UmFuZ2UuYXBwbHkoc2NhbGUsIGFyZ3VtZW50cyk7XG5cbiAgcmV0dXJuIHNjYWxlO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbnVtYmVyKHgpIHtcbiAgcmV0dXJuICt4O1xufVxuIiwiaW1wb3J0IHtiaXNlY3R9IGZyb20gXCJkMy1hcnJheVwiO1xuaW1wb3J0IHtpbnRlcnBvbGF0ZSBhcyBpbnRlcnBvbGF0ZVZhbHVlLCBpbnRlcnBvbGF0ZU51bWJlciwgaW50ZXJwb2xhdGVSb3VuZH0gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnQuanNcIjtcbmltcG9ydCBudW1iZXIgZnJvbSBcIi4vbnVtYmVyLmpzXCI7XG5cbnZhciB1bml0ID0gWzAsIDFdO1xuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHkoeCkge1xuICByZXR1cm4geDtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplKGEsIGIpIHtcbiAgcmV0dXJuIChiIC09IChhID0gK2EpKVxuICAgICAgPyBmdW5jdGlvbih4KSB7IHJldHVybiAoeCAtIGEpIC8gYjsgfVxuICAgICAgOiBjb25zdGFudChpc05hTihiKSA/IE5hTiA6IDAuNSk7XG59XG5cbmZ1bmN0aW9uIGNsYW1wZXIoYSwgYikge1xuICB2YXIgdDtcbiAgaWYgKGEgPiBiKSB0ID0gYSwgYSA9IGIsIGIgPSB0O1xuICByZXR1cm4gZnVuY3Rpb24oeCkgeyByZXR1cm4gTWF0aC5tYXgoYSwgTWF0aC5taW4oYiwgeCkpOyB9O1xufVxuXG4vLyBub3JtYWxpemUoYSwgYikoeCkgdGFrZXMgYSBkb21haW4gdmFsdWUgeCBpbiBbYSxiXSBhbmQgcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyBwYXJhbWV0ZXIgdCBpbiBbMCwxXS5cbi8vIGludGVycG9sYXRlKGEsIGIpKHQpIHRha2VzIGEgcGFyYW1ldGVyIHQgaW4gWzAsMV0gYW5kIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgcmFuZ2UgdmFsdWUgeCBpbiBbYSxiXS5cbmZ1bmN0aW9uIGJpbWFwKGRvbWFpbiwgcmFuZ2UsIGludGVycG9sYXRlKSB7XG4gIHZhciBkMCA9IGRvbWFpblswXSwgZDEgPSBkb21haW5bMV0sIHIwID0gcmFuZ2VbMF0sIHIxID0gcmFuZ2VbMV07XG4gIGlmIChkMSA8IGQwKSBkMCA9IG5vcm1hbGl6ZShkMSwgZDApLCByMCA9IGludGVycG9sYXRlKHIxLCByMCk7XG4gIGVsc2UgZDAgPSBub3JtYWxpemUoZDAsIGQxKSwgcjAgPSBpbnRlcnBvbGF0ZShyMCwgcjEpO1xuICByZXR1cm4gZnVuY3Rpb24oeCkgeyByZXR1cm4gcjAoZDAoeCkpOyB9O1xufVxuXG5mdW5jdGlvbiBwb2x5bWFwKGRvbWFpbiwgcmFuZ2UsIGludGVycG9sYXRlKSB7XG4gIHZhciBqID0gTWF0aC5taW4oZG9tYWluLmxlbmd0aCwgcmFuZ2UubGVuZ3RoKSAtIDEsXG4gICAgICBkID0gbmV3IEFycmF5KGopLFxuICAgICAgciA9IG5ldyBBcnJheShqKSxcbiAgICAgIGkgPSAtMTtcblxuICAvLyBSZXZlcnNlIGRlc2NlbmRpbmcgZG9tYWlucy5cbiAgaWYgKGRvbWFpbltqXSA8IGRvbWFpblswXSkge1xuICAgIGRvbWFpbiA9IGRvbWFpbi5zbGljZSgpLnJldmVyc2UoKTtcbiAgICByYW5nZSA9IHJhbmdlLnNsaWNlKCkucmV2ZXJzZSgpO1xuICB9XG5cbiAgd2hpbGUgKCsraSA8IGopIHtcbiAgICBkW2ldID0gbm9ybWFsaXplKGRvbWFpbltpXSwgZG9tYWluW2kgKyAxXSk7XG4gICAgcltpXSA9IGludGVycG9sYXRlKHJhbmdlW2ldLCByYW5nZVtpICsgMV0pO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKHgpIHtcbiAgICB2YXIgaSA9IGJpc2VjdChkb21haW4sIHgsIDEsIGopIC0gMTtcbiAgICByZXR1cm4gcltpXShkW2ldKHgpKTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvcHkoc291cmNlLCB0YXJnZXQpIHtcbiAgcmV0dXJuIHRhcmdldFxuICAgICAgLmRvbWFpbihzb3VyY2UuZG9tYWluKCkpXG4gICAgICAucmFuZ2Uoc291cmNlLnJhbmdlKCkpXG4gICAgICAuaW50ZXJwb2xhdGUoc291cmNlLmludGVycG9sYXRlKCkpXG4gICAgICAuY2xhbXAoc291cmNlLmNsYW1wKCkpXG4gICAgICAudW5rbm93bihzb3VyY2UudW5rbm93bigpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybWVyKCkge1xuICB2YXIgZG9tYWluID0gdW5pdCxcbiAgICAgIHJhbmdlID0gdW5pdCxcbiAgICAgIGludGVycG9sYXRlID0gaW50ZXJwb2xhdGVWYWx1ZSxcbiAgICAgIHRyYW5zZm9ybSxcbiAgICAgIHVudHJhbnNmb3JtLFxuICAgICAgdW5rbm93bixcbiAgICAgIGNsYW1wID0gaWRlbnRpdHksXG4gICAgICBwaWVjZXdpc2UsXG4gICAgICBvdXRwdXQsXG4gICAgICBpbnB1dDtcblxuICBmdW5jdGlvbiByZXNjYWxlKCkge1xuICAgIHZhciBuID0gTWF0aC5taW4oZG9tYWluLmxlbmd0aCwgcmFuZ2UubGVuZ3RoKTtcbiAgICBpZiAoY2xhbXAgIT09IGlkZW50aXR5KSBjbGFtcCA9IGNsYW1wZXIoZG9tYWluWzBdLCBkb21haW5bbiAtIDFdKTtcbiAgICBwaWVjZXdpc2UgPSBuID4gMiA/IHBvbHltYXAgOiBiaW1hcDtcbiAgICBvdXRwdXQgPSBpbnB1dCA9IG51bGw7XG4gICAgcmV0dXJuIHNjYWxlO1xuICB9XG5cbiAgZnVuY3Rpb24gc2NhbGUoeCkge1xuICAgIHJldHVybiB4ID09IG51bGwgfHwgaXNOYU4oeCA9ICt4KSA/IHVua25vd24gOiAob3V0cHV0IHx8IChvdXRwdXQgPSBwaWVjZXdpc2UoZG9tYWluLm1hcCh0cmFuc2Zvcm0pLCByYW5nZSwgaW50ZXJwb2xhdGUpKSkodHJhbnNmb3JtKGNsYW1wKHgpKSk7XG4gIH1cblxuICBzY2FsZS5pbnZlcnQgPSBmdW5jdGlvbih5KSB7XG4gICAgcmV0dXJuIGNsYW1wKHVudHJhbnNmb3JtKChpbnB1dCB8fCAoaW5wdXQgPSBwaWVjZXdpc2UocmFuZ2UsIGRvbWFpbi5tYXAodHJhbnNmb3JtKSwgaW50ZXJwb2xhdGVOdW1iZXIpKSkoeSkpKTtcbiAgfTtcblxuICBzY2FsZS5kb21haW4gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZG9tYWluID0gQXJyYXkuZnJvbShfLCBudW1iZXIpLCByZXNjYWxlKCkpIDogZG9tYWluLnNsaWNlKCk7XG4gIH07XG5cbiAgc2NhbGUucmFuZ2UgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocmFuZ2UgPSBBcnJheS5mcm9tKF8pLCByZXNjYWxlKCkpIDogcmFuZ2Uuc2xpY2UoKTtcbiAgfTtcblxuICBzY2FsZS5yYW5nZVJvdW5kID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiByYW5nZSA9IEFycmF5LmZyb20oXyksIGludGVycG9sYXRlID0gaW50ZXJwb2xhdGVSb3VuZCwgcmVzY2FsZSgpO1xuICB9O1xuXG4gIHNjYWxlLmNsYW1wID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGNsYW1wID0gXyA/IHRydWUgOiBpZGVudGl0eSwgcmVzY2FsZSgpKSA6IGNsYW1wICE9PSBpZGVudGl0eTtcbiAgfTtcblxuICBzY2FsZS5pbnRlcnBvbGF0ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChpbnRlcnBvbGF0ZSA9IF8sIHJlc2NhbGUoKSkgOiBpbnRlcnBvbGF0ZTtcbiAgfTtcblxuICBzY2FsZS51bmtub3duID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHVua25vd24gPSBfLCBzY2FsZSkgOiB1bmtub3duO1xuICB9O1xuXG4gIHJldHVybiBmdW5jdGlvbih0LCB1KSB7XG4gICAgdHJhbnNmb3JtID0gdCwgdW50cmFuc2Zvcm0gPSB1O1xuICAgIHJldHVybiByZXNjYWxlKCk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbnRpbnVvdXMoKSB7XG4gIHJldHVybiB0cmFuc2Zvcm1lcigpKGlkZW50aXR5LCBpZGVudGl0eSk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb25zdGFudHMoeCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHg7XG4gIH07XG59XG4iLCJpbXBvcnQge3RpY2tTdGVwfSBmcm9tIFwiZDMtYXJyYXlcIjtcbmltcG9ydCB7Zm9ybWF0LCBmb3JtYXRQcmVmaXgsIGZvcm1hdFNwZWNpZmllciwgcHJlY2lzaW9uRml4ZWQsIHByZWNpc2lvblByZWZpeCwgcHJlY2lzaW9uUm91bmR9IGZyb20gXCJkMy1mb3JtYXRcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdGlja0Zvcm1hdChzdGFydCwgc3RvcCwgY291bnQsIHNwZWNpZmllcikge1xuICB2YXIgc3RlcCA9IHRpY2tTdGVwKHN0YXJ0LCBzdG9wLCBjb3VudCksXG4gICAgICBwcmVjaXNpb247XG4gIHNwZWNpZmllciA9IGZvcm1hdFNwZWNpZmllcihzcGVjaWZpZXIgPT0gbnVsbCA/IFwiLGZcIiA6IHNwZWNpZmllcik7XG4gIHN3aXRjaCAoc3BlY2lmaWVyLnR5cGUpIHtcbiAgICBjYXNlIFwic1wiOiB7XG4gICAgICB2YXIgdmFsdWUgPSBNYXRoLm1heChNYXRoLmFicyhzdGFydCksIE1hdGguYWJzKHN0b3ApKTtcbiAgICAgIGlmIChzcGVjaWZpZXIucHJlY2lzaW9uID09IG51bGwgJiYgIWlzTmFOKHByZWNpc2lvbiA9IHByZWNpc2lvblByZWZpeChzdGVwLCB2YWx1ZSkpKSBzcGVjaWZpZXIucHJlY2lzaW9uID0gcHJlY2lzaW9uO1xuICAgICAgcmV0dXJuIGZvcm1hdFByZWZpeChzcGVjaWZpZXIsIHZhbHVlKTtcbiAgICB9XG4gICAgY2FzZSBcIlwiOlxuICAgIGNhc2UgXCJlXCI6XG4gICAgY2FzZSBcImdcIjpcbiAgICBjYXNlIFwicFwiOlxuICAgIGNhc2UgXCJyXCI6IHtcbiAgICAgIGlmIChzcGVjaWZpZXIucHJlY2lzaW9uID09IG51bGwgJiYgIWlzTmFOKHByZWNpc2lvbiA9IHByZWNpc2lvblJvdW5kKHN0ZXAsIE1hdGgubWF4KE1hdGguYWJzKHN0YXJ0KSwgTWF0aC5hYnMoc3RvcCkpKSkpIHNwZWNpZmllci5wcmVjaXNpb24gPSBwcmVjaXNpb24gLSAoc3BlY2lmaWVyLnR5cGUgPT09IFwiZVwiKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlIFwiZlwiOlxuICAgIGNhc2UgXCIlXCI6IHtcbiAgICAgIGlmIChzcGVjaWZpZXIucHJlY2lzaW9uID09IG51bGwgJiYgIWlzTmFOKHByZWNpc2lvbiA9IHByZWNpc2lvbkZpeGVkKHN0ZXApKSkgc3BlY2lmaWVyLnByZWNpc2lvbiA9IHByZWNpc2lvbiAtIChzcGVjaWZpZXIudHlwZSA9PT0gXCIlXCIpICogMjtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZm9ybWF0KHNwZWNpZmllcik7XG59XG4iLCJpbXBvcnQgZXhwb25lbnQgZnJvbSBcIi4vZXhwb25lbnQuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc3RlcCwgdmFsdWUpIHtcbiAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWF4KC04LCBNYXRoLm1pbig4LCBNYXRoLmZsb29yKGV4cG9uZW50KHZhbHVlKSAvIDMpKSkgKiAzIC0gZXhwb25lbnQoTWF0aC5hYnMoc3RlcCkpKTtcbn1cbiIsImltcG9ydCBleHBvbmVudCBmcm9tIFwiLi9leHBvbmVudC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzdGVwLCBtYXgpIHtcbiAgc3RlcCA9IE1hdGguYWJzKHN0ZXApLCBtYXggPSBNYXRoLmFicyhtYXgpIC0gc3RlcDtcbiAgcmV0dXJuIE1hdGgubWF4KDAsIGV4cG9uZW50KG1heCkgLSBleHBvbmVudChzdGVwKSkgKyAxO1xufVxuIiwiaW1wb3J0IGV4cG9uZW50IGZyb20gXCIuL2V4cG9uZW50LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHN0ZXApIHtcbiAgcmV0dXJuIE1hdGgubWF4KDAsIC1leHBvbmVudChNYXRoLmFicyhzdGVwKSkpO1xufVxuIiwiaW1wb3J0IHt0aWNrcywgdGlja0luY3JlbWVudH0gZnJvbSBcImQzLWFycmF5XCI7XG5pbXBvcnQgY29udGludW91cywge2NvcHl9IGZyb20gXCIuL2NvbnRpbnVvdXMuanNcIjtcbmltcG9ydCB7aW5pdFJhbmdlfSBmcm9tIFwiLi9pbml0LmpzXCI7XG5pbXBvcnQgdGlja0Zvcm1hdCBmcm9tIFwiLi90aWNrRm9ybWF0LmpzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBsaW5lYXJpc2goc2NhbGUpIHtcbiAgdmFyIGRvbWFpbiA9IHNjYWxlLmRvbWFpbjtcblxuICBzY2FsZS50aWNrcyA9IGZ1bmN0aW9uKGNvdW50KSB7XG4gICAgdmFyIGQgPSBkb21haW4oKTtcbiAgICByZXR1cm4gdGlja3MoZFswXSwgZFtkLmxlbmd0aCAtIDFdLCBjb3VudCA9PSBudWxsID8gMTAgOiBjb3VudCk7XG4gIH07XG5cbiAgc2NhbGUudGlja0Zvcm1hdCA9IGZ1bmN0aW9uKGNvdW50LCBzcGVjaWZpZXIpIHtcbiAgICB2YXIgZCA9IGRvbWFpbigpO1xuICAgIHJldHVybiB0aWNrRm9ybWF0KGRbMF0sIGRbZC5sZW5ndGggLSAxXSwgY291bnQgPT0gbnVsbCA/IDEwIDogY291bnQsIHNwZWNpZmllcik7XG4gIH07XG5cbiAgc2NhbGUubmljZSA9IGZ1bmN0aW9uKGNvdW50KSB7XG4gICAgaWYgKGNvdW50ID09IG51bGwpIGNvdW50ID0gMTA7XG5cbiAgICB2YXIgZCA9IGRvbWFpbigpO1xuICAgIHZhciBpMCA9IDA7XG4gICAgdmFyIGkxID0gZC5sZW5ndGggLSAxO1xuICAgIHZhciBzdGFydCA9IGRbaTBdO1xuICAgIHZhciBzdG9wID0gZFtpMV07XG4gICAgdmFyIHByZXN0ZXA7XG4gICAgdmFyIHN0ZXA7XG4gICAgdmFyIG1heEl0ZXIgPSAxMDtcblxuICAgIGlmIChzdG9wIDwgc3RhcnQpIHtcbiAgICAgIHN0ZXAgPSBzdGFydCwgc3RhcnQgPSBzdG9wLCBzdG9wID0gc3RlcDtcbiAgICAgIHN0ZXAgPSBpMCwgaTAgPSBpMSwgaTEgPSBzdGVwO1xuICAgIH1cbiAgICBcbiAgICB3aGlsZSAobWF4SXRlci0tID4gMCkge1xuICAgICAgc3RlcCA9IHRpY2tJbmNyZW1lbnQoc3RhcnQsIHN0b3AsIGNvdW50KTtcbiAgICAgIGlmIChzdGVwID09PSBwcmVzdGVwKSB7XG4gICAgICAgIGRbaTBdID0gc3RhcnRcbiAgICAgICAgZFtpMV0gPSBzdG9wXG4gICAgICAgIHJldHVybiBkb21haW4oZCk7XG4gICAgICB9IGVsc2UgaWYgKHN0ZXAgPiAwKSB7XG4gICAgICAgIHN0YXJ0ID0gTWF0aC5mbG9vcihzdGFydCAvIHN0ZXApICogc3RlcDtcbiAgICAgICAgc3RvcCA9IE1hdGguY2VpbChzdG9wIC8gc3RlcCkgKiBzdGVwO1xuICAgICAgfSBlbHNlIGlmIChzdGVwIDwgMCkge1xuICAgICAgICBzdGFydCA9IE1hdGguY2VpbChzdGFydCAqIHN0ZXApIC8gc3RlcDtcbiAgICAgICAgc3RvcCA9IE1hdGguZmxvb3Ioc3RvcCAqIHN0ZXApIC8gc3RlcDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcHJlc3RlcCA9IHN0ZXA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNjYWxlO1xuICB9O1xuXG4gIHJldHVybiBzY2FsZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbGluZWFyKCkge1xuICB2YXIgc2NhbGUgPSBjb250aW51b3VzKCk7XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBjb3B5KHNjYWxlLCBsaW5lYXIoKSk7XG4gIH07XG5cbiAgaW5pdFJhbmdlLmFwcGx5KHNjYWxlLCBhcmd1bWVudHMpO1xuXG4gIHJldHVybiBsaW5lYXJpc2goc2NhbGUpO1xufVxuIiwiY29uc3QgdDAgPSBuZXcgRGF0ZSwgdDEgPSBuZXcgRGF0ZTtcblxuZXhwb3J0IGZ1bmN0aW9uIHRpbWVJbnRlcnZhbChmbG9vcmksIG9mZnNldGksIGNvdW50LCBmaWVsZCkge1xuXG4gIGZ1bmN0aW9uIGludGVydmFsKGRhdGUpIHtcbiAgICByZXR1cm4gZmxvb3JpKGRhdGUgPSBhcmd1bWVudHMubGVuZ3RoID09PSAwID8gbmV3IERhdGUgOiBuZXcgRGF0ZSgrZGF0ZSkpLCBkYXRlO1xuICB9XG5cbiAgaW50ZXJ2YWwuZmxvb3IgPSAoZGF0ZSkgPT4ge1xuICAgIHJldHVybiBmbG9vcmkoZGF0ZSA9IG5ldyBEYXRlKCtkYXRlKSksIGRhdGU7XG4gIH07XG5cbiAgaW50ZXJ2YWwuY2VpbCA9IChkYXRlKSA9PiB7XG4gICAgcmV0dXJuIGZsb29yaShkYXRlID0gbmV3IERhdGUoZGF0ZSAtIDEpKSwgb2Zmc2V0aShkYXRlLCAxKSwgZmxvb3JpKGRhdGUpLCBkYXRlO1xuICB9O1xuXG4gIGludGVydmFsLnJvdW5kID0gKGRhdGUpID0+IHtcbiAgICBjb25zdCBkMCA9IGludGVydmFsKGRhdGUpLCBkMSA9IGludGVydmFsLmNlaWwoZGF0ZSk7XG4gICAgcmV0dXJuIGRhdGUgLSBkMCA8IGQxIC0gZGF0ZSA/IGQwIDogZDE7XG4gIH07XG5cbiAgaW50ZXJ2YWwub2Zmc2V0ID0gKGRhdGUsIHN0ZXApID0+IHtcbiAgICByZXR1cm4gb2Zmc2V0aShkYXRlID0gbmV3IERhdGUoK2RhdGUpLCBzdGVwID09IG51bGwgPyAxIDogTWF0aC5mbG9vcihzdGVwKSksIGRhdGU7XG4gIH07XG5cbiAgaW50ZXJ2YWwucmFuZ2UgPSAoc3RhcnQsIHN0b3AsIHN0ZXApID0+IHtcbiAgICBjb25zdCByYW5nZSA9IFtdO1xuICAgIHN0YXJ0ID0gaW50ZXJ2YWwuY2VpbChzdGFydCk7XG4gICAgc3RlcCA9IHN0ZXAgPT0gbnVsbCA/IDEgOiBNYXRoLmZsb29yKHN0ZXApO1xuICAgIGlmICghKHN0YXJ0IDwgc3RvcCkgfHwgIShzdGVwID4gMCkpIHJldHVybiByYW5nZTsgLy8gYWxzbyBoYW5kbGVzIEludmFsaWQgRGF0ZVxuICAgIGxldCBwcmV2aW91cztcbiAgICBkbyByYW5nZS5wdXNoKHByZXZpb3VzID0gbmV3IERhdGUoK3N0YXJ0KSksIG9mZnNldGkoc3RhcnQsIHN0ZXApLCBmbG9vcmkoc3RhcnQpO1xuICAgIHdoaWxlIChwcmV2aW91cyA8IHN0YXJ0ICYmIHN0YXJ0IDwgc3RvcCk7XG4gICAgcmV0dXJuIHJhbmdlO1xuICB9O1xuXG4gIGludGVydmFsLmZpbHRlciA9ICh0ZXN0KSA9PiB7XG4gICAgcmV0dXJuIHRpbWVJbnRlcnZhbCgoZGF0ZSkgPT4ge1xuICAgICAgaWYgKGRhdGUgPj0gZGF0ZSkgd2hpbGUgKGZsb29yaShkYXRlKSwgIXRlc3QoZGF0ZSkpIGRhdGUuc2V0VGltZShkYXRlIC0gMSk7XG4gICAgfSwgKGRhdGUsIHN0ZXApID0+IHtcbiAgICAgIGlmIChkYXRlID49IGRhdGUpIHtcbiAgICAgICAgaWYgKHN0ZXAgPCAwKSB3aGlsZSAoKytzdGVwIDw9IDApIHtcbiAgICAgICAgICB3aGlsZSAob2Zmc2V0aShkYXRlLCAtMSksICF0ZXN0KGRhdGUpKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG4gICAgICAgIH0gZWxzZSB3aGlsZSAoLS1zdGVwID49IDApIHtcbiAgICAgICAgICB3aGlsZSAob2Zmc2V0aShkYXRlLCArMSksICF0ZXN0KGRhdGUpKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBpZiAoY291bnQpIHtcbiAgICBpbnRlcnZhbC5jb3VudCA9IChzdGFydCwgZW5kKSA9PiB7XG4gICAgICB0MC5zZXRUaW1lKCtzdGFydCksIHQxLnNldFRpbWUoK2VuZCk7XG4gICAgICBmbG9vcmkodDApLCBmbG9vcmkodDEpO1xuICAgICAgcmV0dXJuIE1hdGguZmxvb3IoY291bnQodDAsIHQxKSk7XG4gICAgfTtcblxuICAgIGludGVydmFsLmV2ZXJ5ID0gKHN0ZXApID0+IHtcbiAgICAgIHN0ZXAgPSBNYXRoLmZsb29yKHN0ZXApO1xuICAgICAgcmV0dXJuICFpc0Zpbml0ZShzdGVwKSB8fCAhKHN0ZXAgPiAwKSA/IG51bGxcbiAgICAgICAgICA6ICEoc3RlcCA+IDEpID8gaW50ZXJ2YWxcbiAgICAgICAgICA6IGludGVydmFsLmZpbHRlcihmaWVsZFxuICAgICAgICAgICAgICA/IChkKSA9PiBmaWVsZChkKSAlIHN0ZXAgPT09IDBcbiAgICAgICAgICAgICAgOiAoZCkgPT4gaW50ZXJ2YWwuY291bnQoMCwgZCkgJSBzdGVwID09PSAwKTtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIGludGVydmFsO1xufVxuIiwiaW1wb3J0IHt0aW1lSW50ZXJ2YWx9IGZyb20gXCIuL2ludGVydmFsLmpzXCI7XG5cbmV4cG9ydCBjb25zdCBtaWxsaXNlY29uZCA9IHRpbWVJbnRlcnZhbCgoKSA9PiB7XG4gIC8vIG5vb3Bcbn0sIChkYXRlLCBzdGVwKSA9PiB7XG4gIGRhdGUuc2V0VGltZSgrZGF0ZSArIHN0ZXApO1xufSwgKHN0YXJ0LCBlbmQpID0+IHtcbiAgcmV0dXJuIGVuZCAtIHN0YXJ0O1xufSk7XG5cbi8vIEFuIG9wdGltaXplZCBpbXBsZW1lbnRhdGlvbiBmb3IgdGhpcyBzaW1wbGUgY2FzZS5cbm1pbGxpc2Vjb25kLmV2ZXJ5ID0gKGspID0+IHtcbiAgayA9IE1hdGguZmxvb3Ioayk7XG4gIGlmICghaXNGaW5pdGUoaykgfHwgIShrID4gMCkpIHJldHVybiBudWxsO1xuICBpZiAoIShrID4gMSkpIHJldHVybiBtaWxsaXNlY29uZDtcbiAgcmV0dXJuIHRpbWVJbnRlcnZhbCgoZGF0ZSkgPT4ge1xuICAgIGRhdGUuc2V0VGltZShNYXRoLmZsb29yKGRhdGUgLyBrKSAqIGspO1xuICB9LCAoZGF0ZSwgc3RlcCkgPT4ge1xuICAgIGRhdGUuc2V0VGltZSgrZGF0ZSArIHN0ZXAgKiBrKTtcbiAgfSwgKHN0YXJ0LCBlbmQpID0+IHtcbiAgICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGs7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IG1pbGxpc2Vjb25kcyA9IG1pbGxpc2Vjb25kLnJhbmdlO1xuIiwiZXhwb3J0IGNvbnN0IGR1cmF0aW9uU2Vjb25kID0gMTAwMDtcbmV4cG9ydCBjb25zdCBkdXJhdGlvbk1pbnV0ZSA9IGR1cmF0aW9uU2Vjb25kICogNjA7XG5leHBvcnQgY29uc3QgZHVyYXRpb25Ib3VyID0gZHVyYXRpb25NaW51dGUgKiA2MDtcbmV4cG9ydCBjb25zdCBkdXJhdGlvbkRheSA9IGR1cmF0aW9uSG91ciAqIDI0O1xuZXhwb3J0IGNvbnN0IGR1cmF0aW9uV2VlayA9IGR1cmF0aW9uRGF5ICogNztcbmV4cG9ydCBjb25zdCBkdXJhdGlvbk1vbnRoID0gZHVyYXRpb25EYXkgKiAzMDtcbmV4cG9ydCBjb25zdCBkdXJhdGlvblllYXIgPSBkdXJhdGlvbkRheSAqIDM2NTtcbiIsImltcG9ydCB7dGltZUludGVydmFsfSBmcm9tIFwiLi9pbnRlcnZhbC5qc1wiO1xuaW1wb3J0IHtkdXJhdGlvblNlY29uZH0gZnJvbSBcIi4vZHVyYXRpb24uanNcIjtcblxuZXhwb3J0IGNvbnN0IHNlY29uZCA9IHRpbWVJbnRlcnZhbCgoZGF0ZSkgPT4ge1xuICBkYXRlLnNldFRpbWUoZGF0ZSAtIGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCkpO1xufSwgKGRhdGUsIHN0ZXApID0+IHtcbiAgZGF0ZS5zZXRUaW1lKCtkYXRlICsgc3RlcCAqIGR1cmF0aW9uU2Vjb25kKTtcbn0sIChzdGFydCwgZW5kKSA9PiB7XG4gIHJldHVybiAoZW5kIC0gc3RhcnQpIC8gZHVyYXRpb25TZWNvbmQ7XG59LCAoZGF0ZSkgPT4ge1xuICByZXR1cm4gZGF0ZS5nZXRVVENTZWNvbmRzKCk7XG59KTtcblxuZXhwb3J0IGNvbnN0IHNlY29uZHMgPSBzZWNvbmQucmFuZ2U7XG4iLCJpbXBvcnQge3RpbWVJbnRlcnZhbH0gZnJvbSBcIi4vaW50ZXJ2YWwuanNcIjtcbmltcG9ydCB7ZHVyYXRpb25NaW51dGUsIGR1cmF0aW9uU2Vjb25kfSBmcm9tIFwiLi9kdXJhdGlvbi5qc1wiO1xuXG5leHBvcnQgY29uc3QgdGltZU1pbnV0ZSA9IHRpbWVJbnRlcnZhbCgoZGF0ZSkgPT4ge1xuICBkYXRlLnNldFRpbWUoZGF0ZSAtIGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCkgLSBkYXRlLmdldFNlY29uZHMoKSAqIGR1cmF0aW9uU2Vjb25kKTtcbn0sIChkYXRlLCBzdGVwKSA9PiB7XG4gIGRhdGUuc2V0VGltZSgrZGF0ZSArIHN0ZXAgKiBkdXJhdGlvbk1pbnV0ZSk7XG59LCAoc3RhcnQsIGVuZCkgPT4ge1xuICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGR1cmF0aW9uTWludXRlO1xufSwgKGRhdGUpID0+IHtcbiAgcmV0dXJuIGRhdGUuZ2V0TWludXRlcygpO1xufSk7XG5cbmV4cG9ydCBjb25zdCB0aW1lTWludXRlcyA9IHRpbWVNaW51dGUucmFuZ2U7XG5cbmV4cG9ydCBjb25zdCB1dGNNaW51dGUgPSB0aW1lSW50ZXJ2YWwoKGRhdGUpID0+IHtcbiAgZGF0ZS5zZXRVVENTZWNvbmRzKDAsIDApO1xufSwgKGRhdGUsIHN0ZXApID0+IHtcbiAgZGF0ZS5zZXRUaW1lKCtkYXRlICsgc3RlcCAqIGR1cmF0aW9uTWludXRlKTtcbn0sIChzdGFydCwgZW5kKSA9PiB7XG4gIHJldHVybiAoZW5kIC0gc3RhcnQpIC8gZHVyYXRpb25NaW51dGU7XG59LCAoZGF0ZSkgPT4ge1xuICByZXR1cm4gZGF0ZS5nZXRVVENNaW51dGVzKCk7XG59KTtcblxuZXhwb3J0IGNvbnN0IHV0Y01pbnV0ZXMgPSB1dGNNaW51dGUucmFuZ2U7XG4iLCJpbXBvcnQge3RpbWVJbnRlcnZhbH0gZnJvbSBcIi4vaW50ZXJ2YWwuanNcIjtcbmltcG9ydCB7ZHVyYXRpb25Ib3VyLCBkdXJhdGlvbk1pbnV0ZSwgZHVyYXRpb25TZWNvbmR9IGZyb20gXCIuL2R1cmF0aW9uLmpzXCI7XG5cbmV4cG9ydCBjb25zdCB0aW1lSG91ciA9IHRpbWVJbnRlcnZhbCgoZGF0ZSkgPT4ge1xuICBkYXRlLnNldFRpbWUoZGF0ZSAtIGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCkgLSBkYXRlLmdldFNlY29uZHMoKSAqIGR1cmF0aW9uU2Vjb25kIC0gZGF0ZS5nZXRNaW51dGVzKCkgKiBkdXJhdGlvbk1pbnV0ZSk7XG59LCAoZGF0ZSwgc3RlcCkgPT4ge1xuICBkYXRlLnNldFRpbWUoK2RhdGUgKyBzdGVwICogZHVyYXRpb25Ib3VyKTtcbn0sIChzdGFydCwgZW5kKSA9PiB7XG4gIHJldHVybiAoZW5kIC0gc3RhcnQpIC8gZHVyYXRpb25Ib3VyO1xufSwgKGRhdGUpID0+IHtcbiAgcmV0dXJuIGRhdGUuZ2V0SG91cnMoKTtcbn0pO1xuXG5leHBvcnQgY29uc3QgdGltZUhvdXJzID0gdGltZUhvdXIucmFuZ2U7XG5cbmV4cG9ydCBjb25zdCB1dGNIb3VyID0gdGltZUludGVydmFsKChkYXRlKSA9PiB7XG4gIGRhdGUuc2V0VVRDTWludXRlcygwLCAwLCAwKTtcbn0sIChkYXRlLCBzdGVwKSA9PiB7XG4gIGRhdGUuc2V0VGltZSgrZGF0ZSArIHN0ZXAgKiBkdXJhdGlvbkhvdXIpO1xufSwgKHN0YXJ0LCBlbmQpID0+IHtcbiAgcmV0dXJuIChlbmQgLSBzdGFydCkgLyBkdXJhdGlvbkhvdXI7XG59LCAoZGF0ZSkgPT4ge1xuICByZXR1cm4gZGF0ZS5nZXRVVENIb3VycygpO1xufSk7XG5cbmV4cG9ydCBjb25zdCB1dGNIb3VycyA9IHV0Y0hvdXIucmFuZ2U7XG4iLCJpbXBvcnQge3RpbWVJbnRlcnZhbH0gZnJvbSBcIi4vaW50ZXJ2YWwuanNcIjtcbmltcG9ydCB7ZHVyYXRpb25EYXksIGR1cmF0aW9uTWludXRlfSBmcm9tIFwiLi9kdXJhdGlvbi5qc1wiO1xuXG5leHBvcnQgY29uc3QgdGltZURheSA9IHRpbWVJbnRlcnZhbChcbiAgZGF0ZSA9PiBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApLFxuICAoZGF0ZSwgc3RlcCkgPT4gZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgc3RlcCksXG4gIChzdGFydCwgZW5kKSA9PiAoZW5kIC0gc3RhcnQgLSAoZW5kLmdldFRpbWV6b25lT2Zmc2V0KCkgLSBzdGFydC5nZXRUaW1lem9uZU9mZnNldCgpKSAqIGR1cmF0aW9uTWludXRlKSAvIGR1cmF0aW9uRGF5LFxuICBkYXRlID0+IGRhdGUuZ2V0RGF0ZSgpIC0gMVxuKTtcblxuZXhwb3J0IGNvbnN0IHRpbWVEYXlzID0gdGltZURheS5yYW5nZTtcblxuZXhwb3J0IGNvbnN0IHV0Y0RheSA9IHRpbWVJbnRlcnZhbCgoZGF0ZSkgPT4ge1xuICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xufSwgKGRhdGUsIHN0ZXApID0+IHtcbiAgZGF0ZS5zZXRVVENEYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpICsgc3RlcCk7XG59LCAoc3RhcnQsIGVuZCkgPT4ge1xuICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGR1cmF0aW9uRGF5O1xufSwgKGRhdGUpID0+IHtcbiAgcmV0dXJuIGRhdGUuZ2V0VVRDRGF0ZSgpIC0gMTtcbn0pO1xuXG5leHBvcnQgY29uc3QgdXRjRGF5cyA9IHV0Y0RheS5yYW5nZTtcblxuZXhwb3J0IGNvbnN0IHVuaXhEYXkgPSB0aW1lSW50ZXJ2YWwoKGRhdGUpID0+IHtcbiAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbn0sIChkYXRlLCBzdGVwKSA9PiB7XG4gIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSArIHN0ZXApO1xufSwgKHN0YXJ0LCBlbmQpID0+IHtcbiAgcmV0dXJuIChlbmQgLSBzdGFydCkgLyBkdXJhdGlvbkRheTtcbn0sIChkYXRlKSA9PiB7XG4gIHJldHVybiBNYXRoLmZsb29yKGRhdGUgLyBkdXJhdGlvbkRheSk7XG59KTtcblxuZXhwb3J0IGNvbnN0IHVuaXhEYXlzID0gdW5peERheS5yYW5nZTtcbiIsImltcG9ydCB7dGltZUludGVydmFsfSBmcm9tIFwiLi9pbnRlcnZhbC5qc1wiO1xuaW1wb3J0IHtkdXJhdGlvbk1pbnV0ZSwgZHVyYXRpb25XZWVrfSBmcm9tIFwiLi9kdXJhdGlvbi5qc1wiO1xuXG5mdW5jdGlvbiB0aW1lV2Vla2RheShpKSB7XG4gIHJldHVybiB0aW1lSW50ZXJ2YWwoKGRhdGUpID0+IHtcbiAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgLSAoZGF0ZS5nZXREYXkoKSArIDcgLSBpKSAlIDcpO1xuICAgIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gIH0sIChkYXRlLCBzdGVwKSA9PiB7XG4gICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgc3RlcCAqIDcpO1xuICB9LCAoc3RhcnQsIGVuZCkgPT4ge1xuICAgIHJldHVybiAoZW5kIC0gc3RhcnQgLSAoZW5kLmdldFRpbWV6b25lT2Zmc2V0KCkgLSBzdGFydC5nZXRUaW1lem9uZU9mZnNldCgpKSAqIGR1cmF0aW9uTWludXRlKSAvIGR1cmF0aW9uV2VlaztcbiAgfSk7XG59XG5cbmV4cG9ydCBjb25zdCB0aW1lU3VuZGF5ID0gdGltZVdlZWtkYXkoMCk7XG5leHBvcnQgY29uc3QgdGltZU1vbmRheSA9IHRpbWVXZWVrZGF5KDEpO1xuZXhwb3J0IGNvbnN0IHRpbWVUdWVzZGF5ID0gdGltZVdlZWtkYXkoMik7XG5leHBvcnQgY29uc3QgdGltZVdlZG5lc2RheSA9IHRpbWVXZWVrZGF5KDMpO1xuZXhwb3J0IGNvbnN0IHRpbWVUaHVyc2RheSA9IHRpbWVXZWVrZGF5KDQpO1xuZXhwb3J0IGNvbnN0IHRpbWVGcmlkYXkgPSB0aW1lV2Vla2RheSg1KTtcbmV4cG9ydCBjb25zdCB0aW1lU2F0dXJkYXkgPSB0aW1lV2Vla2RheSg2KTtcblxuZXhwb3J0IGNvbnN0IHRpbWVTdW5kYXlzID0gdGltZVN1bmRheS5yYW5nZTtcbmV4cG9ydCBjb25zdCB0aW1lTW9uZGF5cyA9IHRpbWVNb25kYXkucmFuZ2U7XG5leHBvcnQgY29uc3QgdGltZVR1ZXNkYXlzID0gdGltZVR1ZXNkYXkucmFuZ2U7XG5leHBvcnQgY29uc3QgdGltZVdlZG5lc2RheXMgPSB0aW1lV2VkbmVzZGF5LnJhbmdlO1xuZXhwb3J0IGNvbnN0IHRpbWVUaHVyc2RheXMgPSB0aW1lVGh1cnNkYXkucmFuZ2U7XG5leHBvcnQgY29uc3QgdGltZUZyaWRheXMgPSB0aW1lRnJpZGF5LnJhbmdlO1xuZXhwb3J0IGNvbnN0IHRpbWVTYXR1cmRheXMgPSB0aW1lU2F0dXJkYXkucmFuZ2U7XG5cbmZ1bmN0aW9uIHV0Y1dlZWtkYXkoaSkge1xuICByZXR1cm4gdGltZUludGVydmFsKChkYXRlKSA9PiB7XG4gICAgZGF0ZS5zZXRVVENEYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpIC0gKGRhdGUuZ2V0VVRDRGF5KCkgKyA3IC0gaSkgJSA3KTtcbiAgICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB9LCAoZGF0ZSwgc3RlcCkgPT4ge1xuICAgIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSArIHN0ZXAgKiA3KTtcbiAgfSwgKHN0YXJ0LCBlbmQpID0+IHtcbiAgICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGR1cmF0aW9uV2VlaztcbiAgfSk7XG59XG5cbmV4cG9ydCBjb25zdCB1dGNTdW5kYXkgPSB1dGNXZWVrZGF5KDApO1xuZXhwb3J0IGNvbnN0IHV0Y01vbmRheSA9IHV0Y1dlZWtkYXkoMSk7XG5leHBvcnQgY29uc3QgdXRjVHVlc2RheSA9IHV0Y1dlZWtkYXkoMik7XG5leHBvcnQgY29uc3QgdXRjV2VkbmVzZGF5ID0gdXRjV2Vla2RheSgzKTtcbmV4cG9ydCBjb25zdCB1dGNUaHVyc2RheSA9IHV0Y1dlZWtkYXkoNCk7XG5leHBvcnQgY29uc3QgdXRjRnJpZGF5ID0gdXRjV2Vla2RheSg1KTtcbmV4cG9ydCBjb25zdCB1dGNTYXR1cmRheSA9IHV0Y1dlZWtkYXkoNik7XG5cbmV4cG9ydCBjb25zdCB1dGNTdW5kYXlzID0gdXRjU3VuZGF5LnJhbmdlO1xuZXhwb3J0IGNvbnN0IHV0Y01vbmRheXMgPSB1dGNNb25kYXkucmFuZ2U7XG5leHBvcnQgY29uc3QgdXRjVHVlc2RheXMgPSB1dGNUdWVzZGF5LnJhbmdlO1xuZXhwb3J0IGNvbnN0IHV0Y1dlZG5lc2RheXMgPSB1dGNXZWRuZXNkYXkucmFuZ2U7XG5leHBvcnQgY29uc3QgdXRjVGh1cnNkYXlzID0gdXRjVGh1cnNkYXkucmFuZ2U7XG5leHBvcnQgY29uc3QgdXRjRnJpZGF5cyA9IHV0Y0ZyaWRheS5yYW5nZTtcbmV4cG9ydCBjb25zdCB1dGNTYXR1cmRheXMgPSB1dGNTYXR1cmRheS5yYW5nZTtcbiIsImltcG9ydCB7dGltZUludGVydmFsfSBmcm9tIFwiLi9pbnRlcnZhbC5qc1wiO1xuXG5leHBvcnQgY29uc3QgdGltZU1vbnRoID0gdGltZUludGVydmFsKChkYXRlKSA9PiB7XG4gIGRhdGUuc2V0RGF0ZSgxKTtcbiAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbn0sIChkYXRlLCBzdGVwKSA9PiB7XG4gIGRhdGUuc2V0TW9udGgoZGF0ZS5nZXRNb250aCgpICsgc3RlcCk7XG59LCAoc3RhcnQsIGVuZCkgPT4ge1xuICByZXR1cm4gZW5kLmdldE1vbnRoKCkgLSBzdGFydC5nZXRNb250aCgpICsgKGVuZC5nZXRGdWxsWWVhcigpIC0gc3RhcnQuZ2V0RnVsbFllYXIoKSkgKiAxMjtcbn0sIChkYXRlKSA9PiB7XG4gIHJldHVybiBkYXRlLmdldE1vbnRoKCk7XG59KTtcblxuZXhwb3J0IGNvbnN0IHRpbWVNb250aHMgPSB0aW1lTW9udGgucmFuZ2U7XG5cbmV4cG9ydCBjb25zdCB1dGNNb250aCA9IHRpbWVJbnRlcnZhbCgoZGF0ZSkgPT4ge1xuICBkYXRlLnNldFVUQ0RhdGUoMSk7XG4gIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG59LCAoZGF0ZSwgc3RlcCkgPT4ge1xuICBkYXRlLnNldFVUQ01vbnRoKGRhdGUuZ2V0VVRDTW9udGgoKSArIHN0ZXApO1xufSwgKHN0YXJ0LCBlbmQpID0+IHtcbiAgcmV0dXJuIGVuZC5nZXRVVENNb250aCgpIC0gc3RhcnQuZ2V0VVRDTW9udGgoKSArIChlbmQuZ2V0VVRDRnVsbFllYXIoKSAtIHN0YXJ0LmdldFVUQ0Z1bGxZZWFyKCkpICogMTI7XG59LCAoZGF0ZSkgPT4ge1xuICByZXR1cm4gZGF0ZS5nZXRVVENNb250aCgpO1xufSk7XG5cbmV4cG9ydCBjb25zdCB1dGNNb250aHMgPSB1dGNNb250aC5yYW5nZTtcbiIsImltcG9ydCB7dGltZUludGVydmFsfSBmcm9tIFwiLi9pbnRlcnZhbC5qc1wiO1xuXG5leHBvcnQgY29uc3QgdGltZVllYXIgPSB0aW1lSW50ZXJ2YWwoKGRhdGUpID0+IHtcbiAgZGF0ZS5zZXRNb250aCgwLCAxKTtcbiAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbn0sIChkYXRlLCBzdGVwKSA9PiB7XG4gIGRhdGUuc2V0RnVsbFllYXIoZGF0ZS5nZXRGdWxsWWVhcigpICsgc3RlcCk7XG59LCAoc3RhcnQsIGVuZCkgPT4ge1xuICByZXR1cm4gZW5kLmdldEZ1bGxZZWFyKCkgLSBzdGFydC5nZXRGdWxsWWVhcigpO1xufSwgKGRhdGUpID0+IHtcbiAgcmV0dXJuIGRhdGUuZ2V0RnVsbFllYXIoKTtcbn0pO1xuXG4vLyBBbiBvcHRpbWl6ZWQgaW1wbGVtZW50YXRpb24gZm9yIHRoaXMgc2ltcGxlIGNhc2UuXG50aW1lWWVhci5ldmVyeSA9IChrKSA9PiB7XG4gIHJldHVybiAhaXNGaW5pdGUoayA9IE1hdGguZmxvb3IoaykpIHx8ICEoayA+IDApID8gbnVsbCA6IHRpbWVJbnRlcnZhbCgoZGF0ZSkgPT4ge1xuICAgIGRhdGUuc2V0RnVsbFllYXIoTWF0aC5mbG9vcihkYXRlLmdldEZ1bGxZZWFyKCkgLyBrKSAqIGspO1xuICAgIGRhdGUuc2V0TW9udGgoMCwgMSk7XG4gICAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgfSwgKGRhdGUsIHN0ZXApID0+IHtcbiAgICBkYXRlLnNldEZ1bGxZZWFyKGRhdGUuZ2V0RnVsbFllYXIoKSArIHN0ZXAgKiBrKTtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgdGltZVllYXJzID0gdGltZVllYXIucmFuZ2U7XG5cbmV4cG9ydCBjb25zdCB1dGNZZWFyID0gdGltZUludGVydmFsKChkYXRlKSA9PiB7XG4gIGRhdGUuc2V0VVRDTW9udGgoMCwgMSk7XG4gIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG59LCAoZGF0ZSwgc3RlcCkgPT4ge1xuICBkYXRlLnNldFVUQ0Z1bGxZZWFyKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSArIHN0ZXApO1xufSwgKHN0YXJ0LCBlbmQpID0+IHtcbiAgcmV0dXJuIGVuZC5nZXRVVENGdWxsWWVhcigpIC0gc3RhcnQuZ2V0VVRDRnVsbFllYXIoKTtcbn0sIChkYXRlKSA9PiB7XG4gIHJldHVybiBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG59KTtcblxuLy8gQW4gb3B0aW1pemVkIGltcGxlbWVudGF0aW9uIGZvciB0aGlzIHNpbXBsZSBjYXNlLlxudXRjWWVhci5ldmVyeSA9IChrKSA9PiB7XG4gIHJldHVybiAhaXNGaW5pdGUoayA9IE1hdGguZmxvb3IoaykpIHx8ICEoayA+IDApID8gbnVsbCA6IHRpbWVJbnRlcnZhbCgoZGF0ZSkgPT4ge1xuICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoTWF0aC5mbG9vcihkYXRlLmdldFVUQ0Z1bGxZZWFyKCkgLyBrKSAqIGspO1xuICAgIGRhdGUuc2V0VVRDTW9udGgoMCwgMSk7XG4gICAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgfSwgKGRhdGUsIHN0ZXApID0+IHtcbiAgICBkYXRlLnNldFVUQ0Z1bGxZZWFyKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSArIHN0ZXAgKiBrKTtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgdXRjWWVhcnMgPSB1dGNZZWFyLnJhbmdlO1xuIiwiaW1wb3J0IHtiaXNlY3RvciwgdGlja1N0ZXB9IGZyb20gXCJkMy1hcnJheVwiO1xuaW1wb3J0IHtkdXJhdGlvbkRheSwgZHVyYXRpb25Ib3VyLCBkdXJhdGlvbk1pbnV0ZSwgZHVyYXRpb25Nb250aCwgZHVyYXRpb25TZWNvbmQsIGR1cmF0aW9uV2VlaywgZHVyYXRpb25ZZWFyfSBmcm9tIFwiLi9kdXJhdGlvbi5qc1wiO1xuaW1wb3J0IHttaWxsaXNlY29uZH0gZnJvbSBcIi4vbWlsbGlzZWNvbmQuanNcIjtcbmltcG9ydCB7c2Vjb25kfSBmcm9tIFwiLi9zZWNvbmQuanNcIjtcbmltcG9ydCB7dGltZU1pbnV0ZSwgdXRjTWludXRlfSBmcm9tIFwiLi9taW51dGUuanNcIjtcbmltcG9ydCB7dGltZUhvdXIsIHV0Y0hvdXJ9IGZyb20gXCIuL2hvdXIuanNcIjtcbmltcG9ydCB7dGltZURheSwgdW5peERheX0gZnJvbSBcIi4vZGF5LmpzXCI7XG5pbXBvcnQge3RpbWVTdW5kYXksIHV0Y1N1bmRheX0gZnJvbSBcIi4vd2Vlay5qc1wiO1xuaW1wb3J0IHt0aW1lTW9udGgsIHV0Y01vbnRofSBmcm9tIFwiLi9tb250aC5qc1wiO1xuaW1wb3J0IHt0aW1lWWVhciwgdXRjWWVhcn0gZnJvbSBcIi4veWVhci5qc1wiO1xuXG5mdW5jdGlvbiB0aWNrZXIoeWVhciwgbW9udGgsIHdlZWssIGRheSwgaG91ciwgbWludXRlKSB7XG5cbiAgY29uc3QgdGlja0ludGVydmFscyA9IFtcbiAgICBbc2Vjb25kLCAgMSwgICAgICBkdXJhdGlvblNlY29uZF0sXG4gICAgW3NlY29uZCwgIDUsICA1ICogZHVyYXRpb25TZWNvbmRdLFxuICAgIFtzZWNvbmQsIDE1LCAxNSAqIGR1cmF0aW9uU2Vjb25kXSxcbiAgICBbc2Vjb25kLCAzMCwgMzAgKiBkdXJhdGlvblNlY29uZF0sXG4gICAgW21pbnV0ZSwgIDEsICAgICAgZHVyYXRpb25NaW51dGVdLFxuICAgIFttaW51dGUsICA1LCAgNSAqIGR1cmF0aW9uTWludXRlXSxcbiAgICBbbWludXRlLCAxNSwgMTUgKiBkdXJhdGlvbk1pbnV0ZV0sXG4gICAgW21pbnV0ZSwgMzAsIDMwICogZHVyYXRpb25NaW51dGVdLFxuICAgIFsgIGhvdXIsICAxLCAgICAgIGR1cmF0aW9uSG91ciAgXSxcbiAgICBbICBob3VyLCAgMywgIDMgKiBkdXJhdGlvbkhvdXIgIF0sXG4gICAgWyAgaG91ciwgIDYsICA2ICogZHVyYXRpb25Ib3VyICBdLFxuICAgIFsgIGhvdXIsIDEyLCAxMiAqIGR1cmF0aW9uSG91ciAgXSxcbiAgICBbICAgZGF5LCAgMSwgICAgICBkdXJhdGlvbkRheSAgIF0sXG4gICAgWyAgIGRheSwgIDIsICAyICogZHVyYXRpb25EYXkgICBdLFxuICAgIFsgIHdlZWssICAxLCAgICAgIGR1cmF0aW9uV2VlayAgXSxcbiAgICBbIG1vbnRoLCAgMSwgICAgICBkdXJhdGlvbk1vbnRoIF0sXG4gICAgWyBtb250aCwgIDMsICAzICogZHVyYXRpb25Nb250aCBdLFxuICAgIFsgIHllYXIsICAxLCAgICAgIGR1cmF0aW9uWWVhciAgXVxuICBdO1xuXG4gIGZ1bmN0aW9uIHRpY2tzKHN0YXJ0LCBzdG9wLCBjb3VudCkge1xuICAgIGNvbnN0IHJldmVyc2UgPSBzdG9wIDwgc3RhcnQ7XG4gICAgaWYgKHJldmVyc2UpIFtzdGFydCwgc3RvcF0gPSBbc3RvcCwgc3RhcnRdO1xuICAgIGNvbnN0IGludGVydmFsID0gY291bnQgJiYgdHlwZW9mIGNvdW50LnJhbmdlID09PSBcImZ1bmN0aW9uXCIgPyBjb3VudCA6IHRpY2tJbnRlcnZhbChzdGFydCwgc3RvcCwgY291bnQpO1xuICAgIGNvbnN0IHRpY2tzID0gaW50ZXJ2YWwgPyBpbnRlcnZhbC5yYW5nZShzdGFydCwgK3N0b3AgKyAxKSA6IFtdOyAvLyBpbmNsdXNpdmUgc3RvcFxuICAgIHJldHVybiByZXZlcnNlID8gdGlja3MucmV2ZXJzZSgpIDogdGlja3M7XG4gIH1cblxuICBmdW5jdGlvbiB0aWNrSW50ZXJ2YWwoc3RhcnQsIHN0b3AsIGNvdW50KSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gTWF0aC5hYnMoc3RvcCAtIHN0YXJ0KSAvIGNvdW50O1xuICAgIGNvbnN0IGkgPSBiaXNlY3RvcigoWywsIHN0ZXBdKSA9PiBzdGVwKS5yaWdodCh0aWNrSW50ZXJ2YWxzLCB0YXJnZXQpO1xuICAgIGlmIChpID09PSB0aWNrSW50ZXJ2YWxzLmxlbmd0aCkgcmV0dXJuIHllYXIuZXZlcnkodGlja1N0ZXAoc3RhcnQgLyBkdXJhdGlvblllYXIsIHN0b3AgLyBkdXJhdGlvblllYXIsIGNvdW50KSk7XG4gICAgaWYgKGkgPT09IDApIHJldHVybiBtaWxsaXNlY29uZC5ldmVyeShNYXRoLm1heCh0aWNrU3RlcChzdGFydCwgc3RvcCwgY291bnQpLCAxKSk7XG4gICAgY29uc3QgW3QsIHN0ZXBdID0gdGlja0ludGVydmFsc1t0YXJnZXQgLyB0aWNrSW50ZXJ2YWxzW2kgLSAxXVsyXSA8IHRpY2tJbnRlcnZhbHNbaV1bMl0gLyB0YXJnZXQgPyBpIC0gMSA6IGldO1xuICAgIHJldHVybiB0LmV2ZXJ5KHN0ZXApO1xuICB9XG5cbiAgcmV0dXJuIFt0aWNrcywgdGlja0ludGVydmFsXTtcbn1cblxuY29uc3QgW3V0Y1RpY2tzLCB1dGNUaWNrSW50ZXJ2YWxdID0gdGlja2VyKHV0Y1llYXIsIHV0Y01vbnRoLCB1dGNTdW5kYXksIHVuaXhEYXksIHV0Y0hvdXIsIHV0Y01pbnV0ZSk7XG5jb25zdCBbdGltZVRpY2tzLCB0aW1lVGlja0ludGVydmFsXSA9IHRpY2tlcih0aW1lWWVhciwgdGltZU1vbnRoLCB0aW1lU3VuZGF5LCB0aW1lRGF5LCB0aW1lSG91ciwgdGltZU1pbnV0ZSk7XG5cbmV4cG9ydCB7dXRjVGlja3MsIHV0Y1RpY2tJbnRlcnZhbCwgdGltZVRpY2tzLCB0aW1lVGlja0ludGVydmFsfTtcbiIsImltcG9ydCB7XG4gIHRpbWVEYXksXG4gIHRpbWVTdW5kYXksXG4gIHRpbWVNb25kYXksXG4gIHRpbWVUaHVyc2RheSxcbiAgdGltZVllYXIsXG4gIHV0Y0RheSxcbiAgdXRjU3VuZGF5LFxuICB1dGNNb25kYXksXG4gIHV0Y1RodXJzZGF5LFxuICB1dGNZZWFyXG59IGZyb20gXCJkMy10aW1lXCI7XG5cbmZ1bmN0aW9uIGxvY2FsRGF0ZShkKSB7XG4gIGlmICgwIDw9IGQueSAmJiBkLnkgPCAxMDApIHtcbiAgICB2YXIgZGF0ZSA9IG5ldyBEYXRlKC0xLCBkLm0sIGQuZCwgZC5ILCBkLk0sIGQuUywgZC5MKTtcbiAgICBkYXRlLnNldEZ1bGxZZWFyKGQueSk7XG4gICAgcmV0dXJuIGRhdGU7XG4gIH1cbiAgcmV0dXJuIG5ldyBEYXRlKGQueSwgZC5tLCBkLmQsIGQuSCwgZC5NLCBkLlMsIGQuTCk7XG59XG5cbmZ1bmN0aW9uIHV0Y0RhdGUoZCkge1xuICBpZiAoMCA8PSBkLnkgJiYgZC55IDwgMTAwKSB7XG4gICAgdmFyIGRhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQygtMSwgZC5tLCBkLmQsIGQuSCwgZC5NLCBkLlMsIGQuTCkpO1xuICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoZC55KTtcbiAgICByZXR1cm4gZGF0ZTtcbiAgfVxuICByZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMoZC55LCBkLm0sIGQuZCwgZC5ILCBkLk0sIGQuUywgZC5MKSk7XG59XG5cbmZ1bmN0aW9uIG5ld0RhdGUoeSwgbSwgZCkge1xuICByZXR1cm4ge3k6IHksIG06IG0sIGQ6IGQsIEg6IDAsIE06IDAsIFM6IDAsIEw6IDB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmb3JtYXRMb2NhbGUobG9jYWxlKSB7XG4gIHZhciBsb2NhbGVfZGF0ZVRpbWUgPSBsb2NhbGUuZGF0ZVRpbWUsXG4gICAgICBsb2NhbGVfZGF0ZSA9IGxvY2FsZS5kYXRlLFxuICAgICAgbG9jYWxlX3RpbWUgPSBsb2NhbGUudGltZSxcbiAgICAgIGxvY2FsZV9wZXJpb2RzID0gbG9jYWxlLnBlcmlvZHMsXG4gICAgICBsb2NhbGVfd2Vla2RheXMgPSBsb2NhbGUuZGF5cyxcbiAgICAgIGxvY2FsZV9zaG9ydFdlZWtkYXlzID0gbG9jYWxlLnNob3J0RGF5cyxcbiAgICAgIGxvY2FsZV9tb250aHMgPSBsb2NhbGUubW9udGhzLFxuICAgICAgbG9jYWxlX3Nob3J0TW9udGhzID0gbG9jYWxlLnNob3J0TW9udGhzO1xuXG4gIHZhciBwZXJpb2RSZSA9IGZvcm1hdFJlKGxvY2FsZV9wZXJpb2RzKSxcbiAgICAgIHBlcmlvZExvb2t1cCA9IGZvcm1hdExvb2t1cChsb2NhbGVfcGVyaW9kcyksXG4gICAgICB3ZWVrZGF5UmUgPSBmb3JtYXRSZShsb2NhbGVfd2Vla2RheXMpLFxuICAgICAgd2Vla2RheUxvb2t1cCA9IGZvcm1hdExvb2t1cChsb2NhbGVfd2Vla2RheXMpLFxuICAgICAgc2hvcnRXZWVrZGF5UmUgPSBmb3JtYXRSZShsb2NhbGVfc2hvcnRXZWVrZGF5cyksXG4gICAgICBzaG9ydFdlZWtkYXlMb29rdXAgPSBmb3JtYXRMb29rdXAobG9jYWxlX3Nob3J0V2Vla2RheXMpLFxuICAgICAgbW9udGhSZSA9IGZvcm1hdFJlKGxvY2FsZV9tb250aHMpLFxuICAgICAgbW9udGhMb29rdXAgPSBmb3JtYXRMb29rdXAobG9jYWxlX21vbnRocyksXG4gICAgICBzaG9ydE1vbnRoUmUgPSBmb3JtYXRSZShsb2NhbGVfc2hvcnRNb250aHMpLFxuICAgICAgc2hvcnRNb250aExvb2t1cCA9IGZvcm1hdExvb2t1cChsb2NhbGVfc2hvcnRNb250aHMpO1xuXG4gIHZhciBmb3JtYXRzID0ge1xuICAgIFwiYVwiOiBmb3JtYXRTaG9ydFdlZWtkYXksXG4gICAgXCJBXCI6IGZvcm1hdFdlZWtkYXksXG4gICAgXCJiXCI6IGZvcm1hdFNob3J0TW9udGgsXG4gICAgXCJCXCI6IGZvcm1hdE1vbnRoLFxuICAgIFwiY1wiOiBudWxsLFxuICAgIFwiZFwiOiBmb3JtYXREYXlPZk1vbnRoLFxuICAgIFwiZVwiOiBmb3JtYXREYXlPZk1vbnRoLFxuICAgIFwiZlwiOiBmb3JtYXRNaWNyb3NlY29uZHMsXG4gICAgXCJnXCI6IGZvcm1hdFllYXJJU08sXG4gICAgXCJHXCI6IGZvcm1hdEZ1bGxZZWFySVNPLFxuICAgIFwiSFwiOiBmb3JtYXRIb3VyMjQsXG4gICAgXCJJXCI6IGZvcm1hdEhvdXIxMixcbiAgICBcImpcIjogZm9ybWF0RGF5T2ZZZWFyLFxuICAgIFwiTFwiOiBmb3JtYXRNaWxsaXNlY29uZHMsXG4gICAgXCJtXCI6IGZvcm1hdE1vbnRoTnVtYmVyLFxuICAgIFwiTVwiOiBmb3JtYXRNaW51dGVzLFxuICAgIFwicFwiOiBmb3JtYXRQZXJpb2QsXG4gICAgXCJxXCI6IGZvcm1hdFF1YXJ0ZXIsXG4gICAgXCJRXCI6IGZvcm1hdFVuaXhUaW1lc3RhbXAsXG4gICAgXCJzXCI6IGZvcm1hdFVuaXhUaW1lc3RhbXBTZWNvbmRzLFxuICAgIFwiU1wiOiBmb3JtYXRTZWNvbmRzLFxuICAgIFwidVwiOiBmb3JtYXRXZWVrZGF5TnVtYmVyTW9uZGF5LFxuICAgIFwiVVwiOiBmb3JtYXRXZWVrTnVtYmVyU3VuZGF5LFxuICAgIFwiVlwiOiBmb3JtYXRXZWVrTnVtYmVySVNPLFxuICAgIFwid1wiOiBmb3JtYXRXZWVrZGF5TnVtYmVyU3VuZGF5LFxuICAgIFwiV1wiOiBmb3JtYXRXZWVrTnVtYmVyTW9uZGF5LFxuICAgIFwieFwiOiBudWxsLFxuICAgIFwiWFwiOiBudWxsLFxuICAgIFwieVwiOiBmb3JtYXRZZWFyLFxuICAgIFwiWVwiOiBmb3JtYXRGdWxsWWVhcixcbiAgICBcIlpcIjogZm9ybWF0Wm9uZSxcbiAgICBcIiVcIjogZm9ybWF0TGl0ZXJhbFBlcmNlbnRcbiAgfTtcblxuICB2YXIgdXRjRm9ybWF0cyA9IHtcbiAgICBcImFcIjogZm9ybWF0VVRDU2hvcnRXZWVrZGF5LFxuICAgIFwiQVwiOiBmb3JtYXRVVENXZWVrZGF5LFxuICAgIFwiYlwiOiBmb3JtYXRVVENTaG9ydE1vbnRoLFxuICAgIFwiQlwiOiBmb3JtYXRVVENNb250aCxcbiAgICBcImNcIjogbnVsbCxcbiAgICBcImRcIjogZm9ybWF0VVRDRGF5T2ZNb250aCxcbiAgICBcImVcIjogZm9ybWF0VVRDRGF5T2ZNb250aCxcbiAgICBcImZcIjogZm9ybWF0VVRDTWljcm9zZWNvbmRzLFxuICAgIFwiZ1wiOiBmb3JtYXRVVENZZWFySVNPLFxuICAgIFwiR1wiOiBmb3JtYXRVVENGdWxsWWVhcklTTyxcbiAgICBcIkhcIjogZm9ybWF0VVRDSG91cjI0LFxuICAgIFwiSVwiOiBmb3JtYXRVVENIb3VyMTIsXG4gICAgXCJqXCI6IGZvcm1hdFVUQ0RheU9mWWVhcixcbiAgICBcIkxcIjogZm9ybWF0VVRDTWlsbGlzZWNvbmRzLFxuICAgIFwibVwiOiBmb3JtYXRVVENNb250aE51bWJlcixcbiAgICBcIk1cIjogZm9ybWF0VVRDTWludXRlcyxcbiAgICBcInBcIjogZm9ybWF0VVRDUGVyaW9kLFxuICAgIFwicVwiOiBmb3JtYXRVVENRdWFydGVyLFxuICAgIFwiUVwiOiBmb3JtYXRVbml4VGltZXN0YW1wLFxuICAgIFwic1wiOiBmb3JtYXRVbml4VGltZXN0YW1wU2Vjb25kcyxcbiAgICBcIlNcIjogZm9ybWF0VVRDU2Vjb25kcyxcbiAgICBcInVcIjogZm9ybWF0VVRDV2Vla2RheU51bWJlck1vbmRheSxcbiAgICBcIlVcIjogZm9ybWF0VVRDV2Vla051bWJlclN1bmRheSxcbiAgICBcIlZcIjogZm9ybWF0VVRDV2Vla051bWJlcklTTyxcbiAgICBcIndcIjogZm9ybWF0VVRDV2Vla2RheU51bWJlclN1bmRheSxcbiAgICBcIldcIjogZm9ybWF0VVRDV2Vla051bWJlck1vbmRheSxcbiAgICBcInhcIjogbnVsbCxcbiAgICBcIlhcIjogbnVsbCxcbiAgICBcInlcIjogZm9ybWF0VVRDWWVhcixcbiAgICBcIllcIjogZm9ybWF0VVRDRnVsbFllYXIsXG4gICAgXCJaXCI6IGZvcm1hdFVUQ1pvbmUsXG4gICAgXCIlXCI6IGZvcm1hdExpdGVyYWxQZXJjZW50XG4gIH07XG5cbiAgdmFyIHBhcnNlcyA9IHtcbiAgICBcImFcIjogcGFyc2VTaG9ydFdlZWtkYXksXG4gICAgXCJBXCI6IHBhcnNlV2Vla2RheSxcbiAgICBcImJcIjogcGFyc2VTaG9ydE1vbnRoLFxuICAgIFwiQlwiOiBwYXJzZU1vbnRoLFxuICAgIFwiY1wiOiBwYXJzZUxvY2FsZURhdGVUaW1lLFxuICAgIFwiZFwiOiBwYXJzZURheU9mTW9udGgsXG4gICAgXCJlXCI6IHBhcnNlRGF5T2ZNb250aCxcbiAgICBcImZcIjogcGFyc2VNaWNyb3NlY29uZHMsXG4gICAgXCJnXCI6IHBhcnNlWWVhcixcbiAgICBcIkdcIjogcGFyc2VGdWxsWWVhcixcbiAgICBcIkhcIjogcGFyc2VIb3VyMjQsXG4gICAgXCJJXCI6IHBhcnNlSG91cjI0LFxuICAgIFwialwiOiBwYXJzZURheU9mWWVhcixcbiAgICBcIkxcIjogcGFyc2VNaWxsaXNlY29uZHMsXG4gICAgXCJtXCI6IHBhcnNlTW9udGhOdW1iZXIsXG4gICAgXCJNXCI6IHBhcnNlTWludXRlcyxcbiAgICBcInBcIjogcGFyc2VQZXJpb2QsXG4gICAgXCJxXCI6IHBhcnNlUXVhcnRlcixcbiAgICBcIlFcIjogcGFyc2VVbml4VGltZXN0YW1wLFxuICAgIFwic1wiOiBwYXJzZVVuaXhUaW1lc3RhbXBTZWNvbmRzLFxuICAgIFwiU1wiOiBwYXJzZVNlY29uZHMsXG4gICAgXCJ1XCI6IHBhcnNlV2Vla2RheU51bWJlck1vbmRheSxcbiAgICBcIlVcIjogcGFyc2VXZWVrTnVtYmVyU3VuZGF5LFxuICAgIFwiVlwiOiBwYXJzZVdlZWtOdW1iZXJJU08sXG4gICAgXCJ3XCI6IHBhcnNlV2Vla2RheU51bWJlclN1bmRheSxcbiAgICBcIldcIjogcGFyc2VXZWVrTnVtYmVyTW9uZGF5LFxuICAgIFwieFwiOiBwYXJzZUxvY2FsZURhdGUsXG4gICAgXCJYXCI6IHBhcnNlTG9jYWxlVGltZSxcbiAgICBcInlcIjogcGFyc2VZZWFyLFxuICAgIFwiWVwiOiBwYXJzZUZ1bGxZZWFyLFxuICAgIFwiWlwiOiBwYXJzZVpvbmUsXG4gICAgXCIlXCI6IHBhcnNlTGl0ZXJhbFBlcmNlbnRcbiAgfTtcblxuICAvLyBUaGVzZSByZWN1cnNpdmUgZGlyZWN0aXZlIGRlZmluaXRpb25zIG11c3QgYmUgZGVmZXJyZWQuXG4gIGZvcm1hdHMueCA9IG5ld0Zvcm1hdChsb2NhbGVfZGF0ZSwgZm9ybWF0cyk7XG4gIGZvcm1hdHMuWCA9IG5ld0Zvcm1hdChsb2NhbGVfdGltZSwgZm9ybWF0cyk7XG4gIGZvcm1hdHMuYyA9IG5ld0Zvcm1hdChsb2NhbGVfZGF0ZVRpbWUsIGZvcm1hdHMpO1xuICB1dGNGb3JtYXRzLnggPSBuZXdGb3JtYXQobG9jYWxlX2RhdGUsIHV0Y0Zvcm1hdHMpO1xuICB1dGNGb3JtYXRzLlggPSBuZXdGb3JtYXQobG9jYWxlX3RpbWUsIHV0Y0Zvcm1hdHMpO1xuICB1dGNGb3JtYXRzLmMgPSBuZXdGb3JtYXQobG9jYWxlX2RhdGVUaW1lLCB1dGNGb3JtYXRzKTtcblxuICBmdW5jdGlvbiBuZXdGb3JtYXQoc3BlY2lmaWVyLCBmb3JtYXRzKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGRhdGUpIHtcbiAgICAgIHZhciBzdHJpbmcgPSBbXSxcbiAgICAgICAgICBpID0gLTEsXG4gICAgICAgICAgaiA9IDAsXG4gICAgICAgICAgbiA9IHNwZWNpZmllci5sZW5ndGgsXG4gICAgICAgICAgYyxcbiAgICAgICAgICBwYWQsXG4gICAgICAgICAgZm9ybWF0O1xuXG4gICAgICBpZiAoIShkYXRlIGluc3RhbmNlb2YgRGF0ZSkpIGRhdGUgPSBuZXcgRGF0ZSgrZGF0ZSk7XG5cbiAgICAgIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgICAgIGlmIChzcGVjaWZpZXIuY2hhckNvZGVBdChpKSA9PT0gMzcpIHtcbiAgICAgICAgICBzdHJpbmcucHVzaChzcGVjaWZpZXIuc2xpY2UoaiwgaSkpO1xuICAgICAgICAgIGlmICgocGFkID0gcGFkc1tjID0gc3BlY2lmaWVyLmNoYXJBdCgrK2kpXSkgIT0gbnVsbCkgYyA9IHNwZWNpZmllci5jaGFyQXQoKytpKTtcbiAgICAgICAgICBlbHNlIHBhZCA9IGMgPT09IFwiZVwiID8gXCIgXCIgOiBcIjBcIjtcbiAgICAgICAgICBpZiAoZm9ybWF0ID0gZm9ybWF0c1tjXSkgYyA9IGZvcm1hdChkYXRlLCBwYWQpO1xuICAgICAgICAgIHN0cmluZy5wdXNoKGMpO1xuICAgICAgICAgIGogPSBpICsgMTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzdHJpbmcucHVzaChzcGVjaWZpZXIuc2xpY2UoaiwgaSkpO1xuICAgICAgcmV0dXJuIHN0cmluZy5qb2luKFwiXCIpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBuZXdQYXJzZShzcGVjaWZpZXIsIFopIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgICB2YXIgZCA9IG5ld0RhdGUoMTkwMCwgdW5kZWZpbmVkLCAxKSxcbiAgICAgICAgICBpID0gcGFyc2VTcGVjaWZpZXIoZCwgc3BlY2lmaWVyLCBzdHJpbmcgKz0gXCJcIiwgMCksXG4gICAgICAgICAgd2VlaywgZGF5O1xuICAgICAgaWYgKGkgIT0gc3RyaW5nLmxlbmd0aCkgcmV0dXJuIG51bGw7XG5cbiAgICAgIC8vIElmIGEgVU5JWCB0aW1lc3RhbXAgaXMgc3BlY2lmaWVkLCByZXR1cm4gaXQuXG4gICAgICBpZiAoXCJRXCIgaW4gZCkgcmV0dXJuIG5ldyBEYXRlKGQuUSk7XG4gICAgICBpZiAoXCJzXCIgaW4gZCkgcmV0dXJuIG5ldyBEYXRlKGQucyAqIDEwMDAgKyAoXCJMXCIgaW4gZCA/IGQuTCA6IDApKTtcblxuICAgICAgLy8gSWYgdGhpcyBpcyB1dGNQYXJzZSwgbmV2ZXIgdXNlIHRoZSBsb2NhbCB0aW1lem9uZS5cbiAgICAgIGlmIChaICYmICEoXCJaXCIgaW4gZCkpIGQuWiA9IDA7XG5cbiAgICAgIC8vIFRoZSBhbS1wbSBmbGFnIGlzIDAgZm9yIEFNLCBhbmQgMSBmb3IgUE0uXG4gICAgICBpZiAoXCJwXCIgaW4gZCkgZC5IID0gZC5IICUgMTIgKyBkLnAgKiAxMjtcblxuICAgICAgLy8gSWYgdGhlIG1vbnRoIHdhcyBub3Qgc3BlY2lmaWVkLCBpbmhlcml0IGZyb20gdGhlIHF1YXJ0ZXIuXG4gICAgICBpZiAoZC5tID09PSB1bmRlZmluZWQpIGQubSA9IFwicVwiIGluIGQgPyBkLnEgOiAwO1xuXG4gICAgICAvLyBDb252ZXJ0IGRheS1vZi13ZWVrIGFuZCB3ZWVrLW9mLXllYXIgdG8gZGF5LW9mLXllYXIuXG4gICAgICBpZiAoXCJWXCIgaW4gZCkge1xuICAgICAgICBpZiAoZC5WIDwgMSB8fCBkLlYgPiA1MykgcmV0dXJuIG51bGw7XG4gICAgICAgIGlmICghKFwid1wiIGluIGQpKSBkLncgPSAxO1xuICAgICAgICBpZiAoXCJaXCIgaW4gZCkge1xuICAgICAgICAgIHdlZWsgPSB1dGNEYXRlKG5ld0RhdGUoZC55LCAwLCAxKSksIGRheSA9IHdlZWsuZ2V0VVRDRGF5KCk7XG4gICAgICAgICAgd2VlayA9IGRheSA+IDQgfHwgZGF5ID09PSAwID8gdXRjTW9uZGF5LmNlaWwod2VlaykgOiB1dGNNb25kYXkod2Vlayk7XG4gICAgICAgICAgd2VlayA9IHV0Y0RheS5vZmZzZXQod2VlaywgKGQuViAtIDEpICogNyk7XG4gICAgICAgICAgZC55ID0gd2Vlay5nZXRVVENGdWxsWWVhcigpO1xuICAgICAgICAgIGQubSA9IHdlZWsuZ2V0VVRDTW9udGgoKTtcbiAgICAgICAgICBkLmQgPSB3ZWVrLmdldFVUQ0RhdGUoKSArIChkLncgKyA2KSAlIDc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgd2VlayA9IGxvY2FsRGF0ZShuZXdEYXRlKGQueSwgMCwgMSkpLCBkYXkgPSB3ZWVrLmdldERheSgpO1xuICAgICAgICAgIHdlZWsgPSBkYXkgPiA0IHx8IGRheSA9PT0gMCA/IHRpbWVNb25kYXkuY2VpbCh3ZWVrKSA6IHRpbWVNb25kYXkod2Vlayk7XG4gICAgICAgICAgd2VlayA9IHRpbWVEYXkub2Zmc2V0KHdlZWssIChkLlYgLSAxKSAqIDcpO1xuICAgICAgICAgIGQueSA9IHdlZWsuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgICBkLm0gPSB3ZWVrLmdldE1vbnRoKCk7XG4gICAgICAgICAgZC5kID0gd2Vlay5nZXREYXRlKCkgKyAoZC53ICsgNikgJSA3O1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKFwiV1wiIGluIGQgfHwgXCJVXCIgaW4gZCkge1xuICAgICAgICBpZiAoIShcIndcIiBpbiBkKSkgZC53ID0gXCJ1XCIgaW4gZCA/IGQudSAlIDcgOiBcIldcIiBpbiBkID8gMSA6IDA7XG4gICAgICAgIGRheSA9IFwiWlwiIGluIGQgPyB1dGNEYXRlKG5ld0RhdGUoZC55LCAwLCAxKSkuZ2V0VVRDRGF5KCkgOiBsb2NhbERhdGUobmV3RGF0ZShkLnksIDAsIDEpKS5nZXREYXkoKTtcbiAgICAgICAgZC5tID0gMDtcbiAgICAgICAgZC5kID0gXCJXXCIgaW4gZCA/IChkLncgKyA2KSAlIDcgKyBkLlcgKiA3IC0gKGRheSArIDUpICUgNyA6IGQudyArIGQuVSAqIDcgLSAoZGF5ICsgNikgJSA3O1xuICAgICAgfVxuXG4gICAgICAvLyBJZiBhIHRpbWUgem9uZSBpcyBzcGVjaWZpZWQsIGFsbCBmaWVsZHMgYXJlIGludGVycHJldGVkIGFzIFVUQyBhbmQgdGhlblxuICAgICAgLy8gb2Zmc2V0IGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWVkIHRpbWUgem9uZS5cbiAgICAgIGlmIChcIlpcIiBpbiBkKSB7XG4gICAgICAgIGQuSCArPSBkLlogLyAxMDAgfCAwO1xuICAgICAgICBkLk0gKz0gZC5aICUgMTAwO1xuICAgICAgICByZXR1cm4gdXRjRGF0ZShkKTtcbiAgICAgIH1cblxuICAgICAgLy8gT3RoZXJ3aXNlLCBhbGwgZmllbGRzIGFyZSBpbiBsb2NhbCB0aW1lLlxuICAgICAgcmV0dXJuIGxvY2FsRGF0ZShkKTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VTcGVjaWZpZXIoZCwgc3BlY2lmaWVyLCBzdHJpbmcsIGopIHtcbiAgICB2YXIgaSA9IDAsXG4gICAgICAgIG4gPSBzcGVjaWZpZXIubGVuZ3RoLFxuICAgICAgICBtID0gc3RyaW5nLmxlbmd0aCxcbiAgICAgICAgYyxcbiAgICAgICAgcGFyc2U7XG5cbiAgICB3aGlsZSAoaSA8IG4pIHtcbiAgICAgIGlmIChqID49IG0pIHJldHVybiAtMTtcbiAgICAgIGMgPSBzcGVjaWZpZXIuY2hhckNvZGVBdChpKyspO1xuICAgICAgaWYgKGMgPT09IDM3KSB7XG4gICAgICAgIGMgPSBzcGVjaWZpZXIuY2hhckF0KGkrKyk7XG4gICAgICAgIHBhcnNlID0gcGFyc2VzW2MgaW4gcGFkcyA/IHNwZWNpZmllci5jaGFyQXQoaSsrKSA6IGNdO1xuICAgICAgICBpZiAoIXBhcnNlIHx8ICgoaiA9IHBhcnNlKGQsIHN0cmluZywgaikpIDwgMCkpIHJldHVybiAtMTtcbiAgICAgIH0gZWxzZSBpZiAoYyAhPSBzdHJpbmcuY2hhckNvZGVBdChqKyspKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gajtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlUGVyaW9kKGQsIHN0cmluZywgaSkge1xuICAgIHZhciBuID0gcGVyaW9kUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSkpO1xuICAgIHJldHVybiBuID8gKGQucCA9IHBlcmlvZExvb2t1cC5nZXQoblswXS50b0xvd2VyQ2FzZSgpKSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VTaG9ydFdlZWtkYXkoZCwgc3RyaW5nLCBpKSB7XG4gICAgdmFyIG4gPSBzaG9ydFdlZWtkYXlSZS5leGVjKHN0cmluZy5zbGljZShpKSk7XG4gICAgcmV0dXJuIG4gPyAoZC53ID0gc2hvcnRXZWVrZGF5TG9va3VwLmdldChuWzBdLnRvTG93ZXJDYXNlKCkpLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZVdlZWtkYXkoZCwgc3RyaW5nLCBpKSB7XG4gICAgdmFyIG4gPSB3ZWVrZGF5UmUuZXhlYyhzdHJpbmcuc2xpY2UoaSkpO1xuICAgIHJldHVybiBuID8gKGQudyA9IHdlZWtkYXlMb29rdXAuZ2V0KG5bMF0udG9Mb3dlckNhc2UoKSksIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlU2hvcnRNb250aChkLCBzdHJpbmcsIGkpIHtcbiAgICB2YXIgbiA9IHNob3J0TW9udGhSZS5leGVjKHN0cmluZy5zbGljZShpKSk7XG4gICAgcmV0dXJuIG4gPyAoZC5tID0gc2hvcnRNb250aExvb2t1cC5nZXQoblswXS50b0xvd2VyQ2FzZSgpKSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VNb250aChkLCBzdHJpbmcsIGkpIHtcbiAgICB2YXIgbiA9IG1vbnRoUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSkpO1xuICAgIHJldHVybiBuID8gKGQubSA9IG1vbnRoTG9va3VwLmdldChuWzBdLnRvTG93ZXJDYXNlKCkpLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUxvY2FsZURhdGVUaW1lKGQsIHN0cmluZywgaSkge1xuICAgIHJldHVybiBwYXJzZVNwZWNpZmllcihkLCBsb2NhbGVfZGF0ZVRpbWUsIHN0cmluZywgaSk7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUxvY2FsZURhdGUoZCwgc3RyaW5nLCBpKSB7XG4gICAgcmV0dXJuIHBhcnNlU3BlY2lmaWVyKGQsIGxvY2FsZV9kYXRlLCBzdHJpbmcsIGkpO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VMb2NhbGVUaW1lKGQsIHN0cmluZywgaSkge1xuICAgIHJldHVybiBwYXJzZVNwZWNpZmllcihkLCBsb2NhbGVfdGltZSwgc3RyaW5nLCBpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFNob3J0V2Vla2RheShkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV9zaG9ydFdlZWtkYXlzW2QuZ2V0RGF5KCldO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0V2Vla2RheShkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV93ZWVrZGF5c1tkLmdldERheSgpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFNob3J0TW9udGgoZCkge1xuICAgIHJldHVybiBsb2NhbGVfc2hvcnRNb250aHNbZC5nZXRNb250aCgpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdE1vbnRoKGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX21vbnRoc1tkLmdldE1vbnRoKCldO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0UGVyaW9kKGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX3BlcmlvZHNbKyhkLmdldEhvdXJzKCkgPj0gMTIpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFF1YXJ0ZXIoZCkge1xuICAgIHJldHVybiAxICsgfn4oZC5nZXRNb250aCgpIC8gMyk7XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRVVENTaG9ydFdlZWtkYXkoZCkge1xuICAgIHJldHVybiBsb2NhbGVfc2hvcnRXZWVrZGF5c1tkLmdldFVUQ0RheSgpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFVUQ1dlZWtkYXkoZCkge1xuICAgIHJldHVybiBsb2NhbGVfd2Vla2RheXNbZC5nZXRVVENEYXkoKV07XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRVVENTaG9ydE1vbnRoKGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX3Nob3J0TW9udGhzW2QuZ2V0VVRDTW9udGgoKV07XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRVVENNb250aChkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV9tb250aHNbZC5nZXRVVENNb250aCgpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFVUQ1BlcmlvZChkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV9wZXJpb2RzWysoZC5nZXRVVENIb3VycygpID49IDEyKV07XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRVVENRdWFydGVyKGQpIHtcbiAgICByZXR1cm4gMSArIH5+KGQuZ2V0VVRDTW9udGgoKSAvIDMpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBmb3JtYXQ6IGZ1bmN0aW9uKHNwZWNpZmllcikge1xuICAgICAgdmFyIGYgPSBuZXdGb3JtYXQoc3BlY2lmaWVyICs9IFwiXCIsIGZvcm1hdHMpO1xuICAgICAgZi50b1N0cmluZyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gc3BlY2lmaWVyOyB9O1xuICAgICAgcmV0dXJuIGY7XG4gICAgfSxcbiAgICBwYXJzZTogZnVuY3Rpb24oc3BlY2lmaWVyKSB7XG4gICAgICB2YXIgcCA9IG5ld1BhcnNlKHNwZWNpZmllciArPSBcIlwiLCBmYWxzZSk7XG4gICAgICBwLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7IHJldHVybiBzcGVjaWZpZXI7IH07XG4gICAgICByZXR1cm4gcDtcbiAgICB9LFxuICAgIHV0Y0Zvcm1hdDogZnVuY3Rpb24oc3BlY2lmaWVyKSB7XG4gICAgICB2YXIgZiA9IG5ld0Zvcm1hdChzcGVjaWZpZXIgKz0gXCJcIiwgdXRjRm9ybWF0cyk7XG4gICAgICBmLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7IHJldHVybiBzcGVjaWZpZXI7IH07XG4gICAgICByZXR1cm4gZjtcbiAgICB9LFxuICAgIHV0Y1BhcnNlOiBmdW5jdGlvbihzcGVjaWZpZXIpIHtcbiAgICAgIHZhciBwID0gbmV3UGFyc2Uoc3BlY2lmaWVyICs9IFwiXCIsIHRydWUpO1xuICAgICAgcC50b1N0cmluZyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gc3BlY2lmaWVyOyB9O1xuICAgICAgcmV0dXJuIHA7XG4gICAgfVxuICB9O1xufVxuXG52YXIgcGFkcyA9IHtcIi1cIjogXCJcIiwgXCJfXCI6IFwiIFwiLCBcIjBcIjogXCIwXCJ9LFxuICAgIG51bWJlclJlID0gL15cXHMqXFxkKy8sIC8vIG5vdGU6IGlnbm9yZXMgbmV4dCBkaXJlY3RpdmVcbiAgICBwZXJjZW50UmUgPSAvXiUvLFxuICAgIHJlcXVvdGVSZSA9IC9bXFxcXF4kKis/fFtcXF0oKS57fV0vZztcblxuZnVuY3Rpb24gcGFkKHZhbHVlLCBmaWxsLCB3aWR0aCkge1xuICB2YXIgc2lnbiA9IHZhbHVlIDwgMCA/IFwiLVwiIDogXCJcIixcbiAgICAgIHN0cmluZyA9IChzaWduID8gLXZhbHVlIDogdmFsdWUpICsgXCJcIixcbiAgICAgIGxlbmd0aCA9IHN0cmluZy5sZW5ndGg7XG4gIHJldHVybiBzaWduICsgKGxlbmd0aCA8IHdpZHRoID8gbmV3IEFycmF5KHdpZHRoIC0gbGVuZ3RoICsgMSkuam9pbihmaWxsKSArIHN0cmluZyA6IHN0cmluZyk7XG59XG5cbmZ1bmN0aW9uIHJlcXVvdGUocykge1xuICByZXR1cm4gcy5yZXBsYWNlKHJlcXVvdGVSZSwgXCJcXFxcJCZcIik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFJlKG5hbWVzKSB7XG4gIHJldHVybiBuZXcgUmVnRXhwKFwiXig/OlwiICsgbmFtZXMubWFwKHJlcXVvdGUpLmpvaW4oXCJ8XCIpICsgXCIpXCIsIFwiaVwiKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0TG9va3VwKG5hbWVzKSB7XG4gIHJldHVybiBuZXcgTWFwKG5hbWVzLm1hcCgobmFtZSwgaSkgPT4gW25hbWUudG9Mb3dlckNhc2UoKSwgaV0pKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VXZWVrZGF5TnVtYmVyU3VuZGF5KGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAxKSk7XG4gIHJldHVybiBuID8gKGQudyA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlV2Vla2RheU51bWJlck1vbmRheShkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMSkpO1xuICByZXR1cm4gbiA/IChkLnUgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZVdlZWtOdW1iZXJTdW5kYXkoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDIpKTtcbiAgcmV0dXJuIG4gPyAoZC5VID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VXZWVrTnVtYmVySVNPKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAyKSk7XG4gIHJldHVybiBuID8gKGQuViA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlV2Vla051bWJlck1vbmRheShkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICByZXR1cm4gbiA/IChkLlcgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZUZ1bGxZZWFyKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyA0KSk7XG4gIHJldHVybiBuID8gKGQueSA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlWWVhcihkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICByZXR1cm4gbiA/IChkLnkgPSArblswXSArICgrblswXSA+IDY4ID8gMTkwMCA6IDIwMDApLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlWm9uZShkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSAvXihaKXwoWystXVxcZFxcZCkoPzo6PyhcXGRcXGQpKT8vLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyA2KSk7XG4gIHJldHVybiBuID8gKGQuWiA9IG5bMV0gPyAwIDogLShuWzJdICsgKG5bM10gfHwgXCIwMFwiKSksIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VRdWFydGVyKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAxKSk7XG4gIHJldHVybiBuID8gKGQucSA9IG5bMF0gKiAzIC0gMywgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZU1vbnRoTnVtYmVyKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAyKSk7XG4gIHJldHVybiBuID8gKGQubSA9IG5bMF0gLSAxLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlRGF5T2ZNb250aChkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICByZXR1cm4gbiA/IChkLmQgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZURheU9mWWVhcihkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMykpO1xuICByZXR1cm4gbiA/IChkLm0gPSAwLCBkLmQgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZUhvdXIyNChkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICByZXR1cm4gbiA/IChkLkggPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZU1pbnV0ZXMoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDIpKTtcbiAgcmV0dXJuIG4gPyAoZC5NID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VTZWNvbmRzKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAyKSk7XG4gIHJldHVybiBuID8gKGQuUyA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTWlsbGlzZWNvbmRzKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAzKSk7XG4gIHJldHVybiBuID8gKGQuTCA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTWljcm9zZWNvbmRzKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyA2KSk7XG4gIHJldHVybiBuID8gKGQuTCA9IE1hdGguZmxvb3IoblswXSAvIDEwMDApLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTGl0ZXJhbFBlcmNlbnQoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gcGVyY2VudFJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAxKSk7XG4gIHJldHVybiBuID8gaSArIG5bMF0ubGVuZ3RoIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVW5peFRpbWVzdGFtcChkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpKSk7XG4gIHJldHVybiBuID8gKGQuUSA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVW5peFRpbWVzdGFtcFNlY29uZHMoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSkpO1xuICByZXR1cm4gbiA/IChkLnMgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBmb3JtYXREYXlPZk1vbnRoKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldERhdGUoKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdEhvdXIyNChkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRIb3VycygpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0SG91cjEyKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldEhvdXJzKCkgJSAxMiB8fCAxMiwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdERheU9mWWVhcihkLCBwKSB7XG4gIHJldHVybiBwYWQoMSArIHRpbWVEYXkuY291bnQodGltZVllYXIoZCksIGQpLCBwLCAzKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0TWlsbGlzZWNvbmRzKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldE1pbGxpc2Vjb25kcygpLCBwLCAzKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0TWljcm9zZWNvbmRzKGQsIHApIHtcbiAgcmV0dXJuIGZvcm1hdE1pbGxpc2Vjb25kcyhkLCBwKSArIFwiMDAwXCI7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdE1vbnRoTnVtYmVyKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldE1vbnRoKCkgKyAxLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0TWludXRlcyhkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRNaW51dGVzKCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRTZWNvbmRzKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldFNlY29uZHMoKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFdlZWtkYXlOdW1iZXJNb25kYXkoZCkge1xuICB2YXIgZGF5ID0gZC5nZXREYXkoKTtcbiAgcmV0dXJuIGRheSA9PT0gMCA/IDcgOiBkYXk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFdlZWtOdW1iZXJTdW5kYXkoZCwgcCkge1xuICByZXR1cm4gcGFkKHRpbWVTdW5kYXkuY291bnQodGltZVllYXIoZCkgLSAxLCBkKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGRJU08oZCkge1xuICB2YXIgZGF5ID0gZC5nZXREYXkoKTtcbiAgcmV0dXJuIChkYXkgPj0gNCB8fCBkYXkgPT09IDApID8gdGltZVRodXJzZGF5KGQpIDogdGltZVRodXJzZGF5LmNlaWwoZCk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFdlZWtOdW1iZXJJU08oZCwgcCkge1xuICBkID0gZElTTyhkKTtcbiAgcmV0dXJuIHBhZCh0aW1lVGh1cnNkYXkuY291bnQodGltZVllYXIoZCksIGQpICsgKHRpbWVZZWFyKGQpLmdldERheSgpID09PSA0KSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFdlZWtkYXlOdW1iZXJTdW5kYXkoZCkge1xuICByZXR1cm4gZC5nZXREYXkoKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0V2Vla051bWJlck1vbmRheShkLCBwKSB7XG4gIHJldHVybiBwYWQodGltZU1vbmRheS5jb3VudCh0aW1lWWVhcihkKSAtIDEsIGQpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0WWVhcihkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRGdWxsWWVhcigpICUgMTAwLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0WWVhcklTTyhkLCBwKSB7XG4gIGQgPSBkSVNPKGQpO1xuICByZXR1cm4gcGFkKGQuZ2V0RnVsbFllYXIoKSAlIDEwMCwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdEZ1bGxZZWFyKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldEZ1bGxZZWFyKCkgJSAxMDAwMCwgcCwgNCk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdEZ1bGxZZWFySVNPKGQsIHApIHtcbiAgdmFyIGRheSA9IGQuZ2V0RGF5KCk7XG4gIGQgPSAoZGF5ID49IDQgfHwgZGF5ID09PSAwKSA/IHRpbWVUaHVyc2RheShkKSA6IHRpbWVUaHVyc2RheS5jZWlsKGQpO1xuICByZXR1cm4gcGFkKGQuZ2V0RnVsbFllYXIoKSAlIDEwMDAwLCBwLCA0KTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0Wm9uZShkKSB7XG4gIHZhciB6ID0gZC5nZXRUaW1lem9uZU9mZnNldCgpO1xuICByZXR1cm4gKHogPiAwID8gXCItXCIgOiAoeiAqPSAtMSwgXCIrXCIpKVxuICAgICAgKyBwYWQoeiAvIDYwIHwgMCwgXCIwXCIsIDIpXG4gICAgICArIHBhZCh6ICUgNjAsIFwiMFwiLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDRGF5T2ZNb250aChkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRVVENEYXRlKCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENIb3VyMjQoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDSG91cnMoKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ0hvdXIxMihkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRVVENIb3VycygpICUgMTIgfHwgMTIsIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENEYXlPZlllYXIoZCwgcCkge1xuICByZXR1cm4gcGFkKDEgKyB1dGNEYXkuY291bnQodXRjWWVhcihkKSwgZCksIHAsIDMpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENNaWxsaXNlY29uZHMoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDTWlsbGlzZWNvbmRzKCksIHAsIDMpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENNaWNyb3NlY29uZHMoZCwgcCkge1xuICByZXR1cm4gZm9ybWF0VVRDTWlsbGlzZWNvbmRzKGQsIHApICsgXCIwMDBcIjtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDTW9udGhOdW1iZXIoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDTW9udGgoKSArIDEsIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENNaW51dGVzKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldFVUQ01pbnV0ZXMoKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ1NlY29uZHMoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDU2Vjb25kcygpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDV2Vla2RheU51bWJlck1vbmRheShkKSB7XG4gIHZhciBkb3cgPSBkLmdldFVUQ0RheSgpO1xuICByZXR1cm4gZG93ID09PSAwID8gNyA6IGRvdztcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDV2Vla051bWJlclN1bmRheShkLCBwKSB7XG4gIHJldHVybiBwYWQodXRjU3VuZGF5LmNvdW50KHV0Y1llYXIoZCkgLSAxLCBkKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIFVUQ2RJU08oZCkge1xuICB2YXIgZGF5ID0gZC5nZXRVVENEYXkoKTtcbiAgcmV0dXJuIChkYXkgPj0gNCB8fCBkYXkgPT09IDApID8gdXRjVGh1cnNkYXkoZCkgOiB1dGNUaHVyc2RheS5jZWlsKGQpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENXZWVrTnVtYmVySVNPKGQsIHApIHtcbiAgZCA9IFVUQ2RJU08oZCk7XG4gIHJldHVybiBwYWQodXRjVGh1cnNkYXkuY291bnQodXRjWWVhcihkKSwgZCkgKyAodXRjWWVhcihkKS5nZXRVVENEYXkoKSA9PT0gNCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENXZWVrZGF5TnVtYmVyU3VuZGF5KGQpIHtcbiAgcmV0dXJuIGQuZ2V0VVRDRGF5KCk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ1dlZWtOdW1iZXJNb25kYXkoZCwgcCkge1xuICByZXR1cm4gcGFkKHV0Y01vbmRheS5jb3VudCh1dGNZZWFyKGQpIC0gMSwgZCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENZZWFyKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldFVUQ0Z1bGxZZWFyKCkgJSAxMDAsIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENZZWFySVNPKGQsIHApIHtcbiAgZCA9IFVUQ2RJU08oZCk7XG4gIHJldHVybiBwYWQoZC5nZXRVVENGdWxsWWVhcigpICUgMTAwLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDRnVsbFllYXIoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDRnVsbFllYXIoKSAlIDEwMDAwLCBwLCA0KTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDRnVsbFllYXJJU08oZCwgcCkge1xuICB2YXIgZGF5ID0gZC5nZXRVVENEYXkoKTtcbiAgZCA9IChkYXkgPj0gNCB8fCBkYXkgPT09IDApID8gdXRjVGh1cnNkYXkoZCkgOiB1dGNUaHVyc2RheS5jZWlsKGQpO1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDRnVsbFllYXIoKSAlIDEwMDAwLCBwLCA0KTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDWm9uZSgpIHtcbiAgcmV0dXJuIFwiKzAwMDBcIjtcbn1cblxuZnVuY3Rpb24gZm9ybWF0TGl0ZXJhbFBlcmNlbnQoKSB7XG4gIHJldHVybiBcIiVcIjtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VW5peFRpbWVzdGFtcChkKSB7XG4gIHJldHVybiArZDtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VW5peFRpbWVzdGFtcFNlY29uZHMoZCkge1xuICByZXR1cm4gTWF0aC5mbG9vcigrZCAvIDEwMDApO1xufVxuIiwiaW1wb3J0IGZvcm1hdExvY2FsZSBmcm9tIFwiLi9sb2NhbGUuanNcIjtcblxudmFyIGxvY2FsZTtcbmV4cG9ydCB2YXIgdGltZUZvcm1hdDtcbmV4cG9ydCB2YXIgdGltZVBhcnNlO1xuZXhwb3J0IHZhciB1dGNGb3JtYXQ7XG5leHBvcnQgdmFyIHV0Y1BhcnNlO1xuXG5kZWZhdWx0TG9jYWxlKHtcbiAgZGF0ZVRpbWU6IFwiJXgsICVYXCIsXG4gIGRhdGU6IFwiJS1tLyUtZC8lWVwiLFxuICB0aW1lOiBcIiUtSTolTTolUyAlcFwiLFxuICBwZXJpb2RzOiBbXCJBTVwiLCBcIlBNXCJdLFxuICBkYXlzOiBbXCJTdW5kYXlcIiwgXCJNb25kYXlcIiwgXCJUdWVzZGF5XCIsIFwiV2VkbmVzZGF5XCIsIFwiVGh1cnNkYXlcIiwgXCJGcmlkYXlcIiwgXCJTYXR1cmRheVwiXSxcbiAgc2hvcnREYXlzOiBbXCJTdW5cIiwgXCJNb25cIiwgXCJUdWVcIiwgXCJXZWRcIiwgXCJUaHVcIiwgXCJGcmlcIiwgXCJTYXRcIl0sXG4gIG1vbnRoczogW1wiSmFudWFyeVwiLCBcIkZlYnJ1YXJ5XCIsIFwiTWFyY2hcIiwgXCJBcHJpbFwiLCBcIk1heVwiLCBcIkp1bmVcIiwgXCJKdWx5XCIsIFwiQXVndXN0XCIsIFwiU2VwdGVtYmVyXCIsIFwiT2N0b2JlclwiLCBcIk5vdmVtYmVyXCIsIFwiRGVjZW1iZXJcIl0sXG4gIHNob3J0TW9udGhzOiBbXCJKYW5cIiwgXCJGZWJcIiwgXCJNYXJcIiwgXCJBcHJcIiwgXCJNYXlcIiwgXCJKdW5cIiwgXCJKdWxcIiwgXCJBdWdcIiwgXCJTZXBcIiwgXCJPY3RcIiwgXCJOb3ZcIiwgXCJEZWNcIl1cbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkZWZhdWx0TG9jYWxlKGRlZmluaXRpb24pIHtcbiAgbG9jYWxlID0gZm9ybWF0TG9jYWxlKGRlZmluaXRpb24pO1xuICB0aW1lRm9ybWF0ID0gbG9jYWxlLmZvcm1hdDtcbiAgdGltZVBhcnNlID0gbG9jYWxlLnBhcnNlO1xuICB1dGNGb3JtYXQgPSBsb2NhbGUudXRjRm9ybWF0O1xuICB1dGNQYXJzZSA9IGxvY2FsZS51dGNQYXJzZTtcbiAgcmV0dXJuIGxvY2FsZTtcbn1cbiIsImltcG9ydCB7dGltZVllYXIsIHRpbWVNb250aCwgdGltZVdlZWssIHRpbWVEYXksIHRpbWVIb3VyLCB0aW1lTWludXRlLCB0aW1lU2Vjb25kLCB0aW1lVGlja3MsIHRpbWVUaWNrSW50ZXJ2YWx9IGZyb20gXCJkMy10aW1lXCI7XG5pbXBvcnQge3RpbWVGb3JtYXR9IGZyb20gXCJkMy10aW1lLWZvcm1hdFwiO1xuaW1wb3J0IGNvbnRpbnVvdXMsIHtjb3B5fSBmcm9tIFwiLi9jb250aW51b3VzLmpzXCI7XG5pbXBvcnQge2luaXRSYW5nZX0gZnJvbSBcIi4vaW5pdC5qc1wiO1xuaW1wb3J0IG5pY2UgZnJvbSBcIi4vbmljZS5qc1wiO1xuXG5mdW5jdGlvbiBkYXRlKHQpIHtcbiAgcmV0dXJuIG5ldyBEYXRlKHQpO1xufVxuXG5mdW5jdGlvbiBudW1iZXIodCkge1xuICByZXR1cm4gdCBpbnN0YW5jZW9mIERhdGUgPyArdCA6ICtuZXcgRGF0ZSgrdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYWxlbmRhcih0aWNrcywgdGlja0ludGVydmFsLCB5ZWFyLCBtb250aCwgd2VlaywgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCwgZm9ybWF0KSB7XG4gIHZhciBzY2FsZSA9IGNvbnRpbnVvdXMoKSxcbiAgICAgIGludmVydCA9IHNjYWxlLmludmVydCxcbiAgICAgIGRvbWFpbiA9IHNjYWxlLmRvbWFpbjtcblxuICB2YXIgZm9ybWF0TWlsbGlzZWNvbmQgPSBmb3JtYXQoXCIuJUxcIiksXG4gICAgICBmb3JtYXRTZWNvbmQgPSBmb3JtYXQoXCI6JVNcIiksXG4gICAgICBmb3JtYXRNaW51dGUgPSBmb3JtYXQoXCIlSTolTVwiKSxcbiAgICAgIGZvcm1hdEhvdXIgPSBmb3JtYXQoXCIlSSAlcFwiKSxcbiAgICAgIGZvcm1hdERheSA9IGZvcm1hdChcIiVhICVkXCIpLFxuICAgICAgZm9ybWF0V2VlayA9IGZvcm1hdChcIiViICVkXCIpLFxuICAgICAgZm9ybWF0TW9udGggPSBmb3JtYXQoXCIlQlwiKSxcbiAgICAgIGZvcm1hdFllYXIgPSBmb3JtYXQoXCIlWVwiKTtcblxuICBmdW5jdGlvbiB0aWNrRm9ybWF0KGRhdGUpIHtcbiAgICByZXR1cm4gKHNlY29uZChkYXRlKSA8IGRhdGUgPyBmb3JtYXRNaWxsaXNlY29uZFxuICAgICAgICA6IG1pbnV0ZShkYXRlKSA8IGRhdGUgPyBmb3JtYXRTZWNvbmRcbiAgICAgICAgOiBob3VyKGRhdGUpIDwgZGF0ZSA/IGZvcm1hdE1pbnV0ZVxuICAgICAgICA6IGRheShkYXRlKSA8IGRhdGUgPyBmb3JtYXRIb3VyXG4gICAgICAgIDogbW9udGgoZGF0ZSkgPCBkYXRlID8gKHdlZWsoZGF0ZSkgPCBkYXRlID8gZm9ybWF0RGF5IDogZm9ybWF0V2VlaylcbiAgICAgICAgOiB5ZWFyKGRhdGUpIDwgZGF0ZSA/IGZvcm1hdE1vbnRoXG4gICAgICAgIDogZm9ybWF0WWVhcikoZGF0ZSk7XG4gIH1cblxuICBzY2FsZS5pbnZlcnQgPSBmdW5jdGlvbih5KSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKGludmVydCh5KSk7XG4gIH07XG5cbiAgc2NhbGUuZG9tYWluID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gZG9tYWluKEFycmF5LmZyb20oXywgbnVtYmVyKSkgOiBkb21haW4oKS5tYXAoZGF0ZSk7XG4gIH07XG5cbiAgc2NhbGUudGlja3MgPSBmdW5jdGlvbihpbnRlcnZhbCkge1xuICAgIHZhciBkID0gZG9tYWluKCk7XG4gICAgcmV0dXJuIHRpY2tzKGRbMF0sIGRbZC5sZW5ndGggLSAxXSwgaW50ZXJ2YWwgPT0gbnVsbCA/IDEwIDogaW50ZXJ2YWwpO1xuICB9O1xuXG4gIHNjYWxlLnRpY2tGb3JtYXQgPSBmdW5jdGlvbihjb3VudCwgc3BlY2lmaWVyKSB7XG4gICAgcmV0dXJuIHNwZWNpZmllciA9PSBudWxsID8gdGlja0Zvcm1hdCA6IGZvcm1hdChzcGVjaWZpZXIpO1xuICB9O1xuXG4gIHNjYWxlLm5pY2UgPSBmdW5jdGlvbihpbnRlcnZhbCkge1xuICAgIHZhciBkID0gZG9tYWluKCk7XG4gICAgaWYgKCFpbnRlcnZhbCB8fCB0eXBlb2YgaW50ZXJ2YWwucmFuZ2UgIT09IFwiZnVuY3Rpb25cIikgaW50ZXJ2YWwgPSB0aWNrSW50ZXJ2YWwoZFswXSwgZFtkLmxlbmd0aCAtIDFdLCBpbnRlcnZhbCA9PSBudWxsID8gMTAgOiBpbnRlcnZhbCk7XG4gICAgcmV0dXJuIGludGVydmFsID8gZG9tYWluKG5pY2UoZCwgaW50ZXJ2YWwpKSA6IHNjYWxlO1xuICB9O1xuXG4gIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gY29weShzY2FsZSwgY2FsZW5kYXIodGlja3MsIHRpY2tJbnRlcnZhbCwgeWVhciwgbW9udGgsIHdlZWssIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQsIGZvcm1hdCkpO1xuICB9O1xuXG4gIHJldHVybiBzY2FsZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdGltZSgpIHtcbiAgcmV0dXJuIGluaXRSYW5nZS5hcHBseShjYWxlbmRhcih0aW1lVGlja3MsIHRpbWVUaWNrSW50ZXJ2YWwsIHRpbWVZZWFyLCB0aW1lTW9udGgsIHRpbWVXZWVrLCB0aW1lRGF5LCB0aW1lSG91ciwgdGltZU1pbnV0ZSwgdGltZVNlY29uZCwgdGltZUZvcm1hdCkuZG9tYWluKFtuZXcgRGF0ZSgyMDAwLCAwLCAxKSwgbmV3IERhdGUoMjAwMCwgMCwgMildKSwgYXJndW1lbnRzKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG5pY2UoZG9tYWluLCBpbnRlcnZhbCkge1xuICBkb21haW4gPSBkb21haW4uc2xpY2UoKTtcblxuICB2YXIgaTAgPSAwLFxuICAgICAgaTEgPSBkb21haW4ubGVuZ3RoIC0gMSxcbiAgICAgIHgwID0gZG9tYWluW2kwXSxcbiAgICAgIHgxID0gZG9tYWluW2kxXSxcbiAgICAgIHQ7XG5cbiAgaWYgKHgxIDwgeDApIHtcbiAgICB0ID0gaTAsIGkwID0gaTEsIGkxID0gdDtcbiAgICB0ID0geDAsIHgwID0geDEsIHgxID0gdDtcbiAgfVxuXG4gIGRvbWFpbltpMF0gPSBpbnRlcnZhbC5mbG9vcih4MCk7XG4gIGRvbWFpbltpMV0gPSBpbnRlcnZhbC5jZWlsKHgxKTtcbiAgcmV0dXJuIGRvbWFpbjtcbn1cbiIsImltcG9ydCB7aW50ZXJwb2xhdGVSZ2JCYXNpc30gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHNjaGVtZSA9PiBpbnRlcnBvbGF0ZVJnYkJhc2lzKHNjaGVtZVtzY2hlbWUubGVuZ3RoIC0gMV0pO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzLmpzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcC5qc1wiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZmM4ZDU5ZmZmZmJmOTlkNTk0XCIsXG4gIFwiZDcxOTFjZmRhZTYxYWJkZGE0MmI4M2JhXCIsXG4gIFwiZDcxOTFjZmRhZTYxZmZmZmJmYWJkZGE0MmI4M2JhXCIsXG4gIFwiZDUzZTRmZmM4ZDU5ZmVlMDhiZTZmNTk4OTlkNTk0MzI4OGJkXCIsXG4gIFwiZDUzZTRmZmM4ZDU5ZmVlMDhiZmZmZmJmZTZmNTk4OTlkNTk0MzI4OGJkXCIsXG4gIFwiZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkXCIsXG4gIFwiZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZmZmZmJmZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkXCIsXG4gIFwiOWUwMTQyZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkNWU0ZmEyXCIsXG4gIFwiOWUwMTQyZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZmZmZmJmZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkNWU0ZmEyXCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNwZWNpZmllcikge1xuICB2YXIgbiA9IHNwZWNpZmllci5sZW5ndGggLyA2IHwgMCwgY29sb3JzID0gbmV3IEFycmF5KG4pLCBpID0gMDtcbiAgd2hpbGUgKGkgPCBuKSBjb2xvcnNbaV0gPSBcIiNcIiArIHNwZWNpZmllci5zbGljZShpICogNiwgKytpICogNik7XG4gIHJldHVybiBjb2xvcnM7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiBmdW5jdGlvbiBjb25zdGFudCgpIHtcbiAgICByZXR1cm4geDtcbiAgfTtcbn1cbiIsImV4cG9ydCBjb25zdCBhYnMgPSBNYXRoLmFicztcbmV4cG9ydCBjb25zdCBhdGFuMiA9IE1hdGguYXRhbjI7XG5leHBvcnQgY29uc3QgY29zID0gTWF0aC5jb3M7XG5leHBvcnQgY29uc3QgbWF4ID0gTWF0aC5tYXg7XG5leHBvcnQgY29uc3QgbWluID0gTWF0aC5taW47XG5leHBvcnQgY29uc3Qgc2luID0gTWF0aC5zaW47XG5leHBvcnQgY29uc3Qgc3FydCA9IE1hdGguc3FydDtcblxuZXhwb3J0IGNvbnN0IGVwc2lsb24gPSAxZS0xMjtcbmV4cG9ydCBjb25zdCBwaSA9IE1hdGguUEk7XG5leHBvcnQgY29uc3QgaGFsZlBpID0gcGkgLyAyO1xuZXhwb3J0IGNvbnN0IHRhdSA9IDIgKiBwaTtcblxuZXhwb3J0IGZ1bmN0aW9uIGFjb3MoeCkge1xuICByZXR1cm4geCA+IDEgPyAwIDogeCA8IC0xID8gcGkgOiBNYXRoLmFjb3MoeCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc2luKHgpIHtcbiAgcmV0dXJuIHggPj0gMSA/IGhhbGZQaSA6IHggPD0gLTEgPyAtaGFsZlBpIDogTWF0aC5hc2luKHgpO1xufVxuIiwiaW1wb3J0IHtQYXRofSBmcm9tIFwiZDMtcGF0aFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gd2l0aFBhdGgoc2hhcGUpIHtcbiAgbGV0IGRpZ2l0cyA9IDM7XG5cbiAgc2hhcGUuZGlnaXRzID0gZnVuY3Rpb24oXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGRpZ2l0cztcbiAgICBpZiAoXyA9PSBudWxsKSB7XG4gICAgICBkaWdpdHMgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBkID0gTWF0aC5mbG9vcihfKTtcbiAgICAgIGlmICghKGQgPj0gMCkpIHRocm93IG5ldyBSYW5nZUVycm9yKGBpbnZhbGlkIGRpZ2l0czogJHtffWApO1xuICAgICAgZGlnaXRzID0gZDtcbiAgICB9XG4gICAgcmV0dXJuIHNoYXBlO1xuICB9O1xuXG4gIHJldHVybiAoKSA9PiBuZXcgUGF0aChkaWdpdHMpO1xufVxuIiwiaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuL2NvbnN0YW50LmpzXCI7XG5pbXBvcnQge2FicywgYWNvcywgYXNpbiwgYXRhbjIsIGNvcywgZXBzaWxvbiwgaGFsZlBpLCBtYXgsIG1pbiwgcGksIHNpbiwgc3FydCwgdGF1fSBmcm9tIFwiLi9tYXRoLmpzXCI7XG5pbXBvcnQge3dpdGhQYXRofSBmcm9tIFwiLi9wYXRoLmpzXCI7XG5cbmZ1bmN0aW9uIGFyY0lubmVyUmFkaXVzKGQpIHtcbiAgcmV0dXJuIGQuaW5uZXJSYWRpdXM7XG59XG5cbmZ1bmN0aW9uIGFyY091dGVyUmFkaXVzKGQpIHtcbiAgcmV0dXJuIGQub3V0ZXJSYWRpdXM7XG59XG5cbmZ1bmN0aW9uIGFyY1N0YXJ0QW5nbGUoZCkge1xuICByZXR1cm4gZC5zdGFydEFuZ2xlO1xufVxuXG5mdW5jdGlvbiBhcmNFbmRBbmdsZShkKSB7XG4gIHJldHVybiBkLmVuZEFuZ2xlO1xufVxuXG5mdW5jdGlvbiBhcmNQYWRBbmdsZShkKSB7XG4gIHJldHVybiBkICYmIGQucGFkQW5nbGU7IC8vIE5vdGU6IG9wdGlvbmFsIVxufVxuXG5mdW5jdGlvbiBpbnRlcnNlY3QoeDAsIHkwLCB4MSwgeTEsIHgyLCB5MiwgeDMsIHkzKSB7XG4gIHZhciB4MTAgPSB4MSAtIHgwLCB5MTAgPSB5MSAtIHkwLFxuICAgICAgeDMyID0geDMgLSB4MiwgeTMyID0geTMgLSB5MixcbiAgICAgIHQgPSB5MzIgKiB4MTAgLSB4MzIgKiB5MTA7XG4gIGlmICh0ICogdCA8IGVwc2lsb24pIHJldHVybjtcbiAgdCA9ICh4MzIgKiAoeTAgLSB5MikgLSB5MzIgKiAoeDAgLSB4MikpIC8gdDtcbiAgcmV0dXJuIFt4MCArIHQgKiB4MTAsIHkwICsgdCAqIHkxMF07XG59XG5cbi8vIENvbXB1dGUgcGVycGVuZGljdWxhciBvZmZzZXQgbGluZSBvZiBsZW5ndGggcmMuXG4vLyBodHRwOi8vbWF0aHdvcmxkLndvbGZyYW0uY29tL0NpcmNsZS1MaW5lSW50ZXJzZWN0aW9uLmh0bWxcbmZ1bmN0aW9uIGNvcm5lclRhbmdlbnRzKHgwLCB5MCwgeDEsIHkxLCByMSwgcmMsIGN3KSB7XG4gIHZhciB4MDEgPSB4MCAtIHgxLFxuICAgICAgeTAxID0geTAgLSB5MSxcbiAgICAgIGxvID0gKGN3ID8gcmMgOiAtcmMpIC8gc3FydCh4MDEgKiB4MDEgKyB5MDEgKiB5MDEpLFxuICAgICAgb3ggPSBsbyAqIHkwMSxcbiAgICAgIG95ID0gLWxvICogeDAxLFxuICAgICAgeDExID0geDAgKyBveCxcbiAgICAgIHkxMSA9IHkwICsgb3ksXG4gICAgICB4MTAgPSB4MSArIG94LFxuICAgICAgeTEwID0geTEgKyBveSxcbiAgICAgIHgwMCA9ICh4MTEgKyB4MTApIC8gMixcbiAgICAgIHkwMCA9ICh5MTEgKyB5MTApIC8gMixcbiAgICAgIGR4ID0geDEwIC0geDExLFxuICAgICAgZHkgPSB5MTAgLSB5MTEsXG4gICAgICBkMiA9IGR4ICogZHggKyBkeSAqIGR5LFxuICAgICAgciA9IHIxIC0gcmMsXG4gICAgICBEID0geDExICogeTEwIC0geDEwICogeTExLFxuICAgICAgZCA9IChkeSA8IDAgPyAtMSA6IDEpICogc3FydChtYXgoMCwgciAqIHIgKiBkMiAtIEQgKiBEKSksXG4gICAgICBjeDAgPSAoRCAqIGR5IC0gZHggKiBkKSAvIGQyLFxuICAgICAgY3kwID0gKC1EICogZHggLSBkeSAqIGQpIC8gZDIsXG4gICAgICBjeDEgPSAoRCAqIGR5ICsgZHggKiBkKSAvIGQyLFxuICAgICAgY3kxID0gKC1EICogZHggKyBkeSAqIGQpIC8gZDIsXG4gICAgICBkeDAgPSBjeDAgLSB4MDAsXG4gICAgICBkeTAgPSBjeTAgLSB5MDAsXG4gICAgICBkeDEgPSBjeDEgLSB4MDAsXG4gICAgICBkeTEgPSBjeTEgLSB5MDA7XG5cbiAgLy8gUGljayB0aGUgY2xvc2VyIG9mIHRoZSB0d28gaW50ZXJzZWN0aW9uIHBvaW50cy5cbiAgLy8gVE9ETyBJcyB0aGVyZSBhIGZhc3RlciB3YXkgdG8gZGV0ZXJtaW5lIHdoaWNoIGludGVyc2VjdGlvbiB0byB1c2U/XG4gIGlmIChkeDAgKiBkeDAgKyBkeTAgKiBkeTAgPiBkeDEgKiBkeDEgKyBkeTEgKiBkeTEpIGN4MCA9IGN4MSwgY3kwID0gY3kxO1xuXG4gIHJldHVybiB7XG4gICAgY3g6IGN4MCxcbiAgICBjeTogY3kwLFxuICAgIHgwMTogLW94LFxuICAgIHkwMTogLW95LFxuICAgIHgxMTogY3gwICogKHIxIC8gciAtIDEpLFxuICAgIHkxMTogY3kwICogKHIxIC8gciAtIDEpXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgaW5uZXJSYWRpdXMgPSBhcmNJbm5lclJhZGl1cyxcbiAgICAgIG91dGVyUmFkaXVzID0gYXJjT3V0ZXJSYWRpdXMsXG4gICAgICBjb3JuZXJSYWRpdXMgPSBjb25zdGFudCgwKSxcbiAgICAgIHBhZFJhZGl1cyA9IG51bGwsXG4gICAgICBzdGFydEFuZ2xlID0gYXJjU3RhcnRBbmdsZSxcbiAgICAgIGVuZEFuZ2xlID0gYXJjRW5kQW5nbGUsXG4gICAgICBwYWRBbmdsZSA9IGFyY1BhZEFuZ2xlLFxuICAgICAgY29udGV4dCA9IG51bGwsXG4gICAgICBwYXRoID0gd2l0aFBhdGgoYXJjKTtcblxuICBmdW5jdGlvbiBhcmMoKSB7XG4gICAgdmFyIGJ1ZmZlcixcbiAgICAgICAgcixcbiAgICAgICAgcjAgPSAraW5uZXJSYWRpdXMuYXBwbHkodGhpcywgYXJndW1lbnRzKSxcbiAgICAgICAgcjEgPSArb3V0ZXJSYWRpdXMuYXBwbHkodGhpcywgYXJndW1lbnRzKSxcbiAgICAgICAgYTAgPSBzdGFydEFuZ2xlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgLSBoYWxmUGksXG4gICAgICAgIGExID0gZW5kQW5nbGUuYXBwbHkodGhpcywgYXJndW1lbnRzKSAtIGhhbGZQaSxcbiAgICAgICAgZGEgPSBhYnMoYTEgLSBhMCksXG4gICAgICAgIGN3ID0gYTEgPiBhMDtcblxuICAgIGlmICghY29udGV4dCkgY29udGV4dCA9IGJ1ZmZlciA9IHBhdGgoKTtcblxuICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBvdXRlciByYWRpdXMgaXMgYWx3YXlzIGxhcmdlciB0aGFuIHRoZSBpbm5lciByYWRpdXMuXG4gICAgaWYgKHIxIDwgcjApIHIgPSByMSwgcjEgPSByMCwgcjAgPSByO1xuXG4gICAgLy8gSXMgaXQgYSBwb2ludD9cbiAgICBpZiAoIShyMSA+IGVwc2lsb24pKSBjb250ZXh0Lm1vdmVUbygwLCAwKTtcblxuICAgIC8vIE9yIGlzIGl0IGEgY2lyY2xlIG9yIGFubnVsdXM/XG4gICAgZWxzZSBpZiAoZGEgPiB0YXUgLSBlcHNpbG9uKSB7XG4gICAgICBjb250ZXh0Lm1vdmVUbyhyMSAqIGNvcyhhMCksIHIxICogc2luKGEwKSk7XG4gICAgICBjb250ZXh0LmFyYygwLCAwLCByMSwgYTAsIGExLCAhY3cpO1xuICAgICAgaWYgKHIwID4gZXBzaWxvbikge1xuICAgICAgICBjb250ZXh0Lm1vdmVUbyhyMCAqIGNvcyhhMSksIHIwICogc2luKGExKSk7XG4gICAgICAgIGNvbnRleHQuYXJjKDAsIDAsIHIwLCBhMSwgYTAsIGN3KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBPciBpcyBpdCBhIGNpcmN1bGFyIG9yIGFubnVsYXIgc2VjdG9yP1xuICAgIGVsc2Uge1xuICAgICAgdmFyIGEwMSA9IGEwLFxuICAgICAgICAgIGExMSA9IGExLFxuICAgICAgICAgIGEwMCA9IGEwLFxuICAgICAgICAgIGExMCA9IGExLFxuICAgICAgICAgIGRhMCA9IGRhLFxuICAgICAgICAgIGRhMSA9IGRhLFxuICAgICAgICAgIGFwID0gcGFkQW5nbGUuYXBwbHkodGhpcywgYXJndW1lbnRzKSAvIDIsXG4gICAgICAgICAgcnAgPSAoYXAgPiBlcHNpbG9uKSAmJiAocGFkUmFkaXVzID8gK3BhZFJhZGl1cy5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDogc3FydChyMCAqIHIwICsgcjEgKiByMSkpLFxuICAgICAgICAgIHJjID0gbWluKGFicyhyMSAtIHIwKSAvIDIsICtjb3JuZXJSYWRpdXMuYXBwbHkodGhpcywgYXJndW1lbnRzKSksXG4gICAgICAgICAgcmMwID0gcmMsXG4gICAgICAgICAgcmMxID0gcmMsXG4gICAgICAgICAgdDAsXG4gICAgICAgICAgdDE7XG5cbiAgICAgIC8vIEFwcGx5IHBhZGRpbmc/IE5vdGUgdGhhdCBzaW5jZSByMSDiiaUgcjAsIGRhMSDiiaUgZGEwLlxuICAgICAgaWYgKHJwID4gZXBzaWxvbikge1xuICAgICAgICB2YXIgcDAgPSBhc2luKHJwIC8gcjAgKiBzaW4oYXApKSxcbiAgICAgICAgICAgIHAxID0gYXNpbihycCAvIHIxICogc2luKGFwKSk7XG4gICAgICAgIGlmICgoZGEwIC09IHAwICogMikgPiBlcHNpbG9uKSBwMCAqPSAoY3cgPyAxIDogLTEpLCBhMDAgKz0gcDAsIGExMCAtPSBwMDtcbiAgICAgICAgZWxzZSBkYTAgPSAwLCBhMDAgPSBhMTAgPSAoYTAgKyBhMSkgLyAyO1xuICAgICAgICBpZiAoKGRhMSAtPSBwMSAqIDIpID4gZXBzaWxvbikgcDEgKj0gKGN3ID8gMSA6IC0xKSwgYTAxICs9IHAxLCBhMTEgLT0gcDE7XG4gICAgICAgIGVsc2UgZGExID0gMCwgYTAxID0gYTExID0gKGEwICsgYTEpIC8gMjtcbiAgICAgIH1cblxuICAgICAgdmFyIHgwMSA9IHIxICogY29zKGEwMSksXG4gICAgICAgICAgeTAxID0gcjEgKiBzaW4oYTAxKSxcbiAgICAgICAgICB4MTAgPSByMCAqIGNvcyhhMTApLFxuICAgICAgICAgIHkxMCA9IHIwICogc2luKGExMCk7XG5cbiAgICAgIC8vIEFwcGx5IHJvdW5kZWQgY29ybmVycz9cbiAgICAgIGlmIChyYyA+IGVwc2lsb24pIHtcbiAgICAgICAgdmFyIHgxMSA9IHIxICogY29zKGExMSksXG4gICAgICAgICAgICB5MTEgPSByMSAqIHNpbihhMTEpLFxuICAgICAgICAgICAgeDAwID0gcjAgKiBjb3MoYTAwKSxcbiAgICAgICAgICAgIHkwMCA9IHIwICogc2luKGEwMCksXG4gICAgICAgICAgICBvYztcblxuICAgICAgICAvLyBSZXN0cmljdCB0aGUgY29ybmVyIHJhZGl1cyBhY2NvcmRpbmcgdG8gdGhlIHNlY3RvciBhbmdsZS4gSWYgdGhpc1xuICAgICAgICAvLyBpbnRlcnNlY3Rpb24gZmFpbHMsIGl04oCZcyBwcm9iYWJseSBiZWNhdXNlIHRoZSBhcmMgaXMgdG9vIHNtYWxsLCBzb1xuICAgICAgICAvLyBkaXNhYmxlIHRoZSBjb3JuZXIgcmFkaXVzIGVudGlyZWx5LlxuICAgICAgICBpZiAoZGEgPCBwaSkge1xuICAgICAgICAgIGlmIChvYyA9IGludGVyc2VjdCh4MDEsIHkwMSwgeDAwLCB5MDAsIHgxMSwgeTExLCB4MTAsIHkxMCkpIHtcbiAgICAgICAgICAgIHZhciBheCA9IHgwMSAtIG9jWzBdLFxuICAgICAgICAgICAgICAgIGF5ID0geTAxIC0gb2NbMV0sXG4gICAgICAgICAgICAgICAgYnggPSB4MTEgLSBvY1swXSxcbiAgICAgICAgICAgICAgICBieSA9IHkxMSAtIG9jWzFdLFxuICAgICAgICAgICAgICAgIGtjID0gMSAvIHNpbihhY29zKChheCAqIGJ4ICsgYXkgKiBieSkgLyAoc3FydChheCAqIGF4ICsgYXkgKiBheSkgKiBzcXJ0KGJ4ICogYnggKyBieSAqIGJ5KSkpIC8gMiksXG4gICAgICAgICAgICAgICAgbGMgPSBzcXJ0KG9jWzBdICogb2NbMF0gKyBvY1sxXSAqIG9jWzFdKTtcbiAgICAgICAgICAgIHJjMCA9IG1pbihyYywgKHIwIC0gbGMpIC8gKGtjIC0gMSkpO1xuICAgICAgICAgICAgcmMxID0gbWluKHJjLCAocjEgLSBsYykgLyAoa2MgKyAxKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJjMCA9IHJjMSA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIElzIHRoZSBzZWN0b3IgY29sbGFwc2VkIHRvIGEgbGluZT9cbiAgICAgIGlmICghKGRhMSA+IGVwc2lsb24pKSBjb250ZXh0Lm1vdmVUbyh4MDEsIHkwMSk7XG5cbiAgICAgIC8vIERvZXMgdGhlIHNlY3RvcuKAmXMgb3V0ZXIgcmluZyBoYXZlIHJvdW5kZWQgY29ybmVycz9cbiAgICAgIGVsc2UgaWYgKHJjMSA+IGVwc2lsb24pIHtcbiAgICAgICAgdDAgPSBjb3JuZXJUYW5nZW50cyh4MDAsIHkwMCwgeDAxLCB5MDEsIHIxLCByYzEsIGN3KTtcbiAgICAgICAgdDEgPSBjb3JuZXJUYW5nZW50cyh4MTEsIHkxMSwgeDEwLCB5MTAsIHIxLCByYzEsIGN3KTtcblxuICAgICAgICBjb250ZXh0Lm1vdmVUbyh0MC5jeCArIHQwLngwMSwgdDAuY3kgKyB0MC55MDEpO1xuXG4gICAgICAgIC8vIEhhdmUgdGhlIGNvcm5lcnMgbWVyZ2VkP1xuICAgICAgICBpZiAocmMxIDwgcmMpIGNvbnRleHQuYXJjKHQwLmN4LCB0MC5jeSwgcmMxLCBhdGFuMih0MC55MDEsIHQwLngwMSksIGF0YW4yKHQxLnkwMSwgdDEueDAxKSwgIWN3KTtcblxuICAgICAgICAvLyBPdGhlcndpc2UsIGRyYXcgdGhlIHR3byBjb3JuZXJzIGFuZCB0aGUgcmluZy5cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgY29udGV4dC5hcmModDAuY3gsIHQwLmN5LCByYzEsIGF0YW4yKHQwLnkwMSwgdDAueDAxKSwgYXRhbjIodDAueTExLCB0MC54MTEpLCAhY3cpO1xuICAgICAgICAgIGNvbnRleHQuYXJjKDAsIDAsIHIxLCBhdGFuMih0MC5jeSArIHQwLnkxMSwgdDAuY3ggKyB0MC54MTEpLCBhdGFuMih0MS5jeSArIHQxLnkxMSwgdDEuY3ggKyB0MS54MTEpLCAhY3cpO1xuICAgICAgICAgIGNvbnRleHQuYXJjKHQxLmN4LCB0MS5jeSwgcmMxLCBhdGFuMih0MS55MTEsIHQxLngxMSksIGF0YW4yKHQxLnkwMSwgdDEueDAxKSwgIWN3KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBPciBpcyB0aGUgb3V0ZXIgcmluZyBqdXN0IGEgY2lyY3VsYXIgYXJjP1xuICAgICAgZWxzZSBjb250ZXh0Lm1vdmVUbyh4MDEsIHkwMSksIGNvbnRleHQuYXJjKDAsIDAsIHIxLCBhMDEsIGExMSwgIWN3KTtcblxuICAgICAgLy8gSXMgdGhlcmUgbm8gaW5uZXIgcmluZywgYW5kIGl04oCZcyBhIGNpcmN1bGFyIHNlY3Rvcj9cbiAgICAgIC8vIE9yIHBlcmhhcHMgaXTigJlzIGFuIGFubnVsYXIgc2VjdG9yIGNvbGxhcHNlZCBkdWUgdG8gcGFkZGluZz9cbiAgICAgIGlmICghKHIwID4gZXBzaWxvbikgfHwgIShkYTAgPiBlcHNpbG9uKSkgY29udGV4dC5saW5lVG8oeDEwLCB5MTApO1xuXG4gICAgICAvLyBEb2VzIHRoZSBzZWN0b3LigJlzIGlubmVyIHJpbmcgKG9yIHBvaW50KSBoYXZlIHJvdW5kZWQgY29ybmVycz9cbiAgICAgIGVsc2UgaWYgKHJjMCA+IGVwc2lsb24pIHtcbiAgICAgICAgdDAgPSBjb3JuZXJUYW5nZW50cyh4MTAsIHkxMCwgeDExLCB5MTEsIHIwLCAtcmMwLCBjdyk7XG4gICAgICAgIHQxID0gY29ybmVyVGFuZ2VudHMoeDAxLCB5MDEsIHgwMCwgeTAwLCByMCwgLXJjMCwgY3cpO1xuXG4gICAgICAgIGNvbnRleHQubGluZVRvKHQwLmN4ICsgdDAueDAxLCB0MC5jeSArIHQwLnkwMSk7XG5cbiAgICAgICAgLy8gSGF2ZSB0aGUgY29ybmVycyBtZXJnZWQ/XG4gICAgICAgIGlmIChyYzAgPCByYykgY29udGV4dC5hcmModDAuY3gsIHQwLmN5LCByYzAsIGF0YW4yKHQwLnkwMSwgdDAueDAxKSwgYXRhbjIodDEueTAxLCB0MS54MDEpLCAhY3cpO1xuXG4gICAgICAgIC8vIE90aGVyd2lzZSwgZHJhdyB0aGUgdHdvIGNvcm5lcnMgYW5kIHRoZSByaW5nLlxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBjb250ZXh0LmFyYyh0MC5jeCwgdDAuY3ksIHJjMCwgYXRhbjIodDAueTAxLCB0MC54MDEpLCBhdGFuMih0MC55MTEsIHQwLngxMSksICFjdyk7XG4gICAgICAgICAgY29udGV4dC5hcmMoMCwgMCwgcjAsIGF0YW4yKHQwLmN5ICsgdDAueTExLCB0MC5jeCArIHQwLngxMSksIGF0YW4yKHQxLmN5ICsgdDEueTExLCB0MS5jeCArIHQxLngxMSksIGN3KTtcbiAgICAgICAgICBjb250ZXh0LmFyYyh0MS5jeCwgdDEuY3ksIHJjMCwgYXRhbjIodDEueTExLCB0MS54MTEpLCBhdGFuMih0MS55MDEsIHQxLngwMSksICFjdyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gT3IgaXMgdGhlIGlubmVyIHJpbmcganVzdCBhIGNpcmN1bGFyIGFyYz9cbiAgICAgIGVsc2UgY29udGV4dC5hcmMoMCwgMCwgcjAsIGExMCwgYTAwLCBjdyk7XG4gICAgfVxuXG4gICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgIGlmIChidWZmZXIpIHJldHVybiBjb250ZXh0ID0gbnVsbCwgYnVmZmVyICsgXCJcIiB8fCBudWxsO1xuICB9XG5cbiAgYXJjLmNlbnRyb2lkID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHIgPSAoK2lubmVyUmFkaXVzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgKyArb3V0ZXJSYWRpdXMuYXBwbHkodGhpcywgYXJndW1lbnRzKSkgLyAyLFxuICAgICAgICBhID0gKCtzdGFydEFuZ2xlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgKyArZW5kQW5nbGUuYXBwbHkodGhpcywgYXJndW1lbnRzKSkgLyAyIC0gcGkgLyAyO1xuICAgIHJldHVybiBbY29zKGEpICogciwgc2luKGEpICogcl07XG4gIH07XG5cbiAgYXJjLmlubmVyUmFkaXVzID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGlubmVyUmFkaXVzID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGFyYykgOiBpbm5lclJhZGl1cztcbiAgfTtcblxuICBhcmMub3V0ZXJSYWRpdXMgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAob3V0ZXJSYWRpdXMgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgYXJjKSA6IG91dGVyUmFkaXVzO1xuICB9O1xuXG4gIGFyYy5jb3JuZXJSYWRpdXMgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoY29ybmVyUmFkaXVzID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGFyYykgOiBjb3JuZXJSYWRpdXM7XG4gIH07XG5cbiAgYXJjLnBhZFJhZGl1cyA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChwYWRSYWRpdXMgPSBfID09IG51bGwgPyBudWxsIDogdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGFyYykgOiBwYWRSYWRpdXM7XG4gIH07XG5cbiAgYXJjLnN0YXJ0QW5nbGUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoc3RhcnRBbmdsZSA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBhcmMpIDogc3RhcnRBbmdsZTtcbiAgfTtcblxuICBhcmMuZW5kQW5nbGUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZW5kQW5nbGUgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgYXJjKSA6IGVuZEFuZ2xlO1xuICB9O1xuXG4gIGFyYy5wYWRBbmdsZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChwYWRBbmdsZSA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBhcmMpIDogcGFkQW5nbGU7XG4gIH07XG5cbiAgYXJjLmNvbnRleHQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoKGNvbnRleHQgPSBfID09IG51bGwgPyBudWxsIDogXyksIGFyYykgOiBjb250ZXh0O1xuICB9O1xuXG4gIHJldHVybiBhcmM7XG59XG4iLCJleHBvcnQgdmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiB0eXBlb2YgeCA9PT0gXCJvYmplY3RcIiAmJiBcImxlbmd0aFwiIGluIHhcbiAgICA/IHggLy8gQXJyYXksIFR5cGVkQXJyYXksIE5vZGVMaXN0LCBhcnJheS1saWtlXG4gICAgOiBBcnJheS5mcm9tKHgpOyAvLyBNYXAsIFNldCwgaXRlcmFibGUsIHN0cmluZywgb3IgYW55dGhpbmcgZWxzZVxufVxuIiwiZnVuY3Rpb24gTGluZWFyKGNvbnRleHQpIHtcbiAgdGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG59XG5cbkxpbmVhci5wcm90b3R5cGUgPSB7XG4gIGFyZWFTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fbGluZSA9IDA7XG4gIH0sXG4gIGFyZWFFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSBOYU47XG4gIH0sXG4gIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fcG9pbnQgPSAwO1xuICB9LFxuICBsaW5lRW5kOiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5fbGluZSB8fCAodGhpcy5fbGluZSAhPT0gMCAmJiB0aGlzLl9wb2ludCA9PT0gMSkpIHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgdGhpcy5fbGluZSA9IDEgLSB0aGlzLl9saW5lO1xuICB9LFxuICBwb2ludDogZnVuY3Rpb24oeCwgeSkge1xuICAgIHggPSAreCwgeSA9ICt5O1xuICAgIHN3aXRjaCAodGhpcy5fcG9pbnQpIHtcbiAgICAgIGNhc2UgMDogdGhpcy5fcG9pbnQgPSAxOyB0aGlzLl9saW5lID8gdGhpcy5fY29udGV4dC5saW5lVG8oeCwgeSkgOiB0aGlzLl9jb250ZXh0Lm1vdmVUbyh4LCB5KTsgYnJlYWs7XG4gICAgICBjYXNlIDE6IHRoaXMuX3BvaW50ID0gMjsgLy8gZmFsbHMgdGhyb3VnaFxuICAgICAgZGVmYXVsdDogdGhpcy5fY29udGV4dC5saW5lVG8oeCwgeSk7IGJyZWFrO1xuICAgIH1cbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY29udGV4dCkge1xuICByZXR1cm4gbmV3IExpbmVhcihjb250ZXh0KTtcbn1cbiIsImV4cG9ydCBmdW5jdGlvbiB4KHApIHtcbiAgcmV0dXJuIHBbMF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB5KHApIHtcbiAgcmV0dXJuIHBbMV07XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHJldHVybiBiIDwgYSA/IC0xIDogYiA+IGEgPyAxIDogYiA+PSBhID8gMCA6IE5hTjtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGQpIHtcbiAgcmV0dXJuIGQ7XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gVHJhbnNmb3JtKGssIHgsIHkpIHtcbiAgdGhpcy5rID0gaztcbiAgdGhpcy54ID0geDtcbiAgdGhpcy55ID0geTtcbn1cblxuVHJhbnNmb3JtLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IFRyYW5zZm9ybSxcbiAgc2NhbGU6IGZ1bmN0aW9uKGspIHtcbiAgICByZXR1cm4gayA9PT0gMSA/IHRoaXMgOiBuZXcgVHJhbnNmb3JtKHRoaXMuayAqIGssIHRoaXMueCwgdGhpcy55KTtcbiAgfSxcbiAgdHJhbnNsYXRlOiBmdW5jdGlvbih4LCB5KSB7XG4gICAgcmV0dXJuIHggPT09IDAgJiB5ID09PSAwID8gdGhpcyA6IG5ldyBUcmFuc2Zvcm0odGhpcy5rLCB0aGlzLnggKyB0aGlzLmsgKiB4LCB0aGlzLnkgKyB0aGlzLmsgKiB5KTtcbiAgfSxcbiAgYXBwbHk6IGZ1bmN0aW9uKHBvaW50KSB7XG4gICAgcmV0dXJuIFtwb2ludFswXSAqIHRoaXMuayArIHRoaXMueCwgcG9pbnRbMV0gKiB0aGlzLmsgKyB0aGlzLnldO1xuICB9LFxuICBhcHBseVg6IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4geCAqIHRoaXMuayArIHRoaXMueDtcbiAgfSxcbiAgYXBwbHlZOiBmdW5jdGlvbih5KSB7XG4gICAgcmV0dXJuIHkgKiB0aGlzLmsgKyB0aGlzLnk7XG4gIH0sXG4gIGludmVydDogZnVuY3Rpb24obG9jYXRpb24pIHtcbiAgICByZXR1cm4gWyhsb2NhdGlvblswXSAtIHRoaXMueCkgLyB0aGlzLmssIChsb2NhdGlvblsxXSAtIHRoaXMueSkgLyB0aGlzLmtdO1xuICB9LFxuICBpbnZlcnRYOiBmdW5jdGlvbih4KSB7XG4gICAgcmV0dXJuICh4IC0gdGhpcy54KSAvIHRoaXMuaztcbiAgfSxcbiAgaW52ZXJ0WTogZnVuY3Rpb24oeSkge1xuICAgIHJldHVybiAoeSAtIHRoaXMueSkgLyB0aGlzLms7XG4gIH0sXG4gIHJlc2NhbGVYOiBmdW5jdGlvbih4KSB7XG4gICAgcmV0dXJuIHguY29weSgpLmRvbWFpbih4LnJhbmdlKCkubWFwKHRoaXMuaW52ZXJ0WCwgdGhpcykubWFwKHguaW52ZXJ0LCB4KSk7XG4gIH0sXG4gIHJlc2NhbGVZOiBmdW5jdGlvbih5KSB7XG4gICAgcmV0dXJuIHkuY29weSgpLmRvbWFpbih5LnJhbmdlKCkubWFwKHRoaXMuaW52ZXJ0WSwgdGhpcykubWFwKHkuaW52ZXJ0LCB5KSk7XG4gIH0sXG4gIHRvU3RyaW5nOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXCJ0cmFuc2xhdGUoXCIgKyB0aGlzLnggKyBcIixcIiArIHRoaXMueSArIFwiKSBzY2FsZShcIiArIHRoaXMuayArIFwiKVwiO1xuICB9XG59O1xuXG5leHBvcnQgdmFyIGlkZW50aXR5ID0gbmV3IFRyYW5zZm9ybSgxLCAwLCAwKTtcblxudHJhbnNmb3JtLnByb3RvdHlwZSA9IFRyYW5zZm9ybS5wcm90b3R5cGU7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRyYW5zZm9ybShub2RlKSB7XG4gIHdoaWxlICghbm9kZS5fX3pvb20pIGlmICghKG5vZGUgPSBub2RlLnBhcmVudE5vZGUpKSByZXR1cm4gaWRlbnRpdHk7XG4gIHJldHVybiBub2RlLl9fem9vbTtcbn1cbiIsImltcG9ydCB7IE1vbWVudCB9IGZyb20gXCJtb21lbnRcIjtcblxuZXhwb3J0IGVudW0gU2VhcmNoVHlwZSB7XG4gICAgVGFnLFxuICAgIEZyb250bWF0dGVyLFxuICAgIFdpa2ksXG4gICAgV2lraUxpbmssXG4gICAgV2lraURpc3BsYXksXG4gICAgVGV4dCxcbiAgICBkdkZpZWxkLFxuICAgIFRhYmxlLFxuICAgIEZpbGVNZXRhLFxuICAgIFRhc2ssXG4gICAgVGFza0RvbmUsXG4gICAgVGFza05vdERvbmUsXG59XG5cbmV4cG9ydCBlbnVtIEdyYXBoVHlwZSB7XG4gICAgTGluZSxcbiAgICBCYXIsXG4gICAgUGllLFxuICAgIFJhZGFyLFxuICAgIFN1bW1hcnksXG4gICAgVGFibGUsXG4gICAgTW9udGgsXG4gICAgSGVhdG1hcCxcbiAgICBCdWxsZXQsXG4gICAgVW5rbm93bixcbn1cblxuZXhwb3J0IGVudW0gVmFsdWVUeXBlIHtcbiAgICBOdW1iZXIsXG4gICAgSW50LFxuICAgIERhdGUsXG4gICAgVGltZSxcbiAgICBEYXRlVGltZSxcbiAgICBTdHJpbmcsXG59XG5cbmV4cG9ydCB0eXBlIFRleHRWYWx1ZU1hcCA9IHtcbiAgICBba2V5OiBzdHJpbmddOiBudW1iZXI7XG59O1xuXG5leHBvcnQgY2xhc3MgRGF0YVBvaW50IHtcbiAgICBkYXRlOiBNb21lbnQ7XG4gICAgdmFsdWU6IG51bWJlcjtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGU6IE1vbWVudCwgdmFsdWU6IG51bWJlcikge1xuICAgICAgICB0aGlzLmRhdGUgPSBkYXRlO1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUXVlcnkge1xuICAgIHByaXZhdGUgdHlwZTogU2VhcmNoVHlwZSB8IG51bGw7XG4gICAgcHJpdmF0ZSB0YXJnZXQ6IHN0cmluZztcbiAgICBwcml2YXRlIHBhcmVudFRhcmdldDogc3RyaW5nIHwgbnVsbDtcbiAgICBwcml2YXRlIHNlcGFyYXRvcjogc3RyaW5nOyAvLyBtdWx0aXBsZSB2YWx1ZSBzZXBhcmF0b3JcbiAgICBwcml2YXRlIGlkOiBudW1iZXI7XG4gICAgcHJpdmF0ZSBhY2Nlc3NvcjogbnVtYmVyO1xuICAgIHByaXZhdGUgYWNjZXNzb3IxOiBudW1iZXI7XG4gICAgcHJpdmF0ZSBhY2Nlc3NvcjI6IG51bWJlcjtcbiAgICBwcml2YXRlIG51bVRhcmdldHM6IG51bWJlcjtcblxuICAgIHZhbHVlVHlwZTogVmFsdWVUeXBlO1xuICAgIHVzZWRBc1hEYXRhc2V0OiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IoaWQ6IG51bWJlciwgc2VhcmNoVHlwZTogU2VhcmNoVHlwZSwgc2VhcmNoVGFyZ2V0OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy50eXBlID0gc2VhcmNoVHlwZTtcbiAgICAgICAgdGhpcy50YXJnZXQgPSBzZWFyY2hUYXJnZXQ7XG4gICAgICAgIHRoaXMuc2VwYXJhdG9yID0gXCJcIjsgLy8gc2VwYXJhdG9yIHRvIHNlcGFyYXRlIG11bHRpcGxlIHZhbHVlc1xuICAgICAgICB0aGlzLmlkID0gaWQ7XG4gICAgICAgIHRoaXMuYWNjZXNzb3IgPSAtMTtcbiAgICAgICAgdGhpcy5hY2Nlc3NvcjEgPSAtMTtcbiAgICAgICAgdGhpcy5hY2Nlc3NvcjIgPSAtMTtcbiAgICAgICAgdGhpcy52YWx1ZVR5cGUgPSBWYWx1ZVR5cGUuTnVtYmVyO1xuICAgICAgICB0aGlzLnVzZWRBc1hEYXRhc2V0ID0gZmFsc2U7XG4gICAgICAgIHRoaXMubnVtVGFyZ2V0cyA9IDA7XG5cbiAgICAgICAgaWYgKHNlYXJjaFR5cGUgPT09IFNlYXJjaFR5cGUuVGFibGUpIHtcbiAgICAgICAgICAgIC8vIHNlYXJjaFRhcmdldCAtLT4ge3tmaWxlUGF0aH19W3t7dGFibGV9fV1be3tjb2x1bW59fV1cbiAgICAgICAgICAgIGxldCBzdHJSZWdleCA9XG4gICAgICAgICAgICAgICAgXCJcXFxcWyg/PGFjY2Vzc29yPlswLTldKylcXFxcXVxcXFxbKD88YWNjZXNzb3IxPlswLTldKylcXFxcXShcXFxcWyg/PGFjY2Vzc29yMj5bMC05XSspXFxcXF0pP1wiO1xuICAgICAgICAgICAgbGV0IHJlZ2V4ID0gbmV3IFJlZ0V4cChzdHJSZWdleCwgXCJnbVwiKTtcbiAgICAgICAgICAgIGxldCBtYXRjaDtcbiAgICAgICAgICAgIHdoaWxlICgobWF0Y2ggPSByZWdleC5leGVjKHNlYXJjaFRhcmdldCkpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtYXRjaC5ncm91cHMuYWNjZXNzb3IgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGFjY2Vzc29yID0gcGFyc2VGbG9hdChtYXRjaC5ncm91cHMuYWNjZXNzb3IpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoTnVtYmVyLmlzTnVtYmVyKGFjY2Vzc29yKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtYXRjaC5ncm91cHMuYWNjZXNzb3IxICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFjY2Vzc29yMSA9IHBhcnNlRmxvYXQobWF0Y2guZ3JvdXBzLmFjY2Vzc29yMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE51bWJlci5pc051bWJlcihhY2Nlc3NvcjEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhY2Nlc3NvcjI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBtYXRjaC5ncm91cHMuYWNjZXNzb3IyICE9PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ1bmRlZmluZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2Vzc29yMiA9IHBhcnNlRmxvYXQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2guZ3JvdXBzLmFjY2Vzc29yMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWNjZXNzb3IgPSBhY2Nlc3NvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hY2Nlc3NvcjEgPSBhY2Nlc3NvcjE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChOdW1iZXIuaXNOdW1iZXIoYWNjZXNzb3IyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hY2Nlc3NvcjIgPSBhY2Nlc3NvcjI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJlbnRUYXJnZXQgPSBzZWFyY2hUYXJnZXQucmVwbGFjZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2V4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBzdHJSZWdleCA9IFwiXFxcXFsoPzxhY2Nlc3Nvcj5bMC05XSspXFxcXF1cIjtcbiAgICAgICAgICAgIGxldCByZWdleCA9IG5ldyBSZWdFeHAoc3RyUmVnZXgsIFwiZ21cIik7XG4gICAgICAgICAgICBsZXQgbWF0Y2g7XG4gICAgICAgICAgICB3aGlsZSAoKG1hdGNoID0gcmVnZXguZXhlYyhzZWFyY2hUYXJnZXQpKSkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWF0Y2guZ3JvdXBzLmFjY2Vzc29yICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBhY2Nlc3NvciA9IHBhcnNlRmxvYXQobWF0Y2guZ3JvdXBzLmFjY2Vzc29yKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKE51bWJlci5pc051bWJlcihhY2Nlc3NvcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWNjZXNzb3IgPSBhY2Nlc3NvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFyZW50VGFyZ2V0ID0gc2VhcmNoVGFyZ2V0LnJlcGxhY2UocmVnZXgsIFwiXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBlcXVhbFRvKG90aGVyOiBRdWVyeSk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy50eXBlID09PSBvdGhlci50eXBlICYmIHRoaXMudGFyZ2V0ID09PSBvdGhlci50YXJnZXQpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VGFyZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50YXJnZXQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFBhcmVudFRhcmdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50VGFyZ2V0O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRJZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEFjY2Vzc29yKGluZGV4ID0gMCkge1xuICAgICAgICBzd2l0Y2ggKGluZGV4KSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWNjZXNzb3I7XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWNjZXNzb3IxO1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFjY2Vzc29yMjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRTZXBhcmF0b3Ioc2VwOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zZXBhcmF0b3IgPSBzZXA7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFNlcGFyYXRvcihpc0ZvckZyb250bWF0dGVyVGFnczogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgICAgIGlmICh0aGlzLnNlcGFyYXRvciA9PT0gXCJcIikge1xuICAgICAgICAgICAgaWYgKGlzRm9yRnJvbnRtYXR0ZXJUYWdzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiLFwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFwiL1wiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnNlcGFyYXRvcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkTnVtVGFyZ2V0cyhudW06IG51bWJlciA9IDEpIHtcbiAgICAgICAgdGhpcy5udW1UYXJnZXRzID0gdGhpcy5udW1UYXJnZXRzICsgbnVtO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXROdW1UYXJnZXRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5udW1UYXJnZXRzO1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBRdWVyeVZhbHVlUGFpciB7XG4gICAgcXVlcnk6IFF1ZXJ5O1xuICAgIHZhbHVlOiBudW1iZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBEYXRhc2V0IGltcGxlbWVudHMgSXRlcmFibGVJdGVyYXRvcjxEYXRhUG9pbnQ+IHtcbiAgICAvLyBBcnJheSBvZiBEYXRhUG9pbnRzXG4gICAgcHJpdmF0ZSBuYW1lOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBxdWVyeTogUXVlcnk7XG4gICAgcHJpdmF0ZSB2YWx1ZXM6IG51bWJlcltdO1xuICAgIHByaXZhdGUgcGFyZW50OiBEYXRhc2V0cztcbiAgICBwcml2YXRlIGlkOiBudW1iZXI7XG4gICAgcHJpdmF0ZSB5TWluOiBudW1iZXI7XG4gICAgcHJpdmF0ZSB5TWF4OiBudW1iZXI7XG4gICAgcHJpdmF0ZSBzdGFydERhdGU6IE1vbWVudDtcbiAgICBwcml2YXRlIGVuZERhdGU6IE1vbWVudDtcbiAgICBwcml2YXRlIG51bVRhcmdldHM6IG51bWJlcjtcbiAgICBwcml2YXRlIGxpbmVJbmZvOiBMaW5lSW5mbztcbiAgICBwcml2YXRlIGJhckluZm86IEJhckluZm87XG5cbiAgICBwcml2YXRlIGlzVG1wRGF0YXNldDogYm9vbGVhbjtcblxuICAgIHZhbHVlVHlwZTogVmFsdWVUeXBlO1xuXG4gICAgcHJpdmF0ZSBjdXJyZW50SW5kZXggPSAwOyAvLyBJdGVyYWJsZUl0ZXJhdG9yXG5cbiAgICBjb25zdHJ1Y3RvcihwYXJlbnQ6IERhdGFzZXRzLCBxdWVyeTogUXVlcnkpIHtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJ1bnRpdGxlZFwiO1xuICAgICAgICB0aGlzLnF1ZXJ5ID0gcXVlcnk7XG4gICAgICAgIHRoaXMudmFsdWVzID0gW107XG4gICAgICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICAgICAgICB0aGlzLmlkID0gLTE7XG4gICAgICAgIHRoaXMueU1pbiA9IG51bGw7XG4gICAgICAgIHRoaXMueU1heCA9IG51bGw7XG4gICAgICAgIHRoaXMuc3RhcnREYXRlID0gbnVsbDtcbiAgICAgICAgdGhpcy5lbmREYXRlID0gbnVsbDtcbiAgICAgICAgdGhpcy5udW1UYXJnZXRzID0gMDtcbiAgICAgICAgdGhpcy5saW5lSW5mbyA9IG51bGw7XG4gICAgICAgIHRoaXMuYmFySW5mbyA9IG51bGw7XG5cbiAgICAgICAgdGhpcy5pc1RtcERhdGFzZXQgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLnZhbHVlVHlwZSA9IHF1ZXJ5Py52YWx1ZVR5cGU7XG5cbiAgICAgICAgZm9yIChsZXQgaW5kID0gMDsgaW5kIDwgcGFyZW50LmdldERhdGVzKCkubGVuZ3RoOyBpbmQrKykge1xuICAgICAgICAgICAgdGhpcy52YWx1ZXMucHVzaChudWxsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBjbG9uZVRvVG1wRGF0YXNldCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVG1wRGF0YXNldCkge1xuICAgICAgICAgICAgbGV0IHRtcERhdGFzZXQgPSBuZXcgRGF0YXNldCh0aGlzLnBhcmVudCwgbnVsbCk7XG4gICAgICAgICAgICB0bXBEYXRhc2V0Lm5hbWUgPSBcInRtcFwiO1xuICAgICAgICAgICAgdG1wRGF0YXNldC52YWx1ZXMgPSBbLi4udGhpcy52YWx1ZXNdO1xuICAgICAgICAgICAgdG1wRGF0YXNldC55TWluID0gdGhpcy55TWluO1xuICAgICAgICAgICAgdG1wRGF0YXNldC55TWF4ID0gdGhpcy55TWF4O1xuICAgICAgICAgICAgdG1wRGF0YXNldC5zdGFydERhdGUgPSB0aGlzLnN0YXJ0RGF0ZS5jbG9uZSgpO1xuICAgICAgICAgICAgdG1wRGF0YXNldC5lbmREYXRlID0gdGhpcy5lbmREYXRlLmNsb25lKCk7XG4gICAgICAgICAgICB0bXBEYXRhc2V0Lm51bVRhcmdldHMgPSB0aGlzLm51bVRhcmdldHM7XG4gICAgICAgICAgICB0bXBEYXRhc2V0LmlzVG1wRGF0YXNldCA9IHRydWU7XG4gICAgICAgICAgICB0bXBEYXRhc2V0LnZhbHVlVHlwZSA9IHRoaXMudmFsdWVUeXBlO1xuICAgICAgICAgICAgcmV0dXJuIHRtcERhdGFzZXQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7IC8vIGFscmVhZHkgdG1wIGRhdGFzZXRcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0TmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0TmFtZShuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlkO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRJZChpZDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuaWQgPSBpZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkTnVtVGFyZ2V0cyhudW06IG51bWJlcikge1xuICAgICAgICB0aGlzLm51bVRhcmdldHMgPSB0aGlzLm51bVRhcmdldHMgKyBudW07XG4gICAgfVxuXG4gICAgcHVibGljIGdldE51bVRhcmdldHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm51bVRhcmdldHM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFZhbHVlKGRhdGU6IE1vbWVudCwgZGF5U2hpZnQ6IG51bWJlciA9IDApIHtcbiAgICAgICAgbGV0IGluZCA9IHRoaXMucGFyZW50LmdldEluZGV4T2ZEYXRlKGRhdGUpICsgTWF0aC5mbG9vcihkYXlTaGlmdCk7XG4gICAgICAgIGlmIChpbmQgPj0gMCAmJiBpbmQgPCB0aGlzLnZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1tpbmRdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRWYWx1ZShkYXRlOiBNb21lbnQsIHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgbGV0IGluZCA9IHRoaXMucGFyZW50LmdldEluZGV4T2ZEYXRlKGRhdGUpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhpbmQpO1xuXG4gICAgICAgIGlmIChpbmQgPj0gMCAmJiBpbmQgPCB0aGlzLnZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIC8vIFNldCB2YWx1ZVxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbaW5kXSA9IHZhbHVlO1xuXG4gICAgICAgICAgICAvLyBVcGRhdGUgeU1pbiBhbmQgeU1heFxuICAgICAgICAgICAgaWYgKHRoaXMueU1pbiA9PT0gbnVsbCB8fCB2YWx1ZSA8IHRoaXMueU1pbikge1xuICAgICAgICAgICAgICAgIHRoaXMueU1pbiA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMueU1heCA9PT0gbnVsbCB8fCB2YWx1ZSA+IHRoaXMueU1heCkge1xuICAgICAgICAgICAgICAgIHRoaXMueU1heCA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBVcGRhdGUgc3RhcnREYXRlIGFuZCBlbmREYXRlXG4gICAgICAgICAgICBpZiAodGhpcy5zdGFydERhdGUgPT09IG51bGwgfHwgZGF0ZSA8IHRoaXMuc3RhcnREYXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGFydERhdGUgPSBkYXRlLmNsb25lKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5lbmREYXRlID09PSBudWxsIHx8IGRhdGUgPiB0aGlzLmVuZERhdGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVuZERhdGUgPSBkYXRlLmNsb25lKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgcmVjYWxjdWxhdGVNaW5NYXgoKSB7XG4gICAgICAgIHRoaXMueU1pbiA9IE1hdGgubWluKC4uLnRoaXMudmFsdWVzKTtcbiAgICAgICAgdGhpcy55TWF4ID0gTWF0aC5tYXgoLi4udGhpcy52YWx1ZXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRZTWluKCkge1xuICAgICAgICByZXR1cm4gdGhpcy55TWluO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRZTWF4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy55TWF4O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRTdGFydERhdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXJ0RGF0ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RW5kRGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5kRGF0ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2hpZnQoc2hpZnRBbW91bnQ6IG51bWJlciwgZG9MYXJnZXJ0aGFuOiBudW1iZXIpIHtcbiAgICAgICAgbGV0IGFueVNoaWZ0ZWQgPSBmYWxzZTtcbiAgICAgICAgZm9yIChsZXQgaW5kID0gMDsgaW5kIDwgdGhpcy52YWx1ZXMubGVuZ3RoOyBpbmQrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMudmFsdWVzW2luZF0gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAoZG9MYXJnZXJ0aGFuID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzW2luZF0gPSB0aGlzLnZhbHVlc1tpbmRdICsgc2hpZnRBbW91bnQ7XG4gICAgICAgICAgICAgICAgICAgIGFueVNoaWZ0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlc1tpbmRdID49IGRvTGFyZ2VydGhhbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbaW5kXSA9IHRoaXMudmFsdWVzW2luZF0gKyBzaGlmdEFtb3VudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFueVNoaWZ0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChhbnlTaGlmdGVkKSB7XG4gICAgICAgICAgICB0aGlzLnlNaW4gPSB0aGlzLnlNaW4gKyBzaGlmdEFtb3VudDtcbiAgICAgICAgICAgIHRoaXMueU1heCA9IHRoaXMueU1heCArIHNoaWZ0QW1vdW50O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNldFBlbmFsdHkocGVuYWx0eTogbnVtYmVyKSB7XG4gICAgICAgIGZvciAobGV0IGluZCA9IDA7IGluZCA8IHRoaXMudmFsdWVzLmxlbmd0aDsgaW5kKyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlc1tpbmRdID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbaW5kXSA9IHBlbmFsdHk7XG4gICAgICAgICAgICAgICAgaWYgKHBlbmFsdHkgPCB0aGlzLnlNaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy55TWluID0gcGVuYWx0eTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHBlbmFsdHkgPiB0aGlzLnlNYXgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy55TWF4ID0gcGVuYWx0eTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UXVlcnkoKTogUXVlcnkge1xuICAgICAgICByZXR1cm4gdGhpcy5xdWVyeTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWNjdW11bGF0ZVZhbHVlcygpIHtcbiAgICAgICAgbGV0IGFjY3VtVmFsdWUgPSAwLjA7XG4gICAgICAgIGZvciAobGV0IGluZCA9IDA7IGluZCA8IHRoaXMudmFsdWVzLmxlbmd0aDsgaW5kKyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlc1tpbmRdICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgYWNjdW1WYWx1ZSArPSB0aGlzLnZhbHVlc1tpbmRdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbaW5kXSA9IGFjY3VtVmFsdWU7XG4gICAgICAgICAgICBpZiAoYWNjdW1WYWx1ZSA8IHRoaXMueU1pbikge1xuICAgICAgICAgICAgICAgIHRoaXMueU1pbiA9IGFjY3VtVmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYWNjdW1WYWx1ZSA+IHRoaXMueU1heCkge1xuICAgICAgICAgICAgICAgIHRoaXMueU1heCA9IGFjY3VtVmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VmFsdWVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldExlbmd0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzLmxlbmd0aDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0TGVuZ3RoTm90TnVsbCgpIHtcbiAgICAgICAgbGV0IGNvdW50Tm90TnVsbCA9IDA7XG4gICAgICAgIGZvciAobGV0IGluZCA9IDA7IGluZCA8IHRoaXMudmFsdWVzLmxlbmd0aDsgaW5kKyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlc1tpbmRdICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY291bnROb3ROdWxsKys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvdW50Tm90TnVsbDtcbiAgICB9XG5cbiAgICBuZXh0KCk6IEl0ZXJhdG9yUmVzdWx0PERhdGFQb2ludD4ge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50SW5kZXggPCB0aGlzLnZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGxldCBpbmQgPSB0aGlzLmN1cnJlbnRJbmRleCsrO1xuICAgICAgICAgICAgbGV0IGRhdGFQb2ludCA9IG5ldyBEYXRhUG9pbnQoXG4gICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQuZ2V0RGF0ZXMoKVtpbmRdLFxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzW2luZF1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGRvbmU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBkYXRhUG9pbnQsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50SW5kZXggPSAwO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBkb25lOiB0cnVlLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIFtTeW1ib2wuaXRlcmF0b3JdKCk6IEl0ZXJhYmxlSXRlcmF0b3I8RGF0YVBvaW50PiB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIERhdGFzZXRzIGltcGxlbWVudHMgSXRlcmFibGVJdGVyYXRvcjxEYXRhc2V0PiB7XG4gICAgLy8gSXRlcmFibGUgb2YgRGF0YXNldFxuICAgIHByaXZhdGUgZGF0ZXM6IE1vbWVudFtdO1xuICAgIHByaXZhdGUgZGF0YXNldHM6IERhdGFzZXRbXTtcblxuICAgIHByaXZhdGUgY3VycmVudEluZGV4ID0gMDsgLy8gSXRlcmFibGVJdGVyYXRvclxuXG4gICAgY29uc3RydWN0b3Ioc3RhcnREYXRlOiBNb21lbnQsIGVuZERhdGU6IE1vbWVudCkge1xuICAgICAgICB0aGlzLmRhdGVzID0gW107XG4gICAgICAgIHRoaXMuZGF0YXNldHMgPSBbXTtcblxuICAgICAgICBsZXQgY0RhdGEgPSBzdGFydERhdGUuY3JlYXRpb25EYXRhKCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGNEYXRhKTtcbiAgICAgICAgY29uc3QgZGF0ZUZvcm1hdCA9IGNEYXRhLmZvcm1hdC50b1N0cmluZygpO1xuICAgICAgICBmb3IgKFxuICAgICAgICAgICAgbGV0IGN1ckRhdGUgPSBzdGFydERhdGUuY2xvbmUoKTtcbiAgICAgICAgICAgIGN1ckRhdGUgPD0gZW5kRGF0ZTtcbiAgICAgICAgICAgIGN1ckRhdGUuYWRkKDEsIFwiZGF5c1wiKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGxldCBuZXdEYXRlID0gd2luZG93Lm1vbWVudChcbiAgICAgICAgICAgICAgICBjdXJEYXRlLmZvcm1hdChkYXRlRm9ybWF0KSxcbiAgICAgICAgICAgICAgICBkYXRlRm9ybWF0LFxuICAgICAgICAgICAgICAgIHRydWVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmRhdGVzLnB1c2gobmV3RGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY29uc29sZS5sb2codGhpcy5kYXRlcyk7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZURhdGFzZXQocXVlcnk6IFF1ZXJ5LCByZW5kZXJJbmZvOiBSZW5kZXJJbmZvKSB7XG4gICAgICAgIGxldCBkYXRhc2V0ID0gbmV3IERhdGFzZXQodGhpcywgcXVlcnkpO1xuICAgICAgICBkYXRhc2V0LnNldElkKHF1ZXJ5LmdldElkKCkpO1xuICAgICAgICBpZiAocmVuZGVySW5mbykge1xuICAgICAgICAgICAgZGF0YXNldC5zZXROYW1lKHJlbmRlckluZm8uZGF0YXNldE5hbWVbcXVlcnkuZ2V0SWQoKV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kYXRhc2V0cy5wdXNoKGRhdGFzZXQpO1xuXG4gICAgICAgIHJldHVybiBkYXRhc2V0O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRJbmRleE9mRGF0ZShkYXRlOiBNb21lbnQpIHtcbiAgICAgICAgbGV0IGNEYXRhID0gZGF0ZS5jcmVhdGlvbkRhdGEoKTtcbiAgICAgICAgY29uc3QgZGF0ZUZvcm1hdCA9IGNEYXRhLmZvcm1hdC50b1N0cmluZygpO1xuICAgICAgICBmb3IgKGxldCBpbmQgPSAwOyBpbmQgPCB0aGlzLmRhdGVzLmxlbmd0aDsgaW5kKyspIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVzW2luZF0uZm9ybWF0KGRhdGVGb3JtYXQpID09PSBkYXRlLmZvcm1hdChkYXRlRm9ybWF0KVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGluZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgfVxuXG4gICAgcHVibGljIGdldERhdGFzZXRCeVF1ZXJ5KHF1ZXJ5OiBRdWVyeSkge1xuICAgICAgICBmb3IgKGxldCBkYXRhc2V0IG9mIHRoaXMuZGF0YXNldHMpIHtcbiAgICAgICAgICAgIGlmIChkYXRhc2V0LmdldFF1ZXJ5KCkuZXF1YWxUbyhxdWVyeSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0YXNldDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RGF0YXNldEJ5SWQoaWQ6IG51bWJlcikge1xuICAgICAgICBmb3IgKGxldCBkYXRhc2V0IG9mIHRoaXMuZGF0YXNldHMpIHtcbiAgICAgICAgICAgIGlmIChkYXRhc2V0LmdldElkKCkgPT09IGlkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGFzZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0WERhdGFzZXRJZHMoKSB7XG4gICAgICAgIGxldCBpZHM6IEFycmF5PG51bWJlcj4gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgZGF0YXNldCBvZiB0aGlzLmRhdGFzZXRzKSB7XG4gICAgICAgICAgICBpZiAoZGF0YXNldC5nZXRRdWVyeSgpLnVzZWRBc1hEYXRhc2V0KSB7XG4gICAgICAgICAgICAgICAgbGV0IGlkID0gZGF0YXNldC5nZXRRdWVyeSgpLmdldElkKCk7XG4gICAgICAgICAgICAgICAgaWYgKCFpZHMuaW5jbHVkZXMoaWQpICYmIGlkICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBpZHMucHVzaChpZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpZHM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldERhdGVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRlcztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0TmFtZXMoKSB7XG4gICAgICAgIGxldCBuYW1lcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBkYXRhc2V0IG9mIHRoaXMuZGF0YXNldHMpIHtcbiAgICAgICAgICAgIG5hbWVzLnB1c2goZGF0YXNldC5nZXROYW1lKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuYW1lcztcbiAgICB9XG5cbiAgICBuZXh0KCk6IEl0ZXJhdG9yUmVzdWx0PERhdGFzZXQ+IHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudEluZGV4IDwgdGhpcy5kYXRhc2V0cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZG9uZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuZGF0YXNldHNbdGhpcy5jdXJyZW50SW5kZXgrK10sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50SW5kZXggPSAwO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBkb25lOiB0cnVlLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIFtTeW1ib2wuaXRlcmF0b3JdKCk6IEl0ZXJhYmxlSXRlcmF0b3I8RGF0YXNldD4ge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSZW5kZXJJbmZvIHtcbiAgICAvLyBJbnB1dFxuICAgIHF1ZXJpZXM6IFF1ZXJ5W107XG4gICAgeERhdGFzZXQ6IG51bWJlcltdO1xuICAgIGZvbGRlcjogc3RyaW5nO1xuICAgIGZpbGU6IHN0cmluZ1tdO1xuICAgIHNwZWNpZmllZEZpbGVzT25seTogYm9vbGVhbjtcbiAgICBmaWxlQ29udGFpbnNMaW5rZWRGaWxlczogc3RyaW5nW107XG4gICAgZmlsZU11bHRpcGxpZXJBZnRlckxpbms6IHN0cmluZztcbiAgICBkYXRlRm9ybWF0OiBzdHJpbmc7XG4gICAgZGF0ZUZvcm1hdFByZWZpeDogc3RyaW5nO1xuICAgIGRhdGVGb3JtYXRTdWZmaXg6IHN0cmluZztcbiAgICBzdGFydERhdGU6IE1vbWVudCB8IG51bGw7XG4gICAgZW5kRGF0ZTogTW9tZW50IHwgbnVsbDtcbiAgICBkYXRhc2V0TmFtZTogc3RyaW5nW107XG4gICAgY29uc3RWYWx1ZTogbnVtYmVyW107XG4gICAgaWdub3JlQXR0YWNoZWRWYWx1ZTogYm9vbGVhbltdO1xuICAgIGlnbm9yZVplcm9WYWx1ZTogYm9vbGVhbltdO1xuICAgIGFjY3VtOiBib29sZWFuW107XG4gICAgcGVuYWx0eTogbnVtYmVyW107XG4gICAgdmFsdWVTaGlmdDogbnVtYmVyW107XG4gICAgc2hpZnRPbmx5VmFsdWVMYXJnZXJUaGFuOiBudW1iZXJbXTtcbiAgICB2YWx1ZVR5cGU6IHN0cmluZ1tdOyAvLyBudW1iZXIvZmxvYXQsIGludCwgc3RyaW5nLCBib29sZWFuLCBkYXRlLCB0aW1lLCBkYXRldGltZVxuICAgIHRleHRWYWx1ZU1hcDogVGV4dFZhbHVlTWFwO1xuXG4gICAgZGF0YUFyZWFTaXplOiBTaXplO1xuICAgIG1hcmdpbjogTWFyZ2luO1xuXG4gICAgZml4ZWRTY2FsZTogbnVtYmVyO1xuICAgIGZpdFBhbmVsV2lkdGg6IGJvb2xlYW47XG4gICAgYXNwZWN0UmF0aW86IEFzcGVjdFJhdGlvO1xuXG4gICAgb3V0cHV0OiBhbnlbXTtcbiAgICBsaW5lOiBMaW5lSW5mb1tdO1xuICAgIGJhcjogQmFySW5mb1tdO1xuICAgIHBpZTogUGllSW5mb1tdO1xuICAgIHN1bW1hcnk6IFN1bW1hcnlJbmZvW107XG4gICAgbW9udGg6IE1vbnRoSW5mb1tdO1xuICAgIGhlYXRtYXA6IEhlYXRtYXBJbmZvW107XG4gICAgYnVsbGV0OiBCdWxsZXRJbmZvW107XG4gICAgY3VzdG9tRGF0YXNldDogQ3VzdG9tRGF0YXNldEluZm9bXTtcblxuICAgIHB1YmxpYyBkYXRhc2V0czogRGF0YXNldHMgfCBudWxsO1xuXG4gICAgY29uc3RydWN0b3IocXVlcmllczogUXVlcnlbXSkge1xuICAgICAgICB0aGlzLnF1ZXJpZXMgPSBxdWVyaWVzO1xuICAgICAgICB0aGlzLnhEYXRhc2V0ID0gW107IC8vIHVzZSBmaWxlIG5hbWVcbiAgICAgICAgdGhpcy5mb2xkZXIgPSBcIi9cIjtcbiAgICAgICAgdGhpcy5maWxlID0gW107IC8vIGV4dHJhIGZpbGVzIHRvIHVzZVxuICAgICAgICB0aGlzLnNwZWNpZmllZEZpbGVzT25seSA9IGZhbHNlOyAvLyBpZiB0cnVlLCB1c2UgZmlsZXMgc3BlY2lmaWVkIG9ubHlcbiAgICAgICAgdGhpcy5maWxlQ29udGFpbnNMaW5rZWRGaWxlcyA9IFtdO1xuICAgICAgICB0aGlzLmZpbGVNdWx0aXBsaWVyQWZ0ZXJMaW5rID0gXCJcIjsgLy8gcmVnZXggcGF0dGVybiB0byBleHRyYWN0IG11bHRpcGxpZXIgYWZ0ZXIgbGlua1xuICAgICAgICB0aGlzLmRhdGVGb3JtYXQgPSBcIllZWVktTU0tRERcIjtcbiAgICAgICAgdGhpcy5kYXRlRm9ybWF0UHJlZml4ID0gXCJcIjtcbiAgICAgICAgdGhpcy5kYXRlRm9ybWF0U3VmZml4ID0gXCJcIjtcbiAgICAgICAgdGhpcy5zdGFydERhdGUgPSBudWxsO1xuICAgICAgICB0aGlzLmVuZERhdGUgPSBudWxsO1xuICAgICAgICB0aGlzLmRhdGFzZXROYW1lID0gW107IC8vIHVudGl0bGVkXG4gICAgICAgIHRoaXMuY29uc3RWYWx1ZSA9IFsxLjBdO1xuICAgICAgICB0aGlzLmlnbm9yZUF0dGFjaGVkVmFsdWUgPSBbXTsgLy8gZmFsc2VcbiAgICAgICAgdGhpcy5pZ25vcmVaZXJvVmFsdWUgPSBbXTsgLy8gZmFsc2VcbiAgICAgICAgdGhpcy5hY2N1bSA9IFtdOyAvLyBmYWxzZSwgYWNjdW0gdmFsdWVzIHN0YXJ0IGZyb20gemVybyBvdmVyIGRheXNcbiAgICAgICAgdGhpcy5wZW5hbHR5ID0gW107IC8vIG51bGwsIHVzZSB0aGlzIHZhbHVlIGluc3RlYWQgb2YgbnVsbCB2YWx1ZVxuICAgICAgICB0aGlzLnZhbHVlU2hpZnQgPSBbXTtcbiAgICAgICAgdGhpcy5zaGlmdE9ubHlWYWx1ZUxhcmdlclRoYW4gPSBbXTtcbiAgICAgICAgdGhpcy52YWx1ZVR5cGUgPSBbXTtcbiAgICAgICAgdGhpcy50ZXh0VmFsdWVNYXAgPSB7fTtcblxuICAgICAgICB0aGlzLmRhdGFBcmVhU2l6ZSA9IG5ldyBTaXplKDMwMCwgMzAwKTtcbiAgICAgICAgdGhpcy5hc3BlY3RSYXRpbyA9IG5ldyBBc3BlY3RSYXRpbygxLCAxKTtcbiAgICAgICAgdGhpcy5tYXJnaW4gPSBuZXcgTWFyZ2luKDEwLCAxMCwgMTAsIDEwKTsgLy8gdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0XG5cbiAgICAgICAgdGhpcy5maXhlZFNjYWxlID0gMS4wO1xuICAgICAgICB0aGlzLmZpdFBhbmVsV2lkdGggPSBmYWxzZTtcblxuICAgICAgICB0aGlzLm91dHB1dCA9IFtdO1xuICAgICAgICB0aGlzLmxpbmUgPSBbXTtcbiAgICAgICAgdGhpcy5iYXIgPSBbXTtcbiAgICAgICAgdGhpcy5waWUgPSBbXTtcbiAgICAgICAgdGhpcy5zdW1tYXJ5ID0gW107XG4gICAgICAgIHRoaXMubW9udGggPSBbXTtcbiAgICAgICAgdGhpcy5oZWF0bWFwID0gW107XG4gICAgICAgIHRoaXMuYnVsbGV0ID0gW107XG4gICAgICAgIHRoaXMuY3VzdG9tRGF0YXNldCA9IFtdO1xuXG4gICAgICAgIHRoaXMuZGF0YXNldHMgPSBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRRdWVyeUJ5SWQoaWQ6IG51bWJlcikge1xuICAgICAgICBmb3IgKGxldCBxdWVyeSBvZiB0aGlzLnF1ZXJpZXMpIHtcbiAgICAgICAgICAgIGlmIChxdWVyeS5nZXRJZCgpID09PSBpZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBxdWVyeTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEN1c3RvbURhdGFzZXRJbmZvIHtcbiAgICBpZDogbnVtYmVyO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICB4RGF0YTogc3RyaW5nW107XG4gICAgeURhdGE6IHN0cmluZ1tdO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuaWQgPSAtMTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJcIjtcbiAgICAgICAgdGhpcy54RGF0YSA9IFtdO1xuICAgICAgICB0aGlzLnlEYXRhID0gW107XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElHcmFwaCB7XG4gICAgR2V0R3JhcGhUeXBlKCk6IEdyYXBoVHlwZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTGVnZW5kIHtcbiAgICBzaG93TGVnZW5kOiBib29sZWFuO1xuICAgIGxlZ2VuZFBvc2l0aW9uOiBzdHJpbmc7XG4gICAgbGVnZW5kT3JpZW50YXRpb246IHN0cmluZztcbiAgICBsZWdlbmRCZ0NvbG9yOiBzdHJpbmc7XG4gICAgbGVnZW5kQm9yZGVyQ29sb3I6IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIENvbW1vbkNoYXJ0SW5mbyBpbXBsZW1lbnRzIElHcmFwaCwgSUxlZ2VuZCB7XG4gICAgdGl0bGU6IHN0cmluZztcbiAgICB4QXhpc0xhYmVsOiBzdHJpbmc7XG4gICAgeEF4aXNDb2xvcjogc3RyaW5nO1xuICAgIHhBeGlzTGFiZWxDb2xvcjogc3RyaW5nO1xuICAgIHlBeGlzTGFiZWw6IHN0cmluZ1tdO1xuICAgIHlBeGlzQ29sb3I6IHN0cmluZ1tdO1xuICAgIHlBeGlzTGFiZWxDb2xvcjogc3RyaW5nW107XG4gICAgeUF4aXNVbml0OiBzdHJpbmdbXTtcbiAgICB4QXhpc1RpY2tJbnRlcnZhbDogc3RyaW5nO1xuICAgIHlBeGlzVGlja0ludGVydmFsOiBzdHJpbmdbXTtcbiAgICB4QXhpc1RpY2tMYWJlbEZvcm1hdDogc3RyaW5nO1xuICAgIHlBeGlzVGlja0xhYmVsRm9ybWF0OiBzdHJpbmdbXTtcbiAgICB5TWluOiBudW1iZXJbXTtcbiAgICB5TWF4OiBudW1iZXJbXTtcbiAgICByZXZlcnNlWUF4aXM6IGJvb2xlYW5bXTtcbiAgICBhbGxvd0luc3BlY3REYXRhOiBib29sZWFuO1xuXG4gICAgLy8gSUxlZ2VuZFxuICAgIHNob3dMZWdlbmQ6IGJvb2xlYW47XG4gICAgbGVnZW5kUG9zaXRpb246IHN0cmluZztcbiAgICBsZWdlbmRPcmllbnRhdGlvbjogc3RyaW5nO1xuICAgIGxlZ2VuZEJnQ29sb3I6IHN0cmluZztcbiAgICBsZWdlbmRCb3JkZXJDb2xvcjogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMudGl0bGUgPSBcIlwiO1xuICAgICAgICB0aGlzLnhBeGlzTGFiZWwgPSBcIkRhdGVcIjtcbiAgICAgICAgdGhpcy54QXhpc0NvbG9yID0gXCJcIjtcbiAgICAgICAgdGhpcy54QXhpc0xhYmVsQ29sb3IgPSBcIlwiO1xuICAgICAgICB0aGlzLnlBeGlzTGFiZWwgPSBbXTsgLy8gXCJWYWx1ZVwiLCAyIGVsZW1lbnRzXG4gICAgICAgIHRoaXMueUF4aXNDb2xvciA9IFtdOyAvLyBcIlwiLCAyIGVsZW1lbnRzXG4gICAgICAgIHRoaXMueUF4aXNMYWJlbENvbG9yID0gW107IC8vIFwiXCIsIDIgZWxlbWVudHNcbiAgICAgICAgdGhpcy55QXhpc1VuaXQgPSBbXTsgLy8gXCJcIiwgMiBlbGVtZW50c1xuICAgICAgICB0aGlzLnhBeGlzVGlja0ludGVydmFsID0gbnVsbDsgLy8gdGhlIHN0cmluZyB3aWxsIGJlIGNvbnZlcnRlZCB0byBEdXJhdGlvbiAoYSBtb250aCBpcyBub3QgbmVzc2Nlc2FyeSB0byAzMCBkYXlzKVxuICAgICAgICB0aGlzLnlBeGlzVGlja0ludGVydmFsID0gW107IC8vIG51bGwsIDIgZWxlbWVudHNcbiAgICAgICAgdGhpcy54QXhpc1RpY2tMYWJlbEZvcm1hdCA9IG51bGw7XG4gICAgICAgIHRoaXMueUF4aXNUaWNrTGFiZWxGb3JtYXQgPSBbXTsgLy8gbnVsbCwgMiBlbGVtZW50c1xuICAgICAgICB0aGlzLnlNaW4gPSBbXTsgLy8gbnVsbCwgMiBlbGVtZW50c1xuICAgICAgICB0aGlzLnlNYXggPSBbXTsgLy8gbnVsbCwgMiBlbGVtZW50c1xuICAgICAgICB0aGlzLnJldmVyc2VZQXhpcyA9IFtdOyAvLyBmYWxzZSwgMiBlbGVtZW50c1xuICAgICAgICB0aGlzLmFsbG93SW5zcGVjdERhdGEgPSB0cnVlO1xuXG4gICAgICAgIC8vIElMZWdlbmRcbiAgICAgICAgdGhpcy5zaG93TGVnZW5kID0gZmFsc2U7XG4gICAgICAgIHRoaXMubGVnZW5kUG9zaXRpb24gPSBcIlwiOyAvLyB0b3AsIGJvdHRvbSwgbGVmdCwgcmlnaHRcbiAgICAgICAgdGhpcy5sZWdlbmRPcmllbnRhdGlvbiA9IFwiXCI7IC8vIGhvcml6b250YWwsIHZlcnRpY2FsXG4gICAgICAgIHRoaXMubGVnZW5kQmdDb2xvciA9IFwiXCI7XG4gICAgICAgIHRoaXMubGVnZW5kQm9yZGVyQ29sb3IgPSBcIlwiO1xuICAgIH1cblxuICAgIHB1YmxpYyBHZXRHcmFwaFR5cGUoKSB7XG4gICAgICAgIHJldHVybiBHcmFwaFR5cGUuVW5rbm93bjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMaW5lSW5mbyBleHRlbmRzIENvbW1vbkNoYXJ0SW5mbyB7XG4gICAgbGluZUNvbG9yOiBzdHJpbmdbXTtcbiAgICBsaW5lV2lkdGg6IG51bWJlcltdO1xuICAgIHNob3dMaW5lOiBib29sZWFuW107XG4gICAgc2hvd1BvaW50OiBib29sZWFuW107XG4gICAgcG9pbnRDb2xvcjogc3RyaW5nW107XG4gICAgcG9pbnRCb3JkZXJDb2xvcjogc3RyaW5nW107XG4gICAgcG9pbnRCb3JkZXJXaWR0aDogbnVtYmVyW107XG4gICAgcG9pbnRTaXplOiBudW1iZXJbXTtcbiAgICBmaWxsR2FwOiBib29sZWFuW107XG4gICAgeUF4aXNMb2NhdGlvbjogc3RyaW5nW107XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5saW5lQ29sb3IgPSBbXTsgLy8gXCJcIlxuICAgICAgICB0aGlzLmxpbmVXaWR0aCA9IFtdOyAvLyAxLjVcbiAgICAgICAgdGhpcy5zaG93TGluZSA9IFtdOyAvLyB0cnVlXG4gICAgICAgIHRoaXMuc2hvd1BvaW50ID0gW107IC8vIHRydWVcbiAgICAgICAgdGhpcy5wb2ludENvbG9yID0gW107IC8vICM2OWIzYTJcbiAgICAgICAgdGhpcy5wb2ludEJvcmRlckNvbG9yID0gW107XG4gICAgICAgIHRoaXMucG9pbnRCb3JkZXJXaWR0aCA9IFtdOyAvLyAwLjBcbiAgICAgICAgdGhpcy5wb2ludFNpemUgPSBbXTsgLy8gMy4wXG4gICAgICAgIHRoaXMuZmlsbEdhcCA9IFtdOyAvLyBmYWxzZVxuICAgICAgICB0aGlzLnlBeGlzTG9jYXRpb24gPSBbXTsgLy8gbGVmdCwgZm9yIGVhY2ggdGFyZ2V0XG4gICAgfVxuXG4gICAgcHVibGljIEdldEdyYXBoVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIEdyYXBoVHlwZS5MaW5lO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJhckluZm8gZXh0ZW5kcyBDb21tb25DaGFydEluZm8ge1xuICAgIGJhckNvbG9yOiBzdHJpbmdbXTtcbiAgICB5QXhpc0xvY2F0aW9uOiBzdHJpbmdbXTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmJhckNvbG9yID0gW107IC8vICM2OWIzYTJcbiAgICAgICAgdGhpcy55QXhpc0xvY2F0aW9uID0gW107IC8vIGxlZnQsIGZvciBlYWNoIHRhcmdldFxuICAgIH1cblxuICAgIHB1YmxpYyBHZXRHcmFwaFR5cGUoKSB7XG4gICAgICAgIHJldHVybiBHcmFwaFR5cGUuQmFyO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFBpZUluZm8gaW1wbGVtZW50cyBJR3JhcGgsIElMZWdlbmQge1xuICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgZGF0YTogc3RyaW5nW107XG4gICAgZGF0YUNvbG9yOiBzdHJpbmdbXTtcbiAgICBkYXRhTmFtZTogc3RyaW5nW107XG4gICAgbGFiZWw6IHN0cmluZ1tdO1xuICAgIGhpZGVMYWJlbExlc3NUaGFuOiBudW1iZXI7XG4gICAgc2hvd0V4dExhYmVsT25seUlmTm9MYWJlbDogYm9vbGVhbjtcbiAgICBleHRMYWJlbDogc3RyaW5nW107XG5cbiAgICByYXRpb0lubmVyUmFkaXVzOiBudW1iZXI7XG5cbiAgICAvLyBJTGVnZW5kXG4gICAgc2hvd0xlZ2VuZDogYm9vbGVhbjtcbiAgICBsZWdlbmRQb3NpdGlvbjogc3RyaW5nO1xuICAgIGxlZ2VuZE9yaWVudGF0aW9uOiBzdHJpbmc7XG4gICAgbGVnZW5kQmdDb2xvcjogc3RyaW5nO1xuICAgIGxlZ2VuZEJvcmRlckNvbG9yOiBzdHJpbmc7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy50aXRsZSA9IFwiXCI7XG4gICAgICAgIHRoaXMuZGF0YSA9IFtdO1xuICAgICAgICB0aGlzLmRhdGFDb2xvciA9IFtdO1xuICAgICAgICB0aGlzLmRhdGFOYW1lID0gW107XG4gICAgICAgIHRoaXMubGFiZWwgPSBbXTtcbiAgICAgICAgdGhpcy5oaWRlTGFiZWxMZXNzVGhhbiA9IDAuMDM7XG4gICAgICAgIHRoaXMuZXh0TGFiZWwgPSBbXTtcbiAgICAgICAgdGhpcy5zaG93RXh0TGFiZWxPbmx5SWZOb0xhYmVsID0gZmFsc2U7XG4gICAgICAgIHRoaXMucmF0aW9Jbm5lclJhZGl1cyA9IDAuMDtcblxuICAgICAgICAvLyBJTGVnZW5kXG4gICAgICAgIHRoaXMuc2hvd0xlZ2VuZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmxlZ2VuZFBvc2l0aW9uID0gXCJcIjsgLy8gdG9wLCBib3R0b20sIGxlZnQsIHJpZ2h0XG4gICAgICAgIHRoaXMubGVnZW5kT3JpZW50YXRpb24gPSBcIlwiOyAvLyBob3Jpem9udGFsLCB2ZXJ0aWNhbFxuICAgICAgICB0aGlzLmxlZ2VuZEJnQ29sb3IgPSBcIlwiO1xuICAgICAgICB0aGlzLmxlZ2VuZEJvcmRlckNvbG9yID0gXCJcIjtcbiAgICB9XG5cbiAgICBwdWJsaWMgR2V0R3JhcGhUeXBlKCkge1xuICAgICAgICByZXR1cm4gR3JhcGhUeXBlLlBpZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdW1tYXJ5SW5mbyBpbXBsZW1lbnRzIElHcmFwaCB7XG4gICAgdGVtcGxhdGU6IHN0cmluZztcbiAgICBzdHlsZTogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMudGVtcGxhdGUgPSBcIlwiO1xuICAgICAgICB0aGlzLnN0eWxlID0gXCJcIjtcbiAgICB9XG5cbiAgICBwdWJsaWMgR2V0R3JhcGhUeXBlKCkge1xuICAgICAgICByZXR1cm4gR3JhcGhUeXBlLlN1bW1hcnk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTW9udGhJbmZvIGltcGxlbWVudHMgSUdyYXBoIHtcbiAgICBtb2RlOiBzdHJpbmc7XG4gICAgZGF0YXNldDogbnVtYmVyW107XG4gICAgc3RhcnRXZWVrT246IHN0cmluZztcbiAgICB0aHJlc2hvbGQ6IG51bWJlcltdO1xuICAgIHlNaW46IG51bWJlcltdO1xuICAgIHlNYXg6IG51bWJlcltdO1xuICAgIGNvbG9yOiBzdHJpbmc7XG4gICAgZGltTm90SW5Nb250aDogYm9vbGVhbjtcbiAgICBpbml0TW9udGg6IHN0cmluZzsgLy8gWVlZWS1NTVxuICAgIHNob3dTZWxlY3RlZFZhbHVlOiBib29sZWFuO1xuXG4gICAgLy8gaGVhZGVyXG4gICAgaGVhZGVyWWVhckNvbG9yOiBzdHJpbmc7XG4gICAgaGVhZGVyTW9udGhDb2xvcjogc3RyaW5nO1xuICAgIGRpdmlkaW5nTGluZUNvbG9yOiBzdHJpbmc7XG5cbiAgICAvLyBjaXJjbGVzIGFuZCByaW5nc1xuICAgIHNob3dDaXJjbGU6IGJvb2xlYW47XG4gICAgc2hvd1N0cmVhazogYm9vbGVhbjtcbiAgICBzaG93VG9kYXlSaW5nOiBib29sZWFuO1xuICAgIHNob3dTZWxlY3RlZFJpbmc6IGJvb2xlYW47XG4gICAgY2lyY2xlQ29sb3I6IHN0cmluZztcbiAgICBjaXJjbGVDb2xvckJ5VmFsdWU6IGJvb2xlYW47XG4gICAgdG9kYXlSaW5nQ29sb3I6IHN0cmluZztcbiAgICBzZWxlY3RlZFJpbmdDb2xvcjogc3RyaW5nO1xuXG4gICAgLy8gYW5ub3RhdGlvbnNcbiAgICBzaG93QW5ub3RhdGlvbjogYm9vbGVhbjtcbiAgICBhbm5vdGF0aW9uOiBzdHJpbmdbXTtcbiAgICBzaG93QW5ub3RhdGlvbk9mQWxsVGFyZ2V0czogYm9vbGVhbjtcblxuICAgIC8vIGludGVybmFsXG4gICAgc2VsZWN0ZWREYXRlOiBzdHJpbmc7XG4gICAgc2VsZWN0ZWREYXRhc2V0OiBudW1iZXI7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5tb2RlID0gXCJjaXJjbGVcIjsgLy8gY2lyY2xlLCBhbm5vdGF0aW9uXG4gICAgICAgIHRoaXMuZGF0YXNldCA9IFtdO1xuICAgICAgICB0aGlzLnN0YXJ0V2Vla09uID0gXCJTdW5cIjtcbiAgICAgICAgdGhpcy50aHJlc2hvbGQgPSBbXTsgLy8gaWYgdmFsdWUgPiB0aHJlc2hvbGQsIHdpbGwgc2hvdyBkb3RcbiAgICAgICAgdGhpcy55TWluID0gW107XG4gICAgICAgIHRoaXMueU1heCA9IFtdO1xuICAgICAgICB0aGlzLmNvbG9yID0gbnVsbDtcbiAgICAgICAgdGhpcy5kaW1Ob3RJbk1vbnRoID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pbml0TW9udGggPSBcIlwiO1xuICAgICAgICB0aGlzLnNob3dTZWxlY3RlZFZhbHVlID0gdHJ1ZTtcblxuICAgICAgICAvLyBoZWFkZXJcbiAgICAgICAgdGhpcy5oZWFkZXJZZWFyQ29sb3IgPSBudWxsO1xuICAgICAgICB0aGlzLmhlYWRlck1vbnRoQ29sb3IgPSBudWxsO1xuICAgICAgICB0aGlzLmRpdmlkaW5nTGluZUNvbG9yID0gbnVsbDtcblxuICAgICAgICAvLyBjaXJjbGVzIGFuZCByaW5nc1xuICAgICAgICB0aGlzLnNob3dDaXJjbGUgPSB0cnVlO1xuICAgICAgICB0aGlzLnNob3dTdHJlYWsgPSB0cnVlOyAvLyBhIHN0cmVhayBjb25uZWN0cyBuZWlnYm9yIGRvdHNcbiAgICAgICAgdGhpcy5zaG93VG9kYXlSaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zaG93U2VsZWN0ZWRSaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jaXJjbGVDb2xvciA9IG51bGw7XG4gICAgICAgIHRoaXMuY2lyY2xlQ29sb3JCeVZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMudG9kYXlSaW5nQ29sb3IgPSBcIlwiOyAvLyB3aGl0ZVxuICAgICAgICB0aGlzLnNlbGVjdGVkUmluZ0NvbG9yID0gXCJmaXJlYnJpY2tcIjtcblxuICAgICAgICAvLyBhbm5vdGF0aW9uc1xuICAgICAgICB0aGlzLnNob3dBbm5vdGF0aW9uID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5hbm5vdGF0aW9uID0gW107IC8vIGFubm90YXRpb24gZm9yIGVhY2ggZGF0YXNldCwgYWNjZXB0IGV4cHJlc3Npb24gdGh1cyB2YWx1ZVxuICAgICAgICB0aGlzLnNob3dBbm5vdGF0aW9uT2ZBbGxUYXJnZXRzID0gdHJ1ZTtcblxuICAgICAgICAvLyBpbnRlcm5hbFxuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IFwiXCI7IC8vIHNlbGVjdGVkIGRhdGVcbiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGFzZXQgPSBudWxsOyAvLyBzZWxlY3RlZCBpbmRleCBvZiBkYXRhc2V0XG4gICAgfVxuXG4gICAgcHVibGljIEdldEdyYXBoVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIEdyYXBoVHlwZS5Nb250aDtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBIZWF0bWFwSW5mbyBpbXBsZW1lbnRzIElHcmFwaCB7XG4gICAgZGF0YXNldDogc3RyaW5nO1xuICAgIHN0YXJ0V2Vla09uOiBzdHJpbmc7XG4gICAgb3JpZW50YXRpb246IHN0cmluZztcbiAgICB5TWluOiBudW1iZXI7XG4gICAgeU1heDogbnVtYmVyO1xuICAgIGNvbG9yOiBzdHJpbmc7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5kYXRhc2V0ID0gXCIwXCI7XG4gICAgICAgIHRoaXMuc3RhcnRXZWVrT24gPSBcIlN1blwiO1xuICAgICAgICB0aGlzLm9yaWVudGF0aW9uID0gXCJ2ZXJ0aWNhbFwiO1xuICAgICAgICB0aGlzLnlNaW4gPSBudWxsO1xuICAgICAgICB0aGlzLnlNYXggPSBudWxsO1xuICAgICAgICB0aGlzLmNvbG9yID0gbnVsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgR2V0R3JhcGhUeXBlKCkge1xuICAgICAgICByZXR1cm4gR3JhcGhUeXBlLkhlYXRtYXA7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQnVsbGV0SW5mbyBpbXBsZW1lbnRzIElHcmFwaCB7XG4gICAgdGl0bGU6IHN0cmluZztcbiAgICBkYXRhc2V0OiBzdHJpbmc7XG4gICAgb3JpZW50YXRpb246IHN0cmluZztcbiAgICB2YWx1ZTogc3RyaW5nO1xuICAgIHZhbHVlVW5pdDogc3RyaW5nO1xuICAgIHZhbHVlQ29sb3I6IHN0cmluZztcbiAgICByYW5nZTogbnVtYmVyW107XG4gICAgcmFuZ2VDb2xvcjogc3RyaW5nW107XG4gICAgc2hvd01hcmtlcjogYm9vbGVhbjtcbiAgICBtYXJrZXJWYWx1ZTogbnVtYmVyO1xuICAgIG1hcmtlckNvbG9yOiBzdHJpbmc7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy50aXRsZSA9IFwiXCI7XG4gICAgICAgIHRoaXMuZGF0YXNldCA9IFwiMFwiOyAvLyBkYXRhc2V0IGlkIG9yIG5hbWVcbiAgICAgICAgdGhpcy5vcmllbnRhdGlvbiA9IFwiaG9yaXpvbnRhbFwiOyAvLyBvciB2ZXJ0aWNhbFxuICAgICAgICB0aGlzLnZhbHVlID0gXCJcIjsgLy8gQ2FuIHBvc3Nlc3MgdGVtcGxhdGUgdmFyaWFsYmVcbiAgICAgICAgdGhpcy52YWx1ZVVuaXQgPSBcIlwiO1xuICAgICAgICB0aGlzLnZhbHVlQ29sb3IgPSBcIiM2OWIzYTJcIjtcbiAgICAgICAgdGhpcy5yYW5nZSA9IFtdO1xuICAgICAgICB0aGlzLnJhbmdlQ29sb3IgPSBbXTtcbiAgICAgICAgdGhpcy5zaG93TWFya2VyID0gZmFsc2U7XG4gICAgICAgIHRoaXMubWFya2VyVmFsdWUgPSAwO1xuICAgICAgICB0aGlzLm1hcmtlckNvbG9yID0gXCJcIjtcbiAgICB9XG5cbiAgICBwdWJsaWMgR2V0R3JhcGhUeXBlKCkge1xuICAgICAgICByZXR1cm4gR3JhcGhUeXBlLkJ1bGxldDtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTaXplIHtcbiAgICB3aWR0aDogbnVtYmVyO1xuICAgIGhlaWdodDogbnVtYmVyO1xuXG4gICAgY29uc3RydWN0b3IodzogbnVtYmVyLCBoOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy53aWR0aCA9IHc7XG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gaDtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBc3BlY3RSYXRpbyAge1xuICAgIHg6IG51bWJlcjtcbiAgICB5OiBudW1iZXI7XG5cbiAgICBjb25zdHJ1Y3Rvcih4OiBudW1iZXIsIHk6IG51bWJlcikge1xuICAgICAgICB0aGlzLnggPSB4O1xuICAgICAgICB0aGlzLnkgPSB5O1xuICAgIH1cblxuICAgIHB1YmxpYyByZWNhbGN1bGF0ZVNpemUoc2l6ZTogU2l6ZSk6IFNpemUge1xuICAgICAgICBsZXQgYXNwZWN0UmF0aW8gPSB0aGlzLnggLyB0aGlzLnk7XG4gICAgICAgIGxldCB3aWR0aCA9IHBhcnNlRmxvYXQoKHNpemUud2lkdGggKiBhc3BlY3RSYXRpbykudG9GaXhlZCgyKSlcbiAgICAgICAgcmV0dXJuIG5ldyBTaXplKHdpZHRoLCBzaXplLmhlaWdodCk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTWFyZ2luIHtcbiAgICB0b3A6IG51bWJlcjtcbiAgICByaWdodDogbnVtYmVyO1xuICAgIGJvdHRvbTogbnVtYmVyO1xuICAgIGxlZnQ6IG51bWJlcjtcblxuICAgIGNvbnN0cnVjdG9yKHRvcDogbnVtYmVyLCByaWdodDogbnVtYmVyLCBib3R0b206IG51bWJlciwgbGVmdDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMudG9wID0gdG9wO1xuICAgICAgICB0aGlzLnJpZ2h0ID0gcmlnaHQ7XG4gICAgICAgIHRoaXMuYm90dG9tID0gYm90dG9tO1xuICAgICAgICB0aGlzLmxlZnQgPSBsZWZ0O1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRyYW5zZm9ybSB7XG4gICAgdHJhbnNsYXRlWDogbnVtYmVyO1xuICAgIHRyYW5zbGF0ZVk6IG51bWJlcjtcblxuICAgIGNvbnN0cnVjdG9yKHRyYW5zZm9ybTogYW55KSB7XG4gICAgICAgIHRoaXMudHJhbnNsYXRlWCA9IDA7XG4gICAgICAgIHRoaXMudHJhbnNsYXRlWSA9IDA7XG5cbiAgICAgICAgaWYgKHR5cGVvZiB0cmFuc2Zvcm0gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGxldCBncm91cHMgPSB0cmFuc2Zvcm0ubWF0Y2goXG4gICAgICAgICAgICAgICAgL3RyYW5zbGF0ZVxcKFxccyooPzx4PltcXGRcXC5cXC8tXSspXFxzKixcXHMqKD88eT5bXFxkXFwuXFwvLV0rKVxccypcXCkvXG4gICAgICAgICAgICApLmdyb3VwcztcbiAgICAgICAgICAgIGlmIChncm91cHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVggPSBwYXJzZUZsb2F0KGdyb3Vwcy54KTtcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVkgPSBwYXJzZUZsb2F0KGdyb3Vwcy55KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IHR5cGUgQ2hhcnRFbGVtZW50cyA9IHtcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XG59O1xuXG5leHBvcnQgY2xhc3MgVGFibGVEYXRhIHtcbiAgICBmaWxlUGF0aDogc3RyaW5nO1xuICAgIHRhYmxlSW5kZXg6IG51bWJlcjtcbiAgICB4RGF0YXNldDogUXVlcnkgfCBudWxsO1xuICAgIHlEYXRhc2V0czogQXJyYXk8UXVlcnk+O1xuXG4gICAgY29uc3RydWN0b3IoZmlsZVBhdGg6IHN0cmluZywgdGFibGVJbmRleDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuZmlsZVBhdGggPSBmaWxlUGF0aDtcbiAgICAgICAgdGhpcy50YWJsZUluZGV4ID0gdGFibGVJbmRleDtcbiAgICAgICAgdGhpcy54RGF0YXNldCA9IG51bGw7XG4gICAgICAgIHRoaXMueURhdGFzZXRzID0gW107IC8vIGFycmF5IG9mIHF1ZXJ5XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29sbGVjdGluZ1Byb2Nlc3NJbmZvIHtcbiAgICBmaWxlVG90YWw6IG51bWJlcjsgLy8gdG90YWwgbnVtYmVyIG9mIGZpbGVzXG4gICAgZmlsZUF2YWlsYWJsZTogbnVtYmVyOyAvLyB0b3RhbCBhdmFpbGFibGUgY291bnRcbiAgICBmaWxlT3V0T2ZEYXRlUmFuZ2U6IG51bWJlcjtcbiAgICBmaWxlTm90SW5Gb3JtYXQ6IG51bWJlcjtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZztcbiAgICBtaW5EYXRlOiBNb21lbnQ7XG4gICAgbWF4RGF0ZTogTW9tZW50O1xuICAgIGdvdEFueVZhbGlkWFZhbHVlOiBib29sZWFuO1xuICAgIGdvdEFueVZhbGlkWVZhbHVlOiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuZmlsZVRvdGFsID0gMDtcbiAgICAgICAgdGhpcy5maWxlQXZhaWxhYmxlID0gMDtcbiAgICAgICAgdGhpcy5maWxlT3V0T2ZEYXRlUmFuZ2UgPSAwO1xuICAgICAgICB0aGlzLmZpbGVOb3RJbkZvcm1hdCA9IDA7XG4gICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gXCJcIjtcbiAgICAgICAgdGhpcy5taW5EYXRlID0gd2luZG93Lm1vbWVudChcIlwiKTsgLy8gaW52YWxpZCBkYXRlXG4gICAgICAgIHRoaXMubWF4RGF0ZSA9IHdpbmRvdy5tb21lbnQoXCJcIik7IC8vIGludmFsaWQgZGF0ZVxuICAgICAgICB0aGlzLmdvdEFueVZhbGlkWFZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZ290QW55VmFsaWRZVmFsdWUgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCB0eXBlIFhWYWx1ZU1hcCA9IE1hcDxudW1iZXIsIHN0cmluZz47XG5leHBvcnQgdHlwZSBEYXRhTWFwID0gTWFwPHN0cmluZywgQXJyYXk8UXVlcnlWYWx1ZVBhaXI+PjtcbiIsImltcG9ydCB7IFJlbmRlckluZm8sIFNpemUsIFRleHRWYWx1ZU1hcCwgVHJhbnNmb3JtIH0gZnJvbSBcIi4vZGF0YVwiO1xuaW1wb3J0IHsgVEZpbGUsIFRGb2xkZXIsIG5vcm1hbGl6ZVBhdGggfSBmcm9tIFwib2JzaWRpYW5cIjtcbmltcG9ydCB7IFZhbHVlVHlwZSB9IGZyb20gXCIuL2RhdGFcIjtcbmltcG9ydCAqIGFzIGQzIGZyb20gXCJkM1wiO1xuaW1wb3J0IHsgTW9tZW50LCBEdXJhdGlvbiB9IGZyb20gXCJtb21lbnRcIjtcblxuLy8gZGF0ZSBhbmQgdGltZVxuZnVuY3Rpb24gbWFrZVRpbWVGb3JtYXQoKSB7XG4gICAgLy9ISDogMi1kaWdpdHMgaG91cnMgKDI0IGhvdXIgdGltZSkgZnJvbSAwIHRvIDIzLCBIOiwgMi1kaWdpdHMgaG91cnMgKDI0IGhvdXIgdGltZSkgZnJvbSAwIHRvIDIzIHdpdGhvdXQgbGVhZGluZyAwXG4gICAgLy8gaGg6IDItZGlnaXRzIGhvdXJzICgxMiBob3VyIHRpbWUpLCBoOiAyLWRpZ2l0cyBob3VycyAoMTIgaG91ciB0aW1lKSB3aXRob3V0IGxlYWRpbmcgMFxuICAgIC8vIGEvQTogYW0gb3IgcG1cbiAgICBjb25zdCBmbXRIb3VycyA9IFtcIkhIXCIsIFwiSFwiLCBcImhoXCIsIFwiaFwiXTtcbiAgICAvL21tOiAyLWRpZ2l0cyBtaW51dGVzLCBtOiAyLWRpZ2l0cyBtaW51dGVzIHdpdGhvdXQgbGVhZGluZyB6ZXJvXG4gICAgY29uc3QgZm10TWlucyA9IFtcIm1tXCIsIFwibVwiXTtcbiAgICAvLyBzczogMi1kaWdpdHMgc2Vjb25kcywgczogMi1kaWdpdHMgc2Vjb25kcyB3aXRob3V0IGxlYWRpbmcgemVyb1xuICAgIC8vIGNhbiBiZSBlbXB0eVxuICAgIGNvbnN0IGZtdFNlY3MgPSBbXCJzc1wiLCBcInNcIiwgXCJcIl07XG5cbiAgICBsZXQgdGltZUZvcm1hdCA9IFtdO1xuICAgIGZvciAobGV0IGZtdEhvdXIgb2YgZm10SG91cnMpIHtcbiAgICAgICAgZm9yIChsZXQgZm10TWluIG9mIGZtdE1pbnMpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGZtdFNlYyBvZiBmbXRTZWNzKSB7XG4gICAgICAgICAgICAgICAgbGV0IGZtdCA9IGAke2ZtdEhvdXJ9OiR7Zm10TWlufWA7XG4gICAgICAgICAgICAgICAgaWYgKGZtdFNlYyAhPT0gXCJcIikge1xuICAgICAgICAgICAgICAgICAgICBmbXQgKz0gYDoke2ZtdFNlY31gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZm10SG91ci5jb250YWlucyhcImhcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgZm10ICs9IFwiIGFcIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGltZUZvcm1hdC5wdXNoKGZtdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy9jb25zb2xlLmxvZyh0aW1lRm9ybWF0KTtcbiAgICByZXR1cm4gdGltZUZvcm1hdDtcbn1cbmNvbnN0IHRpbWVGb3JtYXQgPSBtYWtlVGltZUZvcm1hdCgpO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF0ZVN0cmluZ0Zyb21JbnB1dFN0cmluZyhcbiAgICBpbnB1dFN0cmluZzogc3RyaW5nLFxuICAgIGRhdGVGb3JtYXRQcmVmaXg6IHN0cmluZyxcbiAgICBkYXRlRm9ybWF0U3VmZml4OiBzdHJpbmdcbikge1xuICAgIGlmICghZGF0ZUZvcm1hdFByZWZpeCAmJiAhZGF0ZUZvcm1hdFN1ZmZpeCkgcmV0dXJuIGlucHV0U3RyaW5nO1xuXG4gICAgbGV0IGRhdGVTdHJpbmcgPSBpbnB1dFN0cmluZztcbiAgICBpZiAoZGF0ZVN0cmluZy5zdGFydHNXaXRoKFwiXlwiKSkge1xuICAgICAgICBkYXRlU3RyaW5nID0gZGF0ZVN0cmluZy5zbGljZSgxKTtcbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2coZGF0ZVN0cmluZyk7XG5cbiAgICBpZiAoZGF0ZUZvcm1hdFByZWZpeCkge1xuICAgICAgICBsZXQgc3RyUmVnZXggPSBcIl4oXCIgKyBkYXRlRm9ybWF0UHJlZml4ICsgXCIpXCI7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHN0clJlZ2V4KTtcbiAgICAgICAgbGV0IHJlZ2V4ID0gbmV3IFJlZ0V4cChzdHJSZWdleCwgXCJnbVwiKTtcbiAgICAgICAgaWYgKHJlZ2V4LnRlc3QoZGF0ZVN0cmluZykpIHtcbiAgICAgICAgICAgIGRhdGVTdHJpbmcgPSBkYXRlU3RyaW5nLnJlcGxhY2UocmVnZXgsIFwiXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIGNvbnNvbGUubG9nKGRhdGVTdHJpbmcpO1xuXG4gICAgaWYgKGRhdGVGb3JtYXRTdWZmaXgpIHtcbiAgICAgICAgbGV0IHN0clJlZ2V4ID0gXCIoXCIgKyBkYXRlRm9ybWF0U3VmZml4ICsgXCIpJFwiO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhzdHJSZWdleCk7XG4gICAgICAgIGxldCByZWdleCA9IG5ldyBSZWdFeHAoc3RyUmVnZXgsIFwiZ21cIik7XG4gICAgICAgIGlmIChyZWdleC50ZXN0KGRhdGVTdHJpbmcpKSB7XG4gICAgICAgICAgICBkYXRlU3RyaW5nID0gZGF0ZVN0cmluZy5yZXBsYWNlKHJlZ2V4LCBcIlwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBjb25zb2xlLmxvZyhkYXRlU3RyaW5nKTtcblxuICAgIHJldHVybiBkYXRlU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RyVG9EYXRlKHN0ckRhdGU6IHN0cmluZywgZGF0ZUZvcm1hdDogc3RyaW5nKTogTW9tZW50IHtcbiAgICBsZXQgZm9ybWF0OiBhbnkgPSBkYXRlRm9ybWF0O1xuXG4gICAgaWYgKFxuICAgICAgICBzdHJEYXRlLmxlbmd0aCA+IDQgJiZcbiAgICAgICAgc3RyRGF0ZS5zdGFydHNXaXRoKFwiW1tcIikgJiZcbiAgICAgICAgc3RyRGF0ZS5lbmRzV2l0aChcIl1dXCIpXG4gICAgKSB7XG4gICAgICAgIHN0ckRhdGUgPSBzdHJEYXRlLnN1YnN0cmluZygyLCBzdHJEYXRlLmxlbmd0aCAtIDIpO1xuICAgIH1cblxuICAgIGlmIChkYXRlRm9ybWF0LnRvTG93ZXJDYXNlKCkgPT09IFwiaXNvLTg2MDFcIikge1xuICAgICAgICBmb3JtYXQgPSB3aW5kb3cubW9tZW50LklTT184NjAxO1xuICAgIH1cblxuICAgIGxldCBkYXRlID0gd2luZG93Lm1vbWVudChzdHJEYXRlLCBmb3JtYXQsIHRydWUpO1xuXG4gICAgLy8gc3RpcCB0aW1lXG4gICAgZGF0ZSA9IGRhdGUuc3RhcnRPZihcImRheVwiKTtcblxuICAgIHJldHVybiBkYXRlO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0VmFsdWVGcm9tRHVyYXRpb25TdHJpbmcoXG4gICAgc3RyRHVyYXRpb246IHN0cmluZyxcbiAgICB1bml0czogQXJyYXk8c3RyaW5nPixcbiAgICByZW1vdmVQYXR0ZXJuOiBib29sZWFuID0gdHJ1ZVxuKTogW251bWJlciwgc3RyaW5nXSB7XG4gICAgaWYgKCFzdHJEdXJhdGlvbiB8fCAhdW5pdHMgfHwgdW5pdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBbbnVsbCwgc3RyRHVyYXRpb25dO1xuICAgIH1cblxuICAgIGxldCB2YWx1ZSA9IG51bGw7XG4gICAgY29uc3Qgc3RyUmVnZXggPSBcIl4oPzx2YWx1ZT5bMC05XSspKFwiICsgdW5pdHMuam9pbihcInxcIikgKyBcIikkXCI7XG4gICAgLy8gY29uc29sZS5sb2coc3RyUmVnZXgpO1xuICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChzdHJSZWdleCwgXCJnbVwiKTtcbiAgICBsZXQgbWF0Y2ggPSByZWdleC5leGVjKHN0ckR1cmF0aW9uKTtcbiAgICBpZiAoXG4gICAgICAgIG1hdGNoICYmXG4gICAgICAgIHR5cGVvZiBtYXRjaC5ncm91cHMgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICAgICAgdHlwZW9mIG1hdGNoLmdyb3Vwcy52YWx1ZSAhPT0gXCJ1bmRlZmluZWRcIlxuICAgICkge1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhtYXRjaCk7XG4gICAgICAgIHZhbHVlID0gcGFyc2VGbG9hdChtYXRjaC5ncm91cHMudmFsdWUpO1xuICAgICAgICBpZiAoTnVtYmVyLmlzTnVtYmVyKHZhbHVlKSAmJiAhTnVtYmVyLmlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgICAgaWYgKHJlbW92ZVBhdHRlcm4pIHtcbiAgICAgICAgICAgICAgICBzdHJEdXJhdGlvbiA9IHN0ckR1cmF0aW9uLnJlcGxhY2UocmVnZXgsIFwiXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2codmFsdWUpO1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coc3RyRHVyYXRpb24pO1xuICAgICAgICAgICAgcmV0dXJuIFt2YWx1ZSwgc3RyRHVyYXRpb25dO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFtudWxsLCBzdHJEdXJhdGlvbl07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUR1cmF0aW9uU3RyaW5nKHN0ckR1cmF0aW9uOiBzdHJpbmcpIHtcbiAgICAvL2R1cmF0aW9uIHN0cmluZyBmb3JtYXQ6XG4gICAgLy95ZWFyICh5ZWFycywgeSwgWSksXG4gICAgLy9tb250aCAobW9udGhzLCBNKSwgLy8gbSB3aWxsIGNvbmZsaWN0IHdpdGggbWludXRlISEhXG4gICAgLy93ZWVrICh3ZWVrcywgdywgVyksXG4gICAgLy9kYXkgKGRheXMsIGQsIEQpLFxuICAgIC8vaG91ciAoaG91cnMsIGgsIEgpLFxuICAgIC8vbWludXRlIChtaW51dGVzLCBtKSwgLy8gTSB3aWxsIGNvbmZsaWN0IHdpdGggbW9udGghISFcbiAgICAvL3NlY29uZCAoc2Vjb25kcywgcywgUylcbiAgICBpZiAoIXN0ckR1cmF0aW9uKSByZXR1cm4gbnVsbDtcblxuICAgIGxldCBkdXJhdGlvbjogRHVyYXRpb24gPSB3aW5kb3cubW9tZW50LmR1cmF0aW9uKDApO1xuICAgIGxldCBoYXNWYWx1ZSA9IGZhbHNlO1xuXG4gICAgbGV0IG5lZ2F0aXZlVmFsdWUgPSBmYWxzZTtcbiAgICBpZiAoc3RyRHVyYXRpb24uc3RhcnRzV2l0aChcIitcIikpIHtcbiAgICAgICAgbmVnYXRpdmVWYWx1ZSA9IGZhbHNlO1xuICAgICAgICBzdHJEdXJhdGlvbiA9IHN0ckR1cmF0aW9uLnN1YnN0cmluZygxKTtcbiAgICB9XG4gICAgaWYgKHN0ckR1cmF0aW9uLnN0YXJ0c1dpdGgoXCItXCIpKSB7XG4gICAgICAgIG5lZ2F0aXZlVmFsdWUgPSB0cnVlO1xuICAgICAgICBzdHJEdXJhdGlvbiA9IHN0ckR1cmF0aW9uLnN1YnN0cmluZygxKTtcbiAgICB9XG5cbiAgICBsZXQgeWVhclZhbHVlID0gbnVsbDtcbiAgICBbeWVhclZhbHVlLCBzdHJEdXJhdGlvbl0gPSBleHRyYWN0VmFsdWVGcm9tRHVyYXRpb25TdHJpbmcoc3RyRHVyYXRpb24sIFtcbiAgICAgICAgXCJ5ZWFyXCIsXG4gICAgICAgIFwieWVhcnNcIixcbiAgICAgICAgXCJZXCIsXG4gICAgICAgIFwieVwiLFxuICAgIF0pO1xuICAgIGlmICh5ZWFyVmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKG5lZ2F0aXZlVmFsdWUpIHtcbiAgICAgICAgICAgIHllYXJWYWx1ZSAqPSAtMTtcbiAgICAgICAgfVxuICAgICAgICBkdXJhdGlvbi5hZGQoeWVhclZhbHVlLCBcInllYXJzXCIpO1xuICAgICAgICBoYXNWYWx1ZSA9IHRydWU7XG4gICAgfVxuXG4gICAgbGV0IG1vbnRoVmFsdWUgPSBudWxsO1xuICAgIFttb250aFZhbHVlLCBzdHJEdXJhdGlvbl0gPSBleHRyYWN0VmFsdWVGcm9tRHVyYXRpb25TdHJpbmcoc3RyRHVyYXRpb24sIFtcbiAgICAgICAgXCJtb250aFwiLFxuICAgICAgICBcIm1vbnRoc1wiLFxuICAgICAgICBcIk1cIixcbiAgICBdKTtcbiAgICBpZiAobW9udGhWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICBpZiAobmVnYXRpdmVWYWx1ZSkge1xuICAgICAgICAgICAgbW9udGhWYWx1ZSAqPSAtMTtcbiAgICAgICAgfVxuICAgICAgICBkdXJhdGlvbi5hZGQobW9udGhWYWx1ZSwgXCJtb250aHNcIik7XG4gICAgICAgIGhhc1ZhbHVlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBsZXQgd2Vla1ZhbHVlID0gbnVsbDtcbiAgICBbd2Vla1ZhbHVlLCBzdHJEdXJhdGlvbl0gPSBleHRyYWN0VmFsdWVGcm9tRHVyYXRpb25TdHJpbmcoc3RyRHVyYXRpb24sIFtcbiAgICAgICAgXCJ3ZWVrXCIsXG4gICAgICAgIFwid2Vla3NcIixcbiAgICAgICAgXCJXXCIsXG4gICAgICAgIFwid1wiLFxuICAgIF0pO1xuICAgIGlmICh3ZWVrVmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKG5lZ2F0aXZlVmFsdWUpIHtcbiAgICAgICAgICAgIHdlZWtWYWx1ZSAqPSAtMTtcbiAgICAgICAgfVxuICAgICAgICBkdXJhdGlvbi5hZGQod2Vla1ZhbHVlLCBcIndlZWtzXCIpO1xuICAgICAgICBoYXNWYWx1ZSA9IHRydWU7XG4gICAgfVxuXG4gICAgbGV0IGRheVZhbHVlID0gbnVsbDtcbiAgICBbZGF5VmFsdWUsIHN0ckR1cmF0aW9uXSA9IGV4dHJhY3RWYWx1ZUZyb21EdXJhdGlvblN0cmluZyhzdHJEdXJhdGlvbiwgW1xuICAgICAgICBcImRheVwiLFxuICAgICAgICBcImRheXNcIixcbiAgICAgICAgXCJEXCIsXG4gICAgICAgIFwiZFwiLFxuICAgIF0pO1xuICAgIGlmIChkYXlWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICBpZiAobmVnYXRpdmVWYWx1ZSkge1xuICAgICAgICAgICAgZGF5VmFsdWUgKj0gLTE7XG4gICAgICAgIH1cbiAgICAgICAgZHVyYXRpb24uYWRkKGRheVZhbHVlLCBcImRheXNcIik7XG4gICAgICAgIGhhc1ZhbHVlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBsZXQgaG91clZhbHVlID0gbnVsbDtcbiAgICBbaG91clZhbHVlLCBzdHJEdXJhdGlvbl0gPSBleHRyYWN0VmFsdWVGcm9tRHVyYXRpb25TdHJpbmcoc3RyRHVyYXRpb24sIFtcbiAgICAgICAgXCJob3VyXCIsXG4gICAgICAgIFwiaG91cnNcIixcbiAgICAgICAgXCJIXCIsXG4gICAgICAgIFwiaFwiLFxuICAgIF0pO1xuICAgIGlmIChob3VyVmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKG5lZ2F0aXZlVmFsdWUpIHtcbiAgICAgICAgICAgIGhvdXJWYWx1ZSAqPSAtMTtcbiAgICAgICAgfVxuICAgICAgICBkdXJhdGlvbi5hZGQoaG91clZhbHVlLCBcImhvdXJzXCIpO1xuICAgICAgICBoYXNWYWx1ZSA9IHRydWU7XG4gICAgfVxuXG4gICAgbGV0IG1pbnV0ZVZhbHVlID0gbnVsbDtcbiAgICBbbWludXRlVmFsdWUsIHN0ckR1cmF0aW9uXSA9IGV4dHJhY3RWYWx1ZUZyb21EdXJhdGlvblN0cmluZyhzdHJEdXJhdGlvbiwgW1xuICAgICAgICBcIm1pbnV0ZVwiLFxuICAgICAgICBcIm1pbnV0ZXNcIixcbiAgICAgICAgXCJtXCIsXG4gICAgXSk7XG4gICAgaWYgKG1pbnV0ZVZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChuZWdhdGl2ZVZhbHVlKSB7XG4gICAgICAgICAgICBtaW51dGVWYWx1ZSAqPSAtMTtcbiAgICAgICAgfVxuICAgICAgICBkdXJhdGlvbi5hZGQobWludXRlVmFsdWUsIFwibWludXRlc1wiKTtcbiAgICAgICAgaGFzVmFsdWUgPSB0cnVlO1xuICAgIH1cblxuICAgIGxldCBzZWNvbmRWYWx1ZSA9IG51bGw7XG4gICAgW3NlY29uZFZhbHVlLCBzdHJEdXJhdGlvbl0gPSBleHRyYWN0VmFsdWVGcm9tRHVyYXRpb25TdHJpbmcoc3RyRHVyYXRpb24sIFtcbiAgICAgICAgXCJzZWNvbmRcIixcbiAgICAgICAgXCJzZWNvbmRzXCIsXG4gICAgICAgIFwiU1wiLFxuICAgICAgICBcInNcIixcbiAgICBdKTtcbiAgICBpZiAoc2Vjb25kVmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKG5lZ2F0aXZlVmFsdWUpIHtcbiAgICAgICAgICAgIHNlY29uZFZhbHVlICo9IC0xO1xuICAgICAgICB9XG4gICAgICAgIGR1cmF0aW9uLmFkZChzZWNvbmRWYWx1ZSwgXCJzZWNvbmRzXCIpO1xuICAgICAgICBoYXNWYWx1ZSA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCFoYXNWYWx1ZSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIGR1cmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF0ZUJ5RHVyYXRpb25Ub1RvZGF5KFxuICAgIHJlbERhdGVTdHJpbmc6IHN0cmluZyxcbiAgICBkYXRlRm9ybWF0OiBzdHJpbmdcbik6IE1vbWVudCB7XG4gICAgbGV0IGRhdGUgPSBudWxsO1xuICAgIGxldCBkdXJhdGlvbiA9IHBhcnNlRHVyYXRpb25TdHJpbmcocmVsRGF0ZVN0cmluZyk7XG4gICAgaWYgKGR1cmF0aW9uICYmIHdpbmRvdy5tb21lbnQuaXNEdXJhdGlvbihkdXJhdGlvbikpIHtcbiAgICAgICAgZGF0ZSA9IGdldERhdGVUb2RheShkYXRlRm9ybWF0KTtcbiAgICAgICAgZGF0ZSA9IGRhdGUuYWRkKGR1cmF0aW9uKTtcblxuICAgICAgICBpZiAoZGF0ZSAmJiBkYXRlLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGF0ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRhdGVUb1N0cihkYXRlOiBNb21lbnQsIGRhdGVGb3JtYXQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKHR5cGVvZiBkYXRlID09PSBcInVuZGVmaW5lZFwiIHx8IGRhdGUgPT09IG51bGwpIHJldHVybiBudWxsO1xuXG4gICAgaWYgKGRhdGVGb3JtYXQudG9Mb3dlckNhc2UoKSA9PT0gXCJpc28tODYwMVwiKSB7XG4gICAgICAgIHJldHVybiBkYXRlLmZvcm1hdCgpO1xuICAgIH1cbiAgICByZXR1cm4gZGF0ZS5mb3JtYXQoZGF0ZUZvcm1hdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREYXRlRnJvbVVuaXhUaW1lKFxuICAgIHVuaXhUaW1lOiBudW1iZXIsXG4gICAgZGF0ZUZvcm1hdDogc3RyaW5nXG4pOiBNb21lbnQge1xuICAgIGxldCBkYXRlID0gd2luZG93Lm1vbWVudCh1bml4VGltZSk7XG4gICAgbGV0IHN0ckRhdGUgPSBkYXRlVG9TdHIoZGF0ZSwgZGF0ZUZvcm1hdCk7XG4gICAgcmV0dXJuIHN0clRvRGF0ZShzdHJEYXRlLCBkYXRlRm9ybWF0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERhdGVUb2RheShkYXRlRm9ybWF0OiBzdHJpbmcpIHtcbiAgICBsZXQgdG9kYXkgPSB3aW5kb3cubW9tZW50KCk7XG4gICAgbGV0IHN0clRvZGF5ID0gZGF0ZVRvU3RyKHRvZGF5LCBkYXRlRm9ybWF0KTtcbiAgICByZXR1cm4gc3RyVG9EYXRlKHN0clRvZGF5LCBkYXRlRm9ybWF0KTtcbn1cblxuLy8gaHR0cDovL2pzZmlkZGxlLm5ldC9hbG5pdGFrL2hFc3lzL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZXBWYWx1ZShvYmo6IGFueSwgc3RyOiBzdHJpbmcpIHtcbiAgICBzdHIgPSBzdHIucmVwbGFjZSgvXlxcLi8sIFwiXCIpO1xuICAgIHZhciBhID0gc3RyLnNwbGl0KFwiLlwiKTtcbiAgICBmb3IgKHZhciBpID0gMCwgbiA9IGEubGVuZ3RoOyBpIDwgbjsgKytpKSB7XG4gICAgICAgIHZhciBrID0gYVtpXTtcbiAgICAgICAgaWYgKGsgaW4gb2JqKSB7XG4gICAgICAgICAgICBvYmogPSBvYmpba107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gXCJzdHJpbmdcIiB8fCBBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBvYmogPT09IFwibnVtYmVyXCIgfHwgdHlwZW9mIG9iaiA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgcmV0dXJuIG9iai50b1N0cmluZygpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn1cblxuLy8gU3RyaW5nIGhlbHBlcnNcbmV4cG9ydCBmdW5jdGlvbiB0cmltQnlDaGFyKHN0cjogc3RyaW5nLCBjaGFyOiBzdHJpbmcpIHtcbiAgICBjb25zdCBhcnIgPSBBcnJheS5mcm9tKHN0cik7XG4gICAgY29uc3QgZmlyc3QgPSBhcnIuZmluZEluZGV4KChjKSA9PiBjICE9PSBjaGFyKTtcbiAgICBjb25zdCBsYXN0ID0gYXJyLnJldmVyc2UoKS5maW5kSW5kZXgoKGMpID0+IGMgIT09IGNoYXIpO1xuICAgIHJldHVybiBmaXJzdCA9PT0gLTEgJiYgbGFzdCA9PT0gLTFcbiAgICAgICAgPyBzdHJcbiAgICAgICAgOiBzdHIuc3Vic3RyaW5nKGZpcnN0LCBzdHIubGVuZ3RoIC0gbGFzdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlSW1nVGFnQnlBbHQoaW5wdXQ6IHN0cmluZykge1xuICAgIGlmIChpbnB1dCA9PT0gbnVsbCkgcmV0dXJuIG51bGw7XG5cbiAgICAvLyA8aW1nW14+XSo/YWx0XFxzKj1cXHMqW1wiXCInXT8oPzxlbW9qaT5bXidcIlwiID5dKz8pWyAnXCJcIl1bXj5dKj8+XG4gICAgbGV0IHN0clJlZ2V4ID1cbiAgICAgICAgJzxpbWdbXj5dKj9hbHRcXFxccyo9XFxcXHMqW1wiXCJcXCddPyg/PGVtb2ppPlteXFwnXCJcIiA+XSs/KVsgXFwnXCJcIl1bXj5dKj8+JztcbiAgICAvLyBjb25zb2xlLmxvZyhzdHJSZWdleCk7XG4gICAgbGV0IHJlZ2V4ID0gbmV3IFJlZ0V4cChzdHJSZWdleCwgXCJnXCIpO1xuXG4gICAgbGV0IG91dHB1dCA9IGlucHV0LnJlcGxhY2UocmVnZXgsICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGxldCBncm91cHMgPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV07XG4gICAgICAgIGlmIChncm91cHMgJiYgZ3JvdXBzLmVtb2ppKSB7XG4gICAgICAgICAgICByZXR1cm4gZ3JvdXBzLmVtb2ppLnRyaW0oKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICB9KTtcblxuICAgIHJldHVybiBvdXRwdXQ7XG59XG4vLyBQYXJzaW5nXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VGbG9hdEZyb21BbnkoXG4gICAgdG9QYXJzZTogYW55LFxuICAgIHRleHRWYWx1ZU1hcDogVGV4dFZhbHVlTWFwID0gbnVsbFxuKSB7XG4gICAgLy8gY29uc29sZS5sb2coXCJwYXJzZUZsb2F0RnJvbUFueVwiKTtcbiAgICAvLyBjb25zb2xlLmxvZyh0b1BhcnNlKTtcblxuICAgIGxldCB2YWx1ZSA9IG51bGw7XG4gICAgbGV0IHZhbHVlVHlwZSA9IFZhbHVlVHlwZS5OdW1iZXI7XG4gICAgaWYgKHR5cGVvZiB0b1BhcnNlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIC8vIHRpbWUgdmFsdWVcbiAgICAgICAgaWYgKHRvUGFyc2UuaW5jbHVkZXMoXCI6XCIpKSB7XG4gICAgICAgICAgICBsZXQgbmVnYXRpdmVWYWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKHRvUGFyc2Uuc3RhcnRzV2l0aChcIi1cIikpIHtcbiAgICAgICAgICAgICAgICBuZWdhdGl2ZVZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0b1BhcnNlID0gdG9QYXJzZS5zdWJzdHJpbmcoMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgdGltZVZhbHVlID0gd2luZG93Lm1vbWVudCh0b1BhcnNlLCB0aW1lRm9ybWF0LCB0cnVlKTtcbiAgICAgICAgICAgIGlmICh0aW1lVmFsdWUuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB0aW1lVmFsdWUuZGlmZihcbiAgICAgICAgICAgICAgICAgICAgd2luZG93Lm1vbWVudChcIjAwOjAwXCIsIFwiSEg6bW1cIiwgdHJ1ZSksXG4gICAgICAgICAgICAgICAgICAgIFwic2Vjb25kc1wiXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpZiAobmVnYXRpdmVWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IC0xICogdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhbHVlVHlwZSA9IFZhbHVlVHlwZS5UaW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRleHRWYWx1ZU1hcCkge1xuICAgICAgICAgICAgICAgIGxldCBhbnlNYXRjaCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh0ZXh0VmFsdWVNYXApIGFzIEFycmF5PGtleW9mIHN0cmluZz47XG4gICAgICAgICAgICAgICAgZm9yIChsZXQga2V5IG9mIGtleXMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBrZXkgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZWdleCA9IG5ldyBSZWdFeHAoa2V5LCBcImdtXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2codG9QYXJzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnZXgudGVzdCh0b1BhcnNlKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlci5pc051bWJlcih0ZXh0VmFsdWVNYXBba2V5XSlcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzdHJSZXBsYWNlZFZhbHVlID0gdGV4dFZhbHVlTWFwW2tleV0udG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b1BhcnNlID0gdG9QYXJzZS5yZXBsYWNlKHJlZ2V4LCBzdHJSZXBsYWNlZFZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyh0b1BhcnNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlNYXRjaCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHBhcnNlRmxvYXQodG9QYXJzZSk7XG4gICAgICAgICAgICAgICAgaWYgKE51bWJlci5pc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBwYXJzZUZsb2F0KHRvUGFyc2UpO1xuICAgICAgICAgICAgICAgIGlmIChOdW1iZXIuaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB0b1BhcnNlID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgIHZhbHVlID0gdG9QYXJzZTtcbiAgICB9XG5cbiAgICByZXR1cm4geyB0eXBlOiB2YWx1ZVR5cGUsIHZhbHVlOiB2YWx1ZSB9O1xufVxuXG4vLyBDaGFydCBoZWxwZXJzXG5leHBvcnQgZnVuY3Rpb24gbWVhc3VyZVRleHRTaXplKFxuICAgIHRleHQ6IHN0cmluZyxcbiAgICBzdHlsZUNsYXNzOiBzdHJpbmcgPSBcIlwiLFxuICAgIHJvdGF0ZTogc3RyaW5nID0gXCJcIlxuKTogU2l6ZSB7XG4gICAgdmFyIGNvbnRhaW5lciA9IGQzLnNlbGVjdChcImJvZHlcIikuYXBwZW5kKFwic3ZnXCIpO1xuICAgIGxldCB0ZXh0QmxvY2sgPSBjb250YWluZXJcbiAgICAgICAgLmFwcGVuZChcInRleHRcIilcbiAgICAgICAgLnRleHQodGV4dClcbiAgICAgICAgLmF0dHIoXCJ4XCIsIC05OTk5OSlcbiAgICAgICAgLmF0dHIoXCJ5XCIsIC05OTk5OSk7XG4gICAgaWYgKHN0eWxlQ2xhc3MpIHtcbiAgICAgICAgdGV4dEJsb2NrLmF0dHIoXCJjbGFzc1wiLCBzdHlsZUNsYXNzKTtcbiAgICB9XG4gICAgaWYgKHJvdGF0ZSkge1xuICAgICAgICB0ZXh0QmxvY2suYXR0cihcInRyYW5zZm9ybVwiLCBcInJvdGF0ZShcIiArIHJvdGF0ZSArIFwiKVwiKTtcbiAgICB9XG4gICAgdmFyIHNpemUgPSBjb250YWluZXIubm9kZSgpLmdldEJCb3goKTtcbiAgICBjb250YWluZXIucmVtb3ZlKCk7XG4gICAgcmV0dXJuIHsgd2lkdGg6IHNpemUud2lkdGgsIGhlaWdodDogc2l6ZS5oZWlnaHQgfTtcbn1cblxuLy8gZG9tXG5leHBvcnQgZnVuY3Rpb24gZXhwYW5kQXJlYShhcmVhOiBhbnksIGFkZFc6IG51bWJlciwgYWRkSDogbnVtYmVyKSB7XG4gICAgbGV0IG9yaVdpZHRoID0gcGFyc2VGbG9hdChhcmVhLmF0dHIoXCJ3aWR0aFwiKSkgfCAwO1xuICAgIGxldCBvcmlIZWlnaHQgPSBwYXJzZUZsb2F0KGFyZWEuYXR0cihcImhlaWdodFwiKSkgfCAwO1xuICAgIGxldCBuZXdXaWR0aCA9IG9yaVdpZHRoICsgYWRkVztcbiAgICBsZXQgbmV3SGVpZ2h0ID0gb3JpSGVpZ2h0ICsgYWRkSDtcbiAgICBhcmVhLmF0dHIoXCJ3aWR0aFwiLCBuZXdXaWR0aCk7XG4gICAgYXJlYS5hdHRyKFwiaGVpZ2h0XCIsIG5ld0hlaWdodCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb3ZlQXJlYShhcmVhOiBhbnksIHNoaWZ0WDogbnVtYmVyLCBzaGlmdFk6IG51bWJlcikge1xuICAgIGxldCB0cmFucyA9IG5ldyBUcmFuc2Zvcm0oYXJlYS5hdHRyKFwidHJhbnNmb3JtXCIpKTtcbiAgICBhcmVhLmF0dHIoXG4gICAgICAgIFwidHJhbnNmb3JtXCIsXG4gICAgICAgIFwidHJhbnNsYXRlKFwiICtcbiAgICAgICAgICAgICh0cmFucy50cmFuc2xhdGVYICsgc2hpZnRYKSArXG4gICAgICAgICAgICBcIixcIiArXG4gICAgICAgICAgICAodHJhbnMudHJhbnNsYXRlWSArIHNoaWZ0WSkgK1xuICAgICAgICAgICAgXCIpXCJcbiAgICApO1xufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gY2xlYW5UZXh0KHRleHQ6IHN0cmluZykge1xuICAgIC8vIFRoYW5rcyB0byB0b3JhbnRpbmVcbiAgICAvLyBjb2RlIHNuaXBwZXQgZnJvbSBodHRwczovL2dpc3QuZ2l0aHViLmNvbS90b3JhbnRpbmUvYWY2MzljYmEzYzMyNzYyNTc2ZDY0YzM0ZWZmYWY2MTRcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC8oXlxcXFxzXFwqKXwoXFxcXHNcXCokKS9naSwgXCJcIik7IC8vIHJlbW92ZSB0aGUgc3RhcnQgYW5kIGVuZCBzcGFjZXMgb2YgdGhlIGdpdmVuIHN0cmluZ1xuICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoL1xcWyBcXF17Mix9L2dpLCBcIiBcIik7IC8vIHJlZHVjZSBtdWx0aXBsZSBzcGFjZXMgdG8gYSBzaW5nbGUgc3BhY2VcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9cXFxcbiAvLCBcIlxcXFxuXCIpOyAvLyBleGNsdWRlIGEgbmV3IGxpbmUgd2l0aCBhIHN0YXJ0IHNwYWNpbmdcbiAgICByZXR1cm4gdGV4dDtcbn1cblxuLy8gVGhhbmtzIHRvIGx1a2VsZXBwYW4gZm9yIHBsdWdpbiAnYmV0dGVyLXdvcmQtY291bnQnXG4vLyBDb2RlIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2x1a2VsZXBwYW4vYmV0dGVyLXdvcmQtY291bnQvYmxvYi9tYXN0ZXIvc3JjL3N0YXRzLnRzXG5leHBvcnQgZnVuY3Rpb24gZ2V0V29yZENvdW50KHRleHQ6IHN0cmluZykge1xuICAgIHRleHQgPSBjbGVhblRleHQodGV4dCk7XG5cbiAgICAvLyBUaGFua3MgdG8gbGlhbWNhbmVcbiAgICB2YXIgc3BhY2VEZWxpbWl0ZWRDaGFycyA9XG4gICAgICAgIC9BLVphLXpcXHUwMEFBXFx1MDBCNVxcdTAwQkFcXHUwMEMwLVxcdTAwRDZcXHUwMEQ4LVxcdTAwRjZcXHUwMEY4LVxcdTAyQzFcXHUwMkM2LVxcdTAyRDFcXHUwMkUwLVxcdTAyRTRcXHUwMkVDXFx1MDJFRVxcdTAzNzAtXFx1MDM3NFxcdTAzNzZcXHUwMzc3XFx1MDM3QS1cXHUwMzdEXFx1MDM3RlxcdTAzODZcXHUwMzg4LVxcdTAzOEFcXHUwMzhDXFx1MDM4RS1cXHUwM0ExXFx1MDNBMy1cXHUwM0Y1XFx1MDNGNy1cXHUwNDgxXFx1MDQ4QS1cXHUwNTJGXFx1MDUzMS1cXHUwNTU2XFx1MDU1OVxcdTA1NjEtXFx1MDU4N1xcdTA1RDAtXFx1MDVFQVxcdTA1RjAtXFx1MDVGMlxcdTA2MjAtXFx1MDY0QVxcdTA2NkVcXHUwNjZGXFx1MDY3MS1cXHUwNkQzXFx1MDZENVxcdTA2RTVcXHUwNkU2XFx1MDZFRVxcdTA2RUZcXHUwNkZBLVxcdTA2RkNcXHUwNkZGXFx1MDcxMFxcdTA3MTItXFx1MDcyRlxcdTA3NEQtXFx1MDdBNVxcdTA3QjFcXHUwN0NBLVxcdTA3RUFcXHUwN0Y0XFx1MDdGNVxcdTA3RkFcXHUwODAwLVxcdTA4MTVcXHUwODFBXFx1MDgyNFxcdTA4MjhcXHUwODQwLVxcdTA4NThcXHUwOEEwLVxcdTA4QjRcXHUwOTA0LVxcdTA5MzlcXHUwOTNEXFx1MDk1MFxcdTA5NTgtXFx1MDk2MVxcdTA5NzEtXFx1MDk4MFxcdTA5ODUtXFx1MDk4Q1xcdTA5OEZcXHUwOTkwXFx1MDk5My1cXHUwOUE4XFx1MDlBQS1cXHUwOUIwXFx1MDlCMlxcdTA5QjYtXFx1MDlCOVxcdTA5QkRcXHUwOUNFXFx1MDlEQ1xcdTA5RERcXHUwOURGLVxcdTA5RTFcXHUwOUYwXFx1MDlGMVxcdTBBMDUtXFx1MEEwQVxcdTBBMEZcXHUwQTEwXFx1MEExMy1cXHUwQTI4XFx1MEEyQS1cXHUwQTMwXFx1MEEzMlxcdTBBMzNcXHUwQTM1XFx1MEEzNlxcdTBBMzhcXHUwQTM5XFx1MEE1OS1cXHUwQTVDXFx1MEE1RVxcdTBBNzItXFx1MEE3NFxcdTBBODUtXFx1MEE4RFxcdTBBOEYtXFx1MEE5MVxcdTBBOTMtXFx1MEFBOFxcdTBBQUEtXFx1MEFCMFxcdTBBQjJcXHUwQUIzXFx1MEFCNS1cXHUwQUI5XFx1MEFCRFxcdTBBRDBcXHUwQUUwXFx1MEFFMVxcdTBBRjlcXHUwQjA1LVxcdTBCMENcXHUwQjBGXFx1MEIxMFxcdTBCMTMtXFx1MEIyOFxcdTBCMkEtXFx1MEIzMFxcdTBCMzJcXHUwQjMzXFx1MEIzNS1cXHUwQjM5XFx1MEIzRFxcdTBCNUNcXHUwQjVEXFx1MEI1Ri1cXHUwQjYxXFx1MEI3MVxcdTBCODNcXHUwQjg1LVxcdTBCOEFcXHUwQjhFLVxcdTBCOTBcXHUwQjkyLVxcdTBCOTVcXHUwQjk5XFx1MEI5QVxcdTBCOUNcXHUwQjlFXFx1MEI5RlxcdTBCQTNcXHUwQkE0XFx1MEJBOC1cXHUwQkFBXFx1MEJBRS1cXHUwQkI5XFx1MEJEMFxcdTBDMDUtXFx1MEMwQ1xcdTBDMEUtXFx1MEMxMFxcdTBDMTItXFx1MEMyOFxcdTBDMkEtXFx1MEMzOVxcdTBDM0RcXHUwQzU4LVxcdTBDNUFcXHUwQzYwXFx1MEM2MVxcdTBDODUtXFx1MEM4Q1xcdTBDOEUtXFx1MEM5MFxcdTBDOTItXFx1MENBOFxcdTBDQUEtXFx1MENCM1xcdTBDQjUtXFx1MENCOVxcdTBDQkRcXHUwQ0RFXFx1MENFMFxcdTBDRTFcXHUwQ0YxXFx1MENGMlxcdTBEMDUtXFx1MEQwQ1xcdTBEMEUtXFx1MEQxMFxcdTBEMTItXFx1MEQzQVxcdTBEM0RcXHUwRDRFXFx1MEQ1Ri1cXHUwRDYxXFx1MEQ3QS1cXHUwRDdGXFx1MEQ4NS1cXHUwRDk2XFx1MEQ5QS1cXHUwREIxXFx1MERCMy1cXHUwREJCXFx1MERCRFxcdTBEQzAtXFx1MERDNlxcdTBFMDEtXFx1MEUzMFxcdTBFMzJcXHUwRTMzXFx1MEU0MC1cXHUwRTQ2XFx1MEU4MVxcdTBFODJcXHUwRTg0XFx1MEU4N1xcdTBFODhcXHUwRThBXFx1MEU4RFxcdTBFOTQtXFx1MEU5N1xcdTBFOTktXFx1MEU5RlxcdTBFQTEtXFx1MEVBM1xcdTBFQTVcXHUwRUE3XFx1MEVBQVxcdTBFQUJcXHUwRUFELVxcdTBFQjBcXHUwRUIyXFx1MEVCM1xcdTBFQkRcXHUwRUMwLVxcdTBFQzRcXHUwRUM2XFx1MEVEQy1cXHUwRURGXFx1MEYwMFxcdTBGNDAtXFx1MEY0N1xcdTBGNDktXFx1MEY2Q1xcdTBGODgtXFx1MEY4Q1xcdTEwMDAtXFx1MTAyQVxcdTEwM0ZcXHUxMDUwLVxcdTEwNTVcXHUxMDVBLVxcdTEwNURcXHUxMDYxXFx1MTA2NVxcdTEwNjZcXHUxMDZFLVxcdTEwNzBcXHUxMDc1LVxcdTEwODFcXHUxMDhFXFx1MTBBMC1cXHUxMEM1XFx1MTBDN1xcdTEwQ0RcXHUxMEQwLVxcdTEwRkFcXHUxMEZDLVxcdTEyNDhcXHUxMjRBLVxcdTEyNERcXHUxMjUwLVxcdTEyNTZcXHUxMjU4XFx1MTI1QS1cXHUxMjVEXFx1MTI2MC1cXHUxMjg4XFx1MTI4QS1cXHUxMjhEXFx1MTI5MC1cXHUxMkIwXFx1MTJCMi1cXHUxMkI1XFx1MTJCOC1cXHUxMkJFXFx1MTJDMFxcdTEyQzItXFx1MTJDNVxcdTEyQzgtXFx1MTJENlxcdTEyRDgtXFx1MTMxMFxcdTEzMTItXFx1MTMxNVxcdTEzMTgtXFx1MTM1QVxcdTEzODAtXFx1MTM4RlxcdTEzQTAtXFx1MTNGNVxcdTEzRjgtXFx1MTNGRFxcdTE0MDEtXFx1MTY2Q1xcdTE2NkYtXFx1MTY3RlxcdTE2ODEtXFx1MTY5QVxcdTE2QTAtXFx1MTZFQVxcdTE2RjEtXFx1MTZGOFxcdTE3MDAtXFx1MTcwQ1xcdTE3MEUtXFx1MTcxMVxcdTE3MjAtXFx1MTczMVxcdTE3NDAtXFx1MTc1MVxcdTE3NjAtXFx1MTc2Q1xcdTE3NkUtXFx1MTc3MFxcdTE3ODAtXFx1MTdCM1xcdTE3RDdcXHUxN0RDXFx1MTgyMC1cXHUxODc3XFx1MTg4MC1cXHUxOEE4XFx1MThBQVxcdTE4QjAtXFx1MThGNVxcdTE5MDAtXFx1MTkxRVxcdTE5NTAtXFx1MTk2RFxcdTE5NzAtXFx1MTk3NFxcdTE5ODAtXFx1MTlBQlxcdTE5QjAtXFx1MTlDOVxcdTFBMDAtXFx1MUExNlxcdTFBMjAtXFx1MUE1NFxcdTFBQTdcXHUxQjA1LVxcdTFCMzNcXHUxQjQ1LVxcdTFCNEJcXHUxQjgzLVxcdTFCQTBcXHUxQkFFXFx1MUJBRlxcdTFCQkEtXFx1MUJFNVxcdTFDMDAtXFx1MUMyM1xcdTFDNEQtXFx1MUM0RlxcdTFDNUEtXFx1MUM3RFxcdTFDRTktXFx1MUNFQ1xcdTFDRUUtXFx1MUNGMVxcdTFDRjVcXHUxQ0Y2XFx1MUQwMC1cXHUxREJGXFx1MUUwMC1cXHUxRjE1XFx1MUYxOC1cXHUxRjFEXFx1MUYyMC1cXHUxRjQ1XFx1MUY0OC1cXHUxRjREXFx1MUY1MC1cXHUxRjU3XFx1MUY1OVxcdTFGNUJcXHUxRjVEXFx1MUY1Ri1cXHUxRjdEXFx1MUY4MC1cXHUxRkI0XFx1MUZCNi1cXHUxRkJDXFx1MUZCRVxcdTFGQzItXFx1MUZDNFxcdTFGQzYtXFx1MUZDQ1xcdTFGRDAtXFx1MUZEM1xcdTFGRDYtXFx1MUZEQlxcdTFGRTAtXFx1MUZFQ1xcdTFGRjItXFx1MUZGNFxcdTFGRjYtXFx1MUZGQ1xcdTIwNzFcXHUyMDdGXFx1MjA5MC1cXHUyMDlDXFx1MjEwMlxcdTIxMDdcXHUyMTBBLVxcdTIxMTNcXHUyMTE1XFx1MjExOS1cXHUyMTFEXFx1MjEyNFxcdTIxMjZcXHUyMTI4XFx1MjEyQS1cXHUyMTJEXFx1MjEyRi1cXHUyMTM5XFx1MjEzQy1cXHUyMTNGXFx1MjE0NS1cXHUyMTQ5XFx1MjE0RVxcdTIxODNcXHUyMTg0XFx1MkMwMC1cXHUyQzJFXFx1MkMzMC1cXHUyQzVFXFx1MkM2MC1cXHUyQ0U0XFx1MkNFQi1cXHUyQ0VFXFx1MkNGMlxcdTJDRjNcXHUyRDAwLVxcdTJEMjVcXHUyRDI3XFx1MkQyRFxcdTJEMzAtXFx1MkQ2N1xcdTJENkZcXHUyRDgwLVxcdTJEOTZcXHUyREEwLVxcdTJEQTZcXHUyREE4LVxcdTJEQUVcXHUyREIwLVxcdTJEQjZcXHUyREI4LVxcdTJEQkVcXHUyREMwLVxcdTJEQzZcXHUyREM4LVxcdTJEQ0VcXHUyREQwLVxcdTJERDZcXHUyREQ4LVxcdTJEREVcXHUyRTJGXFx1MzAwNVxcdTMwMDZcXHUzMDMxLVxcdTMwMzVcXHUzMDNCXFx1MzAzQ1xcdTMxMDUtXFx1MzEyRFxcdTMxMzEtXFx1MzE4RVxcdTMxQTAtXFx1MzFCQVxcdTMxRjAtXFx1MzFGRlxcdTM0MDAtXFx1NERCNVxcdUEwMDAtXFx1QTQ4Q1xcdUE0RDAtXFx1QTRGRFxcdUE1MDAtXFx1QTYwQ1xcdUE2MTAtXFx1QTYxRlxcdUE2MkFcXHVBNjJCXFx1QTY0MC1cXHVBNjZFXFx1QTY3Ri1cXHVBNjlEXFx1QTZBMC1cXHVBNkU1XFx1QTcxNy1cXHVBNzFGXFx1QTcyMi1cXHVBNzg4XFx1QTc4Qi1cXHVBN0FEXFx1QTdCMC1cXHVBN0I3XFx1QTdGNy1cXHVBODAxXFx1QTgwMy1cXHVBODA1XFx1QTgwNy1cXHVBODBBXFx1QTgwQy1cXHVBODIyXFx1QTg0MC1cXHVBODczXFx1QTg4Mi1cXHVBOEIzXFx1QThGMi1cXHVBOEY3XFx1QThGQlxcdUE4RkRcXHVBOTBBLVxcdUE5MjVcXHVBOTMwLVxcdUE5NDZcXHVBOTYwLVxcdUE5N0NcXHVBOTg0LVxcdUE5QjJcXHVBOUNGXFx1QTlFMC1cXHVBOUU0XFx1QTlFNi1cXHVBOUVGXFx1QTlGQS1cXHVBOUZFXFx1QUEwMC1cXHVBQTI4XFx1QUE0MC1cXHVBQTQyXFx1QUE0NC1cXHVBQTRCXFx1QUE2MC1cXHVBQTc2XFx1QUE3QVxcdUFBN0UtXFx1QUFBRlxcdUFBQjFcXHVBQUI1XFx1QUFCNlxcdUFBQjktXFx1QUFCRFxcdUFBQzBcXHVBQUMyXFx1QUFEQi1cXHVBQUREXFx1QUFFMC1cXHVBQUVBXFx1QUFGMi1cXHVBQUY0XFx1QUIwMS1cXHVBQjA2XFx1QUIwOS1cXHVBQjBFXFx1QUIxMS1cXHVBQjE2XFx1QUIyMC1cXHVBQjI2XFx1QUIyOC1cXHVBQjJFXFx1QUIzMC1cXHVBQjVBXFx1QUI1Qy1cXHVBQjY1XFx1QUI3MC1cXHVBQkUyXFx1QUMwMC1cXHVEN0EzXFx1RDdCMC1cXHVEN0M2XFx1RDdDQi1cXHVEN0ZCXFx1RjkwMC1cXHVGQTZEXFx1RkE3MC1cXHVGQUQ5XFx1RkIwMC1cXHVGQjA2XFx1RkIxMy1cXHVGQjE3XFx1RkIxRFxcdUZCMUYtXFx1RkIyOFxcdUZCMkEtXFx1RkIzNlxcdUZCMzgtXFx1RkIzQ1xcdUZCM0VcXHVGQjQwXFx1RkI0MVxcdUZCNDNcXHVGQjQ0XFx1RkI0Ni1cXHVGQkIxXFx1RkJEMy1cXHVGRDNEXFx1RkQ1MC1cXHVGRDhGXFx1RkQ5Mi1cXHVGREM3XFx1RkRGMC1cXHVGREZCXFx1RkU3MC1cXHVGRTc0XFx1RkU3Ni1cXHVGRUZDXFx1RkYyMS1cXHVGRjNBXFx1RkY0MS1cXHVGRjVBXFx1RkY2Ni1cXHVGRkJFXFx1RkZDMi1cXHVGRkM3XFx1RkZDQS1cXHVGRkNGXFx1RkZEMi1cXHVGRkQ3XFx1RkZEQS1cXHVGRkRDL1xuICAgICAgICAgICAgLnNvdXJjZTtcbiAgICB2YXIgbm9uU3BhY2VEZWxpbWl0ZWRXb3JkcyA9XG4gICAgICAgIC9bXFx1MzA0MS1cXHUzMDk2XFx1MzA5RC1cXHUzMDlGXFx1MzBBMS1cXHUzMEZBXFx1MzBGQy1cXHUzMEZGXFx1NEUwMC1cXHU5RkQ1XXsxfS9cbiAgICAgICAgICAgIC5zb3VyY2U7XG4gICAgdmFyIHBhdHRlcm4gPSBuZXcgUmVnRXhwKFxuICAgICAgICBbXG4gICAgICAgICAgICBcIig/OlswLTldKyg/Oig/Oix8XFxcXC4pWzAtOV0rKSp8W1xcXFwtXCIgKyBzcGFjZURlbGltaXRlZENoYXJzICsgXCJdKStcIixcbiAgICAgICAgICAgIG5vblNwYWNlRGVsaW1pdGVkV29yZHMsXG4gICAgICAgIF0uam9pbihcInxcIiksXG4gICAgICAgIFwiZ1wiXG4gICAgKTtcbiAgICByZXR1cm4gKHRleHQubWF0Y2gocGF0dGVybikgfHwgW10pLmxlbmd0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENoYXJhY3RlckNvdW50KHRleHQ6IHN0cmluZykge1xuICAgIHJldHVybiB0ZXh0Lmxlbmd0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbnRlbmNlQ291bnQodGV4dDogc3RyaW5nKSB7XG4gICAgdGV4dCA9IGNsZWFuVGV4dCh0ZXh0KTtcblxuICAgIC8vIFRoYW5rcyB0byBFeHRyYWN0IEhpZ2hsaWdodHMgcGx1Z2luIGFuZCBBbmdlbHVzRG9taW5pXG4gICAgLy8gQWxzbyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy81NTUzNDEwXG4gICAgdmFyIHNlbnRlbmNlcyA9XG4gICAgICAgICh0ZXh0IHx8IFwiXCIpLm1hdGNoKFxuICAgICAgICAgICAgL1teLuOAgiHvvIE/77yfXFxzXVteLuOAgiHvvIE/77yfXSooPzpbLiE/XSg/IVsn4oCY4oCZXCLigJzigJ3jgIzjgI3jgI7jgI9dP1xcc3wkKVteLuOAgiHvvIE/77yfXSopKlsu44CCIe+8gT/vvJ9dP1sn4oCZXCLigJ3jgI3jgI9dPyg/PVxcc3x8JCkvZ21cbiAgICAgICAgKSB8fCBbXTtcbiAgICB2YXIgc2VudGVuY2VzTGVuZ3RoID0gc2VudGVuY2VzLmxlbmd0aDtcbiAgICByZXR1cm4gc2VudGVuY2VzTGVuZ3RoO1xufVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIsIi8qKlxuICogQGltcGxlbWVudHMge0lIb29rc31cbiAqL1xuY2xhc3MgSG9va3Mge1xuXHQvKipcblx0ICogQGNhbGxiYWNrIEhvb2tDYWxsYmFja1xuXHQgKiBAdGhpcyB7KnxKc2VwfSB0aGlzXG5cdCAqIEBwYXJhbSB7SnNlcH0gZW52XG5cdCAqIEByZXR1cm5zOiB2b2lkXG5cdCAqL1xuXHQvKipcblx0ICogQWRkcyB0aGUgZ2l2ZW4gY2FsbGJhY2sgdG8gdGhlIGxpc3Qgb2YgY2FsbGJhY2tzIGZvciB0aGUgZ2l2ZW4gaG9vay5cblx0ICpcblx0ICogVGhlIGNhbGxiYWNrIHdpbGwgYmUgaW52b2tlZCB3aGVuIHRoZSBob29rIGl0IGlzIHJlZ2lzdGVyZWQgZm9yIGlzIHJ1bi5cblx0ICpcblx0ICogT25lIGNhbGxiYWNrIGZ1bmN0aW9uIGNhbiBiZSByZWdpc3RlcmVkIHRvIG11bHRpcGxlIGhvb2tzIGFuZCB0aGUgc2FtZSBob29rIG11bHRpcGxlIHRpbWVzLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ3xvYmplY3R9IG5hbWUgVGhlIG5hbWUgb2YgdGhlIGhvb2ssIG9yIGFuIG9iamVjdCBvZiBjYWxsYmFja3Mga2V5ZWQgYnkgbmFtZVxuXHQgKiBAcGFyYW0ge0hvb2tDYWxsYmFja3xib29sZWFufSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gd2hpY2ggaXMgZ2l2ZW4gZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuXHQgKiBAcGFyYW0gez9ib29sZWFufSBbZmlyc3Q9ZmFsc2VdIFdpbGwgYWRkIHRoZSBob29rIHRvIHRoZSB0b3Agb2YgdGhlIGxpc3QgKGRlZmF1bHRzIHRvIHRoZSBib3R0b20pXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGFkZChuYW1lLCBjYWxsYmFjaywgZmlyc3QpIHtcblx0XHRpZiAodHlwZW9mIGFyZ3VtZW50c1swXSAhPSAnc3RyaW5nJykge1xuXHRcdFx0Ly8gTXVsdGlwbGUgaG9vayBjYWxsYmFja3MsIGtleWVkIGJ5IG5hbWVcblx0XHRcdGZvciAobGV0IG5hbWUgaW4gYXJndW1lbnRzWzBdKSB7XG5cdFx0XHRcdHRoaXMuYWRkKG5hbWUsIGFyZ3VtZW50c1swXVtuYW1lXSwgYXJndW1lbnRzWzFdKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0ZWxzZSB7XG5cdFx0XHQoQXJyYXkuaXNBcnJheShuYW1lKSA/IG5hbWUgOiBbbmFtZV0pLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcblx0XHRcdFx0dGhpc1tuYW1lXSA9IHRoaXNbbmFtZV0gfHwgW107XG5cblx0XHRcdFx0aWYgKGNhbGxiYWNrKSB7XG5cdFx0XHRcdFx0dGhpc1tuYW1lXVtmaXJzdCA/ICd1bnNoaWZ0JyA6ICdwdXNoJ10oY2FsbGJhY2spO1xuXHRcdFx0XHR9XG5cdFx0XHR9LCB0aGlzKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUnVucyBhIGhvb2sgaW52b2tpbmcgYWxsIHJlZ2lzdGVyZWQgY2FsbGJhY2tzIHdpdGggdGhlIGdpdmVuIGVudmlyb25tZW50IHZhcmlhYmxlcy5cblx0ICpcblx0ICogQ2FsbGJhY2tzIHdpbGwgYmUgaW52b2tlZCBzeW5jaHJvbm91c2x5IGFuZCBpbiB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleSB3ZXJlIHJlZ2lzdGVyZWQuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBob29rLlxuXHQgKiBAcGFyYW0ge09iamVjdDxzdHJpbmcsIGFueT59IGVudiBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIG9mIHRoZSBob29rIHBhc3NlZCB0byBhbGwgY2FsbGJhY2tzIHJlZ2lzdGVyZWQuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdHJ1bihuYW1lLCBlbnYpIHtcblx0XHR0aGlzW25hbWVdID0gdGhpc1tuYW1lXSB8fCBbXTtcblx0XHR0aGlzW25hbWVdLmZvckVhY2goZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG5cdFx0XHRjYWxsYmFjay5jYWxsKGVudiAmJiBlbnYuY29udGV4dCA/IGVudi5jb250ZXh0IDogZW52LCBlbnYpO1xuXHRcdH0pO1xuXHR9XG59XG5cbi8qKlxuICogQGltcGxlbWVudHMge0lQbHVnaW5zfVxuICovXG5jbGFzcyBQbHVnaW5zIHtcblx0Y29uc3RydWN0b3IoanNlcCkge1xuXHRcdHRoaXMuanNlcCA9IGpzZXA7XG5cdFx0dGhpcy5yZWdpc3RlcmVkID0ge307XG5cdH1cblxuXHQvKipcblx0ICogQGNhbGxiYWNrIFBsdWdpblNldHVwXG5cdCAqIEB0aGlzIHtKc2VwfSBqc2VwXG5cdCAqIEByZXR1cm5zOiB2b2lkXG5cdCAqL1xuXHQvKipcblx0ICogQWRkcyB0aGUgZ2l2ZW4gcGx1Z2luKHMpIHRvIHRoZSByZWdpc3RyeVxuXHQgKlxuXHQgKiBAcGFyYW0ge29iamVjdH0gcGx1Z2luc1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gcGx1Z2lucy5uYW1lIFRoZSBuYW1lIG9mIHRoZSBwbHVnaW5cblx0ICogQHBhcmFtIHtQbHVnaW5TZXR1cH0gcGx1Z2lucy5pbml0IFRoZSBpbml0IGZ1bmN0aW9uXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdHJlZ2lzdGVyKC4uLnBsdWdpbnMpIHtcblx0XHRwbHVnaW5zLmZvckVhY2goKHBsdWdpbikgPT4ge1xuXHRcdFx0aWYgKHR5cGVvZiBwbHVnaW4gIT09ICdvYmplY3QnIHx8ICFwbHVnaW4ubmFtZSB8fCAhcGx1Z2luLmluaXQpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIEpTRVAgcGx1Z2luIGZvcm1hdCcpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHRoaXMucmVnaXN0ZXJlZFtwbHVnaW4ubmFtZV0pIHtcblx0XHRcdFx0Ly8gYWxyZWFkeSByZWdpc3RlcmVkLiBJZ25vcmUuXG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdHBsdWdpbi5pbml0KHRoaXMuanNlcCk7XG5cdFx0XHR0aGlzLnJlZ2lzdGVyZWRbcGx1Z2luLm5hbWVdID0gcGx1Z2luO1xuXHRcdH0pO1xuXHR9XG59XG5cbi8vICAgICBKYXZhU2NyaXB0IEV4cHJlc3Npb24gUGFyc2VyIChKU0VQKSAxLjMuOFxuXG5jbGFzcyBKc2VwIHtcblx0LyoqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IHZlcnNpb24oKSB7XG5cdFx0Ly8gVG8gYmUgZmlsbGVkIGluIGJ5IHRoZSB0ZW1wbGF0ZVxuXHRcdHJldHVybiAnMS4zLjgnO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgdG9TdHJpbmcoKSB7XG5cdFx0cmV0dXJuICdKYXZhU2NyaXB0IEV4cHJlc3Npb24gUGFyc2VyIChKU0VQKSB2JyArIEpzZXAudmVyc2lvbjtcblx0fTtcblxuXHQvLyA9PT09PT09PT09PT09PT09PT09PSBDT05GSUcgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblx0LyoqXG5cdCAqIEBtZXRob2QgYWRkVW5hcnlPcFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gb3BfbmFtZSBUaGUgbmFtZSBvZiB0aGUgdW5hcnkgb3AgdG8gYWRkXG5cdCAqIEByZXR1cm5zIHtKc2VwfVxuXHQgKi9cblx0c3RhdGljIGFkZFVuYXJ5T3Aob3BfbmFtZSkge1xuXHRcdEpzZXAubWF4X3Vub3BfbGVuID0gTWF0aC5tYXgob3BfbmFtZS5sZW5ndGgsIEpzZXAubWF4X3Vub3BfbGVuKTtcblx0XHRKc2VwLnVuYXJ5X29wc1tvcF9uYW1lXSA9IDE7XG5cdFx0cmV0dXJuIEpzZXA7XG5cdH1cblxuXHQvKipcblx0ICogQG1ldGhvZCBqc2VwLmFkZEJpbmFyeU9wXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBvcF9uYW1lIFRoZSBuYW1lIG9mIHRoZSBiaW5hcnkgb3AgdG8gYWRkXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSBwcmVjZWRlbmNlIFRoZSBwcmVjZWRlbmNlIG9mIHRoZSBiaW5hcnkgb3AgKGNhbiBiZSBhIGZsb2F0KS4gSGlnaGVyIG51bWJlciA9IGhpZ2hlciBwcmVjZWRlbmNlXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzUmlnaHRBc3NvY2lhdGl2ZT1mYWxzZV0gd2hldGhlciBvcGVyYXRvciBpcyByaWdodC1hc3NvY2lhdGl2ZVxuXHQgKiBAcmV0dXJucyB7SnNlcH1cblx0ICovXG5cdHN0YXRpYyBhZGRCaW5hcnlPcChvcF9uYW1lLCBwcmVjZWRlbmNlLCBpc1JpZ2h0QXNzb2NpYXRpdmUpIHtcblx0XHRKc2VwLm1heF9iaW5vcF9sZW4gPSBNYXRoLm1heChvcF9uYW1lLmxlbmd0aCwgSnNlcC5tYXhfYmlub3BfbGVuKTtcblx0XHRKc2VwLmJpbmFyeV9vcHNbb3BfbmFtZV0gPSBwcmVjZWRlbmNlO1xuXHRcdGlmIChpc1JpZ2h0QXNzb2NpYXRpdmUpIHtcblx0XHRcdEpzZXAucmlnaHRfYXNzb2NpYXRpdmUuYWRkKG9wX25hbWUpO1xuXHRcdH1cblx0XHRlbHNlIHtcblx0XHRcdEpzZXAucmlnaHRfYXNzb2NpYXRpdmUuZGVsZXRlKG9wX25hbWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gSnNlcDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAbWV0aG9kIGFkZElkZW50aWZpZXJDaGFyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBjaGFyIFRoZSBhZGRpdGlvbmFsIGNoYXJhY3RlciB0byB0cmVhdCBhcyBhIHZhbGlkIHBhcnQgb2YgYW4gaWRlbnRpZmllclxuXHQgKiBAcmV0dXJucyB7SnNlcH1cblx0ICovXG5cdHN0YXRpYyBhZGRJZGVudGlmaWVyQ2hhcihjaGFyKSB7XG5cdFx0SnNlcC5hZGRpdGlvbmFsX2lkZW50aWZpZXJfY2hhcnMuYWRkKGNoYXIpO1xuXHRcdHJldHVybiBKc2VwO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBtZXRob2QgYWRkTGl0ZXJhbFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbGl0ZXJhbF9uYW1lIFRoZSBuYW1lIG9mIHRoZSBsaXRlcmFsIHRvIGFkZFxuXHQgKiBAcGFyYW0geyp9IGxpdGVyYWxfdmFsdWUgVGhlIHZhbHVlIG9mIHRoZSBsaXRlcmFsXG5cdCAqIEByZXR1cm5zIHtKc2VwfVxuXHQgKi9cblx0c3RhdGljIGFkZExpdGVyYWwobGl0ZXJhbF9uYW1lLCBsaXRlcmFsX3ZhbHVlKSB7XG5cdFx0SnNlcC5saXRlcmFsc1tsaXRlcmFsX25hbWVdID0gbGl0ZXJhbF92YWx1ZTtcblx0XHRyZXR1cm4gSnNlcDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAbWV0aG9kIHJlbW92ZVVuYXJ5T3Bcblx0ICogQHBhcmFtIHtzdHJpbmd9IG9wX25hbWUgVGhlIG5hbWUgb2YgdGhlIHVuYXJ5IG9wIHRvIHJlbW92ZVxuXHQgKiBAcmV0dXJucyB7SnNlcH1cblx0ICovXG5cdHN0YXRpYyByZW1vdmVVbmFyeU9wKG9wX25hbWUpIHtcblx0XHRkZWxldGUgSnNlcC51bmFyeV9vcHNbb3BfbmFtZV07XG5cdFx0aWYgKG9wX25hbWUubGVuZ3RoID09PSBKc2VwLm1heF91bm9wX2xlbikge1xuXHRcdFx0SnNlcC5tYXhfdW5vcF9sZW4gPSBKc2VwLmdldE1heEtleUxlbihKc2VwLnVuYXJ5X29wcyk7XG5cdFx0fVxuXHRcdHJldHVybiBKc2VwO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBtZXRob2QgcmVtb3ZlQWxsVW5hcnlPcHNcblx0ICogQHJldHVybnMge0pzZXB9XG5cdCAqL1xuXHRzdGF0aWMgcmVtb3ZlQWxsVW5hcnlPcHMoKSB7XG5cdFx0SnNlcC51bmFyeV9vcHMgPSB7fTtcblx0XHRKc2VwLm1heF91bm9wX2xlbiA9IDA7XG5cblx0XHRyZXR1cm4gSnNlcDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAbWV0aG9kIHJlbW92ZUlkZW50aWZpZXJDaGFyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBjaGFyIFRoZSBhZGRpdGlvbmFsIGNoYXJhY3RlciB0byBzdG9wIHRyZWF0aW5nIGFzIGEgdmFsaWQgcGFydCBvZiBhbiBpZGVudGlmaWVyXG5cdCAqIEByZXR1cm5zIHtKc2VwfVxuXHQgKi9cblx0c3RhdGljIHJlbW92ZUlkZW50aWZpZXJDaGFyKGNoYXIpIHtcblx0XHRKc2VwLmFkZGl0aW9uYWxfaWRlbnRpZmllcl9jaGFycy5kZWxldGUoY2hhcik7XG5cdFx0cmV0dXJuIEpzZXA7XG5cdH1cblxuXHQvKipcblx0ICogQG1ldGhvZCByZW1vdmVCaW5hcnlPcFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gb3BfbmFtZSBUaGUgbmFtZSBvZiB0aGUgYmluYXJ5IG9wIHRvIHJlbW92ZVxuXHQgKiBAcmV0dXJucyB7SnNlcH1cblx0ICovXG5cdHN0YXRpYyByZW1vdmVCaW5hcnlPcChvcF9uYW1lKSB7XG5cdFx0ZGVsZXRlIEpzZXAuYmluYXJ5X29wc1tvcF9uYW1lXTtcblxuXHRcdGlmIChvcF9uYW1lLmxlbmd0aCA9PT0gSnNlcC5tYXhfYmlub3BfbGVuKSB7XG5cdFx0XHRKc2VwLm1heF9iaW5vcF9sZW4gPSBKc2VwLmdldE1heEtleUxlbihKc2VwLmJpbmFyeV9vcHMpO1xuXHRcdH1cblx0XHRKc2VwLnJpZ2h0X2Fzc29jaWF0aXZlLmRlbGV0ZShvcF9uYW1lKTtcblxuXHRcdHJldHVybiBKc2VwO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBtZXRob2QgcmVtb3ZlQWxsQmluYXJ5T3BzXG5cdCAqIEByZXR1cm5zIHtKc2VwfVxuXHQgKi9cblx0c3RhdGljIHJlbW92ZUFsbEJpbmFyeU9wcygpIHtcblx0XHRKc2VwLmJpbmFyeV9vcHMgPSB7fTtcblx0XHRKc2VwLm1heF9iaW5vcF9sZW4gPSAwO1xuXG5cdFx0cmV0dXJuIEpzZXA7XG5cdH1cblxuXHQvKipcblx0ICogQG1ldGhvZCByZW1vdmVMaXRlcmFsXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBsaXRlcmFsX25hbWUgVGhlIG5hbWUgb2YgdGhlIGxpdGVyYWwgdG8gcmVtb3ZlXG5cdCAqIEByZXR1cm5zIHtKc2VwfVxuXHQgKi9cblx0c3RhdGljIHJlbW92ZUxpdGVyYWwobGl0ZXJhbF9uYW1lKSB7XG5cdFx0ZGVsZXRlIEpzZXAubGl0ZXJhbHNbbGl0ZXJhbF9uYW1lXTtcblx0XHRyZXR1cm4gSnNlcDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAbWV0aG9kIHJlbW92ZUFsbExpdGVyYWxzXG5cdCAqIEByZXR1cm5zIHtKc2VwfVxuXHQgKi9cblx0c3RhdGljIHJlbW92ZUFsbExpdGVyYWxzKCkge1xuXHRcdEpzZXAubGl0ZXJhbHMgPSB7fTtcblxuXHRcdHJldHVybiBKc2VwO1xuXHR9XG5cdC8vID09PT09PT09PT09PT09PT09PT09IEVORCBDT05GSUcgPT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRnZXQgY2hhcigpIHtcblx0XHRyZXR1cm4gdGhpcy5leHByLmNoYXJBdCh0aGlzLmluZGV4KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7bnVtYmVyfVxuXHQgKi9cblx0Z2V0IGNvZGUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZXhwci5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpO1xuXHR9O1xuXG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBleHByIGEgc3RyaW5nIHdpdGggdGhlIHBhc3NlZCBpbiBleHByZXNzXG5cdCAqIEByZXR1cm5zIEpzZXBcblx0ICovXG5cdGNvbnN0cnVjdG9yKGV4cHIpIHtcblx0XHQvLyBgaW5kZXhgIHN0b3JlcyB0aGUgY2hhcmFjdGVyIG51bWJlciB3ZSBhcmUgY3VycmVudGx5IGF0XG5cdFx0Ly8gQWxsIG9mIHRoZSBnb2JibGVzIGJlbG93IHdpbGwgbW9kaWZ5IGBpbmRleGAgYXMgd2UgbW92ZSBhbG9uZ1xuXHRcdHRoaXMuZXhwciA9IGV4cHI7XG5cdFx0dGhpcy5pbmRleCA9IDA7XG5cdH1cblxuXHQvKipcblx0ICogc3RhdGljIHRvcC1sZXZlbCBwYXJzZXJcblx0ICogQHJldHVybnMge2pzZXAuRXhwcmVzc2lvbn1cblx0ICovXG5cdHN0YXRpYyBwYXJzZShleHByKSB7XG5cdFx0cmV0dXJuIChuZXcgSnNlcChleHByKSkucGFyc2UoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGxvbmdlc3Qga2V5IGxlbmd0aCBvZiBhbnkgb2JqZWN0XG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvYmpcblx0ICogQHJldHVybnMge251bWJlcn1cblx0ICovXG5cdHN0YXRpYyBnZXRNYXhLZXlMZW4ob2JqKSB7XG5cdFx0cmV0dXJuIE1hdGgubWF4KDAsIC4uLk9iamVjdC5rZXlzKG9iaikubWFwKGsgPT4gay5sZW5ndGgpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBgY2hgIGlzIGEgY2hhcmFjdGVyIGNvZGUgaW4gdGhlIG5leHQgdGhyZWUgZnVuY3Rpb25zXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSBjaFxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdHN0YXRpYyBpc0RlY2ltYWxEaWdpdChjaCkge1xuXHRcdHJldHVybiAoY2ggPj0gNDggJiYgY2ggPD0gNTcpOyAvLyAwLi4uOVxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIHByZWNlZGVuY2Ugb2YgYSBiaW5hcnkgb3BlcmF0b3Igb3IgYDBgIGlmIGl0IGlzbid0IGEgYmluYXJ5IG9wZXJhdG9yLiBDYW4gYmUgZmxvYXQuXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBvcF92YWxcblx0ICogQHJldHVybnMge251bWJlcn1cblx0ICovXG5cdHN0YXRpYyBiaW5hcnlQcmVjZWRlbmNlKG9wX3ZhbCkge1xuXHRcdHJldHVybiBKc2VwLmJpbmFyeV9vcHNbb3BfdmFsXSB8fCAwO1xuXHR9XG5cblx0LyoqXG5cdCAqIExvb2tzIGZvciBzdGFydCBvZiBpZGVudGlmaWVyXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSBjaFxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdHN0YXRpYyBpc0lkZW50aWZpZXJTdGFydChjaCkge1xuXHRcdHJldHVybiAgKGNoID49IDY1ICYmIGNoIDw9IDkwKSB8fCAvLyBBLi4uWlxuXHRcdFx0KGNoID49IDk3ICYmIGNoIDw9IDEyMikgfHwgLy8gYS4uLnpcblx0XHRcdChjaCA+PSAxMjggJiYgIUpzZXAuYmluYXJ5X29wc1tTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKV0pIHx8IC8vIGFueSBub24tQVNDSUkgdGhhdCBpcyBub3QgYW4gb3BlcmF0b3Jcblx0XHRcdChKc2VwLmFkZGl0aW9uYWxfaWRlbnRpZmllcl9jaGFycy5oYXMoU3RyaW5nLmZyb21DaGFyQ29kZShjaCkpKTsgLy8gYWRkaXRpb25hbCBjaGFyYWN0ZXJzXG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtudW1iZXJ9IGNoXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0c3RhdGljIGlzSWRlbnRpZmllclBhcnQoY2gpIHtcblx0XHRyZXR1cm4gSnNlcC5pc0lkZW50aWZpZXJTdGFydChjaCkgfHwgSnNlcC5pc0RlY2ltYWxEaWdpdChjaCk7XG5cdH1cblxuXHQvKipcblx0ICogdGhyb3cgZXJyb3IgYXQgaW5kZXggb2YgdGhlIGV4cHJlc3Npb25cblx0ICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2Vcblx0ICogQHRocm93c1xuXHQgKi9cblx0dGhyb3dFcnJvcihtZXNzYWdlKSB7XG5cdFx0Y29uc3QgZXJyb3IgPSBuZXcgRXJyb3IobWVzc2FnZSArICcgYXQgY2hhcmFjdGVyICcgKyB0aGlzLmluZGV4KTtcblx0XHRlcnJvci5pbmRleCA9IHRoaXMuaW5kZXg7XG5cdFx0ZXJyb3IuZGVzY3JpcHRpb24gPSBtZXNzYWdlO1xuXHRcdHRocm93IGVycm9yO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJ1biBhIGdpdmVuIGhvb2tcblx0ICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcblx0ICogQHBhcmFtIHtqc2VwLkV4cHJlc3Npb258ZmFsc2V9IFtub2RlXVxuXHQgKiBAcmV0dXJucyB7P2pzZXAuRXhwcmVzc2lvbn1cblx0ICovXG5cdHJ1bkhvb2sobmFtZSwgbm9kZSkge1xuXHRcdGlmIChKc2VwLmhvb2tzW25hbWVdKSB7XG5cdFx0XHRjb25zdCBlbnYgPSB7IGNvbnRleHQ6IHRoaXMsIG5vZGUgfTtcblx0XHRcdEpzZXAuaG9va3MucnVuKG5hbWUsIGVudik7XG5cdFx0XHRyZXR1cm4gZW52Lm5vZGU7XG5cdFx0fVxuXHRcdHJldHVybiBub2RlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJ1bnMgYSBnaXZlbiBob29rIHVudGlsIG9uZSByZXR1cm5zIGEgbm9kZVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuXHQgKiBAcmV0dXJucyB7P2pzZXAuRXhwcmVzc2lvbn1cblx0ICovXG5cdHNlYXJjaEhvb2sobmFtZSkge1xuXHRcdGlmIChKc2VwLmhvb2tzW25hbWVdKSB7XG5cdFx0XHRjb25zdCBlbnYgPSB7IGNvbnRleHQ6IHRoaXMgfTtcblx0XHRcdEpzZXAuaG9va3NbbmFtZV0uZmluZChmdW5jdGlvbiAoY2FsbGJhY2spIHtcblx0XHRcdFx0Y2FsbGJhY2suY2FsbChlbnYuY29udGV4dCwgZW52KTtcblx0XHRcdFx0cmV0dXJuIGVudi5ub2RlO1xuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gZW52Lm5vZGU7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFB1c2ggYGluZGV4YCB1cCB0byB0aGUgbmV4dCBub24tc3BhY2UgY2hhcmFjdGVyXG5cdCAqL1xuXHRnb2JibGVTcGFjZXMoKSB7XG5cdFx0bGV0IGNoID0gdGhpcy5jb2RlO1xuXHRcdC8vIFdoaXRlc3BhY2Vcblx0XHR3aGlsZSAoY2ggPT09IEpzZXAuU1BBQ0VfQ09ERVxuXHRcdHx8IGNoID09PSBKc2VwLlRBQl9DT0RFXG5cdFx0fHwgY2ggPT09IEpzZXAuTEZfQ09ERVxuXHRcdHx8IGNoID09PSBKc2VwLkNSX0NPREUpIHtcblx0XHRcdGNoID0gdGhpcy5leHByLmNoYXJDb2RlQXQoKyt0aGlzLmluZGV4KTtcblx0XHR9XG5cdFx0dGhpcy5ydW5Ib29rKCdnb2JibGUtc3BhY2VzJyk7XG5cdH1cblxuXHQvKipcblx0ICogVG9wLWxldmVsIG1ldGhvZCB0byBwYXJzZSBhbGwgZXhwcmVzc2lvbnMgYW5kIHJldHVybnMgY29tcG91bmQgb3Igc2luZ2xlIG5vZGVcblx0ICogQHJldHVybnMge2pzZXAuRXhwcmVzc2lvbn1cblx0ICovXG5cdHBhcnNlKCkge1xuXHRcdHRoaXMucnVuSG9vaygnYmVmb3JlLWFsbCcpO1xuXHRcdGNvbnN0IG5vZGVzID0gdGhpcy5nb2JibGVFeHByZXNzaW9ucygpO1xuXG5cdFx0Ly8gSWYgdGhlcmUncyBvbmx5IG9uZSBleHByZXNzaW9uIGp1c3QgdHJ5IHJldHVybmluZyB0aGUgZXhwcmVzc2lvblxuXHRcdGNvbnN0IG5vZGUgPSBub2Rlcy5sZW5ndGggPT09IDFcblx0XHQgID8gbm9kZXNbMF1cblx0XHRcdDoge1xuXHRcdFx0XHR0eXBlOiBKc2VwLkNPTVBPVU5ELFxuXHRcdFx0XHRib2R5OiBub2Rlc1xuXHRcdFx0fTtcblx0XHRyZXR1cm4gdGhpcy5ydW5Ib29rKCdhZnRlci1hbGwnLCBub2RlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiB0b3AtbGV2ZWwgcGFyc2VyIChidXQgY2FuIGJlIHJldXNlZCB3aXRoaW4gYXMgd2VsbClcblx0ICogQHBhcmFtIHtudW1iZXJ9IFt1bnRpbElDb2RlXVxuXHQgKiBAcmV0dXJucyB7anNlcC5FeHByZXNzaW9uW119XG5cdCAqL1xuXHRnb2JibGVFeHByZXNzaW9ucyh1bnRpbElDb2RlKSB7XG5cdFx0bGV0IG5vZGVzID0gW10sIGNoX2ksIG5vZGU7XG5cblx0XHR3aGlsZSAodGhpcy5pbmRleCA8IHRoaXMuZXhwci5sZW5ndGgpIHtcblx0XHRcdGNoX2kgPSB0aGlzLmNvZGU7XG5cblx0XHRcdC8vIEV4cHJlc3Npb25zIGNhbiBiZSBzZXBhcmF0ZWQgYnkgc2VtaWNvbG9ucywgY29tbWFzLCBvciBqdXN0IGluZmVycmVkIHdpdGhvdXQgYW55XG5cdFx0XHQvLyBzZXBhcmF0b3JzXG5cdFx0XHRpZiAoY2hfaSA9PT0gSnNlcC5TRU1DT0xfQ09ERSB8fCBjaF9pID09PSBKc2VwLkNPTU1BX0NPREUpIHtcblx0XHRcdFx0dGhpcy5pbmRleCsrOyAvLyBpZ25vcmUgc2VwYXJhdG9yc1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSB7XG5cdFx0XHRcdC8vIFRyeSB0byBnb2JibGUgZWFjaCBleHByZXNzaW9uIGluZGl2aWR1YWxseVxuXHRcdFx0XHRpZiAobm9kZSA9IHRoaXMuZ29iYmxlRXhwcmVzc2lvbigpKSB7XG5cdFx0XHRcdFx0bm9kZXMucHVzaChub2RlKTtcblx0XHRcdFx0XHQvLyBJZiB3ZSB3ZXJlbid0IGFibGUgdG8gZmluZCBhIGJpbmFyeSBleHByZXNzaW9uIGFuZCBhcmUgb3V0IG9mIHJvb20sIHRoZW5cblx0XHRcdFx0XHQvLyB0aGUgZXhwcmVzc2lvbiBwYXNzZWQgaW4gcHJvYmFibHkgaGFzIHRvbyBtdWNoXG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSBpZiAodGhpcy5pbmRleCA8IHRoaXMuZXhwci5sZW5ndGgpIHtcblx0XHRcdFx0XHRpZiAoY2hfaSA9PT0gdW50aWxJQ29kZSkge1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHRoaXMudGhyb3dFcnJvcignVW5leHBlY3RlZCBcIicgKyB0aGlzLmNoYXIgKyAnXCInKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBub2Rlcztcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgbWFpbiBwYXJzaW5nIGZ1bmN0aW9uLlxuXHQgKiBAcmV0dXJucyB7P2pzZXAuRXhwcmVzc2lvbn1cblx0ICovXG5cdGdvYmJsZUV4cHJlc3Npb24oKSB7XG5cdFx0Y29uc3Qgbm9kZSA9IHRoaXMuc2VhcmNoSG9vaygnZ29iYmxlLWV4cHJlc3Npb24nKSB8fCB0aGlzLmdvYmJsZUJpbmFyeUV4cHJlc3Npb24oKTtcblx0XHR0aGlzLmdvYmJsZVNwYWNlcygpO1xuXG5cdFx0cmV0dXJuIHRoaXMucnVuSG9vaygnYWZ0ZXItZXhwcmVzc2lvbicsIG5vZGUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNlYXJjaCBmb3IgdGhlIG9wZXJhdGlvbiBwb3J0aW9uIG9mIHRoZSBzdHJpbmcgKGUuZy4gYCtgLCBgPT09YClcblx0ICogU3RhcnQgYnkgdGFraW5nIHRoZSBsb25nZXN0IHBvc3NpYmxlIGJpbmFyeSBvcGVyYXRpb25zICgzIGNoYXJhY3RlcnM6IGA9PT1gLCBgIT09YCwgYD4+PmApXG5cdCAqIGFuZCBtb3ZlIGRvd24gZnJvbSAzIHRvIDIgdG8gMSBjaGFyYWN0ZXIgdW50aWwgYSBtYXRjaGluZyBiaW5hcnkgb3BlcmF0aW9uIGlzIGZvdW5kXG5cdCAqIHRoZW4sIHJldHVybiB0aGF0IGJpbmFyeSBvcGVyYXRpb25cblx0ICogQHJldHVybnMge3N0cmluZ3xib29sZWFufVxuXHQgKi9cblx0Z29iYmxlQmluYXJ5T3AoKSB7XG5cdFx0dGhpcy5nb2JibGVTcGFjZXMoKTtcblx0XHRsZXQgdG9fY2hlY2sgPSB0aGlzLmV4cHIuc3Vic3RyKHRoaXMuaW5kZXgsIEpzZXAubWF4X2Jpbm9wX2xlbik7XG5cdFx0bGV0IHRjX2xlbiA9IHRvX2NoZWNrLmxlbmd0aDtcblxuXHRcdHdoaWxlICh0Y19sZW4gPiAwKSB7XG5cdFx0XHQvLyBEb24ndCBhY2NlcHQgYSBiaW5hcnkgb3Agd2hlbiBpdCBpcyBhbiBpZGVudGlmaWVyLlxuXHRcdFx0Ly8gQmluYXJ5IG9wcyB0aGF0IHN0YXJ0IHdpdGggYSBpZGVudGlmaWVyLXZhbGlkIGNoYXJhY3RlciBtdXN0IGJlIGZvbGxvd2VkXG5cdFx0XHQvLyBieSBhIG5vbiBpZGVudGlmaWVyLXBhcnQgdmFsaWQgY2hhcmFjdGVyXG5cdFx0XHRpZiAoSnNlcC5iaW5hcnlfb3BzLmhhc093blByb3BlcnR5KHRvX2NoZWNrKSAmJiAoXG5cdFx0XHRcdCFKc2VwLmlzSWRlbnRpZmllclN0YXJ0KHRoaXMuY29kZSkgfHxcblx0XHRcdFx0KHRoaXMuaW5kZXggKyB0b19jaGVjay5sZW5ndGggPCB0aGlzLmV4cHIubGVuZ3RoICYmICFKc2VwLmlzSWRlbnRpZmllclBhcnQodGhpcy5leHByLmNoYXJDb2RlQXQodGhpcy5pbmRleCArIHRvX2NoZWNrLmxlbmd0aCkpKVxuXHRcdFx0KSkge1xuXHRcdFx0XHR0aGlzLmluZGV4ICs9IHRjX2xlbjtcblx0XHRcdFx0cmV0dXJuIHRvX2NoZWNrO1xuXHRcdFx0fVxuXHRcdFx0dG9fY2hlY2sgPSB0b19jaGVjay5zdWJzdHIoMCwgLS10Y19sZW4pO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgZ29iYmxpbmcgYW4gaW5kaXZpZHVhbCBleHByZXNzaW9uLFxuXHQgKiBlLmcuIGAxYCwgYDErMmAsIGBhKyhiKjIpLU1hdGguc3FydCgyKWBcblx0ICogQHJldHVybnMgez9qc2VwLkJpbmFyeUV4cHJlc3Npb259XG5cdCAqL1xuXHRnb2JibGVCaW5hcnlFeHByZXNzaW9uKCkge1xuXHRcdGxldCBub2RlLCBiaW9wLCBwcmVjLCBzdGFjaywgYmlvcF9pbmZvLCBsZWZ0LCByaWdodCwgaSwgY3VyX2Jpb3A7XG5cblx0XHQvLyBGaXJzdCwgdHJ5IHRvIGdldCB0aGUgbGVmdG1vc3QgdGhpbmdcblx0XHQvLyBUaGVuLCBjaGVjayB0byBzZWUgaWYgdGhlcmUncyBhIGJpbmFyeSBvcGVyYXRvciBvcGVyYXRpbmcgb24gdGhhdCBsZWZ0bW9zdCB0aGluZ1xuXHRcdC8vIERvbid0IGdvYmJsZUJpbmFyeU9wIHdpdGhvdXQgYSBsZWZ0LWhhbmQtc2lkZVxuXHRcdGxlZnQgPSB0aGlzLmdvYmJsZVRva2VuKCk7XG5cdFx0aWYgKCFsZWZ0KSB7XG5cdFx0XHRyZXR1cm4gbGVmdDtcblx0XHR9XG5cdFx0YmlvcCA9IHRoaXMuZ29iYmxlQmluYXJ5T3AoKTtcblxuXHRcdC8vIElmIHRoZXJlIHdhc24ndCBhIGJpbmFyeSBvcGVyYXRvciwganVzdCByZXR1cm4gdGhlIGxlZnRtb3N0IG5vZGVcblx0XHRpZiAoIWJpb3ApIHtcblx0XHRcdHJldHVybiBsZWZ0O1xuXHRcdH1cblxuXHRcdC8vIE90aGVyd2lzZSwgd2UgbmVlZCB0byBzdGFydCBhIHN0YWNrIHRvIHByb3Blcmx5IHBsYWNlIHRoZSBiaW5hcnkgb3BlcmF0aW9ucyBpbiB0aGVpclxuXHRcdC8vIHByZWNlZGVuY2Ugc3RydWN0dXJlXG5cdFx0YmlvcF9pbmZvID0geyB2YWx1ZTogYmlvcCwgcHJlYzogSnNlcC5iaW5hcnlQcmVjZWRlbmNlKGJpb3ApLCByaWdodF9hOiBKc2VwLnJpZ2h0X2Fzc29jaWF0aXZlLmhhcyhiaW9wKSB9O1xuXG5cdFx0cmlnaHQgPSB0aGlzLmdvYmJsZVRva2VuKCk7XG5cblx0XHRpZiAoIXJpZ2h0KSB7XG5cdFx0XHR0aGlzLnRocm93RXJyb3IoXCJFeHBlY3RlZCBleHByZXNzaW9uIGFmdGVyIFwiICsgYmlvcCk7XG5cdFx0fVxuXG5cdFx0c3RhY2sgPSBbbGVmdCwgYmlvcF9pbmZvLCByaWdodF07XG5cblx0XHQvLyBQcm9wZXJseSBkZWFsIHdpdGggcHJlY2VkZW5jZSB1c2luZyBbcmVjdXJzaXZlIGRlc2NlbnRdKGh0dHA6Ly93d3cuZW5nci5tdW4uY2EvfnRoZW8vTWlzYy9leHBfcGFyc2luZy5odG0pXG5cdFx0d2hpbGUgKChiaW9wID0gdGhpcy5nb2JibGVCaW5hcnlPcCgpKSkge1xuXHRcdFx0cHJlYyA9IEpzZXAuYmluYXJ5UHJlY2VkZW5jZShiaW9wKTtcblxuXHRcdFx0aWYgKHByZWMgPT09IDApIHtcblx0XHRcdFx0dGhpcy5pbmRleCAtPSBiaW9wLmxlbmd0aDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cblx0XHRcdGJpb3BfaW5mbyA9IHsgdmFsdWU6IGJpb3AsIHByZWMsIHJpZ2h0X2E6IEpzZXAucmlnaHRfYXNzb2NpYXRpdmUuaGFzKGJpb3ApIH07XG5cblx0XHRcdGN1cl9iaW9wID0gYmlvcDtcblxuXHRcdFx0Ly8gUmVkdWNlOiBtYWtlIGEgYmluYXJ5IGV4cHJlc3Npb24gZnJvbSB0aGUgdGhyZWUgdG9wbW9zdCBlbnRyaWVzLlxuXHRcdFx0Y29uc3QgY29tcGFyZVByZXYgPSBwcmV2ID0+IGJpb3BfaW5mby5yaWdodF9hICYmIHByZXYucmlnaHRfYVxuXHRcdFx0XHQ/IHByZWMgPiBwcmV2LnByZWNcblx0XHRcdFx0OiBwcmVjIDw9IHByZXYucHJlYztcblx0XHRcdHdoaWxlICgoc3RhY2subGVuZ3RoID4gMikgJiYgY29tcGFyZVByZXYoc3RhY2tbc3RhY2subGVuZ3RoIC0gMl0pKSB7XG5cdFx0XHRcdHJpZ2h0ID0gc3RhY2sucG9wKCk7XG5cdFx0XHRcdGJpb3AgPSBzdGFjay5wb3AoKS52YWx1ZTtcblx0XHRcdFx0bGVmdCA9IHN0YWNrLnBvcCgpO1xuXHRcdFx0XHRub2RlID0ge1xuXHRcdFx0XHRcdHR5cGU6IEpzZXAuQklOQVJZX0VYUCxcblx0XHRcdFx0XHRvcGVyYXRvcjogYmlvcCxcblx0XHRcdFx0XHRsZWZ0LFxuXHRcdFx0XHRcdHJpZ2h0XG5cdFx0XHRcdH07XG5cdFx0XHRcdHN0YWNrLnB1c2gobm9kZSk7XG5cdFx0XHR9XG5cblx0XHRcdG5vZGUgPSB0aGlzLmdvYmJsZVRva2VuKCk7XG5cblx0XHRcdGlmICghbm9kZSkge1xuXHRcdFx0XHR0aGlzLnRocm93RXJyb3IoXCJFeHBlY3RlZCBleHByZXNzaW9uIGFmdGVyIFwiICsgY3VyX2Jpb3ApO1xuXHRcdFx0fVxuXG5cdFx0XHRzdGFjay5wdXNoKGJpb3BfaW5mbywgbm9kZSk7XG5cdFx0fVxuXG5cdFx0aSA9IHN0YWNrLmxlbmd0aCAtIDE7XG5cdFx0bm9kZSA9IHN0YWNrW2ldO1xuXG5cdFx0d2hpbGUgKGkgPiAxKSB7XG5cdFx0XHRub2RlID0ge1xuXHRcdFx0XHR0eXBlOiBKc2VwLkJJTkFSWV9FWFAsXG5cdFx0XHRcdG9wZXJhdG9yOiBzdGFja1tpIC0gMV0udmFsdWUsXG5cdFx0XHRcdGxlZnQ6IHN0YWNrW2kgLSAyXSxcblx0XHRcdFx0cmlnaHQ6IG5vZGVcblx0XHRcdH07XG5cdFx0XHRpIC09IDI7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG5vZGU7XG5cdH1cblxuXHQvKipcblx0ICogQW4gaW5kaXZpZHVhbCBwYXJ0IG9mIGEgYmluYXJ5IGV4cHJlc3Npb246XG5cdCAqIGUuZy4gYGZvby5iYXIoYmF6KWAsIGAxYCwgYFwiYWJjXCJgLCBgKGEgJSAyKWAgKGJlY2F1c2UgaXQncyBpbiBwYXJlbnRoZXNpcylcblx0ICogQHJldHVybnMge2Jvb2xlYW58anNlcC5FeHByZXNzaW9ufVxuXHQgKi9cblx0Z29iYmxlVG9rZW4oKSB7XG5cdFx0bGV0IGNoLCB0b19jaGVjaywgdGNfbGVuLCBub2RlO1xuXG5cdFx0dGhpcy5nb2JibGVTcGFjZXMoKTtcblx0XHRub2RlID0gdGhpcy5zZWFyY2hIb29rKCdnb2JibGUtdG9rZW4nKTtcblx0XHRpZiAobm9kZSkge1xuXHRcdFx0cmV0dXJuIHRoaXMucnVuSG9vaygnYWZ0ZXItdG9rZW4nLCBub2RlKTtcblx0XHR9XG5cblx0XHRjaCA9IHRoaXMuY29kZTtcblxuXHRcdGlmIChKc2VwLmlzRGVjaW1hbERpZ2l0KGNoKSB8fCBjaCA9PT0gSnNlcC5QRVJJT0RfQ09ERSkge1xuXHRcdFx0Ly8gQ2hhciBjb2RlIDQ2IGlzIGEgZG90IGAuYCB3aGljaCBjYW4gc3RhcnQgb2ZmIGEgbnVtZXJpYyBsaXRlcmFsXG5cdFx0XHRyZXR1cm4gdGhpcy5nb2JibGVOdW1lcmljTGl0ZXJhbCgpO1xuXHRcdH1cblxuXHRcdGlmIChjaCA9PT0gSnNlcC5TUVVPVEVfQ09ERSB8fCBjaCA9PT0gSnNlcC5EUVVPVEVfQ09ERSkge1xuXHRcdFx0Ly8gU2luZ2xlIG9yIGRvdWJsZSBxdW90ZXNcblx0XHRcdG5vZGUgPSB0aGlzLmdvYmJsZVN0cmluZ0xpdGVyYWwoKTtcblx0XHR9XG5cdFx0ZWxzZSBpZiAoY2ggPT09IEpzZXAuT0JSQUNLX0NPREUpIHtcblx0XHRcdG5vZGUgPSB0aGlzLmdvYmJsZUFycmF5KCk7XG5cdFx0fVxuXHRcdGVsc2Uge1xuXHRcdFx0dG9fY2hlY2sgPSB0aGlzLmV4cHIuc3Vic3RyKHRoaXMuaW5kZXgsIEpzZXAubWF4X3Vub3BfbGVuKTtcblx0XHRcdHRjX2xlbiA9IHRvX2NoZWNrLmxlbmd0aDtcblxuXHRcdFx0d2hpbGUgKHRjX2xlbiA+IDApIHtcblx0XHRcdFx0Ly8gRG9uJ3QgYWNjZXB0IGFuIHVuYXJ5IG9wIHdoZW4gaXQgaXMgYW4gaWRlbnRpZmllci5cblx0XHRcdFx0Ly8gVW5hcnkgb3BzIHRoYXQgc3RhcnQgd2l0aCBhIGlkZW50aWZpZXItdmFsaWQgY2hhcmFjdGVyIG11c3QgYmUgZm9sbG93ZWRcblx0XHRcdFx0Ly8gYnkgYSBub24gaWRlbnRpZmllci1wYXJ0IHZhbGlkIGNoYXJhY3RlclxuXHRcdFx0XHRpZiAoSnNlcC51bmFyeV9vcHMuaGFzT3duUHJvcGVydHkodG9fY2hlY2spICYmIChcblx0XHRcdFx0XHQhSnNlcC5pc0lkZW50aWZpZXJTdGFydCh0aGlzLmNvZGUpIHx8XG5cdFx0XHRcdFx0KHRoaXMuaW5kZXggKyB0b19jaGVjay5sZW5ndGggPCB0aGlzLmV4cHIubGVuZ3RoICYmICFKc2VwLmlzSWRlbnRpZmllclBhcnQodGhpcy5leHByLmNoYXJDb2RlQXQodGhpcy5pbmRleCArIHRvX2NoZWNrLmxlbmd0aCkpKVxuXHRcdFx0XHQpKSB7XG5cdFx0XHRcdFx0dGhpcy5pbmRleCArPSB0Y19sZW47XG5cdFx0XHRcdFx0Y29uc3QgYXJndW1lbnQgPSB0aGlzLmdvYmJsZVRva2VuKCk7XG5cdFx0XHRcdFx0aWYgKCFhcmd1bWVudCkge1xuXHRcdFx0XHRcdFx0dGhpcy50aHJvd0Vycm9yKCdtaXNzaW5nIHVuYXJ5T3AgYXJndW1lbnQnKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMucnVuSG9vaygnYWZ0ZXItdG9rZW4nLCB7XG5cdFx0XHRcdFx0XHR0eXBlOiBKc2VwLlVOQVJZX0VYUCxcblx0XHRcdFx0XHRcdG9wZXJhdG9yOiB0b19jaGVjayxcblx0XHRcdFx0XHRcdGFyZ3VtZW50LFxuXHRcdFx0XHRcdFx0cHJlZml4OiB0cnVlXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0b19jaGVjayA9IHRvX2NoZWNrLnN1YnN0cigwLCAtLXRjX2xlbik7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChKc2VwLmlzSWRlbnRpZmllclN0YXJ0KGNoKSkge1xuXHRcdFx0XHRub2RlID0gdGhpcy5nb2JibGVJZGVudGlmaWVyKCk7XG5cdFx0XHRcdGlmIChKc2VwLmxpdGVyYWxzLmhhc093blByb3BlcnR5KG5vZGUubmFtZSkpIHtcblx0XHRcdFx0XHRub2RlID0ge1xuXHRcdFx0XHRcdFx0dHlwZTogSnNlcC5MSVRFUkFMLFxuXHRcdFx0XHRcdFx0dmFsdWU6IEpzZXAubGl0ZXJhbHNbbm9kZS5uYW1lXSxcblx0XHRcdFx0XHRcdHJhdzogbm9kZS5uYW1lLFxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSBpZiAobm9kZS5uYW1lID09PSBKc2VwLnRoaXNfc3RyKSB7XG5cdFx0XHRcdFx0bm9kZSA9IHsgdHlwZTogSnNlcC5USElTX0VYUCB9O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRlbHNlIGlmIChjaCA9PT0gSnNlcC5PUEFSRU5fQ09ERSkgeyAvLyBvcGVuIHBhcmVudGhlc2lzXG5cdFx0XHRcdG5vZGUgPSB0aGlzLmdvYmJsZUdyb3VwKCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCFub2RlKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5ydW5Ib29rKCdhZnRlci10b2tlbicsIGZhbHNlKTtcblx0XHR9XG5cblx0XHRub2RlID0gdGhpcy5nb2JibGVUb2tlblByb3BlcnR5KG5vZGUpO1xuXHRcdHJldHVybiB0aGlzLnJ1bkhvb2soJ2FmdGVyLXRva2VuJywgbm9kZSk7XG5cdH1cblxuXHQvKipcblx0ICogR29iYmxlIHByb3BlcnRpZXMgb2Ygb2YgaWRlbnRpZmllcnMvc3RyaW5ncy9hcnJheXMvZ3JvdXBzLlxuXHQgKiBlLmcuIGBmb29gLCBgYmFyLmJhemAsIGBmb29bJ2JhciddLmJhemBcblx0ICogSXQgYWxzbyBnb2JibGVzIGZ1bmN0aW9uIGNhbGxzOlxuXHQgKiBlLmcuIGBNYXRoLmFjb3Mob2JqLmFuZ2xlKWBcblx0ICogQHBhcmFtIHtqc2VwLkV4cHJlc3Npb259IG5vZGVcblx0ICogQHJldHVybnMge2pzZXAuRXhwcmVzc2lvbn1cblx0ICovXG5cdGdvYmJsZVRva2VuUHJvcGVydHkobm9kZSkge1xuXHRcdHRoaXMuZ29iYmxlU3BhY2VzKCk7XG5cblx0XHRsZXQgY2ggPSB0aGlzLmNvZGU7XG5cdFx0d2hpbGUgKGNoID09PSBKc2VwLlBFUklPRF9DT0RFIHx8IGNoID09PSBKc2VwLk9CUkFDS19DT0RFIHx8IGNoID09PSBKc2VwLk9QQVJFTl9DT0RFIHx8IGNoID09PSBKc2VwLlFVTUFSS19DT0RFKSB7XG5cdFx0XHRsZXQgb3B0aW9uYWw7XG5cdFx0XHRpZiAoY2ggPT09IEpzZXAuUVVNQVJLX0NPREUpIHtcblx0XHRcdFx0aWYgKHRoaXMuZXhwci5jaGFyQ29kZUF0KHRoaXMuaW5kZXggKyAxKSAhPT0gSnNlcC5QRVJJT0RfQ09ERSkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG9wdGlvbmFsID0gdHJ1ZTtcblx0XHRcdFx0dGhpcy5pbmRleCArPSAyO1xuXHRcdFx0XHR0aGlzLmdvYmJsZVNwYWNlcygpO1xuXHRcdFx0XHRjaCA9IHRoaXMuY29kZTtcblx0XHRcdH1cblx0XHRcdHRoaXMuaW5kZXgrKztcblxuXHRcdFx0aWYgKGNoID09PSBKc2VwLk9CUkFDS19DT0RFKSB7XG5cdFx0XHRcdG5vZGUgPSB7XG5cdFx0XHRcdFx0dHlwZTogSnNlcC5NRU1CRVJfRVhQLFxuXHRcdFx0XHRcdGNvbXB1dGVkOiB0cnVlLFxuXHRcdFx0XHRcdG9iamVjdDogbm9kZSxcblx0XHRcdFx0XHRwcm9wZXJ0eTogdGhpcy5nb2JibGVFeHByZXNzaW9uKClcblx0XHRcdFx0fTtcblx0XHRcdFx0dGhpcy5nb2JibGVTcGFjZXMoKTtcblx0XHRcdFx0Y2ggPSB0aGlzLmNvZGU7XG5cdFx0XHRcdGlmIChjaCAhPT0gSnNlcC5DQlJBQ0tfQ09ERSkge1xuXHRcdFx0XHRcdHRoaXMudGhyb3dFcnJvcignVW5jbG9zZWQgWycpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuaW5kZXgrKztcblx0XHRcdH1cblx0XHRcdGVsc2UgaWYgKGNoID09PSBKc2VwLk9QQVJFTl9DT0RFKSB7XG5cdFx0XHRcdC8vIEEgZnVuY3Rpb24gY2FsbCBpcyBiZWluZyBtYWRlOyBnb2JibGUgYWxsIHRoZSBhcmd1bWVudHNcblx0XHRcdFx0bm9kZSA9IHtcblx0XHRcdFx0XHR0eXBlOiBKc2VwLkNBTExfRVhQLFxuXHRcdFx0XHRcdCdhcmd1bWVudHMnOiB0aGlzLmdvYmJsZUFyZ3VtZW50cyhKc2VwLkNQQVJFTl9DT0RFKSxcblx0XHRcdFx0XHRjYWxsZWU6IG5vZGVcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHRcdGVsc2UgaWYgKGNoID09PSBKc2VwLlBFUklPRF9DT0RFIHx8IG9wdGlvbmFsKSB7XG5cdFx0XHRcdGlmIChvcHRpb25hbCkge1xuXHRcdFx0XHRcdHRoaXMuaW5kZXgtLTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLmdvYmJsZVNwYWNlcygpO1xuXHRcdFx0XHRub2RlID0ge1xuXHRcdFx0XHRcdHR5cGU6IEpzZXAuTUVNQkVSX0VYUCxcblx0XHRcdFx0XHRjb21wdXRlZDogZmFsc2UsXG5cdFx0XHRcdFx0b2JqZWN0OiBub2RlLFxuXHRcdFx0XHRcdHByb3BlcnR5OiB0aGlzLmdvYmJsZUlkZW50aWZpZXIoKSxcblx0XHRcdFx0fTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKG9wdGlvbmFsKSB7XG5cdFx0XHRcdG5vZGUub3B0aW9uYWwgPSB0cnVlO1xuXHRcdFx0fSAvLyBlbHNlIGxlYXZlIHVuZGVmaW5lZCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIGVzcHJpbWFcblxuXHRcdFx0dGhpcy5nb2JibGVTcGFjZXMoKTtcblx0XHRcdGNoID0gdGhpcy5jb2RlO1xuXHRcdH1cblxuXHRcdHJldHVybiBub2RlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFBhcnNlIHNpbXBsZSBudW1lcmljIGxpdGVyYWxzOiBgMTJgLCBgMy40YCwgYC41YC4gRG8gdGhpcyBieSB1c2luZyBhIHN0cmluZyB0b1xuXHQgKiBrZWVwIHRyYWNrIG9mIGV2ZXJ5dGhpbmcgaW4gdGhlIG51bWVyaWMgbGl0ZXJhbCBhbmQgdGhlbiBjYWxsaW5nIGBwYXJzZUZsb2F0YCBvbiB0aGF0IHN0cmluZ1xuXHQgKiBAcmV0dXJucyB7anNlcC5MaXRlcmFsfVxuXHQgKi9cblx0Z29iYmxlTnVtZXJpY0xpdGVyYWwoKSB7XG5cdFx0bGV0IG51bWJlciA9ICcnLCBjaCwgY2hDb2RlO1xuXG5cdFx0d2hpbGUgKEpzZXAuaXNEZWNpbWFsRGlnaXQodGhpcy5jb2RlKSkge1xuXHRcdFx0bnVtYmVyICs9IHRoaXMuZXhwci5jaGFyQXQodGhpcy5pbmRleCsrKTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5jb2RlID09PSBKc2VwLlBFUklPRF9DT0RFKSB7IC8vIGNhbiBzdGFydCB3aXRoIGEgZGVjaW1hbCBtYXJrZXJcblx0XHRcdG51bWJlciArPSB0aGlzLmV4cHIuY2hhckF0KHRoaXMuaW5kZXgrKyk7XG5cblx0XHRcdHdoaWxlIChKc2VwLmlzRGVjaW1hbERpZ2l0KHRoaXMuY29kZSkpIHtcblx0XHRcdFx0bnVtYmVyICs9IHRoaXMuZXhwci5jaGFyQXQodGhpcy5pbmRleCsrKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRjaCA9IHRoaXMuY2hhcjtcblxuXHRcdGlmIChjaCA9PT0gJ2UnIHx8IGNoID09PSAnRScpIHsgLy8gZXhwb25lbnQgbWFya2VyXG5cdFx0XHRudW1iZXIgKz0gdGhpcy5leHByLmNoYXJBdCh0aGlzLmluZGV4KyspO1xuXHRcdFx0Y2ggPSB0aGlzLmNoYXI7XG5cblx0XHRcdGlmIChjaCA9PT0gJysnIHx8IGNoID09PSAnLScpIHsgLy8gZXhwb25lbnQgc2lnblxuXHRcdFx0XHRudW1iZXIgKz0gdGhpcy5leHByLmNoYXJBdCh0aGlzLmluZGV4KyspO1xuXHRcdFx0fVxuXG5cdFx0XHR3aGlsZSAoSnNlcC5pc0RlY2ltYWxEaWdpdCh0aGlzLmNvZGUpKSB7IC8vIGV4cG9uZW50IGl0c2VsZlxuXHRcdFx0XHRudW1iZXIgKz0gdGhpcy5leHByLmNoYXJBdCh0aGlzLmluZGV4KyspO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIUpzZXAuaXNEZWNpbWFsRGlnaXQodGhpcy5leHByLmNoYXJDb2RlQXQodGhpcy5pbmRleCAtIDEpKSApIHtcblx0XHRcdFx0dGhpcy50aHJvd0Vycm9yKCdFeHBlY3RlZCBleHBvbmVudCAoJyArIG51bWJlciArIHRoaXMuY2hhciArICcpJyk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Y2hDb2RlID0gdGhpcy5jb2RlO1xuXG5cdFx0Ly8gQ2hlY2sgdG8gbWFrZSBzdXJlIHRoaXMgaXNuJ3QgYSB2YXJpYWJsZSBuYW1lIHRoYXQgc3RhcnQgd2l0aCBhIG51bWJlciAoMTIzYWJjKVxuXHRcdGlmIChKc2VwLmlzSWRlbnRpZmllclN0YXJ0KGNoQ29kZSkpIHtcblx0XHRcdHRoaXMudGhyb3dFcnJvcignVmFyaWFibGUgbmFtZXMgY2Fubm90IHN0YXJ0IHdpdGggYSBudW1iZXIgKCcgK1xuXHRcdFx0XHRudW1iZXIgKyB0aGlzLmNoYXIgKyAnKScpO1xuXHRcdH1cblx0XHRlbHNlIGlmIChjaENvZGUgPT09IEpzZXAuUEVSSU9EX0NPREUgfHwgKG51bWJlci5sZW5ndGggPT09IDEgJiYgbnVtYmVyLmNoYXJDb2RlQXQoMCkgPT09IEpzZXAuUEVSSU9EX0NPREUpKSB7XG5cdFx0XHR0aGlzLnRocm93RXJyb3IoJ1VuZXhwZWN0ZWQgcGVyaW9kJyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdHR5cGU6IEpzZXAuTElURVJBTCxcblx0XHRcdHZhbHVlOiBwYXJzZUZsb2F0KG51bWJlciksXG5cdFx0XHRyYXc6IG51bWJlclxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogUGFyc2VzIGEgc3RyaW5nIGxpdGVyYWwsIHN0YXJpbmcgd2l0aCBzaW5nbGUgb3IgZG91YmxlIHF1b3RlcyB3aXRoIGJhc2ljIHN1cHBvcnQgZm9yIGVzY2FwZSBjb2Rlc1xuXHQgKiBlLmcuIGBcImhlbGxvIHdvcmxkXCJgLCBgJ3RoaXMgaXNcXG5KU0VQJ2Bcblx0ICogQHJldHVybnMge2pzZXAuTGl0ZXJhbH1cblx0ICovXG5cdGdvYmJsZVN0cmluZ0xpdGVyYWwoKSB7XG5cdFx0bGV0IHN0ciA9ICcnO1xuXHRcdGNvbnN0IHN0YXJ0SW5kZXggPSB0aGlzLmluZGV4O1xuXHRcdGNvbnN0IHF1b3RlID0gdGhpcy5leHByLmNoYXJBdCh0aGlzLmluZGV4KyspO1xuXHRcdGxldCBjbG9zZWQgPSBmYWxzZTtcblxuXHRcdHdoaWxlICh0aGlzLmluZGV4IDwgdGhpcy5leHByLmxlbmd0aCkge1xuXHRcdFx0bGV0IGNoID0gdGhpcy5leHByLmNoYXJBdCh0aGlzLmluZGV4KyspO1xuXG5cdFx0XHRpZiAoY2ggPT09IHF1b3RlKSB7XG5cdFx0XHRcdGNsb3NlZCA9IHRydWU7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSBpZiAoY2ggPT09ICdcXFxcJykge1xuXHRcdFx0XHQvLyBDaGVjayBmb3IgYWxsIG9mIHRoZSBjb21tb24gZXNjYXBlIGNvZGVzXG5cdFx0XHRcdGNoID0gdGhpcy5leHByLmNoYXJBdCh0aGlzLmluZGV4KyspO1xuXG5cdFx0XHRcdHN3aXRjaCAoY2gpIHtcblx0XHRcdFx0XHRjYXNlICduJzogc3RyICs9ICdcXG4nOyBicmVhaztcblx0XHRcdFx0XHRjYXNlICdyJzogc3RyICs9ICdcXHInOyBicmVhaztcblx0XHRcdFx0XHRjYXNlICd0Jzogc3RyICs9ICdcXHQnOyBicmVhaztcblx0XHRcdFx0XHRjYXNlICdiJzogc3RyICs9ICdcXGInOyBicmVhaztcblx0XHRcdFx0XHRjYXNlICdmJzogc3RyICs9ICdcXGYnOyBicmVhaztcblx0XHRcdFx0XHRjYXNlICd2Jzogc3RyICs9ICdcXHgwQic7IGJyZWFrO1xuXHRcdFx0XHRcdGRlZmF1bHQgOiBzdHIgKz0gY2g7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGVsc2Uge1xuXHRcdFx0XHRzdHIgKz0gY2g7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCFjbG9zZWQpIHtcblx0XHRcdHRoaXMudGhyb3dFcnJvcignVW5jbG9zZWQgcXVvdGUgYWZ0ZXIgXCInICsgc3RyICsgJ1wiJyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdHR5cGU6IEpzZXAuTElURVJBTCxcblx0XHRcdHZhbHVlOiBzdHIsXG5cdFx0XHRyYXc6IHRoaXMuZXhwci5zdWJzdHJpbmcoc3RhcnRJbmRleCwgdGhpcy5pbmRleCksXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHb2JibGVzIG9ubHkgaWRlbnRpZmllcnNcblx0ICogZS5nLjogYGZvb2AsIGBfdmFsdWVgLCBgJHgxYFxuXHQgKiBBbHNvLCB0aGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiB0aGF0IGlkZW50aWZpZXIgaXMgYSBsaXRlcmFsOlxuXHQgKiAoZS5nLiBgdHJ1ZWAsIGBmYWxzZWAsIGBudWxsYCkgb3IgYHRoaXNgXG5cdCAqIEByZXR1cm5zIHtqc2VwLklkZW50aWZpZXJ9XG5cdCAqL1xuXHRnb2JibGVJZGVudGlmaWVyKCkge1xuXHRcdGxldCBjaCA9IHRoaXMuY29kZSwgc3RhcnQgPSB0aGlzLmluZGV4O1xuXG5cdFx0aWYgKEpzZXAuaXNJZGVudGlmaWVyU3RhcnQoY2gpKSB7XG5cdFx0XHR0aGlzLmluZGV4Kys7XG5cdFx0fVxuXHRcdGVsc2Uge1xuXHRcdFx0dGhpcy50aHJvd0Vycm9yKCdVbmV4cGVjdGVkICcgKyB0aGlzLmNoYXIpO1xuXHRcdH1cblxuXHRcdHdoaWxlICh0aGlzLmluZGV4IDwgdGhpcy5leHByLmxlbmd0aCkge1xuXHRcdFx0Y2ggPSB0aGlzLmNvZGU7XG5cblx0XHRcdGlmIChKc2VwLmlzSWRlbnRpZmllclBhcnQoY2gpKSB7XG5cdFx0XHRcdHRoaXMuaW5kZXgrKztcblx0XHRcdH1cblx0XHRcdGVsc2Uge1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHtcblx0XHRcdHR5cGU6IEpzZXAuSURFTlRJRklFUixcblx0XHRcdG5hbWU6IHRoaXMuZXhwci5zbGljZShzdGFydCwgdGhpcy5pbmRleCksXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHb2JibGVzIGEgbGlzdCBvZiBhcmd1bWVudHMgd2l0aGluIHRoZSBjb250ZXh0IG9mIGEgZnVuY3Rpb24gY2FsbFxuXHQgKiBvciBhcnJheSBsaXRlcmFsLiBUaGlzIGZ1bmN0aW9uIGFsc28gYXNzdW1lcyB0aGF0IHRoZSBvcGVuaW5nIGNoYXJhY3RlclxuXHQgKiBgKGAgb3IgYFtgIGhhcyBhbHJlYWR5IGJlZW4gZ29iYmxlZCwgYW5kIGdvYmJsZXMgZXhwcmVzc2lvbnMgYW5kIGNvbW1hc1xuXHQgKiB1bnRpbCB0aGUgdGVybWluYXRvciBjaGFyYWN0ZXIgYClgIG9yIGBdYCBpcyBlbmNvdW50ZXJlZC5cblx0ICogZS5nLiBgZm9vKGJhciwgYmF6KWAsIGBteV9mdW5jKClgLCBvciBgW2JhciwgYmF6XWBcblx0ICogQHBhcmFtIHtudW1iZXJ9IHRlcm1pbmF0aW9uXG5cdCAqIEByZXR1cm5zIHtqc2VwLkV4cHJlc3Npb25bXX1cblx0ICovXG5cdGdvYmJsZUFyZ3VtZW50cyh0ZXJtaW5hdGlvbikge1xuXHRcdGNvbnN0IGFyZ3MgPSBbXTtcblx0XHRsZXQgY2xvc2VkID0gZmFsc2U7XG5cdFx0bGV0IHNlcGFyYXRvcl9jb3VudCA9IDA7XG5cblx0XHR3aGlsZSAodGhpcy5pbmRleCA8IHRoaXMuZXhwci5sZW5ndGgpIHtcblx0XHRcdHRoaXMuZ29iYmxlU3BhY2VzKCk7XG5cdFx0XHRsZXQgY2hfaSA9IHRoaXMuY29kZTtcblxuXHRcdFx0aWYgKGNoX2kgPT09IHRlcm1pbmF0aW9uKSB7IC8vIGRvbmUgcGFyc2luZ1xuXHRcdFx0XHRjbG9zZWQgPSB0cnVlO1xuXHRcdFx0XHR0aGlzLmluZGV4Kys7XG5cblx0XHRcdFx0aWYgKHRlcm1pbmF0aW9uID09PSBKc2VwLkNQQVJFTl9DT0RFICYmIHNlcGFyYXRvcl9jb3VudCAmJiBzZXBhcmF0b3JfY291bnQgPj0gYXJncy5sZW5ndGgpe1xuXHRcdFx0XHRcdHRoaXMudGhyb3dFcnJvcignVW5leHBlY3RlZCB0b2tlbiAnICsgU3RyaW5nLmZyb21DaGFyQ29kZSh0ZXJtaW5hdGlvbikpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRlbHNlIGlmIChjaF9pID09PSBKc2VwLkNPTU1BX0NPREUpIHsgLy8gYmV0d2VlbiBleHByZXNzaW9uc1xuXHRcdFx0XHR0aGlzLmluZGV4Kys7XG5cdFx0XHRcdHNlcGFyYXRvcl9jb3VudCsrO1xuXG5cdFx0XHRcdGlmIChzZXBhcmF0b3JfY291bnQgIT09IGFyZ3MubGVuZ3RoKSB7IC8vIG1pc3NpbmcgYXJndW1lbnRcblx0XHRcdFx0XHRpZiAodGVybWluYXRpb24gPT09IEpzZXAuQ1BBUkVOX0NPREUpIHtcblx0XHRcdFx0XHRcdHRoaXMudGhyb3dFcnJvcignVW5leHBlY3RlZCB0b2tlbiAsJyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGVsc2UgaWYgKHRlcm1pbmF0aW9uID09PSBKc2VwLkNCUkFDS19DT0RFKSB7XG5cdFx0XHRcdFx0XHRmb3IgKGxldCBhcmcgPSBhcmdzLmxlbmd0aDsgYXJnIDwgc2VwYXJhdG9yX2NvdW50OyBhcmcrKykge1xuXHRcdFx0XHRcdFx0XHRhcmdzLnB1c2gobnVsbCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRlbHNlIGlmIChhcmdzLmxlbmd0aCAhPT0gc2VwYXJhdG9yX2NvdW50ICYmIHNlcGFyYXRvcl9jb3VudCAhPT0gMCkge1xuXHRcdFx0XHQvLyBOT1RFOiBgJiYgc2VwYXJhdG9yX2NvdW50ICE9PSAwYCBhbGxvd3MgZm9yIGVpdGhlciBhbGwgY29tbWFzLCBvciBhbGwgc3BhY2VzIGFzIGFyZ3VtZW50c1xuXHRcdFx0XHR0aGlzLnRocm93RXJyb3IoJ0V4cGVjdGVkIGNvbW1hJyk7XG5cdFx0XHR9XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0Y29uc3Qgbm9kZSA9IHRoaXMuZ29iYmxlRXhwcmVzc2lvbigpO1xuXG5cdFx0XHRcdGlmICghbm9kZSB8fCBub2RlLnR5cGUgPT09IEpzZXAuQ09NUE9VTkQpIHtcblx0XHRcdFx0XHR0aGlzLnRocm93RXJyb3IoJ0V4cGVjdGVkIGNvbW1hJyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRhcmdzLnB1c2gobm9kZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCFjbG9zZWQpIHtcblx0XHRcdHRoaXMudGhyb3dFcnJvcignRXhwZWN0ZWQgJyArIFN0cmluZy5mcm9tQ2hhckNvZGUodGVybWluYXRpb24pKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gYXJncztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXNwb25zaWJsZSBmb3IgcGFyc2luZyBhIGdyb3VwIG9mIHRoaW5ncyB3aXRoaW4gcGFyZW50aGVzZXMgYCgpYFxuXHQgKiB0aGF0IGhhdmUgbm8gaWRlbnRpZmllciBpbiBmcm9udCAoc28gbm90IGEgZnVuY3Rpb24gY2FsbClcblx0ICogVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgaXQgbmVlZHMgdG8gZ29iYmxlIHRoZSBvcGVuaW5nIHBhcmVudGhlc2lzXG5cdCAqIGFuZCB0aGVuIHRyaWVzIHRvIGdvYmJsZSBldmVyeXRoaW5nIHdpdGhpbiB0aGF0IHBhcmVudGhlc2lzLCBhc3N1bWluZ1xuXHQgKiB0aGF0IHRoZSBuZXh0IHRoaW5nIGl0IHNob3VsZCBzZWUgaXMgdGhlIGNsb3NlIHBhcmVudGhlc2lzLiBJZiBub3QsXG5cdCAqIHRoZW4gdGhlIGV4cHJlc3Npb24gcHJvYmFibHkgZG9lc24ndCBoYXZlIGEgYClgXG5cdCAqIEByZXR1cm5zIHtib29sZWFufGpzZXAuRXhwcmVzc2lvbn1cblx0ICovXG5cdGdvYmJsZUdyb3VwKCkge1xuXHRcdHRoaXMuaW5kZXgrKztcblx0XHRsZXQgbm9kZXMgPSB0aGlzLmdvYmJsZUV4cHJlc3Npb25zKEpzZXAuQ1BBUkVOX0NPREUpO1xuXHRcdGlmICh0aGlzLmNvZGUgPT09IEpzZXAuQ1BBUkVOX0NPREUpIHtcblx0XHRcdHRoaXMuaW5kZXgrKztcblx0XHRcdGlmIChub2Rlcy5sZW5ndGggPT09IDEpIHtcblx0XHRcdFx0cmV0dXJuIG5vZGVzWzBdO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSBpZiAoIW5vZGVzLmxlbmd0aCkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHR0eXBlOiBKc2VwLlNFUVVFTkNFX0VYUCxcblx0XHRcdFx0XHRleHByZXNzaW9uczogbm9kZXMsXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGVsc2Uge1xuXHRcdFx0dGhpcy50aHJvd0Vycm9yKCdVbmNsb3NlZCAoJyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJlc3BvbnNpYmxlIGZvciBwYXJzaW5nIEFycmF5IGxpdGVyYWxzIGBbMSwgMiwgM11gXG5cdCAqIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IGl0IG5lZWRzIHRvIGdvYmJsZSB0aGUgb3BlbmluZyBicmFja2V0XG5cdCAqIGFuZCB0aGVuIHRyaWVzIHRvIGdvYmJsZSB0aGUgZXhwcmVzc2lvbnMgYXMgYXJndW1lbnRzLlxuXHQgKiBAcmV0dXJucyB7anNlcC5BcnJheUV4cHJlc3Npb259XG5cdCAqL1xuXHRnb2JibGVBcnJheSgpIHtcblx0XHR0aGlzLmluZGV4Kys7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0dHlwZTogSnNlcC5BUlJBWV9FWFAsXG5cdFx0XHRlbGVtZW50czogdGhpcy5nb2JibGVBcmd1bWVudHMoSnNlcC5DQlJBQ0tfQ09ERSlcblx0XHR9O1xuXHR9XG59XG5cbi8vIFN0YXRpYyBmaWVsZHM6XG5jb25zdCBob29rcyA9IG5ldyBIb29rcygpO1xuT2JqZWN0LmFzc2lnbihKc2VwLCB7XG5cdGhvb2tzLFxuXHRwbHVnaW5zOiBuZXcgUGx1Z2lucyhKc2VwKSxcblxuXHQvLyBOb2RlIFR5cGVzXG5cdC8vIC0tLS0tLS0tLS1cblx0Ly8gVGhpcyBpcyB0aGUgZnVsbCBzZXQgb2YgdHlwZXMgdGhhdCBhbnkgSlNFUCBub2RlIGNhbiBiZS5cblx0Ly8gU3RvcmUgdGhlbSBoZXJlIHRvIHNhdmUgc3BhY2Ugd2hlbiBtaW5pZmllZFxuXHRDT01QT1VORDogICAgICAgICdDb21wb3VuZCcsXG5cdFNFUVVFTkNFX0VYUDogICAgJ1NlcXVlbmNlRXhwcmVzc2lvbicsXG5cdElERU5USUZJRVI6ICAgICAgJ0lkZW50aWZpZXInLFxuXHRNRU1CRVJfRVhQOiAgICAgICdNZW1iZXJFeHByZXNzaW9uJyxcblx0TElURVJBTDogICAgICAgICAnTGl0ZXJhbCcsXG5cdFRISVNfRVhQOiAgICAgICAgJ1RoaXNFeHByZXNzaW9uJyxcblx0Q0FMTF9FWFA6ICAgICAgICAnQ2FsbEV4cHJlc3Npb24nLFxuXHRVTkFSWV9FWFA6ICAgICAgICdVbmFyeUV4cHJlc3Npb24nLFxuXHRCSU5BUllfRVhQOiAgICAgICdCaW5hcnlFeHByZXNzaW9uJyxcblx0QVJSQVlfRVhQOiAgICAgICAnQXJyYXlFeHByZXNzaW9uJyxcblxuXHRUQUJfQ09ERTogICAgOSxcblx0TEZfQ09ERTogICAgIDEwLFxuXHRDUl9DT0RFOiAgICAgMTMsXG5cdFNQQUNFX0NPREU6ICAzMixcblx0UEVSSU9EX0NPREU6IDQ2LCAvLyAnLidcblx0Q09NTUFfQ09ERTogIDQ0LCAvLyAnLCdcblx0U1FVT1RFX0NPREU6IDM5LCAvLyBzaW5nbGUgcXVvdGVcblx0RFFVT1RFX0NPREU6IDM0LCAvLyBkb3VibGUgcXVvdGVzXG5cdE9QQVJFTl9DT0RFOiA0MCwgLy8gKFxuXHRDUEFSRU5fQ09ERTogNDEsIC8vIClcblx0T0JSQUNLX0NPREU6IDkxLCAvLyBbXG5cdENCUkFDS19DT0RFOiA5MywgLy8gXVxuXHRRVU1BUktfQ09ERTogNjMsIC8vID9cblx0U0VNQ09MX0NPREU6IDU5LCAvLyA7XG5cdENPTE9OX0NPREU6ICA1OCwgLy8gOlxuXG5cblx0Ly8gT3BlcmF0aW9uc1xuXHQvLyAtLS0tLS0tLS0tXG5cdC8vIFVzZSBhIHF1aWNrbHktYWNjZXNzaWJsZSBtYXAgdG8gc3RvcmUgYWxsIG9mIHRoZSB1bmFyeSBvcGVyYXRvcnNcblx0Ly8gVmFsdWVzIGFyZSBzZXQgdG8gYDFgIChpdCByZWFsbHkgZG9lc24ndCBtYXR0ZXIpXG5cdHVuYXJ5X29wczoge1xuXHRcdCctJzogMSxcblx0XHQnISc6IDEsXG5cdFx0J34nOiAxLFxuXHRcdCcrJzogMVxuXHR9LFxuXG5cdC8vIEFsc28gdXNlIGEgbWFwIGZvciB0aGUgYmluYXJ5IG9wZXJhdGlvbnMgYnV0IHNldCB0aGVpciB2YWx1ZXMgdG8gdGhlaXJcblx0Ly8gYmluYXJ5IHByZWNlZGVuY2UgZm9yIHF1aWNrIHJlZmVyZW5jZSAoaGlnaGVyIG51bWJlciA9IGhpZ2hlciBwcmVjZWRlbmNlKVxuXHQvLyBzZWUgW09yZGVyIG9mIG9wZXJhdGlvbnNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL09wZXJhdG9ycy9PcGVyYXRvcl9QcmVjZWRlbmNlKVxuXHRiaW5hcnlfb3BzOiB7XG5cdFx0J3x8JzogMSwgJyYmJzogMiwgJ3wnOiAzLCAnXic6IDQsICcmJzogNSxcblx0XHQnPT0nOiA2LCAnIT0nOiA2LCAnPT09JzogNiwgJyE9PSc6IDYsXG5cdFx0JzwnOiA3LCAnPic6IDcsICc8PSc6IDcsICc+PSc6IDcsXG5cdFx0Jzw8JzogOCwgJz4+JzogOCwgJz4+Pic6IDgsXG5cdFx0JysnOiA5LCAnLSc6IDksXG5cdFx0JyonOiAxMCwgJy8nOiAxMCwgJyUnOiAxMFxuXHR9LFxuXG5cdC8vIHNldHMgc3BlY2lmaWMgYmluYXJ5X29wcyBhcyByaWdodC1hc3NvY2lhdGl2ZVxuXHRyaWdodF9hc3NvY2lhdGl2ZTogbmV3IFNldCgpLFxuXG5cdC8vIEFkZGl0aW9uYWwgdmFsaWQgaWRlbnRpZmllciBjaGFycywgYXBhcnQgZnJvbSBhLXosIEEtWiBhbmQgMC05IChleGNlcHQgb24gdGhlIHN0YXJ0aW5nIGNoYXIpXG5cdGFkZGl0aW9uYWxfaWRlbnRpZmllcl9jaGFyczogbmV3IFNldChbJyQnLCAnXyddKSxcblxuXHQvLyBMaXRlcmFsc1xuXHQvLyAtLS0tLS0tLS0tXG5cdC8vIFN0b3JlIHRoZSB2YWx1ZXMgdG8gcmV0dXJuIGZvciB0aGUgdmFyaW91cyBsaXRlcmFscyB3ZSBtYXkgZW5jb3VudGVyXG5cdGxpdGVyYWxzOiB7XG5cdFx0J3RydWUnOiB0cnVlLFxuXHRcdCdmYWxzZSc6IGZhbHNlLFxuXHRcdCdudWxsJzogbnVsbFxuXHR9LFxuXG5cdC8vIEV4Y2VwdCBmb3IgYHRoaXNgLCB3aGljaCBpcyBzcGVjaWFsLiBUaGlzIGNvdWxkIGJlIGNoYW5nZWQgdG8gc29tZXRoaW5nIGxpa2UgYCdzZWxmJ2AgYXMgd2VsbFxuXHR0aGlzX3N0cjogJ3RoaXMnLFxufSk7XG5Kc2VwLm1heF91bm9wX2xlbiA9IEpzZXAuZ2V0TWF4S2V5TGVuKEpzZXAudW5hcnlfb3BzKTtcbkpzZXAubWF4X2Jpbm9wX2xlbiA9IEpzZXAuZ2V0TWF4S2V5TGVuKEpzZXAuYmluYXJ5X29wcyk7XG5cbi8vIEJhY2t3YXJkIENvbXBhdGliaWxpdHk6XG5jb25zdCBqc2VwID0gZXhwciA9PiAobmV3IEpzZXAoZXhwcikpLnBhcnNlKCk7XG5jb25zdCBzdGF0aWNNZXRob2RzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoSnNlcCk7XG5zdGF0aWNNZXRob2RzXG5cdC5mb3JFYWNoKChtKSA9PiB7XG5cdFx0aWYgKGpzZXBbbV0gPT09IHVuZGVmaW5lZCAmJiBtICE9PSAncHJvdG90eXBlJykge1xuXHRcdFx0anNlcFttXSA9IEpzZXBbbV07XG5cdFx0fVxuXHR9KTtcbmpzZXAuSnNlcCA9IEpzZXA7IC8vIGFsbG93cyBmb3IgY29uc3QgeyBKc2VwIH0gPSByZXF1aXJlKCdqc2VwJyk7XG5cbmNvbnN0IENPTkRJVElPTkFMX0VYUCA9ICdDb25kaXRpb25hbEV4cHJlc3Npb24nO1xuXG52YXIgdGVybmFyeSA9IHtcblx0bmFtZTogJ3Rlcm5hcnknLFxuXG5cdGluaXQoanNlcCkge1xuXHRcdC8vIFRlcm5hcnkgZXhwcmVzc2lvbjogdGVzdCA/IGNvbnNlcXVlbnQgOiBhbHRlcm5hdGVcblx0XHRqc2VwLmhvb2tzLmFkZCgnYWZ0ZXItZXhwcmVzc2lvbicsIGZ1bmN0aW9uIGdvYmJsZVRlcm5hcnkoZW52KSB7XG5cdFx0XHRpZiAoZW52Lm5vZGUgJiYgdGhpcy5jb2RlID09PSBqc2VwLlFVTUFSS19DT0RFKSB7XG5cdFx0XHRcdHRoaXMuaW5kZXgrKztcblx0XHRcdFx0Y29uc3QgdGVzdCA9IGVudi5ub2RlO1xuXHRcdFx0XHRjb25zdCBjb25zZXF1ZW50ID0gdGhpcy5nb2JibGVFeHByZXNzaW9uKCk7XG5cblx0XHRcdFx0aWYgKCFjb25zZXF1ZW50KSB7XG5cdFx0XHRcdFx0dGhpcy50aHJvd0Vycm9yKCdFeHBlY3RlZCBleHByZXNzaW9uJyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLmdvYmJsZVNwYWNlcygpO1xuXG5cdFx0XHRcdGlmICh0aGlzLmNvZGUgPT09IGpzZXAuQ09MT05fQ09ERSkge1xuXHRcdFx0XHRcdHRoaXMuaW5kZXgrKztcblx0XHRcdFx0XHRjb25zdCBhbHRlcm5hdGUgPSB0aGlzLmdvYmJsZUV4cHJlc3Npb24oKTtcblxuXHRcdFx0XHRcdGlmICghYWx0ZXJuYXRlKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnRocm93RXJyb3IoJ0V4cGVjdGVkIGV4cHJlc3Npb24nKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZW52Lm5vZGUgPSB7XG5cdFx0XHRcdFx0XHR0eXBlOiBDT05ESVRJT05BTF9FWFAsXG5cdFx0XHRcdFx0XHR0ZXN0LFxuXHRcdFx0XHRcdFx0Y29uc2VxdWVudCxcblx0XHRcdFx0XHRcdGFsdGVybmF0ZSxcblx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0Ly8gY2hlY2sgZm9yIG9wZXJhdG9ycyBvZiBoaWdoZXIgcHJpb3JpdHkgdGhhbiB0ZXJuYXJ5IChpLmUuIGFzc2lnbm1lbnQpXG5cdFx0XHRcdFx0Ly8ganNlcCBzZXRzIHx8IGF0IDEsIGFuZCBhc3NpZ25tZW50IGF0IDAuOSwgYW5kIGNvbmRpdGlvbmFsIHNob3VsZCBiZSBiZXR3ZWVuIHRoZW1cblx0XHRcdFx0XHRpZiAodGVzdC5vcGVyYXRvciAmJiBqc2VwLmJpbmFyeV9vcHNbdGVzdC5vcGVyYXRvcl0gPD0gMC45KSB7XG5cdFx0XHRcdFx0XHRsZXQgbmV3VGVzdCA9IHRlc3Q7XG5cdFx0XHRcdFx0XHR3aGlsZSAobmV3VGVzdC5yaWdodC5vcGVyYXRvciAmJiBqc2VwLmJpbmFyeV9vcHNbbmV3VGVzdC5yaWdodC5vcGVyYXRvcl0gPD0gMC45KSB7XG5cdFx0XHRcdFx0XHRcdG5ld1Rlc3QgPSBuZXdUZXN0LnJpZ2h0O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0ZW52Lm5vZGUudGVzdCA9IG5ld1Rlc3QucmlnaHQ7XG5cdFx0XHRcdFx0XHRuZXdUZXN0LnJpZ2h0ID0gZW52Lm5vZGU7XG5cdFx0XHRcdFx0XHRlbnYubm9kZSA9IHRlc3Q7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMudGhyb3dFcnJvcignRXhwZWN0ZWQgOicpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0sXG59O1xuXG4vLyBBZGQgZGVmYXVsdCBwbHVnaW5zOlxuXG5qc2VwLnBsdWdpbnMucmVnaXN0ZXIodGVybmFyeSk7XG5cbmV4cG9ydCB7IEpzZXAsIGpzZXAgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IHsgUmVuZGVySW5mbywgRGF0YXNldCB9IGZyb20gXCIuL2RhdGFcIjtcbmltcG9ydCAqIGFzIGQzIGZyb20gXCJkM1wiO1xuaW1wb3J0IHsgaXNNb21lbnQsIE1vbWVudCB9IGZyb20gXCJtb21lbnRcIjtcbmltcG9ydCAqIGFzIGhlbHBlciBmcm9tIFwiLi9oZWxwZXJcIjtcbmltcG9ydCBqc2VwIGZyb20gXCJqc2VwXCI7XG5pbXBvcnQgeyBzcHJpbnRmIH0gZnJvbSBcInNwcmludGYtanNcIjtcblxuLy8gRnVuY3Rpb24gYWNjZXB0IGRhdGFzZXRJZCBhcyBmaXJzdCBhcmd1bWVudFxudHlwZSBGbkRhdGFzZXRUb1ZhbHVlID0gKFxuICAgIGRhdGFzZXQ6IERhdGFzZXQsXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mb1xuKSA9PiBudW1iZXIgfCBNb21lbnQgfCBzdHJpbmc7XG50eXBlIEZuRGF0YXNldFRvRGF0YXNldCA9IChcbiAgICBkYXRhc2V0OiBEYXRhc2V0LFxuICAgIGFyZ3M6IEFycmF5PG51bWJlciB8IERhdGFzZXQ+LFxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm9cbikgPT4gRGF0YXNldCB8IHN0cmluZztcbnR5cGUgRm5VbmlyeU9wID0gKFxuICAgIHU6IG51bWJlciB8IE1vbWVudCB8IERhdGFzZXRcbikgPT4gbnVtYmVyIHwgTW9tZW50IHwgRGF0YXNldCB8IHN0cmluZztcbnR5cGUgRm5CaW5hcnlPcCA9IChcbiAgICBsOiBudW1iZXIgfCBNb21lbnQgfCBEYXRhc2V0LFxuICAgIHI6IG51bWJlciB8IE1vbWVudCB8IERhdGFzZXRcbikgPT4gbnVtYmVyIHwgTW9tZW50IHwgRGF0YXNldCB8IHN0cmluZztcblxuaW50ZXJmYWNlIEZuTWFwRGF0YXNldFRvVmFsdWUge1xuICAgIFtrZXk6IHN0cmluZ106IEZuRGF0YXNldFRvVmFsdWU7XG59XG5cbmludGVyZmFjZSBGbk1hcERhdGFzZXRUb0RhdGFzZXQge1xuICAgIFtrZXk6IHN0cmluZ106IEZuRGF0YXNldFRvRGF0YXNldDtcbn1cblxuaW50ZXJmYWNlIEZuTWFwQmluYXJ5T3Age1xuICAgIFtrZXk6IHN0cmluZ106IEZuQmluYXJ5T3A7XG59XG5cbmludGVyZmFjZSBGbk1hcFVuaXJ5T3Age1xuICAgIFtrZXk6IHN0cmluZ106IEZuVW5pcnlPcDtcbn1cblxuZnVuY3Rpb24gY2hlY2tEaXZpc29yKGRpdmlzb3I6IGFueSkge1xuICAgIC8vIGNvbnNvbGUubG9nKFwiY2hlY2tpbmcgZGl2aW9yXCIpO1xuICAgIGlmICh0eXBlb2YgZGl2aXNvciA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICBpZiAoZGl2aXNvciA9PT0gMCkgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSBpZiAoZGl2aXNvciBpbnN0YW5jZW9mIERhdGFzZXQpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgZGl2aXNvci5nZXRWYWx1ZXMoKS5zb21lKGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHYgPT09IDA7XG4gICAgICAgICAgICB9KVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gY2hlY2tCaW5hcnlPcGVyYW50VHlwZShsZWZ0OiBhbnksIHJpZ2h0OiBhbnkpIHtcbiAgICBpZiAodHlwZW9mIGxlZnQgPT09IFwic3RyaW5nXCIpIHJldHVybiBsZWZ0O1xuICAgIGlmICh0eXBlb2YgcmlnaHQgPT09IFwic3RyaW5nXCIpIHJldHVybiByaWdodDtcbiAgICBpZiAoXG4gICAgICAgIHR5cGVvZiBsZWZ0ICE9PSBcIm51bWJlclwiICYmXG4gICAgICAgICF3aW5kb3cubW9tZW50LmlzTW9tZW50KGxlZnQpICYmXG4gICAgICAgICEobGVmdCBpbnN0YW5jZW9mIERhdGFzZXQpXG4gICAgKSB7XG4gICAgICAgIHJldHVybiBcIkVycm9yOiBpbnZhbGlkIG9wZXJhbnQgdHlwZVwiO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICAgIHR5cGVvZiByaWdodCAhPT0gXCJudW1iZXJcIiAmJlxuICAgICAgICAhd2luZG93Lm1vbWVudC5pc01vbWVudChyaWdodCkgJiZcbiAgICAgICAgIShyaWdodCBpbnN0YW5jZW9mIERhdGFzZXQpXG4gICAgKSB7XG4gICAgICAgIHJldHVybiBcIkVycm9yOiBpbnZhbGlkZSBvcGVyYW50IHR5cGVcIjtcbiAgICB9XG4gICAgcmV0dXJuIFwiXCI7XG59XG5cbmNvbnN0IGZuTWFwRGF0YXNldFRvVmFsdWU6IEZuTWFwRGF0YXNldFRvVmFsdWUgPSB7XG4gICAgLy8gbWluIHZhbHVlIG9mIGEgZGF0YXNldFxuICAgIG1pbjogZnVuY3Rpb24gKGRhdGFzZXQsIHJlbmRlckluZm8pIHtcbiAgICAgICAgLy8gcmV0dXJuIG51bWJlclxuICAgICAgICByZXR1cm4gZDMubWluKGRhdGFzZXQuZ2V0VmFsdWVzKCkpO1xuICAgIH0sXG4gICAgLy8gdGhlIGxhdGVzdCBkYXRlIHdpdGggbWluIHZhbHVlXG4gICAgbWluRGF0ZTogZnVuY3Rpb24gKGRhdGFzZXQsIHJlbmRlckluZm8pIHtcbiAgICAgICAgLy8gcmV0dXJuIE1vbWVudFxuICAgICAgICBsZXQgbWluID0gZDMubWluKGRhdGFzZXQuZ2V0VmFsdWVzKCkpO1xuICAgICAgICBpZiAoTnVtYmVyLmlzTnVtYmVyKG1pbikpIHtcbiAgICAgICAgICAgIGxldCBhcnJheURhdGFzZXQgPSBBcnJheS5mcm9tKGRhdGFzZXQpO1xuICAgICAgICAgICAgZm9yIChsZXQgZGF0YVBvaW50IG9mIGFycmF5RGF0YXNldC5yZXZlcnNlKCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YVBvaW50LnZhbHVlICE9PSBudWxsICYmIGRhdGFQb2ludC52YWx1ZSA9PT0gbWluKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhUG9pbnQuZGF0ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFwiRXJyb3I6IG1pbiBub3QgZm91bmRcIjtcbiAgICB9LFxuICAgIC8vIG1heCB2YWx1ZSBvZiBhIGRhdGFzZXRcbiAgICBtYXg6IGZ1bmN0aW9uIChkYXRhc2V0LCByZW5kZXJJbmZvKSB7XG4gICAgICAgIC8vIHJldHVybiBudW1iZXJcbiAgICAgICAgcmV0dXJuIGQzLm1heChkYXRhc2V0LmdldFZhbHVlcygpKTtcbiAgICB9LFxuICAgIC8vIHRoZSBsYXRlc3QgZGF0ZSB3aXRoIG1heCB2YWx1ZVxuICAgIG1heERhdGU6IGZ1bmN0aW9uIChkYXRhc2V0LCByZW5kZXJJbmZvKSB7XG4gICAgICAgIC8vIHJldHVybiBNb21lbnRcbiAgICAgICAgbGV0IG1heCA9IGQzLm1heChkYXRhc2V0LmdldFZhbHVlcygpKTtcbiAgICAgICAgaWYgKE51bWJlci5pc051bWJlcihtYXgpKSB7XG4gICAgICAgICAgICBsZXQgYXJyYXlEYXRhc2V0ID0gQXJyYXkuZnJvbShkYXRhc2V0KTtcbiAgICAgICAgICAgIGZvciAobGV0IGRhdGFQb2ludCBvZiBhcnJheURhdGFzZXQucmV2ZXJzZSgpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGFQb2ludC52YWx1ZSAhPT0gbnVsbCAmJiBkYXRhUG9pbnQudmFsdWUgPT09IG1heCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YVBvaW50LmRhdGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBcIkVycm9yOiBtYXggbm90IGZvdW5kXCI7XG4gICAgfSxcbiAgICAvLyBzdGFydCBkYXRlIG9mIGEgZGF0YXNldFxuICAgIC8vIGlmIGRhdGFzZXRJZCBub3QgZm91bmQsIHJldHVybiBvdmVyYWxsIHN0YXJ0RGF0ZVxuICAgIHN0YXJ0RGF0ZTogZnVuY3Rpb24gKGRhdGFzZXQsIHJlbmRlckluZm8pIHtcbiAgICAgICAgLy8gcmV0dXJuIE1vbWVudFxuICAgICAgICBpZiAoZGF0YXNldCkge1xuICAgICAgICAgICAgbGV0IHN0YXJ0RGF0ZSA9IGRhdGFzZXQuZ2V0U3RhcnREYXRlKCk7XG4gICAgICAgICAgICBpZiAoc3RhcnREYXRlICYmIHN0YXJ0RGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RhcnREYXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZW5kZXJJbmZvLnN0YXJ0RGF0ZTtcbiAgICB9LFxuICAgIC8vIGVuZCBkYXRlIG9mIGEgZGF0YXNldFxuICAgIC8vIGlmIGRhdGFzZXRJZCBub3QgZm91bmQsIHJldHVybiBvdmVyYWxsIGVuZERhdGVcbiAgICBlbmREYXRlOiBmdW5jdGlvbiAoZGF0YXNldCwgcmVuZGVySW5mbykge1xuICAgICAgICAvLyByZXR1cm4gTW9tZW50XG4gICAgICAgIGlmIChkYXRhc2V0KSB7XG4gICAgICAgICAgICBsZXQgZW5kRGF0ZSA9IGRhdGFzZXQuZ2V0RW5kRGF0ZSgpO1xuICAgICAgICAgICAgaWYgKGVuZERhdGUgJiYgZW5kRGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZW5kRGF0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVuZGVySW5mby5lbmREYXRlO1xuICAgIH0sXG4gICAgLy8gc3VtIG9mIGFsbCB2YWx1ZXMgaW4gYSBkYXRhc2V0XG4gICAgc3VtOiBmdW5jdGlvbiAoZGF0YXNldCwgcmVuZGVySW5mbykge1xuICAgICAgICAvLyByZXR1cm4gbnVtYmVyXG4gICAgICAgIHJldHVybiBkMy5zdW0oZGF0YXNldC5nZXRWYWx1ZXMoKSk7XG4gICAgfSxcbiAgICBjb3VudDogZnVuY3Rpb24gKGRhdGFzZXQsIHJlbmRlckluZm8pIHtcbiAgICAgICAgcmV0dXJuIFwiRXJyb3I6IGRlcHJlY2F0ZWQgZnVuY3Rpb24gJ2NvdW50J1wiO1xuICAgIH0sXG4gICAgLy8gbnVtYmVyIG9mIG9jY3VycmVuY2VzIG9mIGEgdGFyZ2V0IGluIGEgZGF0YXNldFxuICAgIG51bVRhcmdldHM6IGZ1bmN0aW9uIChkYXRhc2V0LCByZW5kZXJJbmZvKSB7XG4gICAgICAgIC8vIHJldHVybiBudW1iZXJcbiAgICAgICAgcmV0dXJuIGRhdGFzZXQuZ2V0TnVtVGFyZ2V0cygpO1xuICAgIH0sXG4gICAgZGF5czogZnVuY3Rpb24gKGRhdGFzZXQsIHJlbmRlckluZm8pIHtcbiAgICAgICAgcmV0dXJuIFwiRXJyb3I6IGRlcHJlY2F0ZWQgZnVuY3Rpb24gJ2RheXMnXCI7XG4gICAgfSxcbiAgICBudW1EYXlzOiBmdW5jdGlvbiAoZGF0YXNldCwgcmVuZGVySW5mbykge1xuICAgICAgICAvLyByZXR1cm4gbnVtYmVyXG4gICAgICAgIHJldHVybiBkYXRhc2V0LmdldExlbmd0aCgpO1xuICAgIH0sXG4gICAgbnVtRGF5c0hhdmluZ0RhdGE6IGZ1bmN0aW9uIChkYXRhc2V0LCByZW5kZXJJbmZvKSB7XG4gICAgICAgIC8vIHJldHVybiBudW1iZXJcbiAgICAgICAgcmV0dXJuIGRhdGFzZXQuZ2V0TGVuZ3RoTm90TnVsbCgpO1xuICAgIH0sXG4gICAgbWF4U3RyZWFrOiBmdW5jdGlvbiAoZGF0YXNldCwgcmVuZGVySW5mbykge1xuICAgICAgICAvLyByZXR1cm4gbnVtYmVyXG4gICAgICAgIGxldCBzdHJlYWsgPSAwO1xuICAgICAgICBsZXQgbWF4U3RyZWFrID0gMDtcbiAgICAgICAgZm9yIChsZXQgZGF0YVBvaW50IG9mIGRhdGFzZXQpIHtcbiAgICAgICAgICAgIGlmIChkYXRhUG9pbnQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICBzdHJlYWsrKztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3RyZWFrID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzdHJlYWsgPj0gbWF4U3RyZWFrKSB7XG4gICAgICAgICAgICAgICAgbWF4U3RyZWFrID0gc3RyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYXhTdHJlYWs7XG4gICAgfSxcbiAgICBtYXhTdHJlYWtTdGFydDogZnVuY3Rpb24gKGRhdGFzZXQsIHJlbmRlckluZm8pIHtcbiAgICAgICAgLy8gcmV0dXJuIE1vbWVudFxuICAgICAgICBsZXQgc3RyZWFrID0gMDtcbiAgICAgICAgbGV0IG1heFN0cmVhayA9IDA7XG4gICAgICAgIGxldCBzdHJlYWtTdGFydDogTW9tZW50ID0gbnVsbDtcbiAgICAgICAgbGV0IG1heFN0cmVha1N0YXJ0OiBNb21lbnQgPSBudWxsO1xuICAgICAgICBpZiAoZGF0YXNldCkge1xuICAgICAgICAgICAgZm9yIChsZXQgZGF0YVBvaW50IG9mIGRhdGFzZXQpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YVBvaW50LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYWsgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVha1N0YXJ0ID0gZGF0YVBvaW50LmRhdGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgc3RyZWFrKys7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyZWFrID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHN0cmVhayA+PSBtYXhTdHJlYWspIHtcbiAgICAgICAgICAgICAgICAgICAgbWF4U3RyZWFrID0gc3RyZWFrO1xuICAgICAgICAgICAgICAgICAgICBtYXhTdHJlYWtTdGFydCA9IHN0cmVha1N0YXJ0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWF4U3RyZWFrU3RhcnQ7XG4gICAgfSxcbiAgICBtYXhTdHJlYWtFbmQ6IGZ1bmN0aW9uIChkYXRhc2V0LCByZW5kZXJJbmZvKSB7XG4gICAgICAgIC8vIHJldHVybiBNb21lbnRcbiAgICAgICAgbGV0IHN0cmVhayA9IDA7XG4gICAgICAgIGxldCBtYXhTdHJlYWsgPSAwO1xuICAgICAgICBsZXQgc3RyZWFrRW5kOiBNb21lbnQgPSBudWxsO1xuICAgICAgICBsZXQgbWF4U3RyZWFrRW5kOiBNb21lbnQgPSBudWxsO1xuICAgICAgICBpZiAoZGF0YXNldCkge1xuICAgICAgICAgICAgbGV0IGFycmF5RGF0YXNldCA9IEFycmF5LmZyb20oZGF0YXNldCk7XG4gICAgICAgICAgICBmb3IgKGxldCBpbmQgPSAwOyBpbmQgPCBhcnJheURhdGFzZXQubGVuZ3RoOyBpbmQrKykge1xuICAgICAgICAgICAgICAgIGxldCBwb2ludCA9IGFycmF5RGF0YXNldFtpbmRdO1xuICAgICAgICAgICAgICAgIGxldCBuZXh0UG9pbnQgPSBudWxsO1xuICAgICAgICAgICAgICAgIGlmIChpbmQgPCBhcnJheURhdGFzZXQubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICBuZXh0UG9pbnQgPSBhcnJheURhdGFzZXRbaW5kICsgMV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChwb2ludC52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBzdHJlYWsrKztcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFuZXh0UG9pbnQ/LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYWtFbmQgPSBwb2ludC5kYXRlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyZWFrID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHN0cmVhayA+PSBtYXhTdHJlYWspIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coc3RyZWFrKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2cobWF4U3RyZWFrKTtcbiAgICAgICAgICAgICAgICAgICAgbWF4U3RyZWFrID0gc3RyZWFrO1xuICAgICAgICAgICAgICAgICAgICBtYXhTdHJlYWtFbmQgPSBzdHJlYWtFbmQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYXhTdHJlYWtFbmQ7XG4gICAgfSxcbiAgICBtYXhCcmVha3M6IGZ1bmN0aW9uIChkYXRhc2V0LCByZW5kZXJJbmZvKSB7XG4gICAgICAgIC8vIHJldHVybiBudW1iZXJcbiAgICAgICAgbGV0IGJyZWFrcyA9IDA7XG4gICAgICAgIGxldCBtYXhCcmVha3MgPSAwO1xuICAgICAgICBmb3IgKGxldCBkYXRhUG9pbnQgb2YgZGF0YXNldCkge1xuICAgICAgICAgICAgaWYgKCFkYXRhUG9pbnQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICBicmVha3MrKztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYnJlYWtzID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChicmVha3MgPiBtYXhCcmVha3MpIHtcbiAgICAgICAgICAgICAgICBtYXhCcmVha3MgPSBicmVha3M7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1heEJyZWFrcztcbiAgICB9LFxuICAgIG1heEJyZWFrc1N0YXJ0OiBmdW5jdGlvbiAoZGF0YXNldCwgcmVuZGVySW5mbykge1xuICAgICAgICAvLyByZXR1cm4gTW9tZW50XG4gICAgICAgIGxldCBicmVha3MgPSAwO1xuICAgICAgICBsZXQgbWF4QnJlYWtzID0gMDtcbiAgICAgICAgbGV0IGJyZWFrc1N0YXJ0OiBNb21lbnQgPSBudWxsO1xuICAgICAgICBsZXQgbWF4QnJlYWtzU3RhcnQ6IE1vbWVudCA9IG51bGw7XG4gICAgICAgIGlmIChkYXRhc2V0KSB7XG4gICAgICAgICAgICBmb3IgKGxldCBkYXRhUG9pbnQgb2YgZGF0YXNldCkge1xuICAgICAgICAgICAgICAgIGlmICghZGF0YVBvaW50LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChicmVha3MgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrc1N0YXJ0ID0gZGF0YVBvaW50LmRhdGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWtzKys7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWtzID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGJyZWFrcyA+PSBtYXhCcmVha3MpIHtcbiAgICAgICAgICAgICAgICAgICAgbWF4QnJlYWtzID0gYnJlYWtzO1xuICAgICAgICAgICAgICAgICAgICBtYXhCcmVha3NTdGFydCA9IGJyZWFrc1N0YXJ0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWF4QnJlYWtzU3RhcnQ7XG4gICAgfSxcbiAgICBtYXhCcmVha3NFbmQ6IGZ1bmN0aW9uIChkYXRhc2V0LCByZW5kZXJJbmZvKSB7XG4gICAgICAgIC8vIHJldHVybiBNb21lbnRcbiAgICAgICAgbGV0IGJyZWFrcyA9IDA7XG4gICAgICAgIGxldCBtYXhCcmVha3MgPSAwO1xuICAgICAgICBsZXQgYnJlYWtzRW5kOiBNb21lbnQgPSBudWxsO1xuICAgICAgICBsZXQgbWF4QnJlYWtzRW5kOiBNb21lbnQgPSBudWxsO1xuICAgICAgICBpZiAoZGF0YXNldCkge1xuICAgICAgICAgICAgbGV0IGFycmF5RGF0YXNldCA9IEFycmF5LmZyb20oZGF0YXNldCk7XG4gICAgICAgICAgICBmb3IgKGxldCBpbmQgPSAwOyBpbmQgPCBhcnJheURhdGFzZXQubGVuZ3RoOyBpbmQrKykge1xuICAgICAgICAgICAgICAgIGxldCBwb2ludCA9IGFycmF5RGF0YXNldFtpbmRdO1xuICAgICAgICAgICAgICAgIGxldCBuZXh0UG9pbnQgPSBudWxsO1xuICAgICAgICAgICAgICAgIGlmIChpbmQgPCBhcnJheURhdGFzZXQubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICBuZXh0UG9pbnQgPSBhcnJheURhdGFzZXRbaW5kICsgMV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghcG9pbnQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWtzKys7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0UG9pbnQ/LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVha3NFbmQgPSBwb2ludC5kYXRlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWtzID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGJyZWFrcyA+PSBtYXhCcmVha3MpIHtcbiAgICAgICAgICAgICAgICAgICAgbWF4QnJlYWtzID0gYnJlYWtzO1xuICAgICAgICAgICAgICAgICAgICBtYXhCcmVha3NFbmQgPSBicmVha3NFbmQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYXhCcmVha3NFbmQ7XG4gICAgfSxcbiAgICBsYXN0U3RyZWFrOiBmdW5jdGlvbiAoZGF0YXNldCwgcmVuZGVySW5mbykge1xuICAgICAgICByZXR1cm4gXCJFcnJvcjogZGVwcmVjYXRlZCBmdW5jdGlvbiAnbGFzdFN0cmVhaydcIjtcbiAgICB9LFxuICAgIGN1cnJlbnRTdHJlYWs6IGZ1bmN0aW9uIChkYXRhc2V0LCByZW5kZXJJbmZvKSB7XG4gICAgICAgIC8vIHJldHVybiBudW1iZXJcbiAgICAgICAgbGV0IGN1cnJlbnRTdHJlYWsgPSAwO1xuICAgICAgICBpZiAoZGF0YXNldCkge1xuICAgICAgICAgICAgbGV0IGFycmF5RGF0YXNldCA9IEFycmF5LmZyb20oZGF0YXNldCk7XG4gICAgICAgICAgICBmb3IgKGxldCBpbmQgPSBhcnJheURhdGFzZXQubGVuZ3RoIC0gMTsgaW5kID49IDA7IGluZC0tKSB7XG4gICAgICAgICAgICAgICAgbGV0IHBvaW50ID0gYXJyYXlEYXRhc2V0W2luZF07XG4gICAgICAgICAgICAgICAgaWYgKCFwb2ludC52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50U3RyZWFrKys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjdXJyZW50U3RyZWFrO1xuICAgIH0sXG4gICAgY3VycmVudFN0cmVha1N0YXJ0OiBmdW5jdGlvbiAoZGF0YXNldCwgcmVuZGVySW5mbykge1xuICAgICAgICAvLyByZXR1cm4gTW9tZW50XG4gICAgICAgIGxldCBjdXJyZW50U3RyZWFrID0gMDtcbiAgICAgICAgbGV0IGN1cnJlbnRTdHJlYWtTdGFydDogTW9tZW50ID0gbnVsbDtcbiAgICAgICAgaWYgKGRhdGFzZXQpIHtcbiAgICAgICAgICAgIGxldCBhcnJheURhdGFzZXQgPSBBcnJheS5mcm9tKGRhdGFzZXQpO1xuICAgICAgICAgICAgZm9yIChsZXQgaW5kID0gYXJyYXlEYXRhc2V0Lmxlbmd0aCAtIDE7IGluZCA+PSAwOyBpbmQtLSkge1xuICAgICAgICAgICAgICAgIGxldCBwb2ludCA9IGFycmF5RGF0YXNldFtpbmRdO1xuICAgICAgICAgICAgICAgIGlmIChpbmQgPCBhcnJheURhdGFzZXQubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50U3RyZWFrU3RhcnQgPSBhcnJheURhdGFzZXRbaW5kICsgMV0uZGF0ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFwb2ludC52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50U3RyZWFrKys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGN1cnJlbnRTdHJlYWtTdGFydCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiRXJyb3I6IGFic2Vuc2VcIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3VycmVudFN0cmVha1N0YXJ0O1xuICAgIH0sXG4gICAgY3VycmVudFN0cmVha0VuZDogZnVuY3Rpb24gKGRhdGFzZXQsIHJlbmRlckluZm8pIHtcbiAgICAgICAgLy8gcmV0dXJuIE1vbWVudFxuICAgICAgICBsZXQgY3VycmVudFN0cmVhayA9IDA7XG4gICAgICAgIGxldCBjdXJyZW50U3RyZWFrRW5kOiBNb21lbnQgPSBudWxsO1xuICAgICAgICBpZiAoZGF0YXNldCkge1xuICAgICAgICAgICAgbGV0IGFycmF5RGF0YXNldCA9IEFycmF5LmZyb20oZGF0YXNldCk7XG4gICAgICAgICAgICBmb3IgKGxldCBpbmQgPSBhcnJheURhdGFzZXQubGVuZ3RoIC0gMTsgaW5kID49IDA7IGluZC0tKSB7XG4gICAgICAgICAgICAgICAgbGV0IHBvaW50ID0gYXJyYXlEYXRhc2V0W2luZF07XG4gICAgICAgICAgICAgICAgaWYgKCFwb2ludC52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudFN0cmVhayA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFN0cmVha0VuZCA9IHBvaW50LmRhdGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFN0cmVhaysrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjdXJyZW50U3RyZWFrRW5kID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJFcnJvcjogYWJzZW5zZVwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjdXJyZW50U3RyZWFrRW5kO1xuICAgIH0sXG4gICAgY3VycmVudEJyZWFrczogZnVuY3Rpb24gKGRhdGFzZXQsIHJlbmRlckluZm8pIHtcbiAgICAgICAgLy8gcmV0dXJuIG51bWJlclxuICAgICAgICBsZXQgY3VycmVudEJyZWFrcyA9IDA7XG4gICAgICAgIGlmIChkYXRhc2V0KSB7XG4gICAgICAgICAgICBsZXQgYXJyYXlEYXRhc2V0ID0gQXJyYXkuZnJvbShkYXRhc2V0KTtcbiAgICAgICAgICAgIGZvciAobGV0IGluZCA9IGFycmF5RGF0YXNldC5sZW5ndGggLSAxOyBpbmQgPj0gMDsgaW5kLS0pIHtcbiAgICAgICAgICAgICAgICBsZXQgcG9pbnQgPSBhcnJheURhdGFzZXRbaW5kXTtcbiAgICAgICAgICAgICAgICBpZiAoIXBvaW50LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRCcmVha3MrKztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGN1cnJlbnRCcmVha3M7XG4gICAgfSxcbiAgICBjdXJyZW50QnJlYWtzU3RhcnQ6IGZ1bmN0aW9uIChkYXRhc2V0LCByZW5kZXJJbmZvKSB7XG4gICAgICAgIC8vIHJldHVybiBNb21lbnRcbiAgICAgICAgbGV0IGN1cnJlbnRCcmVha3MgPSAwO1xuICAgICAgICBsZXQgY3VycmVudEJyZWFrc1N0YXJ0OiBNb21lbnQgPSBudWxsO1xuICAgICAgICBpZiAoZGF0YXNldCkge1xuICAgICAgICAgICAgbGV0IGFycmF5RGF0YXNldCA9IEFycmF5LmZyb20oZGF0YXNldCk7XG4gICAgICAgICAgICBmb3IgKGxldCBpbmQgPSBhcnJheURhdGFzZXQubGVuZ3RoIC0gMTsgaW5kID49IDA7IGluZC0tKSB7XG4gICAgICAgICAgICAgICAgbGV0IHBvaW50ID0gYXJyYXlEYXRhc2V0W2luZF07XG4gICAgICAgICAgICAgICAgaWYgKGluZCA8IGFycmF5RGF0YXNldC5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRCcmVha3NTdGFydCA9IGFycmF5RGF0YXNldFtpbmQgKyAxXS5kYXRlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIXBvaW50LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRCcmVha3MrKztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY3VycmVudEJyZWFrc1N0YXJ0ID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJFcnJvcjogYWJzZW5zZVwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjdXJyZW50QnJlYWtzU3RhcnQ7XG4gICAgfSxcbiAgICBjdXJyZW50QnJlYWtzRW5kOiBmdW5jdGlvbiAoZGF0YXNldCwgcmVuZGVySW5mbykge1xuICAgICAgICAvLyByZXR1cm4gTW9tZW50XG4gICAgICAgIGxldCBjdXJyZW50QnJlYWtzID0gMDtcbiAgICAgICAgbGV0IGN1cnJlbnRCcmVha3NFbmQ6IE1vbWVudCA9IG51bGw7XG4gICAgICAgIGlmIChkYXRhc2V0KSB7XG4gICAgICAgICAgICBsZXQgYXJyYXlEYXRhc2V0ID0gQXJyYXkuZnJvbShkYXRhc2V0KTtcbiAgICAgICAgICAgIGZvciAobGV0IGluZCA9IGFycmF5RGF0YXNldC5sZW5ndGggLSAxOyBpbmQgPj0gMDsgaW5kLS0pIHtcbiAgICAgICAgICAgICAgICBsZXQgcG9pbnQgPSBhcnJheURhdGFzZXRbaW5kXTtcbiAgICAgICAgICAgICAgICBpZiAoIXBvaW50LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50QnJlYWtzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50QnJlYWtzRW5kID0gcG9pbnQuZGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50QnJlYWtzKys7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGN1cnJlbnRCcmVha3NFbmQgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBcIkVycm9yOiBhYnNlbnNlXCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGN1cnJlbnRCcmVha3NFbmQ7XG4gICAgfSxcbiAgICBhdmVyYWdlOiBmdW5jdGlvbiAoZGF0YXNldCwgcmVuZGVySW5mbykge1xuICAgICAgICAvLyByZXR1cm4gbnVtYmVyXG4gICAgICAgIGxldCBjb3VudE5vdE51bGwgPSBkYXRhc2V0LmdldExlbmd0aE5vdE51bGwoKTtcbiAgICAgICAgaWYgKCFjaGVja0Rpdmlzb3IoY291bnROb3ROdWxsKSkge1xuICAgICAgICAgICAgcmV0dXJuIFwiRXJyb3I6IGRpdmlkZSBieSB6ZXJvIGluIGV4cHJlc3Npb25cIjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgc3VtID0gZDMuc3VtKGRhdGFzZXQuZ2V0VmFsdWVzKCkpO1xuICAgICAgICByZXR1cm4gc3VtIC8gY291bnROb3ROdWxsO1xuICAgIH0sXG4gICAgbWVkaWFuOiBmdW5jdGlvbiAoZGF0YXNldCwgcmVuZGVySW5mbykge1xuICAgICAgICAvLyByZXR1cm4gbnVtYmVyXG4gICAgICAgIHJldHVybiBkMy5tZWRpYW4oZGF0YXNldC5nZXRWYWx1ZXMoKSk7XG4gICAgfSxcbiAgICB2YXJpYW5jZTogZnVuY3Rpb24gKGRhdGFzZXQsIHJlbmRlckluZm8pIHtcbiAgICAgICAgLy8gcmV0dXJuIG51bWJlclxuICAgICAgICByZXR1cm4gZDMudmFyaWFuY2UoZGF0YXNldC5nZXRWYWx1ZXMoKSk7XG4gICAgfSxcbn07XG5cbmNvbnN0IGZuTWFwVW5pcnlPcDogRm5NYXBVbmlyeU9wID0ge1xuICAgIFwiLVwiOiBmdW5jdGlvbiAodSkge1xuICAgICAgICBpZiAodHlwZW9mIHUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHJldHVybiAtMSAqIHU7XG4gICAgICAgIH0gZWxzZSBpZiAodSBpbnN0YW5jZW9mIERhdGFzZXQpIHtcbiAgICAgICAgICAgIGxldCB0bXBEYXRhc2V0ID0gdS5jbG9uZVRvVG1wRGF0YXNldCgpO1xuICAgICAgICAgICAgdG1wRGF0YXNldC5nZXRWYWx1ZXMoKS5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGFycmF5KSB7XG4gICAgICAgICAgICAgICAgaWYgKGFycmF5W2luZGV4XSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRleF0gPSAtMSAqIHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdG1wRGF0YXNldC5yZWNhbGN1bGF0ZU1pbk1heCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRtcERhdGFzZXQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFwiRXJyb3I6IHVua25vd24gb3BlcmF0aW9uIGZvciAnLSdcIjtcbiAgICB9LFxuICAgIFwiK1wiOiBmdW5jdGlvbiAodSkge1xuICAgICAgICBpZiAodHlwZW9mIHUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB1O1xuICAgICAgICB9IGVsc2UgaWYgKHUgaW5zdGFuY2VvZiBEYXRhc2V0KSB7XG4gICAgICAgICAgICBsZXQgdG1wRGF0YXNldCA9IHUuY2xvbmVUb1RtcERhdGFzZXQoKTtcbiAgICAgICAgICAgIHJldHVybiB0bXBEYXRhc2V0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBcIkVycm9yOiB1bmtub3duIG9wZXJhdGlvbiBmb3IgJysnXCI7XG4gICAgfSxcbn07XG5cbmNvbnN0IGZuTWFwQmluYXJ5T3A6IEZuTWFwQmluYXJ5T3AgPSB7XG4gICAgXCIrXCI6IGZ1bmN0aW9uIChsLCByKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbCA9PT0gXCJudW1iZXJcIiAmJiB0eXBlb2YgciA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgLy8gcmV0dXJuIG51bWJlclxuICAgICAgICAgICAgcmV0dXJuIGwgKyByO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBsID09PSBcIm51bWJlclwiICYmIHIgaW5zdGFuY2VvZiBEYXRhc2V0KSB7XG4gICAgICAgICAgICAvLyByZXR1cm4gRGF0YXNldFxuICAgICAgICAgICAgbGV0IHRtcERhdGFzZXQgPSByLmNsb25lVG9UbXBEYXRhc2V0KCk7XG4gICAgICAgICAgICB0bXBEYXRhc2V0LmdldFZhbHVlcygpLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBpbmRleCwgYXJyYXkpIHtcbiAgICAgICAgICAgICAgICBpZiAoYXJyYXlbaW5kZXhdICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9IGwgKyB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRleF0gPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdG1wRGF0YXNldC5yZWNhbGN1bGF0ZU1pbk1heCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRtcERhdGFzZXQ7XG4gICAgICAgIH0gZWxzZSBpZiAobCBpbnN0YW5jZW9mIERhdGFzZXQgJiYgdHlwZW9mIHIgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIC8vIHJldHVybiBEYXRhc2V0XG4gICAgICAgICAgICBsZXQgdG1wRGF0YXNldCA9IGwuY2xvbmVUb1RtcERhdGFzZXQoKTtcbiAgICAgICAgICAgIHRtcERhdGFzZXQuZ2V0VmFsdWVzKCkuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBhcnJheSkge1xuICAgICAgICAgICAgICAgIGlmIChhcnJheVtpbmRleF0gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kZXhdID0gdmFsdWUgKyByO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0bXBEYXRhc2V0LnJlY2FsY3VsYXRlTWluTWF4KCk7XG4gICAgICAgICAgICByZXR1cm4gdG1wRGF0YXNldDtcbiAgICAgICAgfSBlbHNlIGlmIChsIGluc3RhbmNlb2YgRGF0YXNldCAmJiByIGluc3RhbmNlb2YgRGF0YXNldCkge1xuICAgICAgICAgICAgLy8gcmV0dXJuIERhdGFzZXRcbiAgICAgICAgICAgIGxldCB0bXBEYXRhc2V0ID0gbC5jbG9uZVRvVG1wRGF0YXNldCgpO1xuICAgICAgICAgICAgdG1wRGF0YXNldC5nZXRWYWx1ZXMoKS5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGFycmF5KSB7XG4gICAgICAgICAgICAgICAgaWYgKGFycmF5W2luZGV4XSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRleF0gPSB2YWx1ZSArIHIuZ2V0VmFsdWVzKClbaW5kZXhdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0bXBEYXRhc2V0LnJlY2FsY3VsYXRlTWluTWF4KCk7XG4gICAgICAgICAgICByZXR1cm4gdG1wRGF0YXNldDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gXCJFcnJvcjogdW5rbm93biBvcGVyYXRpb24gZm9yICcrJ1wiO1xuICAgIH0sXG4gICAgXCItXCI6IGZ1bmN0aW9uIChsLCByKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbCA9PT0gXCJudW1iZXJcIiAmJiB0eXBlb2YgciA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgLy8gcmV0dXJuIG51bWJlclxuICAgICAgICAgICAgcmV0dXJuIGwgLSByO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBsID09PSBcIm51bWJlclwiICYmIHIgaW5zdGFuY2VvZiBEYXRhc2V0KSB7XG4gICAgICAgICAgICAvLyByZXR1cm4gRGF0YXNldFxuICAgICAgICAgICAgbGV0IHRtcERhdGFzZXQgPSByLmNsb25lVG9UbXBEYXRhc2V0KCk7XG4gICAgICAgICAgICB0bXBEYXRhc2V0LmdldFZhbHVlcygpLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBpbmRleCwgYXJyYXkpIHtcbiAgICAgICAgICAgICAgICBpZiAoYXJyYXlbaW5kZXhdICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9IGwgLSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRleF0gPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdG1wRGF0YXNldC5yZWNhbGN1bGF0ZU1pbk1heCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRtcERhdGFzZXQ7XG4gICAgICAgIH0gZWxzZSBpZiAobCBpbnN0YW5jZW9mIERhdGFzZXQgJiYgdHlwZW9mIHIgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIC8vIHJldHVybiBEYXRhc2V0XG4gICAgICAgICAgICBsZXQgdG1wRGF0YXNldCA9IGwuY2xvbmVUb1RtcERhdGFzZXQoKTtcbiAgICAgICAgICAgIHRtcERhdGFzZXQuZ2V0VmFsdWVzKCkuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBhcnJheSkge1xuICAgICAgICAgICAgICAgIGlmIChhcnJheVtpbmRleF0gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kZXhdID0gdmFsdWUgLSByO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gdG1wRGF0YXNldDtcbiAgICAgICAgfSBlbHNlIGlmIChsIGluc3RhbmNlb2YgRGF0YXNldCAmJiByIGluc3RhbmNlb2YgRGF0YXNldCkge1xuICAgICAgICAgICAgLy8gcmV0dXJuIERhdGFzZXRcbiAgICAgICAgICAgIGxldCB0bXBEYXRhc2V0ID0gbC5jbG9uZVRvVG1wRGF0YXNldCgpO1xuICAgICAgICAgICAgdG1wRGF0YXNldC5nZXRWYWx1ZXMoKS5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGFycmF5KSB7XG4gICAgICAgICAgICAgICAgaWYgKGFycmF5W2luZGV4XSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRleF0gPSB2YWx1ZSAtIHIuZ2V0VmFsdWVzKClbaW5kZXhdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0bXBEYXRhc2V0LnJlY2FsY3VsYXRlTWluTWF4KCk7XG4gICAgICAgICAgICByZXR1cm4gdG1wRGF0YXNldDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gXCJFcnJvcjogdW5rbm93biBvcGVyYXRpb24gZm9yICctJ1wiO1xuICAgIH0sXG4gICAgXCIqXCI6IGZ1bmN0aW9uIChsLCByKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbCA9PT0gXCJudW1iZXJcIiAmJiB0eXBlb2YgciA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgLy8gcmV0dXJuIG51bWJlclxuICAgICAgICAgICAgcmV0dXJuIGwgKiByO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBsID09PSBcIm51bWJlclwiICYmIHIgaW5zdGFuY2VvZiBEYXRhc2V0KSB7XG4gICAgICAgICAgICAvLyByZXR1cm4gRGF0YXNldFxuICAgICAgICAgICAgbGV0IHRtcERhdGFzZXQgPSByLmNsb25lVG9UbXBEYXRhc2V0KCk7XG4gICAgICAgICAgICB0bXBEYXRhc2V0LmdldFZhbHVlcygpLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBpbmRleCwgYXJyYXkpIHtcbiAgICAgICAgICAgICAgICBpZiAoYXJyYXlbaW5kZXhdICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9IGwgKiB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRleF0gPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdG1wRGF0YXNldC5yZWNhbGN1bGF0ZU1pbk1heCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRtcERhdGFzZXQ7XG4gICAgICAgIH0gZWxzZSBpZiAobCBpbnN0YW5jZW9mIERhdGFzZXQgJiYgdHlwZW9mIHIgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIC8vIHJldHVybiBEYXRhc2V0XG4gICAgICAgICAgICBsZXQgdG1wRGF0YXNldCA9IGwuY2xvbmVUb1RtcERhdGFzZXQoKTtcbiAgICAgICAgICAgIHRtcERhdGFzZXQuZ2V0VmFsdWVzKCkuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBhcnJheSkge1xuICAgICAgICAgICAgICAgIGlmIChhcnJheVtpbmRleF0gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kZXhdID0gdmFsdWUgKiByO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0bXBEYXRhc2V0LnJlY2FsY3VsYXRlTWluTWF4KCk7XG4gICAgICAgICAgICByZXR1cm4gdG1wRGF0YXNldDtcbiAgICAgICAgfSBlbHNlIGlmIChsIGluc3RhbmNlb2YgRGF0YXNldCAmJiByIGluc3RhbmNlb2YgRGF0YXNldCkge1xuICAgICAgICAgICAgLy8gcmV0dXJuIERhdGFzZXRcbiAgICAgICAgICAgIGxldCB0bXBEYXRhc2V0ID0gbC5jbG9uZVRvVG1wRGF0YXNldCgpO1xuICAgICAgICAgICAgdG1wRGF0YXNldC5nZXRWYWx1ZXMoKS5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGFycmF5KSB7XG4gICAgICAgICAgICAgICAgaWYgKGFycmF5W2luZGV4XSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRleF0gPSB2YWx1ZSAqIHIuZ2V0VmFsdWVzKClbaW5kZXhdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0bXBEYXRhc2V0LnJlY2FsY3VsYXRlTWluTWF4KCk7XG4gICAgICAgICAgICByZXR1cm4gdG1wRGF0YXNldDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gXCJFcnJvcjogdW5rbm93biBvcGVyYXRpb24gZm9yICcqJ1wiO1xuICAgIH0sXG4gICAgXCIvXCI6IGZ1bmN0aW9uIChsLCByKSB7XG4gICAgICAgIGlmICghY2hlY2tEaXZpc29yKHIpKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJFcnJvcjogZGl2aWRlIGJ5IHplcm8gaW4gZXhwcmVzc2lvblwiO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgbCA9PT0gXCJudW1iZXJcIiAmJiB0eXBlb2YgciA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgLy8gcmV0dXJuIG51bWJlclxuICAgICAgICAgICAgcmV0dXJuIGwgLyByO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBsID09PSBcIm51bWJlclwiICYmIHIgaW5zdGFuY2VvZiBEYXRhc2V0KSB7XG4gICAgICAgICAgICAvLyByZXR1cm4gRGF0YXNldFxuICAgICAgICAgICAgbGV0IHRtcERhdGFzZXQgPSByLmNsb25lVG9UbXBEYXRhc2V0KCk7XG4gICAgICAgICAgICB0bXBEYXRhc2V0LmdldFZhbHVlcygpLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBpbmRleCwgYXJyYXkpIHtcbiAgICAgICAgICAgICAgICBpZiAoYXJyYXlbaW5kZXhdICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9IGwgLyB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRleF0gPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdG1wRGF0YXNldC5yZWNhbGN1bGF0ZU1pbk1heCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRtcERhdGFzZXQ7XG4gICAgICAgIH0gZWxzZSBpZiAobCBpbnN0YW5jZW9mIERhdGFzZXQgJiYgdHlwZW9mIHIgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIC8vIHJldHVybiBEYXRhc2V0XG4gICAgICAgICAgICBsZXQgdG1wRGF0YXNldCA9IGwuY2xvbmVUb1RtcERhdGFzZXQoKTtcbiAgICAgICAgICAgIHRtcERhdGFzZXQuZ2V0VmFsdWVzKCkuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBhcnJheSkge1xuICAgICAgICAgICAgICAgIGlmIChhcnJheVtpbmRleF0gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kZXhdID0gdmFsdWUgLyByO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0bXBEYXRhc2V0LnJlY2FsY3VsYXRlTWluTWF4KCk7XG4gICAgICAgICAgICByZXR1cm4gdG1wRGF0YXNldDtcbiAgICAgICAgfSBlbHNlIGlmIChsIGluc3RhbmNlb2YgRGF0YXNldCAmJiByIGluc3RhbmNlb2YgRGF0YXNldCkge1xuICAgICAgICAgICAgLy8gcmV0dXJuIERhdGFzZXRcbiAgICAgICAgICAgIGxldCB0bXBEYXRhc2V0ID0gbC5jbG9uZVRvVG1wRGF0YXNldCgpO1xuICAgICAgICAgICAgdG1wRGF0YXNldC5nZXRWYWx1ZXMoKS5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGFycmF5KSB7XG4gICAgICAgICAgICAgICAgaWYgKGFycmF5W2luZGV4XSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRleF0gPSB2YWx1ZSAvIHIuZ2V0VmFsdWVzKClbaW5kZXhdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0bXBEYXRhc2V0LnJlY2FsY3VsYXRlTWluTWF4KCk7XG4gICAgICAgICAgICByZXR1cm4gdG1wRGF0YXNldDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gXCJFcnJvcjogdW5rbm93biBvcGVyYXRpb24gZm9yICcvJ1wiO1xuICAgIH0sXG4gICAgXCIlXCI6IGZ1bmN0aW9uIChsLCByKSB7XG4gICAgICAgIGlmICghY2hlY2tEaXZpc29yKHIpKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJFcnJvcjogZGl2aWRlIGJ5IHplcm8gaW4gZXhwcmVzc2lvblwiO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgbCA9PT0gXCJudW1iZXJcIiAmJiB0eXBlb2YgciA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgLy8gcmV0dXJuIG51bWJlclxuICAgICAgICAgICAgcmV0dXJuIGwgJSByO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBsID09PSBcIm51bWJlclwiICYmIHIgaW5zdGFuY2VvZiBEYXRhc2V0KSB7XG4gICAgICAgICAgICAvLyByZXR1cm4gRGF0YXNldFxuICAgICAgICAgICAgbGV0IHRtcERhdGFzZXQgPSByLmNsb25lVG9UbXBEYXRhc2V0KCk7XG4gICAgICAgICAgICB0bXBEYXRhc2V0LmdldFZhbHVlcygpLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBpbmRleCwgYXJyYXkpIHtcbiAgICAgICAgICAgICAgICBpZiAoYXJyYXlbaW5kZXhdICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9IGwgJSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRleF0gPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdG1wRGF0YXNldC5yZWNhbGN1bGF0ZU1pbk1heCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRtcERhdGFzZXQ7XG4gICAgICAgIH0gZWxzZSBpZiAobCBpbnN0YW5jZW9mIERhdGFzZXQgJiYgdHlwZW9mIHIgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIC8vIHJldHVybiBEYXRhc2V0XG4gICAgICAgICAgICBsZXQgdG1wRGF0YXNldCA9IGwuY2xvbmVUb1RtcERhdGFzZXQoKTtcbiAgICAgICAgICAgIHRtcERhdGFzZXQuZ2V0VmFsdWVzKCkuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBhcnJheSkge1xuICAgICAgICAgICAgICAgIGlmIChhcnJheVtpbmRleF0gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kZXhdID0gdmFsdWUgJSByO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0bXBEYXRhc2V0LnJlY2FsY3VsYXRlTWluTWF4KCk7XG4gICAgICAgICAgICByZXR1cm4gdG1wRGF0YXNldDtcbiAgICAgICAgfSBlbHNlIGlmIChsIGluc3RhbmNlb2YgRGF0YXNldCAmJiByIGluc3RhbmNlb2YgRGF0YXNldCkge1xuICAgICAgICAgICAgLy8gcmV0dXJuIERhdGFzZXRcbiAgICAgICAgICAgIGxldCB0bXBEYXRhc2V0ID0gbC5jbG9uZVRvVG1wRGF0YXNldCgpO1xuICAgICAgICAgICAgdG1wRGF0YXNldC5nZXRWYWx1ZXMoKS5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGFycmF5KSB7XG4gICAgICAgICAgICAgICAgaWYgKGFycmF5W2luZGV4XSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRleF0gPSB2YWx1ZSAlIHIuZ2V0VmFsdWVzKClbaW5kZXhdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0bXBEYXRhc2V0LnJlY2FsY3VsYXRlTWluTWF4KCk7XG4gICAgICAgICAgICByZXR1cm4gdG1wRGF0YXNldDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gXCJFcnJvcjogdW5rbm93biBvcGVyYXRpb24gZm9yICclJ1wiO1xuICAgIH0sXG59O1xuXG5jb25zdCBmbk1hcERhdGFzZXRUb0RhdGFzZXQ6IEZuTWFwRGF0YXNldFRvRGF0YXNldCA9IHtcbiAgICAvLyBtaW4gdmFsdWUgb2YgYSBkYXRhc2V0XG4gICAgbm9ybWFsaXplOiBmdW5jdGlvbiAoZGF0YXNldCwgYXJncywgcmVuZGVySW5mbykge1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhcIm5vcm1hbGl6ZVwiKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coZGF0YXNldCk7XG4gICAgICAgIGxldCB5TWluID0gZGF0YXNldC5nZXRZTWluKCk7XG4gICAgICAgIGxldCB5TWF4ID0gZGF0YXNldC5nZXRZTWF4KCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGB5TWluL3lNYXg6ICR7eU1pbn0vJHt5TWF4fWApO1xuICAgICAgICBpZiAoeU1pbiAhPT0gbnVsbCAmJiB5TWF4ICE9PSBudWxsICYmIHlNYXggPiB5TWluKSB7XG4gICAgICAgICAgICBsZXQgbm9ybWFsaXplZCA9IGRhdGFzZXQuY2xvbmVUb1RtcERhdGFzZXQoKTtcbiAgICAgICAgICAgIG5vcm1hbGl6ZWQuZ2V0VmFsdWVzKCkuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBhcnJheSkge1xuICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9ICh2YWx1ZSAtIHlNaW4pIC8gKHlNYXggLSB5TWluKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbm9ybWFsaXplZC5yZWNhbGN1bGF0ZU1pbk1heCgpO1xuICAgICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFwiRXJyb3I6IGludmFsaWQgZGF0YSByYW5nZSBmb3IgZnVuY3Rpb24gJ25vcm1hbGl6ZSdcIjtcbiAgICB9LFxuICAgIHNldE1pc3NpbmdWYWx1ZXM6IGZ1bmN0aW9uIChkYXRhc2V0LCBhcmdzLCByZW5kZXJJbmZvKSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwic2V0TWlzc2luZ1ZhbHVlc1wiKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coZGF0YXNldCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGFyZ3MpO1xuICAgICAgICBpZiAoYXJncyAmJiBhcmdzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGxldCBtaXNzaW5nVmFsdWUgPSBhcmdzWzBdO1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2cobWlzc2luZ1ZhbHVlKTtcbiAgICAgICAgICAgIGxldCBuZXdEYXRhc2V0ID0gZGF0YXNldC5jbG9uZVRvVG1wRGF0YXNldCgpO1xuICAgICAgICAgICAgaWYgKE51bWJlci5pc051bWJlcihtaXNzaW5nVmFsdWUpICYmICFOdW1iZXIuaXNOYU4obWlzc2luZ1ZhbHVlKSkge1xuICAgICAgICAgICAgICAgIG5ld0RhdGFzZXQuZ2V0VmFsdWVzKCkuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBhcnJheSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9IG1pc3NpbmdWYWx1ZSBhcyBudW1iZXI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBuZXdEYXRhc2V0LnJlY2FsY3VsYXRlTWluTWF4KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ld0RhdGFzZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gXCJFcnJvcjogaW52YWxpZCBhcmd1bWVudHMgZm9yIGZ1bmN0aW9uICdzZXRNaXNzaW5nVmFsdWVzJ1wiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBcIkVycm9yOiBpbnZhbGlkIGFyZ3VtZW50cyBmb3IgZnVuY3Rpb24gJ3NldE1pc3NpbmdWYWx1ZXNcIjtcbiAgICB9LFxufTtcblxuZnVuY3Rpb24gZ2V0RGF0YXNldEJ5SWQoZGF0YXNldElkOiBudW1iZXIsIHJlbmRlckluZm86IFJlbmRlckluZm8pIHtcbiAgICByZXR1cm4gcmVuZGVySW5mby5kYXRhc2V0cy5nZXREYXRhc2V0QnlJZChkYXRhc2V0SWQpO1xufVxuXG5mdW5jdGlvbiBldmFsdWF0ZUFycmF5KGFycjogYW55LCByZW5kZXJJbmZvOiBSZW5kZXJJbmZvKSB7XG4gICAgcmV0dXJuIGFyci5tYXAoZnVuY3Rpb24gKGV4cHI6IGpzZXAuRXhwcmVzc2lvbikge1xuICAgICAgICByZXR1cm4gZXZhbHVhdGUoZXhwciwgcmVuZGVySW5mbyk7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGV2YWx1YXRlKGV4cHI6IGpzZXAuRXhwcmVzc2lvbiwgcmVuZGVySW5mbzogUmVuZGVySW5mbyk6IGFueSB7XG4gICAgLy8gY29uc29sZS5sb2coZXhwcik7XG5cbiAgICBzd2l0Y2ggKGV4cHIudHlwZSkge1xuICAgICAgICBjYXNlIFwiTGl0ZXJhbFwiOlxuICAgICAgICAgICAgbGV0IGxpdGVyYWxFeHByID0gZXhwciBhcyBqc2VwLkxpdGVyYWw7XG4gICAgICAgICAgICByZXR1cm4gbGl0ZXJhbEV4cHIudmFsdWU7IC8vIHN0cmluZywgbnVtYmVyLCBib29sZWFuXG5cbiAgICAgICAgY2FzZSBcIklkZW50aWZpZXJcIjpcbiAgICAgICAgICAgIGxldCBpZGVudGlmaWVyRXhwciA9IGV4cHIgYXMganNlcC5JZGVudGlmaWVyO1xuICAgICAgICAgICAgbGV0IGlkZW50aWZpZXJOYW1lID0gaWRlbnRpZmllckV4cHIubmFtZTtcbiAgICAgICAgICAgIGlmIChpZGVudGlmaWVyTmFtZSBpbiBmbk1hcERhdGFzZXRUb1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBFcnJvcjogZGVwcmVjYXRlZCB0ZW1wbGF0ZSB2YXJpYWJsZSAnJHtpZGVudGlmaWVyTmFtZX0nLCB1c2UgJyR7aWRlbnRpZmllck5hbWV9KCknIGluc3RlYWRgO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpZGVudGlmaWVyTmFtZSBpbiBmbk1hcERhdGFzZXRUb0RhdGFzZXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYEVycm9yOiBkZXByZWNhdGVkIHRlbXBsYXRlIHZhcmlhYmxlICcke2lkZW50aWZpZXJOYW1lfScsIHVzZSAnJHtpZGVudGlmaWVyTmFtZX0oKScgaW5zdGVhZGA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYEVycm9yOiB1bmtub3duIGZ1bmN0aW9uIG5hbWUgJyR7aWRlbnRpZmllck5hbWV9J2A7XG5cbiAgICAgICAgY2FzZSBcIlVuYXJ5RXhwcmVzc2lvblwiOlxuICAgICAgICAgICAgbGV0IHVuaXJ5RXhwciA9IGV4cHIgYXMganNlcC5VbmFyeUV4cHJlc3Npb247XG4gICAgICAgICAgICBsZXQgcmV0VW5pcnlBcmcgPSBldmFsdWF0ZSh1bmlyeUV4cHIuYXJndW1lbnQsIHJlbmRlckluZm8pO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiByZXRVbmlyeUFyZyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXRVbmlyeUFyZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmbk1hcFVuaXJ5T3BbdW5pcnlFeHByLm9wZXJhdG9yXShyZXRVbmlyeUFyZyk7XG5cbiAgICAgICAgY2FzZSBcIkJpbmFyeUV4cHJlc3Npb25cIjpcbiAgICAgICAgICAgIGxldCBiaW5hcnlFeHByID0gZXhwciBhcyBqc2VwLkJpbmFyeUV4cHJlc3Npb247XG4gICAgICAgICAgICBsZXQgbGVmdFZhbHVlID0gZXZhbHVhdGUoYmluYXJ5RXhwci5sZWZ0LCByZW5kZXJJbmZvKTtcbiAgICAgICAgICAgIGxldCByaWdodFZhbHVlID0gZXZhbHVhdGUoYmluYXJ5RXhwci5yaWdodCwgcmVuZGVySW5mbyk7XG4gICAgICAgICAgICBsZXQgcmV0Q2hlY2sgPSBjaGVja0JpbmFyeU9wZXJhbnRUeXBlKGxlZnRWYWx1ZSwgcmlnaHRWYWx1ZSk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHJldENoZWNrID09PSBcInN0cmluZ1wiICYmIHJldENoZWNrLnN0YXJ0c1dpdGgoXCJFcnJvcjpcIikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV0Q2hlY2s7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZm5NYXBCaW5hcnlPcFtiaW5hcnlFeHByLm9wZXJhdG9yXShsZWZ0VmFsdWUsIHJpZ2h0VmFsdWUpO1xuXG4gICAgICAgIGNhc2UgXCJDYWxsRXhwcmVzc2lvblwiOlxuICAgICAgICAgICAgbGV0IGNhbGxFeHByID0gZXhwciBhcyBqc2VwLkNhbGxFeHByZXNzaW9uO1xuXG4gICAgICAgICAgICBsZXQgY2FsbGVlSWRlbnRpZmllciA9IGNhbGxFeHByLmNhbGxlZSBhcyBqc2VwLklkZW50aWZpZXI7XG4gICAgICAgICAgICBsZXQgZm5OYW1lID0gY2FsbGVlSWRlbnRpZmllci5uYW1lO1xuICAgICAgICAgICAgbGV0IGFyZ3MgPSBjYWxsRXhwci5hcmd1bWVudHM7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhmbk5hbWUpO1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coYXJncyk7XG4gICAgICAgICAgICBsZXQgZXZhbHVhdGVkQXJncyA9IGV2YWx1YXRlQXJyYXkoYXJncywgcmVuZGVySW5mbyk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGV2YWx1YXRlZEFyZ3MgPT09IFwic3RyaW5nXCIpIHJldHVybiBldmFsdWF0ZWRBcmdzO1xuXG4gICAgICAgICAgICAvLyBmdW5jdGlvbiBkYXRhc2V0IGFjY2VwdCBvbmx5IG9uZSBhcmcgaW4gbnVtYmVyXG4gICAgICAgICAgICBpZiAoZm5OYW1lID09PSBcImRhdGFzZXRcIikge1xuICAgICAgICAgICAgICAgIGlmIChldmFsdWF0ZWRBcmdzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgYXJnID0gZXZhbHVhdGVkQXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhcmcgPT09IFwic3RyaW5nXCIpIHJldHVybiBhcmc7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYXJnICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJFcnJvcjogZnVuY3Rpb24gJ2RhdGFzZXQnIG9ubHkgYWNjZXB0cyBpZCBpbiBudW1iZXJcIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBsZXQgZGF0YXNldCA9IGdldERhdGFzZXRCeUlkKGFyZywgcmVuZGVySW5mbyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZGF0YXNldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBFcnJvcjogbm8gZGF0YXNldCBmb3VuZCBmb3IgaWQgJyR7YXJnfSdgO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhc2V0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGZuRGF0YXNldCBhY2NlcHQgb25seSBvbmUgYXJnIGluIG51bWJlciBvciBEYXRhc2V0XG4gICAgICAgICAgICBlbHNlIGlmIChmbk5hbWUgaW4gZm5NYXBEYXRhc2V0VG9WYWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmIChldmFsdWF0ZWRBcmdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBVc2UgZmlyc3Qgbm9uLVggZGF0YXNldFxuICAgICAgICAgICAgICAgICAgICBsZXQgZGF0YXNldCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGRzIG9mIHJlbmRlckluZm8uZGF0YXNldHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZGF0YXNldCAmJiAhZHMuZ2V0UXVlcnkoKS51c2VkQXNYRGF0YXNldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFzZXQgPSBkcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBicmVha3MgaGVyZSwgdGhlIGluZGV4IG9mIERhdGFzZXRzIG5vdCByZXNldD8/P1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICghZGF0YXNldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBObyBhdmFpbGFibGUgZGF0YXNldCBmb3VuZCBmb3IgZnVuY3Rpb24gJHtmbk5hbWV9YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm5NYXBEYXRhc2V0VG9WYWx1ZVtmbk5hbWVdKGRhdGFzZXQsIHJlbmRlckluZm8pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZXZhbHVhdGVkQXJncy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGFyZyA9IGV2YWx1YXRlZEFyZ3NbMF07XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYXJnID09PSBcInN0cmluZ1wiKSByZXR1cm4gYXJnO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYXJnIGluc3RhbmNlb2YgRGF0YXNldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZuTWFwRGF0YXNldFRvVmFsdWVbZm5OYW1lXShhcmcsIHJlbmRlckluZm8pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBFcnJvcjogZnVuY3Rpb24gJyR7Zm5OYW1lfScgb25seSBhY2NlcHRzIERhdGFzZXRgO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBgRXJyb3I6IFRvbyBtYW55IGFyZ3VtZW50cyBmb3IgZnVuY3Rpb24gJHtmbk5hbWV9YDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZm5OYW1lIGluIGZuTWFwRGF0YXNldFRvRGF0YXNldCkge1xuICAgICAgICAgICAgICAgIGlmIChldmFsdWF0ZWRBcmdzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGV2YWx1YXRlZEFyZ3NbMF0gPT09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXZhbHVhdGVkQXJnc1swXTsgLy8gZXJyb3IgbWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICBpZiAoZXZhbHVhdGVkQXJnc1swXSBpbnN0YW5jZW9mIERhdGFzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkYXRhc2V0ID0gZXZhbHVhdGVkQXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmbk1hcERhdGFzZXRUb0RhdGFzZXRbZm5OYW1lXShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhc2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVySW5mb1xuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgRXJyb3I6IGZ1bmN0aW9uICR7Zm5OYW1lfSBvbmx5IGFjY2VwdCBEYXRhc2V0YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZhbHVhdGVkQXJncy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZXZhbHVhdGVkQXJnc1swXSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV2YWx1YXRlZEFyZ3NbMF07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGV2YWx1YXRlZEFyZ3NbMF0gaW5zdGFuY2VvZiBEYXRhc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZGF0YXNldCA9IGV2YWx1YXRlZEFyZ3NbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm5NYXBEYXRhc2V0VG9EYXRhc2V0W2ZuTmFtZV0oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXNldCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmFsdWF0ZWRBcmdzLmZpbHRlcihmdW5jdGlvbiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBhbnksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycjogYW55XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleCA+IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVySW5mb1xuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgRXJyb3I6IGZ1bmN0aW9uICR7Zm5OYW1lfSBvbmx5IGFjY2VwdCBEYXRhc2V0YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYEVycm9yOiBUb28gbWFueSBhcmd1bWVudHMgZm9yIGZ1bmN0aW9uICR7Zm5OYW1lfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYEVycm9yOiB1bmtub3duIGZ1bmN0aW9uIG5hbWUgJyR7Zm5OYW1lfSdgO1xuICAgIH1cbiAgICByZXR1cm4gXCJFcnJvcjogdW5rbm93biBleHByZXNzaW9uXCI7XG59XG5cbmludGVyZmFjZSBFeHByUmVzb2x2ZWQge1xuICAgIHNvdXJjZTogc3RyaW5nO1xuICAgIHZhbHVlOiBudW1iZXIgfCBNb21lbnQ7XG4gICAgZm9ybWF0OiBzdHJpbmc7XG59XG5cbi8vIEdldCBhIGxpc3Qgb2YgcmVzb2x2ZWQgcmVzdWx0IGNvbnRhaW5pbmcgc291cmNlLCB2YWx1ZSwgYW5kIGZvcm1hdFxuZnVuY3Rpb24gcmVzb2x2ZShcbiAgICB0ZXh0OiBzdHJpbmcsXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mb1xuKTogQXJyYXk8RXhwclJlc29sdmVkPiB8IHN0cmluZyB7XG4gICAgLy8gY29uc29sZS5sb2codGV4dCk7XG5cbiAgICBsZXQgZXhwck1hcDogQXJyYXk8RXhwclJlc29sdmVkPiA9IFtdO1xuXG4gICAgLy8ge3soPzxleHByPltcXHcrXFwtKlxcLzAtOVxccygpXFxbXFxdJS5dKykoOjooPzxmb3JtYXQ+W1xcdytcXC0qXFwvMC05XFxzKClcXFtcXF0lLjpdKykpP319XG4gICAgbGV0IHN0ckV4cHJSZWdleCA9XG4gICAgICAgIFwie3soPzxleHByPltcXFxcdytcXFxcLSpcXFxcLzAtOVxcXFxzKClcXFxcW1xcXFxdJS4sXSspKDo6KD88Zm9ybWF0PltcXFxcdytcXFxcLSpcXFxcLzAtOVxcXFxzKClcXFxcW1xcXFxdJS46XSspKT99fVwiO1xuICAgIGxldCBleHByUmVnZXggPSBuZXcgUmVnRXhwKHN0ckV4cHJSZWdleCwgXCJnbVwiKTtcbiAgICBsZXQgbWF0Y2g7XG4gICAgd2hpbGUgKChtYXRjaCA9IGV4cHJSZWdleC5leGVjKHRleHQpKSkge1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhtYXRjaCk7XG4gICAgICAgIGxldCBmdWxsbWF0Y2ggPSBtYXRjaFswXTtcbiAgICAgICAgaWYgKGV4cHJNYXAuc29tZSgoZSkgPT4gZS5zb3VyY2UgPT09IGZ1bGxtYXRjaCkpIGNvbnRpbnVlO1xuXG4gICAgICAgIGlmICh0eXBlb2YgbWF0Y2guZ3JvdXBzICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG1hdGNoLmdyb3Vwcy5leHByICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgbGV0IGV4cHIgPSBtYXRjaC5ncm91cHMuZXhwcjtcblxuICAgICAgICAgICAgICAgIGxldCBhc3QgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGFzdCA9IGpzZXAoZXhwcik7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcIkVycm9yOlwiICsgZXJyLm1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghYXN0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcIkVycm9yOiBmYWlsZWQgdG8gcGFyc2UgZXhwcmVzc2lvblwiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhhc3QpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBldmFsdWF0ZShhc3QsIHJlbmRlckluZm8pO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlOyAvLyBlcnJvciBtZXNzYWdlXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgfHxcbiAgICAgICAgICAgICAgICAgICAgd2luZG93Lm1vbWVudC5pc01vbWVudCh2YWx1ZSlcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZvcm1hdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWF0Y2guZ3JvdXBzLmZvcm1hdCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0ID0gbWF0Y2guZ3JvdXBzLmZvcm1hdDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGV4cHJNYXAucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2U6IGZ1bGxtYXRjaCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogZm9ybWF0LFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZXhwck1hcDtcbn1cblxuLy8gUmVzb2x2ZSB0aGUgdGVtcGxhdGUgZXhwcmVzc2lvbiBpbiBzdHJpbmcgYW5kIHJldHVybiBhIHJlc29sdmVkIHN0cmluZ1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVUZW1wbGF0ZShcbiAgICB0ZW1wbGF0ZTogc3RyaW5nLFxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm9cbik6IHN0cmluZyB7XG4gICAgbGV0IHJldFJlc29sdmUgPSByZXNvbHZlKHRlbXBsYXRlLCByZW5kZXJJbmZvKTtcbiAgICBpZiAodHlwZW9mIHJldFJlc29sdmUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIHJldFJlc29sdmU7IC8vIGVycm9yIG1lc3NhZ2VcbiAgICB9XG4gICAgbGV0IGV4cHJNYXAgPSByZXRSZXNvbHZlIGFzIEFycmF5PEV4cHJSZXNvbHZlZD47XG5cbiAgICBmb3IgKGxldCBleHByUmVzb2x2ZWQgb2YgZXhwck1hcCkge1xuICAgICAgICBsZXQgc291cmNlID0gZXhwclJlc29sdmVkLnNvdXJjZTtcbiAgICAgICAgbGV0IHZhbHVlID0gZXhwclJlc29sdmVkLnZhbHVlO1xuICAgICAgICBsZXQgZm9ybWF0ID0gZXhwclJlc29sdmVkLmZvcm1hdDtcbiAgICAgICAgbGV0IHN0clZhbHVlID0gXCJcIjtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgaWYgKGZvcm1hdCkge1xuICAgICAgICAgICAgICAgIHN0clZhbHVlID0gc3ByaW50ZihcIiVcIiArIGZvcm1hdCwgdmFsdWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdHJWYWx1ZSA9IHZhbHVlLnRvRml4ZWQoMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAod2luZG93Lm1vbWVudC5pc01vbWVudCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXQpIHtcbiAgICAgICAgICAgICAgICBzdHJWYWx1ZSA9IGhlbHBlci5kYXRlVG9TdHIodmFsdWUsIGZvcm1hdCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN0clZhbHVlID0gaGVscGVyLmRhdGVUb1N0cih2YWx1ZSwgcmVuZGVySW5mby5kYXRlRm9ybWF0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdHJWYWx1ZSkge1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coZXhwclJlc29sdmVkKTtcbiAgICAgICAgICAgIHRlbXBsYXRlID0gdGVtcGxhdGUuc3BsaXQoc291cmNlKS5qb2luKHN0clZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0ZW1wbGF0ZTtcbn1cblxuLy8gUmVzb2x2ZSB0aGUgdGVtcGxhdGUgZXhwcmVzc2lvbiBpbiBzdHJpbmcgYW5kIHJldHVybiBhIG51bWJlciBvciBkYXRlXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVZhbHVlKFxuICAgIHRleHQ6IHN0cmluZyxcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvXG4pOiBudW1iZXIgfCBNb21lbnQgfCBzdHJpbmcge1xuICAgIC8vIGNvbnNvbGUubG9nKHRlbXBsYXRlKTtcbiAgICB0ZXh0ID0gdGV4dC50cmltKCk7XG5cbiAgICAvLyBpbnB1dCBpcyBwdXJlIG51bWJlclxuICAgIGlmICgvXihbXFwtXT9bMC05XStbXFwuXVswLTldK3xbXFwtXT9bMC05XSspJC8udGVzdCh0ZXh0KSkge1xuICAgICAgICByZXR1cm4gcGFyc2VGbG9hdCh0ZXh0KTtcbiAgICB9XG5cbiAgICAvLyB0ZW1wbGF0ZVxuICAgIGxldCByZXRSZXNvbHZlID0gcmVzb2x2ZSh0ZXh0LCByZW5kZXJJbmZvKTtcbiAgICBpZiAodHlwZW9mIHJldFJlc29sdmUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIHJldFJlc29sdmU7IC8vIGVycm9yIG1lc3NhZ2VcbiAgICB9XG4gICAgbGV0IGV4cHJNYXAgPSByZXRSZXNvbHZlIGFzIEFycmF5PEV4cHJSZXNvbHZlZD47XG5cbiAgICBpZiAoZXhwck1hcC5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBleHByTWFwWzBdLnZhbHVlOyAvLyBvbmx5IGZpcnN0IHZhbHVlIHdpbGwgYmUgcmV0dXJuXG4gICAgfVxuXG4gICAgcmV0dXJuIFwiRXJyb3I6IGZhaWxlZCB0byByZXNvbHZlIHZhbHVlc1wiO1xufVxuIiwiLyogZ2xvYmFsIHdpbmRvdywgZXhwb3J0cywgZGVmaW5lICovXG5cbiFmdW5jdGlvbigpIHtcbiAgICAndXNlIHN0cmljdCdcblxuICAgIHZhciByZSA9IHtcbiAgICAgICAgbm90X3N0cmluZzogL1tec10vLFxuICAgICAgICBub3RfYm9vbDogL1tedF0vLFxuICAgICAgICBub3RfdHlwZTogL1teVF0vLFxuICAgICAgICBub3RfcHJpbWl0aXZlOiAvW152XS8sXG4gICAgICAgIG51bWJlcjogL1tkaWVmZ10vLFxuICAgICAgICBudW1lcmljX2FyZzogL1tiY2RpZWZndXhYXS8sXG4gICAgICAgIGpzb246IC9bal0vLFxuICAgICAgICBub3RfanNvbjogL1teal0vLFxuICAgICAgICB0ZXh0OiAvXlteXFx4MjVdKy8sXG4gICAgICAgIG1vZHVsbzogL15cXHgyNXsyfS8sXG4gICAgICAgIHBsYWNlaG9sZGVyOiAvXlxceDI1KD86KFsxLTldXFxkKilcXCR8XFwoKFteKV0rKVxcKSk/KFxcKyk/KDB8J1teJF0pPygtKT8oXFxkKyk/KD86XFwuKFxcZCspKT8oW2ItZ2lqb3N0VHV2eFhdKS8sXG4gICAgICAgIGtleTogL14oW2Etel9dW2Etel9cXGRdKikvaSxcbiAgICAgICAga2V5X2FjY2VzczogL15cXC4oW2Etel9dW2Etel9cXGRdKikvaSxcbiAgICAgICAgaW5kZXhfYWNjZXNzOiAvXlxcWyhcXGQrKVxcXS8sXG4gICAgICAgIHNpZ246IC9eWystXS9cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzcHJpbnRmKGtleSkge1xuICAgICAgICAvLyBgYXJndW1lbnRzYCBpcyBub3QgYW4gYXJyYXksIGJ1dCBzaG91bGQgYmUgZmluZSBmb3IgdGhpcyBjYWxsXG4gICAgICAgIHJldHVybiBzcHJpbnRmX2Zvcm1hdChzcHJpbnRmX3BhcnNlKGtleSksIGFyZ3VtZW50cylcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB2c3ByaW50ZihmbXQsIGFyZ3YpIHtcbiAgICAgICAgcmV0dXJuIHNwcmludGYuYXBwbHkobnVsbCwgW2ZtdF0uY29uY2F0KGFyZ3YgfHwgW10pKVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNwcmludGZfZm9ybWF0KHBhcnNlX3RyZWUsIGFyZ3YpIHtcbiAgICAgICAgdmFyIGN1cnNvciA9IDEsIHRyZWVfbGVuZ3RoID0gcGFyc2VfdHJlZS5sZW5ndGgsIGFyZywgb3V0cHV0ID0gJycsIGksIGssIHBoLCBwYWQsIHBhZF9jaGFyYWN0ZXIsIHBhZF9sZW5ndGgsIGlzX3Bvc2l0aXZlLCBzaWduXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0cmVlX2xlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHBhcnNlX3RyZWVbaV0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ICs9IHBhcnNlX3RyZWVbaV1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBwYXJzZV90cmVlW2ldID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIHBoID0gcGFyc2VfdHJlZVtpXSAvLyBjb252ZW5pZW5jZSBwdXJwb3NlcyBvbmx5XG4gICAgICAgICAgICAgICAgaWYgKHBoLmtleXMpIHsgLy8ga2V5d29yZCBhcmd1bWVudFxuICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmd2W2N1cnNvcl1cbiAgICAgICAgICAgICAgICAgICAgZm9yIChrID0gMDsgayA8IHBoLmtleXMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmcgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHNwcmludGYoJ1tzcHJpbnRmXSBDYW5ub3QgYWNjZXNzIHByb3BlcnR5IFwiJXNcIiBvZiB1bmRlZmluZWQgdmFsdWUgXCIlc1wiJywgcGgua2V5c1trXSwgcGgua2V5c1trLTFdKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IGFyZ1twaC5rZXlzW2tdXVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHBoLnBhcmFtX25vKSB7IC8vIHBvc2l0aW9uYWwgYXJndW1lbnQgKGV4cGxpY2l0KVxuICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmd2W3BoLnBhcmFtX25vXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHsgLy8gcG9zaXRpb25hbCBhcmd1bWVudCAoaW1wbGljaXQpXG4gICAgICAgICAgICAgICAgICAgIGFyZyA9IGFyZ3ZbY3Vyc29yKytdXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHJlLm5vdF90eXBlLnRlc3QocGgudHlwZSkgJiYgcmUubm90X3ByaW1pdGl2ZS50ZXN0KHBoLnR5cGUpICYmIGFyZyBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZyA9IGFyZygpXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHJlLm51bWVyaWNfYXJnLnRlc3QocGgudHlwZSkgJiYgKHR5cGVvZiBhcmcgIT09ICdudW1iZXInICYmIGlzTmFOKGFyZykpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3Ioc3ByaW50ZignW3NwcmludGZdIGV4cGVjdGluZyBudW1iZXIgYnV0IGZvdW5kICVUJywgYXJnKSlcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocmUubnVtYmVyLnRlc3QocGgudHlwZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaXNfcG9zaXRpdmUgPSBhcmcgPj0gMFxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHN3aXRjaCAocGgudHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdiJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IHBhcnNlSW50KGFyZywgMTApLnRvU3RyaW5nKDIpXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdjJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoYXJnLCAxMCkpXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnaSc6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBwYXJzZUludChhcmcsIDEwKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnaic6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBKU09OLnN0cmluZ2lmeShhcmcsIG51bGwsIHBoLndpZHRoID8gcGFyc2VJbnQocGgud2lkdGgpIDogMClcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2UnOlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gcGgucHJlY2lzaW9uID8gcGFyc2VGbG9hdChhcmcpLnRvRXhwb25lbnRpYWwocGgucHJlY2lzaW9uKSA6IHBhcnNlRmxvYXQoYXJnKS50b0V4cG9uZW50aWFsKClcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2YnOlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gcGgucHJlY2lzaW9uID8gcGFyc2VGbG9hdChhcmcpLnRvRml4ZWQocGgucHJlY2lzaW9uKSA6IHBhcnNlRmxvYXQoYXJnKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZyc6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBwaC5wcmVjaXNpb24gPyBTdHJpbmcoTnVtYmVyKGFyZy50b1ByZWNpc2lvbihwaC5wcmVjaXNpb24pKSkgOiBwYXJzZUZsb2F0KGFyZylcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ28nOlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gKHBhcnNlSW50KGFyZywgMTApID4+PiAwKS50b1N0cmluZyg4KVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAncyc6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBTdHJpbmcoYXJnKVxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gKHBoLnByZWNpc2lvbiA/IGFyZy5zdWJzdHJpbmcoMCwgcGgucHJlY2lzaW9uKSA6IGFyZylcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3QnOlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gU3RyaW5nKCEhYXJnKVxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gKHBoLnByZWNpc2lvbiA/IGFyZy5zdWJzdHJpbmcoMCwgcGgucHJlY2lzaW9uKSA6IGFyZylcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ1QnOlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFyZykuc2xpY2UoOCwgLTEpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IChwaC5wcmVjaXNpb24gPyBhcmcuc3Vic3RyaW5nKDAsIHBoLnByZWNpc2lvbikgOiBhcmcpXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgICAgICBjYXNlICd1JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IHBhcnNlSW50KGFyZywgMTApID4+PiAwXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgICAgICBjYXNlICd2JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IGFyZy52YWx1ZU9mKClcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IChwaC5wcmVjaXNpb24gPyBhcmcuc3Vic3RyaW5nKDAsIHBoLnByZWNpc2lvbikgOiBhcmcpXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgICAgICBjYXNlICd4JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IChwYXJzZUludChhcmcsIDEwKSA+Pj4gMCkudG9TdHJpbmcoMTYpXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdYJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IChwYXJzZUludChhcmcsIDEwKSA+Pj4gMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKClcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyZS5qc29uLnRlc3QocGgudHlwZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ICs9IGFyZ1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlLm51bWJlci50ZXN0KHBoLnR5cGUpICYmICghaXNfcG9zaXRpdmUgfHwgcGguc2lnbikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpZ24gPSBpc19wb3NpdGl2ZSA/ICcrJyA6ICctJ1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gYXJnLnRvU3RyaW5nKCkucmVwbGFjZShyZS5zaWduLCAnJylcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpZ24gPSAnJ1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHBhZF9jaGFyYWN0ZXIgPSBwaC5wYWRfY2hhciA/IHBoLnBhZF9jaGFyID09PSAnMCcgPyAnMCcgOiBwaC5wYWRfY2hhci5jaGFyQXQoMSkgOiAnICdcbiAgICAgICAgICAgICAgICAgICAgcGFkX2xlbmd0aCA9IHBoLndpZHRoIC0gKHNpZ24gKyBhcmcpLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICBwYWQgPSBwaC53aWR0aCA/IChwYWRfbGVuZ3RoID4gMCA/IHBhZF9jaGFyYWN0ZXIucmVwZWF0KHBhZF9sZW5ndGgpIDogJycpIDogJydcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ICs9IHBoLmFsaWduID8gc2lnbiArIGFyZyArIHBhZCA6IChwYWRfY2hhcmFjdGVyID09PSAnMCcgPyBzaWduICsgcGFkICsgYXJnIDogcGFkICsgc2lnbiArIGFyZylcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dHB1dFxuICAgIH1cblxuICAgIHZhciBzcHJpbnRmX2NhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKVxuXG4gICAgZnVuY3Rpb24gc3ByaW50Zl9wYXJzZShmbXQpIHtcbiAgICAgICAgaWYgKHNwcmludGZfY2FjaGVbZm10XSkge1xuICAgICAgICAgICAgcmV0dXJuIHNwcmludGZfY2FjaGVbZm10XVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIF9mbXQgPSBmbXQsIG1hdGNoLCBwYXJzZV90cmVlID0gW10sIGFyZ19uYW1lcyA9IDBcbiAgICAgICAgd2hpbGUgKF9mbXQpIHtcbiAgICAgICAgICAgIGlmICgobWF0Y2ggPSByZS50ZXh0LmV4ZWMoX2ZtdCkpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcGFyc2VfdHJlZS5wdXNoKG1hdGNoWzBdKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoKG1hdGNoID0gcmUubW9kdWxvLmV4ZWMoX2ZtdCkpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcGFyc2VfdHJlZS5wdXNoKCclJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKChtYXRjaCA9IHJlLnBsYWNlaG9sZGVyLmV4ZWMoX2ZtdCkpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoWzJdKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ19uYW1lcyB8PSAxXG4gICAgICAgICAgICAgICAgICAgIHZhciBmaWVsZF9saXN0ID0gW10sIHJlcGxhY2VtZW50X2ZpZWxkID0gbWF0Y2hbMl0sIGZpZWxkX21hdGNoID0gW11cbiAgICAgICAgICAgICAgICAgICAgaWYgKChmaWVsZF9tYXRjaCA9IHJlLmtleS5leGVjKHJlcGxhY2VtZW50X2ZpZWxkKSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX2xpc3QucHVzaChmaWVsZF9tYXRjaFsxXSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgocmVwbGFjZW1lbnRfZmllbGQgPSByZXBsYWNlbWVudF9maWVsZC5zdWJzdHJpbmcoZmllbGRfbWF0Y2hbMF0ubGVuZ3RoKSkgIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChmaWVsZF9tYXRjaCA9IHJlLmtleV9hY2Nlc3MuZXhlYyhyZXBsYWNlbWVudF9maWVsZCkpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX2xpc3QucHVzaChmaWVsZF9tYXRjaFsxXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKGZpZWxkX21hdGNoID0gcmUuaW5kZXhfYWNjZXNzLmV4ZWMocmVwbGFjZW1lbnRfZmllbGQpKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9saXN0LnB1c2goZmllbGRfbWF0Y2hbMV0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ1tzcHJpbnRmXSBmYWlsZWQgdG8gcGFyc2UgbmFtZWQgYXJndW1lbnQga2V5JylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ1tzcHJpbnRmXSBmYWlsZWQgdG8gcGFyc2UgbmFtZWQgYXJndW1lbnQga2V5JylcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBtYXRjaFsyXSA9IGZpZWxkX2xpc3RcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ19uYW1lcyB8PSAyXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChhcmdfbmFtZXMgPT09IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdbc3ByaW50Zl0gbWl4aW5nIHBvc2l0aW9uYWwgYW5kIG5hbWVkIHBsYWNlaG9sZGVycyBpcyBub3QgKHlldCkgc3VwcG9ydGVkJylcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBwYXJzZV90cmVlLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBtYXRjaFswXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtX25vOiAgICBtYXRjaFsxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleXM6ICAgICAgICBtYXRjaFsyXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpZ246ICAgICAgICBtYXRjaFszXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZF9jaGFyOiAgICBtYXRjaFs0XSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduOiAgICAgICBtYXRjaFs1XSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAgICAgICBtYXRjaFs2XSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZWNpc2lvbjogICBtYXRjaFs3XSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICAgICAgICBtYXRjaFs4XVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdbc3ByaW50Zl0gdW5leHBlY3RlZCBwbGFjZWhvbGRlcicpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBfZm10ID0gX2ZtdC5zdWJzdHJpbmcobWF0Y2hbMF0ubGVuZ3RoKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzcHJpbnRmX2NhY2hlW2ZtdF0gPSBwYXJzZV90cmVlXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZXhwb3J0IHRvIGVpdGhlciBicm93c2VyIG9yIG5vZGUuanNcbiAgICAgKi9cbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBxdW90ZS1wcm9wcyAqL1xuICAgIGlmICh0eXBlb2YgZXhwb3J0cyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgZXhwb3J0c1snc3ByaW50ZiddID0gc3ByaW50ZlxuICAgICAgICBleHBvcnRzWyd2c3ByaW50ZiddID0gdnNwcmludGZcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHdpbmRvd1snc3ByaW50ZiddID0gc3ByaW50ZlxuICAgICAgICB3aW5kb3dbJ3ZzcHJpbnRmJ10gPSB2c3ByaW50ZlxuXG4gICAgICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZVsnYW1kJ10pIHtcbiAgICAgICAgICAgIGRlZmluZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAnc3ByaW50Zic6IHNwcmludGYsXG4gICAgICAgICAgICAgICAgICAgICd2c3ByaW50Zic6IHZzcHJpbnRmXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKiBlc2xpbnQtZW5hYmxlIHF1b3RlLXByb3BzICovXG59KCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHZhcmlhbmNlKHZhbHVlcywgdmFsdWVvZikge1xuICBsZXQgY291bnQgPSAwO1xuICBsZXQgZGVsdGE7XG4gIGxldCBtZWFuID0gMDtcbiAgbGV0IHN1bSA9IDA7XG4gIGlmICh2YWx1ZW9mID09PSB1bmRlZmluZWQpIHtcbiAgICBmb3IgKGxldCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgIGlmICh2YWx1ZSAhPSBudWxsICYmICh2YWx1ZSA9ICt2YWx1ZSkgPj0gdmFsdWUpIHtcbiAgICAgICAgZGVsdGEgPSB2YWx1ZSAtIG1lYW47XG4gICAgICAgIG1lYW4gKz0gZGVsdGEgLyArK2NvdW50O1xuICAgICAgICBzdW0gKz0gZGVsdGEgKiAodmFsdWUgLSBtZWFuKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbGV0IGluZGV4ID0gLTE7XG4gICAgZm9yIChsZXQgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICBpZiAoKHZhbHVlID0gdmFsdWVvZih2YWx1ZSwgKytpbmRleCwgdmFsdWVzKSkgIT0gbnVsbCAmJiAodmFsdWUgPSArdmFsdWUpID49IHZhbHVlKSB7XG4gICAgICAgIGRlbHRhID0gdmFsdWUgLSBtZWFuO1xuICAgICAgICBtZWFuICs9IGRlbHRhIC8gKytjb3VudDtcbiAgICAgICAgc3VtICs9IGRlbHRhICogKHZhbHVlIC0gbWVhbik7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChjb3VudCA+IDEpIHJldHVybiBzdW0gLyAoY291bnQgLSAxKTtcbn1cbiIsImltcG9ydCB7IE1vbWVudCB9IGZyb20gXCJtb21lbnRcIjtcbmltcG9ydCB7XG4gICAgRGF0YXNldHMsXG4gICAgRGF0YVBvaW50LFxuICAgIFJlbmRlckluZm8sXG4gICAgUGllSW5mbyxcbiAgICBNb250aEluZm8sXG4gICAgRGF0YXNldCxcbiAgICBTaXplLFxuICAgIFRyYW5zZm9ybSxcbiAgICBDaGFydEVsZW1lbnRzLFxuICAgIEdyYXBoVHlwZSxcbiAgICBWYWx1ZVR5cGUsXG59IGZyb20gXCIuL2RhdGFcIjtcbmltcG9ydCAqIGFzIGhlbHBlciBmcm9tIFwiLi9oZWxwZXJcIjtcbmltcG9ydCAqIGFzIGQzIGZyb20gXCJkM1wiO1xuaW1wb3J0ICogYXMgZXhwciBmcm9tIFwiLi9leHByXCI7XG5pbXBvcnQgeyBwaWUgfSBmcm9tIFwiZDNcIjtcblxuZnVuY3Rpb24gc2V0Q2hhcnRTY2FsZShcbiAgICBfY2FudmFzOiBIVE1MRWxlbWVudCxcbiAgICBjaGFydEVsZW1lbnRzOiBDaGFydEVsZW1lbnRzLFxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm9cbikge1xuICAgIGxldCBjYW52YXMgPSBkMy5zZWxlY3QoX2NhbnZhcyk7XG4gICAgbGV0IHN2ZyA9IGNoYXJ0RWxlbWVudHMuc3ZnO1xuICAgIGxldCBzdmdXaWR0aCA9IHBhcnNlRmxvYXQoc3ZnLmF0dHIoXCJ3aWR0aFwiKSk7XG4gICAgbGV0IHN2Z0hlaWdodCA9IHBhcnNlRmxvYXQoc3ZnLmF0dHIoXCJoZWlnaHRcIikpO1xuICAgIHN2Zy5hdHRyKFwid2lkdGhcIiwgbnVsbClcbiAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgbnVsbClcbiAgICAgICAgLmF0dHIoXCJ2aWV3Qm94XCIsIGAwIDAgJHtzdmdXaWR0aH0gJHtzdmdIZWlnaHR9YClcbiAgICAgICAgLmF0dHIoXCJwcmVzZXJ2ZUFzcGVjdFJhdGlvXCIsIFwieE1pZFlNaWQgbWVldFwiKTtcblxuICAgIGlmIChyZW5kZXJJbmZvLmZpdFBhbmVsV2lkdGgpIHtcbiAgICAgICAgY2FudmFzLnN0eWxlKFwid2lkdGhcIiwgXCIxMDAlXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNhbnZhcy5zdHlsZShcbiAgICAgICAgICAgIFwid2lkdGhcIixcbiAgICAgICAgICAgIChzdmdXaWR0aCAqIHJlbmRlckluZm8uZml4ZWRTY2FsZSkudG9TdHJpbmcoKSArIFwicHhcIlxuICAgICAgICApO1xuICAgICAgICBjYW52YXMuc3R5bGUoXG4gICAgICAgICAgICBcImhlaWdodFwiLFxuICAgICAgICAgICAgKHN2Z0hlaWdodCAqIHJlbmRlckluZm8uZml4ZWRTY2FsZSkudG9TdHJpbmcoKSArIFwicHhcIlxuICAgICAgICApO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlQXJlYXMoXG4gICAgY2hhcnRFbGVtZW50czogQ2hhcnRFbGVtZW50cyxcbiAgICBjYW52YXM6IEhUTUxFbGVtZW50LFxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXG4gICAgcGllSW5mbzogUGllSW5mb1xuKTogQ2hhcnRFbGVtZW50cyB7XG4gICAgLy8gY2xlYW4gYXJlYXNcbiAgICBkMy5zZWxlY3QoY2FudmFzKS5zZWxlY3QoXCIjc3ZnXCIpLnJlbW92ZSgpO1xuICAgIHZhciBwcm9wcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGNoYXJ0RWxlbWVudHMpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgLy8gZDMuc2VsZWN0KGNoYXJ0RWxlbWVudHNbcHJvcHNbaV1dKS5yZW1vdmUoKTtcbiAgICAgICAgZGVsZXRlIGNoYXJ0RWxlbWVudHNbcHJvcHNbaV1dO1xuICAgIH1cbiAgICAvLyBjb25zb2xlLmxvZyhjaGFydEVsZW1lbnRzKTtcblxuICAgIC8vIHdob2xlIGFyZWEgZm9yIHBsb3R0aW5nLCBpbmNsdWRlcyBtYXJnaW5zXG4gICAgbGV0IHN2ZyA9IGQzXG4gICAgICAgIC5zZWxlY3QoY2FudmFzKVxuICAgICAgICAuYXBwZW5kKFwic3ZnXCIpXG4gICAgICAgIC5hdHRyKFwiaWRcIiwgXCJzdmdcIilcbiAgICAgICAgLmF0dHIoXG4gICAgICAgICAgICBcIndpZHRoXCIsXG4gICAgICAgICAgICByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS53aWR0aCArXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5tYXJnaW4ubGVmdCArXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5tYXJnaW4ucmlnaHRcbiAgICAgICAgKVxuICAgICAgICAuYXR0cihcbiAgICAgICAgICAgIFwiaGVpZ2h0XCIsXG4gICAgICAgICAgICByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS5oZWlnaHQgK1xuICAgICAgICAgICAgICAgIHJlbmRlckluZm8ubWFyZ2luLnRvcCArXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5tYXJnaW4uYm90dG9tXG4gICAgICAgICk7XG4gICAgY2hhcnRFbGVtZW50c1tcInN2Z1wiXSA9IHN2ZztcblxuICAgIC8vIGdyYXBoQXJlYSwgaW5jbHVkZXMgY2hhcnRBcmVhLCB0aXRsZSwgbGVnZW5kXG4gICAgbGV0IGdyYXBoQXJlYSA9IHN2Z1xuICAgICAgICAuYXBwZW5kKFwiZ1wiKVxuICAgICAgICAuYXR0cihcImlkXCIsIFwiZ3JhcGhBcmVhXCIpXG4gICAgICAgIC5hdHRyKFxuICAgICAgICAgICAgXCJ0cmFuc2Zvcm1cIixcbiAgICAgICAgICAgIFwidHJhbnNsYXRlKFwiICtcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLm1hcmdpbi5sZWZ0ICtcbiAgICAgICAgICAgICAgICBcIixcIiArXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5tYXJnaW4udG9wICtcbiAgICAgICAgICAgICAgICBcIilcIlxuICAgICAgICApXG4gICAgICAgIC5hdHRyKFwid2lkdGhcIiwgcmVuZGVySW5mby5kYXRhQXJlYVNpemUud2lkdGggKyByZW5kZXJJbmZvLm1hcmdpbi5yaWdodClcbiAgICAgICAgLmF0dHIoXG4gICAgICAgICAgICBcImhlaWdodFwiLFxuICAgICAgICAgICAgcmVuZGVySW5mby5kYXRhQXJlYVNpemUuaGVpZ2h0ICsgcmVuZGVySW5mby5tYXJnaW4uYm90dG9tXG4gICAgICAgICk7XG4gICAgY2hhcnRFbGVtZW50c1tcImdyYXBoQXJlYVwiXSA9IGdyYXBoQXJlYTtcblxuICAgIC8vIGRhdGFBcmVhLCB1bmRlciBncmFwaEFyZWEsIGluY2x1ZGVzIHBvaW50cywgbGluZXMsIHhBeGlzLCB5QXhpc1xuICAgIGxldCBkYXRhQXJlYSA9IGdyYXBoQXJlYVxuICAgICAgICAuYXBwZW5kKFwiZ1wiKVxuICAgICAgICAuYXR0cihcImlkXCIsIFwiZGF0YUFyZWFcIilcbiAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS53aWR0aClcbiAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgcmVuZGVySW5mby5kYXRhQXJlYVNpemUuaGVpZ2h0KTtcbiAgICBjaGFydEVsZW1lbnRzW1wiZGF0YUFyZWFcIl0gPSBkYXRhQXJlYTtcblxuICAgIHJldHVybiBjaGFydEVsZW1lbnRzO1xufVxuXG5mdW5jdGlvbiByZW5kZXJUaXRsZShcbiAgICBjYW52YXM6IEhUTUxFbGVtZW50LFxuICAgIGNoYXJ0RWxlbWVudHM6IENoYXJ0RWxlbWVudHMsXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mbyxcbiAgICBwaWVJbmZvOiBQaWVJbmZvXG4pIHtcbiAgICAvLyBjb25zb2xlLmxvZyhcInJlbmRlclRpdGxlXCIpO1xuICAgIC8vIHVuZGVyIGdyYXBoQXJlYVxuXG4gICAgaWYgKCFyZW5kZXJJbmZvIHx8ICFwaWVJbmZvKSByZXR1cm47XG5cbiAgICBpZiAoIXBpZUluZm8udGl0bGUpIHJldHVybjtcbiAgICBsZXQgdGl0bGVTaXplID0gaGVscGVyLm1lYXN1cmVUZXh0U2l6ZShwaWVJbmZvLnRpdGxlLCBcInRyYWNrZXItdGl0bGVcIik7XG5cbiAgICAvLyBBcHBlbmQgdGl0bGVcbiAgICBsZXQgdGl0bGUgPSBjaGFydEVsZW1lbnRzLmdyYXBoQXJlYVxuICAgICAgICAuYXBwZW5kKFwidGV4dFwiKVxuICAgICAgICAudGV4dChwaWVJbmZvLnRpdGxlKSAvLyBwaXZvdCBhdCBjZW50ZXJcbiAgICAgICAgLmF0dHIoXCJpZFwiLCBcInRpdGxlXCIpXG4gICAgICAgIC5hdHRyKFxuICAgICAgICAgICAgXCJ0cmFuc2Zvcm1cIixcbiAgICAgICAgICAgIFwidHJhbnNsYXRlKFwiICtcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS53aWR0aCAvIDIuMCArXG4gICAgICAgICAgICAgICAgXCIsXCIgK1xuICAgICAgICAgICAgICAgIHRpdGxlU2l6ZS5oZWlnaHQgLyAyLjAgK1xuICAgICAgICAgICAgICAgIFwiKVwiXG4gICAgICAgIClcbiAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgdGl0bGVTaXplLmhlaWdodCkgLy8gZm9yIGxhdGVyIHVzZVxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci10aXRsZVwiKTtcbiAgICBjaGFydEVsZW1lbnRzW1widGl0bGVcIl0gPSB0aXRsZTtcblxuICAgIC8vIEV4cGFuZCBwYXJlbnQgYXJlYXNcbiAgICBoZWxwZXIuZXhwYW5kQXJlYShjaGFydEVsZW1lbnRzLnN2ZywgMCwgdGl0bGVTaXplLmhlaWdodCk7XG4gICAgaGVscGVyLmV4cGFuZEFyZWEoY2hhcnRFbGVtZW50cy5ncmFwaEFyZWEsIDAsIHRpdGxlU2l6ZS5oZWlnaHQpO1xuXG4gICAgLy8gTW92ZSBzaWJsaW5nIGFyZWFzXG4gICAgaGVscGVyLm1vdmVBcmVhKGNoYXJ0RWxlbWVudHMuZGF0YUFyZWEsIDAsIHRpdGxlU2l6ZS5oZWlnaHQpO1xuXG4gICAgcmV0dXJuO1xufVxuXG5mdW5jdGlvbiByZW5kZXJMZWdlbmQoXG4gICAgY2FudmFzOiBIVE1MRWxlbWVudCxcbiAgICBjaGFydEVsZW1lbnRzOiBDaGFydEVsZW1lbnRzLFxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXG4gICAgcGllSW5mbzogUGllSW5mb1xuKSB7XG4gICAgLy8gY29uc29sZS5sb2coXCJyZW5kZXJMZWdlbmRcIik7XG4gICAgLy8gY29uc29sZS5sb2cocGlJbmZvLmxlZ2VuZFBvc2l0aW9uKTtcbiAgICAvLyBjb25zb2xlLmxvZyhwaUluZm8ubGVnZW5kT3JpZW50YXRpb24pO1xuXG4gICAgLy8gR2V0IGNoYXJ0IGVsZW1lbnRzXG4gICAgbGV0IHN2ZyA9IGNoYXJ0RWxlbWVudHMuc3ZnO1xuICAgIGxldCBncmFwaEFyZWEgPSBjaGFydEVsZW1lbnRzLmdyYXBoQXJlYTtcbiAgICBsZXQgZGF0YUFyZWEgPSBjaGFydEVsZW1lbnRzLmRhdGFBcmVhO1xuICAgIGxldCB0aXRsZSA9IGNoYXJ0RWxlbWVudHMudGl0bGU7XG5cbiAgICAvLyBHZXQgZWxlbWVudCB3aWR0aCBhbmQgaGVpZ2h0XG4gICAgbGV0IHRpdGxlSGVpZ2h0ID0gMC4wO1xuICAgIGlmICh0aXRsZSkge1xuICAgICAgICB0aXRsZUhlaWdodCA9IHBhcnNlRmxvYXQodGl0bGUuYXR0cihcImhlaWdodFwiKSk7XG4gICAgfVxuXG4gICAgLy8gR2V0IG5hbWVzIGFuZCB0aGVpciBkaW1lbnNpb25cbiAgICBsZXQgbmFtZXMgPSBwaWVJbmZvLmRhdGFOYW1lO1xuICAgIGxldCBuYW1lU2l6ZXMgPSBuYW1lcy5tYXAoZnVuY3Rpb24gKG4pIHtcbiAgICAgICAgcmV0dXJuIGhlbHBlci5tZWFzdXJlVGV4dFNpemUobiwgXCJ0cmFja2VyLWxlZ2VuZC1sYWJlbFwiKTtcbiAgICB9KTtcbiAgICBsZXQgaW5kTWF4TmFtZSA9IDA7XG4gICAgbGV0IG1heE5hbWVXaWR0aCA9IDAuMDtcbiAgICBmb3IgKGxldCBpbmQgPSAwOyBpbmQgPCBuYW1lcy5sZW5ndGg7IGluZCsrKSB7XG4gICAgICAgIGlmIChuYW1lU2l6ZXNbaW5kXS53aWR0aCA+IG1heE5hbWVXaWR0aCkge1xuICAgICAgICAgICAgbWF4TmFtZVdpZHRoID0gbmFtZVNpemVzW2luZF0ud2lkdGg7XG4gICAgICAgICAgICBpbmRNYXhOYW1lID0gaW5kO1xuICAgICAgICB9XG4gICAgfVxuICAgIGxldCBtYXhOYW1lID0gbmFtZXNbaW5kTWF4TmFtZV07XG4gICAgbGV0IGNoYXJhY3RlcldpZHRoID0gbWF4TmFtZVdpZHRoIC8gbWF4TmFtZS5sZW5ndGg7XG4gICAgbGV0IG5hbWVIZWlnaHQgPSBuYW1lU2l6ZXNbaW5kTWF4TmFtZV0uaGVpZ2h0O1xuICAgIGxldCBudW1OYW1lcyA9IG5hbWVzLmxlbmd0aDtcblxuICAgIGxldCB4U3BhY2luZyA9IDIgKiBjaGFyYWN0ZXJXaWR0aDtcbiAgICBsZXQgeVNwYWNpbmcgPSBuYW1lSGVpZ2h0O1xuICAgIGxldCBtYXJrZXJXaWR0aCA9IDIgKiBjaGFyYWN0ZXJXaWR0aDtcblxuICAgIC8vIEdldCBsZWdlbmQgd2lkdGggYW5kIGhlaWdodFxuICAgIGxldCBsZWdlbmRXaWR0aCA9IDA7XG4gICAgbGV0IGxlZ2VuZEhlaWdodCA9IDA7XG4gICAgaWYgKHBpZUluZm8ubGVnZW5kT3JpZW50YXRpb24gPT09IFwidmVydGljYWxcIikge1xuICAgICAgICBsZWdlbmRXaWR0aCA9IHhTcGFjaW5nICogMyArIG1hcmtlcldpZHRoICsgbWF4TmFtZVdpZHRoO1xuICAgICAgICBsZWdlbmRIZWlnaHQgPSAobnVtTmFtZXMgKyAxKSAqIHlTcGFjaW5nO1xuICAgIH0gZWxzZSBpZiAocGllSW5mby5sZWdlbmRPcmllbnRhdGlvbiA9PT0gXCJob3Jpem9udGFsXCIpIHtcbiAgICAgICAgbGVnZW5kV2lkdGggPVxuICAgICAgICAgICAgKDIgKiB4U3BhY2luZyArIG1hcmtlcldpZHRoKSAqIG51bU5hbWVzICtcbiAgICAgICAgICAgIHhTcGFjaW5nICtcbiAgICAgICAgICAgIGQzLnN1bShuYW1lU2l6ZXMsIGZ1bmN0aW9uIChzLCBpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHMud2lkdGg7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgbGVnZW5kSGVpZ2h0ID0geVNwYWNpbmcgKyBuYW1lSGVpZ2h0O1xuICAgIH1cbiAgICAvLyBjb25zb2xlLmxvZyhcbiAgICAvLyAgICAgYG1heE5hbWU6ICR7bWF4TmFtZX0sIGNoYXJhY3RlcldpZHRoOiAke2NoYXJhY3RlcldpZHRofSwgbWF4TmFtZVdpZHRoOiAke21heE5hbWVXaWR0aH1gXG4gICAgLy8gKTtcbiAgICAvLyBjb25zb2xlLmxvZyhgeFNwYWNpbmc6JHt4U3BhY2luZ30sIG51bU5hbWVzOiAke251bU5hbWVzfSwgbWFya2VyV2lkdGg6ICR7bWFya2VyV2lkdGh9YCk7XG4gICAgLy8gY29uc29sZS5sb2coYGxlZ2VuZFdpZHRoOiAke2xlZ2VuZFdpZHRofSwgbGVnZW5kSGVpZ2h0OiAke2xlZ2VuZEhlaWdodH1gKTtcblxuICAgIC8vIENhbGN1YWx0ZSBsZW5nZW5kWCBhbmQgbGVnZW5kWVxuICAgIGxldCBsZWdlbmRYID0gMC4wOyAvLyByZWxhdGl2ZSB0byBncmFwaEFyZWFcbiAgICBsZXQgbGVnZW5kWSA9IDAuMDtcbiAgICBpZiAocGllSW5mby5sZWdlbmRQb3NpdGlvbiA9PT0gXCJ0b3BcIikge1xuICAgICAgICAvLyBiZWxvdyB0aXRsZVxuICAgICAgICBsZWdlbmRYID0gcmVuZGVySW5mby5kYXRhQXJlYVNpemUud2lkdGggLyAyLjAgLSBsZWdlbmRXaWR0aCAvIDIuMDtcbiAgICAgICAgbGVnZW5kWSA9IHRpdGxlSGVpZ2h0O1xuICAgICAgICAvLyBFeHBhbmQgc3ZnXG4gICAgICAgIGhlbHBlci5leHBhbmRBcmVhKHN2ZywgMCwgbGVnZW5kSGVpZ2h0ICsgeVNwYWNpbmcpO1xuICAgICAgICAvLyBNb3ZlIGRhdGFBcmVhIGRvd25cbiAgICAgICAgaGVscGVyLm1vdmVBcmVhKGRhdGFBcmVhLCAwLCBsZWdlbmRIZWlnaHQgKyB5U3BhY2luZyk7XG4gICAgfSBlbHNlIGlmIChwaWVJbmZvLmxlZ2VuZFBvc2l0aW9uID09PSBcImJvdHRvbVwiKSB7XG4gICAgICAgIC8vIGJlbGxvdyB4LWF4aXMgbGFiZWxcbiAgICAgICAgbGVnZW5kWCA9IHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoIC8gMi4wIC0gbGVnZW5kV2lkdGggLyAyLjA7XG4gICAgICAgIGxlZ2VuZFkgPSB0aXRsZUhlaWdodCArIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLmhlaWdodCArIHlTcGFjaW5nO1xuICAgICAgICAvLyBFeHBhbmQgc3ZnXG4gICAgICAgIGhlbHBlci5leHBhbmRBcmVhKHN2ZywgMCwgbGVnZW5kSGVpZ2h0ICsgeVNwYWNpbmcpO1xuICAgIH0gZWxzZSBpZiAocGllSW5mby5sZWdlbmRQb3NpdGlvbiA9PT0gXCJsZWZ0XCIpIHtcbiAgICAgICAgbGVnZW5kWCA9IDA7XG4gICAgICAgIGxlZ2VuZFkgPVxuICAgICAgICAgICAgdGl0bGVIZWlnaHQgK1xuICAgICAgICAgICAgcmVuZGVySW5mby5kYXRhQXJlYVNpemUuaGVpZ2h0IC8gMi4wIC1cbiAgICAgICAgICAgIGxlZ2VuZEhlaWdodCAvIDIuMDtcbiAgICAgICAgLy8gRXhwYW5kIHN2Z1xuICAgICAgICBoZWxwZXIuZXhwYW5kQXJlYShzdmcsIGxlZ2VuZFdpZHRoICsgeFNwYWNpbmcsIDApO1xuICAgICAgICAvLyBNb3ZlIGRhdGFBcmVhIHJpZ2h0XG4gICAgICAgIGhlbHBlci5tb3ZlQXJlYShkYXRhQXJlYSwgbGVnZW5kV2lkdGggKyB4U3BhY2luZywgMCk7XG4gICAgfSBlbHNlIGlmIChwaWVJbmZvLmxlZ2VuZFBvc2l0aW9uID09PSBcInJpZ2h0XCIpIHtcbiAgICAgICAgbGVnZW5kWCA9IHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoICsgeFNwYWNpbmc7XG4gICAgICAgIGxlZ2VuZFkgPVxuICAgICAgICAgICAgdGl0bGVIZWlnaHQgK1xuICAgICAgICAgICAgcmVuZGVySW5mby5kYXRhQXJlYVNpemUuaGVpZ2h0IC8gMi4wIC1cbiAgICAgICAgICAgIGxlZ2VuZEhlaWdodCAvIDIuMDtcbiAgICAgICAgLy8gRXhwYW5kIHN2Z1xuICAgICAgICBoZWxwZXIuZXhwYW5kQXJlYShzdmcsIGxlZ2VuZFdpZHRoICsgeFNwYWNpbmcsIDApO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2coYGxlZ2VuZFg6ICR7bGVnZW5kWH0sIGxlZ2VuZFk6ICR7bGVnZW5kWX1gKTtcblxuICAgIGxldCBsZWdlbmQgPSBjaGFydEVsZW1lbnRzLmdyYXBoQXJlYVxuICAgICAgICAuYXBwZW5kKFwiZ1wiKVxuICAgICAgICAuYXR0cihcImlkXCIsIFwibGVnZW5kXCIpXG4gICAgICAgIC5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgbGVnZW5kWCArIFwiLFwiICsgbGVnZW5kWSArIFwiKVwiKTtcbiAgICAvLyBjb25zb2xlLmxvZygnbGVnZW5kWDogJWQsIGxlZ2VuZFk6ICVkJywgbGVnZW5kWCwgbGVnZW5kWSk7XG5cbiAgICBsZXQgbGVnZW5kQmcgPSBsZWdlbmRcbiAgICAgICAgLmFwcGVuZChcInJlY3RcIilcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInRyYWNrZXItbGVnZW5kXCIpXG4gICAgICAgIC5hdHRyKFwid2lkdGhcIiwgbGVnZW5kV2lkdGgpXG4gICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIGxlZ2VuZEhlaWdodCk7XG4gICAgaWYgKHBpZUluZm8ubGVnZW5kQmdDb2xvcikge1xuICAgICAgICBsZWdlbmRCZy5zdHlsZShcImZpbGxcIiwgcGllSW5mby5sZWdlbmRCZ0NvbG9yKTtcbiAgICB9XG4gICAgaWYgKHBpZUluZm8ubGVnZW5kQm9yZGVyQ29sb3IpIHtcbiAgICAgICAgbGVnZW5kQmcuc3R5bGUoXCJzdHJva2VcIiwgcGllSW5mby5sZWdlbmRCb3JkZXJDb2xvcik7XG4gICAgfVxuXG4gICAgbGV0IG1hcmtlclJhZGl1cyA9IDUuMDtcbiAgICBsZXQgZmlyc3RNYXJrZXJYID0geFNwYWNpbmc7XG4gICAgbGV0IGZpcnN0TWFya2VyWSA9IG5hbWVIZWlnaHQ7XG4gICAgbGV0IGZpcnN0TGFiZWxYID0gZmlyc3RNYXJrZXJYICsgeFNwYWNpbmcgKyBtYXJrZXJXaWR0aDsgLy8geFNwYWNpbmcgKyAyICogeFNwYWluZ1xuICAgIGxldCBmaXJzdExhYmVsWSA9IGZpcnN0TWFya2VyWTtcblxuICAgIGlmIChwaWVJbmZvLmxlZ2VuZE9yaWVudGF0aW9uID09PSBcInZlcnRpY2FsXCIpIHtcbiAgICAgICAgLy8gcG9pbnRzXG4gICAgICAgIGxlZ2VuZFxuICAgICAgICAgICAgLnNlbGVjdEFsbChcIm1hcmtlcnNcIilcbiAgICAgICAgICAgIC5kYXRhKG5hbWVzKVxuICAgICAgICAgICAgLmVudGVyKClcbiAgICAgICAgICAgIC5hcHBlbmQoXCJjaXJjbGVcIilcbiAgICAgICAgICAgIC5hdHRyKFwiY3hcIiwgZmlyc3RNYXJrZXJYICsgbWFya2VyV2lkdGggLyAyLjApXG4gICAgICAgICAgICAuYXR0cihcImN5XCIsIGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGk6IG51bWJlcikge1xuICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdE1hcmtlclkgKyBpICogeVNwYWNpbmc7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmF0dHIoXCJyXCIsIGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGk6IG51bWJlcikge1xuICAgICAgICAgICAgICAgIHJldHVybiBtYXJrZXJSYWRpdXM7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnN0eWxlKFwiZmlsbFwiLCBmdW5jdGlvbiAobmFtZTogc3RyaW5nLCBpOiBudW1iZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGllSW5mby5kYXRhQ29sb3JbaV07XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAvLyBuYW1lc1xuICAgICAgICBsZXQgbmFtZUxhYmVscyA9IGxlZ2VuZFxuICAgICAgICAgICAgLnNlbGVjdEFsbChcImxhYmVsc1wiKVxuICAgICAgICAgICAgLmRhdGEobmFtZXMpXG4gICAgICAgICAgICAuZW50ZXIoKVxuICAgICAgICAgICAgLmFwcGVuZChcInRleHRcIilcbiAgICAgICAgICAgIC5hdHRyKFwieFwiLCBmaXJzdExhYmVsWClcbiAgICAgICAgICAgIC5hdHRyKFwieVwiLCBmdW5jdGlvbiAobmFtZTogc3RyaW5nLCBpOiBudW1iZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmlyc3RMYWJlbFkgKyBpICogeVNwYWNpbmc7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnRleHQoZnVuY3Rpb24gKG5hbWU6IHN0cmluZywgaTogbnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5hbWU7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnN0eWxlKFwiYWxpZ25tZW50LWJhc2VsaW5lXCIsIFwibWlkZGxlXCIpXG4gICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci1sZWdlbmQtbGFiZWxcIik7XG5cbiAgICAgICAgbmFtZUxhYmVscy5zdHlsZShcImZpbGxcIiwgZnVuY3Rpb24gKG5hbWU6IHN0cmluZywgaTogbnVtYmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gcGllSW5mby5kYXRhQ29sb3JbaV07XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAocGllSW5mby5sZWdlbmRPcmllbnRhdGlvbiA9PT0gXCJob3Jpem9udGFsXCIpIHtcbiAgICAgICAgbGV0IGN1cnJSZW5kZXJQb3NYID0gMC4wO1xuICAgICAgICBsZXQgY3VyclJlbmRlclBvc1gyID0gMC4wO1xuXG4gICAgICAgIC8vIHBvaW50c1xuICAgICAgICBjdXJyUmVuZGVyUG9zWCA9IDAuMDtcbiAgICAgICAgbGVnZW5kXG4gICAgICAgICAgICAuc2VsZWN0QWxsKFwibWFya2Vyc1wiKVxuICAgICAgICAgICAgLmRhdGEobmFtZXMpXG4gICAgICAgICAgICAuZW50ZXIoKVxuICAgICAgICAgICAgLmFwcGVuZChcImNpcmNsZVwiKVxuICAgICAgICAgICAgLmF0dHIoXCJjeFwiLCBmdW5jdGlvbiAobmFtZTogc3RyaW5nLCBpOiBudW1iZXIpIHtcbiAgICAgICAgICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBjdXJyUmVuZGVyUG9zWCA9IGZpcnN0TWFya2VyWCArIG1hcmtlcldpZHRoIC8gMi4wO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJSZW5kZXJQb3NYICs9XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lU2l6ZXNbaV0ud2lkdGggKyB4U3BhY2luZyArIG1hcmtlcldpZHRoICsgeFNwYWNpbmc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBjdXJyUmVuZGVyUG9zWDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuYXR0cihcImN5XCIsIGZpcnN0TWFya2VyWSlcbiAgICAgICAgICAgIC5hdHRyKFwiclwiLCBmdW5jdGlvbiAobmFtZTogc3RyaW5nLCBpOiBudW1iZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbWFya2VyUmFkaXVzO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5zdHlsZShcImZpbGxcIiwgZnVuY3Rpb24gKG5hbWU6IHN0cmluZywgaTogbnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBpZUluZm8uZGF0YUNvbG9yW2ldO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gbmFtZXNcbiAgICAgICAgY3VyclJlbmRlclBvc1ggPSAwLjA7XG4gICAgICAgIGxldCBuYW1lTGFiZWxzID0gbGVnZW5kXG4gICAgICAgICAgICAuc2VsZWN0QWxsKFwibGFiZWxzXCIpXG4gICAgICAgICAgICAuZGF0YShuYW1lcylcbiAgICAgICAgICAgIC5lbnRlcigpXG4gICAgICAgICAgICAuYXBwZW5kKFwidGV4dFwiKVxuICAgICAgICAgICAgLmF0dHIoXCJ4XCIsIGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGk6IG51bWJlcikge1xuICAgICAgICAgICAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJSZW5kZXJQb3NYID0gZmlyc3RMYWJlbFg7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY3VyclJlbmRlclBvc1ggKz1cbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVTaXplc1tpXS53aWR0aCArIHhTcGFjaW5nICsgbWFya2VyV2lkdGggKyB4U3BhY2luZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJSZW5kZXJQb3NYO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hdHRyKFwieVwiLCBmaXJzdExhYmVsWSlcbiAgICAgICAgICAgIC50ZXh0KGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGk6IG51bWJlcikge1xuICAgICAgICAgICAgICAgIHJldHVybiBuYW1lO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5zdHlsZShcImFsaWdubWVudC1iYXNlbGluZVwiLCBcIm1pZGRsZVwiKVxuICAgICAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInRyYWNrZXItbGVnZW5kLWxhYmVsXCIpO1xuXG4gICAgICAgIG5hbWVMYWJlbHMuc3R5bGUoXCJmaWxsXCIsIGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGk6IG51bWJlcikge1xuICAgICAgICAgICAgcmV0dXJuIHBpZUluZm8uZGF0YUNvbG9yW2ldO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHJlbmRlclBpZShcbiAgICBjYW52YXM6IEhUTUxFbGVtZW50LFxuICAgIGNoYXJ0RWxlbWVudHM6IENoYXJ0RWxlbWVudHMsXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mbyxcbiAgICBwaWVJbmZvOiBQaWVJbmZvXG4pIHtcbiAgICAvLyBjb25zb2xlLmxvZyhcInJlbmRlclBpZVwiKTtcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvKTtcbiAgICBsZXQgZXJyb3JNZXNzYWdlID0gXCJcIjtcblxuICAgIGxldCByYWRpdXMgPSByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS53aWR0aCAqIDAuNTtcbiAgICBsZXQgb3V0dGVyUmFkaXVzID0gcmFkaXVzICogMC43O1xuICAgIGxldCBpbm5lclJhZGl1cyA9IG91dHRlclJhZGl1cyAqIHBpZUluZm8ucmF0aW9Jbm5lclJhZGl1cztcblxuICAgIC8vIHZhbHVlc1xuICAgIGxldCB2YWx1ZXM6IEFycmF5PG51bWJlcj4gPSBbXTtcbiAgICBmb3IgKGxldCBzdHJFeHByIG9mIHBpZUluZm8uZGF0YSkge1xuICAgICAgICBsZXQgcmV0VmFsdWUgPSBleHByLnJlc29sdmVWYWx1ZShzdHJFeHByLCByZW5kZXJJbmZvKTtcbiAgICAgICAgaWYgKHR5cGVvZiByZXRWYWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gcmV0VmFsdWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcmV0VmFsdWUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHZhbHVlcy5wdXNoKHJldFZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoZXJyb3JNZXNzYWdlICE9PSBcIlwiKSB7XG4gICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XG4gICAgfVxuICAgIC8vIGNvbnNvbGUubG9nKHZhbHVlcyk7XG5cbiAgICAvLyBsYWJlbHNcbiAgICBsZXQgbGFiZWxzOiBBcnJheTxzdHJpbmc+ID0gW107XG4gICAgZm9yIChsZXQgc3RyRXhwciBvZiBwaWVJbmZvLmxhYmVsKSB7XG4gICAgICAgIGxldCByZXRMYWJlbCA9IGV4cHIucmVzb2x2ZVRlbXBsYXRlKHN0ckV4cHIsIHJlbmRlckluZm8pO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhyZXRMYWJlbCk7XG4gICAgICAgIGlmIChyZXRMYWJlbC5zdGFydHNXaXRoKFwiRXJyb3JcIikpIHtcbiAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IHJldExhYmVsO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgbGFiZWxzLnB1c2gocmV0TGFiZWwpO1xuICAgIH1cbiAgICBpZiAoZXJyb3JNZXNzYWdlICE9PSBcIlwiKSB7XG4gICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XG4gICAgfVxuICAgIC8vIGNvbnNvbGUubG9nKGxhYmVscyk7XG5cbiAgICAvLyBoaWRlTGFiZWxMZXNzVGhhblxuICAgIGxldCBoaWRlTGFiZWxMZXNzVGhhbiA9IHBpZUluZm8uaGlkZUxhYmVsTGVzc1RoYW47XG5cbiAgICAvLyBsYWJlbCBzaXplc1xuICAgIGxldCBsYWJlbFNpemVzID0gbGFiZWxzLm1hcChmdW5jdGlvbiAobikge1xuICAgICAgICByZXR1cm4gaGVscGVyLm1lYXN1cmVUZXh0U2l6ZShuLCBcInRyYWNrZXItdGljay1sYWJlbFwiKTtcbiAgICB9KTtcblxuICAgIC8vIGV4dExhYmVsXG4gICAgbGV0IGV4dExhYmVsczogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICAgIGZvciAobGV0IHN0ckV4cHIgb2YgcGllSW5mby5leHRMYWJlbCkge1xuICAgICAgICBsZXQgcmV0RXh0TGFiZWwgPSBleHByLnJlc29sdmVUZW1wbGF0ZShzdHJFeHByLCByZW5kZXJJbmZvKTtcbiAgICAgICAgaWYgKHJldEV4dExhYmVsLnN0YXJ0c1dpdGgoXCJFcnJvclwiKSkge1xuICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gcmV0RXh0TGFiZWw7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBleHRMYWJlbHMucHVzaChyZXRFeHRMYWJlbCk7XG4gICAgfVxuICAgIGlmIChlcnJvck1lc3NhZ2UgIT09IFwiXCIpIHtcbiAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2coZXh0TGFiZWxzKTtcblxuICAgIC8vIGV4dExhYmVsIHNpemVzXG4gICAgbGV0IGV4dExhYmVsU2l6ZXMgPSBleHRMYWJlbHMubWFwKGZ1bmN0aW9uIChuKSB7XG4gICAgICAgIHJldHVybiBoZWxwZXIubWVhc3VyZVRleHRTaXplKG4sIFwidHJhY2tlci1waWUtbGFiZWxcIik7XG4gICAgfSk7XG4gICAgLy8gY29uc29sZS5sb2coZXh0TGFiZWxTaXplcyk7XG5cbiAgICBsZXQgc2hvd0V4dExhYmVsT25seUlmTm9MYWJlbCA9IHBpZUluZm8uc2hvd0V4dExhYmVsT25seUlmTm9MYWJlbDtcblxuICAgIC8vIHNjYWxlXG4gICAgbGV0IGNvbG9yU2NhbGUgPSBkMy5zY2FsZU9yZGluYWwoKS5yYW5nZShwaWVJbmZvLmRhdGFDb2xvcik7XG5cbiAgICBsZXQgc2VjdG9yc0dyb3VwID0gY2hhcnRFbGVtZW50cy5kYXRhQXJlYS5hcHBlbmQoXCJnXCIpO1xuICAgIHNlY3RvcnNHcm91cC5hdHRyKFwidHJhbnNmb3JtXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IHN0clRyYW5zbGF0ZSA9XG4gICAgICAgICAgICBcInRyYW5zbGF0ZShcIiArXG4gICAgICAgICAgICByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS53aWR0aCAqIDAuNSArXG4gICAgICAgICAgICBcIixcIiArXG4gICAgICAgICAgICByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS5oZWlnaHQgKiAwLjUgK1xuICAgICAgICAgICAgXCIpXCI7XG5cbiAgICAgICAgcmV0dXJuIHN0clRyYW5zbGF0ZTtcbiAgICB9KTtcblxuICAgIGxldCBwaWUgPSBkMy5waWUoKTtcbiAgICBsZXQgcGllVmFsdWVzID0gcGllKHZhbHVlcyk7XG5cbiAgICBsZXQgc2VjdG9ycyA9IHNlY3RvcnNHcm91cFxuICAgICAgICAuc2VsZWN0QWxsKFwic2VjdG9yXCIpXG4gICAgICAgIC5kYXRhKHBpZVZhbHVlcylcbiAgICAgICAgLmVudGVyKClcbiAgICAgICAgLmFwcGVuZChcImdcIilcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInNlY3RvclwiKTtcblxuICAgIGxldCBhcmMgPSBkMy5hcmMoKS5pbm5lclJhZGl1cyhpbm5lclJhZGl1cykub3V0ZXJSYWRpdXMob3V0dGVyUmFkaXVzKTtcblxuICAgIHZhciBoaWRkZW5BcmMgPSBkM1xuICAgICAgICAuYXJjKClcbiAgICAgICAgLmlubmVyUmFkaXVzKHJhZGl1cyAqIDAuOSlcbiAgICAgICAgLm91dGVyUmFkaXVzKHJhZGl1cyAqIDAuOSk7XG5cbiAgICBsZXQgc2VjdG9yUGF0aHMgPSBzZWN0b3JzXG4gICAgICAgIC5hcHBlbmQoXCJwYXRoXCIpXG4gICAgICAgIC5hdHRyKFwiZmlsbFwiLCBmdW5jdGlvbiAoZDogYW55LCBpOiBudW1iZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBjb2xvclNjYWxlKGkudG9TdHJpbmcoKSk7XG4gICAgICAgIH0pXG4gICAgICAgIC5hdHRyKFwiZFwiLCBhcmMpO1xuXG4gICAgZnVuY3Rpb24gaXNMYWJlbEhpZGRlbihhcmNPYmo6IGFueSkge1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhgc3RhcnQvZW5kOiAke2FyY09iai5zdGFydEFuZ2xlfS8ke2FyY09iai5lbmRBbmdsZX1gKTtcbiAgICAgICAgbGV0IGZyYWN0aW9uID0gKGFyY09iai5lbmRBbmdsZSAtIGFyY09iai5zdGFydEFuZ2xlKSAvICgyLjAgKiBNYXRoLlBJKTtcbiAgICAgICAgaWYgKGZyYWN0aW9uIDwgaGlkZUxhYmVsTGVzc1RoYW4pIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBsYWJlbCBlbGVtZW50c1xuICAgIGxldCBsYWJlbEVsZW1lbnRzID0gc2VjdG9yc0dyb3VwXG4gICAgICAgIC5zZWxlY3RBbGwoXCJsYWJlbFwiKVxuICAgICAgICAuZGF0YShwaWUodmFsdWVzKSlcbiAgICAgICAgLmVudGVyKClcbiAgICAgICAgLmFwcGVuZChcInRleHRcIilcbiAgICAgICAgLnRleHQoZnVuY3Rpb24gKGFyY09iajogYW55LCBpOiBudW1iZXIpIHtcbiAgICAgICAgICAgIGlmIChpc0xhYmVsSGlkZGVuKGFyY09iaikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBsYWJlbHNbaV07XG4gICAgICAgIH0pXG4gICAgICAgIC5hdHRyKFwidHJhbnNmb3JtXCIsIGZ1bmN0aW9uIChkOiBhbnkpIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgXCJ0cmFuc2xhdGUoXCIgK1xuICAgICAgICAgICAgICAgIGFyYy5jZW50cm9pZChkKVswXSArXG4gICAgICAgICAgICAgICAgXCIsXCIgK1xuICAgICAgICAgICAgICAgIGFyYy5jZW50cm9pZChkKVsxXSArXG4gICAgICAgICAgICAgICAgXCIpXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pXG4gICAgICAgIC5zdHlsZShcInRleHQtYW5jaG9yXCIsIFwibWlkZGxlXCIpXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLXBpZS1sYWJlbFwiKTtcblxuICAgIGZ1bmN0aW9uIGdldE1pZEFuZ2xlKGFyY09iajogYW55KSB7XG4gICAgICAgIHJldHVybiBhcmNPYmouc3RhcnRBbmdsZSArIChhcmNPYmouZW5kQW5nbGUgLSBhcmNPYmouc3RhcnRBbmdsZSkgLyAyO1xuICAgIH1cblxuICAgIC8vIGV4dGVybmFsIGxhYmVsIGVsZW1lbnRzXG4gICAgbGV0IGV4dExhYmVsRWxlbWVudHMgPSBzZWN0b3JzR3JvdXBcbiAgICAgICAgLnNlbGVjdEFsbChcImV4dExhYmVsXCIpXG4gICAgICAgIC5kYXRhKHBpZVZhbHVlcylcbiAgICAgICAgLmVudGVyKClcbiAgICAgICAgLmFwcGVuZChcInRleHRcIilcbiAgICAgICAgLnRleHQoZnVuY3Rpb24gKGFyY09iajogYW55LCBpOiBudW1iZXIpIHtcbiAgICAgICAgICAgIGlmIChzaG93RXh0TGFiZWxPbmx5SWZOb0xhYmVsKSB7XG4gICAgICAgICAgICAgICAgaWYgKGxhYmVsc1tpXSA9PT0gXCJcIiB8fCBpc0xhYmVsSGlkZGVuKGFyY09iaikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4dExhYmVsc1tpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBleHRMYWJlbHNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5hdHRyKFwidHJhbnNmb3JtXCIsIGZ1bmN0aW9uIChhcmNPYmo6IGFueSwgaTogbnVtYmVyKSB7XG4gICAgICAgICAgICBsZXQgcG9zTGFiZWwgPSBoaWRkZW5BcmMuY2VudHJvaWQoYXJjT2JqKTtcbiAgICAgICAgICAgIGxldCBtaWRBbmdsZSA9IGdldE1pZEFuZ2xlKGFyY09iaik7XG5cbiAgICAgICAgICAgIHBvc0xhYmVsWzBdID1cbiAgICAgICAgICAgICAgICAocmFkaXVzICogMC45OSAtIGV4dExhYmVsU2l6ZXNbaV0ud2lkdGgpICpcbiAgICAgICAgICAgICAgICAobWlkQW5nbGUgPCBNYXRoLlBJID8gMSA6IC0xKTtcbiAgICAgICAgICAgIHJldHVybiBcInRyYW5zbGF0ZShcIiArIHBvc0xhYmVsWzBdICsgXCIsXCIgKyBwb3NMYWJlbFsxXSArIFwiKVwiO1xuICAgICAgICB9KVxuICAgICAgICAuc3R5bGUoXCJ0ZXh0LWFuY2hvclwiLCBmdW5jdGlvbiAoYXJjT2JqOiBhbnkpIHtcbiAgICAgICAgICAgIGxldCBtaWRBbmdsZSA9IGdldE1pZEFuZ2xlKGFyY09iaik7XG4gICAgICAgICAgICByZXR1cm4gbWlkQW5nbGUgPCBNYXRoLlBJID8gXCJzdGFydFwiIDogXCJlbmRcIjtcbiAgICAgICAgfSlcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInRyYWNrZXItcGllLWxhYmVsXCIpO1xuXG4gICAgZnVuY3Rpb24gZ2V0UG9pbnRzRm9yQ29ubmVjdGlvbkxpbmVzKGFyY09iajogYW55LCBpOiBudW1iZXIpIHtcbiAgICAgICAgbGV0IGxhYmVsV2lkdGggPSBsYWJlbFNpemVzW2ldLndpZHRoO1xuICAgICAgICBsZXQgZXh0TGFiZWxXaWR0aCA9IGV4dExhYmVsU2l6ZXNbaV0ud2lkdGg7XG4gICAgICAgIGxldCBsYWJlbEhpZGRlbiA9IGlzTGFiZWxIaWRkZW4oYXJjT2JqKTtcbiAgICAgICAgbGV0IG1pZEFuZ2xlID0gZ2V0TWlkQW5nbGUoYXJjT2JqKTtcblxuICAgICAgICBsZXQgcG9zTGFiZWwgPSBhcmMuY2VudHJvaWQoYXJjT2JqKTsgLy8gbGluZSBpbnNlcnRpb24gaW4gdGhlIHNsaWNlXG4gICAgICAgIGxldCBwb3NNaWRkbGUgPSBoaWRkZW5BcmMuY2VudHJvaWQoYXJjT2JqKTsgLy8gbGluZSBicmVhazogd2UgdXNlIHRoZSBvdGhlciBhcmMgZ2VuZXJhdG9yIHRoYXQgaGFzIGJlZW4gYnVpbHQgb25seSBmb3IgdGhhdFxuICAgICAgICBsZXQgcG9zRXh0TGFiZWwgPSBoaWRkZW5BcmMuY2VudHJvaWQoYXJjT2JqKTsgLy8gTGFiZWwgcG9zaXRpb24gPSBhbG1vc3QgdGhlIHNhbWUgYXMgcG9zQlxuICAgICAgICAvLyBjb25zb2xlLmxvZyhsYWJlbHNbaV0pO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhgbGFiZWwvbWlkZGxlL2V4dExhYmVsOiAke3Bvc0xhYmVsfS8ke3Bvc01pZGRsZX0vJHtwb3NFeHRMYWJlbH1gKTtcblxuICAgICAgICBsZXQgZGlzdE1pZGRsZVRvTGFiZWwgPSBNYXRoLnNxcnQoXG4gICAgICAgICAgICAocG9zTWlkZGxlWzBdIC0gcG9zTGFiZWxbMF0pICoqIDIgK1xuICAgICAgICAgICAgICAgIChwb3NNaWRkbGVbMV0gLSBwb3NMYWJlbFsxXSkgKiogMlxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChsYWJlbHNbaV0gIT09IFwiXCIpIHtcbiAgICAgICAgICAgIC8vIHNoaWZ0IHBvc0xhYmVsLCB0b3dhcmQgdGhlIG1pZGRsZSBwb2ludFxuICAgICAgICAgICAgcG9zTGFiZWxbMF0gPVxuICAgICAgICAgICAgICAgIHBvc0xhYmVsWzBdICtcbiAgICAgICAgICAgICAgICAoKHBvc01pZGRsZVswXSAtIHBvc0xhYmVsWzBdKSAqIGxhYmVsV2lkdGgpIC8gZGlzdE1pZGRsZVRvTGFiZWw7XG4gICAgICAgICAgICBwb3NMYWJlbFsxXSA9XG4gICAgICAgICAgICAgICAgcG9zTGFiZWxbMV0gK1xuICAgICAgICAgICAgICAgICgocG9zTWlkZGxlWzFdIC0gcG9zTGFiZWxbMV0pICogbGFiZWxXaWR0aCkgLyBkaXN0TWlkZGxlVG9MYWJlbDtcblxuICAgICAgICAgICAgLy8gc2hpZnQgcG9zRXh0TGFiZWxcbiAgICAgICAgICAgIHBvc0V4dExhYmVsWzBdID1cbiAgICAgICAgICAgICAgICAocmFkaXVzICogMC45OSAtIGV4dExhYmVsV2lkdGggLSAzKSAqXG4gICAgICAgICAgICAgICAgKG1pZEFuZ2xlIDwgTWF0aC5QSSA/IDEgOiAtMSk7IC8vIG11bHRpcGx5IGJ5IDEgb3IgLTEgdG8gcHV0IGl0IG9uIHRoZSByaWdodCBvciBvbiB0aGUgbGVmdFxuICAgICAgICB9XG5cbiAgICAgICAgZGlzdE1pZGRsZVRvTGFiZWwgPSBNYXRoLnNxcnQoXG4gICAgICAgICAgICAocG9zTWlkZGxlWzBdIC0gcG9zTGFiZWxbMF0pICoqIDIgK1xuICAgICAgICAgICAgICAgIChwb3NNaWRkbGVbMV0gLSBwb3NMYWJlbFsxXSkgKiogMlxuICAgICAgICApO1xuXG4gICAgICAgIGxldCBkaXN0RXh0TGFiZWxUb0xhYmVsID0gTWF0aC5zcXJ0KFxuICAgICAgICAgICAgKHBvc0V4dExhYmVsWzBdIC0gcG9zTGFiZWxbMF0pICoqIDIgK1xuICAgICAgICAgICAgICAgIChwb3NFeHRMYWJlbFsxXSAtIHBvc0xhYmVsWzFdKSAqKiAyXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGRpc3RNaWRkbGVUb0xhYmVsID4gZGlzdEV4dExhYmVsVG9MYWJlbCkge1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJ0d28gcG9pbnRzXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFtwb3NMYWJlbCwgcG9zRXh0TGFiZWxdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbcG9zTGFiZWwsIHBvc01pZGRsZSwgcG9zRXh0TGFiZWxdO1xuICAgIH1cblxuICAgIC8vIEFkZCBsaW5lcyBiZXR3ZWVuIHNlY3RvcnMgYW5kIGV4dGVybmFsIGxhYmVsc1xuICAgIGxldCBsaW5lcyA9IHNlY3RvcnNHcm91cFxuICAgICAgICAuc2VsZWN0QWxsKFwibGluZVwiKVxuICAgICAgICAuZGF0YShwaWVWYWx1ZXMpXG4gICAgICAgIC5lbnRlcigpXG4gICAgICAgIC5hcHBlbmQoXCJwb2x5bGluZVwiKVxuICAgICAgICAuYXR0cihcInN0cm9rZVwiLCBcImJsYWNrXCIpXG4gICAgICAgIC5zdHlsZShcImZpbGxcIiwgXCJub25lXCIpXG4gICAgICAgIC5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsIDEpXG4gICAgICAgIC5hdHRyKFwicG9pbnRzXCIsIGZ1bmN0aW9uIChhcmNPYmo6IGFueSwgaTogbnVtYmVyKSB7XG4gICAgICAgICAgICBpZiAoc2hvd0V4dExhYmVsT25seUlmTm9MYWJlbCkge1xuICAgICAgICAgICAgICAgIGlmIChsYWJlbHNbaV0gPT09IFwiXCIgfHwgaXNMYWJlbEhpZGRlbihhcmNPYmopKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChleHRMYWJlbHNbaV0gIT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRQb2ludHNGb3JDb25uZWN0aW9uTGluZXMoYXJjT2JqLCBpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGV4dExhYmVsc1tpXSAhPT0gXCJcIikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0UG9pbnRzRm9yQ29ubmVjdGlvbkxpbmVzKGFyY09iaiwgaSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci1heGlzXCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyUGllQ2hhcnQoXG4gICAgY2FudmFzOiBIVE1MRWxlbWVudCxcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvLFxuICAgIHBpZUluZm86IFBpZUluZm9cbikge1xuICAgIC8vIGNvbnNvbGUubG9nKFwicmVuZGVyUGllQ2hhcnRcIik7XG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mbyk7XG4gICAgaWYgKCFyZW5kZXJJbmZvIHx8ICFwaWVJbmZvKSByZXR1cm47XG5cbiAgICAvLyByZXR1cm4gXCJVbmRlciBjb25zdHJ1Y3Rpb25cIjtcblxuICAgIGxldCBjaGFydEVsZW1lbnRzOiBDaGFydEVsZW1lbnRzID0ge307XG4gICAgY2hhcnRFbGVtZW50cyA9IGNyZWF0ZUFyZWFzKGNoYXJ0RWxlbWVudHMsIGNhbnZhcywgcmVuZGVySW5mbywgcGllSW5mbyk7XG5cbiAgICAvLyBTZXQgZGVmYXVsdCBkYXRhQ29sb3IgaWYgbm8gZGF0YUNvbG9yIHByb3ZpZGVkXG4gICAgbGV0IGRlZmF1bHREYXRhQ29sb3IgPSBkMy5zY2hlbWVTcGVjdHJhbFtwaWVJbmZvLmRhdGFDb2xvci5sZW5ndGhdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGllSW5mby5kYXRhQ29sb3IubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHBpZUluZm8uZGF0YUNvbG9yW2ldID09PSBudWxsKSB7XG4gICAgICAgICAgICBwaWVJbmZvLmRhdGFDb2xvcltpXSA9IGRlZmF1bHREYXRhQ29sb3JbaV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZW5kZXJUaXRsZShjYW52YXMsIGNoYXJ0RWxlbWVudHMsIHJlbmRlckluZm8sIHBpZUluZm8pO1xuXG4gICAgcmVuZGVyUGllKGNhbnZhcywgY2hhcnRFbGVtZW50cywgcmVuZGVySW5mbywgcGllSW5mbyk7XG5cbiAgICBpZiAocGllSW5mby5zaG93TGVnZW5kKSB7XG4gICAgICAgIHJlbmRlckxlZ2VuZChjYW52YXMsIGNoYXJ0RWxlbWVudHMsIHJlbmRlckluZm8sIHBpZUluZm8pO1xuICAgIH1cblxuICAgIHNldENoYXJ0U2NhbGUoY2FudmFzLCBjaGFydEVsZW1lbnRzLCByZW5kZXJJbmZvKTtcbn1cbiIsImltcG9ydCBhcnJheSBmcm9tIFwiLi9hcnJheS5qc1wiO1xuaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuL2NvbnN0YW50LmpzXCI7XG5pbXBvcnQgZGVzY2VuZGluZyBmcm9tIFwiLi9kZXNjZW5kaW5nLmpzXCI7XG5pbXBvcnQgaWRlbnRpdHkgZnJvbSBcIi4vaWRlbnRpdHkuanNcIjtcbmltcG9ydCB7dGF1fSBmcm9tIFwiLi9tYXRoLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgdmFsdWUgPSBpZGVudGl0eSxcbiAgICAgIHNvcnRWYWx1ZXMgPSBkZXNjZW5kaW5nLFxuICAgICAgc29ydCA9IG51bGwsXG4gICAgICBzdGFydEFuZ2xlID0gY29uc3RhbnQoMCksXG4gICAgICBlbmRBbmdsZSA9IGNvbnN0YW50KHRhdSksXG4gICAgICBwYWRBbmdsZSA9IGNvbnN0YW50KDApO1xuXG4gIGZ1bmN0aW9uIHBpZShkYXRhKSB7XG4gICAgdmFyIGksXG4gICAgICAgIG4gPSAoZGF0YSA9IGFycmF5KGRhdGEpKS5sZW5ndGgsXG4gICAgICAgIGosXG4gICAgICAgIGssXG4gICAgICAgIHN1bSA9IDAsXG4gICAgICAgIGluZGV4ID0gbmV3IEFycmF5KG4pLFxuICAgICAgICBhcmNzID0gbmV3IEFycmF5KG4pLFxuICAgICAgICBhMCA9ICtzdGFydEFuZ2xlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksXG4gICAgICAgIGRhID0gTWF0aC5taW4odGF1LCBNYXRoLm1heCgtdGF1LCBlbmRBbmdsZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIC0gYTApKSxcbiAgICAgICAgYTEsXG4gICAgICAgIHAgPSBNYXRoLm1pbihNYXRoLmFicyhkYSkgLyBuLCBwYWRBbmdsZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpKSxcbiAgICAgICAgcGEgPSBwICogKGRhIDwgMCA/IC0xIDogMSksXG4gICAgICAgIHY7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAoKHYgPSBhcmNzW2luZGV4W2ldID0gaV0gPSArdmFsdWUoZGF0YVtpXSwgaSwgZGF0YSkpID4gMCkge1xuICAgICAgICBzdW0gKz0gdjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBPcHRpb25hbGx5IHNvcnQgdGhlIGFyY3MgYnkgcHJldmlvdXNseS1jb21wdXRlZCB2YWx1ZXMgb3IgYnkgZGF0YS5cbiAgICBpZiAoc29ydFZhbHVlcyAhPSBudWxsKSBpbmRleC5zb3J0KGZ1bmN0aW9uKGksIGopIHsgcmV0dXJuIHNvcnRWYWx1ZXMoYXJjc1tpXSwgYXJjc1tqXSk7IH0pO1xuICAgIGVsc2UgaWYgKHNvcnQgIT0gbnVsbCkgaW5kZXguc29ydChmdW5jdGlvbihpLCBqKSB7IHJldHVybiBzb3J0KGRhdGFbaV0sIGRhdGFbal0pOyB9KTtcblxuICAgIC8vIENvbXB1dGUgdGhlIGFyY3MhIFRoZXkgYXJlIHN0b3JlZCBpbiB0aGUgb3JpZ2luYWwgZGF0YSdzIG9yZGVyLlxuICAgIGZvciAoaSA9IDAsIGsgPSBzdW0gPyAoZGEgLSBuICogcGEpIC8gc3VtIDogMDsgaSA8IG47ICsraSwgYTAgPSBhMSkge1xuICAgICAgaiA9IGluZGV4W2ldLCB2ID0gYXJjc1tqXSwgYTEgPSBhMCArICh2ID4gMCA/IHYgKiBrIDogMCkgKyBwYSwgYXJjc1tqXSA9IHtcbiAgICAgICAgZGF0YTogZGF0YVtqXSxcbiAgICAgICAgaW5kZXg6IGksXG4gICAgICAgIHZhbHVlOiB2LFxuICAgICAgICBzdGFydEFuZ2xlOiBhMCxcbiAgICAgICAgZW5kQW5nbGU6IGExLFxuICAgICAgICBwYWRBbmdsZTogcFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJjcztcbiAgfVxuXG4gIHBpZS52YWx1ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh2YWx1ZSA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBwaWUpIDogdmFsdWU7XG4gIH07XG5cbiAgcGllLnNvcnRWYWx1ZXMgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoc29ydFZhbHVlcyA9IF8sIHNvcnQgPSBudWxsLCBwaWUpIDogc29ydFZhbHVlcztcbiAgfTtcblxuICBwaWUuc29ydCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChzb3J0ID0gXywgc29ydFZhbHVlcyA9IG51bGwsIHBpZSkgOiBzb3J0O1xuICB9O1xuXG4gIHBpZS5zdGFydEFuZ2xlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHN0YXJ0QW5nbGUgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgcGllKSA6IHN0YXJ0QW5nbGU7XG4gIH07XG5cbiAgcGllLmVuZEFuZ2xlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGVuZEFuZ2xlID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIHBpZSkgOiBlbmRBbmdsZTtcbiAgfTtcblxuICBwaWUucGFkQW5nbGUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocGFkQW5nbGUgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgcGllKSA6IHBhZEFuZ2xlO1xuICB9O1xuXG4gIHJldHVybiBwaWU7XG59XG4iLCJpbXBvcnQgKiBhcyBkMyBmcm9tIFwiZDNcIjtcbmltcG9ydCB7IFJlbmRlckluZm8sIFN1bW1hcnlJbmZvIH0gZnJvbSBcIi4vZGF0YVwiO1xuaW1wb3J0ICogYXMgZXhwciBmcm9tIFwiLi9leHByXCI7XG5cbmZ1bmN0aW9uIGNoZWNrU3VtbWFyeVRlbXBsYXRlVmFsaWQoc3VtbWFyeVRlbXBsYXRlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlclN1bW1hcnkoXG4gICAgY2FudmFzOiBIVE1MRWxlbWVudCxcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvLFxuICAgIHN1bW1hcnlJbmZvOiBTdW1tYXJ5SW5mb1xuKSB7XG4gICAgLy8gY29uc29sZS5sb2coXCJyZW5kZXJTdW1tYXJ5XCIpO1xuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8pO1xuICAgIGlmICghcmVuZGVySW5mbyB8fCAhc3VtbWFyeUluZm8pIHJldHVybjtcblxuICAgIC8vIGNvbnNvbGUubG9nKHN1bW1hcnlJbmZvLnRlbXBsYXRlKTtcbiAgICBsZXQgb3V0cHV0U3VtbWFyeSA9IFwiXCI7XG4gICAgaWYgKGNoZWNrU3VtbWFyeVRlbXBsYXRlVmFsaWQoc3VtbWFyeUluZm8udGVtcGxhdGUpKSB7XG4gICAgICAgIG91dHB1dFN1bW1hcnkgPSBzdW1tYXJ5SW5mby50ZW1wbGF0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gXCJJbnZhbGlkIHN1bW1hcnkgdGVtcGxhdGVcIjtcbiAgICB9XG5cbiAgICBsZXQgcmV0UmVzb2x2ZWRUZW1wbGF0ZSA9IGV4cHIucmVzb2x2ZVRlbXBsYXRlKG91dHB1dFN1bW1hcnksIHJlbmRlckluZm8pO1xuICAgIC8vIGNvbnNvbGUubG9nKHJldFJlc29sdmVkVGVtcGxhdGUpO1xuICAgIGlmIChyZXRSZXNvbHZlZFRlbXBsYXRlLnN0YXJ0c1dpdGgoXCJFcnJvcjpcIikpIHtcbiAgICAgICAgcmV0dXJuIHJldFJlc29sdmVkVGVtcGxhdGU7XG4gICAgfVxuICAgIG91dHB1dFN1bW1hcnkgPSByZXRSZXNvbHZlZFRlbXBsYXRlO1xuXG4gICAgaWYgKG91dHB1dFN1bW1hcnkgIT09IFwiXCIpIHtcbiAgICAgICAgbGV0IHRleHRCbG9jayA9IGQzLnNlbGVjdChjYW52YXMpLmFwcGVuZChcImRpdlwiKTtcbiAgICAgICAgaWYgKG91dHB1dFN1bW1hcnkuaW5jbHVkZXMoXCJcXG5cIikgfHwgb3V0cHV0U3VtbWFyeS5pbmNsdWRlcyhcIlxcXFxuXCIpKSB7XG4gICAgICAgICAgICBsZXQgb3V0cHV0TGluZXMgPSBvdXRwdXRTdW1tYXJ5LnNwbGl0KC8oXFxufFxcXFxuKS8pO1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2cob3V0cHV0TGluZXMpO1xuICAgICAgICAgICAgZm9yIChsZXQgb3V0cHV0TGluZSBvZiBvdXRwdXRMaW5lcykge1xuICAgICAgICAgICAgICAgIGlmIChvdXRwdXRMaW5lICE9PSBcIlxcblwiICYmIG91dHB1dExpbmUgIT09IFwiXFxcXG5cIilcbiAgICAgICAgICAgICAgICB0ZXh0QmxvY2suYXBwZW5kKFwiZGl2XCIpLnRleHQob3V0cHV0TGluZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0ZXh0QmxvY2sudGV4dChvdXRwdXRTdW1tYXJ5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdW1tYXJ5SW5mby5zdHlsZSAhPT0gXCJcIikge1xuICAgICAgICAgICAgdGV4dEJsb2NrLmF0dHIoXCJzdHlsZVwiLCBzdW1tYXJ5SW5mby5zdHlsZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJpbXBvcnQgeyBNb21lbnQgfSBmcm9tIFwibW9tZW50XCI7XG5pbXBvcnQge1xuICAgIERhdGFzZXRzLFxuICAgIERhdGFQb2ludCxcbiAgICBSZW5kZXJJbmZvLFxuICAgIE1vbnRoSW5mbyxcbiAgICBEYXRhc2V0LFxuICAgIFNpemUsXG4gICAgVHJhbnNmb3JtLFxuICAgIENoYXJ0RWxlbWVudHMsXG4gICAgR3JhcGhUeXBlLFxuICAgIFZhbHVlVHlwZSxcbn0gZnJvbSBcIi4vZGF0YVwiO1xuaW1wb3J0ICogYXMgaGVscGVyIGZyb20gXCIuL2hlbHBlclwiO1xuaW1wb3J0ICogYXMgZDMgZnJvbSBcImQzXCI7XG5cbmxldCBsb2dUb0NvbnNvbGUgPSBmYWxzZTtcbmxldCByYXRpb0NlbGxUb1RleHQgPSAyLjg7XG5sZXQgcmF0aW9Eb3RUb1RleHQgPSAxLjg7XG5cbmludGVyZmFjZSBEYXlJbmZvIHtcbiAgICBkYXRlOiBzdHJpbmc7XG4gICAgdmFsdWU6IG51bWJlcjtcbiAgICBzY2FsZWRWYWx1ZTogbnVtYmVyO1xuICAgIGRheUluTW9udGg6IG51bWJlcjtcbiAgICBpc0luVGhpc01vbnRoOiBib29sZWFuO1xuICAgIGlzT3V0T2ZEYXRhUmFuZ2U6IGJvb2xlYW47XG4gICAgcm93OiBudW1iZXI7XG4gICAgY29sOiBudW1iZXI7XG4gICAgc2hvd0NpcmNsZTogYm9vbGVhbjtcbiAgICBzdHJlYWtJbjogYm9vbGVhbjtcbiAgICBzdHJlYWtPdXQ6IGJvb2xlYW47XG4gICAgYW5ub3RhdGlvbjogc3RyaW5nO1xufVxuXG5mdW5jdGlvbiBzZXRDaGFydFNjYWxlKFxuICAgIF9jYW52YXM6IEhUTUxFbGVtZW50LFxuICAgIGNoYXJ0RWxlbWVudHM6IENoYXJ0RWxlbWVudHMsXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mb1xuKSB7XG4gICAgbGV0IGNhbnZhcyA9IGQzLnNlbGVjdChfY2FudmFzKTtcbiAgICBsZXQgc3ZnID0gY2hhcnRFbGVtZW50cy5zdmc7XG4gICAgbGV0IHN2Z1dpZHRoID0gcGFyc2VGbG9hdChzdmcuYXR0cihcIndpZHRoXCIpKTtcbiAgICBsZXQgc3ZnSGVpZ2h0ID0gcGFyc2VGbG9hdChzdmcuYXR0cihcImhlaWdodFwiKSk7XG4gICAgc3ZnLmF0dHIoXCJ3aWR0aFwiLCBudWxsKVxuICAgICAgICAuYXR0cihcImhlaWdodFwiLCBudWxsKVxuICAgICAgICAuYXR0cihcInZpZXdCb3hcIiwgYDAgMCAke3N2Z1dpZHRofSAke3N2Z0hlaWdodH1gKVxuICAgICAgICAuYXR0cihcInByZXNlcnZlQXNwZWN0UmF0aW9cIiwgXCJ4TWlkWU1pZCBtZWV0XCIpO1xuXG4gICAgaWYgKHJlbmRlckluZm8uZml0UGFuZWxXaWR0aCkge1xuICAgICAgICBjYW52YXMuc3R5bGUoXCJ3aWR0aFwiLCBcIjEwMCVcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY2FudmFzLnN0eWxlKFxuICAgICAgICAgICAgXCJ3aWR0aFwiLFxuICAgICAgICAgICAgKHN2Z1dpZHRoICogcmVuZGVySW5mby5maXhlZFNjYWxlKS50b1N0cmluZygpICsgXCJweFwiXG4gICAgICAgICk7XG4gICAgICAgIGNhbnZhcy5zdHlsZShcbiAgICAgICAgICAgIFwiaGVpZ2h0XCIsXG4gICAgICAgICAgICAoc3ZnSGVpZ2h0ICogcmVuZGVySW5mby5maXhlZFNjYWxlKS50b1N0cmluZygpICsgXCJweFwiXG4gICAgICAgICk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiB0b05leHREYXRhc2V0KHJlbmRlckluZm86IFJlbmRlckluZm8sIG1vbnRoSW5mbzogTW9udGhJbmZvKTogYm9vbGVhbiB7XG4gICAgbGV0IGRhdGFzZXRJZHMgPSBtb250aEluZm8uZGF0YXNldDtcbiAgICBpZiAoZGF0YXNldElkcy5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZTsgLy8gZmFsc2UgaWYgc2VsZWN0ZWQgZGF0YXNldCBub3QgY2hhbmdlZFxuXG4gICAgbGV0IGRhdGFzZXQgPSBudWxsO1xuICAgIGlmIChtb250aEluZm8uc2VsZWN0ZWREYXRhc2V0ID09PSBudWxsKSB7XG4gICAgICAgIGZvciAobGV0IGRhdGFzZXRJZCBvZiBkYXRhc2V0SWRzKSB7XG4gICAgICAgICAgICBkYXRhc2V0ID0gcmVuZGVySW5mby5kYXRhc2V0cy5nZXREYXRhc2V0QnlJZChkYXRhc2V0SWQpO1xuICAgICAgICAgICAgaWYgKGRhdGFzZXQgJiYgIWRhdGFzZXQuZ2V0UXVlcnkoKS51c2VkQXNYRGF0YXNldCkgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRhdGFzZXQpIHtcbiAgICAgICAgICAgIG1vbnRoSW5mby5zZWxlY3RlZERhdGFzZXQgPSBkYXRhc2V0LmdldElkKCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gdHJ1ZSBpZiBzZWxlY3RlYyBkYXRhc2V0IGNoYW5nZWRcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBjdXJEYXRhc2V0SWQgPSBtb250aEluZm8uc2VsZWN0ZWREYXRhc2V0O1xuICAgICAgICBsZXQgY3VySW5kZXggPSBkYXRhc2V0SWRzLmZpbmRJbmRleCgoaWQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBpZCA9PT0gY3VyRGF0YXNldElkO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGN1ckluZGV4ID49IDApIHtcbiAgICAgICAgICAgIGlmIChjdXJJbmRleCA9PT0gbW9udGhJbmZvLmRhdGFzZXQubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgIC8vIHNlYXJjaCBmcm9tIHN0YXJ0XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgZGF0YXNldElkIG9mIGRhdGFzZXRJZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YXNldCA9IHJlbmRlckluZm8uZGF0YXNldHMuZ2V0RGF0YXNldEJ5SWQoZGF0YXNldElkKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFzZXQgJiYgIWRhdGFzZXQuZ2V0UXVlcnkoKS51c2VkQXNYRGF0YXNldCkgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChkYXRhc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIG1vbnRoSW5mby5zZWxlY3RlZERhdGFzZXQgPSBkYXRhc2V0LmdldElkKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOyAvLyB0cnVlIGlmIHNlbGVjdGVjIGRhdGFzZXQgY2hhbmdlZFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGN1ckluZGV4Kys7XG4gICAgICAgICAgICAgICAgbGV0IGRhdGFzZXRJZCA9IGRhdGFzZXRJZHNbY3VySW5kZXhdO1xuICAgICAgICAgICAgICAgIGRhdGFzZXQgPSByZW5kZXJJbmZvLmRhdGFzZXRzLmdldERhdGFzZXRCeUlkKGRhdGFzZXRJZCk7XG4gICAgICAgICAgICAgICAgbW9udGhJbmZvLnNlbGVjdGVkRGF0YXNldCA9IGRhdGFzZXRJZDtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YXNldCAmJiAhZGF0YXNldC5nZXRRdWVyeSgpLnVzZWRBc1hEYXRhc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRvTmV4dERhdGFzZXQocmVuZGVySW5mbywgbW9udGhJbmZvKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUFyZWFzKFxuICAgIGNoYXJ0RWxlbWVudHM6IENoYXJ0RWxlbWVudHMsXG4gICAgY2FudmFzOiBIVE1MRWxlbWVudCxcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvLFxuICAgIG1vbnRoSW5mbzogTW9udGhJbmZvXG4pOiBDaGFydEVsZW1lbnRzIHtcbiAgICAvLyBjbGVhbiBhcmVhc1xuICAgIGQzLnNlbGVjdChjYW52YXMpLnNlbGVjdChcIiNzdmdcIikucmVtb3ZlKCk7XG4gICAgdmFyIHByb3BzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoY2hhcnRFbGVtZW50cyk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAvLyBkMy5zZWxlY3QoY2hhcnRFbGVtZW50c1twcm9wc1tpXV0pLnJlbW92ZSgpO1xuICAgICAgICBkZWxldGUgY2hhcnRFbGVtZW50c1twcm9wc1tpXV07XG4gICAgfVxuICAgIC8vIGNvbnNvbGUubG9nKGNoYXJ0RWxlbWVudHMpO1xuXG4gICAgLy8gd2hvbGUgYXJlYSBmb3IgcGxvdHRpbmcsIGluY2x1ZGVzIG1hcmdpbnNcbiAgICBsZXQgc3ZnID0gZDNcbiAgICAgICAgLnNlbGVjdChjYW52YXMpXG4gICAgICAgIC5hcHBlbmQoXCJzdmdcIilcbiAgICAgICAgLmF0dHIoXCJpZFwiLCBcInN2Z1wiKVxuICAgICAgICAuYXR0cihcbiAgICAgICAgICAgIFwid2lkdGhcIixcbiAgICAgICAgICAgIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoICtcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLm1hcmdpbi5sZWZ0ICtcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLm1hcmdpbi5yaWdodFxuICAgICAgICApXG4gICAgICAgIC5hdHRyKFxuICAgICAgICAgICAgXCJoZWlnaHRcIixcbiAgICAgICAgICAgIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLmhlaWdodCArXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5tYXJnaW4udG9wICtcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLm1hcmdpbi5ib3R0b21cbiAgICAgICAgKTtcbiAgICBjaGFydEVsZW1lbnRzW1wic3ZnXCJdID0gc3ZnO1xuXG4gICAgLy8gZ3JhcGhBcmVhLCBpbmNsdWRlcyBjaGFydEFyZWEsIHRpdGxlLCBsZWdlbmRcbiAgICBsZXQgZ3JhcGhBcmVhID0gc3ZnXG4gICAgICAgIC5hcHBlbmQoXCJnXCIpXG4gICAgICAgIC5hdHRyKFwiaWRcIiwgXCJncmFwaEFyZWFcIilcbiAgICAgICAgLmF0dHIoXG4gICAgICAgICAgICBcInRyYW5zZm9ybVwiLFxuICAgICAgICAgICAgXCJ0cmFuc2xhdGUoXCIgK1xuICAgICAgICAgICAgICAgIHJlbmRlckluZm8ubWFyZ2luLmxlZnQgK1xuICAgICAgICAgICAgICAgIFwiLFwiICtcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLm1hcmdpbi50b3AgK1xuICAgICAgICAgICAgICAgIFwiKVwiXG4gICAgICAgIClcbiAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS53aWR0aCArIHJlbmRlckluZm8ubWFyZ2luLnJpZ2h0KVxuICAgICAgICAuYXR0cihcbiAgICAgICAgICAgIFwiaGVpZ2h0XCIsXG4gICAgICAgICAgICByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS5oZWlnaHQgKyByZW5kZXJJbmZvLm1hcmdpbi5ib3R0b21cbiAgICAgICAgKTtcbiAgICBjaGFydEVsZW1lbnRzW1wiZ3JhcGhBcmVhXCJdID0gZ3JhcGhBcmVhO1xuXG4gICAgLy8gZGF0YUFyZWEsIHVuZGVyIGdyYXBoQXJlYSwgaW5jbHVkZXMgcG9pbnRzLCBsaW5lcywgeEF4aXMsIHlBeGlzXG4gICAgbGV0IGRhdGFBcmVhID0gZ3JhcGhBcmVhXG4gICAgICAgIC5hcHBlbmQoXCJnXCIpXG4gICAgICAgIC5hdHRyKFwiaWRcIiwgXCJkYXRhQXJlYVwiKVxuICAgICAgICAuYXR0cihcIndpZHRoXCIsIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoKVxuICAgICAgICAuYXR0cihcImhlaWdodFwiLCByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS5oZWlnaHQpO1xuICAgIGNoYXJ0RWxlbWVudHNbXCJkYXRhQXJlYVwiXSA9IGRhdGFBcmVhO1xuXG4gICAgcmV0dXJuIGNoYXJ0RWxlbWVudHM7XG59XG5cbmZ1bmN0aW9uIGNsZWFyU2VsZWN0aW9uKGNoYXJ0RWxlbWVudHM6IENoYXJ0RWxlbWVudHMsIG1vbnRoSW5mbzogTW9udGhJbmZvKSB7XG4gICAgbGV0IGNpcmNsZXMgPSBjaGFydEVsZW1lbnRzLnN2Zy5zZWxlY3RBbGwoXCJjaXJjbGVcIik7XG4gICAgLy8gY29uc29sZS5sb2coY2lyY2xlcyk7XG4gICAgZm9yIChsZXQgY2lyY2xlIG9mIGNpcmNsZXMpIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coY2lyY2xlKTtcbiAgICAgICAgbGV0IGlkID0gZDMuc2VsZWN0KGNpcmNsZSkuYXR0cihcImlkXCIpO1xuICAgICAgICBpZiAoaWQgJiYgaWQuc3RhcnRzV2l0aChcInRyYWNrZXItc2VsZWN0ZWQtY2lyY2xlLVwiKSkge1xuICAgICAgICAgICAgZDMuc2VsZWN0KGNpcmNsZSkuc3R5bGUoXCJzdHJva2VcIiwgXCJub25lXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbW9udGhJbmZvLnNlbGVjdGVkRGF0ZSA9IFwiXCI7XG5cbiAgICBjaGFydEVsZW1lbnRzLm1vbml0b3IudGV4dChcIlwiKTtcbn1cblxuZnVuY3Rpb24gcmVuZGVyTW9udGhIZWFkZXIoXG4gICAgY2FudmFzOiBIVE1MRWxlbWVudCxcbiAgICBjaGFydEVsZW1lbnRzOiBDaGFydEVsZW1lbnRzLFxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXG4gICAgbW9udGhJbmZvOiBNb250aEluZm8sXG4gICAgY3VyTW9udGhEYXRlOiBNb21lbnRcbikge1xuICAgIC8vIGNvbnNvbGUubG9nKFwicmVuZGVyTW9udGhIZWFkZXJcIilcblxuICAgIGlmICghcmVuZGVySW5mbyB8fCAhbW9udGhJbmZvKSByZXR1cm47XG5cbiAgICBsZXQgY3VyRGF0YXNldElkID0gbW9udGhJbmZvLnNlbGVjdGVkRGF0YXNldDtcbiAgICBpZiAoY3VyRGF0YXNldElkID09PSBudWxsKSByZXR1cm47XG4gICAgbGV0IGRhdGFzZXQgPSByZW5kZXJJbmZvLmRhdGFzZXRzLmdldERhdGFzZXRCeUlkKGN1ckRhdGFzZXRJZCk7XG4gICAgaWYgKCFkYXRhc2V0KSByZXR1cm47XG4gICAgbGV0IGRhdGFzZXROYW1lID0gZGF0YXNldC5nZXROYW1lKCk7XG5cbiAgICBsZXQgY3VyTW9udGggPSBjdXJNb250aERhdGUubW9udGgoKTsgLy8gMH4xMVxuICAgIGxldCBjdXJEYXlzSW5Nb250aCA9IGN1ck1vbnRoRGF0ZS5kYXlzSW5Nb250aCgpOyAvLyAyOH4zMVxuICAgIGxldCBjdXJZZWFyID0gY3VyTW9udGhEYXRlLnllYXIoKTtcblxuICAgIGxldCBtYXhEYXlUZXh0U2l6ZSA9IGhlbHBlci5tZWFzdXJlVGV4dFNpemUoXCIzMFwiLCBcInRyYWNrZXItbW9udGgtbGFiZWxcIik7XG4gICAgbGV0IGNlbGxTaXplID1cbiAgICAgICAgTWF0aC5tYXgobWF4RGF5VGV4dFNpemUud2lkdGgsIG1heERheVRleHRTaXplLmhlaWdodCkgKiByYXRpb0NlbGxUb1RleHQ7XG4gICAgbGV0IGRvdFJhZGl1cyA9ICgoY2VsbFNpemUgLyByYXRpb0NlbGxUb1RleHQpICogcmF0aW9Eb3RUb1RleHQpIC8gMi4wO1xuXG4gICAgbGV0IGhlYWRlclllYXJUZXh0ID0gY3VyTW9udGhEYXRlLmZvcm1hdChcIllZWVlcIik7XG4gICAgbGV0IGhlYWRlck1vbnRoVGV4dCA9IGN1ck1vbnRoRGF0ZS5mb3JtYXQoXCJNTU1cIik7XG4gICAgbGV0IGhlYWRlclllYXJTaXplID0gaGVscGVyLm1lYXN1cmVUZXh0U2l6ZShcbiAgICAgICAgaGVhZGVyWWVhclRleHQsXG4gICAgICAgIFwidHJhY2tlci1tb250aC1oZWFkZXIteWVhclwiXG4gICAgKTtcbiAgICBsZXQgaGVhZGVyTW9udGhTaXplID0gaGVscGVyLm1lYXN1cmVUZXh0U2l6ZShcbiAgICAgICAgaGVhZGVyTW9udGhUZXh0LFxuICAgICAgICBcInRyYWNrZXItbW9udGgtaGVhZGVyLW1vbnRoXCJcbiAgICApO1xuXG4gICAgbGV0IGhlYWRlckhlaWdodCA9IDA7XG4gICAgbGV0IHlTcGFjaW5nID0gODtcblxuICAgIC8vIEFwcGVuZCBoZWFkZXIgZ3JvdXBcbiAgICBsZXQgaGVhZGVyR3JvdXAgPSBjaGFydEVsZW1lbnRzLmdyYXBoQXJlYS5hcHBlbmQoXCJnXCIpO1xuXG4gICAgLy8gaGFlZGVyIG1vbnRoXG4gICAgbGV0IGhlYWRlck1vbnRoQ29sb3IgPSBudWxsO1xuICAgIGlmIChtb250aEluZm8uaGVhZGVyTW9udGhDb2xvcikge1xuICAgICAgICBoZWFkZXJNb250aENvbG9yID0gbW9udGhJbmZvLmhlYWRlck1vbnRoQ29sb3I7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG1vbnRoSW5mby5jb2xvcikge1xuICAgICAgICAgICAgaGVhZGVyTW9udGhDb2xvciA9IG1vbnRoSW5mby5jb2xvcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBsZXQgaGVhZGVyTW9udGggPSBoZWFkZXJHcm91cFxuICAgICAgICAuYXBwZW5kKFwidGV4dFwiKVxuICAgICAgICAudGV4dChoZWFkZXJNb250aFRleHQpIC8vIHBpdm90IGF0IGNlbnRlclxuICAgICAgICAuYXR0cihcImlkXCIsIFwidGl0bGVNb250aFwiKVxuICAgICAgICAuYXR0cihcbiAgICAgICAgICAgIFwidHJhbnNmb3JtXCIsXG4gICAgICAgICAgICBcInRyYW5zbGF0ZShcIiArIGNlbGxTaXplIC8gNC4wICsgXCIsXCIgKyBoZWFkZXJNb250aFNpemUuaGVpZ2h0ICsgXCIpXCJcbiAgICAgICAgKVxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci1tb250aC1oZWFkZXItbW9udGhcIilcbiAgICAgICAgLnN0eWxlKFwiY3Vyc29yXCIsIFwiZGVmYXVsdFwiKVxuICAgICAgICAub24oXCJjbGlja1wiLCBmdW5jdGlvbiAoZXZlbnQ6IGFueSkge1xuICAgICAgICAgICAgY2xlYXJTZWxlY3Rpb24oY2hhcnRFbGVtZW50cywgbW9udGhJbmZvKTtcbiAgICAgICAgfSk7XG5cbiAgICBpZiAoaGVhZGVyTW9udGhDb2xvcikge1xuICAgICAgICBoZWFkZXJNb250aC5zdHlsZShcImZpbGxcIiwgaGVhZGVyTW9udGhDb2xvcik7XG4gICAgfVxuICAgIGhlYWRlckhlaWdodCArPSBoZWFkZXJNb250aFNpemUuaGVpZ2h0O1xuXG4gICAgLy8gaGVhZGVyIHllYXJcbiAgICBsZXQgaGVhZGVyWWVhckNvbG9yID0gbnVsbDtcbiAgICBpZiAobW9udGhJbmZvLmhlYWRlclllYXJDb2xvcikge1xuICAgICAgICBoZWFkZXJZZWFyQ29sb3IgPSBtb250aEluZm8uaGVhZGVyWWVhckNvbG9yO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChtb250aEluZm8uY29sb3IpIHtcbiAgICAgICAgICAgIGhlYWRlclllYXJDb2xvciA9IG1vbnRoSW5mby5jb2xvcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBsZXQgaGVhZGVyWWVhciA9IGhlYWRlckdyb3VwXG4gICAgICAgIC5hcHBlbmQoXCJ0ZXh0XCIpXG4gICAgICAgIC50ZXh0KGhlYWRlclllYXJUZXh0KSAvLyBwaXZvdCBhdCBjZW50ZXJcbiAgICAgICAgLmF0dHIoXCJpZFwiLCBcInRpdGxlWWVhclwiKVxuICAgICAgICAuYXR0cihcbiAgICAgICAgICAgIFwidHJhbnNmb3JtXCIsXG4gICAgICAgICAgICBcInRyYW5zbGF0ZShcIiArXG4gICAgICAgICAgICAgICAgY2VsbFNpemUgLyA0LjAgK1xuICAgICAgICAgICAgICAgIFwiLFwiICtcbiAgICAgICAgICAgICAgICAoaGVhZGVySGVpZ2h0ICsgaGVhZGVyWWVhclNpemUuaGVpZ2h0KSArXG4gICAgICAgICAgICAgICAgXCIpXCJcbiAgICAgICAgKVxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci1tb250aC1oZWFkZXIteWVhclwiKVxuICAgICAgICAuc3R5bGUoXCJjdXJzb3JcIiwgXCJkZWZhdWx0XCIpXG4gICAgICAgIC5hdHRyKFwiZm9udC13ZWlnaHRcIiwgXCJib2xkXCIpXG4gICAgICAgIC5vbihcImNsaWNrXCIsIGZ1bmN0aW9uIChldmVudDogYW55KSB7XG4gICAgICAgICAgICBjbGVhclNlbGVjdGlvbihjaGFydEVsZW1lbnRzLCBtb250aEluZm8pO1xuICAgICAgICB9KTtcblxuICAgIGlmIChoZWFkZXJZZWFyQ29sb3IpIHtcbiAgICAgICAgaGVhZGVyWWVhci5zdHlsZShcImZpbGxcIiwgaGVhZGVyWWVhckNvbG9yKTtcbiAgICB9XG5cbiAgICBoZWFkZXJIZWlnaHQgKz0gaGVhZGVyWWVhclNpemUuaGVpZ2h0O1xuXG4gICAgLy8gZGF0YXNldCByb3RhdG9yXG4gICAgbGV0IGRhdGFzZXROYW1lU2l6ZSA9IGhlbHBlci5tZWFzdXJlVGV4dFNpemUoXG4gICAgICAgIGRhdGFzZXROYW1lLFxuICAgICAgICBcInRyYWNrZXItbW9udGgtdGl0bGUtcm90YXRvclwiXG4gICAgKTtcbiAgICBpZiAoXG4gICAgICAgIG1vbnRoSW5mby5tb2RlID09PSBcImNpcmNsZVwiIHx8XG4gICAgICAgIChtb250aEluZm8ubW9kZSA9PT0gXCJhbm5vdGF0aW9uXCIgJiZcbiAgICAgICAgICAgICFtb250aEluZm8uc2hvd0Fubm90YXRpb25PZkFsbFRhcmdldHMpXG4gICAgKSB7XG4gICAgICAgIGxldCBkYXRhc2V0Um90YXRvciA9IGhlYWRlckdyb3VwXG4gICAgICAgICAgICAuYXBwZW5kKFwidGV4dFwiKVxuICAgICAgICAgICAgLnRleHQoZGF0YXNldE5hbWUpXG4gICAgICAgICAgICAuYXR0cihcbiAgICAgICAgICAgICAgICBcInRyYW5zZm9ybVwiLFxuICAgICAgICAgICAgICAgIFwidHJhbnNsYXRlKFwiICtcbiAgICAgICAgICAgICAgICAgICAgMy41ICogY2VsbFNpemUgK1xuICAgICAgICAgICAgICAgICAgICBcIixcIiArXG4gICAgICAgICAgICAgICAgICAgIGRhdGFzZXROYW1lU2l6ZS5oZWlnaHQgK1xuICAgICAgICAgICAgICAgICAgICBcIilcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInRyYWNrZXItbW9udGgtdGl0bGUtcm90YXRvclwiKVxuICAgICAgICAgICAgLnN0eWxlKFwiY3Vyc29yXCIsIFwicG9pbnRlclwiKVxuICAgICAgICAgICAgLm9uKFwiY2xpY2tcIiwgZnVuY3Rpb24gKGV2ZW50OiBhbnkpIHtcbiAgICAgICAgICAgICAgICAvLyBzaG93IG5leHQgdGFyZ2V0XG4gICAgICAgICAgICAgICAgaWYgKHRvTmV4dERhdGFzZXQocmVuZGVySW5mbywgbW9udGhJbmZvKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBjbGVhciBjaXJjbGVzXG4gICAgICAgICAgICAgICAgICAgIGNsZWFyU2VsZWN0aW9uKGNoYXJ0RWxlbWVudHMsIG1vbnRoSW5mbyk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaChcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbnZhcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJ0RWxlbWVudHMsXG4gICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJJbmZvLFxuICAgICAgICAgICAgICAgICAgICAgICAgbW9udGhJbmZvLFxuICAgICAgICAgICAgICAgICAgICAgICAgY3VyTW9udGhEYXRlXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIGNoYXJ0RWxlbWVudHNbXCJyb3RhdG9yXCJdID0gZGF0YXNldFJvdGF0b3I7XG4gICAgfVxuXG4gICAgLy8gdmFsdWUgbW9uaXRvclxuICAgIGxldCBtb25pdG9yVGV4dFNpemUgPSBoZWxwZXIubWVhc3VyZVRleHRTaXplKFxuICAgICAgICBcIjAuMDAwMFwiLFxuICAgICAgICBcInRyYWNrZXItbW9udGgtdGl0bGUtbW9uaXRvclwiXG4gICAgKTtcbiAgICBsZXQgbW9uaXRvciA9IGhlYWRlckdyb3VwXG4gICAgICAgIC5hcHBlbmQoXCJ0ZXh0XCIpXG4gICAgICAgIC50ZXh0KFwiXCIpXG4gICAgICAgIC5hdHRyKFwiaWRcIiwgXCJtb25pdG9yXCIpXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLW1vbnRoLXRpdGxlLW1vbml0b3JcIilcbiAgICAgICAgLmF0dHIoXG4gICAgICAgICAgICBcInRyYW5zZm9ybVwiLFxuICAgICAgICAgICAgXCJ0cmFuc2xhdGUoXCIgK1xuICAgICAgICAgICAgICAgIDMuNSAqIGNlbGxTaXplICtcbiAgICAgICAgICAgICAgICBcIixcIiArXG4gICAgICAgICAgICAgICAgKGRhdGFzZXROYW1lU2l6ZS5oZWlnaHQgKyBtb25pdG9yVGV4dFNpemUuaGVpZ2h0KSArXG4gICAgICAgICAgICAgICAgXCIpXCJcbiAgICAgICAgKVxuICAgICAgICAuc3R5bGUoXCJjdXJzb3JcIiwgXCJwb2ludGVyXCIpXG4gICAgICAgIC5zdHlsZShcImZpbGxcIiwgbW9udGhJbmZvLnNlbGVjdGVkUmluZ0NvbG9yKTtcbiAgICBjaGFydEVsZW1lbnRzW1wibW9uaXRvclwiXSA9IG1vbml0b3I7XG5cbiAgICAvLyBhcnJvdyBsZWZ0XG4gICAgbGV0IGFycm93U2l6ZSA9IGhlbHBlci5tZWFzdXJlVGV4dFNpemUoXCI8XCIsIFwidHJhY2tlci1tb250aC10aXRsZS1hcnJvd1wiKTtcbiAgICBsZXQgYXJyb3dMZWZ0ID0gaGVhZGVyR3JvdXBcbiAgICAgICAgLmFwcGVuZChcInRleHRcIilcbiAgICAgICAgLnRleHQoXCI8XCIpIC8vIHBpdm90IGF0IGNlbnRlclxuICAgICAgICAuYXR0cihcImlkXCIsIFwiYXJyb3dMZWZ0XCIpXG4gICAgICAgIC5hdHRyKFxuICAgICAgICAgICAgXCJ0cmFuc2Zvcm1cIixcbiAgICAgICAgICAgIFwidHJhbnNsYXRlKFwiICtcbiAgICAgICAgICAgICAgICA1LjUgKiBjZWxsU2l6ZSArXG4gICAgICAgICAgICAgICAgXCIsXCIgK1xuICAgICAgICAgICAgICAgIChoZWFkZXJIZWlnaHQgLyAyICsgYXJyb3dTaXplLmhlaWdodCAvIDIpICtcbiAgICAgICAgICAgICAgICBcIilcIlxuICAgICAgICApXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLW1vbnRoLXRpdGxlLWFycm93XCIpXG4gICAgICAgIC5vbihcImNsaWNrXCIsIGZ1bmN0aW9uIChldmVudDogYW55KSB7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcImxlZnQgYXJyb3cgY2xpY2tlZFwiKTtcbiAgICAgICAgICAgIGNsZWFyU2VsZWN0aW9uKGNoYXJ0RWxlbWVudHMsIG1vbnRoSW5mbyk7XG4gICAgICAgICAgICBtb250aEluZm8uc2VsZWN0ZWREYXRlID0gXCJcIjtcbiAgICAgICAgICAgIGxldCBwcmV2TW9udGhEYXRlID0gY3VyTW9udGhEYXRlLmNsb25lKCkuYWRkKC0xLCBcIm1vbnRoXCIpO1xuICAgICAgICAgICAgcmVmcmVzaChcbiAgICAgICAgICAgICAgICBjYW52YXMsXG4gICAgICAgICAgICAgICAgY2hhcnRFbGVtZW50cyxcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLFxuICAgICAgICAgICAgICAgIG1vbnRoSW5mbyxcbiAgICAgICAgICAgICAgICBwcmV2TW9udGhEYXRlXG4gICAgICAgICAgICApO1xuICAgICAgICB9KVxuICAgICAgICAuc3R5bGUoXCJjdXJzb3JcIiwgXCJwb2ludGVyXCIpO1xuXG4gICAgLy8gYXJyb3cgcmlnaHRcbiAgICBsZXQgYXJyb3dSaWdodCA9IGhlYWRlckdyb3VwXG4gICAgICAgIC5hcHBlbmQoXCJ0ZXh0XCIpXG4gICAgICAgIC50ZXh0KFwiPlwiKSAvLyBwaXZvdCBhdCBjZW50ZXJcbiAgICAgICAgLmF0dHIoXCJpZFwiLCBcImFycm93TGVmdFwiKVxuICAgICAgICAuYXR0cihcbiAgICAgICAgICAgIFwidHJhbnNmb3JtXCIsXG4gICAgICAgICAgICBcInRyYW5zbGF0ZShcIiArXG4gICAgICAgICAgICAgICAgNi41ICogY2VsbFNpemUgK1xuICAgICAgICAgICAgICAgIFwiLFwiICtcbiAgICAgICAgICAgICAgICAoaGVhZGVySGVpZ2h0IC8gMiArIGFycm93U2l6ZS5oZWlnaHQgLyAyKSArXG4gICAgICAgICAgICAgICAgXCIpXCJcbiAgICAgICAgKVxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci1tb250aC10aXRsZS1hcnJvd1wiKVxuICAgICAgICAub24oXCJjbGlja1wiLCBmdW5jdGlvbiAoZXZlbnQ6IGFueSkge1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJyaWdodCBhcnJvdyBjbGlja2VkXCIpO1xuICAgICAgICAgICAgY2xlYXJTZWxlY3Rpb24oY2hhcnRFbGVtZW50cywgbW9udGhJbmZvKTtcblxuICAgICAgICAgICAgbGV0IG5leHRNb250aERhdGUgPSBjdXJNb250aERhdGUuY2xvbmUoKS5hZGQoMSwgXCJtb250aFwiKTtcbiAgICAgICAgICAgIHJlZnJlc2goXG4gICAgICAgICAgICAgICAgY2FudmFzLFxuICAgICAgICAgICAgICAgIGNoYXJ0RWxlbWVudHMsXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mbyxcbiAgICAgICAgICAgICAgICBtb250aEluZm8sXG4gICAgICAgICAgICAgICAgbmV4dE1vbnRoRGF0ZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSlcbiAgICAgICAgLnN0eWxlKFwiY3Vyc29yXCIsIFwicG9pbnRlclwiKTtcblxuICAgIC8vIGFycm93IHRvZGF5XG4gICAgbGV0IGFycm93VG9kYXkgPSBoZWFkZXJHcm91cFxuICAgICAgICAuYXBwZW5kKFwidGV4dFwiKVxuICAgICAgICAudGV4dChcIuKXplwiKSAvLyBwaXZvdCBhdCBjZW50ZXJcbiAgICAgICAgLmF0dHIoXCJpZFwiLCBcImFycm93VG9kYXlcIilcbiAgICAgICAgLmF0dHIoXG4gICAgICAgICAgICBcInRyYW5zZm9ybVwiLFxuICAgICAgICAgICAgXCJ0cmFuc2xhdGUoXCIgK1xuICAgICAgICAgICAgICAgIDYgKiBjZWxsU2l6ZSArXG4gICAgICAgICAgICAgICAgXCIsXCIgK1xuICAgICAgICAgICAgICAgIChoZWFkZXJIZWlnaHQgLyAyICsgYXJyb3dTaXplLmhlaWdodCAvIDIpICtcbiAgICAgICAgICAgICAgICBcIilcIlxuICAgICAgICApXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLW1vbnRoLXRpdGxlLWFycm93XCIpXG4gICAgICAgIC5vbihcImNsaWNrXCIsIGZ1bmN0aW9uIChldmVudDogYW55KSB7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcInRvZGF5IGFycm93IGNsaWNrZWRcIik7XG4gICAgICAgICAgICBjbGVhclNlbGVjdGlvbihjaGFydEVsZW1lbnRzLCBtb250aEluZm8pO1xuXG4gICAgICAgICAgICBsZXQgdG9kYXlEYXRlID0gaGVscGVyLmdldERhdGVUb2RheShyZW5kZXJJbmZvLmRhdGVGb3JtYXQpO1xuICAgICAgICAgICAgcmVmcmVzaChjYW52YXMsIGNoYXJ0RWxlbWVudHMsIHJlbmRlckluZm8sIG1vbnRoSW5mbywgdG9kYXlEYXRlKTtcbiAgICAgICAgfSlcbiAgICAgICAgLnN0eWxlKFwiY3Vyc29yXCIsIFwicG9pbnRlclwiKTtcblxuICAgIGhlYWRlckhlaWdodCArPSB5U3BhY2luZztcblxuICAgIC8vIHdlZWsgZGF5IG5hbWVzXG4gICAgbGV0IHdlZWtkYXlOYW1lcyA9IFtcIlN1blwiLCBcIk1vblwiLCBcIlR1ZVwiLCBcIldlZFwiLCBcIlRodVwiLCBcIkZyaVwiLCBcIlNhdFwiXTtcbiAgICBpZiAobW9udGhJbmZvLnN0YXJ0V2Vla09uLnRvTG93ZXJDYXNlKCkgPT09IFwibW9uXCIpIHtcbiAgICAgICAgd2Vla2RheU5hbWVzLnB1c2god2Vla2RheU5hbWVzLnNoaWZ0KCkpO1xuICAgIH1cbiAgICBsZXQgd2Vla2RheU5hbWVTaXplID0gaGVscGVyLm1lYXN1cmVUZXh0U2l6ZShcbiAgICAgICAgd2Vla2RheU5hbWVzWzBdLFxuICAgICAgICBcInRyYWNrZXItbW9udGgtd2Vla2RheVwiXG4gICAgKTtcbiAgICBsZXQgd2Vla0RheXMgPSBjaGFydEVsZW1lbnRzLmdyYXBoQXJlYVxuICAgICAgICAuc2VsZWN0QWxsKFwid2Vla0RheXNcIilcbiAgICAgICAgLmRhdGEod2Vla2RheU5hbWVzKVxuICAgICAgICAuZW50ZXIoKVxuICAgICAgICAuYXBwZW5kKFwidGV4dFwiKVxuICAgICAgICAudGV4dChmdW5jdGlvbiAobjogc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gbjtcbiAgICAgICAgfSlcbiAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgZnVuY3Rpb24gKG46IHN0cmluZywgaTogbnVtYmVyKSB7XG4gICAgICAgICAgICBsZXQgc3RyVHJhbnNsYXRlID1cbiAgICAgICAgICAgICAgICBcInRyYW5zbGF0ZShcIiArXG4gICAgICAgICAgICAgICAgKGkgKyAwLjUpICogY2VsbFNpemUgK1xuICAgICAgICAgICAgICAgIFwiLFwiICtcbiAgICAgICAgICAgICAgICAoaGVhZGVySGVpZ2h0ICsgd2Vla2RheU5hbWVTaXplLmhlaWdodCkgK1xuICAgICAgICAgICAgICAgIFwiKVwiO1xuICAgICAgICAgICAgcmV0dXJuIHN0clRyYW5zbGF0ZTtcbiAgICAgICAgfSlcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInRyYWNrZXItbW9udGgtd2Vla2RheVwiKVxuICAgICAgICAuYXR0cihcInRleHQtYW5jaG9yXCIsIFwibWlkZGxlXCIpXG4gICAgICAgIC5zdHlsZShcImN1cnNvclwiLCBcImRlZmF1bHRcIilcbiAgICAgICAgLm9uKFwiY2xpY2tcIiwgZnVuY3Rpb24gKGV2ZW50OiBhbnkpIHtcbiAgICAgICAgICAgIGNsZWFyU2VsZWN0aW9uKGNoYXJ0RWxlbWVudHMsIG1vbnRoSW5mbyk7XG4gICAgICAgIH0pO1xuICAgIGhlYWRlckhlaWdodCArPSB3ZWVrZGF5TmFtZVNpemUuaGVpZ2h0ICsgeVNwYWNpbmc7XG5cbiAgICAvLyBkaXZpZGluZyBsaW5lXG4gICAgbGV0IGRpdmlkaW5nTGluZUhlaWdodCA9IDE7XG4gICAgbGV0IGRpdmlkaW5nTGluZUNvbG9yID0gbnVsbDtcbiAgICBpZiAobW9udGhJbmZvLmRpdmlkaW5nTGluZUNvbG9yKSB7XG4gICAgICAgIGRpdmlkaW5nTGluZUNvbG9yID0gbW9udGhJbmZvLmRpdmlkaW5nTGluZUNvbG9yO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChtb250aEluZm8uY29sb3IpIHtcbiAgICAgICAgICAgIGRpdmlkaW5nTGluZUNvbG9yID0gbW9udGhJbmZvLmNvbG9yO1xuICAgICAgICB9XG4gICAgfVxuICAgIGxldCBkaXZpZGluZ0xpbmUgPSBjaGFydEVsZW1lbnRzLmdyYXBoQXJlYVxuICAgICAgICAuYXBwZW5kKFwicmVjdFwiKVxuICAgICAgICAuYXR0cihcInhcIiwgMClcbiAgICAgICAgLmF0dHIoXCJ5XCIsIGhlYWRlckhlaWdodClcbiAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCA2LjUgKiBjZWxsU2l6ZSArIHdlZWtkYXlOYW1lU2l6ZS53aWR0aClcbiAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgZGl2aWRpbmdMaW5lSGVpZ2h0KVxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci1tb250aC1kaXZpZGluZy1saW5lXCIpO1xuXG4gICAgaWYgKGRpdmlkaW5nTGluZUNvbG9yKSB7XG4gICAgICAgIGRpdmlkaW5nTGluZS5zdHlsZShcImZpbGxcIiwgZGl2aWRpbmdMaW5lQ29sb3IpO1xuICAgIH1cbiAgICBoZWFkZXJIZWlnaHQgKz0gZGl2aWRpbmdMaW5lSGVpZ2h0O1xuXG4gICAgaGVhZGVyR3JvdXAuYXR0cihcImhlaWdodFwiLCBoZWFkZXJIZWlnaHQpO1xuICAgIGNoYXJ0RWxlbWVudHNbXCJoZWFkZXJcIl0gPSBoZWFkZXJHcm91cDtcblxuICAgIC8vIE1vdmUgc2libGluZyBhcmVhc1xuICAgIGhlbHBlci5tb3ZlQXJlYShjaGFydEVsZW1lbnRzLmRhdGFBcmVhLCAwLCBoZWFkZXJIZWlnaHQpO1xufVxuXG5mdW5jdGlvbiByZW5kZXJNb250aERheXMoXG4gICAgY2FudmFzOiBIVE1MRWxlbWVudCxcbiAgICBjaGFydEVsZW1lbnRzOiBDaGFydEVsZW1lbnRzLFxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXG4gICAgbW9udGhJbmZvOiBNb250aEluZm8sXG4gICAgY3VyTW9udGhEYXRlOiBNb21lbnRcbikge1xuICAgIC8vIGNvbnNvbGUubG9nKFwicmVuZGVyTW9udGhEYXlzXCIpO1xuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8pO1xuICAgIC8vIGNvbnNvbGUubG9nKG1vbnRoSW5mbyk7XG4gICAgaWYgKCFyZW5kZXJJbmZvIHx8ICFtb250aEluZm8pIHJldHVybjtcblxuICAgIGxldCBtb2RlID0gbW9udGhJbmZvLm1vZGU7XG4gICAgaWYgKG1vZGUgIT09IFwiY2lyY2xlXCIgJiYgbW9kZSAhPT0gXCJhbm5vdGF0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuIFwiVW5rbm93biBtb250aCB2aWV3IG1vZGVcIjtcbiAgICB9XG5cbiAgICBsZXQgY3VyRGF0YXNldElkID0gbW9udGhJbmZvLnNlbGVjdGVkRGF0YXNldDtcbiAgICBpZiAoY3VyRGF0YXNldElkID09PSBudWxsKSByZXR1cm47XG4gICAgbGV0IGRhdGFzZXQgPSByZW5kZXJJbmZvLmRhdGFzZXRzLmdldERhdGFzZXRCeUlkKGN1ckRhdGFzZXRJZCk7XG4gICAgaWYgKCFkYXRhc2V0KSByZXR1cm47XG4gICAgLy8gY29uc29sZS5sb2coZGF0YXNldCk7XG5cbiAgICBsZXQgY3VyRGF0YXNldEluZGV4ID0gbW9udGhJbmZvLmRhdGFzZXQuZmluZEluZGV4KChpZCkgPT4ge1xuICAgICAgICByZXR1cm4gaWQgPT09IGN1ckRhdGFzZXRJZDtcbiAgICB9KTtcbiAgICBpZiAoY3VyRGF0YXNldElkIDwgMCkgY3VyRGF0YXNldEluZGV4ID0gMDtcbiAgICBsZXQgdGhyZXNob2xkID0gbW9udGhJbmZvLnRocmVzaG9sZFtjdXJEYXRhc2V0SW5kZXhdO1xuXG4gICAgbGV0IGN1ck1vbnRoID0gY3VyTW9udGhEYXRlLm1vbnRoKCk7IC8vIDB+MTFcbiAgICBsZXQgY3VyRGF5c0luTW9udGggPSBjdXJNb250aERhdGUuZGF5c0luTW9udGgoKTsgLy8gMjh+MzFcblxuICAgIGxldCBtYXhEYXlUZXh0U2l6ZSA9IGhlbHBlci5tZWFzdXJlVGV4dFNpemUoXCIzMFwiLCBcInRyYWNrZXItbW9udGgtbGFiZWxcIik7XG4gICAgbGV0IGNlbGxTaXplID1cbiAgICAgICAgTWF0aC5tYXgobWF4RGF5VGV4dFNpemUud2lkdGgsIG1heERheVRleHRTaXplLmhlaWdodCkgKiByYXRpb0NlbGxUb1RleHQ7XG4gICAgbGV0IGRvdFJhZGl1cyA9ICgoY2VsbFNpemUgLyByYXRpb0NlbGxUb1RleHQpICogcmF0aW9Eb3RUb1RleHQpIC8gMi4wO1xuICAgIGxldCBzdHJlYWtXaWR0aCA9IChjZWxsU2l6ZSAtIGRvdFJhZGl1cyAqIDIuMCkgLyAyLjA7XG4gICAgbGV0IHN0cmVha0hlaWdodCA9IDM7XG5cbiAgICAvLyBHZXQgbWluIGFuZCBtYXhcbiAgICBsZXQgeU1pbiA9IGQzLm1pbihkYXRhc2V0LmdldFZhbHVlcygpKTtcbiAgICBpZiAobW9udGhJbmZvLnlNaW5bY3VyRGF0YXNldEluZGV4XSAhPT0gbnVsbCkge1xuICAgICAgICB5TWluID0gbW9udGhJbmZvLnlNaW5bY3VyRGF0YXNldEluZGV4XTtcbiAgICB9XG4gICAgbGV0IHlNYXggPSBkMy5tYXgoZGF0YXNldC5nZXRWYWx1ZXMoKSk7XG4gICAgaWYgKG1vbnRoSW5mby55TWF4W2N1ckRhdGFzZXRJbmRleF0gIT09IG51bGwpIHtcbiAgICAgICAgeU1heCA9IG1vbnRoSW5mby55TWF4W2N1ckRhdGFzZXRJbmRleF07XG4gICAgfVxuICAgIC8vIGNvbnNvbGUubG9nKGB5TWluOiR7eU1pbn0sIHlNYXg6JHt5TWF4fWApO1xuICAgIGxldCBhbGxvd1NjYWxlZFZhbHVlID0gdHJ1ZTtcbiAgICBpZiAoeU1heCA9PT0gbnVsbCB8fCB5TWluID09PSBudWxsIHx8IHlNYXggPD0geU1pbikge1xuICAgICAgICAvLyBzY2FsZWRWYWx1ZSBjYW4gbm90IGJlIGNhbGN1bGF0ZWQsIGRvIG5vdCB1c2UgZ3JhZGllbnQgY29sb3JcbiAgICAgICAgYWxsb3dTY2FsZWRWYWx1ZSA9IGZhbHNlO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhcInNjYWxlZFZhbHVlIG5vdCBhbGxvd2VkXCIpO1xuICAgIH1cblxuICAgIC8vIFN0YXJ0IGFuZCBlbmRcbiAgICBjb25zdCBtb250aFN0YXJ0RGF0ZSA9IGN1ck1vbnRoRGF0ZS5jbG9uZSgpLnN0YXJ0T2YoXCJtb250aFwiKTtcbiAgICBsZXQgc3RhcnREYXRlID0gbW9udGhTdGFydERhdGVcbiAgICAgICAgLmNsb25lKClcbiAgICAgICAgLnN1YnRyYWN0KG1vbnRoU3RhcnREYXRlLmRheSgpLCBcImRheXNcIik7XG4gICAgaWYgKG1vbnRoSW5mby5zdGFydFdlZWtPbi50b0xvd2VyQ2FzZSgpID09PSBcIm1vblwiKSB7XG4gICAgICAgIHN0YXJ0RGF0ZSA9IHN0YXJ0RGF0ZS5hZGQoMSwgXCJkYXlzXCIpO1xuICAgIH1cbiAgICBjb25zdCBtb250aEVuZERhdGUgPSBjdXJNb250aERhdGUuY2xvbmUoKS5lbmRPZihcIm1vbnRoXCIpO1xuICAgIGxldCBlbmREYXRlID0gbW9udGhFbmREYXRlLmNsb25lKCkuYWRkKDcgLSBtb250aEVuZERhdGUuZGF5KCkgLSAxLCBcImRheXNcIik7XG4gICAgaWYgKG1vbnRoSW5mby5zdGFydFdlZWtPbi50b0xvd2VyQ2FzZSgpID09PSBcIm1vblwiKSB7XG4gICAgICAgIGVuZERhdGUgPSBlbmREYXRlLmFkZCgxLCBcImRheXNcIik7XG4gICAgfVxuICAgIGNvbnN0IGRhdGFTdGFydERhdGUgPSBkYXRhc2V0LmdldFN0YXJ0RGF0ZSgpO1xuICAgIGNvbnN0IGRhdGFFbmREYXRlID0gZGF0YXNldC5nZXRFbmREYXRlKCk7XG4gICAgLy8gY29uc29sZS5sb2cobW9udGhTdGFydERhdGUuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKSk7XG4gICAgLy8gY29uc29sZS5sb2coc3RhcnREYXRlLmZvcm1hdChcIllZWVktTU0tRERcIikpO1xuXG4gICAgLy8gYW5ub3RhdGlvbnNcbiAgICBsZXQgc2hvd0Fubm90YXRpb24gPSBtb250aEluZm8uc2hvd0Fubm90YXRpb247XG4gICAgbGV0IGFubm90YXRpb25zID0gbW9udGhJbmZvLmFubm90YXRpb247XG4gICAgbGV0IGN1ckFubm90YXRpb24gPSBhbm5vdGF0aW9uc1tjdXJEYXRhc2V0SW5kZXhdO1xuICAgIGxldCBzaG93QW5ub3RhdGlvbk9mQWxsVGFyZ2V0cyA9IG1vbnRoSW5mby5zaG93QW5ub3RhdGlvbk9mQWxsVGFyZ2V0cztcblxuICAgIC8vIFByZXBhcmUgZGF0YSBmb3IgZ3JhcGhcbiAgICBsZXQgZGF5c0luTW9udGhWaWV3OiBBcnJheTxEYXlJbmZvPiA9IFtdO1xuICAgIGxldCBpbmRDb2wgPSAwO1xuICAgIGxldCBpbmRSb3cgPSAwO1xuICAgIGxldCBpbmQgPSAwO1xuICAgIGZvciAoXG4gICAgICAgIGxldCBjdXJEYXRlID0gc3RhcnREYXRlLmNsb25lKCk7XG4gICAgICAgIGN1ckRhdGUgPD0gZW5kRGF0ZTtcbiAgICAgICAgY3VyRGF0ZS5hZGQoMSwgXCJkYXlzXCIpXG4gICAgKSB7XG4gICAgICAgIC8vIG5vdCBzdXJlIHdoeSB3ZSBuZWVkIHRvIGRvIHRoaXMgdG8gc3RhYmxpemUgdGhlIGRhdGVcbiAgICAgICAgLy8gc29tZXRpbWVzLCBjdXJWYWx1ZSBpcyB3cm9uZyB3aXRob3V0IGRvaW5nIHRoaXNcbiAgICAgICAgY3VyRGF0ZSA9IGhlbHBlci5zdHJUb0RhdGUoXG4gICAgICAgICAgICBoZWxwZXIuZGF0ZVRvU3RyKGN1ckRhdGUsIHJlbmRlckluZm8uZGF0ZUZvcm1hdCksXG4gICAgICAgICAgICByZW5kZXJJbmZvLmRhdGVGb3JtYXRcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGN1ckRhdGUuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKSA9PT0gXCIyMDIxLTA5LTEzXCIpIHtcbiAgICAgICAgICAgIGxvZ1RvQ29uc29sZSA9IGZhbHNlOyAvLyBDaGFuZ2UgdGhpcyB0byBkbyBkdWJ1Z2dpbmdcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtb250aEluZm8uc3RhcnRXZWVrT24udG9Mb3dlckNhc2UoKSA9PT0gXCJtb25cIikge1xuICAgICAgICAgICAgaW5kQ29sID0gY3VyRGF0ZS5kYXkoKSAtIDE7XG4gICAgICAgICAgICBpZiAoaW5kQ29sIDwgMCkge1xuICAgICAgICAgICAgICAgIGluZENvbCA9IDY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpbmRSb3cgPSBNYXRoLmZsb29yKGluZCAvIDcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW5kQ29sID0gY3VyRGF0ZS5kYXkoKTsgLy8gMH42XG4gICAgICAgICAgICBpbmRSb3cgPSBNYXRoLmZsb29yKGluZCAvIDcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaXMgdGhpcyBkYXkgaW4gdGhpcyBtb250aFxuICAgICAgICBsZXQgaXNJblRoaXNNb250aCA9IHRydWU7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGN1ckRhdGUuZGlmZihtb250aFN0YXJ0RGF0ZSkgPCAwIHx8XG4gICAgICAgICAgICBjdXJEYXRlLmRpZmYobW9udGhFbmREYXRlKSA+IDBcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBpc0luVGhpc01vbnRoID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaXMgdGhpcyBkYXkgb3V0IG9mIGRhdGEgcmFuZ2VcbiAgICAgICAgbGV0IGlzT3V0T2ZEYXRhUmFuZ2UgPSB0cnVlO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBkYXRhU3RhcnREYXRlICYmXG4gICAgICAgICAgICBkYXRhRW5kRGF0ZSAmJlxuICAgICAgICAgICAgY3VyRGF0ZS5kaWZmKGRhdGFTdGFydERhdGUpID49IDAgJiZcbiAgICAgICAgICAgIGN1ckRhdGUuZGlmZihkYXRhRW5kRGF0ZSkgPD0gMFxuICAgICAgICApIHtcbiAgICAgICAgICAgIGlzT3V0T2ZEYXRhUmFuZ2UgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGN1clZhbHVlID0gZGF0YXNldC5nZXRWYWx1ZShjdXJEYXRlKTtcbiAgICAgICAgaWYgKGxvZ1RvQ29uc29sZSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YXNldCk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhoZWxwZXIuZGF0ZVRvU3RyKGN1ckRhdGUsIHJlbmRlckluZm8uZGF0ZUZvcm1hdCkpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coY3VyVmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc2hvd0NpcmNsZVxuICAgICAgICBsZXQgc2hvd0NpcmNsZSA9IGZhbHNlO1xuICAgICAgICBpZiAoIW1vbnRoSW5mby5jaXJjbGVDb2xvckJ5VmFsdWUpIHtcbiAgICAgICAgICAgIC8vIHNob3duIG9yIG5vdCBzaG93blxuICAgICAgICAgICAgaWYgKGN1clZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKGN1clZhbHVlID4gdGhyZXNob2xkKSB7XG4gICAgICAgICAgICAgICAgICAgIHNob3dDaXJjbGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghYWxsb3dTY2FsZWRWYWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmIChjdXJWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY3VyVmFsdWUgPiB0aHJlc2hvbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNob3dDaXJjbGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzaG93Q2lyY2xlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHNjYWxlZFZhbHVlXG4gICAgICAgIGxldCBzY2FsZWRWYWx1ZSA9IG51bGw7XG4gICAgICAgIGlmIChtb250aEluZm8uY2lyY2xlQ29sb3JCeVZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoYWxsb3dTY2FsZWRWYWx1ZSAmJiBjdXJWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHNjYWxlZFZhbHVlID0gKGN1clZhbHVlIC0geU1pbikgLyAoeU1heCAtIHlNaW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChsb2dUb0NvbnNvbGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHlNaW4pO1xuICAgICAgICAgICAgY29uc29sZS5sb2coeU1heCk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhzY2FsZWRWYWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzdHJlYWtJbiBhbmQgc3RyZWFrT3V0XG4gICAgICAgIGxldCBuZXh0VmFsdWUgPSBkYXRhc2V0LmdldFZhbHVlKGN1ckRhdGUsIDEpO1xuICAgICAgICBsZXQgcHJldlZhbHVlID0gZGF0YXNldC5nZXRWYWx1ZShjdXJEYXRlLCAtMSk7XG4gICAgICAgIGxldCBzdHJlYWtJbiA9IGZhbHNlO1xuICAgICAgICBpZiAoY3VyVmFsdWUgIT09IG51bGwgJiYgY3VyVmFsdWUgPiB0aHJlc2hvbGQpIHtcbiAgICAgICAgICAgIGlmIChwcmV2VmFsdWUgIT09IG51bGwgJiYgcHJldlZhbHVlID4gdGhyZXNob2xkKSB7XG4gICAgICAgICAgICAgICAgc3RyZWFrSW4gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCBzdHJlYWtPdXQgPSBmYWxzZTtcbiAgICAgICAgaWYgKGN1clZhbHVlICE9PSBudWxsICYmIGN1clZhbHVlID4gdGhyZXNob2xkKSB7XG4gICAgICAgICAgICBpZiAobmV4dFZhbHVlICE9PSBudWxsICYmIG5leHRWYWx1ZSA+IHRocmVzaG9sZCkge1xuICAgICAgICAgICAgICAgIHN0cmVha091dCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvZ1RvQ29uc29sZSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgYHByZVZhbHVlOiAke3ByZXZWYWx1ZX0sIGN1clZhbHVlOiAke2N1clZhbHVlfSwgbmV4dFZhbHVlOiAke25leHRWYWx1ZX1gXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc29sZS5sb2cobW9udGhJbmZvLnRocmVzaG9sZCk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgc3RyZWFrSW46ICR7c3RyZWFrSW59LCBzdHJlYWtPdXQ6ICR7c3RyZWFrT3V0fWApO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHRleHRBbm5vdGF0aW9uID0gXCJcIjtcbiAgICAgICAgaWYgKHNob3dBbm5vdGF0aW9uKSB7XG4gICAgICAgICAgICBpZiAoIXNob3dBbm5vdGF0aW9uT2ZBbGxUYXJnZXRzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGN1clZhbHVlID4gdGhyZXNob2xkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRleHRBbm5vdGF0aW9uID0gY3VyQW5ub3RhdGlvbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGRhdGFzZXRJZCBvZiBtb250aEluZm8uZGF0YXNldCkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZGF0YXNldEluZGV4ID0gbW9udGhJbmZvLmRhdGFzZXQuZmluZEluZGV4KChpZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlkID09PSBkYXRhc2V0SWQ7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YXNldEluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2ID0gcmVuZGVySW5mby5kYXRhc2V0c1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXREYXRhc2V0QnlJZChkYXRhc2V0SWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldFZhbHVlKGN1ckRhdGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHQgPSBtb250aEluZm8udGhyZXNob2xkW2RhdGFzZXRJbmRleF07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodiAhPT0gbnVsbCAmJiB2ID4gdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRBbm5vdGF0aW9uICs9IGFubm90YXRpb25zW2RhdGFzZXRJbmRleF07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBkYXlzSW5Nb250aFZpZXcucHVzaCh7XG4gICAgICAgICAgICBkYXRlOiBoZWxwZXIuZGF0ZVRvU3RyKGN1ckRhdGUsIHJlbmRlckluZm8uZGF0ZUZvcm1hdCksXG4gICAgICAgICAgICB2YWx1ZTogY3VyVmFsdWUsXG4gICAgICAgICAgICBzY2FsZWRWYWx1ZTogc2NhbGVkVmFsdWUsXG4gICAgICAgICAgICBkYXlJbk1vbnRoOiBjdXJEYXRlLmRhdGUoKSxcbiAgICAgICAgICAgIGlzSW5UaGlzTW9udGg6IGlzSW5UaGlzTW9udGgsXG4gICAgICAgICAgICBpc091dE9mRGF0YVJhbmdlOiBpc091dE9mRGF0YVJhbmdlLFxuICAgICAgICAgICAgcm93OiBpbmRSb3csXG4gICAgICAgICAgICBjb2w6IGluZENvbCxcbiAgICAgICAgICAgIHNob3dDaXJjbGU6IHNob3dDaXJjbGUsXG4gICAgICAgICAgICBzdHJlYWtJbjogc3RyZWFrSW4sXG4gICAgICAgICAgICBzdHJlYWtPdXQ6IHN0cmVha091dCxcbiAgICAgICAgICAgIGFubm90YXRpb246IHRleHRBbm5vdGF0aW9uLFxuICAgICAgICB9KTtcblxuICAgICAgICBpbmQrKztcblxuICAgICAgICAvLyBEaXNhYmxlIGxvZ2dpbmcgc3RhcnRzIGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBsb29wXG4gICAgICAgIGlmIChsb2dUb0NvbnNvbGUpIHtcbiAgICAgICAgICAgIGxvZ1RvQ29uc29sZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIGNvbnNvbGUubG9nKGRheXNJbk1vbnRoVmlldyk7XG4gICAgLy8gY29uc29sZS5sb2coZGF5c0luTW9udGhWaWV3LmZpbHRlcihmdW5jdGlvbiAoZDogRGF5SW5mbykge1xuICAgIC8vICAgICByZXR1cm4gZC5zdHJlYWtJbjtcbiAgICAvLyB9KSk7XG4gICAgLy8gY29uc29sZS5sb2coZGF5c0luTW9udGhWaWV3LmZpbHRlcihmdW5jdGlvbiAoZDogRGF5SW5mbykge1xuICAgIC8vICAgICByZXR1cm4gZC5zdHJlYWtPdXQ7XG4gICAgLy8gfSkpO1xuXG4gICAgLy8gc2NhbGVcbiAgICBsZXQgdG90YWxEYXlCbG9ja1dpZHRoID0gKGluZENvbCArIDEpICogY2VsbFNpemU7XG4gICAgbGV0IHRvdGFsQmxvY2tIZWlnaHQgPSAoaW5kUm93ICsgMSkgKiBjZWxsU2l6ZTtcbiAgICBsZXQgc2NhbGUgPSBkM1xuICAgICAgICAuc2NhbGVMaW5lYXIoKVxuICAgICAgICAuZG9tYWluKFstMC41LCA2LjVdKVxuICAgICAgICAucmFuZ2UoWzAsIHRvdGFsRGF5QmxvY2tXaWR0aF0pO1xuXG4gICAgLy8gc3RyZWFrIGxpbmVzXG4gICAgaWYgKG1vZGUgPT09IFwiY2lyY2xlXCIgJiYgbW9udGhJbmZvLnNob3dDaXJjbGUgJiYgbW9udGhJbmZvLnNob3dTdHJlYWspIHtcbiAgICAgICAgbGV0IHN0cmVha0NvbG9yID0gXCIjNjliM2EyXCI7XG4gICAgICAgIGlmIChtb250aEluZm8uY2lyY2xlQ29sb3IpIHtcbiAgICAgICAgICAgIHN0cmVha0NvbG9yID0gbW9udGhJbmZvLmNpcmNsZUNvbG9yO1xuICAgICAgICB9IGVsc2UgaWYgKG1vbnRoSW5mby5jb2xvcikge1xuICAgICAgICAgICAgc3RyZWFrQ29sb3IgPSBtb250aEluZm8uY29sb3I7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY29uc29sZS5sb2coc3RyZWFrQ29sb3IpO1xuXG4gICAgICAgIGNoYXJ0RWxlbWVudHMuZGF0YUFyZWFcbiAgICAgICAgICAgIC5zZWxlY3RBbGwoXCJzdHJlYWtJblwiKVxuICAgICAgICAgICAgLmRhdGEoXG4gICAgICAgICAgICAgICAgZGF5c0luTW9udGhWaWV3LmZpbHRlcihmdW5jdGlvbiAoZDogRGF5SW5mbykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZC5zdHJlYWtJbjtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmVudGVyKClcbiAgICAgICAgICAgIC5hcHBlbmQoXCJyZWN0XCIpXG4gICAgICAgICAgICAvLyAuYXR0cihcImlkXCIsIGZ1bmN0aW9uKGQ6IERheUluZm8pIHtcbiAgICAgICAgICAgIC8vICAgICByZXR1cm4gXCJpblwiICsgZC5kYXRlLmZvcm1hdChcIllZWVktTU0tRERcIik7XG4gICAgICAgICAgICAvLyB9KVxuICAgICAgICAgICAgLmF0dHIoXCJ4XCIsIGZ1bmN0aW9uIChkOiBEYXlJbmZvKSB7XG4gICAgICAgICAgICAgICAgbGV0IHggPSBzY2FsZShkLmNvbCkgLSBkb3RSYWRpdXMgLSBzdHJlYWtXaWR0aDtcbiAgICAgICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuYXR0cihcInlcIiwgZnVuY3Rpb24gKGQ6IERheUluZm8pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2NhbGUoZC5yb3cpIC0gc3RyZWFrSGVpZ2h0IC8gMi4wO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hdHRyKFwid2lkdGhcIiwgc3RyZWFrV2lkdGgpXG4gICAgICAgICAgICAuYXR0cihcImhlaWdodFwiLCBzdHJlYWtIZWlnaHQpXG4gICAgICAgICAgICAuc3R5bGUoXCJmaWxsXCIsIGZ1bmN0aW9uIChkOiBEYXlJbmZvKSB7XG4gICAgICAgICAgICAgICAgaWYgKGQuc2hvd0NpcmNsZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIW1vbnRoSW5mby5jaXJjbGVDb2xvckJ5VmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHJlYWtDb2xvcjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoZC5zY2FsZWRWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGQzLmludGVycG9sYXRlTGFiKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwid2hpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYWtDb2xvclxuICAgICAgICAgICAgICAgICAgICAgICAgKShkLnNjYWxlZFZhbHVlICogMC44ICsgMC4yKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIm5vbmVcIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gXCJub25lXCI7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnN0eWxlKFwib3BhY2l0eVwiLCBmdW5jdGlvbiAoZDogRGF5SW5mbykge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgZC5pc091dE9mRGF0YVJhbmdlIHx8XG4gICAgICAgICAgICAgICAgICAgIChtb250aEluZm8uZGltTm90SW5Nb250aCAmJiAhZC5pc0luVGhpc01vbnRoKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMC4yO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gMS4wO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgY2hhcnRFbGVtZW50cy5kYXRhQXJlYVxuICAgICAgICAgICAgLnNlbGVjdEFsbChcInN0cmVha091dFwiKVxuICAgICAgICAgICAgLmRhdGEoXG4gICAgICAgICAgICAgICAgZGF5c0luTW9udGhWaWV3LmZpbHRlcihmdW5jdGlvbiAoZDogRGF5SW5mbykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZC5zdHJlYWtPdXQ7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5lbnRlcigpXG4gICAgICAgICAgICAuYXBwZW5kKFwicmVjdFwiKVxuICAgICAgICAgICAgLy8gLmF0dHIoXCJpZFwiLCBmdW5jdGlvbihkOiBEYXlJbmZvKSB7XG4gICAgICAgICAgICAvLyAgICAgcmV0dXJuIFwib3V0XCIgKyBkLmRhdGUuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKTtcbiAgICAgICAgICAgIC8vIH0pXG4gICAgICAgICAgICAuYXR0cihcInhcIiwgZnVuY3Rpb24gKGQ6IERheUluZm8pIHtcbiAgICAgICAgICAgICAgICBsZXQgeCA9IHNjYWxlKGQuY29sKSArIGRvdFJhZGl1cztcbiAgICAgICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuYXR0cihcInlcIiwgZnVuY3Rpb24gKGQ6IERheUluZm8pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2NhbGUoZC5yb3cpIC0gc3RyZWFrSGVpZ2h0IC8gMi4wO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hdHRyKFwid2lkdGhcIiwgc3RyZWFrV2lkdGgpXG4gICAgICAgICAgICAuYXR0cihcImhlaWdodFwiLCBzdHJlYWtIZWlnaHQpXG4gICAgICAgICAgICAuc3R5bGUoXCJmaWxsXCIsIGZ1bmN0aW9uIChkOiBEYXlJbmZvKSB7XG4gICAgICAgICAgICAgICAgaWYgKGQuc2hvd0NpcmNsZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIW1vbnRoSW5mby5jaXJjbGVDb2xvckJ5VmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHJlYWtDb2xvcjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoZC5zY2FsZWRWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGQzLmludGVycG9sYXRlTGFiKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwid2hpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYWtDb2xvclxuICAgICAgICAgICAgICAgICAgICAgICAgKShkLnNjYWxlZFZhbHVlICogMC44ICsgMC4yKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIm5vbmVcIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gXCJub25lXCI7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnN0eWxlKFwib3BhY2l0eVwiLCBmdW5jdGlvbiAoZDogRGF5SW5mbykge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgZC5pc091dE9mRGF0YVJhbmdlIHx8XG4gICAgICAgICAgICAgICAgICAgIChtb250aEluZm8uZGltTm90SW5Nb250aCAmJiAhZC5pc0luVGhpc01vbnRoKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMC4yO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gMS4wO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gY2lyY2xlc1xuICAgIGxldCBjaXJjbGVDb2xvciA9IFwiIzY5YjNhMlwiO1xuICAgIGlmIChtb250aEluZm8uY2lyY2xlQ29sb3IpIHtcbiAgICAgICAgY2lyY2xlQ29sb3IgPSBtb250aEluZm8uY2lyY2xlQ29sb3I7XG4gICAgfSBlbHNlIGlmIChtb250aEluZm8uY29sb3IpIHtcbiAgICAgICAgY2lyY2xlQ29sb3IgPSBtb250aEluZm8uY29sb3I7XG4gICAgfVxuICAgIGlmIChtb2RlID09PSBcImNpcmNsZVwiICYmIG1vbnRoSW5mby5zaG93Q2lyY2xlKSB7XG4gICAgICAgIGxldCBkb3RzID0gY2hhcnRFbGVtZW50cy5kYXRhQXJlYVxuICAgICAgICAgICAgLnNlbGVjdEFsbChcImRvdFwiKVxuICAgICAgICAgICAgLmRhdGEoZGF5c0luTW9udGhWaWV3KVxuICAgICAgICAgICAgLmVudGVyKClcbiAgICAgICAgICAgIC5hcHBlbmQoXCJjaXJjbGVcIilcbiAgICAgICAgICAgIC5hdHRyKFwiclwiLCBkb3RSYWRpdXMpXG4gICAgICAgICAgICAuYXR0cihcImN4XCIsIGZ1bmN0aW9uIChkOiBEYXlJbmZvKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNjYWxlKGQuY29sKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuYXR0cihcImN5XCIsIGZ1bmN0aW9uIChkOiBEYXlJbmZvKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNjYWxlKGQucm93KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuc3R5bGUoXCJmaWxsXCIsIGZ1bmN0aW9uIChkOiBEYXlJbmZvKSB7XG4gICAgICAgICAgICAgICAgaWYgKGQuc2hvd0NpcmNsZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIW1vbnRoSW5mby5jaXJjbGVDb2xvckJ5VmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaXJjbGVDb2xvcjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoZC5zY2FsZWRWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNjYWxlZENvbG9yID0gZDMuaW50ZXJwb2xhdGVMYWIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ3aGl0ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpcmNsZUNvbG9yXG4gICAgICAgICAgICAgICAgICAgICAgICApKGQuc2NhbGVkVmFsdWUgKiAwLjggKyAwLjIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coZC5zY2FsZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhzY2FsZWRDb2xvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2NhbGVkQ29sb3I7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJub25lXCI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwibm9uZVwiO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5zdHlsZShcIm9wYWNpdHlcIiwgZnVuY3Rpb24gKGQ6IERheUluZm8pIHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIGQuaXNPdXRPZkRhdGFSYW5nZSB8fFxuICAgICAgICAgICAgICAgICAgICAobW9udGhJbmZvLmRpbU5vdEluTW9udGggJiYgIWQuaXNJblRoaXNNb250aClcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDAuMjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIDEuMDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuc3R5bGUoXCJjdXJzb3JcIiwgXCJkZWZhdWx0XCIpO1xuICAgIH1cblxuICAgIC8vIHRvZGF5IHJpbmdzXG4gICAgbGV0IHRvZGF5ID0gaGVscGVyLmRhdGVUb1N0cih3aW5kb3cubW9tZW50KCksIHJlbmRlckluZm8uZGF0ZUZvcm1hdCk7XG4gICAgaWYgKG1vZGUgPT09IFwiY2lyY2xlXCIgJiYgbW9udGhJbmZvLnNob3dUb2RheVJpbmcpIHtcbiAgICAgICAgbGV0IHRvZGF5UmluZ3MgPSBjaGFydEVsZW1lbnRzLmRhdGFBcmVhXG4gICAgICAgICAgICAuc2VsZWN0QWxsKFwidG9kYXlSaW5nXCIpXG4gICAgICAgICAgICAuZGF0YShcbiAgICAgICAgICAgICAgICBkYXlzSW5Nb250aFZpZXcuZmlsdGVyKGZ1bmN0aW9uIChkOiBEYXlJbmZvKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkLmRhdGUgPT09IHRvZGF5O1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuZW50ZXIoKVxuICAgICAgICAgICAgLmFwcGVuZChcImNpcmNsZVwiKVxuICAgICAgICAgICAgLmF0dHIoXCJyXCIsIGRvdFJhZGl1cyAqIDAuOSlcbiAgICAgICAgICAgIC5hdHRyKFwiY3hcIiwgZnVuY3Rpb24gKGQ6IERheUluZm8pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2NhbGUoZC5jb2wpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hdHRyKFwiY3lcIiwgZnVuY3Rpb24gKGQ6IERheUluZm8pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2NhbGUoZC5yb3cpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLW1vbnRoLXRvZGF5LWNpcmNsZVwiKSAvLyBzdHJva2Ugbm90IHdvcmtzPz9cbiAgICAgICAgICAgIC5zdHlsZShcImN1cnNvclwiLCBcImRlZmF1bHRcIik7XG5cbiAgICAgICAgaWYgKG1vbnRoSW5mby50b2RheVJpbmdDb2xvciAhPT0gXCJcIikge1xuICAgICAgICAgICAgdG9kYXlSaW5ncy5zdHlsZShcInN0cm9rZVwiLCBtb250aEluZm8udG9kYXlSaW5nQ29sb3IpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdG9kYXlSaW5ncy5zdHlsZShcInN0cm9rZVwiLCBcIndoaXRlXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gc2VsZWN0ZWQgcmluZ3NcbiAgICBpZiAobW9kZSA9PT0gXCJjaXJjbGVcIiAmJiBtb250aEluZm8uc2hvd1NlbGVjdGVkUmluZykge1xuICAgICAgICBsZXQgc2VsZWN0ZWRSaW5ncyA9IGNoYXJ0RWxlbWVudHMuZGF0YUFyZWFcbiAgICAgICAgICAgIC5zZWxlY3RBbGwoXCJzZWxlY3RlZFJpbmdcIilcbiAgICAgICAgICAgIC5kYXRhKGRheXNJbk1vbnRoVmlldylcbiAgICAgICAgICAgIC5lbnRlcigpXG4gICAgICAgICAgICAuYXBwZW5kKFwiY2lyY2xlXCIpXG4gICAgICAgICAgICAuYXR0cihcInJcIiwgZG90UmFkaXVzKVxuICAgICAgICAgICAgLmF0dHIoXCJjeFwiLCBmdW5jdGlvbiAoZDogRGF5SW5mbykge1xuICAgICAgICAgICAgICAgIHJldHVybiBzY2FsZShkLmNvbCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmF0dHIoXCJjeVwiLCBmdW5jdGlvbiAoZDogRGF5SW5mbykge1xuICAgICAgICAgICAgICAgIHJldHVybiBzY2FsZShkLnJvdyk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmF0dHIoXCJpZFwiLCBmdW5jdGlvbiAoZDogRGF5SW5mbykge1xuICAgICAgICAgICAgICAgIHJldHVybiBcInRyYWNrZXItc2VsZWN0ZWQtY2lyY2xlLVwiICsgZC5kYXRlO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLW1vbnRoLXNlbGVjdGVkLWNpcmNsZVwiKSAvLyBzdHJva2Ugbm90IHdvcmtzPz9cbiAgICAgICAgICAgIC5zdHlsZShcImN1cnNvclwiLCBcImRlZmF1bHRcIilcbiAgICAgICAgICAgIC5zdHlsZShcInN0cm9rZVwiLCBcIm5vbmVcIik7XG4gICAgfVxuXG4gICAgLy8gbGFiZWxzXG4gICAgbGV0IGRheUxhYmFscyA9IGNoYXJ0RWxlbWVudHMuZGF0YUFyZWFcbiAgICAgICAgLnNlbGVjdEFsbChcImRheUxhYmVsXCIpXG4gICAgICAgIC5kYXRhKGRheXNJbk1vbnRoVmlldylcbiAgICAgICAgLmVudGVyKClcbiAgICAgICAgLmFwcGVuZChcInRleHRcIilcbiAgICAgICAgLnRleHQoZnVuY3Rpb24gKGQ6IERheUluZm8pIHtcbiAgICAgICAgICAgIHJldHVybiBkLmRheUluTW9udGgudG9TdHJpbmcoKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgZnVuY3Rpb24gKGQ6IERheUluZm8pIHtcbiAgICAgICAgICAgIGxldCB0cmFuc1ggPSBzY2FsZShkLmNvbCk7XG4gICAgICAgICAgICBsZXQgdHJhbnNZID0gc2NhbGUoZC5yb3cpICsgbWF4RGF5VGV4dFNpemUuaGVpZ2h0IC8gNDtcbiAgICAgICAgICAgIGxldCBzdHJUcmFuc2xhdGUgPSBcInRyYW5zbGF0ZShcIiArIHRyYW5zWCArIFwiLFwiICsgdHJhbnNZICsgXCIpXCI7XG5cbiAgICAgICAgICAgIHJldHVybiBzdHJUcmFuc2xhdGU7XG4gICAgICAgIH0pXG4gICAgICAgIC5zdHlsZShcImZpbGwtb3BhY2l0eVwiLCBmdW5jdGlvbiAoZDogRGF5SW5mbykge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGQuaXNPdXRPZkRhdGFSYW5nZSB8fFxuICAgICAgICAgICAgICAgIChtb250aEluZm8uZGltTm90SW5Nb250aCAmJiAhZC5pc0luVGhpc01vbnRoKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDAuMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAxLjA7XG4gICAgICAgIH0pXG4gICAgICAgIC5hdHRyKFwiZGF0ZVwiLCBmdW5jdGlvbiAoZDogRGF5SW5mbykge1xuICAgICAgICAgICAgcmV0dXJuIGQuZGF0ZTtcbiAgICAgICAgfSlcbiAgICAgICAgLmF0dHIoXCJ2YWx1ZVwiLCBmdW5jdGlvbiAoZDogRGF5SW5mbykge1xuICAgICAgICAgICAgcmV0dXJuIGQudmFsdWU7XG4gICAgICAgIH0pXG4gICAgICAgIC5hdHRyKFwidmFsdWVUeXBlXCIsIGZ1bmN0aW9uIChkOiBEYXlJbmZvKSB7XG4gICAgICAgICAgICByZXR1cm4gVmFsdWVUeXBlW2RhdGFzZXQudmFsdWVUeXBlXTtcbiAgICAgICAgfSlcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInRyYWNrZXItbW9udGgtbGFiZWxcIilcbiAgICAgICAgLm9uKFwiY2xpY2tcIiwgZnVuY3Rpb24gKGV2ZW50OiBhbnkpIHtcbiAgICAgICAgICAgIC8vIGNsZWFyIGNpcmNsZXNcbiAgICAgICAgICAgIGNsZWFyU2VsZWN0aW9uKGNoYXJ0RWxlbWVudHMsIG1vbnRoSW5mbyk7XG4gICAgICAgICAgICAvLyBzaG93IG5ldyBzZWxlY3RlZCBjaXJjbGVcbiAgICAgICAgICAgIGxldCBkYXRlID0gZDMuc2VsZWN0KHRoaXMpLmF0dHIoXCJkYXRlXCIpO1xuICAgICAgICAgICAgbW9udGhJbmZvLnNlbGVjdGVkRGF0ZSA9IGRhdGU7XG4gICAgICAgICAgICBpZiAobW9udGhJbmZvLnNob3dTZWxlY3RlZFJpbmcpIHtcbiAgICAgICAgICAgICAgICBjaGFydEVsZW1lbnRzLmRhdGFBcmVhXG4gICAgICAgICAgICAgICAgICAgIC5zZWxlY3QoXCIjdHJhY2tlci1zZWxlY3RlZC1jaXJjbGUtXCIgKyBkYXRlKVxuICAgICAgICAgICAgICAgICAgICAuc3R5bGUoXCJzdHJva2VcIiwgbW9udGhJbmZvLnNlbGVjdGVkUmluZ0NvbG9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHNob3cgdmFsdWUgb24gbW9uaXRvclxuICAgICAgICAgICAgaWYgKG1vbnRoSW5mby5zaG93U2VsZWN0ZWRWYWx1ZSkge1xuICAgICAgICAgICAgICAgIGxldCBzdHJWYWx1ZSA9IGQzLnNlbGVjdCh0aGlzKS5hdHRyKFwidmFsdWVcIik7XG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlVHlwZSA9IGQzLnNlbGVjdCh0aGlzKS5hdHRyKFwidmFsdWVUeXBlXCIpO1xuICAgICAgICAgICAgICAgIGxldCB2YWx1ZVRleHQgPSBcIlwiO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZVR5cGUgPT09IFwiVGltZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkYXlTdGFydCA9IHdpbmRvdy5tb21lbnQoXCIwMDowMFwiLCBcIkhIOm1tXCIsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgdGlja1RpbWUgPSBkYXlTdGFydC5hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUZsb2F0KHN0clZhbHVlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwic2Vjb25kc1wiXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlVGV4dCA9IHRpY2tUaW1lLmZvcm1hdChcIkhIOm1tXCIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlVGV4dCA9IHN0clZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjaGFydEVsZW1lbnRzLm1vbml0b3IudGV4dCh2YWx1ZVRleHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuc3R5bGUoXCJjdXJzb3JcIiwgXCJwb2ludGVyXCIpO1xuXG4gICAgLy8gYW5ub3RhdGlvblxuICAgIGlmIChtb2RlID09PSBcImFubm90YXRpb25cIiAmJiBzaG93QW5ub3RhdGlvbikge1xuICAgICAgICBsZXQgZGF5QW5ub3RhdGlvbiA9IGNoYXJ0RWxlbWVudHMuZGF0YUFyZWFcbiAgICAgICAgICAgIC5zZWxlY3RBbGwoXCJkYXlBbm5vdGF0aW9uXCIpXG4gICAgICAgICAgICAuZGF0YShkYXlzSW5Nb250aFZpZXcpXG4gICAgICAgICAgICAuZW50ZXIoKVxuICAgICAgICAgICAgLmFwcGVuZChcInRleHRcIilcbiAgICAgICAgICAgIC50ZXh0KGZ1bmN0aW9uIChkOiBEYXlJbmZvKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGQuYW5ub3RhdGlvbjtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBmdW5jdGlvbiAoZDogRGF5SW5mbykge1xuICAgICAgICAgICAgICAgIGxldCB0cmFuc1ggPSBzY2FsZShkLmNvbCk7XG4gICAgICAgICAgICAgICAgbGV0IHRyYW5zWSA9IHNjYWxlKGQucm93KSArIG1heERheVRleHRTaXplLmhlaWdodCAvIDQ7XG4gICAgICAgICAgICAgICAgaWYgKGQuYW5ub3RhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICB0cmFuc1kgKz0gZG90UmFkaXVzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgc3RyVHJhbnNsYXRlID0gXCJ0cmFuc2xhdGUoXCIgKyB0cmFuc1ggKyBcIixcIiArIHRyYW5zWSArIFwiKVwiO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0clRyYW5zbGF0ZTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci1tb250aC1hbm5vdGF0aW9uXCIpO1xuICAgIH1cblxuICAgIC8vIEV4cGFuZCBhcmVhc1xuICAgIGxldCBzdmdXaWR0aCA9IHBhcnNlRmxvYXQoY2hhcnRFbGVtZW50cy5zdmcuYXR0cihcIndpZHRoXCIpKTtcbiAgICBsZXQgc3ZnSGVpZ2h0ID0gcGFyc2VGbG9hdChjaGFydEVsZW1lbnRzLnN2Zy5hdHRyKFwiaGVpZ2h0XCIpKTtcbiAgICBsZXQgZ3JhcGhBcmVhV2lkdGggPSBwYXJzZUZsb2F0KGNoYXJ0RWxlbWVudHMuZ3JhcGhBcmVhLmF0dHIoXCJ3aWR0aFwiKSk7XG4gICAgbGV0IGdyYXBoQXJlYUhlaWdodCA9IHBhcnNlRmxvYXQoY2hhcnRFbGVtZW50cy5ncmFwaEFyZWEuYXR0cihcImhlaWdodFwiKSk7XG4gICAgbGV0IHRvdGFsSGVpZ2h0ID1cbiAgICAgICAgNyAqIGNlbGxTaXplICsgcGFyc2VGbG9hdChjaGFydEVsZW1lbnRzLmhlYWRlci5hdHRyKFwiaGVpZ2h0XCIpKTtcbiAgICBsZXQgdG90YWxXaWR0aCA9IDcgKiBjZWxsU2l6ZTtcbiAgICBpZiAodG90YWxIZWlnaHQgPiBzdmdIZWlnaHQpIHtcbiAgICAgICAgaGVscGVyLmV4cGFuZEFyZWEoY2hhcnRFbGVtZW50cy5zdmcsIDAsIHRvdGFsSGVpZ2h0IC0gc3ZnSGVpZ2h0KTtcbiAgICB9XG4gICAgaWYgKHRvdGFsV2lkdGggPiBzdmdXaWR0aCkge1xuICAgICAgICBoZWxwZXIuZXhwYW5kQXJlYShjaGFydEVsZW1lbnRzLnN2ZywgdG90YWxXaWR0aCAtIHN2Z1dpZHRoLCAwKTtcbiAgICB9XG4gICAgaWYgKHRvdGFsSGVpZ2h0ID4gZ3JhcGhBcmVhSGVpZ2h0KSB7XG4gICAgICAgIGhlbHBlci5leHBhbmRBcmVhKFxuICAgICAgICAgICAgY2hhcnRFbGVtZW50cy5ncmFwaEFyZWEsXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgdG90YWxIZWlnaHQgLSBncmFwaEFyZWFIZWlnaHRcbiAgICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHRvdGFsV2lkdGggPiBncmFwaEFyZWFXaWR0aCkge1xuICAgICAgICBoZWxwZXIuZXhwYW5kQXJlYShjaGFydEVsZW1lbnRzLnN2ZywgdG90YWxXaWR0aCAtIGdyYXBoQXJlYVdpZHRoLCAwKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHJlZnJlc2goXG4gICAgY2FudmFzOiBIVE1MRWxlbWVudCxcbiAgICBjaGFydEVsZW1lbnRzOiBDaGFydEVsZW1lbnRzLFxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXG4gICAgbW9udGhJbmZvOiBNb250aEluZm8sXG4gICAgY3VyTW9udGhEYXRlOiBNb21lbnRcbikge1xuICAgIC8vIGNvbnNvbGUubG9nKFwicmVmcmVzaFwiKTtcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvKTtcbiAgICBpZiAoIXJlbmRlckluZm8gfHwgIXJlbmRlck1vbnRoKSByZXR1cm47XG5cbiAgICBjaGFydEVsZW1lbnRzID0gY3JlYXRlQXJlYXMoY2hhcnRFbGVtZW50cywgY2FudmFzLCByZW5kZXJJbmZvLCBtb250aEluZm8pO1xuXG4gICAgLy8gcmVuZGVyXG4gICAgcmVuZGVyTW9udGhIZWFkZXIoXG4gICAgICAgIGNhbnZhcyxcbiAgICAgICAgY2hhcnRFbGVtZW50cyxcbiAgICAgICAgcmVuZGVySW5mbyxcbiAgICAgICAgbW9udGhJbmZvLFxuICAgICAgICBjdXJNb250aERhdGVcbiAgICApO1xuXG4gICAgcmVuZGVyTW9udGhEYXlzKGNhbnZhcywgY2hhcnRFbGVtZW50cywgcmVuZGVySW5mbywgbW9udGhJbmZvLCBjdXJNb250aERhdGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyTW9udGgoXG4gICAgY2FudmFzOiBIVE1MRWxlbWVudCxcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvLFxuICAgIG1vbnRoSW5mbzogTW9udGhJbmZvXG4pIHtcbiAgICAvLyBjb25zb2xlLmxvZyhcInJlbmRlck1vbnRoXCIpO1xuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8pO1xuICAgIC8vIGNvbnNvbGUubG9nKG1vbnRoSW5mbyk7XG4gICAgaWYgKCFyZW5kZXJJbmZvIHx8ICFyZW5kZXJNb250aCkgcmV0dXJuO1xuXG4gICAgLy8gZGF0YXNldFxuICAgIGxldCBkYXRhc2V0SWRzID0gbW9udGhJbmZvLmRhdGFzZXQ7XG4gICAgbGV0IG51bUF2YWlsYWJsZURhdGFzZXQgPSAwO1xuICAgIGZvciAobGV0IGRhdGFzZXQgb2YgcmVuZGVySW5mby5kYXRhc2V0cykge1xuICAgICAgICBpZiAoIWRhdGFzZXQuZ2V0UXVlcnkoKS51c2VkQXNYRGF0YXNldCkge1xuICAgICAgICAgICAgbnVtQXZhaWxhYmxlRGF0YXNldCsrO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChudW1BdmFpbGFibGVEYXRhc2V0ID09PSAwKSB7XG4gICAgICAgIHJldHVybiBcIk5vIGF2YWlsYWJsZSBkYXRhc2V0IGZvdW5kXCI7XG4gICAgfVxuICAgIHRvTmV4dERhdGFzZXQocmVuZGVySW5mbywgbW9udGhJbmZvKTtcbiAgICBpZiAobW9udGhJbmZvLnNlbGVjdGVkRGF0YXNldCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gXCJObyBhdmFpbGFibGUgZGF0YXNldCBmb3VuZFwiO1xuICAgIH1cblxuICAgIGxldCBjaGFydEVsZW1lbnRzOiBDaGFydEVsZW1lbnRzID0ge307XG4gICAgY2hhcnRFbGVtZW50cyA9IGNyZWF0ZUFyZWFzKGNoYXJ0RWxlbWVudHMsIGNhbnZhcywgcmVuZGVySW5mbywgbW9udGhJbmZvKTtcblxuICAgIGxldCBtb250aERhdGU6IE1vbWVudCA9IG51bGw7XG4gICAgaWYgKG1vbnRoSW5mby5pbml0TW9udGgpIHtcbiAgICAgICAgbW9udGhEYXRlID0gaGVscGVyLmdldERhdGVCeUR1cmF0aW9uVG9Ub2RheShcbiAgICAgICAgICAgIG1vbnRoSW5mby5pbml0TW9udGgsXG4gICAgICAgICAgICByZW5kZXJJbmZvLmRhdGVGb3JtYXRcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCFtb250aERhdGUpIHtcbiAgICAgICAgICAgIGxldCBpbml0TW9udGggPSB3aW5kb3cubW9tZW50KG1vbnRoSW5mby5pbml0TW9udGgsIFwiWVlZWS1NTVwiLCB0cnVlKTtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGluaXRNb250aCk7XG4gICAgICAgICAgICBpZiAoaW5pdE1vbnRoLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgICAgIG1vbnRoRGF0ZSA9IGluaXRNb250aDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiSW52YWxpZCBpbml0TW9udGhcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIG1vbnRoRGF0ZSA9IHJlbmRlckluZm8uZGF0YXNldHMuZ2V0RGF0ZXMoKS5sYXN0KCk7XG4gICAgfVxuICAgIGlmICghbW9udGhEYXRlKSByZXR1cm47XG5cbiAgICByZW5kZXJNb250aEhlYWRlcihjYW52YXMsIGNoYXJ0RWxlbWVudHMsIHJlbmRlckluZm8sIG1vbnRoSW5mbywgbW9udGhEYXRlKTtcblxuICAgIHJlbmRlck1vbnRoRGF5cyhjYW52YXMsIGNoYXJ0RWxlbWVudHMsIHJlbmRlckluZm8sIG1vbnRoSW5mbywgbW9udGhEYXRlKTtcblxuICAgIHNldENoYXJ0U2NhbGUoY2FudmFzLCBjaGFydEVsZW1lbnRzLCByZW5kZXJJbmZvKTtcbn1cbiIsImltcG9ydCB7IE1vbWVudCB9IGZyb20gXCJtb21lbnRcIjtcbmltcG9ydCB7XG4gICAgRGF0YXNldHMsXG4gICAgRGF0YVBvaW50LFxuICAgIFJlbmRlckluZm8sXG4gICAgTW9udGhJbmZvLFxuICAgIEhlYXRtYXBJbmZvLFxuICAgIERhdGFzZXQsXG4gICAgU2l6ZSxcbiAgICBUcmFuc2Zvcm0sXG4gICAgQ2hhcnRFbGVtZW50cyxcbiAgICBHcmFwaFR5cGUsXG4gICAgVmFsdWVUeXBlLFxufSBmcm9tIFwiLi9kYXRhXCI7XG5pbXBvcnQgKiBhcyBoZWxwZXIgZnJvbSBcIi4vaGVscGVyXCI7XG5pbXBvcnQgKiBhcyBkMyBmcm9tIFwiZDNcIjtcblxuaW50ZXJmYWNlIERheUluZm8ge1xuICAgIGRhdGU6IHN0cmluZztcbiAgICB2YWx1ZTogbnVtYmVyO1xuICAgIHNjYWxlZFZhbHVlOiBudW1iZXI7XG4gICAgcm93OiBudW1iZXI7XG4gICAgY29sOiBudW1iZXI7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUFyZWFzKFxuICAgIGNoYXJ0RWxlbWVudHM6IENoYXJ0RWxlbWVudHMsXG4gICAgY2FudmFzOiBIVE1MRWxlbWVudCxcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvLFxuICAgIGhlYXRtYXBJbmZvOiBIZWF0bWFwSW5mb1xuKTogQ2hhcnRFbGVtZW50cyB7XG4gICAgLy8gY2xlYW4gYXJlYXNcbiAgICBkMy5zZWxlY3QoY2FudmFzKS5zZWxlY3QoXCIjc3ZnXCIpLnJlbW92ZSgpO1xuICAgIHZhciBwcm9wcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGNoYXJ0RWxlbWVudHMpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgLy8gZDMuc2VsZWN0KGNoYXJ0RWxlbWVudHNbcHJvcHNbaV1dKS5yZW1vdmUoKTtcbiAgICAgICAgZGVsZXRlIGNoYXJ0RWxlbWVudHNbcHJvcHNbaV1dO1xuICAgIH1cbiAgICAvLyBjb25zb2xlLmxvZyhjaGFydEVsZW1lbnRzKTtcblxuICAgIC8vIHdob2xlIGFyZWEgZm9yIHBsb3R0aW5nLCBpbmNsdWRlcyBtYXJnaW5zXG4gICAgbGV0IHN2ZyA9IGQzXG4gICAgICAgIC5zZWxlY3QoY2FudmFzKVxuICAgICAgICAuYXBwZW5kKFwic3ZnXCIpXG4gICAgICAgIC5hdHRyKFwiaWRcIiwgXCJzdmdcIilcbiAgICAgICAgLmF0dHIoXG4gICAgICAgICAgICBcIndpZHRoXCIsXG4gICAgICAgICAgICByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS53aWR0aCArXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5tYXJnaW4ubGVmdCArXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5tYXJnaW4ucmlnaHRcbiAgICAgICAgKVxuICAgICAgICAuYXR0cihcbiAgICAgICAgICAgIFwiaGVpZ2h0XCIsXG4gICAgICAgICAgICByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS5oZWlnaHQgK1xuICAgICAgICAgICAgICAgIHJlbmRlckluZm8ubWFyZ2luLnRvcCArXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5tYXJnaW4uYm90dG9tXG4gICAgICAgICk7XG4gICAgY2hhcnRFbGVtZW50c1tcInN2Z1wiXSA9IHN2ZztcblxuICAgIC8vIGdyYXBoQXJlYSwgaW5jbHVkZXMgY2hhcnRBcmVhLCB0aXRsZSwgbGVnZW5kXG4gICAgbGV0IGdyYXBoQXJlYSA9IHN2Z1xuICAgICAgICAuYXBwZW5kKFwiZ1wiKVxuICAgICAgICAuYXR0cihcImlkXCIsIFwiZ3JhcGhBcmVhXCIpXG4gICAgICAgIC5hdHRyKFxuICAgICAgICAgICAgXCJ0cmFuc2Zvcm1cIixcbiAgICAgICAgICAgIFwidHJhbnNsYXRlKFwiICtcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLm1hcmdpbi5sZWZ0ICtcbiAgICAgICAgICAgICAgICBcIixcIiArXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5tYXJnaW4udG9wICtcbiAgICAgICAgICAgICAgICBcIilcIlxuICAgICAgICApXG4gICAgICAgIC5hdHRyKFwid2lkdGhcIiwgcmVuZGVySW5mby5kYXRhQXJlYVNpemUud2lkdGggKyByZW5kZXJJbmZvLm1hcmdpbi5yaWdodClcbiAgICAgICAgLmF0dHIoXG4gICAgICAgICAgICBcImhlaWdodFwiLFxuICAgICAgICAgICAgcmVuZGVySW5mby5kYXRhQXJlYVNpemUuaGVpZ2h0ICsgcmVuZGVySW5mby5tYXJnaW4uYm90dG9tXG4gICAgICAgICk7XG4gICAgY2hhcnRFbGVtZW50c1tcImdyYXBoQXJlYVwiXSA9IGdyYXBoQXJlYTtcblxuICAgIC8vIGRhdGFBcmVhLCB1bmRlciBncmFwaEFyZWEsIGluY2x1ZGVzIHBvaW50cywgbGluZXMsIHhBeGlzLCB5QXhpc1xuICAgIGxldCBkYXRhQXJlYSA9IGdyYXBoQXJlYVxuICAgICAgICAuYXBwZW5kKFwiZ1wiKVxuICAgICAgICAuYXR0cihcImlkXCIsIFwiZGF0YUFyZWFcIilcbiAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS53aWR0aClcbiAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgcmVuZGVySW5mby5kYXRhQXJlYVNpemUuaGVpZ2h0KTtcbiAgICBjaGFydEVsZW1lbnRzW1wiZGF0YUFyZWFcIl0gPSBkYXRhQXJlYTtcblxuICAgIHJldHVybiBjaGFydEVsZW1lbnRzO1xufVxuXG5mdW5jdGlvbiByZW5kZXJIZWF0bWFwSGVhZGVyKFxuICAgIGNhbnZhczogSFRNTEVsZW1lbnQsXG4gICAgY2hhcnRFbGVtZW50czogQ2hhcnRFbGVtZW50cyxcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvLFxuICAgIGhlYXRtYXBJbmZvOiBIZWF0bWFwSW5mbyxcbiAgICBkYXRhc2V0OiBEYXRhc2V0XG4pIHtcbiAgICAvLyBjb25zb2xlLmxvZyhcInJlbmRlck1vbnRoSGVhZGVyXCIpXG5cbiAgICBpZiAoIXJlbmRlckluZm8gfHwgIWhlYXRtYXBJbmZvKSByZXR1cm47XG5cbn1cblxuZnVuY3Rpb24gcmVuZGVySGVhdG1hcERheXMoXG4gICAgY2FudmFzOiBIVE1MRWxlbWVudCxcbiAgICBjaGFydEVsZW1lbnRzOiBDaGFydEVsZW1lbnRzLFxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXG4gICAgaGVhdG1hcEluZm86IEhlYXRtYXBJbmZvLFxuICAgIGRhdGFzZXQ6IERhdGFzZXQsXG4pIHtcbiAgICAvLyBjb25zb2xlLmxvZyhcInJlbmRlckhlYXRtYXBEYXlzXCIpO1xuXG4gICAgaWYgKCFyZW5kZXJJbmZvIHx8ICFoZWF0bWFwSW5mbykgcmV0dXJuO1xuXG4gICAgbGV0IGNlbGxTaXplID0gMjA7XG4gICAgbGV0IGRvdFJhZGl1cyA9IGNlbGxTaXplIC8gMi4wICogMC42O1xuXG4gICAgLy8gR2V0IG1pbiBhbmQgbWF4LCBudWxsIHZhbHVlcyB3aWxsIGJlIHRyZWF0ZWQgYXMgemVybyBoZXJlXG4gICAgbGV0IHlNaW4gPSBkMy5taW4oZGF0YXNldC5nZXRWYWx1ZXMoKSk7XG4gICAgaWYgKGhlYXRtYXBJbmZvLnlNaW4gIT09IG51bGwpIHtcbiAgICAgICAgeU1pbiA9IGhlYXRtYXBJbmZvLnlNaW47XG4gICAgfVxuICAgIGxldCB5TWF4ID0gZDMubWF4KGRhdGFzZXQuZ2V0VmFsdWVzKCkpO1xuICAgIGlmIChoZWF0bWFwSW5mby55TWF4ICE9PSBudWxsKSB7XG4gICAgICAgIHlNYXggPSBoZWF0bWFwSW5mby55TWF4O1xuICAgIH1cbiAgICAvLyBjb25zb2xlLmxvZyhgeU1pbjoke3lNaW59LCB5TWF4OiR7eU1heH1gKTtcblxuICAgIC8vIFByZXBhcmUgZGF0YSBmb3IgZ3JhcGhcbiAgICBsZXQgZGF5c0luSGVhdG1hcFZpZXc6IEFycmF5PERheUluZm8+ID0gW107XG4gICAgY29uc3QgZGF0YVN0YXJ0RGF0ZSA9IGRhdGFzZXQuZ2V0U3RhcnREYXRlKCkuY2xvbmUoKTtcbiAgICBsZXQgc3RhcnREYXRlID0gZGF0YVN0YXJ0RGF0ZVxuICAgICAgICAuY2xvbmUoKVxuICAgICAgICAuc3VidHJhY3QoZGF0YVN0YXJ0RGF0ZS5kYXkoKSwgXCJkYXlzXCIpO1xuICAgIGlmIChoZWF0bWFwSW5mby5zdGFydFdlZWtPbi50b0xvd2VyQ2FzZSgpID09PSBcIm1vblwiKSB7XG4gICAgICAgIHN0YXJ0RGF0ZSA9IHN0YXJ0RGF0ZS5hZGQoMSwgXCJkYXlzXCIpO1xuICAgIH1cbiAgICBjb25zdCBkYXRhRW5kRGF0ZSA9IGRhdGFzZXQuZ2V0RW5kRGF0ZSgpLmNsb25lKCk7XG4gICAgbGV0IGVuZERhdGUgPSBkYXRhRW5kRGF0ZS5jbG9uZSgpLmFkZCg3IC0gZGF0YUVuZERhdGUuZGF5KCkgLSAxLCBcImRheXNcIik7XG4gICAgaWYgKGhlYXRtYXBJbmZvLnN0YXJ0V2Vla09uLnRvTG93ZXJDYXNlKCkgPT09IFwibW9uXCIpIHtcbiAgICAgICAgZW5kRGF0ZSA9IGVuZERhdGUuYWRkKDEsIFwiZGF5c1wiKTtcbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2coc3RhcnREYXRlLmZvcm1hdChcIllZWVktTU0tRERcIikpO1xuICAgIC8vIGNvbnNvbGUubG9nKGVuZERhdGUuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKSk7XG5cbiAgICBsZXQgaW5kQ29sID0gMDtcbiAgICBsZXQgaW5kUm93ID0gMDtcbiAgICBsZXQgaW5kID0gMDtcbiAgICBmb3IgKFxuICAgICAgICBsZXQgY3VyRGF0ZSA9IHN0YXJ0RGF0ZS5jbG9uZSgpO1xuICAgICAgICBjdXJEYXRlIDw9IGVuZERhdGU7XG4gICAgICAgIGN1ckRhdGUuYWRkKDEsIFwiZGF5c1wiKVxuICAgICkge1xuICAgICAgICBpZiAoaGVhdG1hcEluZm8uc3RhcnRXZWVrT24udG9Mb3dlckNhc2UoKSA9PT0gXCJtb25cIikge1xuICAgICAgICAgICAgaW5kQ29sID0gY3VyRGF0ZS5kYXkoKSAtIDE7XG4gICAgICAgICAgICBpZiAoaW5kQ29sIDwgMCkge1xuICAgICAgICAgICAgICAgIGluZENvbCA9IDY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpbmRSb3cgPSBNYXRoLmZsb29yKGluZCAvIDcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW5kQ29sID0gY3VyRGF0ZS5kYXkoKTsgLy8gMH42XG4gICAgICAgICAgICBpbmRSb3cgPSBNYXRoLmZsb29yKGluZCAvIDcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY3VyVmFsdWUgYW5kIHNjYWxlZFZhbHVlXG4gICAgICAgIGxldCBjdXJWYWx1ZSA9IGRhdGFzZXQuZ2V0VmFsdWUoY3VyRGF0ZSk7XG4gICAgICAgIGxldCBzY2FsZWRWYWx1ZSA9IDA7XG4gICAgICAgIGlmIChOdW1iZXIuaXNOdW1iZXIoeU1heCkgJiYgTnVtYmVyLmlzTnVtYmVyKHlNaW4pICYmIHlNYXggLSB5TWluID4gMCkge1xuICAgICAgICAgICAgc2NhbGVkVmFsdWUgPSAoY3VyVmFsdWUgLSB5TWluKSAvICh5TWF4IC0geU1pbik7XG4gICAgICAgIH1cblxuICAgICAgICBkYXlzSW5IZWF0bWFwVmlldy5wdXNoKHtcbiAgICAgICAgICAgIGRhdGU6IGhlbHBlci5kYXRlVG9TdHIoY3VyRGF0ZSwgcmVuZGVySW5mby5kYXRlRm9ybWF0KSxcbiAgICAgICAgICAgIHZhbHVlOiBjdXJWYWx1ZSxcbiAgICAgICAgICAgIHNjYWxlZFZhbHVlOiBzY2FsZWRWYWx1ZSxcbiAgICAgICAgICAgIHJvdzogaW5kUm93LFxuICAgICAgICAgICAgY29sOiBpbmRDb2wsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGluZCsrO1xuICAgIH1cbiAgICAvLyBjb25zb2xlLmxvZyhkYXlzSW5IZWF0bWFwVmlldyk7XG5cbiAgICAvLyBzY2FsZVxuICAgIGxldCB0b3RhbERheUJsb2NrV2lkdGggPSAoaW5kQ29sICsgMSkgKiBjZWxsU2l6ZTtcbiAgICBsZXQgdG90YWxCbG9ja0hlaWdodCA9IChpbmRSb3cgKyAxKSAqIGNlbGxTaXplO1xuICAgIGxldCBzY2FsZSA9IGQzXG4gICAgICAgIC5zY2FsZUxpbmVhcigpXG4gICAgICAgIC5kb21haW4oWy0wLjUsIDYuNV0pXG4gICAgICAgIC5yYW5nZShbMCwgdG90YWxEYXlCbG9ja1dpZHRoXSk7XG5cbiAgICAvLyBjaXJjbGVzXG4gICAgbGV0IGhlYXRtYXBDb2xvciA9IFwiIzY5YjNhMlwiO1xuICAgIGlmIChoZWF0bWFwSW5mby5jb2xvcikge1xuICAgICAgICBoZWF0bWFwQ29sb3IgPSBoZWF0bWFwSW5mby5jb2xvcjtcbiAgICB9XG5cbiAgICAvLyBkYXlzLCBzaG93biBhcyBkb3RzIG9yIHNxdWFyZXNcbiAgICBsZXQgZGF5cyA9IGNoYXJ0RWxlbWVudHMuZGF0YUFyZWFcbiAgICAgICAgLnNlbGVjdEFsbChcImRvdFwiKVxuICAgICAgICAuZGF0YShkYXlzSW5IZWF0bWFwVmlldylcbiAgICAgICAgLmVudGVyKClcbiAgICAgICAgLmFwcGVuZChcImNpcmNsZVwiKVxuICAgICAgICAuYXR0cihcInJcIiwgZG90UmFkaXVzKVxuICAgICAgICAuYXR0cihcImN4XCIsIGZ1bmN0aW9uIChkOiBEYXlJbmZvKSB7XG4gICAgICAgICAgICByZXR1cm4gc2NhbGUoZC5jb2wpO1xuICAgICAgICB9KVxuICAgICAgICAuYXR0cihcImN5XCIsIGZ1bmN0aW9uIChkOiBEYXlJbmZvKSB7XG4gICAgICAgICAgICByZXR1cm4gc2NhbGUoZC5yb3cpO1xuICAgICAgICB9KVxuICAgICAgICAuc3R5bGUoXCJmaWxsXCIsIGZ1bmN0aW9uIChkOiBEYXlJbmZvKSB7XG4gICAgICAgICAgICByZXR1cm4gZDMuaW50ZXJwb2xhdGVMYWIoXG4gICAgICAgICAgICAgICAgICAgIFwid2hpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgaGVhdG1hcENvbG9yXG4gICAgICAgICAgICAgICAgKShkLnNjYWxlZFZhbHVlKTtcbiAgICAgICAgfSlcbiAgICAgICAgLnN0eWxlKFwiY3Vyc29yXCIsIFwiZGVmYXVsdFwiKTtcblxuICAgIC8vIEV4cGFuZCBhcmVhc1xuICAgIGxldCBzdmdXaWR0aCA9IHBhcnNlRmxvYXQoY2hhcnRFbGVtZW50cy5zdmcuYXR0cihcIndpZHRoXCIpKTtcbiAgICBsZXQgc3ZnSGVpZ2h0ID0gcGFyc2VGbG9hdChjaGFydEVsZW1lbnRzLnN2Zy5hdHRyKFwiaGVpZ2h0XCIpKTtcbiAgICBsZXQgZ3JhcGhBcmVhV2lkdGggPSBwYXJzZUZsb2F0KGNoYXJ0RWxlbWVudHMuZ3JhcGhBcmVhLmF0dHIoXCJ3aWR0aFwiKSk7XG4gICAgbGV0IGdyYXBoQXJlYUhlaWdodCA9IHBhcnNlRmxvYXQoY2hhcnRFbGVtZW50cy5ncmFwaEFyZWEuYXR0cihcImhlaWdodFwiKSk7XG4gICAgbGV0IHRvdGFsSGVpZ2h0ID1cbiAgICAgICAgKGluZFJvdyArIDIpICogY2VsbFNpemU7Ly8gKyBwYXJzZUZsb2F0KGNoYXJ0RWxlbWVudHMuaGVhZGVyLmF0dHIoXCJoZWlnaHRcIikpO1xuICAgIGxldCB0b3RhbFdpZHRoID0gKGluZENvbCArIDEpICogY2VsbFNpemU7XG4gICAgaWYgKHRvdGFsSGVpZ2h0ID4gc3ZnSGVpZ2h0KSB7XG4gICAgICAgIGhlbHBlci5leHBhbmRBcmVhKGNoYXJ0RWxlbWVudHMuc3ZnLCAwLCB0b3RhbEhlaWdodCAtIHN2Z0hlaWdodCk7XG4gICAgfVxuICAgIGlmICh0b3RhbFdpZHRoID4gc3ZnV2lkdGgpIHtcbiAgICAgICAgaGVscGVyLmV4cGFuZEFyZWEoY2hhcnRFbGVtZW50cy5zdmcsIHRvdGFsV2lkdGggLSBzdmdXaWR0aCwgMCk7XG4gICAgfVxuICAgIGlmICh0b3RhbEhlaWdodCA+IGdyYXBoQXJlYUhlaWdodCkge1xuICAgICAgICBoZWxwZXIuZXhwYW5kQXJlYShcbiAgICAgICAgICAgIGNoYXJ0RWxlbWVudHMuZ3JhcGhBcmVhLFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIHRvdGFsSGVpZ2h0IC0gZ3JhcGhBcmVhSGVpZ2h0XG4gICAgICAgICk7XG4gICAgfVxuICAgIGlmICh0b3RhbFdpZHRoID4gZ3JhcGhBcmVhV2lkdGgpIHtcbiAgICAgICAgaGVscGVyLmV4cGFuZEFyZWEoY2hhcnRFbGVtZW50cy5zdmcsIHRvdGFsV2lkdGggLSBncmFwaEFyZWFXaWR0aCwgMCk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVySGVhdG1hcChcbiAgICBjYW52YXM6IEhUTUxFbGVtZW50LFxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXG4gICAgaGVhdG1hcEluZm86IEhlYXRtYXBJbmZvXG4pIHtcbiAgICAvLyBjb25zb2xlLmxvZyhcInJlbmRlckhlYXRtYXBcIik7XG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mbyk7XG4gICAgaWYgKCFyZW5kZXJJbmZvIHx8ICFyZW5kZXJIZWF0bWFwKSByZXR1cm47XG5cbiAgICByZXR1cm4gXCJVbmRlciBjb25zdHJ1Y3Rpb25cIjtcblxuICAgIGxldCBjaGFydEVsZW1lbnRzOiBDaGFydEVsZW1lbnRzID0ge307XG4gICAgY2hhcnRFbGVtZW50cyA9IGNyZWF0ZUFyZWFzKGNoYXJ0RWxlbWVudHMsIGNhbnZhcywgcmVuZGVySW5mbywgaGVhdG1hcEluZm8pO1xuXG4gICAgbGV0IHRvZGF5ID0gd2luZG93Lm1vbWVudCgpO1xuICAgIGxldCBsYXN0RGF0YU1vbnRoRGF0ZSA9IHJlbmRlckluZm8uZGF0YXNldHMuZ2V0RGF0ZXMoKS5sYXN0KCk7XG5cbiAgICBsZXQgZGF0YXNldElkID0gcGFyc2VGbG9hdChoZWF0bWFwSW5mby5kYXRhc2V0KTtcbiAgICBsZXQgZGF0YXNldCA9IHJlbmRlckluZm8uZGF0YXNldHMuZ2V0RGF0YXNldEJ5SWQoZGF0YXNldElkKTtcblxuICAgIHJlbmRlckhlYXRtYXBIZWFkZXIoXG4gICAgICAgIGNhbnZhcyxcbiAgICAgICAgY2hhcnRFbGVtZW50cyxcbiAgICAgICAgcmVuZGVySW5mbyxcbiAgICAgICAgaGVhdG1hcEluZm8sXG4gICAgICAgIGRhdGFzZXRcbiAgICApO1xuXG4gICAgcmVuZGVySGVhdG1hcERheXMoXG4gICAgICAgIGNhbnZhcyxcbiAgICAgICAgY2hhcnRFbGVtZW50cyxcbiAgICAgICAgcmVuZGVySW5mbyxcbiAgICAgICAgaGVhdG1hcEluZm8sXG4gICAgICAgIGRhdGFzZXRcbiAgICApO1xufVxuIiwiaW1wb3J0IHtcbiAgICBEYXRhc2V0cyxcbiAgICBEYXRhUG9pbnQsXG4gICAgUmVuZGVySW5mbyxcbiAgICBCdWxsZXRJbmZvLFxuICAgIERhdGFzZXQsXG4gICAgU2l6ZSxcbiAgICBUcmFuc2Zvcm0sXG4gICAgQ2hhcnRFbGVtZW50cyxcbiAgICBHcmFwaFR5cGUsXG4gICAgVmFsdWVUeXBlLFxufSBmcm9tIFwiLi9kYXRhXCI7XG5pbXBvcnQgKiBhcyBoZWxwZXIgZnJvbSBcIi4vaGVscGVyXCI7XG5pbXBvcnQgKiBhcyBkMyBmcm9tIFwiZDNcIjtcbmltcG9ydCAqIGFzIGV4cHIgZnJvbSBcIi4vZXhwclwiO1xuXG5mdW5jdGlvbiBjcmVhdGVBcmVhcyhcbiAgICBjYW52YXM6IEhUTUxFbGVtZW50LFxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXG4gICAgYnVsbGV0SW5mbzogQnVsbGV0SW5mb1xuKTogQ2hhcnRFbGVtZW50cyB7XG4gICAgbGV0IGNoYXJ0RWxlbWVudHM6IENoYXJ0RWxlbWVudHMgPSB7fTtcbiAgICAvLyB3aG9sZSBhcmVhIGZvciBwbG90dGluZywgaW5jbHVkZXMgbWFyZ2luc1xuXG4gICAgaWYgKCFyZW5kZXJJbmZvIHx8ICFidWxsZXRJbmZvKSByZXR1cm47XG5cbiAgICBsZXQgc3ZnID0gZDNcbiAgICAgICAgLnNlbGVjdChjYW52YXMpXG4gICAgICAgIC5hcHBlbmQoXCJzdmdcIilcbiAgICAgICAgLmF0dHIoXCJpZFwiLCBcInN2Z1wiKVxuICAgICAgICAuYXR0cihcbiAgICAgICAgICAgIFwid2lkdGhcIixcbiAgICAgICAgICAgIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoICtcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLm1hcmdpbi5sZWZ0ICtcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLm1hcmdpbi5yaWdodFxuICAgICAgICApXG4gICAgICAgIC5hdHRyKFxuICAgICAgICAgICAgXCJoZWlnaHRcIixcbiAgICAgICAgICAgIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLmhlaWdodCArXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5tYXJnaW4udG9wICtcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLm1hcmdpbi5ib3R0b21cbiAgICAgICAgKTtcbiAgICBjaGFydEVsZW1lbnRzW1wic3ZnXCJdID0gc3ZnO1xuXG4gICAgLy8gZ3JhcGhBcmVhLCBpbmNsdWRlcyBjaGFydEFyZWEsIHRpdGxlLCBsZWdlbmRcbiAgICBsZXQgZ3JhcGhBcmVhID0gc3ZnXG4gICAgICAgIC5hcHBlbmQoXCJnXCIpXG4gICAgICAgIC5hdHRyKFwiaWRcIiwgXCJncmFwaEFyZWFcIilcbiAgICAgICAgLmF0dHIoXG4gICAgICAgICAgICBcInRyYW5zZm9ybVwiLFxuICAgICAgICAgICAgXCJ0cmFuc2xhdGUoXCIgK1xuICAgICAgICAgICAgICAgIHJlbmRlckluZm8ubWFyZ2luLmxlZnQgK1xuICAgICAgICAgICAgICAgIFwiLFwiICtcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLm1hcmdpbi50b3AgK1xuICAgICAgICAgICAgICAgIFwiKVwiXG4gICAgICAgIClcbiAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS53aWR0aCArIHJlbmRlckluZm8ubWFyZ2luLnJpZ2h0KVxuICAgICAgICAuYXR0cihcbiAgICAgICAgICAgIFwiaGVpZ2h0XCIsXG4gICAgICAgICAgICByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS5oZWlnaHQgKyByZW5kZXJJbmZvLm1hcmdpbi5ib3R0b21cbiAgICAgICAgKTtcbiAgICBjaGFydEVsZW1lbnRzW1wiZ3JhcGhBcmVhXCJdID0gZ3JhcGhBcmVhO1xuXG4gICAgLy8gZGF0YUFyZWEsIHVuZGVyIGdyYXBoQXJlYSwgaW5jbHVkZXMgcG9pbnRzLCBsaW5lcywgeEF4aXMsIHlBeGlzXG4gICAgbGV0IGRhdGFBcmVhID0gZ3JhcGhBcmVhXG4gICAgICAgIC5hcHBlbmQoXCJnXCIpXG4gICAgICAgIC5hdHRyKFwiaWRcIiwgXCJkYXRhQXJlYVwiKVxuICAgICAgICAuYXR0cihcIndpZHRoXCIsIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoKVxuICAgICAgICAuYXR0cihcImhlaWdodFwiLCByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS5oZWlnaHQpO1xuICAgIGNoYXJ0RWxlbWVudHNbXCJkYXRhQXJlYVwiXSA9IGRhdGFBcmVhO1xuXG4gICAgcmV0dXJuIGNoYXJ0RWxlbWVudHM7XG59XG5cbmZ1bmN0aW9uIHNldENoYXJ0U2NhbGUoXG4gICAgX2NhbnZhczogSFRNTEVsZW1lbnQsXG4gICAgY2hhcnRFbGVtZW50czogQ2hhcnRFbGVtZW50cyxcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvXG4pIHtcbiAgICBsZXQgY2FudmFzID0gZDMuc2VsZWN0KF9jYW52YXMpO1xuICAgIGxldCBzdmcgPSBjaGFydEVsZW1lbnRzLnN2ZztcbiAgICBsZXQgc3ZnV2lkdGggPSBwYXJzZUZsb2F0KHN2Zy5hdHRyKFwid2lkdGhcIikpO1xuICAgIGxldCBzdmdIZWlnaHQgPSBwYXJzZUZsb2F0KHN2Zy5hdHRyKFwiaGVpZ2h0XCIpKTtcbiAgICBzdmcuYXR0cihcIndpZHRoXCIsIG51bGwpXG4gICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIG51bGwpXG4gICAgICAgIC5hdHRyKFwidmlld0JveFwiLCBgMCAwICR7c3ZnV2lkdGh9ICR7c3ZnSGVpZ2h0fWApXG4gICAgICAgIC5hdHRyKFwicHJlc2VydmVBc3BlY3RSYXRpb1wiLCBcInhNaWRZTWlkIG1lZXRcIik7XG5cbiAgICBpZiAocmVuZGVySW5mby5maXRQYW5lbFdpZHRoKSB7XG4gICAgICAgIGNhbnZhcy5zdHlsZShcIndpZHRoXCIsIFwiMTAwJVwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjYW52YXMuc3R5bGUoXG4gICAgICAgICAgICBcIndpZHRoXCIsXG4gICAgICAgICAgICAoc3ZnV2lkdGggKiByZW5kZXJJbmZvLmZpeGVkU2NhbGUpLnRvU3RyaW5nKCkgKyBcInB4XCJcbiAgICAgICAgKTtcbiAgICAgICAgY2FudmFzLnN0eWxlKFxuICAgICAgICAgICAgXCJoZWlnaHRcIixcbiAgICAgICAgICAgIChzdmdIZWlnaHQgKiByZW5kZXJJbmZvLmZpeGVkU2NhbGUpLnRvU3RyaW5nKCkgKyBcInB4XCJcbiAgICAgICAgKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHJlbmRlclRpdGxlKFxuICAgIGNoYXJ0RWxlbWVudHM6IENoYXJ0RWxlbWVudHMsXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mbyxcbiAgICBidWxsZXRJbmZvOiBCdWxsZXRJbmZvXG4pIHtcbiAgICAvLyBjb25zb2xlLmxvZyhcInJlbmRlclRpdGxlXCIpO1xuICAgIC8vIHVuZGVyIGdyYXBoQXJlYVxuXG4gICAgaWYgKCFyZW5kZXJJbmZvIHx8ICFidWxsZXRJbmZvKSByZXR1cm47XG5cbiAgICBjb25zdCBzcGFjaW5nID0gNjsgLy8gc3BhY2luZyBiZXR3ZWVuIHRpdGxlIGFuZCBkYXRhQXJlYVxuXG4gICAgaWYgKGJ1bGxldEluZm8udGl0bGUpIHtcbiAgICAgICAgbGV0IHRpdGxlU2l6ZSA9IGhlbHBlci5tZWFzdXJlVGV4dFNpemUoXG4gICAgICAgICAgICBidWxsZXRJbmZvLnRpdGxlLFxuICAgICAgICAgICAgXCJ0cmFja2VyLXRpdGxlLXNtYWxsXCJcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoYnVsbGV0SW5mby5vcmllbnRhdGlvbiA9PT0gXCJob3Jpem9udGFsXCIpIHtcbiAgICAgICAgICAgIGxldCB0aXRsZSA9IGNoYXJ0RWxlbWVudHMuZ3JhcGhBcmVhXG4gICAgICAgICAgICAgICAgLmFwcGVuZChcInRleHRcIilcbiAgICAgICAgICAgICAgICAudGV4dChidWxsZXRJbmZvLnRpdGxlKSAvLyBwaXZvdCBhdCBjZW50ZXJcbiAgICAgICAgICAgICAgICAuYXR0cihcImlkXCIsIFwidGl0bGVcIilcbiAgICAgICAgICAgICAgICAuYXR0cihcInhcIiwgdGl0bGVTaXplLndpZHRoIC8gMi4wKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwieVwiLCByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS5oZWlnaHQgLyAyLjApXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgdGl0bGVTaXplLmhlaWdodCkgLy8gZm9yIGxhdGVyIHVzZVxuICAgICAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLXRpdGxlLXNtYWxsXCIpO1xuICAgICAgICAgICAgY2hhcnRFbGVtZW50c1tcInRpdGxlXCJdID0gdGl0bGU7XG5cbiAgICAgICAgICAgIC8vIEV4cGFuZCBwYXJlbnQgYXJlYXNcbiAgICAgICAgICAgIGhlbHBlci5leHBhbmRBcmVhKGNoYXJ0RWxlbWVudHMuc3ZnLCB0aXRsZVNpemUud2lkdGggKyBzcGFjaW5nLCAwKTtcbiAgICAgICAgICAgIGhlbHBlci5leHBhbmRBcmVhKFxuICAgICAgICAgICAgICAgIGNoYXJ0RWxlbWVudHMuZ3JhcGhBcmVhLFxuICAgICAgICAgICAgICAgIHRpdGxlU2l6ZS53aWR0aCArIHNwYWNpbmcsXG4gICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgLy8gTW92ZSBzaWJsaW5nIGFyZWFzXG4gICAgICAgICAgICBoZWxwZXIubW92ZUFyZWEoXG4gICAgICAgICAgICAgICAgY2hhcnRFbGVtZW50cy5kYXRhQXJlYSxcbiAgICAgICAgICAgICAgICB0aXRsZVNpemUud2lkdGggKyBzcGFjaW5nLFxuICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoYnVsbGV0SW5mby5vcmllbnRhdGlvbiA9PT0gXCJ2ZXJ0aWNhbFwiKSB7XG4gICAgICAgICAgICAvLyBpZiBsYWJlbCB3aWR0aCA+IGRhdGFBcmVhIHdpZHRoXG4gICAgICAgICAgICBsZXQgeE1pZGRsZSA9IHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoIC8gMi4wO1xuICAgICAgICAgICAgaWYgKHRpdGxlU2l6ZS53aWR0aCA+IHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoKSB7XG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJleHBhbmQgYXJlYSBmb3IgdmVydGljYWwgdGl0bGVcIik7XG4gICAgICAgICAgICAgICAgaGVscGVyLmV4cGFuZEFyZWEoXG4gICAgICAgICAgICAgICAgICAgIGNoYXJ0RWxlbWVudHMuc3ZnLFxuICAgICAgICAgICAgICAgICAgICB0aXRsZVNpemUud2lkdGggLSByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS53aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaGVscGVyLmV4cGFuZEFyZWEoXG4gICAgICAgICAgICAgICAgICAgIGNoYXJ0RWxlbWVudHMuZ3JhcGhBcmVhLFxuICAgICAgICAgICAgICAgICAgICB0aXRsZVNpemUud2lkdGggLSByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS53aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBoZWxwZXIubW92ZUFyZWEoXG4gICAgICAgICAgICAgICAgICAgIGNoYXJ0RWxlbWVudHMuZGF0YUFyZWEsXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlU2l6ZS53aWR0aCAvIDIuMCAtIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoIC8gMi4wLFxuICAgICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB4TWlkZGxlID0gdGl0bGVTaXplLndpZHRoIC8gMi4wO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgYXhpc1dpZHRoID0gcGFyc2VGbG9hdChjaGFydEVsZW1lbnRzLmF4aXMuYXR0cihcIndpZHRoXCIpKTtcblxuICAgICAgICAgICAgbGV0IHRpdGxlID0gY2hhcnRFbGVtZW50cy5ncmFwaEFyZWFcbiAgICAgICAgICAgICAgICAuYXBwZW5kKFwidGV4dFwiKVxuICAgICAgICAgICAgICAgIC50ZXh0KGJ1bGxldEluZm8udGl0bGUpIC8vIHBpdm90IGF0IGNlbnRlclxuICAgICAgICAgICAgICAgIC5hdHRyKFwiaWRcIiwgXCJ0aXRsZVwiKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwieFwiLCB4TWlkZGxlICsgYXhpc1dpZHRoKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwieVwiLCB0aXRsZVNpemUuaGVpZ2h0IC8gMi4wKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIHRpdGxlU2l6ZS5oZWlnaHQpIC8vIGZvciBsYXRlciB1c2VcbiAgICAgICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci10aXRsZS1zbWFsbFwiKTtcbiAgICAgICAgICAgIGNoYXJ0RWxlbWVudHNbXCJ0aXRsZVwiXSA9IHRpdGxlO1xuXG4gICAgICAgICAgICAvLyBFeHBhbmQgcGFyZW50IGFyZWFzXG4gICAgICAgICAgICBoZWxwZXIuZXhwYW5kQXJlYShjaGFydEVsZW1lbnRzLnN2ZywgMCwgdGl0bGVTaXplLmhlaWdodCArIHNwYWNpbmcpO1xuICAgICAgICAgICAgaGVscGVyLmV4cGFuZEFyZWEoXG4gICAgICAgICAgICAgICAgY2hhcnRFbGVtZW50cy5ncmFwaEFyZWEsXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICB0aXRsZVNpemUuaGVpZ2h0ICsgc3BhY2luZ1xuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgLy8gTW92ZSBzaWJsaW5nIGFyZWFzXG4gICAgICAgICAgICBoZWxwZXIubW92ZUFyZWEoXG4gICAgICAgICAgICAgICAgY2hhcnRFbGVtZW50cy5kYXRhQXJlYSxcbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgIHRpdGxlU2l6ZS5oZWlnaHQgKyBzcGFjaW5nXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGJ1bGxldEluZm8udmFsdWVVbml0KSB7XG4gICAgICAgIGxldCB1bml0U2l6ZSA9IGhlbHBlci5tZWFzdXJlVGV4dFNpemUoXG4gICAgICAgICAgICBidWxsZXRJbmZvLnZhbHVlVW5pdCxcbiAgICAgICAgICAgIFwidHJhY2tlci10aWNrLWxhYmVsXCJcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoYnVsbGV0SW5mby5vcmllbnRhdGlvbiA9PT0gXCJob3Jpem9udGFsXCIpIHtcbiAgICAgICAgICAgIGxldCB1bml0ID0gY2hhcnRFbGVtZW50cy5kYXRhQXJlYVxuICAgICAgICAgICAgICAgIC5hcHBlbmQoXCJ0ZXh0XCIpXG4gICAgICAgICAgICAgICAgLnRleHQoYnVsbGV0SW5mby52YWx1ZVVuaXQpXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJpZFwiLCBcInVuaXRcIilcbiAgICAgICAgICAgICAgICAuYXR0cihcInhcIiwgLTEgKiAodW5pdFNpemUud2lkdGggKyBzcGFjaW5nKSlcbiAgICAgICAgICAgICAgICAuYXR0cihcInlcIiwgcmVuZGVySW5mby5kYXRhQXJlYVNpemUuaGVpZ2h0ICsgc3BhY2luZylcbiAgICAgICAgICAgICAgICAuYXR0cihcImhlaWdodFwiLCB1bml0U2l6ZS5oZWlnaHQpIC8vIGZvciBsYXRlciB1c2VcbiAgICAgICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci10aWNrLWxhYmVsXCIpOyAvLyBwaXZvdCBhdCBjb3JkZXJcbiAgICAgICAgICAgIGNoYXJ0RWxlbWVudHNbXCJ1bml0XCJdID0gdW5pdDtcbiAgICAgICAgfSBlbHNlIGlmIChidWxsZXRJbmZvLm9yaWVudGF0aW9uID09PSBcInZlcnRpY2FsXCIpIHtcbiAgICAgICAgICAgIGxldCB1bml0ID0gY2hhcnRFbGVtZW50cy5kYXRhQXJlYVxuICAgICAgICAgICAgICAgIC5hcHBlbmQoXCJ0ZXh0XCIpXG4gICAgICAgICAgICAgICAgLnRleHQoYnVsbGV0SW5mby52YWx1ZVVuaXQpXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJpZFwiLCBcInVuaXRcIilcbiAgICAgICAgICAgICAgICAuYXR0cihcbiAgICAgICAgICAgICAgICAgICAgXCJ4XCIsXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoIC8gMiAtIHVuaXRTaXplLndpZHRoIC8gMlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuYXR0cihcInlcIiwgLSh1bml0U2l6ZS5oZWlnaHQgLyAyLjAgKyBzcGFjaW5nKSlcbiAgICAgICAgICAgICAgICAuYXR0cihcImhlaWdodFwiLCB1bml0U2l6ZS5oZWlnaHQpIC8vIGZvciBsYXRlciB1c2VcbiAgICAgICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci10aWNrLWxhYmVsXCIpOyAvLyBwaXZvdCBhdCBjb3JkZXJcbiAgICAgICAgICAgIGNoYXJ0RWxlbWVudHNbXCJ1bml0XCJdID0gdW5pdDtcblxuICAgICAgICAgICAgLy8gRXhwYW5kIHBhcmVudCBhcmVhc1xuICAgICAgICAgICAgaGVscGVyLmV4cGFuZEFyZWEoY2hhcnRFbGVtZW50cy5zdmcsIDAsIHVuaXRTaXplLmhlaWdodCArIHNwYWNpbmcpO1xuICAgICAgICAgICAgaGVscGVyLmV4cGFuZEFyZWEoXG4gICAgICAgICAgICAgICAgY2hhcnRFbGVtZW50cy5ncmFwaEFyZWEsXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICB1bml0U2l6ZS5oZWlnaHQgKyBzcGFjaW5nXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAvLyBNb3ZlIGRhdGFBcmVhIGRvd25cbiAgICAgICAgICAgIGhlbHBlci5tb3ZlQXJlYShcbiAgICAgICAgICAgICAgICBjaGFydEVsZW1lbnRzLmRhdGFBcmVhLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgdW5pdFNpemUuaGVpZ2h0ICsgc3BhY2luZ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8gUmVuZGVyIHRpY2tzLCB0aWNrIGxhYmVsc1xuZnVuY3Rpb24gcmVuZGVyQXhpcyhcbiAgICBjaGFydEVsZW1lbnRzOiBDaGFydEVsZW1lbnRzLFxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXG4gICAgYnVsbGV0SW5mbzogQnVsbGV0SW5mbyxcbiAgICBkYXRhc2V0OiBEYXRhc2V0XG4pIHtcbiAgICAvLyBjb25zb2xlLmxvZyhcInJlbmRlckF4aXNcIik7XG4gICAgLy8gY29uc29sZS5sb2coY2hhcnRFbGVtZW50cyk7XG4gICAgLy8gY29uc29sZS5sb2coZGF0YXNldCk7XG5cbiAgICBpZiAoIXJlbmRlckluZm8gfHwgIWJ1bGxldEluZm8pIHJldHVybjtcblxuICAgIGxldCByYW5nZSA9IGJ1bGxldEluZm8ucmFuZ2U7XG4gICAgbGV0IGxhc3RSYW5nZSA9IHJhbmdlW3JhbmdlLmxlbmd0aCAtIDFdO1xuICAgIGxldCBkb21haW4gPSBbMCwgbGFzdFJhbmdlXTtcblxuICAgIGxldCB0aWNrTGVuZ3RoID0gNjtcbiAgICBsZXQgdmFsdWVVbml0ID0gYnVsbGV0SW5mby52YWx1ZVVuaXQ7XG4gICAgbGV0IHRpY2tGb3JtYXRGbjogYW55ID0gZnVuY3Rpb24gKHZhbHVlOiBhbnkpIHtcbiAgICAgICAgaWYgKHZhbHVlVW5pdCAmJiB2YWx1ZVVuaXQuZW5kc1dpdGgoXCIlXCIpKSB7XG4gICAgICAgICAgICByZXR1cm4gZDMudGlja0Zvcm1hdCgwLCBsYXN0UmFuZ2UsIDcpKHZhbHVlKSArIFwiICVcIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZDMudGlja0Zvcm1hdCgwLCBsYXN0UmFuZ2UsIDcpKHZhbHVlKTtcbiAgICB9O1xuICAgIGxldCBtYXhUaWNrTGFiZWwgPSB0aWNrRm9ybWF0Rm4obGFzdFJhbmdlKTtcbiAgICBsZXQgbWF4VGlja0xhYmVsU2l6ZSA9IGhlbHBlci5tZWFzdXJlVGV4dFNpemUoXG4gICAgICAgIG1heFRpY2tMYWJlbCxcbiAgICAgICAgXCJ0cmFja2VyLXRpY2stbGFiZWxcIlxuICAgICk7XG5cbiAgICBpZiAoYnVsbGV0SW5mby5vcmllbnRhdGlvbiA9PT0gXCJob3Jpem9udGFsXCIpIHtcbiAgICAgICAgbGV0IHNjYWxlID0gZDMuc2NhbGVMaW5lYXIoKTtcbiAgICAgICAgc2NhbGUuZG9tYWluKGRvbWFpbikucmFuZ2UoWzAsIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoXSk7XG4gICAgICAgIGNoYXJ0RWxlbWVudHNbXCJzY2FsZVwiXSA9IHNjYWxlO1xuXG4gICAgICAgIGxldCBheGlzR2VuID0gZDMuYXhpc0JvdHRvbShzY2FsZSk7XG4gICAgICAgIGF4aXNHZW4udGlja0Zvcm1hdCh0aWNrRm9ybWF0Rm4pO1xuICAgICAgICBsZXQgYXhpcyA9IGNoYXJ0RWxlbWVudHMuZGF0YUFyZWFcbiAgICAgICAgICAgIC5hcHBlbmQoXCJnXCIpXG4gICAgICAgICAgICAuYXR0cihcImlkXCIsIFwiYXhpc1wiKVxuICAgICAgICAgICAgLmF0dHIoXG4gICAgICAgICAgICAgICAgXCJ0cmFuc2Zvcm1cIixcbiAgICAgICAgICAgICAgICBcInRyYW5zbGF0ZSgwLFwiICsgcmVuZGVySW5mby5kYXRhQXJlYVNpemUuaGVpZ2h0ICsgXCIpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5jYWxsKGF4aXNHZW4pXG4gICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci1heGlzXCIpO1xuICAgICAgICBjaGFydEVsZW1lbnRzW1wiYXhpc1wiXSA9IGF4aXM7XG5cbiAgICAgICAgbGV0IGF4aXNMaW5lID0gYXhpcy5zZWxlY3RBbGwoXCJwYXRoXCIpLnN0eWxlKFwic3Ryb2tlXCIsIFwibm9uZVwiKTtcblxuICAgICAgICBsZXQgYXhpc1RpY2tzID0gYXhpcy5zZWxlY3RBbGwoXCJsaW5lXCIpO1xuXG4gICAgICAgIGxldCBheGlzVGlja0xhYmVscyA9IGF4aXNcbiAgICAgICAgICAgIC5zZWxlY3RBbGwoXCJ0ZXh0XCIpXG4gICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci10aWNrLWxhYmVsXCIpO1xuXG4gICAgICAgIGF4aXMuYXR0cihcbiAgICAgICAgICAgIFwid2lkdGhcIixcbiAgICAgICAgICAgIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoICsgbWF4VGlja0xhYmVsU2l6ZS53aWR0aFxuICAgICAgICApO1xuICAgICAgICBheGlzLmF0dHIoXCJoZWlnaHRcIiwgdGlja0xlbmd0aCArIG1heFRpY2tMYWJlbFNpemUuaGVpZ2h0KTtcblxuICAgICAgICAvLyBFeHBhbmQgYXJlYXNcbiAgICAgICAgaGVscGVyLmV4cGFuZEFyZWEoXG4gICAgICAgICAgICBjaGFydEVsZW1lbnRzLnN2ZyxcbiAgICAgICAgICAgICttYXhUaWNrTGFiZWxTaXplLndpZHRoLFxuICAgICAgICAgICAgdGlja0xlbmd0aCArIG1heFRpY2tMYWJlbFNpemUuaGVpZ2h0XG4gICAgICAgICk7XG4gICAgICAgIGhlbHBlci5leHBhbmRBcmVhKFxuICAgICAgICAgICAgY2hhcnRFbGVtZW50cy5ncmFwaEFyZWEsXG4gICAgICAgICAgICArbWF4VGlja0xhYmVsU2l6ZS53aWR0aCxcbiAgICAgICAgICAgIHRpY2tMZW5ndGggKyBtYXhUaWNrTGFiZWxTaXplLmhlaWdodFxuICAgICAgICApO1xuICAgIH0gZWxzZSBpZiAoYnVsbGV0SW5mby5vcmllbnRhdGlvbiA9PT0gXCJ2ZXJ0aWNhbFwiKSB7XG4gICAgICAgIGxldCBzY2FsZSA9IGQzLnNjYWxlTGluZWFyKCk7XG4gICAgICAgIHNjYWxlLmRvbWFpbihkb21haW4pLnJhbmdlKFtyZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS5oZWlnaHQsIDBdKTtcbiAgICAgICAgY2hhcnRFbGVtZW50c1tcInNjYWxlXCJdID0gc2NhbGU7XG5cbiAgICAgICAgbGV0IGF4aXNHZW4gPSBkMy5heGlzTGVmdChzY2FsZSk7XG4gICAgICAgIGF4aXNHZW4udGlja0Zvcm1hdCh0aWNrRm9ybWF0Rm4pO1xuICAgICAgICBsZXQgYXhpcyA9IGNoYXJ0RWxlbWVudHMuZGF0YUFyZWFcbiAgICAgICAgICAgIC5hcHBlbmQoXCJnXCIpXG4gICAgICAgICAgICAuYXR0cihcImlkXCIsIFwiYXhpc1wiKVxuICAgICAgICAgICAgLmF0dHIoXCJ4XCIsIDApXG4gICAgICAgICAgICAuYXR0cihcInlcIiwgMClcbiAgICAgICAgICAgIC5jYWxsKGF4aXNHZW4pXG4gICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci1heGlzXCIpO1xuICAgICAgICBjaGFydEVsZW1lbnRzW1wiYXhpc1wiXSA9IGF4aXM7XG5cbiAgICAgICAgbGV0IGF4aXNMaW5lID0gYXhpcy5zZWxlY3RBbGwoXCJwYXRoXCIpLnN0eWxlKFwic3Ryb2tlXCIsIFwibm9uZVwiKTtcblxuICAgICAgICBsZXQgYXhpc1RpY2tzID0gYXhpcy5zZWxlY3RBbGwoXCJsaW5lXCIpO1xuXG4gICAgICAgIGxldCBheGlzVGlja0xhYmVscyA9IGF4aXNcbiAgICAgICAgICAgIC5zZWxlY3RBbGwoXCJ0ZXh0XCIpXG4gICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci10aWNrLWxhYmVsXCIpO1xuXG4gICAgICAgIGF4aXMuYXR0cihcIndpZHRoXCIsIHRpY2tMZW5ndGggKyBtYXhUaWNrTGFiZWxTaXplLndpZHRoKTtcbiAgICAgICAgYXhpcy5hdHRyKFwiaGVpZ2h0XCIsIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoKTtcblxuICAgICAgICAvLyBFeHBhbmQgYXJlYXNcbiAgICAgICAgaGVscGVyLmV4cGFuZEFyZWEoXG4gICAgICAgICAgICBjaGFydEVsZW1lbnRzLnN2ZyxcbiAgICAgICAgICAgIHRpY2tMZW5ndGggKyBtYXhUaWNrTGFiZWxTaXplLndpZHRoLFxuICAgICAgICAgICAgMFxuICAgICAgICApO1xuICAgICAgICBoZWxwZXIuZXhwYW5kQXJlYShcbiAgICAgICAgICAgIGNoYXJ0RWxlbWVudHMuZ3JhcGhBcmVhLFxuICAgICAgICAgICAgdGlja0xlbmd0aCArIG1heFRpY2tMYWJlbFNpemUud2lkdGgsXG4gICAgICAgICAgICAwXG4gICAgICAgICk7XG5cbiAgICAgICAgaGVscGVyLm1vdmVBcmVhKFxuICAgICAgICAgICAgY2hhcnRFbGVtZW50cy5kYXRhQXJlYSxcbiAgICAgICAgICAgIHRpY2tMZW5ndGggKyBtYXhUaWNrTGFiZWxTaXplLndpZHRoLFxuICAgICAgICAgICAgMFxuICAgICAgICApO1xuICAgIH1cbn1cblxuLy8gUmVuZGVyIHF1YW50aXRhdGl2ZSByYW5nZSwgcG9vci9hdmVyYWdlL2dvb2QvLi4uXG5mdW5jdGlvbiByZW5kZXJCYWNrUGFuZWwoXG4gICAgY2hhcnRFbGVtZW50czogQ2hhcnRFbGVtZW50cyxcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvLFxuICAgIGJ1bGxldEluZm86IEJ1bGxldEluZm8sXG4gICAgZGF0YXNldDogRGF0YXNldFxuKSB7XG4gICAgLy8gY29uc29sZS5sb2coXCJyZW5kZXJCYWNrUGFuZWxcIik7XG4gICAgLy8gY29uc29sZS5sb2coZGF0YXNldCk7XG5cbiAgICBpZiAoIXJlbmRlckluZm8gfHwgIWJ1bGxldEluZm8pIHJldHVybjtcblxuICAgIGxldCBzY2FsZSA9IGNoYXJ0RWxlbWVudHMuc2NhbGU7XG5cbiAgICAvLyBQcmVwYXJlIGRhdGFcbiAgICBsZXQgcmFuZ2UgPSBidWxsZXRJbmZvLnJhbmdlO1xuICAgIGxldCByYW5nZUNvbG9yID0gYnVsbGV0SW5mby5yYW5nZUNvbG9yO1xuICAgIGxldCBkYXRhID0gW107XG4gICAgbGV0IGxhc3RCb3VuZCA9IDA7XG4gICAgZm9yIChsZXQgaW5kID0gMDsgaW5kIDwgcmFuZ2UubGVuZ3RoOyBpbmQrKykge1xuICAgICAgICBkYXRhLnB1c2goe1xuICAgICAgICAgICAgc3RhcnQ6IGxhc3RCb3VuZCxcbiAgICAgICAgICAgIGVuZDogcmFuZ2VbaW5kXSxcbiAgICAgICAgICAgIGNvbG9yOiByYW5nZUNvbG9yW2luZF0sXG4gICAgICAgIH0pO1xuICAgICAgICBsYXN0Qm91bmQgPSByYW5nZVtpbmRdO1xuICAgIH1cblxuICAgIGlmIChidWxsZXRJbmZvLm9yaWVudGF0aW9uID09PSBcImhvcml6b250YWxcIikge1xuICAgICAgICBsZXQgcGFuZWwgPSBjaGFydEVsZW1lbnRzLmRhdGFBcmVhXG4gICAgICAgICAgICAuc2VsZWN0QWxsKFwiYmFja1BhbmVsXCIpXG4gICAgICAgICAgICAuZGF0YShkYXRhKVxuICAgICAgICAgICAgLmVudGVyKClcbiAgICAgICAgICAgIC5hcHBlbmQoXCJyZWN0XCIpXG4gICAgICAgICAgICAuYXR0cihcInhcIiwgZnVuY3Rpb24gKGQ6IGFueSwgaTogbnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3Ioc2NhbGUoZC5zdGFydCkpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hdHRyKFwieVwiLCBmdW5jdGlvbiAoZDogYW55KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCBmdW5jdGlvbiAoZDogYW55LCBpOiBudW1iZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5jZWlsKHNjYWxlKGQuZW5kIC0gZC5zdGFydCkpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLmhlaWdodClcbiAgICAgICAgICAgIC5zdHlsZShcImZpbGxcIiwgZnVuY3Rpb24gKGQ6IGFueSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkLmNvbG9yO1xuICAgICAgICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChidWxsZXRJbmZvLm9yaWVudGF0aW9uID09PSBcInZlcnRpY2FsXCIpIHtcbiAgICAgICAgbGV0IHBhbmVsID0gY2hhcnRFbGVtZW50cy5kYXRhQXJlYVxuICAgICAgICAgICAgLnNlbGVjdEFsbChcImJhY2tQYW5lbFwiKVxuICAgICAgICAgICAgLmRhdGEoZGF0YSlcbiAgICAgICAgICAgIC5lbnRlcigpXG4gICAgICAgICAgICAuYXBwZW5kKFwicmVjdFwiKVxuICAgICAgICAgICAgLmF0dHIoXCJ4XCIsIGZ1bmN0aW9uIChkOiBhbnksIGk6IG51bWJlcikge1xuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hdHRyKFwieVwiLCBmdW5jdGlvbiAoZDogYW55KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3Ioc2NhbGUoZC5lbmQpKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuYXR0cihcIndpZHRoXCIsIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoKVxuICAgICAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgZnVuY3Rpb24gKGQ6IGFueSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLmhlaWdodCAtXG4gICAgICAgICAgICAgICAgICAgIE1hdGguZmxvb3Ioc2NhbGUoZC5lbmQgLSBkLnN0YXJ0KSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5zdHlsZShcImZpbGxcIiwgZnVuY3Rpb24gKGQ6IGFueSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkLmNvbG9yO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxufVxuXG4vLyBSZW5kZXIgYmFyIGZvciBhY3R1YWwgdmFsdWVcbmZ1bmN0aW9uIHJlbmRlckJhcihcbiAgICBjaGFydEVsZW1lbnRzOiBDaGFydEVsZW1lbnRzLFxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXG4gICAgYnVsbGV0SW5mbzogQnVsbGV0SW5mbyxcbiAgICBkYXRhc2V0OiBEYXRhc2V0XG4pIHtcbiAgICAvLyBjb25zb2xlLmxvZyhcInJlbmRlckJhclwiKTtcbiAgICAvLyBjb25zb2xlLmxvZyhkYXRhc2V0KTtcbiAgICBsZXQgZXJyb3JNZXNzYWdlID0gXCJcIjtcblxuICAgIGlmICghcmVuZGVySW5mbyB8fCAhYnVsbGV0SW5mbykgcmV0dXJuO1xuXG4gICAgbGV0IHJldEFjdHVhbFZhbHVlID0gZXhwci5yZXNvbHZlVmFsdWUoYnVsbGV0SW5mby52YWx1ZSwgcmVuZGVySW5mbyk7XG4gICAgLy8gY29uc29sZS5sb2cocmV0QWN0dWFsVmFsdWUpO1xuICAgIGlmICh0eXBlb2YgcmV0QWN0dWFsVmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIHJldEFjdHVhbFZhbHVlO1xuICAgIH1cbiAgICBsZXQgYWN0dWFsVmFsdWUgPSByZXRBY3R1YWxWYWx1ZTtcbiAgICBpZiAoTnVtYmVyLmlzTmFOKGFjdHVhbFZhbHVlKSkge1xuICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIkludmFsaWQgaW5wdXQgdmFsdWU6IFwiICsgcmV0QWN0dWFsVmFsdWU7XG4gICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XG4gICAgfVxuICAgIGxldCB2YWx1ZUNvbG9yID0gYnVsbGV0SW5mby52YWx1ZUNvbG9yO1xuXG4gICAgbGV0IHNjYWxlID0gY2hhcnRFbGVtZW50cy5zY2FsZTtcblxuICAgIGlmIChidWxsZXRJbmZvLm9yaWVudGF0aW9uID09PSBcImhvcml6b250YWxcIikge1xuICAgICAgICBsZXQgYmFyV2lkdGggPSByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS5oZWlnaHQgLyAzO1xuICAgICAgICBsZXQgYmFyID0gY2hhcnRFbGVtZW50cy5kYXRhQXJlYVxuICAgICAgICAgICAgLmFwcGVuZChcInJlY3RcIilcbiAgICAgICAgICAgIC5hdHRyKFwieFwiLCBzY2FsZSgwKSlcbiAgICAgICAgICAgIC5hdHRyKFwieVwiLCBiYXJXaWR0aClcbiAgICAgICAgICAgIC5hdHRyKFwid2lkdGhcIiwgTWF0aC5mbG9vcihzY2FsZShhY3R1YWxWYWx1ZSkpKVxuICAgICAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgYmFyV2lkdGgpXG4gICAgICAgICAgICAuc3R5bGUoXCJmaWxsXCIsIHZhbHVlQ29sb3IpO1xuICAgIH0gZWxzZSBpZiAoYnVsbGV0SW5mby5vcmllbnRhdGlvbiA9PT0gXCJ2ZXJ0aWNhbFwiKSB7XG4gICAgICAgIGxldCBiYXJXaWR0aCA9IHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoIC8gMztcbiAgICAgICAgbGV0IGJhciA9IGNoYXJ0RWxlbWVudHMuZGF0YUFyZWFcbiAgICAgICAgICAgIC5hcHBlbmQoXCJyZWN0XCIpXG4gICAgICAgICAgICAuYXR0cihcInhcIiwgYmFyV2lkdGgpXG4gICAgICAgICAgICAuYXR0cihcInlcIiwgTWF0aC5mbG9vcihzY2FsZShhY3R1YWxWYWx1ZSkpKVxuICAgICAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCBiYXJXaWR0aClcbiAgICAgICAgICAgIC5hdHRyKFxuICAgICAgICAgICAgICAgIFwiaGVpZ2h0XCIsXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5kYXRhQXJlYVNpemUuaGVpZ2h0IC0gTWF0aC5mbG9vcihzY2FsZShhY3R1YWxWYWx1ZSkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3R5bGUoXCJmaWxsXCIsIHZhbHVlQ29sb3IpO1xuICAgIH1cbn1cblxuLy8gUmVuZGVyIG1hcmsgbGluZSBmb3IgdGFyZ2V0IHZhbHVlXG5mdW5jdGlvbiByZW5kZXJNYXJrKFxuICAgIGNoYXJ0RWxlbWVudHM6IENoYXJ0RWxlbWVudHMsXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mbyxcbiAgICBidWxsZXRJbmZvOiBCdWxsZXRJbmZvLFxuICAgIGRhdGFzZXQ6IERhdGFzZXRcbikge1xuICAgIC8vIGNvbnNvbGUubG9nKFwicmVuZGVyTWFya1wiKTtcbiAgICAvLyBjb25zb2xlLmxvZyhkYXRhc2V0KTtcblxuICAgIGlmICghcmVuZGVySW5mbyB8fCAhYnVsbGV0SW5mbykgcmV0dXJuO1xuXG4gICAgbGV0IHNob3dNYXJrZXIgPSBidWxsZXRJbmZvLnNob3dNYXJrZXI7XG4gICAgaWYgKCFzaG93TWFya2VyKSByZXR1cm47XG5cbiAgICBsZXQgbWFya2VyVmFsdWUgPSBidWxsZXRJbmZvLm1hcmtlclZhbHVlO1xuICAgIGxldCBtYXJrZXJDb2xvciA9IGJ1bGxldEluZm8ubWFya2VyQ29sb3I7XG5cbiAgICBsZXQgc2NhbGUgPSBjaGFydEVsZW1lbnRzLnNjYWxlO1xuXG4gICAgaWYgKGJ1bGxldEluZm8ub3JpZW50YXRpb24gPT09IFwiaG9yaXpvbnRhbFwiKSB7XG4gICAgICAgIGxldCBtYXJrZXJMZW5ndGggPSAocmVuZGVySW5mby5kYXRhQXJlYVNpemUuaGVpZ2h0ICogMikgLyAzO1xuICAgICAgICBsZXQgbWFya2VyID0gY2hhcnRFbGVtZW50cy5kYXRhQXJlYVxuICAgICAgICAgICAgLmFwcGVuZChcInJlY3RcIilcbiAgICAgICAgICAgIC5hdHRyKFwieFwiLCBzY2FsZShtYXJrZXJWYWx1ZSkgLSAxLjUpXG4gICAgICAgICAgICAuYXR0cihcInlcIiwgbWFya2VyTGVuZ3RoIC8gNClcbiAgICAgICAgICAgIC5hdHRyKFwid2lkdGhcIiwgMylcbiAgICAgICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIG1hcmtlckxlbmd0aClcbiAgICAgICAgICAgIC5zdHlsZShcImZpbGxcIiwgbWFya2VyQ29sb3IpO1xuICAgIH0gZWxzZSBpZiAoYnVsbGV0SW5mby5vcmllbnRhdGlvbiA9PT0gXCJ2ZXJ0aWNhbFwiKSB7XG4gICAgICAgIGxldCBtYXJrZXJMZW5ndGggPSAocmVuZGVySW5mby5kYXRhQXJlYVNpemUud2lkdGggKiAyKSAvIDM7XG4gICAgICAgIGxldCBtYXJrZXIgPSBjaGFydEVsZW1lbnRzLmRhdGFBcmVhXG4gICAgICAgICAgICAuYXBwZW5kKFwicmVjdFwiKVxuICAgICAgICAgICAgLmF0dHIoXCJ4XCIsIG1hcmtlckxlbmd0aCAvIDQpXG4gICAgICAgICAgICAuYXR0cihcInlcIiwgc2NhbGUobWFya2VyVmFsdWUpIC0gMS41KVxuICAgICAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCBtYXJrZXJMZW5ndGgpXG4gICAgICAgICAgICAuYXR0cihcImhlaWdodFwiLCAzKVxuICAgICAgICAgICAgLnN0eWxlKFwiZmlsbFwiLCBtYXJrZXJDb2xvcik7XG4gICAgfVxufVxuXG4vLyBCdWxsZXQgZ3JhcGggaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQnVsbGV0X2dyYXBoXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyQnVsbGV0KFxuICAgIGNhbnZhczogSFRNTEVsZW1lbnQsXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mbyxcbiAgICBidWxsZXRJbmZvOiBCdWxsZXRJbmZvXG4pIHtcbiAgICAvLyBjb25zb2xlLmxvZyhcInJlbmRlckJ1bGxldFwiKTtcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvKTtcbiAgICBpZiAoIXJlbmRlckluZm8gfHwgIWJ1bGxldEluZm8pIHJldHVybjtcblxuICAgIGxldCBkYXRhc2V0SWQgPSBwYXJzZUZsb2F0KGJ1bGxldEluZm8uZGF0YXNldCk7XG4gICAgbGV0IGRhdGFzZXQgPSByZW5kZXJJbmZvLmRhdGFzZXRzLmdldERhdGFzZXRCeUlkKGRhdGFzZXRJZCk7XG5cbiAgICAvLyBTZXQgaW5pdGlhbCBkYXRhQXJlYSBzaXplXG4gICAgaWYgKGJ1bGxldEluZm8ub3JpZW50YXRpb24gPT09IFwiaG9yaXpvbnRhbFwiKSB7XG4gICAgICAgIHJlbmRlckluZm8uZGF0YUFyZWFTaXplID0geyB3aWR0aDogMjUwLCBoZWlnaHQ6IDI0IH07XG4gICAgfSBlbHNlIGlmIChidWxsZXRJbmZvLm9yaWVudGF0aW9uID09PSBcInZlcnRpY2FsXCIpIHtcbiAgICAgICAgcmVuZGVySW5mby5kYXRhQXJlYVNpemUgPSB7IHdpZHRoOiAyNCwgaGVpZ2h0OiAyNTAgfTtcbiAgICB9XG5cbiAgICBsZXQgY2hhcnRFbGVtZW50cyA9IGNyZWF0ZUFyZWFzKGNhbnZhcywgcmVuZGVySW5mbywgYnVsbGV0SW5mbyk7XG5cbiAgICBsZXQgcmV0UmVuZGVyQXhpcyA9IHJlbmRlckF4aXMoXG4gICAgICAgIGNoYXJ0RWxlbWVudHMsXG4gICAgICAgIHJlbmRlckluZm8sXG4gICAgICAgIGJ1bGxldEluZm8sXG4gICAgICAgIGRhdGFzZXRcbiAgICApO1xuICAgIGlmICh0eXBlb2YgcmV0UmVuZGVyQXhpcyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4gcmV0UmVuZGVyQXhpcztcbiAgICB9XG5cbiAgICByZW5kZXJUaXRsZShjaGFydEVsZW1lbnRzLCByZW5kZXJJbmZvLCBidWxsZXRJbmZvKTtcblxuICAgIHJlbmRlckJhY2tQYW5lbChjaGFydEVsZW1lbnRzLCByZW5kZXJJbmZvLCBidWxsZXRJbmZvLCBkYXRhc2V0KTtcblxuICAgIGxldCByZXRSZW5kZXJCYXIgPSByZW5kZXJCYXIoXG4gICAgICAgIGNoYXJ0RWxlbWVudHMsXG4gICAgICAgIHJlbmRlckluZm8sXG4gICAgICAgIGJ1bGxldEluZm8sXG4gICAgICAgIGRhdGFzZXRcbiAgICApO1xuICAgIGlmICh0eXBlb2YgcmV0UmVuZGVyQmFyID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiByZXRSZW5kZXJCYXI7XG4gICAgfVxuXG4gICAgcmVuZGVyTWFyayhjaGFydEVsZW1lbnRzLCByZW5kZXJJbmZvLCBidWxsZXRJbmZvLCBkYXRhc2V0KTtcblxuICAgIHNldENoYXJ0U2NhbGUoY2FudmFzLCBjaGFydEVsZW1lbnRzLCByZW5kZXJJbmZvKTtcbn1cbiIsImltcG9ydCAqIGFzIGQzIGZyb20gXCJkM1wiO1xuaW1wb3J0IHsgTW9tZW50LCBEdXJhdGlvbiB9IGZyb20gXCJtb21lbnRcIjtcbmltcG9ydCB7XG4gICAgRGF0YXNldHMsXG4gICAgRGF0YVBvaW50LFxuICAgIFJlbmRlckluZm8sXG4gICAgRGF0YXNldCxcbiAgICBTaXplLFxuICAgIFRyYW5zZm9ybSxcbiAgICBDaGFydEVsZW1lbnRzLFxuICAgIEdyYXBoVHlwZSxcbiAgICBWYWx1ZVR5cGUsXG4gICAgQ29tbW9uQ2hhcnRJbmZvLFxuICAgIExpbmVJbmZvLFxuICAgIEJhckluZm8sXG4gICAgUGllSW5mbyxcbiAgICBTdW1tYXJ5SW5mbyxcbiAgICBCdWxsZXRJbmZvLFxuICAgIE1vbnRoSW5mbyxcbiAgICBIZWF0bWFwSW5mbyxcbn0gZnJvbSBcIi4vZGF0YVwiO1xuaW1wb3J0ICogYXMgcGllIGZyb20gXCIuL3BpZVwiO1xuaW1wb3J0ICogYXMgc3VtbWFyeSBmcm9tIFwiLi9zdW1tYXJ5XCI7XG5pbXBvcnQgKiBhcyBtb250aCBmcm9tIFwiLi9tb250aFwiO1xuaW1wb3J0ICogYXMgaGVhdG1hcCBmcm9tIFwiLi9oZWF0bWFwXCI7XG5pbXBvcnQgKiBhcyBidWxsZXQgZnJvbSBcIi4vYnVsbGV0XCI7XG5pbXBvcnQgKiBhcyBoZWxwZXIgZnJvbSBcIi4vaGVscGVyXCI7XG5pbXBvcnQgeyBzcHJpbnRmIH0gZnJvbSBcInNwcmludGYtanNcIjtcblxuZnVuY3Rpb24gZ2V0WFRpY2tWYWx1ZXMoXG4gICAgZGF0ZXM6IE1vbWVudFtdLFxuICAgIGludGVydmFsOiBEdXJhdGlvblxuKTogW0FycmF5PERhdGU+LCBkMy5UaW1lSW50ZXJ2YWxdIHtcbiAgICAvLyBUaGUgaW5wdXQgaW50ZXJ2YWwgY291bGQgYmUgbnVsbCxcbiAgICAvLyBnZW5lcmF0ZSB0aWNrIHZhbHVlcyBldmVuIGlmIGludGVydmFsIGlzIG51bGxcblxuICAgIC8vIGNvbnNvbGUubG9nKGludGVydmFsKTtcblxuICAgIGxldCB0aWNrVmFsdWVzOiBBcnJheTxEYXRlPiA9IFtdO1xuICAgIGxldCB0aWNrSW50ZXJ2YWwgPSBudWxsO1xuXG4gICAgLy8geSB2YWx1ZXMgYXJlIHRpbWUgdmFsdWVzXG4gICAgaWYgKGludGVydmFsKSB7XG4gICAgICAgIGxldCBmaXJzdERhdGUgPSBkYXRlc1swXTtcbiAgICAgICAgbGV0IGxhc3REYXRlID0gZGF0ZXNbZGF0ZXMubGVuZ3RoIC0gMV07XG4gICAgICAgIHRpY2tWYWx1ZXMgPSBkMy50aW1lRGF5LnJhbmdlKFxuICAgICAgICAgICAgZmlyc3REYXRlLnRvRGF0ZSgpLFxuICAgICAgICAgICAgbGFzdERhdGUudG9EYXRlKCksXG4gICAgICAgICAgICBpbnRlcnZhbC5hc0RheXMoKVxuICAgICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBkYXlzID0gZGF0ZXMubGVuZ3RoO1xuICAgICAgICBpZiAoZGF5cyA8PSAxNSkge1xuICAgICAgICAgICAgLy8gbnVtYmVyIG9mIHRpY2tzOiAwLTE1XG4gICAgICAgICAgICB0aWNrSW50ZXJ2YWwgPSBkMy50aW1lRGF5O1xuICAgICAgICB9IGVsc2UgaWYgKGRheXMgPD0gNCAqIDE1KSB7XG4gICAgICAgICAgICAvLyBudW1iZXIgb2YgdGlja3M6IDQtMTVcbiAgICAgICAgICAgIHRpY2tJbnRlcnZhbCA9IGQzLnRpbWVEYXkuZXZlcnkoNCk7XG4gICAgICAgIH0gZWxzZSBpZiAoZGF5cyA8PSA3ICogMTUpIHtcbiAgICAgICAgICAgIC8vIG51bWJlciBvZiB0aWNrczogOC0xNVxuICAgICAgICAgICAgdGlja0ludGVydmFsID0gZDMudGltZVdlZWs7XG4gICAgICAgIH0gZWxzZSBpZiAoZGF5cyA8PSAxNSAqIDMwKSB7XG4gICAgICAgICAgICAvLyBudW1iZXIgb2YgdGlja3M6IDQtMTVcbiAgICAgICAgICAgIHRpY2tJbnRlcnZhbCA9IGQzLnRpbWVNb250aDtcbiAgICAgICAgfSBlbHNlIGlmIChkYXlzIDw9IDE1ICogNjApIHtcbiAgICAgICAgICAgIC8vIG51bWJlciBvZiB0aWNrczogOC0xNVxuICAgICAgICAgICAgdGlja0ludGVydmFsID0gZDMudGltZU1vbnRoLmV2ZXJ5KDIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGlja0ludGVydmFsID0gZDMudGltZVllYXI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gW3RpY2tWYWx1ZXMsIHRpY2tJbnRlcnZhbF07XG59XG5cbmZ1bmN0aW9uIGdldFhUaWNrTGFiZWxGb3JtYXQoZGF0ZXM6IE1vbWVudFtdLCBpblRpY2tMYWJlbEZvcm1hdDogc3RyaW5nKSB7XG4gICAgaWYgKGluVGlja0xhYmVsRm9ybWF0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZuVGlja0xhYmVsRm9ybWF0KGRhdGU6IERhdGUpOiBzdHJpbmcge1xuICAgICAgICAgICAgcmV0dXJuIGhlbHBlci5kYXRlVG9TdHIod2luZG93Lm1vbWVudChkYXRlKSwgaW5UaWNrTGFiZWxGb3JtYXQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmblRpY2tMYWJlbEZvcm1hdDtcbiAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgdGlja0xhYmVsRm9ybWF0ID0gbnVsbDtcbiAgICAgICAgbGV0IGRheXMgPSBkYXRlcy5sZW5ndGg7XG5cbiAgICAgICAgaWYgKGRheXMgPD0gMTUpIHtcbiAgICAgICAgICAgIC8vIG51bWJlciBvZiB0aWNrczogMC0xNVxuICAgICAgICAgICAgdGlja0xhYmVsRm9ybWF0ID0gZDMudGltZUZvcm1hdChcIiV5LSVtLSVkXCIpO1xuICAgICAgICB9IGVsc2UgaWYgKGRheXMgPD0gNCAqIDE1KSB7XG4gICAgICAgICAgICAvLyBudW1iZXIgb2YgdGlja3M6IDQtMTVcbiAgICAgICAgICAgIHRpY2tMYWJlbEZvcm1hdCA9IGQzLnRpbWVGb3JtYXQoXCIleS0lbS0lZFwiKTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXlzIDw9IDcgKiAxNSkge1xuICAgICAgICAgICAgLy8gbnVtYmVyIG9mIHRpY2tzOiA4LTE1XG4gICAgICAgICAgICB0aWNrTGFiZWxGb3JtYXQgPSBkMy50aW1lRm9ybWF0KFwiJXktJW0tJWRcIik7XG4gICAgICAgIH0gZWxzZSBpZiAoZGF5cyA8PSAxNSAqIDMwKSB7XG4gICAgICAgICAgICAvLyBudW1iZXIgb2YgdGlja3M6IDQtMTVcbiAgICAgICAgICAgIHRpY2tMYWJlbEZvcm1hdCA9IGQzLnRpbWVGb3JtYXQoXCIleSAlYlwiKTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXlzIDw9IDE1ICogNjApIHtcbiAgICAgICAgICAgIC8vIG51bWJlciBvZiB0aWNrczogOC0xNVxuICAgICAgICAgICAgdGlja0xhYmVsRm9ybWF0ID0gZDMudGltZUZvcm1hdChcIiV5ICViXCIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGlja0xhYmVsRm9ybWF0ID0gZDMudGltZUZvcm1hdChcIiVZXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRpY2tMYWJlbEZvcm1hdDtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGdldFlUaWNrVmFsdWVzKFxuICAgIHlMb3dlcjogbnVtYmVyLFxuICAgIHlVcHBlcjogbnVtYmVyLFxuICAgIGludGVydmFsOiBudW1iZXIgfCBEdXJhdGlvbixcbiAgICBpc1RpbWVWYWx1ZSA9IGZhbHNlXG4pIHtcbiAgICAvLyBUaGUgaW5wdXQgaW50ZXJ2YWwgY291bGQgYmUgbnVsbCxcbiAgICAvLyBnZW5lcmF0ZSB0aWNrIHZhbHVlcyBmb3IgdGltZSB2YWx1ZXMgZXZlbiBpZiBpbnRlcnZhbCBpcyBudWxsXG5cbiAgICAvLyBjb25zb2xlLmxvZyhpbnRlcnZhbCk7XG4gICAgLy8gY29uc29sZS5sb2coaXNUaW1lVmFsdWUpO1xuXG4gICAgY29uc3QgYWJzRXh0ZW50ID0gTWF0aC5hYnMoeVVwcGVyIC0geUxvd2VyKTtcbiAgICBsZXQgdGlja1ZhbHVlczogQXJyYXk8bnVtYmVyPiA9IFtdO1xuXG4gICAgaWYgKCFpc1RpbWVWYWx1ZSkge1xuICAgICAgICAvLyB5IHZhbHVlcyBhcmUgbnVtYmVyc1xuICAgICAgICBpZiAoaW50ZXJ2YWwgJiYgdHlwZW9mIGludGVydmFsID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAvLyAhPT1udWxsICYmICE9PSAwXG4gICAgICAgICAgICB0aWNrVmFsdWVzID0gZDMucmFuZ2UoeUxvd2VyLCB5VXBwZXIsIGludGVydmFsKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHkgdmFsdWVzIGFyZSB0aW1lIHZhbHVlc1xuICAgICAgICBpZiAoaW50ZXJ2YWwgJiYgd2luZG93Lm1vbWVudC5pc0R1cmF0aW9uKGludGVydmFsKSkge1xuICAgICAgICAgICAgbGV0IGludGVydmFsSW5TZWNvbmRzID0gTWF0aC5hYnMoaW50ZXJ2YWwuYXNTZWNvbmRzKCkpO1xuICAgICAgICAgICAgdGlja1ZhbHVlcyA9IGQzLnJhbmdlKHlMb3dlciwgeVVwcGVyLCBpbnRlcnZhbEluU2Vjb25kcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBhdXRvIGludGVydmFsIGZvciB0aW1lIHZhbHVlc1xuICAgICAgICAgICAgaWYgKGFic0V4dGVudCA+IDUgKiA2MCAqIDYwKSB7XG4gICAgICAgICAgICAgICAgLy8gZXh0ZW50IG92ZXIgdGhhbiA1IGhvdXJzXG4gICAgICAgICAgICAgICAgLy8gdGljayBvbiB0aGUgaG91clxuICAgICAgICAgICAgICAgIHlMb3dlciA9IE1hdGguZmxvb3IoeUxvd2VyIC8gMzYwMCkgKiAzNjAwO1xuICAgICAgICAgICAgICAgIHlVcHBlciA9IE1hdGguY2VpbCh5VXBwZXIgLyAzNjAwKSAqIDM2MDA7XG5cbiAgICAgICAgICAgICAgICB0aWNrVmFsdWVzID0gZDMucmFuZ2UoeUxvd2VyLCB5VXBwZXIsIDM2MDApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyB0aWNrIG9uIHRoZSBoYWxmIGhvdXJcbiAgICAgICAgICAgICAgICB5TG93ZXIgPSBNYXRoLmZsb29yKHlMb3dlciAvIDE4MDApICogMTgwMDtcbiAgICAgICAgICAgICAgICB5VXBwZXIgPSBNYXRoLmNlaWwoeVVwcGVyIC8gMTgwMCkgKiAxODAwO1xuXG4gICAgICAgICAgICAgICAgdGlja1ZhbHVlcyA9IGQzLnJhbmdlKHlMb3dlciwgeVVwcGVyLCAxODAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aWNrVmFsdWVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRpY2tWYWx1ZXM7XG59XG5cbmZ1bmN0aW9uIGdldFlUaWNrTGFiZWxGb3JtYXQoXG4gICAgeUxvd2VyOiBudW1iZXIsXG4gICAgeVVwcGVyOiBudW1iZXIsXG4gICAgaW5UaWNrTGFiZWxGb3JtYXQ6IHN0cmluZyxcbiAgICBpc1RpbWVWYWx1ZSA9IGZhbHNlXG4pIHtcbiAgICAvLyByZXR1cm4gYSBmdW5jdGlvbiBjb252ZXJ0IHZhbHVlIHRvIHRpbWUgc3RyaW5nXG5cbiAgICBpZiAoIWlzVGltZVZhbHVlKSB7XG4gICAgICAgIGlmIChpblRpY2tMYWJlbEZvcm1hdCkge1xuICAgICAgICAgICAgZnVuY3Rpb24gdGlja0Zvcm1hdCh2YWx1ZTogbnVtYmVyKTogc3RyaW5nIHtcbiAgICAgICAgICAgICAgICBsZXQgc3RyVmFsdWUgPSBzcHJpbnRmKFwiJVwiICsgaW5UaWNrTGFiZWxGb3JtYXQsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RyVmFsdWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0aWNrRm9ybWF0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkMy50aWNrRm9ybWF0KHlMb3dlciwgeVVwcGVyLCAxMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdmFsdWVzIGluIHNlY29uZHNcbiAgICAgICAgaWYgKGluVGlja0xhYmVsRm9ybWF0KSB7XG4gICAgICAgICAgICBmdW5jdGlvbiBmblRpY2tMYWJlbEZvcm1hdCh2YWx1ZTogbnVtYmVyKTogc3RyaW5nIHtcbiAgICAgICAgICAgICAgICBsZXQgZGF5U3RhcnQgPSB3aW5kb3cubW9tZW50KFwiMDA6MDBcIiwgXCJISDptbVwiLCB0cnVlKTtcbiAgICAgICAgICAgICAgICBsZXQgdGlja1RpbWUgPSBkYXlTdGFydC5hZGQodmFsdWUsIFwic2Vjb25kc1wiKTtcbiAgICAgICAgICAgICAgICBsZXQgZm9ybWF0ID0gdGlja1RpbWUuZm9ybWF0KGluVGlja0xhYmVsRm9ybWF0KTtcblxuICAgICAgICAgICAgICAgIGxldCBkZXZIb3VyID0gKHZhbHVlIC0geUxvd2VyKSAvIDM2MDA7XG4gICAgICAgICAgICAgICAgbGV0IGludGVybGVhdmUgPSBkZXZIb3VyICUgMjtcblxuICAgICAgICAgICAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZm5UaWNrTGFiZWxGb3JtYXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmdW5jdGlvbiBmblRpY2tMYWJlbEZvcm1hdCh2YWx1ZTogbnVtYmVyKTogc3RyaW5nIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhYnNFeHRlbnQgPSBNYXRoLmFicyh5VXBwZXIgLSB5TG93ZXIpO1xuICAgICAgICAgICAgICAgIGxldCBkYXlTdGFydCA9IHdpbmRvdy5tb21lbnQoXCIwMDowMFwiLCBcIkhIOm1tXCIsIHRydWUpO1xuICAgICAgICAgICAgICAgIGxldCB0aWNrVGltZSA9IGRheVN0YXJ0LmFkZCh2YWx1ZSwgXCJzZWNvbmRzXCIpO1xuICAgICAgICAgICAgICAgIGxldCBmb3JtYXQgPSB0aWNrVGltZS5mb3JtYXQoXCJISDptbVwiKTtcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhgeUxvd2VyL3lVcHBlcjogJHt5TG93ZXJ9LyR7eVVwcGVyfWApXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coYHZhbHVlL2V4dGVudC9pbnRlcjoke3ZhbHVlfS8ke2Fic0V4dGVudH0vJHsodmFsdWUteUxvd2VyKS8zNjAwfWApO1xuXG4gICAgICAgICAgICAgICAgLy8gYXV0byBpbnRlcmxlYXZlIGlmIGV4dGVudCBvdmVyIDEyIGhvdXJzXG4gICAgICAgICAgICAgICAgaWYgKGFic0V4dGVudCA+IDEyICogNjAgKiA2MCkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZGV2SG91ciA9ICh2YWx1ZSAtIHlMb3dlcikgLyAzNjAwO1xuICAgICAgICAgICAgICAgICAgICBsZXQgaW50ZXJsZWF2ZSA9IGRldkhvdXIgJSAyO1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPCB5TG93ZXIgfHwgdmFsdWUgPiB5VXBwZXIgfHwgaW50ZXJsZWF2ZSA8IDEuMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0ID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBmblRpY2tMYWJlbEZvcm1hdDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyKGNhbnZhczogSFRNTEVsZW1lbnQsIHJlbmRlckluZm86IFJlbmRlckluZm8pIHtcbiAgICAvLyBjb25zb2xlLmxvZyhcInJlbmRlclwiKTtcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLmRhdGFzZXRzKTtcblxuICAgIC8vIERhdGEgcHJlcHJvY2Vzc2luZ1xuICAgIGZvciAobGV0IGRhdGFzZXQgb2YgcmVuZGVySW5mby5kYXRhc2V0cykge1xuICAgICAgICBpZiAoZGF0YXNldC5nZXRRdWVyeSgpLnVzZWRBc1hEYXRhc2V0KSBjb250aW51ZTtcbiAgICAgICAgLy8gdmFsdWVTaGlmdFxuICAgICAgICBsZXQgc2hpZnRBbW91bnQgPSByZW5kZXJJbmZvLnZhbHVlU2hpZnRbZGF0YXNldC5nZXRJZCgpXTtcbiAgICAgICAgaWYgKHNoaWZ0QW1vdW50ICE9PSBudWxsICYmIHNoaWZ0QW1vdW50ICE9PSAwKSB7XG4gICAgICAgICAgICBkYXRhc2V0LnNoaWZ0KFxuICAgICAgICAgICAgICAgIHNoaWZ0QW1vdW50LFxuICAgICAgICAgICAgICAgIHJlbmRlckluZm8uc2hpZnRPbmx5VmFsdWVMYXJnZXJUaGFuW2RhdGFzZXQuZ2V0SWQoKV1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gcGVuYWx0eVxuICAgICAgICBpZiAocmVuZGVySW5mby5wZW5hbHR5W2RhdGFzZXQuZ2V0SWQoKV0gIT09IG51bGwpIHtcbiAgICAgICAgICAgIGRhdGFzZXQuc2V0UGVuYWx0eShyZW5kZXJJbmZvLnBlbmFsdHlbZGF0YXNldC5nZXRJZCgpXSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gYWNjdW1cbiAgICAgICAgaWYgKHJlbmRlckluZm8uYWNjdW1bZGF0YXNldC5nZXRJZCgpXSkge1xuICAgICAgICAgICAgZGF0YXNldC5hY2N1bXVsYXRlVmFsdWVzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGxldCBsaW5lSW5mbyBvZiByZW5kZXJJbmZvLmxpbmUpIHtcbiAgICAgICAgbGV0IHJldCA9IHJlbmRlckxpbmVDaGFydChjYW52YXMsIHJlbmRlckluZm8sIGxpbmVJbmZvKTtcbiAgICAgICAgaWYgKHR5cGVvZiByZXQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZm9yIChsZXQgYmFySW5mbyBvZiByZW5kZXJJbmZvLmJhcikge1xuICAgICAgICBsZXQgcmV0ID0gcmVuZGVyQmFyQ2hhcnQoY2FudmFzLCByZW5kZXJJbmZvLCBiYXJJbmZvKTtcbiAgICAgICAgaWYgKHR5cGVvZiByZXQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZm9yIChsZXQgcGllSW5mbyBvZiByZW5kZXJJbmZvLnBpZSkge1xuICAgICAgICBsZXQgcmV0ID0gcGllLnJlbmRlclBpZUNoYXJ0KGNhbnZhcywgcmVuZGVySW5mbywgcGllSW5mbyk7XG4gICAgICAgIGlmICh0eXBlb2YgcmV0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICB9XG4gICAgfVxuICAgIGZvciAobGV0IHN1bW1hcnlJbmZvIG9mIHJlbmRlckluZm8uc3VtbWFyeSkge1xuICAgICAgICBsZXQgcmV0ID0gc3VtbWFyeS5yZW5kZXJTdW1tYXJ5KGNhbnZhcywgcmVuZGVySW5mbywgc3VtbWFyeUluZm8pO1xuICAgICAgICBpZiAodHlwZW9mIHJldCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGxldCBidWxsZXRJbmZvIG9mIHJlbmRlckluZm8uYnVsbGV0KSB7XG4gICAgICAgIGxldCByZXQgPSBidWxsZXQucmVuZGVyQnVsbGV0KGNhbnZhcywgcmVuZGVySW5mbywgYnVsbGV0SW5mbyk7XG4gICAgICAgIGlmICh0eXBlb2YgcmV0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICB9XG4gICAgfVxuICAgIGZvciAobGV0IG1vbnRoSW5mbyBvZiByZW5kZXJJbmZvLm1vbnRoKSB7XG4gICAgICAgIGxldCByZXQgPSBtb250aC5yZW5kZXJNb250aChjYW52YXMsIHJlbmRlckluZm8sIG1vbnRoSW5mbyk7XG4gICAgICAgIGlmICh0eXBlb2YgcmV0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICB9XG4gICAgfVxuICAgIGZvciAobGV0IGhlYXRtYXBJbmZvIG9mIHJlbmRlckluZm8uaGVhdG1hcCkge1xuICAgICAgICBsZXQgcmV0ID0gaGVhdG1hcC5yZW5kZXJIZWF0bWFwKGNhbnZhcywgcmVuZGVySW5mbywgaGVhdG1hcEluZm8pO1xuICAgICAgICBpZiAodHlwZW9mIHJldCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gcmVuZGVyWEF4aXMoXG4gICAgY2hhcnRFbGVtZW50czogQ2hhcnRFbGVtZW50cyxcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvLFxuICAgIGNoYXJ0SW5mbzogQ29tbW9uQ2hhcnRJbmZvXG4pIHtcbiAgICAvLyBjb25zb2xlLmxvZyhcInJlbmRlclhBeGlzXCIpO1xuXG4gICAgaWYgKCFyZW5kZXJJbmZvIHx8ICFjaGFydEluZm8pIHJldHVybjtcblxuICAgIGxldCBkYXRhc2V0cyA9IHJlbmRlckluZm8uZGF0YXNldHM7XG4gICAgbGV0IHhEb21haW4gPSBkMy5leHRlbnQoZGF0YXNldHMuZ2V0RGF0ZXMoKSk7XG4gICAgbGV0IHhTY2FsZSA9IGQzXG4gICAgICAgIC5zY2FsZVRpbWUoKVxuICAgICAgICAuZG9tYWluKHhEb21haW4pXG4gICAgICAgIC5yYW5nZShbMCwgcmVuZGVySW5mby5kYXRhQXJlYVNpemUud2lkdGhdKTtcbiAgICBjaGFydEVsZW1lbnRzW1wieFNjYWxlXCJdID0geFNjYWxlO1xuXG4gICAgbGV0IHRpY2tJbnRlcnZhbEluRHVyYXRpb24gPSBoZWxwZXIucGFyc2VEdXJhdGlvblN0cmluZyhcbiAgICAgICAgY2hhcnRJbmZvLnhBeGlzVGlja0ludGVydmFsXG4gICAgKTtcblxuICAgIGxldCBbdGlja1ZhbHVlcywgdGlja0ludGVydmFsXSA9IGdldFhUaWNrVmFsdWVzKFxuICAgICAgICBkYXRhc2V0cy5nZXREYXRlcygpLFxuICAgICAgICB0aWNrSW50ZXJ2YWxJbkR1cmF0aW9uXG4gICAgKTtcbiAgICBsZXQgdGlja0Zvcm1hdCA9IGdldFhUaWNrTGFiZWxGb3JtYXQoXG4gICAgICAgIGRhdGFzZXRzLmdldERhdGVzKCksXG4gICAgICAgIGNoYXJ0SW5mby54QXhpc1RpY2tMYWJlbEZvcm1hdFxuICAgICk7XG5cbiAgICBsZXQgeEF4aXNHZW4gPSBkMy5heGlzQm90dG9tKHhTY2FsZSk7XG5cbiAgICBpZiAodGlja1ZhbHVlcyAmJiB0aWNrVmFsdWVzLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICB4QXhpc0dlbi50aWNrVmFsdWVzKHRpY2tWYWx1ZXMpO1xuICAgIH0gZWxzZSBpZiAodGlja0ludGVydmFsKSB7XG4gICAgICAgIHhBeGlzR2VuLnRpY2tzKHRpY2tJbnRlcnZhbCk7XG4gICAgfVxuICAgIGlmICh0aWNrRm9ybWF0KSB7XG4gICAgICAgIHhBeGlzR2VuLnRpY2tGb3JtYXQodGlja0Zvcm1hdCk7XG4gICAgfVxuXG4gICAgbGV0IHhBeGlzID0gY2hhcnRFbGVtZW50cy5kYXRhQXJlYSAvLyBheGlzIGluY2x1ZGVzIHRpY2tzXG4gICAgICAgIC5hcHBlbmQoXCJnXCIpXG4gICAgICAgIC5hdHRyKFwiaWRcIiwgXCJ4QXhpc1wiKVxuICAgICAgICAuYXR0cihcbiAgICAgICAgICAgIFwidHJhbnNmb3JtXCIsXG4gICAgICAgICAgICBcInRyYW5zbGF0ZSgwLFwiICsgcmVuZGVySW5mby5kYXRhQXJlYVNpemUuaGVpZ2h0ICsgXCIpXCJcbiAgICAgICAgKSAvLyByZWxhdGl2ZSB0byBncmFwaEFyZWFcbiAgICAgICAgLmNhbGwoeEF4aXNHZW4pXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLWF4aXNcIik7XG4gICAgaWYgKGNoYXJ0SW5mby54QXhpc0NvbG9yKSB7XG4gICAgICAgIHhBeGlzLnN0eWxlKFwic3Ryb2tlXCIsIGNoYXJ0SW5mby54QXhpc0NvbG9yKTtcbiAgICB9XG4gICAgY2hhcnRFbGVtZW50c1tcInhBeGlzXCJdID0geEF4aXM7XG5cbiAgICBsZXQgdGV4dFNpemUgPSBoZWxwZXIubWVhc3VyZVRleHRTaXplKFwiOTktOTktOTlcIik7XG5cbiAgICBsZXQgeEF4aXNUaWNrTGFiZWxzID0geEF4aXNcbiAgICAgICAgLnNlbGVjdEFsbChcInRleHRcIilcbiAgICAgICAgLmF0dHIoXCJ4XCIsIC0xICogdGV4dFNpemUuaGVpZ2h0ICogTWF0aC5jb3MoKDY1IC8gMTgwKSAqIE1hdGguUEkpKVxuICAgICAgICAuYXR0cihcInlcIiwgMClcbiAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgXCJyb3RhdGUoLTY1KVwiKVxuICAgICAgICAuc3R5bGUoXCJ0ZXh0LWFuY2hvclwiLCBcImVuZFwiKVxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci10aWNrLWxhYmVsXCIpO1xuICAgIGlmIChjaGFydEluZm8ueEF4aXNDb2xvcikge1xuICAgICAgICB4QXhpc1RpY2tMYWJlbHMuc3R5bGUoXCJmaWxsXCIsIGNoYXJ0SW5mby54QXhpc0NvbG9yKTtcbiAgICB9XG5cbiAgICBsZXQgdGlja0xlbmd0aCA9IDY7XG4gICAgbGV0IHRpY2tMYWJlbEhlaWdodCA9IHRleHRTaXplLndpZHRoICogTWF0aC5zaW4oKDY1IC8gMTgwKSAqIE1hdGguUEkpO1xuICAgIGxldCB4QXhpc0xhYmVsID0geEF4aXNcbiAgICAgICAgLmFwcGVuZChcInRleHRcIilcbiAgICAgICAgLnRleHQoY2hhcnRJbmZvLnhBeGlzTGFiZWwpXG4gICAgICAgIC5hdHRyKFxuICAgICAgICAgICAgXCJ0cmFuc2Zvcm1cIixcbiAgICAgICAgICAgIFwidHJhbnNsYXRlKFwiICtcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS53aWR0aCAvIDIgK1xuICAgICAgICAgICAgICAgIFwiLFwiICtcbiAgICAgICAgICAgICAgICAodGlja0xlbmd0aCArIHRpY2tMYWJlbEhlaWdodCkgK1xuICAgICAgICAgICAgICAgIFwiKVwiXG4gICAgICAgIClcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInRyYWNrZXItYXhpcy1sYWJlbFwiKTtcbiAgICBpZiAoY2hhcnRJbmZvLnhBeGlzTGFiZWxDb2xvcikge1xuICAgICAgICB4QXhpc0xhYmVsLnN0eWxlKFwiZmlsbFwiLCBjaGFydEluZm8ueEF4aXNMYWJlbENvbG9yKTtcbiAgICB9XG5cbiAgICAvLyB4QXhpcyBoZWlnaHRcbiAgICB4QXhpcy5hdHRyKFwiaGVpZ2h0XCIsIHRpY2tMZW5ndGggKyB0aWNrTGFiZWxIZWlnaHQpO1xuXG4gICAgLy8gRXhwYW5kIGFyZWFzXG4gICAgaGVscGVyLmV4cGFuZEFyZWEoY2hhcnRFbGVtZW50cy5zdmcsIDAsIHRpY2tMZW5ndGggKyB0aWNrTGFiZWxIZWlnaHQpO1xuICAgIGhlbHBlci5leHBhbmRBcmVhKGNoYXJ0RWxlbWVudHMuZ3JhcGhBcmVhLCAwLCB0aWNrTGVuZ3RoICsgdGlja0xhYmVsSGVpZ2h0KTtcbn1cblxuZnVuY3Rpb24gcmVuZGVyWUF4aXMoXG4gICAgY2hhcnRFbGVtZW50czogQ2hhcnRFbGVtZW50cyxcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvLFxuICAgIGNoYXJ0SW5mbzogQ29tbW9uQ2hhcnRJbmZvLFxuICAgIHlBeGlzTG9jYXRpb246IHN0cmluZyxcbiAgICBkYXRhc2V0SWRzOiBBcnJheTxudW1iZXI+XG4pIHtcbiAgICAvLyBjb25zb2xlLmxvZyhcInJlbmRlcllBeGlzXCIpXG4gICAgLy8gY29uc29sZS5sb2coZGF0YXNldHMpO1xuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8pO1xuICAgIC8vIGNvbnNvbGUubG9nKGRhdGFzZXRJZHMpO1xuXG4gICAgaWYgKCFyZW5kZXJJbmZvIHx8ICFjaGFydEluZm8pIHJldHVybjtcblxuICAgIGxldCBkYXRhc2V0cyA9IHJlbmRlckluZm8uZGF0YXNldHM7XG4gICAgaWYgKGRhdGFzZXRJZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoeUF4aXNMb2NhdGlvbiAhPT0gXCJsZWZ0XCIgJiYgeUF4aXNMb2NhdGlvbiAhPT0gXCJyaWdodFwiKSByZXR1cm47XG5cbiAgICBsZXQgeU1pbk9mRGF0YXNldHMgPSBudWxsO1xuICAgIGxldCB5TWF4T2ZEYXRhc2V0cyA9IG51bGw7XG4gICAgbGV0IHRtcFZhbHVlSXNUaW1lID0gbnVsbDtcbiAgICBsZXQgdmFsdWVJc1RpbWUgPSBmYWxzZTtcbiAgICBmb3IgKGxldCBkYXRhc2V0SWQgb2YgZGF0YXNldElkcykge1xuICAgICAgICBsZXQgZGF0YXNldCA9IGRhdGFzZXRzLmdldERhdGFzZXRCeUlkKGRhdGFzZXRJZCk7XG4gICAgICAgIGlmIChkYXRhc2V0LmdldFF1ZXJ5KCkudXNlZEFzWERhdGFzZXQpIGNvbnRpbnVlO1xuXG4gICAgICAgIGlmICh5TWluT2ZEYXRhc2V0cyA9PT0gbnVsbCB8fCBkYXRhc2V0LmdldFlNaW4oKSA8IHlNaW5PZkRhdGFzZXRzKSB7XG4gICAgICAgICAgICB5TWluT2ZEYXRhc2V0cyA9IGRhdGFzZXQuZ2V0WU1pbigpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh5TWF4T2ZEYXRhc2V0cyA9PT0gbnVsbCB8fCBkYXRhc2V0LmdldFlNYXgoKSA+IHlNYXhPZkRhdGFzZXRzKSB7XG4gICAgICAgICAgICB5TWF4T2ZEYXRhc2V0cyA9IGRhdGFzZXQuZ2V0WU1heCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTmVlZCBhbGwgZGF0YXNldHMgaGF2ZSBzYW1lIHNldHRpbmdzIGZvciB0aW1lIHZhbHVlXG4gICAgICAgIHZhbHVlSXNUaW1lID0gZGF0YXNldC52YWx1ZVR5cGUgPT09IFZhbHVlVHlwZS5UaW1lO1xuICAgICAgICBpZiAodG1wVmFsdWVJc1RpbWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRtcFZhbHVlSXNUaW1lID0gdmFsdWVJc1RpbWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodmFsdWVJc1RpbWUgIT09IHRtcFZhbHVlSXNUaW1lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiTm90IGFsbCB2YWx1ZXMgaW4gdGltZSBmb3JtYXRcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBjb25zb2xlLmxvZyh5TWluT2ZEYXRhc2V0cyk7XG4gICAgLy8gY29uc29sZS5sb2coeU1heE9mRGF0YXNldHMpO1xuXG4gICAgbGV0IHlNaW4gPSBudWxsO1xuICAgIGlmICh5QXhpc0xvY2F0aW9uID09PSBcImxlZnRcIikge1xuICAgICAgICB5TWluID0gY2hhcnRJbmZvLnlNaW5bMF07XG4gICAgfSBlbHNlIGlmICh5QXhpc0xvY2F0aW9uID09PSBcInJpZ2h0XCIpIHtcbiAgICAgICAgeU1pbiA9IGNoYXJ0SW5mby55TWluWzFdO1xuICAgIH1cbiAgICBsZXQgeU1pbkFzc2lnbmVkID0gZmFsc2U7XG4gICAgaWYgKHR5cGVvZiB5TWluICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgIHlNaW4gPSB5TWluT2ZEYXRhc2V0cztcbiAgICB9IGVsc2Uge1xuICAgICAgICB5TWluQXNzaWduZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGxldCB5TWF4ID0gbnVsbDtcbiAgICBpZiAoeUF4aXNMb2NhdGlvbiA9PT0gXCJsZWZ0XCIpIHtcbiAgICAgICAgeU1heCA9IGNoYXJ0SW5mby55TWF4WzBdO1xuICAgIH0gZWxzZSBpZiAoeUF4aXNMb2NhdGlvbiA9PT0gXCJyaWdodFwiKSB7XG4gICAgICAgIHlNYXggPSBjaGFydEluZm8ueU1heFsxXTtcbiAgICB9XG4gICAgbGV0IHlNYXhBc3NpZ25lZCA9IGZhbHNlO1xuICAgIGlmICh0eXBlb2YgeU1heCAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICB5TWF4ID0geU1heE9mRGF0YXNldHM7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgeU1heEFzc2lnbmVkID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHlNYXggPCB5TWluKSB7XG4gICAgICAgIGxldCB5VG1wID0geU1pbjtcbiAgICAgICAgeU1pbiA9IHlNYXg7XG4gICAgICAgIHlNYXggPSB5VG1wO1xuICAgICAgICBsZXQgeVRtcEFzc2lnbmVkID0geU1pbkFzc2lnbmVkO1xuICAgICAgICB5TWluQXNzaWduZWQgPSB5TWF4QXNzaWduZWQ7XG4gICAgICAgIHlNYXhBc3NpZ25lZCA9IHlUbXBBc3NpZ25lZDtcbiAgICB9XG5cbiAgICBsZXQgeUV4dGVudCA9IHlNYXggLSB5TWluO1xuXG4gICAgbGV0IHlTY2FsZSA9IGQzLnNjYWxlTGluZWFyKCk7XG4gICAgbGV0IHlMb3dlciwgeVVwcGVyO1xuICAgIGlmICh5TWluQXNzaWduZWQpIHtcbiAgICAgICAgeUxvd2VyID0geU1pbjtcbiAgICB9IGVsc2Uge1xuICAgICAgICB5TG93ZXIgPSB5TWluIC0geUV4dGVudCAqIDAuMjtcbiAgICB9XG4gICAgaWYgKHlNYXhBc3NpZ25lZCkge1xuICAgICAgICB5VXBwZXIgPSB5TWF4O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHlVcHBlciA9IHlNYXggKyB5RXh0ZW50ICogMC4yO1xuICAgIH1cbiAgICAvLyBpZiBpdCBpcyBiYXIgY2hhcnQsIHplcm8gbXVzdCBiZSBjb250YWluZWQgaW4gdGhlIHJhbmdlXG4gICAgaWYgKGNoYXJ0SW5mby5HZXRHcmFwaFR5cGUoKSA9PT0gR3JhcGhUeXBlLkJhcikge1xuICAgICAgICBpZiAoeVVwcGVyIDwgMC4wKSB7XG4gICAgICAgICAgICB5VXBwZXIgPSAwO1xuICAgICAgICB9XG4gICAgICAgIGlmICh5TG93ZXIgPiAwLjApIHtcbiAgICAgICAgICAgIHlMb3dlciA9IDAuMDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBsZXQgZG9tYWluID0gW3lMb3dlciwgeVVwcGVyXTtcbiAgICBpZiAoXG4gICAgICAgICh5QXhpc0xvY2F0aW9uID09PSBcImxlZnRcIiAmJiBjaGFydEluZm8ucmV2ZXJzZVlBeGlzWzBdKSB8fFxuICAgICAgICAoeUF4aXNMb2NhdGlvbiA9PT0gXCJyaWdodFwiICYmIGNoYXJ0SW5mby5yZXZlcnNlWUF4aXNbMV0pXG4gICAgKSB7XG4gICAgICAgIGRvbWFpbiA9IFt5VXBwZXIsIHlMb3dlcl07XG4gICAgfVxuICAgIHlTY2FsZS5kb21haW4oZG9tYWluKS5yYW5nZShbcmVuZGVySW5mby5kYXRhQXJlYVNpemUuaGVpZ2h0LCAwXSk7XG5cbiAgICBpZiAoeUF4aXNMb2NhdGlvbiA9PT0gXCJsZWZ0XCIpIHtcbiAgICAgICAgY2hhcnRFbGVtZW50c1tcImxlZnRZU2NhbGVcIl0gPSB5U2NhbGU7XG4gICAgfSBlbHNlIGlmICh5QXhpc0xvY2F0aW9uID09PSBcInJpZ2h0XCIpIHtcbiAgICAgICAgY2hhcnRFbGVtZW50c1tcInJpZ2h0WVNjYWxlXCJdID0geVNjYWxlO1xuICAgIH1cblxuICAgIGxldCB5QXhpc0NvbG9yID0gXCJcIjtcbiAgICBpZiAoeUF4aXNMb2NhdGlvbiA9PT0gXCJsZWZ0XCIpIHtcbiAgICAgICAgeUF4aXNDb2xvciA9IGNoYXJ0SW5mby55QXhpc0NvbG9yWzBdO1xuICAgIH0gZWxzZSBpZiAoeUF4aXNMb2NhdGlvbiA9PT0gXCJyaWdodFwiKSB7XG4gICAgICAgIHlBeGlzQ29sb3IgPSBjaGFydEluZm8ueUF4aXNDb2xvclsxXTtcbiAgICB9XG5cbiAgICBsZXQgeUF4aXNMYWJlbENvbG9yID0gXCJcIjtcbiAgICBpZiAoeUF4aXNMb2NhdGlvbiA9PT0gXCJsZWZ0XCIpIHtcbiAgICAgICAgeUF4aXNMYWJlbENvbG9yID0gY2hhcnRJbmZvLnlBeGlzTGFiZWxDb2xvclswXTtcbiAgICB9IGVsc2UgaWYgKHlBeGlzTG9jYXRpb24gPT09IFwicmlnaHRcIikge1xuICAgICAgICB5QXhpc0xhYmVsQ29sb3IgPSBjaGFydEluZm8ueUF4aXNMYWJlbENvbG9yWzFdO1xuICAgIH1cblxuICAgIGxldCB5QXhpc0xhYmVsVGV4dCA9IFwiXCI7XG4gICAgaWYgKHlBeGlzTG9jYXRpb24gPT09IFwibGVmdFwiKSB7XG4gICAgICAgIHlBeGlzTGFiZWxUZXh0ID0gY2hhcnRJbmZvLnlBeGlzTGFiZWxbMF07XG4gICAgfSBlbHNlIGlmICh5QXhpc0xvY2F0aW9uID09PSBcInJpZ2h0XCIpIHtcbiAgICAgICAgeUF4aXNMYWJlbFRleHQgPSBjaGFydEluZm8ueUF4aXNMYWJlbFsxXTtcbiAgICB9XG5cbiAgICBsZXQgeUF4aXNVbml0VGV4dCA9IFwiXCI7XG4gICAgbGV0IHlBeGlzVGlja0ludGVydmFsID0gbnVsbDtcbiAgICBsZXQgeUF4aXNUaWNrTGFiZWxGb3JtYXQgPSBudWxsO1xuICAgIGlmICh5QXhpc0xvY2F0aW9uID09PSBcImxlZnRcIikge1xuICAgICAgICB5QXhpc1VuaXRUZXh0ID0gY2hhcnRJbmZvLnlBeGlzVW5pdFswXTtcbiAgICAgICAgeUF4aXNUaWNrSW50ZXJ2YWwgPSBjaGFydEluZm8ueUF4aXNUaWNrSW50ZXJ2YWxbMF07IC8vIHN0cmluZ1xuICAgICAgICB5QXhpc1RpY2tMYWJlbEZvcm1hdCA9IGNoYXJ0SW5mby55QXhpc1RpY2tMYWJlbEZvcm1hdFswXTtcbiAgICB9IGVsc2UgaWYgKHlBeGlzTG9jYXRpb24gPT09IFwicmlnaHRcIikge1xuICAgICAgICB5QXhpc1VuaXRUZXh0ID0gY2hhcnRJbmZvLnlBeGlzVW5pdFsxXTtcbiAgICAgICAgeUF4aXNUaWNrSW50ZXJ2YWwgPSBjaGFydEluZm8ueUF4aXNUaWNrSW50ZXJ2YWxbMV07IC8vIHN0cmluZ1xuICAgICAgICB5QXhpc1RpY2tMYWJlbEZvcm1hdCA9IGNoYXJ0SW5mby55QXhpc1RpY2tMYWJlbEZvcm1hdFsxXTtcbiAgICB9XG4gICAgLy8gZ2V0IGludGVydmFsIGZyb20gc3RyaW5nXG4gICAgbGV0IHRpY2tJbnRlcnZhbCA9IG51bGw7XG4gICAgaWYgKHZhbHVlSXNUaW1lKSB7XG4gICAgICAgIHRpY2tJbnRlcnZhbCA9IGhlbHBlci5wYXJzZUR1cmF0aW9uU3RyaW5nKHlBeGlzVGlja0ludGVydmFsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aWNrSW50ZXJ2YWwgPSBwYXJzZUZsb2F0KHlBeGlzVGlja0ludGVydmFsKTtcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNOdW1iZXIodGlja0ludGVydmFsKSB8fCBOdW1iZXIuaXNOYU4odGlja0ludGVydmFsKSkge1xuICAgICAgICAgICAgdGlja0ludGVydmFsID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGxldCB5QXhpc0dlbjtcbiAgICBpZiAoeUF4aXNMb2NhdGlvbiA9PT0gXCJsZWZ0XCIpIHtcbiAgICAgICAgeUF4aXNHZW4gPSBkMy5heGlzTGVmdCh5U2NhbGUpO1xuICAgIH0gZWxzZSBpZiAoeUF4aXNMb2NhdGlvbiA9PT0gXCJyaWdodFwiKSB7XG4gICAgICAgIHlBeGlzR2VuID0gZDMuYXhpc1JpZ2h0KHlTY2FsZSk7XG4gICAgfVxuICAgIGlmICh5QXhpc0dlbikge1xuICAgICAgICBsZXQgdGlja0xhYmVsRm9ybWF0ID0gZ2V0WVRpY2tMYWJlbEZvcm1hdChcbiAgICAgICAgICAgIHlMb3dlcixcbiAgICAgICAgICAgIHlVcHBlcixcbiAgICAgICAgICAgIHlBeGlzVGlja0xhYmVsRm9ybWF0LFxuICAgICAgICAgICAgdmFsdWVJc1RpbWVcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHRpY2tMYWJlbEZvcm1hdCkge1xuICAgICAgICAgICAgeUF4aXNHZW4udGlja0Zvcm1hdCh0aWNrTGFiZWxGb3JtYXQpO1xuICAgICAgICB9XG4gICAgICAgIGxldCB0aWNrVmFsdWVzID0gZ2V0WVRpY2tWYWx1ZXMoXG4gICAgICAgICAgICB5TG93ZXIsXG4gICAgICAgICAgICB5VXBwZXIsXG4gICAgICAgICAgICB0aWNrSW50ZXJ2YWwsXG4gICAgICAgICAgICB2YWx1ZUlzVGltZVxuICAgICAgICApO1xuICAgICAgICBpZiAodGlja1ZhbHVlcykge1xuICAgICAgICAgICAgeUF4aXNHZW4udGlja1ZhbHVlcyh0aWNrVmFsdWVzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGxldCB5QXhpcyA9IGNoYXJ0RWxlbWVudHMuZGF0YUFyZWFcbiAgICAgICAgLmFwcGVuZChcImdcIilcbiAgICAgICAgLmF0dHIoXCJpZFwiLCBcInlBeGlzXCIpXG4gICAgICAgIC5jYWxsKHlBeGlzR2VuKVxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci1heGlzXCIpO1xuICAgIGlmICh5QXhpc0xvY2F0aW9uID09IFwicmlnaHRcIikge1xuICAgICAgICB5QXhpcy5hdHRyKFxuICAgICAgICAgICAgXCJ0cmFuc2Zvcm1cIixcbiAgICAgICAgICAgIFwidHJhbnNsYXRlKFwiICsgcmVuZGVySW5mby5kYXRhQXJlYVNpemUud2lkdGggKyBcIiAsMClcIlxuICAgICAgICApO1xuICAgIH1cbiAgICBpZiAoeUF4aXNMb2NhdGlvbiA9PT0gXCJsZWZ0XCIpIHtcbiAgICAgICAgY2hhcnRFbGVtZW50c1tcImxlZnRZQXhpc1wiXSA9IHlBeGlzO1xuICAgIH0gZWxzZSBpZiAoeUF4aXNMb2NhdGlvbiA9PT0gXCJyaWdodFwiKSB7XG4gICAgICAgIGNoYXJ0RWxlbWVudHNbXCJyaWdodFlBeGlzXCJdID0geUF4aXM7XG4gICAgfVxuXG4gICAgbGV0IHlBeGlzTGluZSA9IHlBeGlzLnNlbGVjdEFsbChcInBhdGhcIik7XG4gICAgaWYgKHlBeGlzQ29sb3IpIHtcbiAgICAgICAgeUF4aXNMaW5lLnN0eWxlKFwic3Ryb2tlXCIsIHlBeGlzQ29sb3IpO1xuICAgIH1cblxuICAgIGxldCB5QXhpc1RpY2tzID0geUF4aXMuc2VsZWN0QWxsKFwibGluZVwiKTtcbiAgICBpZiAoeUF4aXNDb2xvcikge1xuICAgICAgICB5QXhpc1RpY2tzLnN0eWxlKFwic3Ryb2tlXCIsIHlBeGlzQ29sb3IpO1xuICAgIH1cblxuICAgIGxldCB5QXhpc1RpY2tMYWJlbHMgPSB5QXhpc1xuICAgICAgICAuc2VsZWN0QWxsKFwidGV4dFwiKVxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci10aWNrLWxhYmVsXCIpO1xuICAgIGlmICh5QXhpc0NvbG9yKSB7XG4gICAgICAgIHlBeGlzVGlja0xhYmVscy5zdHlsZShcImZpbGxcIiwgeUF4aXNDb2xvcik7XG4gICAgfVxuXG4gICAgLy8gR2V0IG1heCB0aWNrIGxhYmVsIHdpZHRoXG4gICAgbGV0IG1heFRpY2tMYWJlbFdpZHRoID0gMDtcbiAgICBmb3IgKGxldCBsYWJlbCBvZiB5QXhpc1RpY2tMYWJlbHMpIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2cobGFiZWwudGV4dENvbnRlbnQpO1xuICAgICAgICBpZiAobGFiZWwudGV4dENvbnRlbnQpIHtcbiAgICAgICAgICAgIGxldCBsYWJlbFNpemUgPSBoZWxwZXIubWVhc3VyZVRleHRTaXplKFxuICAgICAgICAgICAgICAgIGxhYmVsLnRleHRDb250ZW50LFxuICAgICAgICAgICAgICAgIFwidHJhY2tlci1heGlzLWxhYmVsXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAobGFiZWxTaXplLndpZHRoID4gbWF4VGlja0xhYmVsV2lkdGgpIHtcbiAgICAgICAgICAgICAgICBtYXhUaWNrTGFiZWxXaWR0aCA9IGxhYmVsU2l6ZS53aWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBjb25zb2xlLmxvZyhtYXhUaWNrTGFiZWxXaWR0aCk7XG5cbiAgICBpZiAoeUF4aXNVbml0VGV4dCAhPT0gXCJcIikge1xuICAgICAgICB5QXhpc0xhYmVsVGV4dCArPSBcIiAoXCIgKyB5QXhpc1VuaXRUZXh0ICsgXCIpXCI7XG4gICAgfVxuICAgIGxldCB5VGlja0xlbmd0aCA9IDY7XG4gICAgbGV0IHlBeGlzTGFiZWxTaXplID0gaGVscGVyLm1lYXN1cmVUZXh0U2l6ZSh5QXhpc0xhYmVsVGV4dCk7XG4gICAgbGV0IHlBeGlzTGFiZWwgPSB5QXhpc1xuICAgICAgICAuYXBwZW5kKFwidGV4dFwiKVxuICAgICAgICAudGV4dCh5QXhpc0xhYmVsVGV4dClcbiAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgXCJyb3RhdGUoLTkwKVwiKVxuICAgICAgICAuYXR0cihcInhcIiwgKC0xICogcmVuZGVySW5mby5kYXRhQXJlYVNpemUuaGVpZ2h0KSAvIDIuMClcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInRyYWNrZXItYXhpcy1sYWJlbFwiKTtcbiAgICBpZiAoeUF4aXNMb2NhdGlvbiA9PT0gXCJsZWZ0XCIpIHtcbiAgICAgICAgeUF4aXNMYWJlbC5hdHRyKFxuICAgICAgICAgICAgXCJ5XCIsXG4gICAgICAgICAgICAteVRpY2tMZW5ndGggLSBtYXhUaWNrTGFiZWxXaWR0aCAtIHlBeGlzTGFiZWxTaXplLmhlaWdodCAvIDIuMFxuICAgICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHlBeGlzTGFiZWwuYXR0cihcbiAgICAgICAgICAgIFwieVwiLFxuICAgICAgICAgICAgK3lUaWNrTGVuZ3RoICsgbWF4VGlja0xhYmVsV2lkdGggKyB5QXhpc0xhYmVsU2l6ZS5oZWlnaHRcbiAgICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHlBeGlzTGFiZWxDb2xvcikge1xuICAgICAgICB5QXhpc0xhYmVsLnN0eWxlKFwiZmlsbFwiLCB5QXhpc0xhYmVsQ29sb3IpO1xuICAgIH1cblxuICAgIGxldCB5QXhpc1dpZHRoID0geUF4aXNMYWJlbFNpemUuaGVpZ2h0ICsgbWF4VGlja0xhYmVsV2lkdGggKyB5VGlja0xlbmd0aDtcbiAgICB5QXhpcy5hdHRyKFwid2lkdGhcIiwgeUF4aXNXaWR0aCk7XG5cbiAgICAvLyBFeHBhbmQgYXJlYXNcbiAgICBoZWxwZXIuZXhwYW5kQXJlYShjaGFydEVsZW1lbnRzLnN2ZywgeUF4aXNXaWR0aCwgMCk7XG4gICAgaGVscGVyLmV4cGFuZEFyZWEoY2hhcnRFbGVtZW50cy5ncmFwaEFyZWEsIHlBeGlzV2lkdGgsIDApO1xuXG4gICAgLy8gTW92ZSBhcmVhc1xuICAgIGlmICh5QXhpc0xvY2F0aW9uID09PSBcImxlZnRcIikge1xuICAgICAgICAvLyBNb3ZlIGRhdGFBcmVhXG4gICAgICAgIGhlbHBlci5tb3ZlQXJlYShjaGFydEVsZW1lbnRzLmRhdGFBcmVhLCB5QXhpc1dpZHRoLCAwKTtcblxuICAgICAgICAvLyBNb3ZlIHRpdGxlXG4gICAgICAgIGlmIChjaGFydEVsZW1lbnRzLnRpdGxlKSB7XG4gICAgICAgICAgICBoZWxwZXIubW92ZUFyZWEoY2hhcnRFbGVtZW50cy50aXRsZSwgeUF4aXNXaWR0aCwgMCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIHJlbmRlckxpbmUoXG4gICAgY2hhcnRFbGVtZW50czogQ2hhcnRFbGVtZW50cyxcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvLFxuICAgIGxpbmVJbmZvOiBMaW5lSW5mbyxcbiAgICBkYXRhc2V0OiBEYXRhc2V0LFxuICAgIHlBeGlzTG9jYXRpb246IHN0cmluZ1xuKSB7XG4gICAgLy8gY29uc29sZS5sb2coZGF0YXNldCk7XG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mbyk7XG5cbiAgICBpZiAoIXJlbmRlckluZm8gfHwgIWxpbmVJbmZvKSByZXR1cm47XG5cbiAgICBsZXQgeVNjYWxlOiBhbnkgPSBudWxsO1xuICAgIGlmICh5QXhpc0xvY2F0aW9uID09PSBcImxlZnRcIikge1xuICAgICAgICB5U2NhbGUgPSBjaGFydEVsZW1lbnRzLmxlZnRZU2NhbGU7XG4gICAgfSBlbHNlIGlmICh5QXhpc0xvY2F0aW9uID09PSBcInJpZ2h0XCIpIHtcbiAgICAgICAgeVNjYWxlID0gY2hhcnRFbGVtZW50cy5yaWdodFlTY2FsZTtcbiAgICB9XG5cbiAgICBpZiAobGluZUluZm8uc2hvd0xpbmVbZGF0YXNldC5nZXRJZCgpXSkge1xuICAgICAgICBsZXQgbGluZUdlbiA9IGQzXG4gICAgICAgICAgICAubGluZTxEYXRhUG9pbnQ+KClcbiAgICAgICAgICAgIC5kZWZpbmVkKGZ1bmN0aW9uIChwOiBEYXRhUG9pbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcC52YWx1ZSAhPT0gbnVsbDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAueChmdW5jdGlvbiAocDogRGF0YVBvaW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNoYXJ0RWxlbWVudHMueFNjYWxlKHAuZGF0ZSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnkoZnVuY3Rpb24gKHA6IERhdGFQb2ludCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB5U2NhbGUocC52YWx1ZSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBsZXQgbGluZSA9IGNoYXJ0RWxlbWVudHMuZGF0YUFyZWFcbiAgICAgICAgICAgIC5hcHBlbmQoXCJwYXRoXCIpXG4gICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci1saW5lXCIpXG4gICAgICAgICAgICAuc3R5bGUoXCJzdHJva2Utd2lkdGhcIiwgbGluZUluZm8ubGluZVdpZHRoW2RhdGFzZXQuZ2V0SWQoKV0pO1xuXG4gICAgICAgIGlmIChsaW5lSW5mby5maWxsR2FwW2RhdGFzZXQuZ2V0SWQoKV0pIHtcbiAgICAgICAgICAgIGxpbmUuZGF0dW0oXG4gICAgICAgICAgICAgICAgQXJyYXkuZnJvbShkYXRhc2V0KS5maWx0ZXIoZnVuY3Rpb24gKHApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHAudmFsdWUgIT09IG51bGw7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICkuYXR0cihcImRcIiwgbGluZUdlbiBhcyBhbnkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGluZS5kYXR1bShkYXRhc2V0KS5hdHRyKFwiZFwiLCBsaW5lR2VuIGFzIGFueSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGluZUluZm8ubGluZUNvbG9yW2RhdGFzZXQuZ2V0SWQoKV0pIHtcbiAgICAgICAgICAgIGxpbmUuc3R5bGUoXCJzdHJva2VcIiwgbGluZUluZm8ubGluZUNvbG9yW2RhdGFzZXQuZ2V0SWQoKV0pO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiByZW5kZXJQb2ludHMoXG4gICAgY2hhcnRFbGVtZW50czogQ2hhcnRFbGVtZW50cyxcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvLFxuICAgIGxpbmVJbmZvOiBMaW5lSW5mbyxcbiAgICBkYXRhc2V0OiBEYXRhc2V0LFxuICAgIHlBeGlzTG9jYXRpb246IHN0cmluZ1xuKSB7XG4gICAgLy8gY29uc29sZS5sb2cobGluZUluZm8pO1xuICAgIC8vIGNvbnNvbGUubG9nKGRhdGFzZXQpO1xuXG4gICAgaWYgKCFyZW5kZXJJbmZvIHx8ICFsaW5lSW5mbykgcmV0dXJuO1xuXG4gICAgbGV0IHlTY2FsZTogYW55ID0gbnVsbDtcbiAgICBpZiAoeUF4aXNMb2NhdGlvbiA9PT0gXCJsZWZ0XCIpIHtcbiAgICAgICAgeVNjYWxlID0gY2hhcnRFbGVtZW50cy5sZWZ0WVNjYWxlO1xuICAgIH0gZWxzZSBpZiAoeUF4aXNMb2NhdGlvbiA9PT0gXCJyaWdodFwiKSB7XG4gICAgICAgIHlTY2FsZSA9IGNoYXJ0RWxlbWVudHMucmlnaHRZU2NhbGU7XG4gICAgfVxuXG4gICAgaWYgKGxpbmVJbmZvLnNob3dQb2ludFtkYXRhc2V0LmdldElkKCldKSB7XG4gICAgICAgIGxldCBkb3RzID0gY2hhcnRFbGVtZW50cy5kYXRhQXJlYVxuICAgICAgICAgICAgLnNlbGVjdEFsbChcImRvdFwiKVxuICAgICAgICAgICAgLmRhdGEoXG4gICAgICAgICAgICAgICAgQXJyYXkuZnJvbShkYXRhc2V0KS5maWx0ZXIoZnVuY3Rpb24gKHA6IERhdGFQb2ludCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcC52YWx1ZSAhPT0gbnVsbDtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmVudGVyKClcbiAgICAgICAgICAgIC5hcHBlbmQoXCJjaXJjbGVcIilcbiAgICAgICAgICAgIC5hdHRyKFwiclwiLCBsaW5lSW5mby5wb2ludFNpemVbZGF0YXNldC5nZXRJZCgpXSlcbiAgICAgICAgICAgIC5hdHRyKFwiY3hcIiwgZnVuY3Rpb24gKHA6IERhdGFQb2ludCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjaGFydEVsZW1lbnRzLnhTY2FsZShwLmRhdGUpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hdHRyKFwiY3lcIiwgZnVuY3Rpb24gKHA6IERhdGFQb2ludCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB5U2NhbGUocC52YWx1ZSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmF0dHIoXCJkYXRlXCIsIGZ1bmN0aW9uIChwOiBEYXRhUG9pbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZDMudGltZUZvcm1hdChcIiV5LSVtLSVkXCIpKHAuZGF0ZSBhcyBhbnkpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hdHRyKFwidmFsdWVcIiwgZnVuY3Rpb24gKHA6IERhdGFQb2ludCkge1xuICAgICAgICAgICAgICAgIGlmIChwLnZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKHAudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcC52YWx1ZS50b0ZpeGVkKDApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwLnZhbHVlLnRvRml4ZWQoMik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hdHRyKFwidmFsdWVUeXBlXCIsIFZhbHVlVHlwZVtkYXRhc2V0LnZhbHVlVHlwZV0pXG4gICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci1kb3RcIik7XG4gICAgICAgIGlmIChsaW5lSW5mby5wb2ludENvbG9yW2RhdGFzZXQuZ2V0SWQoKV0pIHtcbiAgICAgICAgICAgIGRvdHMuc3R5bGUoXCJmaWxsXCIsIGxpbmVJbmZvLnBvaW50Q29sb3JbZGF0YXNldC5nZXRJZCgpXSk7XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBsaW5lSW5mby5wb2ludEJvcmRlckNvbG9yW2RhdGFzZXQuZ2V0SWQoKV0gJiZcbiAgICAgICAgICAgICAgICBsaW5lSW5mby5wb2ludEJvcmRlcldpZHRoW2RhdGFzZXQuZ2V0SWQoKV0gPiAwLjBcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGRvdHMuc3R5bGUoXG4gICAgICAgICAgICAgICAgICAgIFwic3Ryb2tlXCIsXG4gICAgICAgICAgICAgICAgICAgIGxpbmVJbmZvLnBvaW50Qm9yZGVyQ29sb3JbZGF0YXNldC5nZXRJZCgpXVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgZG90cy5zdHlsZShcbiAgICAgICAgICAgICAgICAgICAgXCJzdHJva2Utd2lkdGhcIixcbiAgICAgICAgICAgICAgICAgICAgbGluZUluZm8ucG9pbnRCb3JkZXJXaWR0aFtkYXRhc2V0LmdldElkKCldXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsaW5lSW5mby5hbGxvd0luc3BlY3REYXRhKSB7XG4gICAgICAgICAgICByZW5kZXJUb29sdGlwKGRvdHMsIGNoYXJ0RWxlbWVudHMsIHJlbmRlckluZm8pO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiByZW5kZXJUb29sdGlwKFxuICAgIHRhcmdldEVsZW1lbnRzOiBhbnksXG4gICAgY2hhcnRFbGVtZW50czogQ2hhcnRFbGVtZW50cyxcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvXG4pIHtcbiAgICBsZXQgdG9vbHRpcCA9IGNoYXJ0RWxlbWVudHMuZGF0YUFyZWEuYXBwZW5kKFwic3ZnXCIpLnN0eWxlKFwib3BhY2l0eVwiLCAwKTtcbiAgICBsZXQgdG9vbHRpcEJnID0gdG9vbHRpcC5hcHBlbmQoXCJyZWN0XCIpLmF0dHIoXCJ4XCIsIDApLmF0dHIoXCJ5XCIsIDApO1xuICAgIGxldCB0b29sdGlwTGFiZWwgPSB0b29sdGlwLmFwcGVuZChcInRleHRcIik7XG4gICAgbGV0IHRvb2x0aXBMYWJlbERhdGUgPSB0b29sdGlwTGFiZWxcbiAgICAgICAgLmFwcGVuZChcInRzcGFuXCIpXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLXRvb2x0aXAtbGFiZWxcIik7XG4gICAgbGV0IHRvb2x0aXBMYWJlbFZhbHVlID0gdG9vbHRpcExhYmVsXG4gICAgICAgIC5hcHBlbmQoXCJ0c3BhblwiKVxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci10b29sdGlwLWxhYmVsXCIpO1xuXG4gICAgbGV0IHhTcGFjaW5nID0gMztcbiAgICBsZXQgeVNwYWNpbmcgPSAzO1xuXG4gICAgdGFyZ2V0RWxlbWVudHNcbiAgICAgICAgLm9uKFwibW91c2VlbnRlclwiLCBmdW5jdGlvbiAoZXZlbnQ6IGFueSkge1xuICAgICAgICAgICAgY29uc3QgW3gsIHldID0gZDMucG9pbnRlcihldmVudCk7XG4gICAgICAgICAgICBsZXQgdG9vbHRpcEJnV2lkdGggPSAwO1xuICAgICAgICAgICAgbGV0IHRvb2x0aXBCZ0hlaWdodCA9IDA7XG4gICAgICAgICAgICAvLyBEYXRlXG4gICAgICAgICAgICBsZXQgbGFiZWxEYXRlVGV4dCA9IFwiZGF0ZTogXCIgKyBkMy5zZWxlY3QodGhpcykuYXR0cihcImRhdGVcIik7XG4gICAgICAgICAgICAvLyBsYWJlbERhdGVUZXh0ID0geC50b1N0cmluZygpOy8vIGRlYnVnXG4gICAgICAgICAgICBsZXQgbGFiZWxEYXRlU2l6ZSA9IGhlbHBlci5tZWFzdXJlVGV4dFNpemUoXG4gICAgICAgICAgICAgICAgbGFiZWxEYXRlVGV4dCxcbiAgICAgICAgICAgICAgICBcInRyYWNrZXItdG9vbHRpcC1sYWJlbFwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdG9vbHRpcExhYmVsRGF0ZS50ZXh0KGxhYmVsRGF0ZVRleHQpO1xuICAgICAgICAgICAgaWYgKGxhYmVsRGF0ZVNpemUud2lkdGggPiB0b29sdGlwQmdXaWR0aCkge1xuICAgICAgICAgICAgICAgIHRvb2x0aXBCZ1dpZHRoID0gbGFiZWxEYXRlU2l6ZS53aWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRvb2x0aXBCZ0hlaWdodCArPSBsYWJlbERhdGVTaXplLmhlaWdodDtcbiAgICAgICAgICAgIHRvb2x0aXBMYWJlbERhdGUuYXR0cihcInhcIiwgeFNwYWNpbmcpLmF0dHIoXCJ5XCIsIHRvb2x0aXBCZ0hlaWdodCk7XG5cbiAgICAgICAgICAgIC8vIFZhbHVlXG4gICAgICAgICAgICBsZXQgbGFiZWxWYWx1ZVRleHQgPSBcInZhbHVlOiBcIjtcbiAgICAgICAgICAgIGxldCB2YWx1ZVR5cGUgPSBkMy5zZWxlY3QodGhpcykuYXR0cihcInZhbHVlVHlwZVwiKTtcbiAgICAgICAgICAgIGxldCBzdHJWYWx1ZSA9IGQzLnNlbGVjdCh0aGlzKS5hdHRyKFwidmFsdWVcIik7XG4gICAgICAgICAgICAvLyBzdHJWYWx1ZSArPSB5LnRvU3RyaW5nKCk7Ly9kZWJ1Z1xuICAgICAgICAgICAgaWYgKHZhbHVlVHlwZSA9PT0gXCJUaW1lXCIpIHtcbiAgICAgICAgICAgICAgICBsZXQgZGF5U3RhcnQgPSB3aW5kb3cubW9tZW50KFwiMDA6MDBcIiwgXCJISDptbVwiLCB0cnVlKTtcbiAgICAgICAgICAgICAgICBsZXQgdGlja1RpbWUgPSBkYXlTdGFydC5hZGQocGFyc2VGbG9hdChzdHJWYWx1ZSksIFwic2Vjb25kc1wiKTtcbiAgICAgICAgICAgICAgICBsZXQgZGF0ZVZhbHVlID0gdGlja1RpbWUuZm9ybWF0KFwiSEg6bW1cIik7XG4gICAgICAgICAgICAgICAgbGFiZWxWYWx1ZVRleHQgKz0gZGF0ZVZhbHVlO1xuICAgICAgICAgICAgICAgIHRvb2x0aXBMYWJlbFZhbHVlLnRleHQobGFiZWxWYWx1ZVRleHQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsYWJlbFZhbHVlVGV4dCArPSBzdHJWYWx1ZTtcbiAgICAgICAgICAgICAgICB0b29sdGlwTGFiZWxWYWx1ZS50ZXh0KGxhYmVsVmFsdWVUZXh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBsYWJlbFZhbHVlU2l6ZSA9IGhlbHBlci5tZWFzdXJlVGV4dFNpemUoXG4gICAgICAgICAgICAgICAgbGFiZWxWYWx1ZVRleHQsXG4gICAgICAgICAgICAgICAgXCJ0cmFja2VyLXRvb2x0aXAtbGFiZWxcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChsYWJlbFZhbHVlU2l6ZS53aWR0aCA+IHRvb2x0aXBCZ1dpZHRoKSB7XG4gICAgICAgICAgICAgICAgdG9vbHRpcEJnV2lkdGggPSBsYWJlbFZhbHVlU2l6ZS53aWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRvb2x0aXBCZ0hlaWdodCArPSB5U3BhY2luZyArIGxhYmVsVmFsdWVTaXplLmhlaWdodDtcbiAgICAgICAgICAgIHRvb2x0aXBMYWJlbFZhbHVlLmF0dHIoXCJ4XCIsIHhTcGFjaW5nKS5hdHRyKFwieVwiLCB0b29sdGlwQmdIZWlnaHQpO1xuXG4gICAgICAgICAgICB0b29sdGlwQmdXaWR0aCArPSAyICogeFNwYWNpbmc7XG4gICAgICAgICAgICB0b29sdGlwQmdIZWlnaHQgKz0gMiAqIHlTcGFjaW5nO1xuICAgICAgICAgICAgdG9vbHRpcExhYmVsXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCB0b29sdGlwQmdXaWR0aClcbiAgICAgICAgICAgICAgICAuYXR0cihcImhlaWdodFwiLCB0b29sdGlwQmdIZWlnaHQpO1xuXG4gICAgICAgICAgICB0b29sdGlwQmdcbiAgICAgICAgICAgICAgICAuYXR0cihcIndpZHRoXCIsIHRvb2x0aXBCZ1dpZHRoKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIHRvb2x0aXBCZ0hlaWdodClcbiAgICAgICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci10b29sdGlwXCIpO1xuXG4gICAgICAgICAgICBsZXQgdG9vbHRpcFBvc1ggPSB4O1xuICAgICAgICAgICAgbGV0IHRvb2x0aXBQb3NZID0geTtcbiAgICAgICAgICAgIGxldCB0b29sdGlwWE9mZnNldCA9IDEyO1xuICAgICAgICAgICAgbGV0IHRvb2x0aXBZT2Zmc2V0ID0gMTI7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgeCArIHRvb2x0aXBYT2Zmc2V0ICsgdG9vbHRpcEJnV2lkdGggPlxuICAgICAgICAgICAgICAgIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAvLyBtb3ZlIHRvb2x0aXAgdG8gbGVmdFxuICAgICAgICAgICAgICAgIHRvb2x0aXBQb3NYID0geCAtIHRvb2x0aXBCZ1dpZHRoIC0gdG9vbHRpcFhPZmZzZXQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGRlZmF1bHQgYXQgdGhlIHJpZ2h0IHNpZGVcbiAgICAgICAgICAgICAgICB0b29sdGlwUG9zWCA9IHggKyB0b29sdGlwWE9mZnNldDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh5IC0gdG9vbHRpcFlPZmZzZXQgLSB0b29sdGlwQmdIZWlnaHQgPCAwKSB7XG4gICAgICAgICAgICAgICAgLy8gZG93biBzaWRlXG4gICAgICAgICAgICAgICAgdG9vbHRpcFBvc1kgPSB5ICsgdG9vbHRpcFlPZmZzZXQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGRlZmF1bHQgbW92ZSB0byB1cCBzaWRlXG4gICAgICAgICAgICAgICAgdG9vbHRpcFBvc1kgPSB5IC0gdG9vbHRpcFlPZmZzZXQgLSB0b29sdGlwQmdIZWlnaHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0b29sdGlwLmF0dHIoXCJ4XCIsIHRvb2x0aXBQb3NYKS5hdHRyKFwieVwiLCB0b29sdGlwUG9zWSk7XG4gICAgICAgICAgICB0b29sdGlwLnRyYW5zaXRpb24oKS5kdXJhdGlvbigyMDApLnN0eWxlKFwib3BhY2l0eVwiLCAxKTtcbiAgICAgICAgfSlcbiAgICAgICAgLm9uKFwibW91c2VsZWF2ZVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0b29sdGlwLnRyYW5zaXRpb24oKS5kdXJhdGlvbig1MDApLnN0eWxlKFwib3BhY2l0eVwiLCAwKTtcbiAgICAgICAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlckJhcihcbiAgICBjaGFydEVsZW1lbnRzOiBDaGFydEVsZW1lbnRzLFxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXG4gICAgYmFySW5mbzogQmFySW5mbyxcbiAgICBkYXRhc2V0OiBEYXRhc2V0LFxuICAgIHlBeGlzTG9jYXRpb246IHN0cmluZyxcbiAgICBjdXJyQmFyU2V0OiBudW1iZXIsXG4gICAgdG90YWxOdW1PZkJhclNldHM6IG51bWJlclxuKSB7XG4gICAgLy8gY29uc29sZS5sb2coZGF0YXNldCk7XG4gICAgLy8gY29uc29sZS5sb2coYmFySW5mbyk7XG4gICAgLy8gY29uc29sZS5sb2coXCIlZC8lZFwiLCBjdXJyQmFyU2V0LCB0b3RhbE51bU9mQmFyU2V0cyk7XG5cbiAgICBpZiAoIXJlbmRlckluZm8gfHwgIWJhckluZm8pIHJldHVybjtcblxuICAgIGxldCBiYXJHYXAgPSAxO1xuICAgIGxldCBiYXJTZXRXaWR0aCA9IHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoIC8gZGF0YXNldC5nZXRMZW5ndGgoKTtcbiAgICBsZXQgYmFyV2lkdGggPSBiYXJTZXRXaWR0aDtcbiAgICBpZiAoYmFyU2V0V2lkdGggLSBiYXJHYXAgPiAwKSB7XG4gICAgICAgIGJhcldpZHRoID0gYmFyU2V0V2lkdGggLSBiYXJHYXA7XG4gICAgfVxuICAgIGJhcldpZHRoID0gYmFyV2lkdGggLyB0b3RhbE51bU9mQmFyU2V0cztcblxuICAgIGxldCBwb3J0aW9uTGVmdCA9IChjdXJyQmFyU2V0ICsgMSkgLyB0b3RhbE51bU9mQmFyU2V0cztcblxuICAgIGxldCB5U2NhbGU6IGFueSA9IG51bGw7XG4gICAgaWYgKHlBeGlzTG9jYXRpb24gPT09IFwibGVmdFwiKSB7XG4gICAgICAgIHlTY2FsZSA9IGNoYXJ0RWxlbWVudHMubGVmdFlTY2FsZTtcbiAgICB9IGVsc2UgaWYgKHlBeGlzTG9jYXRpb24gPT09IFwicmlnaHRcIikge1xuICAgICAgICB5U2NhbGUgPSBjaGFydEVsZW1lbnRzLnJpZ2h0WVNjYWxlO1xuICAgIH1cblxuICAgIGxldCBiYXJzID0gY2hhcnRFbGVtZW50cy5kYXRhQXJlYVxuICAgICAgICAuc2VsZWN0QWxsKFwiYmFyXCIpXG4gICAgICAgIC5kYXRhKFxuICAgICAgICAgICAgQXJyYXkuZnJvbShkYXRhc2V0KS5maWx0ZXIoZnVuY3Rpb24gKHA6IERhdGFQb2ludCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwLnZhbHVlICE9PSBudWxsO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICAuZW50ZXIoKVxuICAgICAgICAuYXBwZW5kKFwicmVjdFwiKVxuICAgICAgICAuYXR0cihcInhcIiwgZnVuY3Rpb24gKHA6IERhdGFQb2ludCwgaTogbnVtYmVyKSB7XG4gICAgICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGxldCBwb3J0aW9uVmlzaWJsZSA9IGN1cnJCYXJTZXQgKyAxIC0gdG90YWxOdW1PZkJhclNldHMgLyAyLjA7XG4gICAgICAgICAgICAgICAgaWYgKHBvcnRpb25WaXNpYmxlIDwgMS4wKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGFydEVsZW1lbnRzLnhTY2FsZShwLmRhdGUpIC1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJhclNldFdpZHRoIC8gMi4wICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJCYXJTZXQgKiBiYXJXaWR0aCArXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3J0aW9uVmlzaWJsZSAqIGJhcldpZHRoXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICBjaGFydEVsZW1lbnRzLnhTY2FsZShwLmRhdGUpIC1cbiAgICAgICAgICAgICAgICBiYXJTZXRXaWR0aCAvIDIuMCArXG4gICAgICAgICAgICAgICAgY3VyckJhclNldCAqIGJhcldpZHRoXG4gICAgICAgICAgICApO1xuICAgICAgICB9KVxuICAgICAgICAuYXR0cihcInlcIiwgZnVuY3Rpb24gKHA6IERhdGFQb2ludCkge1xuICAgICAgICAgICAgcmV0dXJuIHlTY2FsZShNYXRoLm1heChwLnZhbHVlLCAwKSk7XG4gICAgICAgIH0pXG4gICAgICAgIC5hdHRyKFwid2lkdGhcIiwgZnVuY3Rpb24gKHA6IERhdGFQb2ludCwgaTogbnVtYmVyKSB7XG4gICAgICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGxldCBwb3J0aW9uVmlzaWJsZSA9IGN1cnJCYXJTZXQgKyAxIC0gdG90YWxOdW1PZkJhclNldHMgLyAyLjA7XG4gICAgICAgICAgICAgICAgaWYgKHBvcnRpb25WaXNpYmxlIDwgMC4wKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAwLjA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwb3J0aW9uVmlzaWJsZSA8IDEuMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYmFyV2lkdGggKiBwb3J0aW9uVmlzaWJsZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJhcldpZHRoO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpID09PSBkYXRhc2V0LmdldExlbmd0aCgpIC0gMSkge1xuICAgICAgICAgICAgICAgIGxldCBwb3J0aW9uVmlzaWJsZSA9XG4gICAgICAgICAgICAgICAgICAgIDEuMCAtIChjdXJyQmFyU2V0ICsgMSAtIHRvdGFsTnVtT2ZCYXJTZXRzIC8gMi4wKTtcbiAgICAgICAgICAgICAgICBpZiAocG9ydGlvblZpc2libGUgPCAwLjApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDAuMDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBvcnRpb25WaXNpYmxlIDwgMS4wKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBiYXJXaWR0aCAqIHBvcnRpb25WaXNpYmxlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYmFyV2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYmFyV2lkdGg7XG4gICAgICAgIH0pXG4gICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIGZ1bmN0aW9uIChwOiBEYXRhUG9pbnQpIHtcbiAgICAgICAgICAgIGlmIChwLnZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE1hdGguYWJzKHlTY2FsZShwLnZhbHVlKSAtIHlTY2FsZSgwKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLWJhclwiKTtcblxuICAgIGlmIChiYXJJbmZvLmJhckNvbG9yW2RhdGFzZXQuZ2V0SWQoKV0pIHtcbiAgICAgICAgYmFycy5zdHlsZShcImZpbGxcIiwgYmFySW5mby5iYXJDb2xvcltkYXRhc2V0LmdldElkKCldKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHJlbmRlckxlZ2VuZChcbiAgICBjaGFydEVsZW1lbnRzOiBDaGFydEVsZW1lbnRzLFxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXG4gICAgY2hhcnRJbmZvOiBDb21tb25DaGFydEluZm9cbikge1xuICAgIC8vIGNvbnNvbGUubG9nKGNoYXJ0SW5mby5sZWdlbmRQb3NpdGlvbik7XG4gICAgLy8gY29uc29sZS5sb2coY2hhcnRJbmZvLmxlZ2VuZE9yaWVudGF0aW9uKTtcblxuICAgIC8vIEdldCBjaGFydCBlbGVtZW50c1xuICAgIGxldCBzdmcgPSBjaGFydEVsZW1lbnRzLnN2ZztcbiAgICBsZXQgZ3JhcGhBcmVhID0gY2hhcnRFbGVtZW50cy5ncmFwaEFyZWE7XG4gICAgbGV0IGRhdGFBcmVhID0gY2hhcnRFbGVtZW50cy5kYXRhQXJlYTtcbiAgICBsZXQgdGl0bGUgPSBjaGFydEVsZW1lbnRzLnRpdGxlO1xuICAgIGxldCB4QXhpcyA9IGNoYXJ0RWxlbWVudHMueEF4aXM7XG4gICAgbGV0IGxlZnRZQXhpcyA9IGNoYXJ0RWxlbWVudHMubGVmdFlBeGlzO1xuICAgIGxldCByaWdodFlBeGlzID0gY2hhcnRFbGVtZW50cy5yaWdodFlBeGlzO1xuXG4gICAgLy8gR2V0IGVsZW1lbnQgd2lkdGggYW5kIGhlaWdodFxuICAgIGxldCB0aXRsZUhlaWdodCA9IDAuMDtcbiAgICBpZiAodGl0bGUpIHtcbiAgICAgICAgdGl0bGVIZWlnaHQgPSBwYXJzZUZsb2F0KHRpdGxlLmF0dHIoXCJoZWlnaHRcIikpO1xuICAgIH1cbiAgICBsZXQgeEF4aXNIZWlnaHQgPSBwYXJzZUZsb2F0KHhBeGlzLmF0dHIoXCJoZWlnaHRcIikpO1xuICAgIGxldCBsZWZ0WUF4aXNXaWR0aCA9IDAuMDtcbiAgICBpZiAobGVmdFlBeGlzKSB7XG4gICAgICAgIGxlZnRZQXhpc1dpZHRoID0gcGFyc2VGbG9hdChsZWZ0WUF4aXMuYXR0cihcIndpZHRoXCIpKTtcbiAgICB9XG4gICAgbGV0IHJpZ2h0WUF4aXNXaWR0aCA9IDAuMDtcbiAgICBpZiAocmlnaHRZQXhpcykge1xuICAgICAgICByaWdodFlBeGlzV2lkdGggPSBwYXJzZUZsb2F0KHJpZ2h0WUF4aXMuYXR0cihcIndpZHRoXCIpKTtcbiAgICB9XG4gICAgLy8gR2V0IGRhdGFzZXRzXG4gICAgbGV0IGRhdGFzZXRzID0gcmVuZGVySW5mby5kYXRhc2V0cztcbiAgICBsZXQgeERhdGFzZXRJZHMgPSBkYXRhc2V0cy5nZXRYRGF0YXNldElkcygpO1xuICAgIC8vIGNvbnNvbGUubG9nKHhEYXRhc2V0SWRzKTtcblxuICAgIC8vIEdldCBuYW1lcyBhbmQgdGhlaXIgZGltZW5zaW9uXG4gICAgbGV0IG5hbWVzID0gZGF0YXNldHMuZ2V0TmFtZXMoKTsgLy8geERhdGFzZXQgbmFtZSBpbmNsdWRlZFxuICAgIGxldCBuYW1lU2l6ZXMgPSBuYW1lcy5tYXAoZnVuY3Rpb24gKG4pIHtcbiAgICAgICAgcmV0dXJuIGhlbHBlci5tZWFzdXJlVGV4dFNpemUobiwgXCJ0cmFja2VyLWxlZ2VuZC1sYWJlbFwiKTtcbiAgICB9KTtcbiAgICBsZXQgaW5kTWF4TmFtZSA9IDA7XG4gICAgbGV0IG1heE5hbWVXaWR0aCA9IDAuMDtcbiAgICBmb3IgKGxldCBpbmQgPSAwOyBpbmQgPCBuYW1lcy5sZW5ndGg7IGluZCsrKSB7XG4gICAgICAgIGlmICh4RGF0YXNldElkcy5pbmNsdWRlcyhpbmQpKSBjb250aW51ZTtcbiAgICAgICAgaWYgKG5hbWVTaXplc1tpbmRdLndpZHRoID4gbWF4TmFtZVdpZHRoKSB7XG4gICAgICAgICAgICBtYXhOYW1lV2lkdGggPSBuYW1lU2l6ZXNbaW5kXS53aWR0aDtcbiAgICAgICAgICAgIGluZE1heE5hbWUgPSBpbmQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbGV0IG1heE5hbWUgPSBuYW1lc1tpbmRNYXhOYW1lXTtcbiAgICBsZXQgY2hhcmFjdGVyV2lkdGggPSBtYXhOYW1lV2lkdGggLyBtYXhOYW1lLmxlbmd0aDtcbiAgICBsZXQgbmFtZUhlaWdodCA9IG5hbWVTaXplc1tpbmRNYXhOYW1lXS5oZWlnaHQ7XG4gICAgbGV0IG51bU5hbWVzID0gbmFtZXMubGVuZ3RoIC0geERhdGFzZXRJZHMubGVuZ3RoO1xuXG4gICAgbGV0IHhTcGFjaW5nID0gMiAqIGNoYXJhY3RlcldpZHRoO1xuICAgIGxldCB5U3BhY2luZyA9IG5hbWVIZWlnaHQ7XG4gICAgbGV0IG1hcmtlcldpZHRoID0gMiAqIGNoYXJhY3RlcldpZHRoO1xuXG4gICAgLy8gR2V0IGxlZ2VuZCB3aWR0aCBhbmQgaGVpZ2h0XG4gICAgbGV0IGxlZ2VuZFdpZHRoID0gMDtcbiAgICBsZXQgbGVnZW5kSGVpZ2h0ID0gMDtcbiAgICBpZiAoY2hhcnRJbmZvLmxlZ2VuZE9yaWVudGF0aW9uID09PSBcInZlcnRpY2FsXCIpIHtcbiAgICAgICAgbGVnZW5kV2lkdGggPSB4U3BhY2luZyAqIDMgKyBtYXJrZXJXaWR0aCArIG1heE5hbWVXaWR0aDtcbiAgICAgICAgbGVnZW5kSGVpZ2h0ID0gKG51bU5hbWVzICsgMSkgKiB5U3BhY2luZztcbiAgICB9IGVsc2UgaWYgKGNoYXJ0SW5mby5sZWdlbmRPcmllbnRhdGlvbiA9PT0gXCJob3Jpem9udGFsXCIpIHtcbiAgICAgICAgbGVnZW5kV2lkdGggPVxuICAgICAgICAgICAgKDIgKiB4U3BhY2luZyArIG1hcmtlcldpZHRoKSAqIG51bU5hbWVzICtcbiAgICAgICAgICAgIHhTcGFjaW5nICtcbiAgICAgICAgICAgIGQzLnN1bShuYW1lU2l6ZXMsIGZ1bmN0aW9uIChzLCBpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHhEYXRhc2V0SWRzLmluY2x1ZGVzKGkpKSByZXR1cm4gMDtcbiAgICAgICAgICAgICAgICByZXR1cm4gcy53aWR0aDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICBsZWdlbmRIZWlnaHQgPSB5U3BhY2luZyArIG5hbWVIZWlnaHQ7XG4gICAgfVxuICAgIC8vIGNvbnNvbGUubG9nKFxuICAgIC8vICAgICBgbWF4TmFtZTogJHttYXhOYW1lfSwgY2hhcmFjdGVyV2lkdGg6ICR7Y2hhcmFjdGVyV2lkdGh9LCBtYXhOYW1lV2lkdGg6ICR7bWF4TmFtZVdpZHRofWBcbiAgICAvLyApO1xuICAgIC8vIGNvbnNvbGUubG9nKGB4U3BhY2luZzoke3hTcGFjaW5nfSwgbnVtTmFtZXM6ICR7bnVtTmFtZXN9LCBtYXJrZXJXaWR0aDogJHttYXJrZXJXaWR0aH1gKTtcbiAgICAvLyBjb25zb2xlLmxvZyhgbGVnZW5kV2lkdGg6ICR7bGVnZW5kV2lkdGh9LCBsZWdlbmRIZWlnaHQ6ICR7bGVnZW5kSGVpZ2h0fWApO1xuXG4gICAgLy8gQ2FsY3VhbHRlIGxlbmdlbmRYIGFuZCBsZWdlbmRZXG4gICAgbGV0IGxlZ2VuZFggPSAwLjA7IC8vIHJlbGF0aXZlIHRvIGdyYXBoQXJlYVxuICAgIGxldCBsZWdlbmRZID0gMC4wO1xuICAgIGlmIChjaGFydEluZm8ubGVnZW5kUG9zaXRpb24gPT09IFwidG9wXCIpIHtcbiAgICAgICAgLy8gYmVsb3cgdGl0bGVcbiAgICAgICAgbGVnZW5kWCA9XG4gICAgICAgICAgICBsZWZ0WUF4aXNXaWR0aCArXG4gICAgICAgICAgICByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS53aWR0aCAvIDIuMCAtXG4gICAgICAgICAgICBsZWdlbmRXaWR0aCAvIDIuMDtcbiAgICAgICAgbGVnZW5kWSA9IHRpdGxlSGVpZ2h0O1xuICAgICAgICAvLyBFeHBhbmQgc3ZnXG4gICAgICAgIGhlbHBlci5leHBhbmRBcmVhKHN2ZywgMCwgbGVnZW5kSGVpZ2h0ICsgeVNwYWNpbmcpO1xuICAgICAgICAvLyBNb3ZlIGRhdGFBcmVhIGRvd25cbiAgICAgICAgaGVscGVyLm1vdmVBcmVhKGRhdGFBcmVhLCAwLCBsZWdlbmRIZWlnaHQgKyB5U3BhY2luZyk7XG4gICAgfSBlbHNlIGlmIChjaGFydEluZm8ubGVnZW5kUG9zaXRpb24gPT09IFwiYm90dG9tXCIpIHtcbiAgICAgICAgLy8gYmVsbG93IHgtYXhpcyBsYWJlbFxuICAgICAgICBsZWdlbmRYID1cbiAgICAgICAgICAgIGxlZnRZQXhpc1dpZHRoICtcbiAgICAgICAgICAgIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoIC8gMi4wIC1cbiAgICAgICAgICAgIGxlZ2VuZFdpZHRoIC8gMi4wO1xuICAgICAgICBsZWdlbmRZID1cbiAgICAgICAgICAgIHRpdGxlSGVpZ2h0ICtcbiAgICAgICAgICAgIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLmhlaWdodCArXG4gICAgICAgICAgICB4QXhpc0hlaWdodCArXG4gICAgICAgICAgICB5U3BhY2luZztcbiAgICAgICAgLy8gRXhwYW5kIHN2Z1xuICAgICAgICBoZWxwZXIuZXhwYW5kQXJlYShzdmcsIDAsIGxlZ2VuZEhlaWdodCArIHlTcGFjaW5nKTtcbiAgICB9IGVsc2UgaWYgKGNoYXJ0SW5mby5sZWdlbmRQb3NpdGlvbiA9PT0gXCJsZWZ0XCIpIHtcbiAgICAgICAgbGVnZW5kWCA9IDA7XG4gICAgICAgIGxlZ2VuZFkgPVxuICAgICAgICAgICAgdGl0bGVIZWlnaHQgK1xuICAgICAgICAgICAgcmVuZGVySW5mby5kYXRhQXJlYVNpemUuaGVpZ2h0IC8gMi4wIC1cbiAgICAgICAgICAgIGxlZ2VuZEhlaWdodCAvIDIuMDtcbiAgICAgICAgLy8gRXhwYW5kIHN2Z1xuICAgICAgICBoZWxwZXIuZXhwYW5kQXJlYShzdmcsIGxlZ2VuZFdpZHRoICsgeFNwYWNpbmcsIDApO1xuICAgICAgICAvLyBNb3ZlIGRhdGFBcmVhIHJpZ2h0XG4gICAgICAgIGhlbHBlci5tb3ZlQXJlYShkYXRhQXJlYSwgbGVnZW5kV2lkdGggKyB4U3BhY2luZywgMCk7XG4gICAgfSBlbHNlIGlmIChjaGFydEluZm8ubGVnZW5kUG9zaXRpb24gPT09IFwicmlnaHRcIikge1xuICAgICAgICBsZWdlbmRYID1cbiAgICAgICAgICAgIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoICtcbiAgICAgICAgICAgIGxlZnRZQXhpc1dpZHRoICtcbiAgICAgICAgICAgIHJpZ2h0WUF4aXNXaWR0aCArXG4gICAgICAgICAgICB4U3BhY2luZztcbiAgICAgICAgbGVnZW5kWSA9XG4gICAgICAgICAgICB0aXRsZUhlaWdodCArXG4gICAgICAgICAgICByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS5oZWlnaHQgLyAyLjAgLVxuICAgICAgICAgICAgbGVnZW5kSGVpZ2h0IC8gMi4wO1xuICAgICAgICAvLyBFeHBhbmQgc3ZnXG4gICAgICAgIGhlbHBlci5leHBhbmRBcmVhKHN2ZywgbGVnZW5kV2lkdGggKyB4U3BhY2luZywgMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBjb25zb2xlLmxvZyhgbGVnZW5kWDogJHtsZWdlbmRYfSwgbGVnZW5kWTogJHtsZWdlbmRZfWApO1xuXG4gICAgbGV0IGxlZ2VuZCA9IGNoYXJ0RWxlbWVudHMuZ3JhcGhBcmVhXG4gICAgICAgIC5hcHBlbmQoXCJnXCIpXG4gICAgICAgIC5hdHRyKFwiaWRcIiwgXCJsZWdlbmRcIilcbiAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgXCJ0cmFuc2xhdGUoXCIgKyBsZWdlbmRYICsgXCIsXCIgKyBsZWdlbmRZICsgXCIpXCIpO1xuICAgIC8vIGNvbnNvbGUubG9nKCdsZWdlbmRYOiAlZCwgbGVnZW5kWTogJWQnLCBsZWdlbmRYLCBsZWdlbmRZKTtcblxuICAgIGxldCBsZWdlbmRCZyA9IGxlZ2VuZFxuICAgICAgICAuYXBwZW5kKFwicmVjdFwiKVxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci1sZWdlbmRcIilcbiAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCBsZWdlbmRXaWR0aClcbiAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgbGVnZW5kSGVpZ2h0KTtcbiAgICBpZiAoY2hhcnRJbmZvLmxlZ2VuZEJnQ29sb3IpIHtcbiAgICAgICAgbGVnZW5kQmcuc3R5bGUoXCJmaWxsXCIsIGNoYXJ0SW5mby5sZWdlbmRCZ0NvbG9yKTtcbiAgICB9XG4gICAgaWYgKGNoYXJ0SW5mby5sZWdlbmRCb3JkZXJDb2xvcikge1xuICAgICAgICBsZWdlbmRCZy5zdHlsZShcInN0cm9rZVwiLCBjaGFydEluZm8ubGVnZW5kQm9yZGVyQ29sb3IpO1xuICAgIH1cblxuICAgIGxldCBmaXJzdE1hcmtlclggPSB4U3BhY2luZztcbiAgICBsZXQgZmlyc3RNYXJrZXJZID0gbmFtZUhlaWdodDtcbiAgICBsZXQgZmlyc3RMYWJlbFggPSBmaXJzdE1hcmtlclggKyB4U3BhY2luZyArIG1hcmtlcldpZHRoOyAvLyB4U3BhY2luZyArIDIgKiB4U3BhaW5nXG4gICAgbGV0IGZpcnN0TGFiZWxZID0gZmlyc3RNYXJrZXJZO1xuXG4gICAgaWYgKGNoYXJ0SW5mby5sZWdlbmRPcmllbnRhdGlvbiA9PT0gXCJ2ZXJ0aWNhbFwiKSB7XG4gICAgICAgIGlmIChjaGFydEluZm8uR2V0R3JhcGhUeXBlKCkgPT09IEdyYXBoVHlwZS5MaW5lKSB7XG4gICAgICAgICAgICAvLyBsaW5lc1xuICAgICAgICAgICAgbGVnZW5kXG4gICAgICAgICAgICAgICAgLnNlbGVjdEFsbChcIm1hcmtlcnNcIilcbiAgICAgICAgICAgICAgICAuZGF0YShuYW1lcylcbiAgICAgICAgICAgICAgICAuZW50ZXIoKVxuICAgICAgICAgICAgICAgIC5hcHBlbmQoXCJsaW5lXCIpXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJ4MVwiLCBmaXJzdE1hcmtlclgpXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJ4MlwiLCBmaXJzdE1hcmtlclggKyBtYXJrZXJXaWR0aClcbiAgICAgICAgICAgICAgICAuYXR0cihcInkxXCIsIGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGk6IG51bWJlcikge1xuICAgICAgICAgICAgICAgICAgICBsZXQgbnVtRWxlbXNFeGNsdWRlZCA9IHhEYXRhc2V0SWRzLmZpbHRlcigoaWQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpZCA8IGk7XG4gICAgICAgICAgICAgICAgICAgIH0pLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgaSA9IGkgLSBudW1FbGVtc0V4Y2x1ZGVkO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmlyc3RNYXJrZXJZICsgaSAqIHlTcGFjaW5nO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJ5MlwiLCBmdW5jdGlvbiAobmFtZTogc3RyaW5nLCBpOiBudW1iZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG51bUVsZW1zRXhjbHVkZWQgPSB4RGF0YXNldElkcy5maWx0ZXIoKGlkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWQgPCBpO1xuICAgICAgICAgICAgICAgICAgICB9KS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGkgPSBpIC0gbnVtRWxlbXNFeGNsdWRlZDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0TWFya2VyWSArIGkgKiB5U3BhY2luZztcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5zdHlsZShcInN0cm9rZVwiLCBmdW5jdGlvbiAobmFtZTogc3RyaW5nLCBpOiBudW1iZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHhEYXRhc2V0SWRzLmluY2x1ZGVzKGkpKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoY2hhcnRJbmZvIGFzIExpbmVJbmZvKS5saW5lQ29sb3JbaV07XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIHBvaW50c1xuICAgICAgICAgICAgbGVnZW5kXG4gICAgICAgICAgICAgICAgLnNlbGVjdEFsbChcIm1hcmtlcnNcIilcbiAgICAgICAgICAgICAgICAuZGF0YShuYW1lcylcbiAgICAgICAgICAgICAgICAuZW50ZXIoKVxuICAgICAgICAgICAgICAgIC5hcHBlbmQoXCJjaXJjbGVcIilcbiAgICAgICAgICAgICAgICAuYXR0cihcImN4XCIsIGZpcnN0TWFya2VyWCArIG1hcmtlcldpZHRoIC8gMi4wKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwiY3lcIiwgZnVuY3Rpb24gKG5hbWU6IHN0cmluZywgaTogbnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBudW1FbGVtc0V4Y2x1ZGVkID0geERhdGFzZXRJZHMuZmlsdGVyKChpZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlkIDwgaTtcbiAgICAgICAgICAgICAgICAgICAgfSkubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICBpID0gaSAtIG51bUVsZW1zRXhjbHVkZWQ7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdE1hcmtlclkgKyBpICogeVNwYWNpbmc7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuYXR0cihcInJcIiwgZnVuY3Rpb24gKG5hbWU6IHN0cmluZywgaTogbnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh4RGF0YXNldElkcy5pbmNsdWRlcyhpKSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGNoYXJ0SW5mbyBhcyBMaW5lSW5mbykuc2hvd1BvaW50W2ldKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGNoYXJ0SW5mbyBhcyBMaW5lSW5mbykucG9pbnRTaXplW2ldO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAwLjA7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuc3R5bGUoXCJmaWxsXCIsIGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGk6IG51bWJlcikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoeERhdGFzZXRJZHMuaW5jbHVkZXMoaSkpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChjaGFydEluZm8gYXMgTGluZUluZm8pLnBvaW50Q29sb3JbaV07XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY2hhcnRJbmZvLkdldEdyYXBoVHlwZSgpID09PSBHcmFwaFR5cGUuQmFyKSB7XG4gICAgICAgICAgICAvLyBiYXJzXG4gICAgICAgICAgICBsZWdlbmRcbiAgICAgICAgICAgICAgICAuc2VsZWN0QWxsKFwibWFya2Vyc1wiKVxuICAgICAgICAgICAgICAgIC5kYXRhKG5hbWVzKVxuICAgICAgICAgICAgICAgIC5lbnRlcigpXG4gICAgICAgICAgICAgICAgLmFwcGVuZChcInJlY3RcIilcbiAgICAgICAgICAgICAgICAuYXR0cihcInhcIiwgZmlyc3RNYXJrZXJYKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwieVwiLCBmdW5jdGlvbiAobmFtZTogc3RyaW5nLCBpOiBudW1iZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG51bUVsZW1zRXhjbHVkZWQgPSB4RGF0YXNldElkcy5maWx0ZXIoKGlkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWQgPCBpO1xuICAgICAgICAgICAgICAgICAgICB9KS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGkgPSBpIC0gbnVtRWxlbXNFeGNsdWRlZDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0TWFya2VyWSArIGkgKiB5U3BhY2luZyAtIG5hbWVIZWlnaHQgLyAyLjA7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuYXR0cihcIndpZHRoXCIsIG1hcmtlcldpZHRoKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIG5hbWVIZWlnaHQpXG4gICAgICAgICAgICAgICAgLnN0eWxlKFwiZmlsbFwiLCBmdW5jdGlvbiAobmFtZTogc3RyaW5nLCBpOiBudW1iZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHhEYXRhc2V0SWRzLmluY2x1ZGVzKGkpKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoY2hhcnRJbmZvIGFzIEJhckluZm8pLmJhckNvbG9yW2ldO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbmFtZXNcbiAgICAgICAgbGV0IG5hbWVMYWJlbHMgPSBsZWdlbmRcbiAgICAgICAgICAgIC5zZWxlY3RBbGwoXCJsYWJlbHNcIilcbiAgICAgICAgICAgIC5kYXRhKG5hbWVzKVxuICAgICAgICAgICAgLmVudGVyKClcbiAgICAgICAgICAgIC5hcHBlbmQoXCJ0ZXh0XCIpXG4gICAgICAgICAgICAuYXR0cihcInhcIiwgZmlyc3RMYWJlbFgpXG4gICAgICAgICAgICAuYXR0cihcInlcIiwgZnVuY3Rpb24gKG5hbWU6IHN0cmluZywgaTogbnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgbGV0IG51bUVsZW1zRXhjbHVkZWQgPSB4RGF0YXNldElkcy5maWx0ZXIoKGlkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpZCA8IGk7XG4gICAgICAgICAgICAgICAgfSkubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGkgPSBpIC0gbnVtRWxlbXNFeGNsdWRlZDtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmlyc3RMYWJlbFkgKyBpICogeVNwYWNpbmc7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnRleHQoZnVuY3Rpb24gKG5hbWU6IHN0cmluZywgaTogbnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgaWYgKHhEYXRhc2V0SWRzLmluY2x1ZGVzKGkpKSByZXR1cm4gXCJcIjtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmFtZTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuc3R5bGUoXCJhbGlnbm1lbnQtYmFzZWxpbmVcIiwgXCJtaWRkbGVcIilcbiAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLWxlZ2VuZC1sYWJlbFwiKTtcblxuICAgICAgICBpZiAoY2hhcnRJbmZvLkdldEdyYXBoVHlwZSgpID09PSBHcmFwaFR5cGUuTGluZSkge1xuICAgICAgICAgICAgbmFtZUxhYmVscy5zdHlsZShcImZpbGxcIiwgZnVuY3Rpb24gKG5hbWU6IHN0cmluZywgaTogbnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgaWYgKHhEYXRhc2V0SWRzLmluY2x1ZGVzKGkpKSByZXR1cm47XG4gICAgICAgICAgICAgICAgcmV0dXJuIChjaGFydEluZm8gYXMgTGluZUluZm8pLmxpbmVDb2xvcltpXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGNoYXJ0SW5mby5HZXRHcmFwaFR5cGUoKSA9PT0gR3JhcGhUeXBlLkJhcikge1xuICAgICAgICAgICAgbmFtZUxhYmVscy5zdHlsZShcImZpbGxcIiwgZnVuY3Rpb24gKG5hbWU6IHN0cmluZywgaTogbnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgaWYgKHhEYXRhc2V0SWRzLmluY2x1ZGVzKGkpKSByZXR1cm47XG4gICAgICAgICAgICAgICAgcmV0dXJuIChjaGFydEluZm8gYXMgQmFySW5mbykuYmFyQ29sb3JbaV07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2hhcnRJbmZvLmxlZ2VuZE9yaWVudGF0aW9uID09PSBcImhvcml6b250YWxcIikge1xuICAgICAgICBpZiAoY2hhcnRJbmZvLkdldEdyYXBoVHlwZSgpID09PSBHcmFwaFR5cGUuTGluZSkge1xuICAgICAgICAgICAgLy8gbGluZXNcbiAgICAgICAgICAgIGxlZ2VuZFxuICAgICAgICAgICAgICAgIC5zZWxlY3RBbGwoXCJtYXJrZXJzXCIpXG4gICAgICAgICAgICAgICAgLmRhdGEobmFtZXMpXG4gICAgICAgICAgICAgICAgLmVudGVyKClcbiAgICAgICAgICAgICAgICAuYXBwZW5kKFwibGluZVwiKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwieDFcIiwgZnVuY3Rpb24gKG5hbWU6IHN0cmluZywgaTogbnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwb3NYID0geFNwYWNpbmc7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IFtpbmQsIHNpemVdIG9mIG5hbWVTaXplcy5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4RGF0YXNldElkcy5pbmNsdWRlcyhpbmQpKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmQgPCBpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zWCArPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJXaWR0aCArIHhTcGFjaW5nICsgc2l6ZS53aWR0aCArIHhTcGFjaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcG9zWDtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5hdHRyKFwieDJcIiwgZnVuY3Rpb24gKG5hbWU6IHN0cmluZywgaTogbnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwb3NYID0geFNwYWNpbmcgKyBtYXJrZXJXaWR0aDtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgW2luZCwgc2l6ZV0gb2YgbmFtZVNpemVzLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHhEYXRhc2V0SWRzLmluY2x1ZGVzKGluZCkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZCA8IGkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NYICs9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhTcGFjaW5nICsgc2l6ZS53aWR0aCArIHhTcGFjaW5nICsgbWFya2VyV2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwb3NYO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJ5MVwiLCBmaXJzdE1hcmtlclkpXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJ5MlwiLCBmaXJzdE1hcmtlclkpXG4gICAgICAgICAgICAgICAgLnN0eWxlKFwic3Ryb2tlXCIsIGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGk6IG51bWJlcikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoeERhdGFzZXRJZHMuaW5jbHVkZXMoaSkpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChjaGFydEluZm8gYXMgTGluZUluZm8pLmxpbmVDb2xvcltpXTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLy8gcG9pbnRzXG4gICAgICAgICAgICBsZWdlbmRcbiAgICAgICAgICAgICAgICAuc2VsZWN0QWxsKFwibWFya2Vyc1wiKVxuICAgICAgICAgICAgICAgIC5kYXRhKG5hbWVzKVxuICAgICAgICAgICAgICAgIC5lbnRlcigpXG4gICAgICAgICAgICAgICAgLmFwcGVuZChcImNpcmNsZVwiKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwiY3hcIiwgZnVuY3Rpb24gKG5hbWU6IHN0cmluZywgaTogbnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwb3NYID0geFNwYWNpbmcgKyBtYXJrZXJXaWR0aCAvIDIuMDtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgW2luZCwgc2l6ZV0gb2YgbmFtZVNpemVzLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHhEYXRhc2V0SWRzLmluY2x1ZGVzKGluZCkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZCA8IGkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NYICs9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtlcldpZHRoIC8gMi4wICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeFNwYWNpbmcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplLndpZHRoICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeFNwYWNpbmcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJXaWR0aCAvIDIuMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBvc1g7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuYXR0cihcImN5XCIsIGZpcnN0TWFya2VyWSlcbiAgICAgICAgICAgICAgICAuYXR0cihcInJcIiwgZnVuY3Rpb24gKG5hbWU6IHN0cmluZywgaTogbnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh4RGF0YXNldElkcy5pbmNsdWRlcyhpKSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGNoYXJ0SW5mbyBhcyBMaW5lSW5mbykuc2hvd1BvaW50W2ldKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGNoYXJ0SW5mbyBhcyBMaW5lSW5mbykucG9pbnRTaXplW2ldO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAwLjA7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuc3R5bGUoXCJmaWxsXCIsIGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGk6IG51bWJlcikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoeERhdGFzZXRJZHMuaW5jbHVkZXMoaSkpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChjaGFydEluZm8gYXMgTGluZUluZm8pLnBvaW50Q29sb3JbaV07XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY2hhcnRJbmZvLkdldEdyYXBoVHlwZSgpID09PSBHcmFwaFR5cGUuQmFyKSB7XG4gICAgICAgICAgICAvLyBiYXJzXG4gICAgICAgICAgICBsZWdlbmRcbiAgICAgICAgICAgICAgICAuc2VsZWN0QWxsKFwibWFya2Vyc1wiKVxuICAgICAgICAgICAgICAgIC5kYXRhKFxuICAgICAgICAgICAgICAgICAgICBuYW1lcy5maWx0ZXIoKG4sIGkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAheERhdGFzZXRJZHMuaW5jbHVkZXMoaSk7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5lbnRlcigpXG4gICAgICAgICAgICAgICAgLmFwcGVuZChcInJlY3RcIilcbiAgICAgICAgICAgICAgICAuYXR0cihcInhcIiwgZnVuY3Rpb24gKG5hbWU6IHN0cmluZywgaTogbnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwb3NYID0geFNwYWNpbmc7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IFtpbmQsIHNpemVdIG9mIG5hbWVTaXplcy5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4RGF0YXNldElkcy5pbmNsdWRlcyhpbmQpKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmQgPCBpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zWCArPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJXaWR0aCArIHhTcGFjaW5nICsgc2l6ZS53aWR0aCArIHhTcGFjaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcG9zWDtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5hdHRyKFwieVwiLCBmaXJzdE1hcmtlclkgLSBuYW1lSGVpZ2h0IC8gMi4wKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwid2lkdGhcIiwgbWFya2VyV2lkdGgpXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgbmFtZUhlaWdodClcbiAgICAgICAgICAgICAgICAuc3R5bGUoXCJmaWxsXCIsIGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGk6IG51bWJlcikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoeERhdGFzZXRJZHMuaW5jbHVkZXMoaSkpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChjaGFydEluZm8gYXMgQmFySW5mbykuYmFyQ29sb3JbaV07XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBuYW1lc1xuICAgICAgICBsZXQgbmFtZUxhYmVscyA9IGxlZ2VuZFxuICAgICAgICAgICAgLnNlbGVjdEFsbChcImxhYmVsc1wiKVxuICAgICAgICAgICAgLmRhdGEobmFtZXMpXG4gICAgICAgICAgICAuZW50ZXIoKVxuICAgICAgICAgICAgLmFwcGVuZChcInRleHRcIilcbiAgICAgICAgICAgIC5hdHRyKFwieFwiLCBmdW5jdGlvbiAobmFtZTogc3RyaW5nLCBpOiBudW1iZXIpIHtcbiAgICAgICAgICAgICAgICBsZXQgcG9zWCA9IHhTcGFjaW5nICsgbWFya2VyV2lkdGggKyB4U3BhY2luZztcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBbaW5kLCBzaXplXSBvZiBuYW1lU2l6ZXMuZW50cmllcygpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh4RGF0YXNldElkcy5pbmNsdWRlcyhpbmQpKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZCA8IGkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc1ggKz0gc2l6ZS53aWR0aCArIHhTcGFjaW5nICsgbWFya2VyV2lkdGggKyB4U3BhY2luZztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBwb3NYO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hdHRyKFwieVwiLCBmaXJzdExhYmVsWSlcbiAgICAgICAgICAgIC50ZXh0KGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGk6IG51bWJlcikge1xuICAgICAgICAgICAgICAgIGlmICh4RGF0YXNldElkcy5pbmNsdWRlcyhpKSkgcmV0dXJuIFwiXCI7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5hbWU7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnN0eWxlKFwiYWxpZ25tZW50LWJhc2VsaW5lXCIsIFwibWlkZGxlXCIpXG4gICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci1sZWdlbmQtbGFiZWxcIik7XG5cbiAgICAgICAgaWYgKGNoYXJ0SW5mby5HZXRHcmFwaFR5cGUoKSA9PT0gR3JhcGhUeXBlLkxpbmUpIHtcbiAgICAgICAgICAgIG5hbWVMYWJlbHMuc3R5bGUoXCJmaWxsXCIsIGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGk6IG51bWJlcikge1xuICAgICAgICAgICAgICAgIGlmICh4RGF0YXNldElkcy5pbmNsdWRlcyhpKSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIHJldHVybiAoY2hhcnRJbmZvIGFzIExpbmVJbmZvKS5saW5lQ29sb3JbaV07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChjaGFydEluZm8uR2V0R3JhcGhUeXBlKCkgPT09IEdyYXBoVHlwZS5CYXIpIHtcbiAgICAgICAgICAgIG5hbWVMYWJlbHMuc3R5bGUoXCJmaWxsXCIsIGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGk6IG51bWJlcikge1xuICAgICAgICAgICAgICAgIGlmICh4RGF0YXNldElkcy5pbmNsdWRlcyhpKSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIHJldHVybiAoY2hhcnRJbmZvIGFzIEJhckluZm8pLmJhckNvbG9yW2ldO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIHJlbmRlclRpdGxlKFxuICAgIGNoYXJ0RWxlbWVudHM6IENoYXJ0RWxlbWVudHMsXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mbyxcbiAgICBjaGFydEluZm86IENvbW1vbkNoYXJ0SW5mb1xuKSB7XG4gICAgLy8gY29uc29sZS5sb2coXCJyZW5kZXJUaXRsZVwiKVxuICAgIC8vIHVuZGVyIGdyYXBoQXJlYVxuXG4gICAgaWYgKCFyZW5kZXJJbmZvIHx8ICFjaGFydEluZm8pIHJldHVybjtcblxuICAgIGlmICghY2hhcnRJbmZvLnRpdGxlKSByZXR1cm47XG4gICAgbGV0IHRpdGxlU2l6ZSA9IGhlbHBlci5tZWFzdXJlVGV4dFNpemUoY2hhcnRJbmZvLnRpdGxlLCBcInRyYWNrZXItdGl0bGVcIik7XG5cbiAgICAvLyBBcHBlbmQgdGl0bGVcbiAgICBsZXQgdGl0bGUgPSBjaGFydEVsZW1lbnRzLmdyYXBoQXJlYVxuICAgICAgICAuYXBwZW5kKFwidGV4dFwiKVxuICAgICAgICAudGV4dChjaGFydEluZm8udGl0bGUpIC8vIHBpdm90IGF0IGNlbnRlclxuICAgICAgICAuYXR0cihcImlkXCIsIFwidGl0bGVcIilcbiAgICAgICAgLmF0dHIoXG4gICAgICAgICAgICBcInRyYW5zZm9ybVwiLFxuICAgICAgICAgICAgXCJ0cmFuc2xhdGUoXCIgK1xuICAgICAgICAgICAgICAgIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoIC8gMi4wICtcbiAgICAgICAgICAgICAgICBcIixcIiArXG4gICAgICAgICAgICAgICAgdGl0bGVTaXplLmhlaWdodCAvIDIuMCArXG4gICAgICAgICAgICAgICAgXCIpXCJcbiAgICAgICAgKVxuICAgICAgICAuYXR0cihcImhlaWdodFwiLCB0aXRsZVNpemUuaGVpZ2h0KSAvLyBmb3IgbGF0ZXIgdXNlXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLXRpdGxlXCIpO1xuICAgIGNoYXJ0RWxlbWVudHNbXCJ0aXRsZVwiXSA9IHRpdGxlO1xuXG4gICAgLy8gRXhwYW5kIHBhcmVudCBhcmVhc1xuICAgIGhlbHBlci5leHBhbmRBcmVhKGNoYXJ0RWxlbWVudHMuc3ZnLCAwLCB0aXRsZVNpemUuaGVpZ2h0KTtcbiAgICBoZWxwZXIuZXhwYW5kQXJlYShjaGFydEVsZW1lbnRzLmdyYXBoQXJlYSwgMCwgdGl0bGVTaXplLmhlaWdodCk7XG5cbiAgICAvLyBNb3ZlIHNpYmxpbmcgYXJlYXNcbiAgICBoZWxwZXIubW92ZUFyZWEoY2hhcnRFbGVtZW50cy5kYXRhQXJlYSwgMCwgdGl0bGVTaXplLmhlaWdodCk7XG5cbiAgICByZXR1cm47XG59XG5cbmZ1bmN0aW9uIHNldENoYXJ0U2NhbGUoXG4gICAgX2NhbnZhczogSFRNTEVsZW1lbnQsXG4gICAgY2hhcnRFbGVtZW50czogQ2hhcnRFbGVtZW50cyxcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvXG4pIHtcbiAgICBsZXQgY2FudmFzID0gZDMuc2VsZWN0KF9jYW52YXMpO1xuICAgIGxldCBzdmcgPSBjaGFydEVsZW1lbnRzLnN2ZztcbiAgICBsZXQgc3ZnV2lkdGggPSBwYXJzZUZsb2F0KHN2Zy5hdHRyKFwid2lkdGhcIikpO1xuICAgIGxldCBzdmdIZWlnaHQgPSBwYXJzZUZsb2F0KHN2Zy5hdHRyKFwiaGVpZ2h0XCIpKTtcbiAgICBzdmcuYXR0cihcIndpZHRoXCIsIG51bGwpXG4gICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIG51bGwpXG4gICAgICAgIC5hdHRyKFwidmlld0JveFwiLCBgMCAwICR7c3ZnV2lkdGh9ICR7c3ZnSGVpZ2h0fWApXG4gICAgICAgIC5hdHRyKFwicHJlc2VydmVBc3BlY3RSYXRpb1wiLCBcInhNaWRZTWlkIG1lZXRcIik7XG5cbiAgICBpZiAocmVuZGVySW5mby5maXRQYW5lbFdpZHRoKSB7XG4gICAgICAgIGNhbnZhcy5zdHlsZShcIndpZHRoXCIsIFwiMTAwJVwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjYW52YXMuc3R5bGUoXG4gICAgICAgICAgICBcIndpZHRoXCIsXG4gICAgICAgICAgICAoc3ZnV2lkdGggKiByZW5kZXJJbmZvLmZpeGVkU2NhbGUpLnRvU3RyaW5nKCkgKyBcInB4XCJcbiAgICAgICAgKTtcbiAgICAgICAgY2FudmFzLnN0eWxlKFxuICAgICAgICAgICAgXCJoZWlnaHRcIixcbiAgICAgICAgICAgIChzdmdIZWlnaHQgKiByZW5kZXJJbmZvLmZpeGVkU2NhbGUpLnRvU3RyaW5nKCkgKyBcInB4XCJcbiAgICAgICAgKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUFyZWFzKFxuICAgIGNhbnZhczogSFRNTEVsZW1lbnQsXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mb1xuKTogQ2hhcnRFbGVtZW50cyB7XG4gICAgbGV0IGNoYXJ0RWxlbWVudHM6IENoYXJ0RWxlbWVudHMgPSB7fTtcbiAgICAvLyB3aG9sZSBhcmVhIGZvciBwbG90dGluZywgaW5jbHVkZXMgbWFyZ2luc1xuICAgIGxldCBzdmcgPSBkM1xuICAgICAgICAuc2VsZWN0KGNhbnZhcylcbiAgICAgICAgLmFwcGVuZChcInN2Z1wiKVxuICAgICAgICAuYXR0cihcImlkXCIsIFwic3ZnXCIpXG4gICAgICAgIC5hdHRyKFxuICAgICAgICAgICAgXCJ3aWR0aFwiLFxuICAgICAgICAgICAgcmVuZGVySW5mby5kYXRhQXJlYVNpemUud2lkdGggK1xuICAgICAgICAgICAgICAgIHJlbmRlckluZm8ubWFyZ2luLmxlZnQgK1xuICAgICAgICAgICAgICAgIHJlbmRlckluZm8ubWFyZ2luLnJpZ2h0XG4gICAgICAgIClcbiAgICAgICAgLmF0dHIoXG4gICAgICAgICAgICBcImhlaWdodFwiLFxuICAgICAgICAgICAgcmVuZGVySW5mby5kYXRhQXJlYVNpemUuaGVpZ2h0ICtcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLm1hcmdpbi50b3AgK1xuICAgICAgICAgICAgICAgIHJlbmRlckluZm8ubWFyZ2luLmJvdHRvbVxuICAgICAgICApO1xuICAgIGNoYXJ0RWxlbWVudHNbXCJzdmdcIl0gPSBzdmc7XG5cbiAgICAvLyBncmFwaEFyZWEsIGluY2x1ZGVzIGNoYXJ0QXJlYSwgdGl0bGUsIGxlZ2VuZFxuICAgIGxldCBncmFwaEFyZWEgPSBzdmdcbiAgICAgICAgLmFwcGVuZChcImdcIilcbiAgICAgICAgLmF0dHIoXCJpZFwiLCBcImdyYXBoQXJlYVwiKVxuICAgICAgICAuYXR0cihcbiAgICAgICAgICAgIFwidHJhbnNmb3JtXCIsXG4gICAgICAgICAgICBcInRyYW5zbGF0ZShcIiArXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5tYXJnaW4ubGVmdCArXG4gICAgICAgICAgICAgICAgXCIsXCIgK1xuICAgICAgICAgICAgICAgIHJlbmRlckluZm8ubWFyZ2luLnRvcCArXG4gICAgICAgICAgICAgICAgXCIpXCJcbiAgICAgICAgKVxuICAgICAgICAuYXR0cihcIndpZHRoXCIsIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoICsgcmVuZGVySW5mby5tYXJnaW4ucmlnaHQpXG4gICAgICAgIC5hdHRyKFxuICAgICAgICAgICAgXCJoZWlnaHRcIixcbiAgICAgICAgICAgIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLmhlaWdodCArIHJlbmRlckluZm8ubWFyZ2luLmJvdHRvbVxuICAgICAgICApO1xuICAgIGNoYXJ0RWxlbWVudHNbXCJncmFwaEFyZWFcIl0gPSBncmFwaEFyZWE7XG5cbiAgICAvLyBkYXRhQXJlYSwgdW5kZXIgZ3JhcGhBcmVhLCBpbmNsdWRlcyBwb2ludHMsIGxpbmVzLCB4QXhpcywgeUF4aXNcbiAgICBsZXQgZGF0YUFyZWEgPSBncmFwaEFyZWFcbiAgICAgICAgLmFwcGVuZChcImdcIilcbiAgICAgICAgLmF0dHIoXCJpZFwiLCBcImRhdGFBcmVhXCIpXG4gICAgICAgIC5hdHRyKFwid2lkdGhcIiwgcmVuZGVySW5mby5kYXRhQXJlYVNpemUud2lkdGgpXG4gICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLmhlaWdodCk7XG4gICAgY2hhcnRFbGVtZW50c1tcImRhdGFBcmVhXCJdID0gZGF0YUFyZWE7XG5cbiAgICByZXR1cm4gY2hhcnRFbGVtZW50cztcbn1cblxuZnVuY3Rpb24gcmVuZGVyTGluZUNoYXJ0KFxuICAgIGNhbnZhczogSFRNTEVsZW1lbnQsXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mbyxcbiAgICBsaW5lSW5mbzogTGluZUluZm9cbikge1xuICAgIC8vIGNvbnNvbGUubG9nKFwicmVuZGVyTGluZUNoYXJ0XCIpO1xuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8pO1xuXG4gICAgaWYgKCFyZW5kZXJJbmZvIHx8ICFsaW5lSW5mbykgcmV0dXJuO1xuXG4gICAgbGV0IGNoYXJ0RWxlbWVudHMgPSBjcmVhdGVBcmVhcyhjYW52YXMsIHJlbmRlckluZm8pO1xuXG4gICAgcmVuZGVyVGl0bGUoY2hhcnRFbGVtZW50cywgcmVuZGVySW5mbywgbGluZUluZm8pO1xuXG4gICAgcmVuZGVyWEF4aXMoY2hhcnRFbGVtZW50cywgcmVuZGVySW5mbywgbGluZUluZm8pO1xuICAgIC8vIGNvbnNvbGUubG9nKGNoYXJ0RWxlbWVudHMueEF4aXMpO1xuICAgIC8vIGNvbnNvbGUubG9nKGNoYXJ0RWxlbWVudHMueFNjYWxlKTtcblxuICAgIGxldCBkYXRhc2V0T25MZWZ0WUF4aXMgPSBbXTtcbiAgICBsZXQgZGF0YXNldE9uUmlnaHRZQXhpcyA9IFtdO1xuICAgIGxldCB4RGF0YXNldElkcyA9IHJlbmRlckluZm8uZGF0YXNldHMuZ2V0WERhdGFzZXRJZHMoKTtcbiAgICBmb3IgKGxldCBpbmQgPSAwOyBpbmQgPCBsaW5lSW5mby55QXhpc0xvY2F0aW9uLmxlbmd0aDsgaW5kKyspIHtcbiAgICAgICAgaWYgKHhEYXRhc2V0SWRzLmluY2x1ZGVzKGluZCkpIGNvbnRpbnVlO1xuICAgICAgICBsZXQgeUF4aXNMb2NhdGlvbiA9IGxpbmVJbmZvLnlBeGlzTG9jYXRpb25baW5kXTtcbiAgICAgICAgaWYgKHlBeGlzTG9jYXRpb24udG9Mb3dlckNhc2UoKSA9PT0gXCJsZWZ0XCIpIHtcbiAgICAgICAgICAgIGRhdGFzZXRPbkxlZnRZQXhpcy5wdXNoKGluZCk7XG4gICAgICAgIH0gZWxzZSBpZiAoeUF4aXNMb2NhdGlvbi50b0xvY2FsZUxvd2VyQ2FzZSgpID09PSBcInJpZ2h0XCIpIHtcbiAgICAgICAgICAgIGRhdGFzZXRPblJpZ2h0WUF4aXMucHVzaChpbmQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHJldFJlbmRlckxlZnRZQXhpcyA9IHJlbmRlcllBeGlzKFxuICAgICAgICBjaGFydEVsZW1lbnRzLFxuICAgICAgICByZW5kZXJJbmZvLFxuICAgICAgICBsaW5lSW5mbyxcbiAgICAgICAgXCJsZWZ0XCIsXG4gICAgICAgIGRhdGFzZXRPbkxlZnRZQXhpc1xuICAgICk7XG4gICAgaWYgKHR5cGVvZiByZXRSZW5kZXJMZWZ0WUF4aXMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIHJldFJlbmRlckxlZnRZQXhpcztcbiAgICB9XG5cbiAgICBpZiAoY2hhcnRFbGVtZW50cy5sZWZ0WUF4aXMgJiYgY2hhcnRFbGVtZW50cy5sZWZ0WVNjYWxlKSB7XG4gICAgICAgIGZvciAobGV0IGRhdGFzZXRJZCBvZiBkYXRhc2V0T25MZWZ0WUF4aXMpIHtcbiAgICAgICAgICAgIGxldCBkYXRhc2V0ID0gcmVuZGVySW5mby5kYXRhc2V0cy5nZXREYXRhc2V0QnlJZChkYXRhc2V0SWQpO1xuICAgICAgICAgICAgaWYgKGRhdGFzZXQuZ2V0UXVlcnkoKS51c2VkQXNYRGF0YXNldCkgY29udGludWU7XG5cbiAgICAgICAgICAgIHJlbmRlckxpbmUoY2hhcnRFbGVtZW50cywgcmVuZGVySW5mbywgbGluZUluZm8sIGRhdGFzZXQsIFwibGVmdFwiKTtcblxuICAgICAgICAgICAgcmVuZGVyUG9pbnRzKGNoYXJ0RWxlbWVudHMsIHJlbmRlckluZm8sIGxpbmVJbmZvLCBkYXRhc2V0LCBcImxlZnRcIik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgcmV0UmVuZGVyUmlnaHRZQXhpcyA9IHJlbmRlcllBeGlzKFxuICAgICAgICBjaGFydEVsZW1lbnRzLFxuICAgICAgICByZW5kZXJJbmZvLFxuICAgICAgICBsaW5lSW5mbyxcbiAgICAgICAgXCJyaWdodFwiLFxuICAgICAgICBkYXRhc2V0T25SaWdodFlBeGlzXG4gICAgKTtcbiAgICBpZiAodHlwZW9mIHJldFJlbmRlclJpZ2h0WUF4aXMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIHJldFJlbmRlclJpZ2h0WUF4aXM7XG4gICAgfVxuXG4gICAgaWYgKGNoYXJ0RWxlbWVudHMucmlnaHRZQXhpcyAmJiBjaGFydEVsZW1lbnRzLnJpZ2h0WVNjYWxlKSB7XG4gICAgICAgIGZvciAobGV0IGRhdGFzZXRJZCBvZiBkYXRhc2V0T25SaWdodFlBeGlzKSB7XG4gICAgICAgICAgICBsZXQgZGF0YXNldCA9IHJlbmRlckluZm8uZGF0YXNldHMuZ2V0RGF0YXNldEJ5SWQoZGF0YXNldElkKTtcbiAgICAgICAgICAgIGlmIChkYXRhc2V0LmdldFF1ZXJ5KCkudXNlZEFzWERhdGFzZXQpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICByZW5kZXJMaW5lKGNoYXJ0RWxlbWVudHMsIHJlbmRlckluZm8sIGxpbmVJbmZvLCBkYXRhc2V0LCBcInJpZ2h0XCIpO1xuXG4gICAgICAgICAgICByZW5kZXJQb2ludHMoY2hhcnRFbGVtZW50cywgcmVuZGVySW5mbywgbGluZUluZm8sIGRhdGFzZXQsIFwicmlnaHRcIik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobGluZUluZm8uc2hvd0xlZ2VuZCkge1xuICAgICAgICByZW5kZXJMZWdlbmQoY2hhcnRFbGVtZW50cywgcmVuZGVySW5mbywgbGluZUluZm8pO1xuICAgIH1cblxuICAgIHNldENoYXJ0U2NhbGUoY2FudmFzLCBjaGFydEVsZW1lbnRzLCByZW5kZXJJbmZvKTtcbn1cblxuZnVuY3Rpb24gcmVuZGVyQmFyQ2hhcnQoXG4gICAgY2FudmFzOiBIVE1MRWxlbWVudCxcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvLFxuICAgIGJhckluZm86IEJhckluZm9cbikge1xuICAgIC8vIGNvbnNvbGUubG9nKFwicmVuZGVyQmFyQ2hhcnRcIik7XG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mbyk7XG4gICAgaWYgKCFyZW5kZXJJbmZvIHx8ICFiYXJJbmZvKSByZXR1cm47XG5cbiAgICBsZXQgY2hhcnRFbGVtZW50cyA9IGNyZWF0ZUFyZWFzKGNhbnZhcywgcmVuZGVySW5mbyk7XG5cbiAgICByZW5kZXJUaXRsZShjaGFydEVsZW1lbnRzLCByZW5kZXJJbmZvLCBiYXJJbmZvKTtcblxuICAgIHJlbmRlclhBeGlzKGNoYXJ0RWxlbWVudHMsIHJlbmRlckluZm8sIGJhckluZm8pO1xuXG4gICAgbGV0IGRhdGFzZXRPbkxlZnRZQXhpcyA9IFtdO1xuICAgIGxldCBkYXRhc2V0T25SaWdodFlBeGlzID0gW107XG4gICAgbGV0IHhEYXRhc2V0SWRzID0gcmVuZGVySW5mby5kYXRhc2V0cy5nZXRYRGF0YXNldElkcygpO1xuICAgIGZvciAobGV0IGluZCA9IDA7IGluZCA8IGJhckluZm8ueUF4aXNMb2NhdGlvbi5sZW5ndGg7IGluZCsrKSB7XG4gICAgICAgIGlmICh4RGF0YXNldElkcy5pbmNsdWRlcyhpbmQpKSBjb250aW51ZTtcbiAgICAgICAgbGV0IHlBeGlzTG9jYXRpb24gPSBiYXJJbmZvLnlBeGlzTG9jYXRpb25baW5kXTtcbiAgICAgICAgaWYgKHlBeGlzTG9jYXRpb24udG9Mb3dlckNhc2UoKSA9PT0gXCJsZWZ0XCIpIHtcbiAgICAgICAgICAgIGRhdGFzZXRPbkxlZnRZQXhpcy5wdXNoKGluZCk7XG4gICAgICAgIH0gZWxzZSBpZiAoeUF4aXNMb2NhdGlvbi50b0xvY2FsZUxvd2VyQ2FzZSgpID09PSBcInJpZ2h0XCIpIHtcbiAgICAgICAgICAgIC8vIHJpZ2h0XG4gICAgICAgICAgICBkYXRhc2V0T25SaWdodFlBeGlzLnB1c2goaW5kKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGxldCByZXRSZW5kZXJMZWZ0WUF4aXMgPSByZW5kZXJZQXhpcyhcbiAgICAgICAgY2hhcnRFbGVtZW50cyxcbiAgICAgICAgcmVuZGVySW5mbyxcbiAgICAgICAgYmFySW5mbyxcbiAgICAgICAgXCJsZWZ0XCIsXG4gICAgICAgIGRhdGFzZXRPbkxlZnRZQXhpc1xuICAgICk7XG4gICAgaWYgKHR5cGVvZiByZXRSZW5kZXJMZWZ0WUF4aXMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIHJldFJlbmRlckxlZnRZQXhpcztcbiAgICB9XG5cbiAgICBsZXQgdG90YWxOdW1PZkJhclNldHMgPVxuICAgICAgICBkYXRhc2V0T25MZWZ0WUF4aXMubGVuZ3RoICsgZGF0YXNldE9uUmlnaHRZQXhpcy5sZW5ndGg7XG4gICAgbGV0IGN1cnJCYXJTZXQgPSAwO1xuXG4gICAgaWYgKGNoYXJ0RWxlbWVudHMubGVmdFlBeGlzICYmIGNoYXJ0RWxlbWVudHMubGVmdFlTY2FsZSkge1xuICAgICAgICBmb3IgKGxldCBkYXRhc2V0SWQgb2YgZGF0YXNldE9uTGVmdFlBeGlzKSB7XG4gICAgICAgICAgICBsZXQgZGF0YXNldCA9IHJlbmRlckluZm8uZGF0YXNldHMuZ2V0RGF0YXNldEJ5SWQoZGF0YXNldElkKTtcbiAgICAgICAgICAgIGlmIChkYXRhc2V0LmdldFF1ZXJ5KCkudXNlZEFzWERhdGFzZXQpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICByZW5kZXJCYXIoXG4gICAgICAgICAgICAgICAgY2hhcnRFbGVtZW50cyxcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLFxuICAgICAgICAgICAgICAgIGJhckluZm8sXG4gICAgICAgICAgICAgICAgZGF0YXNldCxcbiAgICAgICAgICAgICAgICBcImxlZnRcIixcbiAgICAgICAgICAgICAgICBjdXJyQmFyU2V0LFxuICAgICAgICAgICAgICAgIHRvdGFsTnVtT2ZCYXJTZXRzXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBjdXJyQmFyU2V0Kys7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgcmV0UmVuZGVyUmlnaHRZQXhpcyA9IHJlbmRlcllBeGlzKFxuICAgICAgICBjaGFydEVsZW1lbnRzLFxuICAgICAgICByZW5kZXJJbmZvLFxuICAgICAgICBiYXJJbmZvLFxuICAgICAgICBcInJpZ2h0XCIsXG4gICAgICAgIGRhdGFzZXRPblJpZ2h0WUF4aXNcbiAgICApO1xuICAgIGlmICh0eXBlb2YgcmV0UmVuZGVyUmlnaHRZQXhpcyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4gcmV0UmVuZGVyUmlnaHRZQXhpcztcbiAgICB9XG5cbiAgICBpZiAoY2hhcnRFbGVtZW50cy5yaWdodFlBeGlzICYmIGNoYXJ0RWxlbWVudHMucmlnaHRZU2NhbGUpIHtcbiAgICAgICAgZm9yIChsZXQgZGF0YXNldElkIG9mIGRhdGFzZXRPblJpZ2h0WUF4aXMpIHtcbiAgICAgICAgICAgIGxldCBkYXRhc2V0ID0gcmVuZGVySW5mby5kYXRhc2V0cy5nZXREYXRhc2V0QnlJZChkYXRhc2V0SWQpO1xuICAgICAgICAgICAgaWYgKGRhdGFzZXQuZ2V0UXVlcnkoKS51c2VkQXNYRGF0YXNldCkgY29udGludWU7XG5cbiAgICAgICAgICAgIHJlbmRlckJhcihcbiAgICAgICAgICAgICAgICBjaGFydEVsZW1lbnRzLFxuICAgICAgICAgICAgICAgIHJlbmRlckluZm8sXG4gICAgICAgICAgICAgICAgYmFySW5mbyxcbiAgICAgICAgICAgICAgICBkYXRhc2V0LFxuICAgICAgICAgICAgICAgIFwicmlnaHRcIixcbiAgICAgICAgICAgICAgICBjdXJyQmFyU2V0LFxuICAgICAgICAgICAgICAgIHRvdGFsTnVtT2ZCYXJTZXRzXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBjdXJyQmFyU2V0Kys7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYmFySW5mby5zaG93TGVnZW5kKSB7XG4gICAgICAgIHJlbmRlckxlZ2VuZChjaGFydEVsZW1lbnRzLCByZW5kZXJJbmZvLCBiYXJJbmZvKTtcbiAgICB9XG5cbiAgICBzZXRDaGFydFNjYWxlKGNhbnZhcywgY2hhcnRFbGVtZW50cywgcmVuZGVySW5mbyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJFcnJvck1lc3NhZ2UoY2FudmFzOiBIVE1MRWxlbWVudCwgZXJyb3JNZXNzYWdlOiBzdHJpbmcpIHtcbiAgICAvLyBSZW1vdmUgZ3JhcGggbm90IGNvbXBsZXRlZFxuICAgIGxldCBncmFwaCA9IGQzLnNlbGVjdChjYW52YXMpLnNlbGVjdChcIiNzdmdcIikucmVtb3ZlKCk7XG5cbiAgICBsZXQgc3ZnID0gZDNcbiAgICAgICAgLnNlbGVjdChjYW52YXMpXG4gICAgICAgIC5hcHBlbmQoXCJkaXZcIilcbiAgICAgICAgLnRleHQoZXJyb3JNZXNzYWdlKVxuICAgICAgICAuc3R5bGUoXCJiYWNrZ3JvdW5kLWNvbG9yXCIsIFwid2hpdGVcIilcbiAgICAgICAgLnN0eWxlKFwibWFyZ2luLWJvdHRvbVwiLCBcIjIwcHhcIilcbiAgICAgICAgLnN0eWxlKFwicGFkZGluZ1wiLCBcIjEwcHhcIilcbiAgICAgICAgLnN0eWxlKFwiY29sb3JcIiwgXCJyZWRcIik7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBleHRlbnQodmFsdWVzLCB2YWx1ZW9mKSB7XG4gIGxldCBtaW47XG4gIGxldCBtYXg7XG4gIGlmICh2YWx1ZW9mID09PSB1bmRlZmluZWQpIHtcbiAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgaWYgKG1pbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKHZhbHVlID49IHZhbHVlKSBtaW4gPSBtYXggPSB2YWx1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAobWluID4gdmFsdWUpIG1pbiA9IHZhbHVlO1xuICAgICAgICAgIGlmIChtYXggPCB2YWx1ZSkgbWF4ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbGV0IGluZGV4ID0gLTE7XG4gICAgZm9yIChsZXQgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICBpZiAoKHZhbHVlID0gdmFsdWVvZih2YWx1ZSwgKytpbmRleCwgdmFsdWVzKSkgIT0gbnVsbCkge1xuICAgICAgICBpZiAobWluID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAodmFsdWUgPj0gdmFsdWUpIG1pbiA9IG1heCA9IHZhbHVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChtaW4gPiB2YWx1ZSkgbWluID0gdmFsdWU7XG4gICAgICAgICAgaWYgKG1heCA8IHZhbHVlKSBtYXggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gW21pbiwgbWF4XTtcbn1cbiIsImltcG9ydCBhcnJheSBmcm9tIFwiLi9hcnJheS5qc1wiO1xuaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuL2NvbnN0YW50LmpzXCI7XG5pbXBvcnQgY3VydmVMaW5lYXIgZnJvbSBcIi4vY3VydmUvbGluZWFyLmpzXCI7XG5pbXBvcnQge3dpdGhQYXRofSBmcm9tIFwiLi9wYXRoLmpzXCI7XG5pbXBvcnQge3ggYXMgcG9pbnRYLCB5IGFzIHBvaW50WX0gZnJvbSBcIi4vcG9pbnQuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCwgeSkge1xuICB2YXIgZGVmaW5lZCA9IGNvbnN0YW50KHRydWUpLFxuICAgICAgY29udGV4dCA9IG51bGwsXG4gICAgICBjdXJ2ZSA9IGN1cnZlTGluZWFyLFxuICAgICAgb3V0cHV0ID0gbnVsbCxcbiAgICAgIHBhdGggPSB3aXRoUGF0aChsaW5lKTtcblxuICB4ID0gdHlwZW9mIHggPT09IFwiZnVuY3Rpb25cIiA/IHggOiAoeCA9PT0gdW5kZWZpbmVkKSA/IHBvaW50WCA6IGNvbnN0YW50KHgpO1xuICB5ID0gdHlwZW9mIHkgPT09IFwiZnVuY3Rpb25cIiA/IHkgOiAoeSA9PT0gdW5kZWZpbmVkKSA/IHBvaW50WSA6IGNvbnN0YW50KHkpO1xuXG4gIGZ1bmN0aW9uIGxpbmUoZGF0YSkge1xuICAgIHZhciBpLFxuICAgICAgICBuID0gKGRhdGEgPSBhcnJheShkYXRhKSkubGVuZ3RoLFxuICAgICAgICBkLFxuICAgICAgICBkZWZpbmVkMCA9IGZhbHNlLFxuICAgICAgICBidWZmZXI7XG5cbiAgICBpZiAoY29udGV4dCA9PSBudWxsKSBvdXRwdXQgPSBjdXJ2ZShidWZmZXIgPSBwYXRoKCkpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8PSBuOyArK2kpIHtcbiAgICAgIGlmICghKGkgPCBuICYmIGRlZmluZWQoZCA9IGRhdGFbaV0sIGksIGRhdGEpKSA9PT0gZGVmaW5lZDApIHtcbiAgICAgICAgaWYgKGRlZmluZWQwID0gIWRlZmluZWQwKSBvdXRwdXQubGluZVN0YXJ0KCk7XG4gICAgICAgIGVsc2Ugb3V0cHV0LmxpbmVFbmQoKTtcbiAgICAgIH1cbiAgICAgIGlmIChkZWZpbmVkMCkgb3V0cHV0LnBvaW50KCt4KGQsIGksIGRhdGEpLCAreShkLCBpLCBkYXRhKSk7XG4gICAgfVxuXG4gICAgaWYgKGJ1ZmZlcikgcmV0dXJuIG91dHB1dCA9IG51bGwsIGJ1ZmZlciArIFwiXCIgfHwgbnVsbDtcbiAgfVxuXG4gIGxpbmUueCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh4ID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGxpbmUpIDogeDtcbiAgfTtcblxuICBsaW5lLnkgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoeSA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBsaW5lKSA6IHk7XG4gIH07XG5cbiAgbGluZS5kZWZpbmVkID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGRlZmluZWQgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCEhXyksIGxpbmUpIDogZGVmaW5lZDtcbiAgfTtcblxuICBsaW5lLmN1cnZlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGN1cnZlID0gXywgY29udGV4dCAhPSBudWxsICYmIChvdXRwdXQgPSBjdXJ2ZShjb250ZXh0KSksIGxpbmUpIDogY3VydmU7XG4gIH07XG5cbiAgbGluZS5jb250ZXh0ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKF8gPT0gbnVsbCA/IGNvbnRleHQgPSBvdXRwdXQgPSBudWxsIDogb3V0cHV0ID0gY3VydmUoY29udGV4dCA9IF8pLCBsaW5lKSA6IGNvbnRleHQ7XG4gIH07XG5cbiAgcmV0dXJuIGxpbmU7XG59XG4iLCJpbXBvcnQgc291cmNlRXZlbnQgZnJvbSBcIi4vc291cmNlRXZlbnQuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oZXZlbnQsIG5vZGUpIHtcbiAgZXZlbnQgPSBzb3VyY2VFdmVudChldmVudCk7XG4gIGlmIChub2RlID09PSB1bmRlZmluZWQpIG5vZGUgPSBldmVudC5jdXJyZW50VGFyZ2V0O1xuICBpZiAobm9kZSkge1xuICAgIHZhciBzdmcgPSBub2RlLm93bmVyU1ZHRWxlbWVudCB8fCBub2RlO1xuICAgIGlmIChzdmcuY3JlYXRlU1ZHUG9pbnQpIHtcbiAgICAgIHZhciBwb2ludCA9IHN2Zy5jcmVhdGVTVkdQb2ludCgpO1xuICAgICAgcG9pbnQueCA9IGV2ZW50LmNsaWVudFgsIHBvaW50LnkgPSBldmVudC5jbGllbnRZO1xuICAgICAgcG9pbnQgPSBwb2ludC5tYXRyaXhUcmFuc2Zvcm0obm9kZS5nZXRTY3JlZW5DVE0oKS5pbnZlcnNlKCkpO1xuICAgICAgcmV0dXJuIFtwb2ludC54LCBwb2ludC55XTtcbiAgICB9XG4gICAgaWYgKG5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KSB7XG4gICAgICB2YXIgcmVjdCA9IG5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICByZXR1cm4gW2V2ZW50LmNsaWVudFggLSByZWN0LmxlZnQgLSBub2RlLmNsaWVudExlZnQsIGV2ZW50LmNsaWVudFkgLSByZWN0LnRvcCAtIG5vZGUuY2xpZW50VG9wXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFtldmVudC5wYWdlWCwgZXZlbnQucGFnZVldO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oZXZlbnQpIHtcbiAgbGV0IHNvdXJjZUV2ZW50O1xuICB3aGlsZSAoc291cmNlRXZlbnQgPSBldmVudC5zb3VyY2VFdmVudCkgZXZlbnQgPSBzb3VyY2VFdmVudDtcbiAgcmV0dXJuIGV2ZW50O1xufVxuIiwiaW1wb3J0IFRyYWNrZXIgZnJvbSBcIi4vbWFpblwiO1xuaW1wb3J0IHtcbiAgICBTZWFyY2hUeXBlLFxuICAgIEJhckluZm8sXG4gICAgQ29tbW9uQ2hhcnRJbmZvLFxuICAgIFF1ZXJ5LFxuICAgIFJlbmRlckluZm8sXG4gICAgU3VtbWFyeUluZm8sXG4gICAgTWFyZ2luLFxuICAgIEdyYXBoVHlwZSxcbiAgICBMaW5lSW5mbyxcbiAgICBQaWVJbmZvLFxuICAgIE1vbnRoSW5mbyxcbiAgICBIZWF0bWFwSW5mbyxcbiAgICBCdWxsZXRJbmZvLFxuICAgIERhdGFzZXQsXG4gICAgQ3VzdG9tRGF0YXNldEluZm8sXG4gICAgQXNwZWN0UmF0aW8sXG59IGZyb20gXCIuL2RhdGFcIjtcbmltcG9ydCB7IFRGb2xkZXIsIG5vcm1hbGl6ZVBhdGggfSBmcm9tIFwib2JzaWRpYW5cIjtcbmltcG9ydCB7IHBhcnNlWWFtbCB9IGZyb20gXCJvYnNpZGlhblwiO1xuaW1wb3J0ICogYXMgaGVscGVyIGZyb20gXCIuL2hlbHBlclwiO1xuXG5mdW5jdGlvbiBzdHJUb0Jvb2woc3RyOiBzdHJpbmcpOiBib29sZWFuIHwgbnVsbCB7XG4gICAgc3RyID0gc3RyLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgIHN3aXRjaCAoc3RyKSB7XG4gICAgICAgIGNhc2UgXCJ0cnVlXCI6XG4gICAgICAgIGNhc2UgXCIxXCI6XG4gICAgICAgIGNhc2UgXCJvblwiOlxuICAgICAgICBjYXNlIFwieWVzXCI6XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgY2FzZSBcImZhbHNlXCI6XG4gICAgICAgIGNhc2UgXCIwXCI6XG4gICAgICAgIGNhc2UgXCJvZmZcIjpcbiAgICAgICAgY2FzZSBcIm5vXCI6XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVNlYXJjaFR5cGUoc2VhcmNoVHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKFxuICAgICAgICBzZWFyY2hUeXBlLnRvTG93ZXJDYXNlKCkgPT09IFwidGFnXCIgfHxcbiAgICAgICAgc2VhcmNoVHlwZS50b0xvd2VyQ2FzZSgpID09PSBcInRleHRcIiB8fFxuICAgICAgICBzZWFyY2hUeXBlLnRvTG93ZXJDYXNlKCkgPT09IFwiZnJvbnRtYXR0ZXJcIiB8fFxuICAgICAgICBzZWFyY2hUeXBlLnRvTG93ZXJDYXNlKCkgPT09IFwid2lraVwiIHx8XG4gICAgICAgIHNlYXJjaFR5cGUudG9Mb3dlckNhc2UoKSA9PT0gXCJ3aWtpLmxpbmtcIiB8fFxuICAgICAgICBzZWFyY2hUeXBlLnRvTG93ZXJDYXNlKCkgPT09IFwid2lraS5kaXNwbGF5XCIgfHxcbiAgICAgICAgc2VhcmNoVHlwZS50b0xvd2VyQ2FzZSgpID09PSBcImR2ZmllbGRcIiB8fFxuICAgICAgICBzZWFyY2hUeXBlLnRvTG93ZXJDYXNlKCkgPT09IFwidGFibGVcIiB8fFxuICAgICAgICBzZWFyY2hUeXBlLnRvTG93ZXJDYXNlKCkgPT09IFwiZmlsZW1ldGFcIiB8fFxuICAgICAgICBzZWFyY2hUeXBlLnRvTG93ZXJDYXNlKCkgPT09IFwidGFza1wiIHx8XG4gICAgICAgIHNlYXJjaFR5cGUudG9Mb3dlckNhc2UoKSA9PT0gXCJ0YXNrLmFsbFwiIHx8XG4gICAgICAgIHNlYXJjaFR5cGUudG9Mb3dlckNhc2UoKSA9PT0gXCJ0YXNrLmRvbmVcIiB8fFxuICAgICAgICBzZWFyY2hUeXBlLnRvTG93ZXJDYXNlKCkgPT09IFwidGFzay5ub3Rkb25lXCJcbiAgICApIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVZQXhpc0xvY2F0aW9uKGxvY2F0aW9uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAobG9jYXRpb24gPT09IFwibGVmdFwiIHx8IGxvY2F0aW9uID09PSBcInJpZ2h0XCIgfHwgbG9jYXRpb24gPT09IFwibm9uZVwiKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlQ29sb3IoY29sb3I6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBzcGxpdElucHV0QnlDb21tYShpbnB1dDogc3RyaW5nKSB7XG4gICAgLy8gU3BsaXQgc3RyaW5nIGJ5ICcsJyBidXQgbm90IGJ5ICdcXCwnXG4gICAgLy8gbGV0IHNwbGl0dGVkID0gaW5wdXQuc3BsaXQoLyg/PCFcXFxcKSwvKTsgLy8gLS0+bG9va2JlaGluZCBub3Qgc3VwcG9ydCBpbiBTYWZhcmkgZm9yIG5vd1xuICAgIGNvbnN0IGR1bW15ID0gXCI6Ojo6Ojp0cmFja2VyOjo6Ojo6XCI7XG4gICAgbGV0IHRlbXAgPSBpbnB1dC5zcGxpdChcIlxcXFwsXCIpLmpvaW4oZHVtbXkpO1xuICAgIGxldCBzcGxpdHRlZCA9IHRlbXAuc3BsaXQoXCIsXCIpO1xuICAgIGZvciAobGV0IGluZCA9IDA7IGluZCA8IHNwbGl0dGVkLmxlbmd0aDsgaW5kKyspIHtcbiAgICAgICAgc3BsaXR0ZWRbaW5kXSA9IHNwbGl0dGVkW2luZF0uc3BsaXQoZHVtbXkpLmpvaW4oXCIsXCIpO1xuICAgIH1cbiAgICByZXR1cm4gc3BsaXR0ZWQ7XG59XG5cbmZ1bmN0aW9uIGdldEJvb2xBcnJheUZyb21JbnB1dChcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgaW5wdXQ6IGFueSxcbiAgICBudW1EYXRhc2V0OiBudW1iZXIsXG4gICAgZGVmYXVsdFZhbHVlOiBib29sZWFuLFxuICAgIGFsbG93Tm9WYWxpZFZhbHVlOiBib29sZWFuXG4pOiBBcnJheTxib29sZWFuPiB8IHN0cmluZyB7XG4gICAgbGV0IGFycmF5OiBBcnJheTxib29sZWFuPiA9IFtdO1xuICAgIGxldCBlcnJvck1lc3NhZ2UgPSBcIlwiO1xuICAgIGxldCBudW1WYWxpZFZhbHVlID0gMDtcblxuICAgIHdoaWxlIChudW1EYXRhc2V0ID4gYXJyYXkubGVuZ3RoKSB7XG4gICAgICAgIGFycmF5LnB1c2goZGVmYXVsdFZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGlucHV0ID09PSBcInVuZGVmaW5lZFwiIHx8IGlucHV0ID09PSBudWxsKSB7XG4gICAgICAgIC8vIGFsbCBkZWZhdWx0VmFsdWVcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJvYmplY3RcIiAmJiBpbnB1dCAhPT0gbnVsbCkge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShpbnB1dCkpIHtcbiAgICAgICAgICAgIGlmIChpbnB1dC5sZW5ndGggPiBudW1EYXRhc2V0KSB7XG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJUb28gbWFueSBpbnB1dHMgZm9yIHBhcmFtZXRlciAnXCIgKyBuYW1lICsgXCInXCI7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpbnB1dC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIkVtcHR5IGFycmF5IG5vdCBhbGxvd2QgZm9yIFwiICsgbmFtZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChsZXQgaW5kID0gMDsgaW5kIDwgYXJyYXkubGVuZ3RoOyBpbmQrKykge1xuICAgICAgICAgICAgICAgIGlmIChpbmQgPCBpbnB1dC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGN1cnIgPSBpbnB1dFtpbmRdO1xuICAgICAgICAgICAgICAgICAgICBsZXQgcHJldiA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmQgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2ID0gaW5wdXRbaW5kIC0gMV0udHJpbSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY3VyciA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VyciA9IGN1cnIudHJpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnIgPT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRdID0gcHJldjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRdID0gZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJJbnZhbGlkIGlucHV0cyBmb3IgXCIgKyBuYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBjdXJyID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kXSA9IGN1cnI7XG4gICAgICAgICAgICAgICAgICAgICAgICBudW1WYWxpZFZhbHVlKys7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIkludmFsaWQgaW5wdXRzIGZvciBcIiArIG5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEV4Y2VlZHMgdGhlIGxlbmd0aCBvZiBpbnB1dCwgdXNlIHByZXYgdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgbGV0IGxhc3QgPSBpbnB1dFtpbnB1dC5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG51bVZhbGlkVmFsdWUgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRdID0gbGFzdDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5W2luZF0gPSBkZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBsZXQgc3BsaXR0ZWQgPSBzcGxpdElucHV0QnlDb21tYShpbnB1dCk7XG4gICAgICAgIGlmIChzcGxpdHRlZC5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBpZiAoc3BsaXR0ZWQubGVuZ3RoID4gbnVtRGF0YXNldCkge1xuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiVG9vIG1hbnkgaW5wdXRzIGZvciBwYXJhbWV0ZXIgJ1wiICsgbmFtZSArIFwiJ1wiO1xuICAgICAgICAgICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGxldCBpbmQgPSAwOyBpbmQgPCBhcnJheS5sZW5ndGg7IGluZCsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGluZCA8IHNwbGl0dGVkLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgY3VyciA9IHNwbGl0dGVkW2luZF0udHJpbSgpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgcHJldiA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmQgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2ID0gc3RyVG9Cb29sKHNwbGl0dGVkW2luZCAtIDFdLnRyaW0oKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnIgPT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kXSA9IHByZXY7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5W2luZF0gPSBkZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY3VyckJvb2wgPSBzdHJUb0Jvb2woY3Vycik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VyckJvb2wgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRdID0gY3VyckJvb2w7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtVmFsaWRWYWx1ZSsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIkludmFsaWQgaW5wdXRzIGZvciBcIiArIG5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBFeGNlZWRzIHRoZSBsZW5ndGggb2YgaW5wdXQsIHVzZSBwcmV2IHZhbHVlXG4gICAgICAgICAgICAgICAgICAgIGxldCBsYXN0ID0gc3RyVG9Cb29sKHNwbGl0dGVkW3NwbGl0dGVkLmxlbmd0aCAtIDFdLnRyaW0oKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChudW1WYWxpZFZhbHVlID4gMCAmJiBsYXN0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRdID0gbGFzdDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5W2luZF0gPSBkZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoaW5wdXQgPT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICAvLyBhbGwgZGVmYXVsdFZhbHVlXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxldCBpbnB1dEJvb2wgPSBzdHJUb0Jvb2woaW5wdXQpO1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dEJvb2wgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlbMF0gPSBpbnB1dEJvb2w7XG4gICAgICAgICAgICAgICAgICAgIG51bVZhbGlkVmFsdWUrKztcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaW5kID0gMTsgaW5kIDwgYXJyYXkubGVuZ3RoOyBpbmQrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kXSA9IGlucHV0Qm9vbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiSW52YWxpZCBpbnB1dHMgZm9yIFwiICsgbmFtZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgYXJyYXlbMF0gPSBpbnB1dDtcbiAgICAgICAgbnVtVmFsaWRWYWx1ZSsrO1xuICAgICAgICBmb3IgKGxldCBpbmQgPSAxOyBpbmQgPCBhcnJheS5sZW5ndGg7IGluZCsrKSB7XG4gICAgICAgICAgICBhcnJheVtpbmRdID0gaW5wdXQ7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIkludmFsaWQgaW5wdXRzIGZvciBcIiArIG5hbWU7XG4gICAgfVxuXG4gICAgaWYgKCFhbGxvd05vVmFsaWRWYWx1ZSAmJiBudW1WYWxpZFZhbHVlID09PSAwKSB7XG4gICAgICAgIGVycm9yTWVzc2FnZSA9IFwiTm8gdmFsaWQgaW5wdXQgZm9yIFwiICsgbmFtZTtcbiAgICB9XG5cbiAgICBpZiAoZXJyb3JNZXNzYWdlICE9PSBcIlwiKSB7XG4gICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFycmF5O1xufVxuXG5mdW5jdGlvbiBnZXROdW1iZXJBcnJheUZyb21JbnB1dChcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgaW5wdXQ6IGFueSxcbiAgICBudW1EYXRhc2V0OiBudW1iZXIsXG4gICAgZGVmYXVsdFZhbHVlOiBudW1iZXIsXG4gICAgYWxsb3dOb1ZhbGlkVmFsdWU6IGJvb2xlYW5cbik6IEFycmF5PG51bWJlcj4gfCBzdHJpbmcge1xuICAgIC8vIGNvbnNvbGUubG9nKFwiZ2V0TnVtYmVyQXJyYXlGcm9tSW5wdXRcIik7XG5cbiAgICBsZXQgYXJyYXk6IEFycmF5PG51bWJlcj4gPSBbXTtcbiAgICBsZXQgZXJyb3JNZXNzYWdlID0gXCJcIjtcbiAgICBsZXQgbnVtVmFsaWRWYWx1ZSA9IDA7XG5cbiAgICB3aGlsZSAobnVtRGF0YXNldCA+IGFycmF5Lmxlbmd0aCkge1xuICAgICAgICBhcnJheS5wdXNoKGRlZmF1bHRWYWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJ1bmRlZmluZWRcIiB8fCBpbnB1dCA9PT0gbnVsbCkge1xuICAgICAgICAvLyBhbGwgZGVmYXVsdFZhbHVlXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09IFwib2JqZWN0XCIgJiYgaW5wdXQgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XG4gICAgICAgICAgICBpZiAoaW5wdXQubGVuZ3RoID4gbnVtRGF0YXNldCkge1xuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiVG9vIG1hbnkgaW5wdXRzIGZvciBwYXJhbWV0ZXIgJ1wiICsgbmFtZSArIFwiJ1wiO1xuICAgICAgICAgICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaW5wdXQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJFbXB0eSBhcnJheSBub3QgYWxsb3dkIGZvciBcIiArIG5hbWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAobGV0IGluZCA9IDA7IGluZCA8IGFycmF5Lmxlbmd0aDsgaW5kKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5kIDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBjdXJyID0gaW5wdXRbaW5kXTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHByZXYgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJldiA9IGlucHV0W2luZCAtIDFdLnRyaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGN1cnIgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnIgPSBjdXJyLnRyaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyID09PSBcIlwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXYgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kXSA9IHByZXY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kXSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiSW52YWxpZCBpbnB1dHMgZm9yIFwiICsgbmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgY3VyciA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kXSA9IGN1cnI7XG4gICAgICAgICAgICAgICAgICAgICAgICBudW1WYWxpZFZhbHVlKys7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIkludmFsaWQgaW5wdXRzIGZvciBcIiArIG5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEV4Y2VlZHMgdGhlIGxlbmd0aCBvZiBpbnB1dCwgdXNlIHByZXYgdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgbGV0IGxhc3QgPSBpbnB1dFtpbnB1dC5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG51bVZhbGlkVmFsdWUgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRdID0gbGFzdDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5W2luZF0gPSBkZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBsZXQgc3BsaXR0ZWQgPSBzcGxpdElucHV0QnlDb21tYShpbnB1dCk7XG4gICAgICAgIGlmIChzcGxpdHRlZC5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBpZiAoc3BsaXR0ZWQubGVuZ3RoID4gbnVtRGF0YXNldCkge1xuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiVG9vIG1hbnkgaW5wdXRzIGZvciBwYXJhbWV0ZXIgJ1wiICsgbmFtZSArIFwiJ1wiO1xuICAgICAgICAgICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGxldCBpbmQgPSAwOyBpbmQgPCBhcnJheS5sZW5ndGg7IGluZCsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGluZCA8IHNwbGl0dGVkLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgY3VyciA9IHNwbGl0dGVkW2luZF0udHJpbSgpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgcHJldiA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmQgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2ID0gaGVscGVyLnBhcnNlRmxvYXRGcm9tQW55KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwbGl0dGVkW2luZCAtIDFdLnRyaW0oKVxuICAgICAgICAgICAgICAgICAgICAgICAgKS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoY3VyciA9PT0gXCJcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXYgIT09IG51bGwgJiYgTnVtYmVyLmlzTnVtYmVyKHByZXYpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kXSA9IHByZXY7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5W2luZF0gPSBkZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY3Vyck51bSA9IGhlbHBlci5wYXJzZUZsb2F0RnJvbUFueShjdXJyKS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyTnVtICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kXSA9IGN1cnJOdW07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtVmFsaWRWYWx1ZSsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIkludmFsaWQgaW5wdXRzIGZvciBcIiArIG5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBFeGNlZWRzIHRoZSBsZW5ndGggb2YgaW5wdXQsIHVzZSBwcmV2IHZhbHVlXG4gICAgICAgICAgICAgICAgICAgIGxldCBsYXN0ID0gaGVscGVyLnBhcnNlRmxvYXRGcm9tQW55KFxuICAgICAgICAgICAgICAgICAgICAgICAgc3BsaXR0ZWRbaW5wdXQubGVuZ3RoIC0gMV0udHJpbSgpXG4gICAgICAgICAgICAgICAgICAgICkudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChudW1WYWxpZFZhbHVlID4gMCAmJiBsYXN0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRdID0gbGFzdDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5W2luZF0gPSBkZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoaW5wdXQgPT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICAvLyBhbGwgZGVmYXVsdFZhbHVlXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxldCBpbnB1dE51bSA9IGhlbHBlci5wYXJzZUZsb2F0RnJvbUFueShpbnB1dCkudmFsdWU7XG4gICAgICAgICAgICAgICAgaWYgKGlucHV0TnVtICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGFycmF5WzBdID0gaW5wdXROdW07XG4gICAgICAgICAgICAgICAgICAgIG51bVZhbGlkVmFsdWUrKztcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaW5kID0gMTsgaW5kIDwgYXJyYXkubGVuZ3RoOyBpbmQrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kXSA9IGlucHV0TnVtO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJJbnZhbGlkIGlucHV0cyBmb3IgXCIgKyBuYW1lO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgIGlmIChOdW1iZXIuaXNOdW1iZXIoaW5wdXQpKSB7XG4gICAgICAgICAgICBhcnJheVswXSA9IGlucHV0O1xuICAgICAgICAgICAgbnVtVmFsaWRWYWx1ZSsrO1xuICAgICAgICAgICAgZm9yIChsZXQgaW5kID0gMTsgaW5kIDwgYXJyYXkubGVuZ3RoOyBpbmQrKykge1xuICAgICAgICAgICAgICAgIGFycmF5W2luZF0gPSBpbnB1dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiSW52YWxpZCBpbnB1dHMgZm9yIFwiICsgbmFtZTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGVycm9yTWVzc2FnZSA9IFwiSW52YWxpZCBpbnB1dHMgZm9yIFwiICsgbmFtZTtcbiAgICB9XG5cbiAgICBpZiAoIWFsbG93Tm9WYWxpZFZhbHVlICYmIG51bVZhbGlkVmFsdWUgPT09IDApIHtcbiAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJObyB2YWxpZCBpbnB1dCBmb3IgXCIgKyBuYW1lO1xuICAgIH1cblxuICAgIGlmIChlcnJvck1lc3NhZ2UgIT09IFwiXCIpIHtcbiAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJyYXk7XG59XG5cbmZ1bmN0aW9uIGdldFN0cmluZ0Zyb21JbnB1dChpbnB1dDogYW55LCBkZWZhdWx0VmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4gaGVscGVyLnJlcGxhY2VJbWdUYWdCeUFsdChpbnB1dCk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0LnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG59XG5cbmZ1bmN0aW9uIGdldFN0cmluZ0FycmF5RnJvbUlucHV0KFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBpbnB1dDogYW55LFxuICAgIG51bURhdGFzZXQ6IG51bWJlcixcbiAgICBkZWZhdWx0VmFsdWU6IHN0cmluZyxcbiAgICB2YWxpZGF0b3I6IEZ1bmN0aW9uLFxuICAgIGFsbG93Tm9WYWxpZFZhbHVlOiBib29sZWFuXG4pOiBBcnJheTxzdHJpbmc+IHwgc3RyaW5nIHtcbiAgICBsZXQgYXJyYXk6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgICBsZXQgZXJyb3JNZXNzYWdlID0gXCJcIjtcbiAgICBsZXQgbnVtVmFsaWRWYWx1ZSA9IDA7XG5cbiAgICB3aGlsZSAobnVtRGF0YXNldCA+IGFycmF5Lmxlbmd0aCkge1xuICAgICAgICBhcnJheS5wdXNoKGRlZmF1bHRWYWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJ1bmRlZmluZWRcIiB8fCBpbnB1dCA9PT0gbnVsbCkge1xuICAgICAgICAvLyBhbGwgZGVmYXVsdFZhbHVlXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09IFwib2JqZWN0XCIgJiYgaW5wdXQgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XG4gICAgICAgICAgICBpZiAoaW5wdXQubGVuZ3RoID4gbnVtRGF0YXNldCkge1xuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiVG9vIG1hbnkgaW5wdXRzIGZvciBwYXJhbWV0ZXIgJ1wiICsgbmFtZSArIFwiJ1wiO1xuICAgICAgICAgICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaW5wdXQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJFbXB0eSBhcnJheSBub3QgYWxsb3dkIGZvciBcIiArIG5hbWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAobGV0IGluZCA9IDA7IGluZCA8IGFycmF5Lmxlbmd0aDsgaW5kKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5kIDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBjdXJyID0gaW5wdXRbaW5kXTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHByZXYgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJldiA9IGlucHV0W2luZCAtIDFdLnRyaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGN1cnIgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnIgPSBjdXJyLnRyaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyID09PSBcIlwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXYgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kXSA9IHByZXY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kXSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRvcihjdXJyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kXSA9IGN1cnI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1WYWxpZFZhbHVlKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIkludmFsaWQgaW5wdXRzIGZvciBcIiArIG5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5W2luZF0gPSBjdXJyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1WYWxpZFZhbHVlKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJJbnZhbGlkIGlucHV0cyBmb3IgXCIgKyBuYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBFeGNlZWRzIHRoZSBsZW5ndGggb2YgaW5wdXQsIHVzZSBwcmV2IHZhbHVlXG4gICAgICAgICAgICAgICAgICAgIGxldCBsYXN0ID0gaW5wdXRbaW5wdXQubGVuZ3RoIC0gMV0udHJpbSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobnVtVmFsaWRWYWx1ZSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5W2luZF0gPSBsYXN0O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kXSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGxldCBzcGxpdHRlZCA9IHNwbGl0SW5wdXRCeUNvbW1hKGlucHV0KTtcbiAgICAgICAgaWYgKHNwbGl0dGVkLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIGlmIChzcGxpdHRlZC5sZW5ndGggPiBudW1EYXRhc2V0KSB7XG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJUb28gbWFueSBpbnB1dHMgZm9yIHBhcmFtZXRlciAnXCIgKyBuYW1lICsgXCInXCI7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAobGV0IGluZCA9IDA7IGluZCA8IGFycmF5Lmxlbmd0aDsgaW5kKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5kIDwgc3BsaXR0ZWQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBjdXJyID0gc3BsaXR0ZWRbaW5kXS50cmltKCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwcmV2ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXYgPSBzcGxpdHRlZFtpbmQgLSAxXS50cmltKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnIgPT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kXSA9IHByZXY7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5W2luZF0gPSBkZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsaWRhdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRvcihjdXJyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRdID0gY3VycjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtVmFsaWRWYWx1ZSsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiSW52YWxpZCBpbnB1dHMgZm9yIFwiICsgbmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRdID0gY3VycjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1WYWxpZFZhbHVlKys7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBFeGNlZWRzIHRoZSBsZW5ndGggb2YgaW5wdXQsIHVzZSBwcmV2IHZhbHVlXG4gICAgICAgICAgICAgICAgICAgIGxldCBsYXN0ID0gc3BsaXR0ZWRbc3BsaXR0ZWQubGVuZ3RoIC0gMV0udHJpbSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobnVtVmFsaWRWYWx1ZSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5W2luZF0gPSBsYXN0O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kXSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChpbnB1dCA9PT0gXCJcIikge1xuICAgICAgICAgICAgICAgIC8vIGFsbCBkZWZhdWx0VmFsdWVcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRvcikge1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsaWRhdG9yKGlucHV0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbMF0gPSBpbnB1dDtcbiAgICAgICAgICAgICAgICAgICAgICAgIG51bVZhbGlkVmFsdWUrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGluZCA9IDE7IGluZCA8IGFycmF5Lmxlbmd0aDsgaW5kKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRdID0gaW5wdXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIkludmFsaWQgaW5wdXRzIGZvciBcIiArIG5hbWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhcnJheVswXSA9IGlucHV0O1xuICAgICAgICAgICAgICAgICAgICBudW1WYWxpZFZhbHVlKys7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGluZCA9IDE7IGluZCA8IGFycmF5Lmxlbmd0aDsgaW5kKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5W2luZF0gPSBpbnB1dDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgIGxldCBzdHJOdW1iZXIgPSBpbnB1dC50b1N0cmluZygpO1xuICAgICAgICBpZiAodmFsaWRhdG9yKSB7XG4gICAgICAgICAgICBpZiAodmFsaWRhdG9yKHN0ck51bWJlcikpIHtcbiAgICAgICAgICAgICAgICBhcnJheVswXSA9IHN0ck51bWJlcjtcbiAgICAgICAgICAgICAgICBudW1WYWxpZFZhbHVlKys7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaW5kID0gMTsgaW5kIDwgYXJyYXkubGVuZ3RoOyBpbmQrKykge1xuICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRdID0gc3RyTnVtYmVyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJJbnZhbGlkIGlucHV0cyBmb3IgXCIgKyBuYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXJyYXlbMF0gPSBzdHJOdW1iZXI7XG4gICAgICAgICAgICBudW1WYWxpZFZhbHVlKys7XG4gICAgICAgICAgICBmb3IgKGxldCBpbmQgPSAxOyBpbmQgPCBhcnJheS5sZW5ndGg7IGluZCsrKSB7XG4gICAgICAgICAgICAgICAgYXJyYXlbaW5kXSA9IHN0ck51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGVycm9yTWVzc2FnZSA9IFwiSW52YWxpZCBpbnB1dHMgZm9yIFwiICsgbmFtZTtcbiAgICB9XG5cbiAgICBpZiAoIWFsbG93Tm9WYWxpZFZhbHVlICYmIG51bVZhbGlkVmFsdWUgPT09IDApIHtcbiAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJObyB2YWxpZCBpbnB1dCBmb3IgXCIgKyBuYW1lO1xuICAgIH1cblxuICAgIGlmIChlcnJvck1lc3NhZ2UgIT09IFwiXCIpIHtcbiAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpbmQgPSAwOyBpbmQgPCBhcnJheS5sZW5ndGg7IGluZCsrKSB7XG4gICAgICAgIGFycmF5W2luZF0gPSBoZWxwZXIucmVwbGFjZUltZ1RhZ0J5QWx0KGFycmF5W2luZF0pO1xuICAgIH1cblxuICAgIHJldHVybiBhcnJheTtcbn1cblxuZnVuY3Rpb24gZ2V0TnVtYmVyQXJyYXkobmFtZTogc3RyaW5nLCBpbnB1dDogYW55KTogQXJyYXk8bnVtYmVyPiB8IHN0cmluZyB7XG4gICAgbGV0IG51bUFycmF5OiBBcnJheTxudW1iZXI+ID0gW107XG5cbiAgICBpZiAodHlwZW9mIGlucHV0ID09PSBcInVuZGVmaW5lZFwiIHx8IGlucHV0ID09PSBudWxsKSByZXR1cm4gbnVtQXJyYXk7XG5cbiAgICBpZiAodHlwZW9mIGlucHV0ID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGlucHV0KSkge1xuICAgICAgICAgICAgZm9yIChsZXQgZWxlbSBvZiBpbnB1dCkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZWxlbSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICBsZXQgdiA9IHBhcnNlRmxvYXQoZWxlbSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChOdW1iZXIuaXNOdW1iZXIodikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG51bUFycmF5LnB1c2godik7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZXJyb3JNZXNzYWdlID0gYFBhcmFtZXRlciAnJHtuYW1lfScgYWNjZXB0cyBvbmx5IG51bWJlcnNgO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGxldCBzcGxpdHRlZCA9IHNwbGl0SW5wdXRCeUNvbW1hKGlucHV0KTtcbiAgICAgICAgaWYgKHNwbGl0dGVkLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIGZvciAobGV0IHBpZWNlIG9mIHNwbGl0dGVkKSB7XG4gICAgICAgICAgICAgICAgbGV0IHYgPSBwYXJzZUZsb2F0KHBpZWNlLnRyaW0oKSk7XG4gICAgICAgICAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4odikpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gTnVtYmVyLmlzTnVtYmVyKE5hTikgLS0+IHRydWVcbiAgICAgICAgICAgICAgICAgICAgbnVtQXJyYXkucHVzaCh2KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZXJyb3JNZXNzYWdlID0gYFBhcmFtZXRlciAnJHtuYW1lfScgYWNjZXB0cyBvbmx5IG51bWJlcnNgO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChpbnB1dCA9PT0gXCJcIikge1xuICAgICAgICAgICAgbGV0IGVycm9yTWVzc2FnZSA9IGBFbXB0eSAke25hbWV9IGlzIG5vdCBhbGxvd2VkLmA7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IHYgPSBwYXJzZUZsb2F0KGlucHV0KTtcbiAgICAgICAgICAgIGlmIChOdW1iZXIuaXNOdW1iZXIodikpIHtcbiAgICAgICAgICAgICAgICBudW1BcnJheS5wdXNoKHYpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsZXQgZXJyb3JNZXNzYWdlID0gYFBhcmFtZXRlciAnJHtuYW1lfScgYWNjZXB0cyBvbmx5IG51bWJlcnNgO1xuICAgICAgICAgICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICBudW1BcnJheS5wdXNoKGlucHV0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgZXJyb3JNZXNzYWdlID0gYEludmFsaWQgJHtuYW1lfWA7XG4gICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bUFycmF5O1xufVxuXG5mdW5jdGlvbiBnZXRTdHJpbmdBcnJheShuYW1lOiBzdHJpbmcsIGlucHV0OiBhbnkpOiBBcnJheTxzdHJpbmc+IHwgc3RyaW5nIHtcbiAgICBsZXQgc3RyQXJyYXk6IEFycmF5PHN0cmluZz4gPSBbXTtcblxuICAgIGlmICh0eXBlb2YgaW5wdXQgPT09IFwidW5kZWZpbmVkXCIgfHwgaW5wdXQgPT09IG51bGwpIHJldHVybiBzdHJBcnJheTtcblxuICAgIGlmICh0eXBlb2YgaW5wdXQgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBlbGVtIG9mIGlucHV0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBlbGVtID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0ckFycmF5LnB1c2goZWxlbS50cmltKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGxldCBzcGxpdHRlZCA9IHNwbGl0SW5wdXRCeUNvbW1hKGlucHV0KTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coc3BsaXR0ZWQpO1xuICAgICAgICBpZiAoc3BsaXR0ZWQubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgZm9yIChsZXQgcGllY2Ugb2Ygc3BsaXR0ZWQpIHtcbiAgICAgICAgICAgICAgICBzdHJBcnJheS5wdXNoKHBpZWNlLnRyaW0oKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoaW5wdXQgPT09IFwiXCIpIHtcbiAgICAgICAgICAgIGxldCBlcnJvck1lc3NhZ2UgPSBgRW1wdHkgJHtuYW1lfSBpcyBub3QgYWxsb3dlZC5gO1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0ckFycmF5LnB1c2goaW5wdXQpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IGVycm9yTWVzc2FnZSA9IGBJbnZhbGlkICR7bmFtZX1gO1xuICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xuICAgIH1cblxuICAgIGZvciAobGV0IGluZCA9IDA7IGluZCA8IHN0ckFycmF5Lmxlbmd0aDsgaW5kKyspIHtcbiAgICAgICAgc3RyQXJyYXlbaW5kXSA9IGhlbHBlci5yZXBsYWNlSW1nVGFnQnlBbHQoc3RyQXJyYXlbaW5kXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0ckFycmF5O1xufVxuXG5mdW5jdGlvbiBwYXJzZUNvbW1vbkNoYXJ0SW5mbyh5YW1sOiBhbnksIHJlbmRlckluZm86IENvbW1vbkNoYXJ0SW5mbykge1xuICAgIC8vIGNvbnNvbGUubG9nKFwicGFyc2VDb21tb25DaGFydEluZm9cIik7XG5cbiAgICAvLyBzaW5nbGUgdmFsdWUsIHVzZSBkZWZhdWx0IHZhbHVlIGlmIG5vIHZhbHVlIGZyb20gWUFNTFxuICAgIGlmICh5YW1sKSB7XG4gICAgICAgIC8vIHRpdGxlXG4gICAgICAgIHJlbmRlckluZm8udGl0bGUgPSBnZXRTdHJpbmdGcm9tSW5wdXQoeWFtbD8udGl0bGUsIHJlbmRlckluZm8udGl0bGUpO1xuXG4gICAgICAgIC8vIHhBeGlzTGFiZWxcbiAgICAgICAgcmVuZGVySW5mby54QXhpc0xhYmVsID0gZ2V0U3RyaW5nRnJvbUlucHV0KFxuICAgICAgICAgICAgeWFtbD8ueEF4aXNMYWJlbCxcbiAgICAgICAgICAgIHJlbmRlckluZm8ueEF4aXNMYWJlbFxuICAgICAgICApO1xuXG4gICAgICAgIC8vIHhBeGlzQ29sb3JcbiAgICAgICAgcmVuZGVySW5mby54QXhpc0NvbG9yID0gZ2V0U3RyaW5nRnJvbUlucHV0KFxuICAgICAgICAgICAgeWFtbD8ueEF4aXNDb2xvcixcbiAgICAgICAgICAgIHJlbmRlckluZm8ueEF4aXNDb2xvclxuICAgICAgICApO1xuXG4gICAgICAgIC8vIHhBeGlzTGFiZWxDb2xvclxuICAgICAgICByZW5kZXJJbmZvLnhBeGlzTGFiZWxDb2xvciA9IGdldFN0cmluZ0Zyb21JbnB1dChcbiAgICAgICAgICAgIHlhbWw/LnhBeGlzTGFiZWxDb2xvcixcbiAgICAgICAgICAgIHJlbmRlckluZm8ueEF4aXNMYWJlbENvbG9yXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gYWxsb3dJbnNwZWN0RGF0YVxuICAgICAgICBpZiAodHlwZW9mIHlhbWwuYWxsb3dJbnNwZWN0RGF0YSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgICAgIHJlbmRlckluZm8uYWxsb3dJbnNwZWN0RGF0YSA9IHlhbWwuYWxsb3dJbnNwZWN0RGF0YTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHNob3dMZWdlbmRcbiAgICAgICAgaWYgKHR5cGVvZiB5YW1sLnNob3dMZWdlbmQgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgICAgICByZW5kZXJJbmZvLnNob3dMZWdlbmQgPSB5YW1sLnNob3dMZWdlbmQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBsZWdlbmRQb3NpdGlvblxuICAgICAgICBpZiAodHlwZW9mIHlhbWwubGVnZW5kUG9zaXRpb24gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJlbmRlckluZm8ubGVnZW5kUG9zaXRpb24gPSB5YW1sLmxlZ2VuZFBvc2l0aW9uO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVuZGVySW5mby5sZWdlbmRQb3NpdGlvbiA9IFwiYm90dG9tXCI7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBsZWdlbmRPcmllbnRcbiAgICAgICAgaWYgKHR5cGVvZiB5YW1sLmxlZ2VuZE9yaWVudGF0aW9uID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZW5kZXJJbmZvLmxlZ2VuZE9yaWVudGF0aW9uID0geWFtbC5sZWdlbmRPcmllbnRhdGlvbjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLmxlZ2VuZFBvc2l0aW9uID09PSBcInRvcFwiIHx8XG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5sZWdlbmRQb3NpdGlvbiA9PT0gXCJib3R0b21cIlxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5sZWdlbmRPcmllbnRhdGlvbiA9IFwiaG9yaXpvbnRhbFwiO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLmxlZ2VuZFBvc2l0aW9uID09PSBcImxlZnRcIiB8fFxuICAgICAgICAgICAgICAgIHJlbmRlckluZm8ubGVnZW5kUG9zaXRpb24gPT09IFwicmlnaHRcIlxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5sZWdlbmRPcmllbnRhdGlvbiA9IFwidmVydGljYWxcIjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5sZWdlbmRPcmllbnRhdGlvbiA9IFwiaG9yaXpvbnRhbFwiO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8ubGVnZW5kUG9zaXRpb24pO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLmxlZ2VuZE9yaWVudGF0aW9uKTtcblxuICAgICAgICAvLyBsZWdlbmRCZ0NvbG9yXG4gICAgICAgIHJlbmRlckluZm8ubGVnZW5kQmdDb2xvciA9IGdldFN0cmluZ0Zyb21JbnB1dChcbiAgICAgICAgICAgIHlhbWw/LmxlZ2VuZEJnQ29sb3IsXG4gICAgICAgICAgICByZW5kZXJJbmZvLmxlZ2VuZEJnQ29sb3JcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBsZWdlbmRCb3JkZXJDb2xvclxuICAgICAgICByZW5kZXJJbmZvLmxlZ2VuZEJvcmRlckNvbG9yID0gZ2V0U3RyaW5nRnJvbUlucHV0KFxuICAgICAgICAgICAgeWFtbD8ubGVnZW5kQm9yZGVyQ29sb3IsXG4gICAgICAgICAgICByZW5kZXJJbmZvLmxlZ2VuZEJvcmRlckNvbG9yXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLy8geUF4aXNMYWJlbFxuICAgIGxldCByZXRZQXhpc0xhYmVsID0gZ2V0U3RyaW5nQXJyYXlGcm9tSW5wdXQoXG4gICAgICAgIFwieUF4aXNMYWJlbFwiLFxuICAgICAgICB5YW1sPy55QXhpc0xhYmVsLFxuICAgICAgICAyLFxuICAgICAgICBcIlZhbHVlXCIsXG4gICAgICAgIG51bGwsXG4gICAgICAgIHRydWVcbiAgICApO1xuICAgIGlmICh0eXBlb2YgcmV0WUF4aXNMYWJlbCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4gcmV0WUF4aXNMYWJlbDsgLy8gZXJyb3JNZXNzYWdlXG4gICAgfVxuICAgIGlmIChyZXRZQXhpc0xhYmVsLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgcmV0dXJuIFwieUF4aXNMYWJlbCBhY2NlcHRzIG5vdCBtb3JlIHRoYW4gdHdvIHZhbHVlcyBmb3IgbGVmdCBhbmQgcmlnaHQgeS1heGVzXCI7XG4gICAgfVxuICAgIHJlbmRlckluZm8ueUF4aXNMYWJlbCA9IHJldFlBeGlzTGFiZWw7XG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby55QXhpc0xhYmVsKTtcblxuICAgIC8vIHlBeGlzQ29sb3JcbiAgICBsZXQgcmV0WUF4aXNDb2xvciA9IGdldFN0cmluZ0FycmF5RnJvbUlucHV0KFxuICAgICAgICBcInlBeGlzQ29sb3JcIixcbiAgICAgICAgeWFtbD8ueUF4aXNDb2xvcixcbiAgICAgICAgMixcbiAgICAgICAgXCJcIixcbiAgICAgICAgdmFsaWRhdGVDb2xvcixcbiAgICAgICAgdHJ1ZVxuICAgICk7XG4gICAgaWYgKHR5cGVvZiByZXRZQXhpc0NvbG9yID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiByZXRZQXhpc0NvbG9yOyAvLyBlcnJvck1lc3NhZ2VcbiAgICB9XG4gICAgaWYgKHJldFlBeGlzQ29sb3IubGVuZ3RoID4gMikge1xuICAgICAgICByZXR1cm4gXCJ5QXhpc0NvbG9yIGFjY2VwdHMgbm90IG1vcmUgdGhhbiB0d28gdmFsdWVzIGZvciBsZWZ0IGFuZCByaWdodCB5LWF4ZXNcIjtcbiAgICB9XG4gICAgcmVuZGVySW5mby55QXhpc0NvbG9yID0gcmV0WUF4aXNDb2xvcjtcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLnlBeGlzQ29sb3IpO1xuXG4gICAgLy8geUF4aXNMYWJlbENvbG9yXG4gICAgbGV0IHJldFlBeGlzTGFiZWxDb2xvciA9IGdldFN0cmluZ0FycmF5RnJvbUlucHV0KFxuICAgICAgICBcInlBeGlzTGFiZWxDb2xvclwiLFxuICAgICAgICB5YW1sPy55QXhpc0xhYmVsQ29sb3IsXG4gICAgICAgIDIsXG4gICAgICAgIFwiXCIsXG4gICAgICAgIHZhbGlkYXRlQ29sb3IsXG4gICAgICAgIHRydWVcbiAgICApO1xuICAgIGlmICh0eXBlb2YgcmV0WUF4aXNMYWJlbENvbG9yID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiByZXRZQXhpc0xhYmVsQ29sb3I7IC8vIGVycm9yTWVzc2FnZVxuICAgIH1cbiAgICBpZiAocmV0WUF4aXNMYWJlbENvbG9yLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgcmV0dXJuIFwieUF4aXNMYWJlbENvbG9yIGFjY2VwdHMgbm90IG1vcmUgdGhhbiB0d28gdmFsdWVzIGZvciBsZWZ0IGFuZCByaWdodCB5LWF4ZXNcIjtcbiAgICB9XG4gICAgcmVuZGVySW5mby55QXhpc0xhYmVsQ29sb3IgPSByZXRZQXhpc0xhYmVsQ29sb3I7XG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby55QXhpc0xhYmVsQ29sb3IpO1xuXG4gICAgLy8geUF4aXNVbml0XG4gICAgbGV0IHJldFlBeGlzVW5pdCA9IGdldFN0cmluZ0FycmF5RnJvbUlucHV0KFxuICAgICAgICBcInlBeGlzVW5pdFwiLFxuICAgICAgICB5YW1sPy55QXhpc1VuaXQsXG4gICAgICAgIDIsXG4gICAgICAgIFwiXCIsXG4gICAgICAgIG51bGwsXG4gICAgICAgIHRydWVcbiAgICApO1xuICAgIGlmICh0eXBlb2YgcmV0WUF4aXNVbml0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiByZXRZQXhpc1VuaXQ7IC8vIGVycm9yTWVzc2FnZVxuICAgIH1cbiAgICBpZiAocmV0WUF4aXNVbml0Lmxlbmd0aCA+IDIpIHtcbiAgICAgICAgcmV0dXJuIFwieUF4aXNVbml0IGFjY2VwdHMgbm90IG1vcmUgdGhhbiB0d28gdmFsdWVzIGZvciBsZWZ0IGFuZCByaWdodCB5LWF4ZXNcIjtcbiAgICB9XG4gICAgcmVuZGVySW5mby55QXhpc1VuaXQgPSByZXRZQXhpc1VuaXQ7XG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby55QXhpc1VuaXQpO1xuXG4gICAgLy8geEF4aXNUaWNrSW50ZXJ2YWxcbiAgICByZW5kZXJJbmZvLnhBeGlzVGlja0ludGVydmFsID0gZ2V0U3RyaW5nRnJvbUlucHV0KFxuICAgICAgICB5YW1sPy54QXhpc1RpY2tJbnRlcnZhbCxcbiAgICAgICAgcmVuZGVySW5mby54QXhpc1RpY2tJbnRlcnZhbFxuICAgICk7XG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby54QXhpc1RpY2tJbnRlcnZhbCk7XG5cbiAgICAvLyB5QXhpc1RpY2tJbnRlcnZhbFxuICAgIGxldCByZXRZQXhpc1RpY2tJbnRlcnZhbCA9IGdldFN0cmluZ0FycmF5RnJvbUlucHV0KFxuICAgICAgICBcInlBeGlzVGlja0ludGVydmFsXCIsXG4gICAgICAgIHlhbWw/LnlBeGlzVGlja0ludGVydmFsLFxuICAgICAgICAyLFxuICAgICAgICBudWxsLFxuICAgICAgICBudWxsLFxuICAgICAgICB0cnVlXG4gICAgKTtcbiAgICBpZiAodHlwZW9mIHJldFlBeGlzVGlja0ludGVydmFsID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiByZXRZQXhpc1RpY2tJbnRlcnZhbDsgLy8gZXJyb3JNZXNzYWdlXG4gICAgfVxuICAgIGlmIChyZXRZQXhpc1RpY2tJbnRlcnZhbC5sZW5ndGggPiAyKSB7XG4gICAgICAgIHJldHVybiBcInlBeGlzVGlja0ludGVydmFsIGFjY2VwdHMgbm90IG1vcmUgdGhhbiB0d28gdmFsdWVzIGZvciBsZWZ0IGFuZCByaWdodCB5LWF4ZXNcIjtcbiAgICB9XG4gICAgcmVuZGVySW5mby55QXhpc1RpY2tJbnRlcnZhbCA9IHJldFlBeGlzVGlja0ludGVydmFsO1xuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8ueUF4aXNUaWNrSW50ZXJ2YWwpO1xuXG4gICAgLy8geEF4aXNUaWNrTGFiZWxGb3JtYXRcbiAgICByZW5kZXJJbmZvLnhBeGlzVGlja0xhYmVsRm9ybWF0ID0gZ2V0U3RyaW5nRnJvbUlucHV0KFxuICAgICAgICB5YW1sPy54QXhpc1RpY2tMYWJlbEZvcm1hdCxcbiAgICAgICAgcmVuZGVySW5mby54QXhpc1RpY2tMYWJlbEZvcm1hdFxuICAgICk7XG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby54QXhpc1RpY2tMYWJlbEZvcm1hdCk7XG5cbiAgICAvLyB5QXhpc1RpY2tMYWJlbEZvcm1hdFxuICAgIGxldCByZXRZQXhpc1RpY2tMYWJlbEZvcm1hdCA9IGdldFN0cmluZ0FycmF5RnJvbUlucHV0KFxuICAgICAgICBcInlBeGlzVGlja0xhYmVsRm9ybWF0XCIsXG4gICAgICAgIHlhbWw/LnlBeGlzVGlja0xhYmVsRm9ybWF0LFxuICAgICAgICAyLFxuICAgICAgICBudWxsLFxuICAgICAgICBudWxsLFxuICAgICAgICB0cnVlXG4gICAgKTtcbiAgICBpZiAodHlwZW9mIHJldFlBeGlzVGlja0xhYmVsRm9ybWF0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiByZXRZQXhpc1RpY2tMYWJlbEZvcm1hdDsgLy8gZXJyb3JNZXNzYWdlXG4gICAgfVxuICAgIGlmIChyZXRZQXhpc1RpY2tMYWJlbEZvcm1hdC5sZW5ndGggPiAyKSB7XG4gICAgICAgIHJldHVybiBcInlBeGlzVGlja0xhYmVsRm9ybWF0IGFjY2VwdHMgbm90IG1vcmUgdGhhbiB0d28gdmFsdWVzIGZvciBsZWZ0IGFuZCByaWdodCB5LWF4ZXNcIjtcbiAgICB9XG4gICAgcmVuZGVySW5mby55QXhpc1RpY2tMYWJlbEZvcm1hdCA9IHJldFlBeGlzVGlja0xhYmVsRm9ybWF0O1xuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8ueUF4aXNUaWNrTGFiZWxGb3JtYXQpO1xuXG4gICAgLy8geU1pblxuICAgIGxldCByZXRZTWluID0gZ2V0TnVtYmVyQXJyYXlGcm9tSW5wdXQoXCJ5TWluXCIsIHlhbWw/LnlNaW4sIDIsIG51bGwsIHRydWUpO1xuICAgIGlmICh0eXBlb2YgcmV0WU1pbiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4gcmV0WU1pbjsgLy8gZXJyb3JNZXNzYWdlXG4gICAgfVxuICAgIGlmIChyZXRZTWluLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgcmV0dXJuIFwieU1pbiBhY2NlcHRzIG5vdCBtb3JlIHRoYW4gdHdvIHZhbHVlcyBmb3IgbGVmdCBhbmQgcmlnaHQgeS1heGVzXCI7XG4gICAgfVxuICAgIHJlbmRlckluZm8ueU1pbiA9IHJldFlNaW47XG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby55TWluKTtcblxuICAgIC8vIHlNYXhcbiAgICBsZXQgcmV0WU1heCA9IGdldE51bWJlckFycmF5RnJvbUlucHV0KFwieU1heFwiLCB5YW1sPy55TWF4LCAyLCBudWxsLCB0cnVlKTtcbiAgICBpZiAodHlwZW9mIHJldFlNYXggPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIHJldFlNYXg7IC8vIGVycm9yTWVzc2FnZVxuICAgIH1cbiAgICBpZiAocmV0WU1heC5sZW5ndGggPiAyKSB7XG4gICAgICAgIHJldHVybiBcInlNYXggYWNjZXB0cyBub3QgbW9yZSB0aGFuIHR3byB2YWx1ZXMgZm9yIGxlZnQgYW5kIHJpZ2h0IHktYXhlc1wiO1xuICAgIH1cbiAgICByZW5kZXJJbmZvLnlNYXggPSByZXRZTWF4O1xuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8ueU1heCk7XG5cbiAgICAvLyByZXZlcnNlWUF4aXNcbiAgICBsZXQgcmV0UmV2ZXJzZVlBeGlzID0gZ2V0Qm9vbEFycmF5RnJvbUlucHV0KFxuICAgICAgICBcInJldmVyc2VZQXhpc1wiLFxuICAgICAgICB5YW1sPy5yZXZlcnNlWUF4aXMsXG4gICAgICAgIDIsXG4gICAgICAgIGZhbHNlLFxuICAgICAgICB0cnVlXG4gICAgKTtcbiAgICBpZiAodHlwZW9mIHJldFJldmVyc2VZQXhpcyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4gcmV0UmV2ZXJzZVlBeGlzOyAvLyBlcnJvck1lc3NhZ2VcbiAgICB9XG4gICAgaWYgKHJldFJldmVyc2VZQXhpcy5sZW5ndGggPiAyKSB7XG4gICAgICAgIHJldHVybiBcInJldmVyc2VZQXhpcyBhY2NlcHRzIG5vdCBtb3JlIHRoYW4gdHdvIHZhbHVlcyBmb3IgbGVmdCBhbmQgcmlnaHQgeS1heGVzXCI7XG4gICAgfVxuICAgIHJlbmRlckluZm8ucmV2ZXJzZVlBeGlzID0gcmV0UmV2ZXJzZVlBeGlzO1xuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8ucmV2ZXJzZVlBeGlzKTtcbn1cblxuZnVuY3Rpb24gZ2V0QXZhaWxhYmxlS2V5c09mQ2xhc3Mob2JqOiBvYmplY3QpOiBzdHJpbmdbXSB7XG4gICAgbGV0IGtleXM6IHN0cmluZ1tdID0gW107XG4gICAgaWYgKG9iaiAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBvYmplY3RLZXlzID0gT2JqZWN0LmtleXMob2JqKSBhcyBBcnJheTxrZXlvZiBzdHJpbmc+O1xuICAgICAgICBmb3IgKGxldCBrZXkgb2Ygb2JqZWN0S2V5cykge1xuICAgICAgICAgICAga2V5cy5wdXNoKGtleS50b1N0cmluZygpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ga2V5cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJlbmRlckluZm9Gcm9tWWFtbChcbiAgICB5YW1sVGV4dDogc3RyaW5nLFxuICAgIHBsdWdpbjogVHJhY2tlclxuKTogUmVuZGVySW5mbyB8IHN0cmluZyB7XG4gICAgbGV0IHlhbWw7XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coeWFtbFRleHQpO1xuICAgICAgICB5YW1sID0gcGFyc2VZYW1sKHlhbWxUZXh0KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgbGV0IGVycm9yTWVzc2FnZSA9IFwiRXJyb3IgcGFyc2luZyBZQU1MXCI7XG4gICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XG4gICAgfVxuICAgIGlmICgheWFtbCkge1xuICAgICAgICBsZXQgZXJyb3JNZXNzYWdlID0gXCJFcnJvciBwYXJzaW5nIFlBTUxcIjtcbiAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2coeWFtbCk7XG4gICAgbGV0IGtleXNGb3VuZEluWUFNTCA9IGdldEF2YWlsYWJsZUtleXNPZkNsYXNzKHlhbWwpO1xuICAgIC8vIGNvbnNvbGUubG9nKGtleXNGb3VuZEluWUFNTCk7XG5cbiAgICBsZXQgZXJyb3JNZXNzYWdlID0gXCJcIjtcblxuICAgIC8vIFNlYXJjaCB0YXJnZXRcbiAgICBpZiAoIWtleXNGb3VuZEluWUFNTC5pbmNsdWRlcyhcInNlYXJjaFRhcmdldFwiKSkge1xuICAgICAgICBsZXQgZXJyb3JNZXNzYWdlID0gXCJQYXJhbWV0ZXIgJ3NlYXJjaFRhcmdldCcgbm90IGZvdW5kIGluIFlBTUxcIjtcbiAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcbiAgICB9XG4gICAgbGV0IHNlYXJjaFRhcmdldDogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICAgIGlmICh0eXBlb2YgeWFtbC5zZWFyY2hUYXJnZXQgPT09IFwib2JqZWN0XCIgJiYgeWFtbC5zZWFyY2hUYXJnZXQgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoeWFtbC5zZWFyY2hUYXJnZXQpKSB7XG4gICAgICAgICAgICBmb3IgKGxldCB0YXJnZXQgb2YgeWFtbC5zZWFyY2hUYXJnZXQpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRhcmdldCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0ICE9PSBcIlwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hUYXJnZXQucHVzaCh0YXJnZXQpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJFbXB0eSBzZWFyY2ggdGFyZ2V0IGlzIG5vdCBhbGxvd2VkLlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB5YW1sLnNlYXJjaFRhcmdldCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBsZXQgc3BsaXR0ZWQgPSBzcGxpdElucHV0QnlDb21tYSh5YW1sLnNlYXJjaFRhcmdldCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHNwbGl0dGVkKTtcbiAgICAgICAgaWYgKHNwbGl0dGVkLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIGZvciAobGV0IHBpZWNlIG9mIHNwbGl0dGVkKSB7XG4gICAgICAgICAgICAgICAgcGllY2UgPSBwaWVjZS50cmltKCk7XG4gICAgICAgICAgICAgICAgaWYgKHBpZWNlICE9PSBcIlwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlYXJjaFRhcmdldC5wdXNoKHBpZWNlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIkVtcHR5IHNlYXJjaCB0YXJnZXQgaXMgbm90IGFsbG93ZWQuXCI7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh5YW1sLnNlYXJjaFRhcmdldCA9PT0gXCJcIikge1xuICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJFbXB0eSBzZWFyY2ggdGFyZ2V0IGlzIG5vdCBhbGxvd2VkLlwiO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2VhcmNoVGFyZ2V0LnB1c2goeWFtbC5zZWFyY2hUYXJnZXQpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJJbnZhbGlkIHNlYXJjaCB0YXJnZXQgKHNlYXJjaFRhcmdldClcIjtcbiAgICB9XG4gICAgZm9yIChsZXQgaW5kID0gMDsgaW5kIDwgc2VhcmNoVGFyZ2V0Lmxlbmd0aDsgaW5kKyspIHtcbiAgICAgICAgc2VhcmNoVGFyZ2V0W2luZF0gPSBoZWxwZXIucmVwbGFjZUltZ1RhZ0J5QWx0KHNlYXJjaFRhcmdldFtpbmRdKTtcbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2coc2VhcmNoVGFyZ2V0KTtcblxuICAgIGlmIChlcnJvck1lc3NhZ2UgIT09IFwiXCIpIHtcbiAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcbiAgICB9XG5cbiAgICBsZXQgbnVtRGF0YXNldHMgPSBzZWFyY2hUYXJnZXQubGVuZ3RoO1xuXG4gICAgLy8gU2VhcmNoIHR5cGVcbiAgICBpZiAoIWtleXNGb3VuZEluWUFNTC5pbmNsdWRlcyhcInNlYXJjaFR5cGVcIikpIHtcbiAgICAgICAgbGV0IGVycm9yTWVzc2FnZSA9IFwiUGFyYW1ldGVyICdzZWFyY2hUeXBlJyBub3QgZm91bmQgaW4gWUFNTFwiO1xuICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xuICAgIH1cbiAgICBsZXQgc2VhcmNoVHlwZTogQXJyYXk8U2VhcmNoVHlwZT4gPSBbXTtcbiAgICBsZXQgcmV0U2VhcmNoVHlwZSA9IGdldFN0cmluZ0FycmF5RnJvbUlucHV0KFxuICAgICAgICBcInNlYXJjaFR5cGVcIixcbiAgICAgICAgeWFtbC5zZWFyY2hUeXBlLFxuICAgICAgICBudW1EYXRhc2V0cyxcbiAgICAgICAgXCJcIixcbiAgICAgICAgdmFsaWRhdGVTZWFyY2hUeXBlLFxuICAgICAgICBmYWxzZVxuICAgICk7XG4gICAgaWYgKHR5cGVvZiByZXRTZWFyY2hUeXBlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiByZXRTZWFyY2hUeXBlOyAvLyBlcnJvck1lc3NhZ2VcbiAgICB9XG4gICAgZm9yIChsZXQgc3RyVHlwZSBvZiByZXRTZWFyY2hUeXBlKSB7XG4gICAgICAgIHN3aXRjaCAoc3RyVHlwZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwidGFnXCI6XG4gICAgICAgICAgICAgICAgc2VhcmNoVHlwZS5wdXNoKFNlYXJjaFR5cGUuVGFnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJmcm9udG1hdHRlclwiOlxuICAgICAgICAgICAgICAgIHNlYXJjaFR5cGUucHVzaChTZWFyY2hUeXBlLkZyb250bWF0dGVyKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJ3aWtpXCI6XG4gICAgICAgICAgICAgICAgc2VhcmNoVHlwZS5wdXNoKFNlYXJjaFR5cGUuV2lraSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwid2lraS5saW5rXCI6XG4gICAgICAgICAgICAgICAgc2VhcmNoVHlwZS5wdXNoKFNlYXJjaFR5cGUuV2lraUxpbmspO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIndpa2kuZGlzcGxheVwiOlxuICAgICAgICAgICAgICAgIHNlYXJjaFR5cGUucHVzaChTZWFyY2hUeXBlLldpa2lEaXNwbGF5KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJ0ZXh0XCI6XG4gICAgICAgICAgICAgICAgc2VhcmNoVHlwZS5wdXNoKFNlYXJjaFR5cGUuVGV4dCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiZHZmaWVsZFwiOlxuICAgICAgICAgICAgICAgIHNlYXJjaFR5cGUucHVzaChTZWFyY2hUeXBlLmR2RmllbGQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInRhYmxlXCI6XG4gICAgICAgICAgICAgICAgc2VhcmNoVHlwZS5wdXNoKFNlYXJjaFR5cGUuVGFibGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImZpbGVtZXRhXCI6XG4gICAgICAgICAgICAgICAgc2VhcmNoVHlwZS5wdXNoKFNlYXJjaFR5cGUuRmlsZU1ldGEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInRhc2tcIjpcbiAgICAgICAgICAgICAgICBzZWFyY2hUeXBlLnB1c2goU2VhcmNoVHlwZS5UYXNrKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJ0YXNrLmFsbFwiOlxuICAgICAgICAgICAgICAgIHNlYXJjaFR5cGUucHVzaChTZWFyY2hUeXBlLlRhc2spO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInRhc2suZG9uZVwiOlxuICAgICAgICAgICAgICAgIHNlYXJjaFR5cGUucHVzaChTZWFyY2hUeXBlLlRhc2tEb25lKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJ0YXNrLm5vdGRvbmVcIjpcbiAgICAgICAgICAgICAgICBzZWFyY2hUeXBlLnB1c2goU2VhcmNoVHlwZS5UYXNrTm90RG9uZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gQ3VycmVudGx5LCB3ZSBkb24ndCBhbGxvdyB0eXBlICd0YWJsZScgdXNlZCB3aXRoIG90aGVyIHR5cGVzXG4gICAgaWYgKFxuICAgICAgICBzZWFyY2hUeXBlLmluY2x1ZGVzKFNlYXJjaFR5cGUuVGFibGUpICYmXG4gICAgICAgIHNlYXJjaFR5cGUuZmlsdGVyKCh0KSA9PiB0ICE9PSBTZWFyY2hUeXBlLlRhYmxlKS5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICAgIGxldCBlcnJvck1lc3NhZ2UgPVxuICAgICAgICAgICAgXCJzZWFyY2hUeXBlICd0YWJsZScgZG9lc3RuJ3Qgd29yayB3aXRoIG90aGVyIHR5cGVzIGZvciBub3dcIjtcbiAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2coc2VhcmNoVHlwZSk7XG5cbiAgICAvLyBzZXBhcmF0b3JcbiAgICBsZXQgbXVsdGlwbGVWYWx1ZVNwYXJhdG9yOiBBcnJheTxzdHJpbmc+ID0gW107XG4gICAgbGV0IHJldE11bHRpcGxlVmFsdWVTcGFyYXRvciA9IGdldFN0cmluZ0FycmF5RnJvbUlucHV0KFxuICAgICAgICBcInNlcGFyYXRvclwiLFxuICAgICAgICB5YW1sLnNlcGFyYXRvcixcbiAgICAgICAgbnVtRGF0YXNldHMsXG4gICAgICAgIFwiXCIsIC8vIHNldCB0aGUgZGVmYXVsdCB2YWx1ZSBsYXRlclxuICAgICAgICBudWxsLFxuICAgICAgICB0cnVlXG4gICAgKTtcbiAgICBpZiAodHlwZW9mIHJldE11bHRpcGxlVmFsdWVTcGFyYXRvciA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4gcmV0TXVsdGlwbGVWYWx1ZVNwYXJhdG9yOyAvLyBlcnJvck1lc3NhZ2VcbiAgICB9XG4gICAgbXVsdGlwbGVWYWx1ZVNwYXJhdG9yID0gcmV0TXVsdGlwbGVWYWx1ZVNwYXJhdG9yLm1hcCgoc2VwKSA9PiB7XG4gICAgICAgIGlmIChzZXAgPT09IFwiY29tbWFcIiB8fCBzZXAgPT09IFwiXFxcXCxcIikge1xuICAgICAgICAgICAgcmV0dXJuIFwiLFwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXA7XG4gICAgfSk7XG4gICAgLy8gY29uc29sZS5sb2cobXVsdGlwbGVWYWx1ZVNwYXJhdG9yKTtcblxuICAgIC8vIHhEYXRhc2V0XG4gICAgbGV0IHJldFhEYXRhc2V0ID0gZ2V0TnVtYmVyQXJyYXlGcm9tSW5wdXQoXG4gICAgICAgIFwieERhdGFzZXRcIixcbiAgICAgICAgeWFtbC54RGF0YXNldCxcbiAgICAgICAgbnVtRGF0YXNldHMsXG4gICAgICAgIC0xLFxuICAgICAgICB0cnVlXG4gICAgKTtcbiAgICBpZiAodHlwZW9mIHJldFhEYXRhc2V0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiByZXRYRGF0YXNldDsgLy8gZXJyb3JNZXNzYWdlXG4gICAgfVxuICAgIGxldCB4RGF0YXNldCA9IHJldFhEYXRhc2V0Lm1hcCgoZDogbnVtYmVyKSA9PiB7XG4gICAgICAgIGlmIChkIDwgMCB8fCBkID49IG51bURhdGFzZXRzKSB7XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGQ7XG4gICAgfSk7XG4gICAgLy8gYXNzaWduIHRoaXMgdG8gcmVuZGVySW5mbyBsYXRlclxuXG4gICAgLy8gQ3JlYXRlIHF1ZXJpZXNcbiAgICBsZXQgcXVlcmllczogQXJyYXk8UXVlcnk+ID0gW107XG4gICAgZm9yIChsZXQgaW5kID0gMDsgaW5kIDwgc2VhcmNoVGFyZ2V0Lmxlbmd0aDsgaW5kKyspIHtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gbmV3IFF1ZXJ5KFxuICAgICAgICAgICAgcXVlcmllcy5sZW5ndGgsXG4gICAgICAgICAgICBzZWFyY2hUeXBlW2luZF0sXG4gICAgICAgICAgICBzZWFyY2hUYXJnZXRbaW5kXVxuICAgICAgICApO1xuICAgICAgICBxdWVyeS5zZXRTZXBhcmF0b3IobXVsdGlwbGVWYWx1ZVNwYXJhdG9yW2luZF0pO1xuICAgICAgICBpZiAoeERhdGFzZXQuaW5jbHVkZXMoaW5kKSkgcXVlcnkudXNlZEFzWERhdGFzZXQgPSB0cnVlO1xuICAgICAgICBxdWVyaWVzLnB1c2gocXVlcnkpO1xuICAgIH1cbiAgICAvLyBjb25zb2xlLmxvZyhxdWVyaWVzKTtcblxuICAgIC8vIENyZWF0ZSBncmFycGggaW5mb1xuICAgIGxldCByZW5kZXJJbmZvID0gbmV3IFJlbmRlckluZm8ocXVlcmllcyk7XG4gICAgbGV0IGtleXNPZlJlbmRlckluZm8gPSBnZXRBdmFpbGFibGVLZXlzT2ZDbGFzcyhyZW5kZXJJbmZvKTtcbiAgICBsZXQgYWRkaXRpb25hbEFsbG93ZWRLZXlzID0gW1wic2VhcmNoVHlwZVwiLCBcInNlYXJjaFRhcmdldFwiLCBcInNlcGFyYXRvclwiXTtcbiAgICAvLyBjb25zb2xlLmxvZyhrZXlzT2ZSZW5kZXJJbmZvKTtcbiAgICBsZXQgeWFtbExpbmVLZXlzID0gW107XG4gICAgbGV0IHlhbWxCYXJLZXlzID0gW107XG4gICAgbGV0IHlhbWxQaWVLZXlzID0gW107XG4gICAgbGV0IHlhbWxTdW1tYXJ5S2V5cyA9IFtdO1xuICAgIGxldCB5YW1sTW9udGhLZXlzID0gW107XG4gICAgbGV0IHlhbWxIZWF0bWFwS2V5cyA9IFtdO1xuICAgIGxldCB5YW1sQnVsbGV0S2V5cyA9IFtdO1xuICAgIGZvciAobGV0IGtleSBvZiBrZXlzRm91bmRJbllBTUwpIHtcbiAgICAgICAgaWYgKC9ebGluZVswLTldKiQvLnRlc3Qoa2V5KSkge1xuICAgICAgICAgICAgeWFtbExpbmVLZXlzLnB1c2goa2V5KTtcbiAgICAgICAgICAgIGFkZGl0aW9uYWxBbGxvd2VkS2V5cy5wdXNoKGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKC9eYmFyWzAtOV0qJC8udGVzdChrZXkpKSB7XG4gICAgICAgICAgICB5YW1sQmFyS2V5cy5wdXNoKGtleSk7XG4gICAgICAgICAgICBhZGRpdGlvbmFsQWxsb3dlZEtleXMucHVzaChrZXkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICgvXnBpZVswLTldKiQvLnRlc3Qoa2V5KSkge1xuICAgICAgICAgICAgeWFtbFBpZUtleXMucHVzaChrZXkpO1xuICAgICAgICAgICAgYWRkaXRpb25hbEFsbG93ZWRLZXlzLnB1c2goa2V5KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoL15zdW1tYXJ5WzAtOV0qJC8udGVzdChrZXkpKSB7XG4gICAgICAgICAgICB5YW1sU3VtbWFyeUtleXMucHVzaChrZXkpO1xuICAgICAgICAgICAgYWRkaXRpb25hbEFsbG93ZWRLZXlzLnB1c2goa2V5KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoL15idWxsZXRbMC05XSokLy50ZXN0KGtleSkpIHtcbiAgICAgICAgICAgIHlhbWxCdWxsZXRLZXlzLnB1c2goa2V5KTtcbiAgICAgICAgICAgIGFkZGl0aW9uYWxBbGxvd2VkS2V5cy5wdXNoKGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKC9ebW9udGhbMC05XSokLy50ZXN0KGtleSkpIHtcbiAgICAgICAgICAgIHlhbWxNb250aEtleXMucHVzaChrZXkpO1xuICAgICAgICAgICAgYWRkaXRpb25hbEFsbG93ZWRLZXlzLnB1c2goa2V5KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoL15oZWF0bWFwWzAtOV0qJC8udGVzdChrZXkpKSB7XG4gICAgICAgICAgICB5YW1sSGVhdG1hcEtleXMucHVzaChrZXkpO1xuICAgICAgICAgICAgYWRkaXRpb25hbEFsbG93ZWRLZXlzLnB1c2goa2V5KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBDdXN0b20gZGF0YXNldFxuICAgIGxldCB5YW1sQ3VzdG9tRGF0YXNldEtleXMgPSBbXTtcbiAgICBmb3IgKGxldCBrZXkgb2Yga2V5c0ZvdW5kSW5ZQU1MKSB7XG4gICAgICAgIGlmICgvXmRhdGFzZXRbMC05XSokLy50ZXN0KGtleSkpIHtcbiAgICAgICAgICAgIC8vIENoZWNrIHRoZSBpZCBvZiBjdXN0b20gZGF0YXNldCBpcyBub3QgZHVwbGljYXRlZFxuICAgICAgICAgICAgbGV0IGN1c3RvbURhdGFzZXRJZCA9IC0xO1xuICAgICAgICAgICAgbGV0IHN0ckN1c3RvbURhdGFzZXRJZCA9IGtleS5yZXBsYWNlKFwiZGF0YXNldFwiLCBcIlwiKTtcbiAgICAgICAgICAgIGlmIChzdHJDdXN0b21EYXRhc2V0SWQgPT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICBjdXN0b21EYXRhc2V0SWQgPSAwO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjdXN0b21EYXRhc2V0SWQgPSBwYXJzZUZsb2F0KHN0ckN1c3RvbURhdGFzZXRJZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBxdWVyaWVzLnNvbWUoKHEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHEuZ2V0SWQoKSA9PT0gY3VzdG9tRGF0YXNldElkO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIkR1cGxpY2F0ZWQgZGF0YXNldCBpZCBmb3Iga2V5ICdcIiArIGtleSArIFwiJ1wiO1xuICAgICAgICAgICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHlhbWxDdXN0b21EYXRhc2V0S2V5cy5wdXNoKGtleSk7XG4gICAgICAgICAgICBhZGRpdGlvbmFsQWxsb3dlZEtleXMucHVzaChrZXkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIGNvbnNvbGUubG9nKGFkZGl0aW9uYWxBbGxvd2VkS2V5cyk7XG4gICAgZm9yIChsZXQga2V5IG9mIGtleXNGb3VuZEluWUFNTCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICAha2V5c09mUmVuZGVySW5mby5pbmNsdWRlcyhrZXkpICYmXG4gICAgICAgICAgICAhYWRkaXRpb25hbEFsbG93ZWRLZXlzLmluY2x1ZGVzKGtleSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIidcIiArIGtleSArIFwiJyBpcyBub3QgYW4gYXZhaWxhYmxlIGtleVwiO1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGxldCB0b3RhbE51bU91dHB1dHMgPVxuICAgICAgICB5YW1sTGluZUtleXMubGVuZ3RoICtcbiAgICAgICAgeWFtbEJhcktleXMubGVuZ3RoICtcbiAgICAgICAgeWFtbFBpZUtleXMubGVuZ3RoICtcbiAgICAgICAgeWFtbFN1bW1hcnlLZXlzLmxlbmd0aCArXG4gICAgICAgIHlhbWxCdWxsZXRLZXlzLmxlbmd0aCArXG4gICAgICAgIHlhbWxNb250aEtleXMubGVuZ3RoICtcbiAgICAgICAgeWFtbEhlYXRtYXBLZXlzLmxlbmd0aDtcbiAgICBpZiAodG90YWxOdW1PdXRwdXRzID09PSAwKSB7XG4gICAgICAgIHJldHVybiBcIk5vIG91dHB1dCBwYXJhbWV0ZXIgcHJvdmlkZWQsIHBsZWFzZSBwbGFjZSBsaW5lLCBiYXIsIHBpZSwgbW9udGgsIGJ1bGxldCwgb3Igc3VtbWFyeS5cIjtcbiAgICB9XG5cbiAgICAvLyBSb290IGZvbGRlciB0byBzZWFyY2hcbiAgICByZW5kZXJJbmZvLmZvbGRlciA9IGdldFN0cmluZ0Zyb21JbnB1dChcbiAgICAgICAgeWFtbD8uZm9sZGVyLFxuICAgICAgICBwbHVnaW4uc2V0dGluZ3MuZm9sZGVyXG4gICAgKTtcbiAgICBpZiAocmVuZGVySW5mby5mb2xkZXIudHJpbSgpID09PSBcIlwiKSB7XG4gICAgICAgIHJlbmRlckluZm8uZm9sZGVyID0gcGx1Z2luLnNldHRpbmdzLmZvbGRlcjtcbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2coXCJyZW5kZXJJbmZvIGZvbGRlcjogXCIgKyByZW5kZXJJbmZvLmZvbGRlcik7XG5cbiAgICBsZXQgYWJzdHJhY3RGb2xkZXIgPSBwbHVnaW4uYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChcbiAgICAgICAgbm9ybWFsaXplUGF0aChyZW5kZXJJbmZvLmZvbGRlcilcbiAgICApO1xuICAgIGlmICghYWJzdHJhY3RGb2xkZXIgfHwgIShhYnN0cmFjdEZvbGRlciBpbnN0YW5jZW9mIFRGb2xkZXIpKSB7XG4gICAgICAgIGxldCBlcnJvck1lc3NhZ2UgPSBcIkZvbGRlciAnXCIgKyByZW5kZXJJbmZvLmZvbGRlciArIFwiJyBkb2Vzbid0IGV4aXN0XCI7XG4gICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XG4gICAgfVxuXG4gICAgLy8gZmlsZVxuICAgIGlmICh0eXBlb2YgeWFtbC5maWxlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGxldCByZXRGaWxlcyA9IGdldFN0cmluZ0FycmF5KFwiZmlsZVwiLCB5YW1sLmZpbGUpO1xuICAgICAgICBpZiAodHlwZW9mIHJldEZpbGVzID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcmV0RmlsZXM7IC8vIGVycm9yIG1lc3NhZ2VcbiAgICAgICAgfVxuICAgICAgICByZW5kZXJJbmZvLmZpbGUgPSByZXRGaWxlcztcbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby5maWxlKTtcblxuICAgIC8vIHNwZWNpZmllZEZpbGVzT25seVxuICAgIGlmICh0eXBlb2YgeWFtbC5zcGVjaWZpZWRGaWxlc09ubHkgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgIHJlbmRlckluZm8uc3BlY2lmaWVkRmlsZXNPbmx5ID0geWFtbC5zcGVjaWZpZWRGaWxlc09ubHk7XG4gICAgfVxuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8uc3BlY2lmaWVkRmlsZXNPbmx5KTtcblxuICAgIC8vIGZpbGVDb250YWluc0xpbmtlZEZpbGVzXG4gICAgaWYgKHR5cGVvZiB5YW1sLmZpbGVDb250YWluc0xpbmtlZEZpbGVzID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGxldCByZXRGaWxlcyA9IGdldFN0cmluZ0FycmF5KFxuICAgICAgICAgICAgXCJmaWxlQ29udGFpbnNMaW5rZWRGaWxlc1wiLFxuICAgICAgICAgICAgeWFtbC5maWxlQ29udGFpbnNMaW5rZWRGaWxlc1xuICAgICAgICApO1xuICAgICAgICBpZiAodHlwZW9mIHJldEZpbGVzID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcmV0RmlsZXM7XG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVySW5mby5maWxlQ29udGFpbnNMaW5rZWRGaWxlcyA9IHJldEZpbGVzO1xuICAgIH1cbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLmZpbGVDb250YWluc0xpbmtlZEZpbGVzKTtcblxuICAgIC8vIGZpbGVNdWx0aXBsaWVyQWZ0ZXJMaW5rXG4gICAgcmVuZGVySW5mby5maWxlTXVsdGlwbGllckFmdGVyTGluayA9IGdldFN0cmluZ0Zyb21JbnB1dChcbiAgICAgICAgeWFtbD8uZmlsZU11bHRpcGxpZXJBZnRlckxpbmssXG4gICAgICAgIHJlbmRlckluZm8uZmlsZU11bHRpcGxpZXJBZnRlckxpbmtcbiAgICApO1xuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8uZmlsZU11bHRpcGxpZXJBZnRlckxpbmspO1xuXG4gICAgLy8gRGF0ZSBmb3JtYXRcbiAgICBjb25zdCBkYXRlRm9ybWF0ID0geWFtbC5kYXRlRm9ybWF0O1xuICAgIC8vPz8gbm90IHN1cmUgd2h5IEkgbmVlZCB0aGlzIHRvIG1ha2UgaXQgd29ya3MsXG4gICAgLy8gd2l0aG91dCB0aGF0LCB0aGUgYXNzaWduZWQgdGhlIHJlbmRlckluZm8uZGF0ZUZvcm1hdCB3aWxsIGJlY29tZSB1bmRlZmluZWRcbiAgICBpZiAodHlwZW9mIHlhbWwuZGF0ZUZvcm1hdCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBpZiAoeWFtbC5kYXRlRm9ybWF0ID09PSBcIlwiKSB7XG4gICAgICAgICAgICByZW5kZXJJbmZvLmRhdGVGb3JtYXQgPSBwbHVnaW4uc2V0dGluZ3MuZGF0ZUZvcm1hdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlbmRlckluZm8uZGF0ZUZvcm1hdCA9IGRhdGVGb3JtYXQ7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICByZW5kZXJJbmZvLmRhdGVGb3JtYXQgPSBwbHVnaW4uc2V0dGluZ3MuZGF0ZUZvcm1hdDtcbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2coXCJyZW5kZXJJbmZvIGRhdGVGb3JtYXQ6IFwiICsgcmVuZGVySW5mby5kYXRlRm9ybWF0KTtcblxuICAgIC8vIERhdGUgZm9ybWF0IHByZWZpeFxuICAgIHJlbmRlckluZm8uZGF0ZUZvcm1hdFByZWZpeCA9IGdldFN0cmluZ0Zyb21JbnB1dChcbiAgICAgICAgeWFtbD8uZGF0ZUZvcm1hdFByZWZpeCxcbiAgICAgICAgcmVuZGVySW5mby5kYXRlRm9ybWF0UHJlZml4XG4gICAgKTtcblxuICAgIC8vIERhdGUgZnJvbWF0IHN1ZmZpeFxuICAgIHJlbmRlckluZm8uZGF0ZUZvcm1hdFN1ZmZpeCA9IGdldFN0cmluZ0Zyb21JbnB1dChcbiAgICAgICAgeWFtbD8uZGF0ZUZvcm1hdFN1ZmZpeCxcbiAgICAgICAgcmVuZGVySW5mby5kYXRlRm9ybWF0U3VmZml4XG4gICAgKTtcblxuICAgIC8vIHN0YXJ0RGF0ZSwgZW5kRGF0ZVxuICAgIC8vIGNvbnNvbGUubG9nKFwiUGFyc2luZyBzdGFydERhdGVcIik7XG4gICAgaWYgKHR5cGVvZiB5YW1sLnN0YXJ0RGF0ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBpZiAoL14oW1xcLV0/WzAtOV0rW1xcLl1bMC05XSt8W1xcLV0/WzAtOV0rKW0kLy50ZXN0KHlhbWwuc3RhcnREYXRlKSkge1xuICAgICAgICAgICAgbGV0IGVycm9yTWVzc2FnZSA9XG4gICAgICAgICAgICAgICAgXCInbScgZm9yICdtaW51dGUnIGlzIHRvbyBzbWFsbCBmb3IgcGFyYW1ldGVyIHN0YXJ0RGF0ZSwgcGxlYXNlIHVzZSAnZCcgZm9yICdkYXknIG9yICdNJyBmb3IgbW9udGhcIjtcbiAgICAgICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHN0clN0YXJ0RGF0ZSA9IGhlbHBlci5nZXREYXRlU3RyaW5nRnJvbUlucHV0U3RyaW5nKFxuICAgICAgICAgICAgeWFtbC5zdGFydERhdGUsXG4gICAgICAgICAgICByZW5kZXJJbmZvLmRhdGVGb3JtYXRQcmVmaXgsXG4gICAgICAgICAgICByZW5kZXJJbmZvLmRhdGVGb3JtYXRTdWZmaXhcbiAgICAgICAgKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coc3RyU3RhcnREYXRlKTtcblxuICAgICAgICAvLyByZWxhdGl2ZSBkYXRlXG4gICAgICAgIGxldCBzdGFydERhdGUgPSBudWxsO1xuICAgICAgICBsZXQgaXNTdGFydERhdGVWYWxpZCA9IGZhbHNlO1xuICAgICAgICBzdGFydERhdGUgPSBoZWxwZXIuZ2V0RGF0ZUJ5RHVyYXRpb25Ub1RvZGF5KFxuICAgICAgICAgICAgc3RyU3RhcnREYXRlLFxuICAgICAgICAgICAgcmVuZGVySW5mby5kYXRlRm9ybWF0XG4gICAgICAgICk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHN0YXJ0RGF0ZSk7XG5cbiAgICAgICAgaWYgKHN0YXJ0RGF0ZSkge1xuICAgICAgICAgICAgaXNTdGFydERhdGVWYWxpZCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdGFydERhdGUgPSBoZWxwZXIuc3RyVG9EYXRlKHN0clN0YXJ0RGF0ZSwgcmVuZGVySW5mby5kYXRlRm9ybWF0KTtcbiAgICAgICAgICAgIGlmIChzdGFydERhdGUuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAgICAgaXNTdGFydERhdGVWYWxpZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gY29uc29sZS5sb2coc3RhcnREYXRlKTtcblxuICAgICAgICBpZiAoIWlzU3RhcnREYXRlVmFsaWQgfHwgc3RhcnREYXRlID09PSBudWxsKSB7XG4gICAgICAgICAgICBsZXQgZXJyb3JNZXNzYWdlID1cbiAgICAgICAgICAgICAgICBcIkludmFsaWQgc3RhcnREYXRlLCB0aGUgZm9ybWF0IG9mIHN0YXJ0RGF0ZSBtYXkgbm90IG1hdGNoIHlvdXIgZGF0ZUZvcm1hdCBcIiArXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5kYXRlRm9ybWF0O1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcbiAgICAgICAgfVxuICAgICAgICByZW5kZXJJbmZvLnN0YXJ0RGF0ZSA9IHN0YXJ0RGF0ZTtcbiAgICB9XG5cbiAgICAvLyBjb25zb2xlLmxvZyhcIlBhcnNpbmcgZW5kRGF0ZVwiKTtcbiAgICBpZiAodHlwZW9mIHlhbWwuZW5kRGF0ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBpZiAoL14oW1xcLV0/WzAtOV0rW1xcLl1bMC05XSt8W1xcLV0/WzAtOV0rKW0kLy50ZXN0KHlhbWwuZW5kRGF0ZSkpIHtcbiAgICAgICAgICAgIGxldCBlcnJvck1lc3NhZ2UgPVxuICAgICAgICAgICAgICAgIFwiJ20nIGZvciAnbWludXRlJyBpcyB0b28gc21hbGwgZm9yIHBhcmFtZXRlciBlbmREYXRlLCBwbGVhc2UgdXNlICdkJyBmb3IgJ2RheScgb3IgJ00nIGZvciBtb250aFwiO1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgc3RyRW5kRGF0ZSA9IGhlbHBlci5nZXREYXRlU3RyaW5nRnJvbUlucHV0U3RyaW5nKFxuICAgICAgICAgICAgeWFtbC5lbmREYXRlLFxuICAgICAgICAgICAgcmVuZGVySW5mby5kYXRlRm9ybWF0UHJlZml4LFxuICAgICAgICAgICAgcmVuZGVySW5mby5kYXRlRm9ybWF0U3VmZml4XG4gICAgICAgICk7XG5cbiAgICAgICAgbGV0IGVuZERhdGUgPSBudWxsO1xuICAgICAgICBsZXQgaXNFbmREYXRlVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgZW5kRGF0ZSA9IGhlbHBlci5nZXREYXRlQnlEdXJhdGlvblRvVG9kYXkoXG4gICAgICAgICAgICBzdHJFbmREYXRlLFxuICAgICAgICAgICAgcmVuZGVySW5mby5kYXRlRm9ybWF0XG4gICAgICAgICk7XG4gICAgICAgIGlmIChlbmREYXRlKSB7XG4gICAgICAgICAgICBpc0VuZERhdGVWYWxpZCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlbmREYXRlID0gaGVscGVyLnN0clRvRGF0ZShzdHJFbmREYXRlLCByZW5kZXJJbmZvLmRhdGVGb3JtYXQpO1xuICAgICAgICAgICAgaWYgKGVuZERhdGUuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAgICAgaXNFbmREYXRlVmFsaWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGVuZERhdGUpO1xuXG4gICAgICAgIGlmICghaXNFbmREYXRlVmFsaWQgfHwgZW5kRGF0ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgbGV0IGVycm9yTWVzc2FnZSA9XG4gICAgICAgICAgICAgICAgXCJJbnZhbGlkIGVuZERhdGUsIHRoZSBmb3JtYXQgb2YgZW5kRGF0ZSBtYXkgbm90IG1hdGNoIHlvdXIgZGF0ZUZvcm1hdCBcIiArXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5kYXRlRm9ybWF0O1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcbiAgICAgICAgfVxuICAgICAgICByZW5kZXJJbmZvLmVuZERhdGUgPSBlbmREYXRlO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICAgIHJlbmRlckluZm8uc3RhcnREYXRlICE9PSBudWxsICYmXG4gICAgICAgIHJlbmRlckluZm8uc3RhcnREYXRlLmlzVmFsaWQoKSAmJlxuICAgICAgICByZW5kZXJJbmZvLmVuZERhdGUgIT09IG51bGwgJiZcbiAgICAgICAgcmVuZGVySW5mby5lbmREYXRlLmlzVmFsaWQoKVxuICAgICkge1xuICAgICAgICAvLyBNYWtlIHN1cmUgZW5kRGF0ZSA+IHN0YXJ0RGF0ZVxuICAgICAgICBpZiAocmVuZGVySW5mby5lbmREYXRlIDwgcmVuZGVySW5mby5zdGFydERhdGUpIHtcbiAgICAgICAgICAgIGxldCBlcnJvck1lc3NhZ2UgPVxuICAgICAgICAgICAgICAgIFwiSW52YWxpZCBkYXRlIHJhbmdlIChzdGFydERhdGUgbGFyZ2VyIHRoYW4gZW5kRGF0ZSlcIjtcbiAgICAgICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby5zdGFydERhdGUpO1xuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8uZW5kRGF0ZSk7XG5cbiAgICAvLyB4RGF0YXNldFxuICAgIHJlbmRlckluZm8ueERhdGFzZXQgPSB4RGF0YXNldDtcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLnhEYXRhc2V0KTtcblxuICAgIC8vIERhdGFzZXQgbmFtZSAobmVlZCB4RGF0YXNldCB0byBzZXQgZGVmYXVsdCBuYW1lKVxuICAgIGxldCByZXREYXRhc2V0TmFtZSA9IGdldFN0cmluZ0FycmF5RnJvbUlucHV0KFxuICAgICAgICBcImRhdGFzZXROYW1lXCIsXG4gICAgICAgIHlhbWwuZGF0YXNldE5hbWUsXG4gICAgICAgIG51bURhdGFzZXRzLFxuICAgICAgICBcInVudGl0bGVkXCIsXG4gICAgICAgIG51bGwsXG4gICAgICAgIHRydWVcbiAgICApO1xuICAgIGlmICh0eXBlb2YgcmV0RGF0YXNldE5hbWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIHJldERhdGFzZXROYW1lOyAvLyBlcnJvck1lc3NhZ2VcbiAgICB9XG4gICAgLy8gcmVuYW1lIHVudGl0bGVkXG4gICAgbGV0IGluZFVudGl0bGVkID0gMDtcbiAgICBmb3IgKGxldCBpbmQgPSAwOyBpbmQgPCByZXREYXRhc2V0TmFtZS5sZW5ndGg7IGluZCsrKSB7XG4gICAgICAgIGlmIChyZW5kZXJJbmZvLnhEYXRhc2V0LmluY2x1ZGVzKGluZCkpIGNvbnRpbnVlO1xuICAgICAgICBpZiAocmV0RGF0YXNldE5hbWVbaW5kXSA9PT0gXCJ1bnRpdGxlZFwiKSB7XG4gICAgICAgICAgICByZXREYXRhc2V0TmFtZVtpbmRdID0gXCJ1bnRpdGxlZFwiICsgaW5kVW50aXRsZWQudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIGluZFVudGl0bGVkKys7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gQ2hlY2sgZHVwbGljYXRlZCBuYW1lc1xuICAgIGlmIChuZXcgU2V0KHJldERhdGFzZXROYW1lKS5zaXplID09PSByZXREYXRhc2V0TmFtZS5sZW5ndGgpIHtcbiAgICAgICAgcmVuZGVySW5mby5kYXRhc2V0TmFtZSA9IHJldERhdGFzZXROYW1lO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBlcnJvck1lc3NhZ2UgPSBcIk5vdCBlbm91Z2ggZGF0YXNldCBuYW1lcyBvciBkdXBsaWNhdGVkIG5hbWVzXCI7XG4gICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XG4gICAgfVxuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8uZGF0YXNldE5hbWUpO1xuXG4gICAgLy8gY29uc3RWYWx1ZVxuICAgIGxldCByZXRDb25zdFZhbHVlID0gZ2V0TnVtYmVyQXJyYXlGcm9tSW5wdXQoXG4gICAgICAgIFwiY29uc3RWYWx1ZVwiLFxuICAgICAgICB5YW1sLmNvbnN0VmFsdWUsXG4gICAgICAgIG51bURhdGFzZXRzLFxuICAgICAgICAxLjAsXG4gICAgICAgIHRydWVcbiAgICApO1xuICAgIGlmICh0eXBlb2YgcmV0Q29uc3RWYWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4gcmV0Q29uc3RWYWx1ZTsgLy8gZXJyb3JNZXNzYWdlXG4gICAgfVxuICAgIHJlbmRlckluZm8uY29uc3RWYWx1ZSA9IHJldENvbnN0VmFsdWU7XG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby5jb25zdFZhbHVlKTtcblxuICAgIC8vIGlnbm9yZUF0dGFjaGVkVmFsdWVcbiAgICBsZXQgcmV0SWdub3JlQXR0YWNoZWRWYWx1ZSA9IGdldEJvb2xBcnJheUZyb21JbnB1dChcbiAgICAgICAgXCJpZ25vcmVBdHRhY2hlZFZhbHVlXCIsXG4gICAgICAgIHlhbWwuaWdub3JlQXR0YWNoZWRWYWx1ZSxcbiAgICAgICAgbnVtRGF0YXNldHMsXG4gICAgICAgIGZhbHNlLFxuICAgICAgICB0cnVlXG4gICAgKTtcbiAgICBpZiAodHlwZW9mIHJldElnbm9yZUF0dGFjaGVkVmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIHJldElnbm9yZUF0dGFjaGVkVmFsdWU7XG4gICAgfVxuICAgIHJlbmRlckluZm8uaWdub3JlQXR0YWNoZWRWYWx1ZSA9IHJldElnbm9yZUF0dGFjaGVkVmFsdWU7XG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby5pZ25vcmVBdHRhY2hlZFZhbHVlKTtcblxuICAgIC8vIGlnbm9yZVplcm9WYWx1ZVxuICAgIGxldCByZXRJZ25vcmVaZXJvVmFsdWUgPSBnZXRCb29sQXJyYXlGcm9tSW5wdXQoXG4gICAgICAgIFwiaWdub3JlWmVyb1ZhbHVlXCIsXG4gICAgICAgIHlhbWwuaWdub3JlWmVyb1ZhbHVlLFxuICAgICAgICBudW1EYXRhc2V0cyxcbiAgICAgICAgZmFsc2UsXG4gICAgICAgIHRydWVcbiAgICApO1xuICAgIGlmICh0eXBlb2YgcmV0SWdub3JlWmVyb1ZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiByZXRJZ25vcmVaZXJvVmFsdWU7XG4gICAgfVxuICAgIHJlbmRlckluZm8uaWdub3JlWmVyb1ZhbHVlID0gcmV0SWdub3JlWmVyb1ZhbHVlO1xuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8uaWdub3JlQXR0YWNoZWRWYWx1ZSk7XG5cbiAgICAvLyBhY2N1bVxuICAgIGxldCByZXRBY2N1bSA9IGdldEJvb2xBcnJheUZyb21JbnB1dChcbiAgICAgICAgXCJhY2N1bVwiLFxuICAgICAgICB5YW1sLmFjY3VtLFxuICAgICAgICBudW1EYXRhc2V0cyxcbiAgICAgICAgZmFsc2UsXG4gICAgICAgIHRydWVcbiAgICApO1xuICAgIGlmICh0eXBlb2YgcmV0QWNjdW0gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIHJldEFjY3VtO1xuICAgIH1cbiAgICByZW5kZXJJbmZvLmFjY3VtID0gcmV0QWNjdW07XG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby5hY2N1bSk7XG5cbiAgICAvLyBwZW5hbHR5XG4gICAgbGV0IHJldFBlbmFsdHkgPSBnZXROdW1iZXJBcnJheUZyb21JbnB1dChcbiAgICAgICAgXCJwZW5hbHR5XCIsXG4gICAgICAgIHlhbWwucGVuYWx0eSxcbiAgICAgICAgbnVtRGF0YXNldHMsXG4gICAgICAgIG51bGwsXG4gICAgICAgIHRydWVcbiAgICApO1xuICAgIGlmICh0eXBlb2YgcmV0UGVuYWx0eSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4gcmV0UGVuYWx0eTtcbiAgICB9XG4gICAgcmVuZGVySW5mby5wZW5hbHR5ID0gcmV0UGVuYWx0eTtcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLnBlbmFsdHkpO1xuXG4gICAgLy8gdmFsdWVTaGlmdFxuICAgIGxldCByZXRWYWx1ZVNoaWZ0ID0gZ2V0TnVtYmVyQXJyYXlGcm9tSW5wdXQoXG4gICAgICAgIFwidmFsdWVTaGlmdFwiLFxuICAgICAgICB5YW1sLnZhbHVlU2hpZnQsXG4gICAgICAgIG51bURhdGFzZXRzLFxuICAgICAgICAwLFxuICAgICAgICB0cnVlXG4gICAgKTtcbiAgICBpZiAodHlwZW9mIHJldFZhbHVlU2hpZnQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIHJldFZhbHVlU2hpZnQ7XG4gICAgfVxuICAgIHJlbmRlckluZm8udmFsdWVTaGlmdCA9IHJldFZhbHVlU2hpZnQ7XG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby52YWx1ZVNoaWZ0KTtcblxuICAgIC8vIHNoaWZ0T25seVZhbHVlTGFyZ2VyVGhhblxuICAgIGxldCByZXRTaGlmdE9ubHlWYWx1ZUxhcmdlclRoYW4gPSBnZXROdW1iZXJBcnJheUZyb21JbnB1dChcbiAgICAgICAgXCJzaGlmdE9ubHlWYWx1ZUxhcmdlclRoYW5cIixcbiAgICAgICAgeWFtbC5zaGlmdE9ubHlWYWx1ZUxhcmdlclRoYW4sXG4gICAgICAgIG51bURhdGFzZXRzLFxuICAgICAgICBudWxsLFxuICAgICAgICB0cnVlXG4gICAgKTtcbiAgICBpZiAodHlwZW9mIHJldFNoaWZ0T25seVZhbHVlTGFyZ2VyVGhhbiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4gcmV0U2hpZnRPbmx5VmFsdWVMYXJnZXJUaGFuO1xuICAgIH1cbiAgICByZW5kZXJJbmZvLnNoaWZ0T25seVZhbHVlTGFyZ2VyVGhhbiA9IHJldFNoaWZ0T25seVZhbHVlTGFyZ2VyVGhhbjtcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLnNoaWZ0T25seVZhbHVlTGFyZ2VyVGhhbik7XG5cbiAgICAvLyB0ZXh0VmFsdWVNYXBcbiAgICBpZiAodHlwZW9mIHlhbWwudGV4dFZhbHVlTWFwICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIGxldCBrZXlzID0gZ2V0QXZhaWxhYmxlS2V5c09mQ2xhc3MoeWFtbC50ZXh0VmFsdWVNYXApO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyh0ZXh0cyk7XG4gICAgICAgIGZvciAobGV0IGtleSBvZiBrZXlzKSB7XG4gICAgICAgICAgICBsZXQgdGV4dCA9IGtleS50cmltKCk7XG4gICAgICAgICAgICByZW5kZXJJbmZvLnRleHRWYWx1ZU1hcFt0ZXh0XSA9IHlhbWwudGV4dFZhbHVlTWFwW3RleHRdO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8udGV4dFZhbHVlTWFwKTtcblxuICAgIC8vIGZpeGVkU2NhbGVcbiAgICBpZiAodHlwZW9mIHlhbWwuZml4ZWRTY2FsZSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICByZW5kZXJJbmZvLmZpeGVkU2NhbGUgPSB5YW1sLmZpeGVkU2NhbGU7XG4gICAgfVxuXG4gICAgLy8gZml0UGFuZWxXaWR0aFxuICAgIGlmICh0eXBlb2YgeWFtbC5maXRQYW5lbFdpZHRoID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICByZW5kZXJJbmZvLmZpdFBhbmVsV2lkdGggPSB5YW1sLmZpdFBhbmVsV2lkdGg7XG4gICAgfVxuXG4gICAgLy8gYXNwZWN0UmF0aW9cbiAgICBpZiAodHlwZW9mIHlhbWwuYXNwZWN0UmF0aW8gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgLy8geWFtbC5maXRQYW5lbFdpZHRoXG4gICAgICAgIGxldCByYXRpb1JlZ0V4ID0gLyhbMC05XSopOihbMC05XSopLztcbiAgICAgICAgbGV0IHBhcnRzID0geWFtbC5hc3BlY3RSYXRpby5tYXRjaChyYXRpb1JlZ0V4KTtcbiAgICAgICAgcGFydHMuc2hpZnQoKTtcbiAgICAgICAgcGFydHMgPSBwYXJ0cy5tYXAoKGk6IHN0cmluZyk9PnBhcnNlSW50KGksMTApKTtcbiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aD09Mikge1xuICAgICAgICAgICAgcmVuZGVySW5mby5hc3BlY3RSYXRpbyA9IG5ldyBBc3BlY3RSYXRpbyhwYXJ0c1swXSwgcGFydHNbMV0pO1xuICAgICAgICAgICAgcmVuZGVySW5mby5kYXRhQXJlYVNpemUgPSByZW5kZXJJbmZvLmFzcGVjdFJhdGlvLnJlY2FsY3VsYXRlU2l6ZShyZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIG1hcmdpblxuICAgIGxldCByZXRNYXJnaW4gPSBnZXROdW1iZXJBcnJheUZyb21JbnB1dChcIm1hcmdpblwiLCB5YW1sLm1hcmdpbiwgNCwgMTAsIHRydWUpO1xuICAgIGlmICh0eXBlb2YgcmV0TWFyZ2luID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiByZXRNYXJnaW47IC8vIGVycm9yTWVzc2FnZVxuICAgIH1cbiAgICBpZiAocmV0TWFyZ2luLmxlbmd0aCA+IDQpIHtcbiAgICAgICAgcmV0dXJuIFwibWFyZ2luIGFjY2VwdHMgbm90IG1vcmUgdGhhbiBmb3VyIHZhbHVlcyBmb3IgdG9wLCByaWdodCwgYm90dG9tLCBhbmQgbGVmdCBtYXJnaW5zLlwiO1xuICAgIH1cbiAgICByZW5kZXJJbmZvLm1hcmdpbiA9IG5ldyBNYXJnaW4oXG4gICAgICAgIHJldE1hcmdpblswXSxcbiAgICAgICAgcmV0TWFyZ2luWzFdLFxuICAgICAgICByZXRNYXJnaW5bMl0sXG4gICAgICAgIHJldE1hcmdpblszXVxuICAgICk7XG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby5tYXJnaW4pO1xuXG4gICAgLy8gY3VzdG9tRGF0YXNldCByZWxhdGVkIHBhcmFtZXRlcnNcbiAgICBmb3IgKGxldCBkYXRhc2V0S2V5IG9mIHlhbWxDdXN0b21EYXRhc2V0S2V5cykge1xuICAgICAgICBsZXQgY3VzdG9tRGF0YXNldCA9IG5ldyBDdXN0b21EYXRhc2V0SW5mbygpO1xuICAgICAgICBsZXQgeWFtbEN1c3RvbURhdGFzZXQgPSB5YW1sW2RhdGFzZXRLZXldO1xuXG4gICAgICAgIGxldCBrZXlzT2ZDdXN0b21EYXRhc2V0SW5mbyA9IGdldEF2YWlsYWJsZUtleXNPZkNsYXNzKGN1c3RvbURhdGFzZXQpO1xuICAgICAgICBsZXQga2V5c0ZvdW5kSW5ZQU1MID0gZ2V0QXZhaWxhYmxlS2V5c09mQ2xhc3MoeWFtbEN1c3RvbURhdGFzZXQpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhrZXlzT2ZDdXN0b21EYXRhc2V0SW5mbyk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGtleXNGb3VuZEluWUFNTCk7XG4gICAgICAgIGZvciAobGV0IGtleSBvZiBrZXlzRm91bmRJbllBTUwpIHtcbiAgICAgICAgICAgIGlmICgha2V5c09mQ3VzdG9tRGF0YXNldEluZm8uaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiJ1wiICsga2V5ICsgXCInIGlzIG5vdCBhbiBhdmFpbGFibGUga2V5XCI7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlkXG4gICAgICAgIGxldCBjdXN0b21EYXRhc2V0SWQgPSAtMTtcbiAgICAgICAgbGV0IHN0ckN1c3RvbURhdGFzZXRJZCA9IGRhdGFzZXRLZXkucmVwbGFjZShcImRhdGFzZXRcIiwgXCJcIik7XG4gICAgICAgIGlmIChzdHJDdXN0b21EYXRhc2V0SWQgPT09IFwiXCIpIHtcbiAgICAgICAgICAgIGN1c3RvbURhdGFzZXRJZCA9IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjdXN0b21EYXRhc2V0SWQgPSBwYXJzZUZsb2F0KHN0ckN1c3RvbURhdGFzZXRJZCk7XG4gICAgICAgIH1cbiAgICAgICAgY3VzdG9tRGF0YXNldC5pZCA9IGN1c3RvbURhdGFzZXRJZDtcblxuICAgICAgICAvLyBuYW1lXG4gICAgICAgIGN1c3RvbURhdGFzZXQubmFtZSA9IGdldFN0cmluZ0Zyb21JbnB1dChcbiAgICAgICAgICAgIHlhbWxDdXN0b21EYXRhc2V0Py5uYW1lLFxuICAgICAgICAgICAgY3VzdG9tRGF0YXNldC5uYW1lXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8geERhdGFcbiAgICAgICAgbGV0IHJldFhEYXRhID0gZ2V0U3RyaW5nQXJyYXkoXCJ4RGF0YVwiLCB5YW1sQ3VzdG9tRGF0YXNldD8ueERhdGEpO1xuICAgICAgICBpZiAodHlwZW9mIHJldFhEYXRhID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcmV0WERhdGE7XG4gICAgICAgIH1cbiAgICAgICAgY3VzdG9tRGF0YXNldC54RGF0YSA9IHJldFhEYXRhO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhjdXN0b21EYXRhc2V0LnhEYXRhKTtcbiAgICAgICAgbGV0IG51bVhEYXRhID0gY3VzdG9tRGF0YXNldC54RGF0YS5sZW5ndGg7XG5cbiAgICAgICAgLy8geURhdGFcbiAgICAgICAgbGV0IHJldFlEYXRhID0gZ2V0U3RyaW5nQXJyYXkoXCJ5RGF0YVwiLCB5YW1sQ3VzdG9tRGF0YXNldD8ueURhdGEpO1xuICAgICAgICBpZiAodHlwZW9mIHJldFlEYXRhID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcmV0WURhdGE7XG4gICAgICAgIH1cbiAgICAgICAgY3VzdG9tRGF0YXNldC55RGF0YSA9IHJldFlEYXRhO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhjdXN0b21EYXRhc2V0LnlEYXRhKTtcbiAgICAgICAgaWYgKGN1c3RvbURhdGFzZXQueURhdGEubGVuZ3RoICE9PSBudW1YRGF0YSkge1xuICAgICAgICAgICAgbGV0IGVycm9yTWVzc2FnZSA9XG4gICAgICAgICAgICAgICAgXCJOdW1iZXIgb2YgZWxlbWVudHMgaW4geERhdGEgYW5kIHlEYXRhIG5vdCBtYXRjaGVkXCI7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVySW5mby5jdXN0b21EYXRhc2V0LnB1c2goY3VzdG9tRGF0YXNldCk7XG4gICAgfSAvLyBjdXN0b21EYXRhc2V0IHJlbGF0ZWQgcGFyYW1ldGVyc1xuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8uY3VzdG9tRGF0YXNldCk7XG5cbiAgICAvLyBsaW5lIHJlbGF0ZWQgcGFyYW1ldGVyc1xuICAgIGZvciAobGV0IGxpbmVLZXkgb2YgeWFtbExpbmVLZXlzKSB7XG4gICAgICAgIGxldCBsaW5lID0gbmV3IExpbmVJbmZvKCk7XG4gICAgICAgIGxldCB5YW1sTGluZSA9IHlhbWxbbGluZUtleV07XG5cbiAgICAgICAgbGV0IGtleXNPZkxpbmVJbmZvID0gZ2V0QXZhaWxhYmxlS2V5c09mQ2xhc3MobGluZSk7XG4gICAgICAgIGxldCBrZXlzRm91bmRJbllBTUwgPSBnZXRBdmFpbGFibGVLZXlzT2ZDbGFzcyh5YW1sTGluZSk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGtleXNPZkxpbmVJbmZvKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coa2V5c0ZvdW5kSW5ZQU1MKTtcbiAgICAgICAgZm9yIChsZXQga2V5IG9mIGtleXNGb3VuZEluWUFNTCkge1xuICAgICAgICAgICAgaWYgKCFrZXlzT2ZMaW5lSW5mby5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCInXCIgKyBrZXkgKyBcIicgaXMgbm90IGFuIGF2YWlsYWJsZSBrZXlcIjtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJldFBhcnNlQ29tbW9uQ2hhcnRJbmZvID0gcGFyc2VDb21tb25DaGFydEluZm8oeWFtbExpbmUsIGxpbmUpO1xuICAgICAgICBpZiAodHlwZW9mIHJldFBhcnNlQ29tbW9uQ2hhcnRJbmZvID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcmV0UGFyc2VDb21tb25DaGFydEluZm87XG4gICAgICAgIH1cblxuICAgICAgICAvLyBsaW5lQ29sb3JcbiAgICAgICAgbGV0IHJldExpbmVDb2xvciA9IGdldFN0cmluZ0FycmF5RnJvbUlucHV0KFxuICAgICAgICAgICAgXCJsaW5lQ29sb3JcIixcbiAgICAgICAgICAgIHlhbWxMaW5lPy5saW5lQ29sb3IsXG4gICAgICAgICAgICBudW1EYXRhc2V0cyxcbiAgICAgICAgICAgIFwiXCIsXG4gICAgICAgICAgICB2YWxpZGF0ZUNvbG9yLFxuICAgICAgICAgICAgdHJ1ZVxuICAgICAgICApO1xuICAgICAgICBpZiAodHlwZW9mIHJldExpbmVDb2xvciA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHJldExpbmVDb2xvcjsgLy8gZXJyb3JNZXNzYWdlXG4gICAgICAgIH1cbiAgICAgICAgbGluZS5saW5lQ29sb3IgPSByZXRMaW5lQ29sb3I7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGxpbmUubGluZUNvbG9yKTtcblxuICAgICAgICAvLyBsaW5lV2lkdGhcbiAgICAgICAgbGV0IHJldExpbmVXaWR0aCA9IGdldE51bWJlckFycmF5RnJvbUlucHV0KFxuICAgICAgICAgICAgXCJsaW5lV2lkdGhcIixcbiAgICAgICAgICAgIHlhbWxMaW5lPy5saW5lV2lkdGgsXG4gICAgICAgICAgICBudW1EYXRhc2V0cyxcbiAgICAgICAgICAgIDEuNSxcbiAgICAgICAgICAgIHRydWVcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHR5cGVvZiByZXRMaW5lV2lkdGggPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiByZXRMaW5lV2lkdGg7IC8vIGVycm9yTWVzc2FnZVxuICAgICAgICB9XG4gICAgICAgIGxpbmUubGluZVdpZHRoID0gcmV0TGluZVdpZHRoO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhsaW5lLmxpbmVXaWR0aCk7XG5cbiAgICAgICAgLy8gc2hvd0xpbmVcbiAgICAgICAgbGV0IHJldFNob3dMaW5lID0gZ2V0Qm9vbEFycmF5RnJvbUlucHV0KFxuICAgICAgICAgICAgXCJzaG93TGluZVwiLFxuICAgICAgICAgICAgeWFtbExpbmU/LnNob3dMaW5lLFxuICAgICAgICAgICAgbnVtRGF0YXNldHMsXG4gICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgdHJ1ZVxuICAgICAgICApO1xuICAgICAgICBpZiAodHlwZW9mIHJldFNob3dMaW5lID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcmV0U2hvd0xpbmU7XG4gICAgICAgIH1cbiAgICAgICAgbGluZS5zaG93TGluZSA9IHJldFNob3dMaW5lO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhsaW5lLnNob3dMaW5lKTtcblxuICAgICAgICAvLyBzaG93UG9pbnRcbiAgICAgICAgbGV0IHJldFNob3dQb2ludCA9IGdldEJvb2xBcnJheUZyb21JbnB1dChcbiAgICAgICAgICAgIFwic2hvd1BvaW50XCIsXG4gICAgICAgICAgICB5YW1sTGluZT8uc2hvd1BvaW50LFxuICAgICAgICAgICAgbnVtRGF0YXNldHMsXG4gICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgdHJ1ZVxuICAgICAgICApO1xuICAgICAgICBpZiAodHlwZW9mIHJldFNob3dQb2ludCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHJldFNob3dQb2ludDtcbiAgICAgICAgfVxuICAgICAgICBsaW5lLnNob3dQb2ludCA9IHJldFNob3dQb2ludDtcbiAgICAgICAgLy8gY29uc29sZS5sb2cobGluZS5zaG93UG9pbnQpO1xuXG4gICAgICAgIC8vIHBvaW50Q29sb3JcbiAgICAgICAgbGV0IHJldFBvaW50Q29sb3IgPSBnZXRTdHJpbmdBcnJheUZyb21JbnB1dChcbiAgICAgICAgICAgIFwicG9pbnRDb2xvclwiLFxuICAgICAgICAgICAgeWFtbExpbmU/LnBvaW50Q29sb3IsXG4gICAgICAgICAgICBudW1EYXRhc2V0cyxcbiAgICAgICAgICAgIFwiIzY5YjNhMlwiLFxuICAgICAgICAgICAgdmFsaWRhdGVDb2xvcixcbiAgICAgICAgICAgIHRydWVcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHR5cGVvZiByZXRQb2ludENvbG9yID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcmV0UG9pbnRDb2xvcjtcbiAgICAgICAgfVxuICAgICAgICBsaW5lLnBvaW50Q29sb3IgPSByZXRQb2ludENvbG9yO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhsaW5lLnBvaW50Q29sb3IpO1xuXG4gICAgICAgIC8vIHBvaW50Qm9yZGVyQ29sb3JcbiAgICAgICAgbGV0IHJldFBvaW50Qm9yZGVyQ29sb3IgPSBnZXRTdHJpbmdBcnJheUZyb21JbnB1dChcbiAgICAgICAgICAgIFwicG9pbnRCb3JkZXJDb2xvclwiLFxuICAgICAgICAgICAgeWFtbExpbmU/LnBvaW50Qm9yZGVyQ29sb3IsXG4gICAgICAgICAgICBudW1EYXRhc2V0cyxcbiAgICAgICAgICAgIFwiIzY5YjNhMlwiLFxuICAgICAgICAgICAgdmFsaWRhdGVDb2xvcixcbiAgICAgICAgICAgIHRydWVcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHR5cGVvZiByZXRQb2ludEJvcmRlckNvbG9yID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcmV0UG9pbnRCb3JkZXJDb2xvcjtcbiAgICAgICAgfVxuICAgICAgICBsaW5lLnBvaW50Qm9yZGVyQ29sb3IgPSByZXRQb2ludEJvcmRlckNvbG9yO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhsaW5lLnBvaW50Qm9yZGVyQ29sb3IpO1xuXG4gICAgICAgIC8vIHBvaW50Qm9yZGVyV2lkdGhcbiAgICAgICAgbGV0IHJldFBvaW50Qm9yZGVyV2lkdGggPSBnZXROdW1iZXJBcnJheUZyb21JbnB1dChcbiAgICAgICAgICAgIFwicG9pbnRCb3JkZXJXaWR0aFwiLFxuICAgICAgICAgICAgeWFtbExpbmU/LnBvaW50Qm9yZGVyV2lkdGgsXG4gICAgICAgICAgICBudW1EYXRhc2V0cyxcbiAgICAgICAgICAgIDAuMCxcbiAgICAgICAgICAgIHRydWVcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHR5cGVvZiByZXRQb2ludEJvcmRlcldpZHRoID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcmV0UG9pbnRCb3JkZXJXaWR0aDsgLy8gZXJyb3JNZXNzYWdlXG4gICAgICAgIH1cbiAgICAgICAgbGluZS5wb2ludEJvcmRlcldpZHRoID0gcmV0UG9pbnRCb3JkZXJXaWR0aDtcbiAgICAgICAgLy8gY29uc29sZS5sb2cobGluZS5wb2ludEJvcmRlcldpZHRoKTtcblxuICAgICAgICAvLyBwb2ludFNpemVcbiAgICAgICAgbGV0IHJldFBvaW50U2l6ZSA9IGdldE51bWJlckFycmF5RnJvbUlucHV0KFxuICAgICAgICAgICAgXCJwb2ludFNpemVcIixcbiAgICAgICAgICAgIHlhbWxMaW5lPy5wb2ludFNpemUsXG4gICAgICAgICAgICBudW1EYXRhc2V0cyxcbiAgICAgICAgICAgIDMuMCxcbiAgICAgICAgICAgIHRydWVcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHR5cGVvZiByZXRQb2ludFNpemUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiByZXRQb2ludFNpemU7IC8vIGVycm9yTWVzc2FnZVxuICAgICAgICB9XG4gICAgICAgIGxpbmUucG9pbnRTaXplID0gcmV0UG9pbnRTaXplO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhsaW5lLnBvaW50U2l6ZSk7XG5cbiAgICAgICAgLy8gZmlsbEdhcFxuICAgICAgICBsZXQgcmV0RmlsbEdhcCA9IGdldEJvb2xBcnJheUZyb21JbnB1dChcbiAgICAgICAgICAgIFwiZmlsbEdhcFwiLFxuICAgICAgICAgICAgeWFtbExpbmU/LmZpbGxHYXAsXG4gICAgICAgICAgICBudW1EYXRhc2V0cyxcbiAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgdHJ1ZVxuICAgICAgICApO1xuICAgICAgICBpZiAodHlwZW9mIHJldEZpbGxHYXAgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiByZXRGaWxsR2FwO1xuICAgICAgICB9XG4gICAgICAgIGxpbmUuZmlsbEdhcCA9IHJldEZpbGxHYXA7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGxpbmUuZmlsbEdhcCk7XG5cbiAgICAgICAgLy8geUF4aXNMb2NhdGlvblxuICAgICAgICBsZXQgcmV0WUF4aXNMb2NhdGlvbiA9IGdldFN0cmluZ0FycmF5RnJvbUlucHV0KFxuICAgICAgICAgICAgXCJ5QXhpc0xvY2F0aW9uXCIsXG4gICAgICAgICAgICB5YW1sTGluZT8ueUF4aXNMb2NhdGlvbixcbiAgICAgICAgICAgIG51bURhdGFzZXRzLFxuICAgICAgICAgICAgXCJsZWZ0XCIsXG4gICAgICAgICAgICB2YWxpZGF0ZVlBeGlzTG9jYXRpb24sXG4gICAgICAgICAgICB0cnVlXG4gICAgICAgICk7XG4gICAgICAgIGlmICh0eXBlb2YgcmV0WUF4aXNMb2NhdGlvbiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHJldFlBeGlzTG9jYXRpb247IC8vIGVycm9yTWVzc2FnZVxuICAgICAgICB9XG4gICAgICAgIGxpbmUueUF4aXNMb2NhdGlvbiA9IHJldFlBeGlzTG9jYXRpb247XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGxpbmUueUF4aXNMb2NhdGlvbik7XG5cbiAgICAgICAgcmVuZGVySW5mby5saW5lLnB1c2gobGluZSk7XG4gICAgfSAvLyBsaW5lIHJlbGF0ZWQgcGFyYW1ldGVyc1xuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8ubGluZSk7XG5cbiAgICAvLyBiYXIgcmVsYXRlZCBwYXJhbWV0ZXJzXG4gICAgZm9yIChsZXQgYmFyS2V5IG9mIHlhbWxCYXJLZXlzKSB7XG4gICAgICAgIGxldCBiYXIgPSBuZXcgQmFySW5mbygpO1xuICAgICAgICBsZXQgeWFtbEJhciA9IHlhbWxbYmFyS2V5XTtcblxuICAgICAgICBsZXQga2V5c09mQmFySW5mbyA9IGdldEF2YWlsYWJsZUtleXNPZkNsYXNzKGJhcik7XG4gICAgICAgIGxldCBrZXlzRm91bmRJbllBTUwgPSBnZXRBdmFpbGFibGVLZXlzT2ZDbGFzcyh5YW1sQmFyKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coa2V5c09mQmFySW5mbyk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGtleXNGb3VuZEluWUFNTCk7XG4gICAgICAgIGZvciAobGV0IGtleSBvZiBrZXlzRm91bmRJbllBTUwpIHtcbiAgICAgICAgICAgIGlmICgha2V5c09mQmFySW5mby5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCInXCIgKyBrZXkgKyBcIicgaXMgbm90IGFuIGF2YWlsYWJsZSBrZXlcIjtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJldFBhcnNlQ29tbW9uQ2hhcnRJbmZvID0gcGFyc2VDb21tb25DaGFydEluZm8oeWFtbEJhciwgYmFyKTtcbiAgICAgICAgaWYgKHR5cGVvZiByZXRQYXJzZUNvbW1vbkNoYXJ0SW5mbyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHJldFBhcnNlQ29tbW9uQ2hhcnRJbmZvO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gYmFyQ29sb3JcbiAgICAgICAgbGV0IHJldEJhckNvbG9yID0gZ2V0U3RyaW5nQXJyYXlGcm9tSW5wdXQoXG4gICAgICAgICAgICBcImJhckNvbG9yXCIsXG4gICAgICAgICAgICB5YW1sQmFyPy5iYXJDb2xvcixcbiAgICAgICAgICAgIG51bURhdGFzZXRzLFxuICAgICAgICAgICAgXCJcIixcbiAgICAgICAgICAgIHZhbGlkYXRlQ29sb3IsXG4gICAgICAgICAgICB0cnVlXG4gICAgICAgICk7XG4gICAgICAgIGlmICh0eXBlb2YgcmV0QmFyQ29sb3IgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiByZXRCYXJDb2xvcjsgLy8gZXJyb3JNZXNzYWdlXG4gICAgICAgIH1cbiAgICAgICAgYmFyLmJhckNvbG9yID0gcmV0QmFyQ29sb3I7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGJhci5iYXJDb2xvcik7XG5cbiAgICAgICAgLy8geUF4aXNMb2NhdGlvblxuICAgICAgICBsZXQgcmV0WUF4aXNMb2NhdGlvbiA9IGdldFN0cmluZ0FycmF5RnJvbUlucHV0KFxuICAgICAgICAgICAgXCJ5QXhpc0xvY2F0aW9uXCIsXG4gICAgICAgICAgICB5YW1sQmFyPy55QXhpc0xvY2F0aW9uLFxuICAgICAgICAgICAgbnVtRGF0YXNldHMsXG4gICAgICAgICAgICBcImxlZnRcIixcbiAgICAgICAgICAgIHZhbGlkYXRlWUF4aXNMb2NhdGlvbixcbiAgICAgICAgICAgIHRydWVcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHR5cGVvZiByZXRZQXhpc0xvY2F0aW9uID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcmV0WUF4aXNMb2NhdGlvbjsgLy8gZXJyb3JNZXNzYWdlXG4gICAgICAgIH1cbiAgICAgICAgYmFyLnlBeGlzTG9jYXRpb24gPSByZXRZQXhpc0xvY2F0aW9uO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhiYXIueUF4aXNMb2NhdGlvbik7XG5cbiAgICAgICAgcmVuZGVySW5mby5iYXIucHVzaChiYXIpO1xuICAgIH0gLy8gYmFyIHJlbGF0ZWQgcGFyYW1ldGVyc1xuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8uYmFyKTtcblxuICAgIC8vIHBpZSByZWxhdGVkIHBhcmFtZXRlcnNcbiAgICBmb3IgKGxldCBwaWVLZXkgb2YgeWFtbFBpZUtleXMpIHtcbiAgICAgICAgbGV0IHBpZSA9IG5ldyBQaWVJbmZvKCk7XG4gICAgICAgIGxldCB5YW1sUGllID0geWFtbFtwaWVLZXldO1xuXG4gICAgICAgIGxldCBrZXlzT2ZQaWVJbmZvID0gZ2V0QXZhaWxhYmxlS2V5c09mQ2xhc3MocGllKTtcbiAgICAgICAgbGV0IGtleXNGb3VuZEluWUFNTCA9IGdldEF2YWlsYWJsZUtleXNPZkNsYXNzKHlhbWxQaWUpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhrZXlzT2ZQaWVJbmZvKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coa2V5c0ZvdW5kSW5ZQU1MKTtcbiAgICAgICAgZm9yIChsZXQga2V5IG9mIGtleXNGb3VuZEluWUFNTCkge1xuICAgICAgICAgICAgaWYgKCFrZXlzT2ZQaWVJbmZvLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIidcIiArIGtleSArIFwiJyBpcyBub3QgYW4gYXZhaWxhYmxlIGtleVwiO1xuICAgICAgICAgICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyB0aXRsZVxuICAgICAgICBwaWUudGl0bGUgPSBnZXRTdHJpbmdGcm9tSW5wdXQoeWFtbFBpZT8udGl0bGUsIHBpZS50aXRsZSk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHBpZS50aXRsZSk7XG5cbiAgICAgICAgLy8gZGF0YVxuICAgICAgICBsZXQgcmV0RGF0YSA9IGdldFN0cmluZ0FycmF5KFwiZGF0YVwiLCB5YW1sUGllPy5kYXRhKTtcbiAgICAgICAgaWYgKHR5cGVvZiByZXREYXRhID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcmV0RGF0YTtcbiAgICAgICAgfVxuICAgICAgICBwaWUuZGF0YSA9IHJldERhdGE7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHBpZS5kYXRhKTtcbiAgICAgICAgbGV0IG51bURhdGEgPSBwaWUuZGF0YS5sZW5ndGg7XG5cbiAgICAgICAgLy8gZGF0YUNvbG9yXG4gICAgICAgIGxldCByZXREYXRhQ29sb3IgPSBnZXRTdHJpbmdBcnJheUZyb21JbnB1dChcbiAgICAgICAgICAgIFwiZGF0YUNvbG9yXCIsXG4gICAgICAgICAgICB5YW1sUGllPy5kYXRhQ29sb3IsXG4gICAgICAgICAgICBudW1EYXRhLFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIHZhbGlkYXRlQ29sb3IsXG4gICAgICAgICAgICB0cnVlXG4gICAgICAgICk7XG4gICAgICAgIGlmICh0eXBlb2YgcmV0RGF0YUNvbG9yID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcmV0RGF0YUNvbG9yOyAvLyBlcnJvck1lc3NhZ2VcbiAgICAgICAgfVxuICAgICAgICBwaWUuZGF0YUNvbG9yID0gcmV0RGF0YUNvbG9yO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhwaWUuZGF0YUNvbG9yKTtcblxuICAgICAgICAvLyBkYXRhTmFtZVxuICAgICAgICBsZXQgcmV0RGF0YU5hbWUgPSBnZXRTdHJpbmdBcnJheUZyb21JbnB1dChcbiAgICAgICAgICAgIFwiZGF0YU5hbWVcIixcbiAgICAgICAgICAgIHlhbWxQaWU/LmRhdGFOYW1lLFxuICAgICAgICAgICAgbnVtRGF0YSxcbiAgICAgICAgICAgIFwiXCIsXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgdHJ1ZVxuICAgICAgICApO1xuICAgICAgICBpZiAodHlwZW9mIHJldERhdGFOYW1lID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcmV0RGF0YU5hbWU7IC8vIGVycm9yTWVzc2FnZVxuICAgICAgICB9XG4gICAgICAgIHBpZS5kYXRhTmFtZSA9IHJldERhdGFOYW1lO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhwaWUuZGF0YU5hbWUpO1xuXG4gICAgICAgIC8vIGxhYmVsXG4gICAgICAgIGxldCByZXRMYWJlbCA9IGdldFN0cmluZ0FycmF5RnJvbUlucHV0KFxuICAgICAgICAgICAgXCJsYWJlbFwiLFxuICAgICAgICAgICAgeWFtbFBpZT8ubGFiZWwsXG4gICAgICAgICAgICBudW1EYXRhLFxuICAgICAgICAgICAgXCJcIixcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICB0cnVlXG4gICAgICAgICk7XG4gICAgICAgIGlmICh0eXBlb2YgcmV0TGFiZWwgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiByZXRMYWJlbDsgLy8gZXJyb3JNZXNzYWdlXG4gICAgICAgIH1cbiAgICAgICAgcGllLmxhYmVsID0gcmV0TGFiZWw7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHBpZS5sYWJlbCk7XG5cbiAgICAgICAgLy8gaGlkZUxhYmVsTGVzc1RoYW5cbiAgICAgICAgaWYgKHR5cGVvZiB5YW1sUGllPy5oaWRlTGFiZWxMZXNzVGhhbiA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgcGllLmhpZGVMYWJlbExlc3NUaGFuID0geWFtbFBpZS5oaWRlTGFiZWxMZXNzVGhhbjtcbiAgICAgICAgfVxuICAgICAgICAvLyBjb25zb2xlLmxvZyhwaWUuaGlkZUxhYmVsTGVzc1RoYW4pO1xuXG4gICAgICAgIC8vIGV4dExhYmVsXG4gICAgICAgIGxldCByZXRFeHRMYWJlbCA9IGdldFN0cmluZ0FycmF5RnJvbUlucHV0KFxuICAgICAgICAgICAgXCJleHRMYWJlbFwiLFxuICAgICAgICAgICAgeWFtbFBpZT8uZXh0TGFiZWwsXG4gICAgICAgICAgICBudW1EYXRhLFxuICAgICAgICAgICAgXCJcIixcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICB0cnVlXG4gICAgICAgICk7XG4gICAgICAgIGlmICh0eXBlb2YgcmV0RXh0TGFiZWwgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiByZXRFeHRMYWJlbDsgLy8gZXJyb3JNZXNzYWdlXG4gICAgICAgIH1cbiAgICAgICAgcGllLmV4dExhYmVsID0gcmV0RXh0TGFiZWw7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHBpZS5leHRMYWJlbCk7XG5cbiAgICAgICAgLy8gc2hvd0V4dExhYmVsT25seUlmTm9MYWJlbFxuICAgICAgICBpZiAodHlwZW9mIHlhbWxQaWU/LnNob3dFeHRMYWJlbE9ubHlJZk5vTGFiZWwgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgICAgICBwaWUuc2hvd0V4dExhYmVsT25seUlmTm9MYWJlbCA9IHlhbWxQaWUuc2hvd0V4dExhYmVsT25seUlmTm9MYWJlbDtcbiAgICAgICAgfVxuICAgICAgICAvLyBjb25zb2xlLmxvZyhwaWUuc2hvd0V4dExhYmVsT25seUlmTm9MYWJlbCk7XG5cbiAgICAgICAgLy8gcmF0aW9Jbm5lclJhZGl1c1xuICAgICAgICBpZiAodHlwZW9mIHlhbWxQaWU/LnJhdGlvSW5uZXJSYWRpdXMgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHBpZS5yYXRpb0lubmVyUmFkaXVzID0geWFtbFBpZS5yYXRpb0lubmVyUmFkaXVzO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHBpZS5yYXRpb0lubmVyUmFkaXVzKTtcblxuICAgICAgICAvLyBzaG93TGVnZW5kXG4gICAgICAgIGlmICh0eXBlb2YgeWFtbFBpZT8uc2hvd0xlZ2VuZCA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgICAgIHBpZS5zaG93TGVnZW5kID0geWFtbFBpZS5zaG93TGVnZW5kO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbGVnZW5kUG9zaXRpb25cbiAgICAgICAgcGllLmxlZ2VuZFBvc2l0aW9uID0gZ2V0U3RyaW5nRnJvbUlucHV0KFxuICAgICAgICAgICAgeWFtbFBpZT8ubGVnZW5kUG9zaXRpb24sXG4gICAgICAgICAgICBcInJpZ2h0XCJcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBsZWdlbmRPcmllbnRcbiAgICAgICAgbGV0IGRlZmF1bHRMZWdlbmRPcmllbnRhdGlvbiA9IFwiaG9yaXpvbnRhbFwiO1xuICAgICAgICBpZiAocGllLmxlZ2VuZFBvc2l0aW9uID09PSBcInRvcFwiIHx8IHBpZS5sZWdlbmRQb3NpdGlvbiA9PT0gXCJib3R0b21cIikge1xuICAgICAgICAgICAgZGVmYXVsdExlZ2VuZE9yaWVudGF0aW9uID0gXCJob3Jpem9udGFsXCI7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICBwaWUubGVnZW5kUG9zaXRpb24gPT09IFwibGVmdFwiIHx8XG4gICAgICAgICAgICBwaWUubGVnZW5kUG9zaXRpb24gPT09IFwicmlnaHRcIlxuICAgICAgICApIHtcbiAgICAgICAgICAgIGRlZmF1bHRMZWdlbmRPcmllbnRhdGlvbiA9IFwidmVydGljYWxcIjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRlZmF1bHRMZWdlbmRPcmllbnRhdGlvbiA9IFwiaG9yaXpvbnRhbFwiO1xuICAgICAgICB9XG4gICAgICAgIHBpZS5sZWdlbmRPcmllbnRhdGlvbiA9IGdldFN0cmluZ0Zyb21JbnB1dChcbiAgICAgICAgICAgIHlhbWxQaWU/LmxlZ2VuZE9yaWVudGF0aW9uLFxuICAgICAgICAgICAgZGVmYXVsdExlZ2VuZE9yaWVudGF0aW9uXG4gICAgICAgICk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHBpZS5sZWdlbmRQb3NpdGlvbik7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHBpZS5sZWdlbmRPcmllbnRhdGlvbik7XG5cbiAgICAgICAgLy8gbGVnZW5kQmdDb2xvclxuICAgICAgICBwaWUubGVnZW5kQmdDb2xvciA9IGdldFN0cmluZ0Zyb21JbnB1dChcbiAgICAgICAgICAgIHlhbWxQaWU/LmxlZ2VuZEJnQ29sb3IsXG4gICAgICAgICAgICBwaWUubGVnZW5kQmdDb2xvclxuICAgICAgICApO1xuXG4gICAgICAgIC8vIGxlZ2VuZEJvcmRlckNvbG9yXG4gICAgICAgIHBpZS5sZWdlbmRCb3JkZXJDb2xvciA9IGdldFN0cmluZ0Zyb21JbnB1dChcbiAgICAgICAgICAgIHlhbWxQaWU/LmxlZ2VuZEJvcmRlckNvbG9yLFxuICAgICAgICAgICAgcGllLmxlZ2VuZEJvcmRlckNvbG9yXG4gICAgICAgICk7XG5cbiAgICAgICAgcmVuZGVySW5mby5waWUucHVzaChwaWUpO1xuICAgIH0gLy8gcGllIHJlbGF0ZWQgcGFyYW1ldGVyc1xuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8ucGllKTtcblxuICAgIC8vIHN1bW1hcnkgcmVsYXRlZCBwYXJhbWV0ZXJzXG4gICAgZm9yIChsZXQgc3VtbWFyeUtleSBvZiB5YW1sU3VtbWFyeUtleXMpIHtcbiAgICAgICAgbGV0IHN1bW1hcnkgPSBuZXcgU3VtbWFyeUluZm8oKTtcbiAgICAgICAgbGV0IHlhbWxTdW1tYXJ5ID0geWFtbFtzdW1tYXJ5S2V5XTtcblxuICAgICAgICBsZXQga2V5c09mU3VtbWFyeUluZm8gPSBnZXRBdmFpbGFibGVLZXlzT2ZDbGFzcyhzdW1tYXJ5KTtcbiAgICAgICAgbGV0IGtleXNGb3VuZEluWUFNTCA9IGdldEF2YWlsYWJsZUtleXNPZkNsYXNzKHlhbWxTdW1tYXJ5KTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coa2V5c09mU3VtbWFyeUluZm8pO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhrZXlzRm91bmRJbllBTUwpO1xuICAgICAgICBmb3IgKGxldCBrZXkgb2Yga2V5c0ZvdW5kSW5ZQU1MKSB7XG4gICAgICAgICAgICBpZiAoIWtleXNPZlN1bW1hcnlJbmZvLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIidcIiArIGtleSArIFwiJyBpcyBub3QgYW4gYXZhaWxhYmxlIGtleVwiO1xuICAgICAgICAgICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyB0ZW1wbGF0ZVxuICAgICAgICBzdW1tYXJ5LnRlbXBsYXRlID0gZ2V0U3RyaW5nRnJvbUlucHV0KFxuICAgICAgICAgICAgeWFtbFN1bW1hcnk/LnRlbXBsYXRlLFxuICAgICAgICAgICAgc3VtbWFyeS50ZW1wbGF0ZVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIHN0eWxlXG4gICAgICAgIHN1bW1hcnkuc3R5bGUgPSBnZXRTdHJpbmdGcm9tSW5wdXQoeWFtbFN1bW1hcnk/LnN0eWxlLCBzdW1tYXJ5LnN0eWxlKTtcblxuICAgICAgICByZW5kZXJJbmZvLnN1bW1hcnkucHVzaChzdW1tYXJ5KTtcbiAgICB9IC8vIHN1bW1hcnkgcmVsYXRlZCBwYXJhbWV0ZXJzXG5cbiAgICAvLyBNb250aCByZWxhdGVkIHBhcmFtZXRlcnNcbiAgICBmb3IgKGxldCBtb250aEtleSBvZiB5YW1sTW9udGhLZXlzKSB7XG4gICAgICAgIGxldCBtb250aCA9IG5ldyBNb250aEluZm8oKTtcbiAgICAgICAgbGV0IHlhbWxNb250aCA9IHlhbWxbbW9udGhLZXldO1xuXG4gICAgICAgIGxldCBrZXlzT2ZNb250aEluZm8gPSBnZXRBdmFpbGFibGVLZXlzT2ZDbGFzcyhtb250aCk7XG4gICAgICAgIGxldCBrZXlzRm91bmRJbllBTUwgPSBnZXRBdmFpbGFibGVLZXlzT2ZDbGFzcyh5YW1sTW9udGgpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhrZXlzT2ZTdW1tYXJ5SW5mbyk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGtleXNGb3VuZEluWUFNTCk7XG4gICAgICAgIGZvciAobGV0IGtleSBvZiBrZXlzRm91bmRJbllBTUwpIHtcbiAgICAgICAgICAgIGlmICgha2V5c09mTW9udGhJbmZvLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIidcIiArIGtleSArIFwiJyBpcyBub3QgYW4gYXZhaWxhYmxlIGtleVwiO1xuICAgICAgICAgICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBtb2RlXG4gICAgICAgIG1vbnRoLm1vZGUgPSBnZXRTdHJpbmdGcm9tSW5wdXQoeWFtbE1vbnRoPy5tb2RlLCBtb250aC5tb2RlKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2cobW9udGgubW9kZSk7XG5cbiAgICAgICAgLy8gZGF0YXNldFxuICAgICAgICBsZXQgcmV0RGF0YXNldCA9IGdldE51bWJlckFycmF5KFwiZGF0YXNldFwiLCB5YW1sTW9udGg/LmRhdGFzZXQpO1xuICAgICAgICBpZiAodHlwZW9mIHJldERhdGFzZXQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiByZXREYXRhc2V0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXREYXRhc2V0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgLy8gaW5zZXJ0IHkgZGF0YXNldCBnaXZlblxuICAgICAgICAgICAgZm9yIChsZXQgcSBvZiBxdWVyaWVzKSB7XG4gICAgICAgICAgICAgICAgcmV0RGF0YXNldC5wdXNoKHEuZ2V0SWQoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbW9udGguZGF0YXNldCA9IHJldERhdGFzZXQ7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKG1vbnRoLmRhdGFzZXQpO1xuICAgICAgICBsZXQgbnVtRGF0YXNldCA9IG1vbnRoLmRhdGFzZXQubGVuZ3RoO1xuXG4gICAgICAgIC8vIHN0YXJ0V2Vla09uXG4gICAgICAgIG1vbnRoLnN0YXJ0V2Vla09uID0gZ2V0U3RyaW5nRnJvbUlucHV0KFxuICAgICAgICAgICAgeWFtbE1vbnRoPy5zdGFydFdlZWtPbixcbiAgICAgICAgICAgIG1vbnRoLnN0YXJ0V2Vla09uXG4gICAgICAgICk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKG1vbnRoLnN0YXJ0V2Vla09uKTtcblxuICAgICAgICAvLyBzaG93Q2lyY2xlXG4gICAgICAgIGlmICh0eXBlb2YgeWFtbE1vbnRoPy5zaG93Q2lyY2xlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgbW9udGguc2hvd0NpcmNsZSA9IHlhbWxNb250aC5zaG93Q2lyY2xlO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKG1vbnRoLnNob3dDaXJjbGUpO1xuXG4gICAgICAgIC8vIHRocmVzaG9sZFxuICAgICAgICBsZXQgcmV0VGhyZXNob2xkID0gZ2V0TnVtYmVyQXJyYXkoXCJ0aHJlc2hvbGRcIiwgeWFtbE1vbnRoPy50aHJlc2hvbGQpO1xuICAgICAgICBpZiAodHlwZW9mIHJldFRocmVzaG9sZCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHJldFRocmVzaG9sZDtcbiAgICAgICAgfVxuICAgICAgICBtb250aC50aHJlc2hvbGQgPSByZXRUaHJlc2hvbGQ7XG4gICAgICAgIGlmIChtb250aC50aHJlc2hvbGQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpbmREYXRhc2V0ID0gMDsgaW5kRGF0YXNldCA8IG51bURhdGFzZXQ7IGluZERhdGFzZXQrKykge1xuICAgICAgICAgICAgICAgIG1vbnRoLnRocmVzaG9sZC5wdXNoKDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtb250aC50aHJlc2hvbGQubGVuZ3RoICE9PSBtb250aC5kYXRhc2V0Lmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2cobW9udGgudGhyZXNob2xkKTtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKG1vbnRoLmRhdGFzZXQpO1xuICAgICAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID1cbiAgICAgICAgICAgICAgICBcIlRoZSBudW1iZXIgb2YgaW5wdXRzIG9mIHRocmVzaG9sZCBhbmQgZGF0YXNldCBub3QgbWF0Y2hlZFwiO1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjb25zb2xlLmxvZyhtb250aC50aHJlc2hvbGQpO1xuXG4gICAgICAgIC8vIHlNaW5cbiAgICAgICAgbGV0IHJldFlNaW4gPSBnZXROdW1iZXJBcnJheShcInlNaW5cIiwgeWFtbE1vbnRoPy55TWluKTtcbiAgICAgICAgaWYgKHR5cGVvZiByZXRZTWluID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcmV0WU1pbjtcbiAgICAgICAgfVxuICAgICAgICBtb250aC55TWluID0gcmV0WU1pbjtcbiAgICAgICAgaWYgKG1vbnRoLnlNaW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpbmREYXRhc2V0ID0gMDsgaW5kRGF0YXNldCA8IG51bURhdGFzZXQ7IGluZERhdGFzZXQrKykge1xuICAgICAgICAgICAgICAgIG1vbnRoLnlNaW4ucHVzaChudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobW9udGgueU1pbi5sZW5ndGggIT09IG1vbnRoLmRhdGFzZXQubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPVxuICAgICAgICAgICAgICAgIFwiVGhlIG51bWJlciBvZiBpbnB1dHMgb2YgeU1pbiBhbmQgZGF0YXNldCBub3QgbWF0Y2hlZFwiO1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjb25zb2xlLmxvZyhtb250aC55TWluKTtcblxuICAgICAgICAvLyB5TWF4XG4gICAgICAgIGxldCByZXRZTWF4ID0gZ2V0TnVtYmVyQXJyYXkoXCJ5TWF4XCIsIHlhbWxNb250aD8ueU1heCk7XG4gICAgICAgIGlmICh0eXBlb2YgcmV0WU1heCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHJldFlNYXg7XG4gICAgICAgIH1cbiAgICAgICAgbW9udGgueU1heCA9IHJldFlNYXg7XG4gICAgICAgIGlmIChtb250aC55TWF4Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaW5kRGF0YXNldCA9IDA7IGluZERhdGFzZXQgPCBudW1EYXRhc2V0OyBpbmREYXRhc2V0KyspIHtcbiAgICAgICAgICAgICAgICBtb250aC55TWF4LnB1c2gobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1vbnRoLnlNYXgubGVuZ3RoICE9PSBtb250aC5kYXRhc2V0Lmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID1cbiAgICAgICAgICAgICAgICBcIlRoZSBudW1iZXIgb2YgaW5wdXRzIG9mIHlNaW4gYW5kIGRhdGFzZXQgbm90IG1hdGNoZWRcIjtcbiAgICAgICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY29uc29sZS5sb2cobW9udGgueU1heCk7XG5cbiAgICAgICAgLy8gY29sb3JcbiAgICAgICAgbW9udGguY29sb3IgPSBnZXRTdHJpbmdGcm9tSW5wdXQoeWFtbE1vbnRoPy5jb2xvciwgbW9udGguY29sb3IpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhtb250aC5jb2xvcik7XG5cbiAgICAgICAgLy8gZGltTm90SW5Nb250aFxuICAgICAgICBpZiAodHlwZW9mIHlhbWxNb250aD8uZGltTm90SW5Nb250aCA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgICAgIG1vbnRoLmRpbU5vdEluTW9udGggPSB5YW1sTW9udGguZGltTm90SW5Nb250aDtcbiAgICAgICAgfVxuICAgICAgICAvLyBjb25zb2xlLmxvZyhtb250aC5kaW1Ob3RJbk1vbnRoKTtcblxuICAgICAgICAvLyBzaG93U3RyZWFrXG4gICAgICAgIGlmICh0eXBlb2YgeWFtbE1vbnRoPy5zaG93U3RyZWFrID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgbW9udGguc2hvd1N0cmVhayA9IHlhbWxNb250aC5zaG93U3RyZWFrO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKG1vbnRoLnNob3dTdHJlYWspO1xuXG4gICAgICAgIC8vIHNob3dUb2RheVJpbmdcbiAgICAgICAgaWYgKHR5cGVvZiB5YW1sTW9udGg/LnNob3dUb2RheVJpbmcgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgICAgICBtb250aC5zaG93VG9kYXlSaW5nID0geWFtbE1vbnRoLnNob3dUb2RheVJpbmc7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY29uc29sZS5sb2cobW9udGguc2hvd1RvZGF5UmluZyk7XG5cbiAgICAgICAgLy8gc2hvd1NlbGVjdGVkVmFsdWVcbiAgICAgICAgaWYgKHR5cGVvZiB5YW1sTW9udGg/LnNob3dTZWxlY3RlZFZhbHVlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgbW9udGguc2hvd1NlbGVjdGVkVmFsdWUgPSB5YW1sTW9udGguc2hvd1NlbGVjdGVkVmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY29uc29sZS5sb2cobW9udGguc2hvd1NlbGVjdGVkVmFsdWUpO1xuXG4gICAgICAgIC8vIHNob3dTZWxlY3RlZFJpbmdcbiAgICAgICAgaWYgKHR5cGVvZiB5YW1sTW9udGg/LnNob3dTZWxlY3RlZFJpbmcgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgICAgICBtb250aC5zaG93U2VsZWN0ZWRSaW5nID0geWFtbE1vbnRoLnNob3dTZWxlY3RlZFJpbmc7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY29uc29sZS5sb2cobW9udGguc2hvd1NlbGVjdGVkUmluZyk7XG5cbiAgICAgICAgLy8gY2lyY2xlQ29sb3JcbiAgICAgICAgbW9udGguY2lyY2xlQ29sb3IgPSBnZXRTdHJpbmdGcm9tSW5wdXQoXG4gICAgICAgICAgICB5YW1sTW9udGg/LmNpcmNsZUNvbG9yLFxuICAgICAgICAgICAgbW9udGguY2lyY2xlQ29sb3JcbiAgICAgICAgKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2cobW9udGguY2lyY2xlQ29sb3IpO1xuXG4gICAgICAgIC8vIGNpcmNsZUNvbG9yQnlWYWx1ZVxuICAgICAgICBpZiAodHlwZW9mIHlhbWxNb250aD8uY2lyY2xlQ29sb3JCeVZhbHVlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgbW9udGguY2lyY2xlQ29sb3JCeVZhbHVlID0geWFtbE1vbnRoLmNpcmNsZUNvbG9yQnlWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjb25zb2xlLmxvZyhtb250aC5jaXJjbGVDb2xvckJ5VmFsdWUpO1xuXG4gICAgICAgIC8vIGhlYWRlclllYXJDb2xvclxuICAgICAgICBtb250aC5oZWFkZXJZZWFyQ29sb3IgPSBnZXRTdHJpbmdGcm9tSW5wdXQoXG4gICAgICAgICAgICB5YW1sTW9udGg/LmhlYWRlclllYXJDb2xvcixcbiAgICAgICAgICAgIG1vbnRoLmhlYWRlclllYXJDb2xvclxuICAgICAgICApO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhtb250aC5oZWFkZXJZZWFyQ29sb3IpO1xuXG4gICAgICAgIC8vIGhlYWRlck1vbnRoQ29sb3JcbiAgICAgICAgbW9udGguaGVhZGVyTW9udGhDb2xvciA9IGdldFN0cmluZ0Zyb21JbnB1dChcbiAgICAgICAgICAgIHlhbWxNb250aD8uaGVhZGVyTW9udGhDb2xvcixcbiAgICAgICAgICAgIG1vbnRoLmhlYWRlck1vbnRoQ29sb3JcbiAgICAgICAgKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2cobW9udGguaGVhZGVyTW9udGhDb2xvcik7XG5cbiAgICAgICAgLy8gZGl2aWRpbmdMaW5lQ29sb3JcbiAgICAgICAgbW9udGguZGl2aWRpbmdMaW5lQ29sb3IgPSBnZXRTdHJpbmdGcm9tSW5wdXQoXG4gICAgICAgICAgICB5YW1sTW9udGg/LmRpdmlkaW5nTGluZUNvbG9yLFxuICAgICAgICAgICAgbW9udGguZGl2aWRpbmdMaW5lQ29sb3JcbiAgICAgICAgKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2cobW9udGguZGl2aWRpbmdMaW5lQ29sb3IpO1xuXG4gICAgICAgIC8vIHRvZGF5UmluZ0NvbG9yXG4gICAgICAgIG1vbnRoLnRvZGF5UmluZ0NvbG9yID0gZ2V0U3RyaW5nRnJvbUlucHV0KFxuICAgICAgICAgICAgeWFtbE1vbnRoPy50b2RheVJpbmdDb2xvcixcbiAgICAgICAgICAgIG1vbnRoLnRvZGF5UmluZ0NvbG9yXG4gICAgICAgICk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKG1vbnRoLnRvZGF5UmluZ0NvbG9yKTtcblxuICAgICAgICAvLyBzZWxlY3RlZFJpbmdDb2xvclxuICAgICAgICBtb250aC5zZWxlY3RlZFJpbmdDb2xvciA9IGdldFN0cmluZ0Zyb21JbnB1dChcbiAgICAgICAgICAgIHlhbWxNb250aD8uc2VsZWN0ZWRSaW5nQ29sb3IsXG4gICAgICAgICAgICBtb250aC5zZWxlY3RlZFJpbmdDb2xvclxuICAgICAgICApO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhtb250aC5zZWxlY3RlZFJpbmdDb2xvcik7XG5cbiAgICAgICAgLy8gaW5pdE1vbnRoXG4gICAgICAgIG1vbnRoLmluaXRNb250aCA9IGdldFN0cmluZ0Zyb21JbnB1dChcbiAgICAgICAgICAgIHlhbWxNb250aD8uaW5pdE1vbnRoLFxuICAgICAgICAgICAgbW9udGguaW5pdE1vbnRoXG4gICAgICAgICk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKG1vbnRoLmluaXRNb250aCk7XG5cbiAgICAgICAgLy8gc2hvd0Fubm90YXRpb25cbiAgICAgICAgaWYgKHR5cGVvZiB5YW1sTW9udGg/LnNob3dBbm5vdGF0aW9uID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgbW9udGguc2hvd0Fubm90YXRpb24gPSB5YW1sTW9udGguc2hvd0Fubm90YXRpb247XG4gICAgICAgIH1cbiAgICAgICAgLy8gY29uc29sZS5sb2cobW9udGguc2hvd0Fubm90YXRpb24pO1xuXG4gICAgICAgIC8vIGFubm90YXRpb25cbiAgICAgICAgbGV0IHJldEFubm90YXRpb24gPSBnZXRTdHJpbmdBcnJheShcImFubm90YXRpb25cIiwgeWFtbE1vbnRoPy5hbm5vdGF0aW9uKTtcbiAgICAgICAgaWYgKHR5cGVvZiByZXRBbm5vdGF0aW9uID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcmV0QW5ub3RhdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBtb250aC5hbm5vdGF0aW9uID0gcmV0QW5ub3RhdGlvbjtcbiAgICAgICAgaWYgKG1vbnRoLmFubm90YXRpb24ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpbmREYXRhc2V0ID0gMDsgaW5kRGF0YXNldCA8IG51bURhdGFzZXQ7IGluZERhdGFzZXQrKykge1xuICAgICAgICAgICAgICAgIG1vbnRoLmFubm90YXRpb24ucHVzaChudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobW9udGguYW5ub3RhdGlvbi5sZW5ndGggIT09IG1vbnRoLmRhdGFzZXQubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPVxuICAgICAgICAgICAgICAgIFwiVGhlIG51bWJlciBvZiBpbnB1dHMgb2YgYW5ub3RhdGlvbiBhbmQgZGF0YXNldCBub3QgbWF0Y2hlZFwiO1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjb25zb2xlLmxvZyhtb250aC5hbm5vdGF0aW9uKTtcblxuICAgICAgICAvLyBzaG93QW5ub3RhdGlvbk9mQWxsVGFyZ2V0c1xuICAgICAgICBpZiAodHlwZW9mIHlhbWxNb250aD8uc2hvd0Fubm90YXRpb25PZkFsbFRhcmdldHMgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgICAgICBtb250aC5zaG93QW5ub3RhdGlvbk9mQWxsVGFyZ2V0cyA9XG4gICAgICAgICAgICAgICAgeWFtbE1vbnRoLnNob3dBbm5vdGF0aW9uT2ZBbGxUYXJnZXRzO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKG1vbnRoLnNob3dBbm5vdGF0aW9uT2ZBbGxUYXJnZXRzKTtcblxuICAgICAgICByZW5kZXJJbmZvLm1vbnRoLnB1c2gobW9udGgpO1xuICAgIH0gLy8gTW9udGggcmVsYXRlZCBwYXJhbWV0ZXJzXG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby5tb250aCk7XG5cbiAgICAvLyBIZWF0bWFwIHJlbGF0ZWQgcGFyYW1ldGVyc1xuICAgIGZvciAobGV0IGhlYXRtYXBLZXkgb2YgeWFtbEhlYXRtYXBLZXlzKSB7XG4gICAgICAgIGxldCBoZWF0bWFwID0gbmV3IEhlYXRtYXBJbmZvKCk7XG4gICAgICAgIGxldCB5YW1sSGVhdG1hcCA9IHlhbWxbaGVhdG1hcEtleV07XG5cbiAgICAgICAgbGV0IGtleXNPZkhlYXRtYXBJbmZvID0gZ2V0QXZhaWxhYmxlS2V5c09mQ2xhc3MoaGVhdG1hcCk7XG4gICAgICAgIGxldCBrZXlzRm91bmRJbllBTUwgPSBnZXRBdmFpbGFibGVLZXlzT2ZDbGFzcyh5YW1sSGVhdG1hcCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGtleXNPZkhlYXRtYXBJbmZvKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coa2V5c0ZvdW5kSW5ZQU1MKTtcbiAgICAgICAgZm9yIChsZXQga2V5IG9mIGtleXNGb3VuZEluWUFNTCkge1xuICAgICAgICAgICAgaWYgKCFrZXlzT2ZIZWF0bWFwSW5mby5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCInXCIgKyBrZXkgKyBcIicgaXMgbm90IGFuIGF2YWlsYWJsZSBrZXlcIjtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVySW5mby5oZWF0bWFwLnB1c2goaGVhdG1hcCk7XG4gICAgfVxuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8uaGVhdG1hcCk7XG5cbiAgICAvLyBCdWxsZXQgcmVsYXRlZCBwYXJhbWV0ZXJzXG4gICAgZm9yIChsZXQgYnVsbGV0S2V5IG9mIHlhbWxCdWxsZXRLZXlzKSB7XG4gICAgICAgIGxldCBidWxsZXQgPSBuZXcgQnVsbGV0SW5mbygpO1xuICAgICAgICBsZXQgeWFtbEJ1bGxldCA9IHlhbWxbYnVsbGV0S2V5XTtcblxuICAgICAgICBsZXQga2V5c09mQnVsbGV0SW5mbyA9IGdldEF2YWlsYWJsZUtleXNPZkNsYXNzKGJ1bGxldCk7XG4gICAgICAgIGxldCBrZXlzRm91bmRJbllBTUwgPSBnZXRBdmFpbGFibGVLZXlzT2ZDbGFzcyh5YW1sQnVsbGV0KTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coa2V5c09mU3VtbWFyeUluZm8pO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhrZXlzRm91bmRJbllBTUwpO1xuICAgICAgICBmb3IgKGxldCBrZXkgb2Yga2V5c0ZvdW5kSW5ZQU1MKSB7XG4gICAgICAgICAgICBpZiAoIWtleXNPZkJ1bGxldEluZm8uaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiJ1wiICsga2V5ICsgXCInIGlzIG5vdCBhbiBhdmFpbGFibGUga2V5XCI7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRpdGxlXG4gICAgICAgIGJ1bGxldC50aXRsZSA9IGdldFN0cmluZ0Zyb21JbnB1dCh5YW1sQnVsbGV0Py50aXRsZSwgYnVsbGV0LnRpdGxlKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYnVsbGV0LnRpdGxlKTtcblxuICAgICAgICAvLyBkYXRhc2V0XG4gICAgICAgIGJ1bGxldC5kYXRhc2V0ID0gZ2V0U3RyaW5nRnJvbUlucHV0KFxuICAgICAgICAgICAgeWFtbEJ1bGxldD8uZGF0YXNldCxcbiAgICAgICAgICAgIGJ1bGxldC5kYXRhc2V0XG4gICAgICAgICk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGJ1bGxldC5kYXRhc2V0KTtcblxuICAgICAgICAvLyBvcmllbnRhdGlvblxuICAgICAgICBidWxsZXQub3JpZW50YXRpb24gPSBnZXRTdHJpbmdGcm9tSW5wdXQoXG4gICAgICAgICAgICB5YW1sQnVsbGV0Py5vcmllbnRhdGlvbixcbiAgICAgICAgICAgIGJ1bGxldC5vcmllbnRhdGlvblxuICAgICAgICApO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhidWxsZXQub3JpZW50YXRpb24pO1xuXG4gICAgICAgIC8vIHJhbmdlXG4gICAgICAgIGxldCByZXRSYW5nZSA9IGdldE51bWJlckFycmF5KFwicmFuZ2VcIiwgeWFtbEJ1bGxldD8ucmFuZ2UpO1xuICAgICAgICBpZiAodHlwZW9mIHJldFJhbmdlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcmV0UmFuZ2U7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJhbmdlID0gcmV0UmFuZ2UgYXMgQXJyYXk8bnVtYmVyPjtcbiAgICAgICAgLy8gQ2hlY2sgdGhlIHZhbHVlIGlzIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZ1xuICAgICAgICAvLyBDaGVjayB0aGUgdmFsdWUgaXMgbm90IG5lZ2F0aXZlXG4gICAgICAgIGlmIChyYW5nZS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIGlmIChyYW5nZVswXSA8IDApIHtcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIk5lZ2F0aXZlIHJhbmdlIHZhbHVlIGlzIG5vdCBhbGxvd2VkXCI7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChyYW5nZS5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBsZXQgbGFzdEJvdW5kID0gcmFuZ2VbMF07XG4gICAgICAgICAgICBpZiAobGFzdEJvdW5kIDwgMCkge1xuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiTmVnYXRpdmUgcmFuZ2UgdmFsdWUgaXMgbm90IGFsbG93ZWRcIjtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpbmQgPSAxOyBpbmQgPCByYW5nZS5sZW5ndGg7IGluZCsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyYW5nZVtpbmRdIDw9IGxhc3RCb3VuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlZhbHVlcyBpbiBwYXJhbWV0ZXIgJ3JhbmdlJyBzaG91bGQgYmUgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJFbXB0eSByYW5nZSBpcyBub3QgYWxsb3dlZFwiO1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcbiAgICAgICAgfVxuICAgICAgICBidWxsZXQucmFuZ2UgPSByYW5nZTtcbiAgICAgICAgbGV0IG51bVJhbmdlID0gcmFuZ2UubGVuZ3RoO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLmJ1bGxldC5yYW5nZSk7XG5cbiAgICAgICAgLy8gcmFuZ2UgY29sb3JcbiAgICAgICAgbGV0IHJldFJhbmdlQ29sb3IgPSBnZXRTdHJpbmdBcnJheUZyb21JbnB1dChcbiAgICAgICAgICAgIFwicmFuZ2VDb2xvclwiLFxuICAgICAgICAgICAgeWFtbEJ1bGxldD8ucmFuZ2VDb2xvcixcbiAgICAgICAgICAgIG51bVJhbmdlLFxuICAgICAgICAgICAgXCJcIixcbiAgICAgICAgICAgIHZhbGlkYXRlQ29sb3IsXG4gICAgICAgICAgICB0cnVlXG4gICAgICAgICk7XG4gICAgICAgIGlmICh0eXBlb2YgcmV0UmFuZ2VDb2xvciA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHJldFJhbmdlQ29sb3I7IC8vIGVycm9yTWVzc2FnZVxuICAgICAgICB9XG4gICAgICAgIGJ1bGxldC5yYW5nZUNvbG9yID0gcmV0UmFuZ2VDb2xvcjtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYnVsbGV0LnJhbmdlQ29sb3IpO1xuXG4gICAgICAgIC8vIGFjdHVhbCB2YWx1ZSwgY2FuIHBvc3Nlc3MgdGVtcGxhdGUgdmFyaWFibGVcbiAgICAgICAgYnVsbGV0LnZhbHVlID0gZ2V0U3RyaW5nRnJvbUlucHV0KHlhbWxCdWxsZXQ/LnZhbHVlLCBidWxsZXQudmFsdWUpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhidWxsZXQudmFsdWUpO1xuXG4gICAgICAgIC8vIHZhbHVlIHVuaXRcbiAgICAgICAgYnVsbGV0LnZhbHVlVW5pdCA9IGdldFN0cmluZ0Zyb21JbnB1dChcbiAgICAgICAgICAgIHlhbWxCdWxsZXQ/LnZhbHVlVW5pdCxcbiAgICAgICAgICAgIGJ1bGxldC52YWx1ZVVuaXRcbiAgICAgICAgKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYnVsbGV0LnZhbHVlVW5pdCk7XG5cbiAgICAgICAgLy8gdmFsdWUgY29sb3JcbiAgICAgICAgYnVsbGV0LnZhbHVlQ29sb3IgPSBnZXRTdHJpbmdGcm9tSW5wdXQoXG4gICAgICAgICAgICB5YW1sQnVsbGV0Py52YWx1ZUNvbG9yLFxuICAgICAgICAgICAgYnVsbGV0LnZhbHVlQ29sb3JcbiAgICAgICAgKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYnVsbGV0LnZhbHVlQ29sb3IpO1xuXG4gICAgICAgIC8vIHNob3cgbWFya1xuICAgICAgICBpZiAodHlwZW9mIHlhbWxCdWxsZXQ/LnNob3dNYXJrZXIgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgICAgICBidWxsZXQuc2hvd01hcmtlciA9IHlhbWxCdWxsZXQuc2hvd01hcmtlcjtcbiAgICAgICAgfVxuICAgICAgICAvLyBjb25zb2xlLmxvZyhidWxsZXQuc2hvd01hcmspO1xuXG4gICAgICAgIC8vIG1hcmsgdmFsdWVcbiAgICAgICAgaWYgKHR5cGVvZiB5YW1sQnVsbGV0Py5tYXJrZXJWYWx1ZSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgYnVsbGV0Lm1hcmtlclZhbHVlID0geWFtbEJ1bGxldC5tYXJrZXJWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjb25zb2xlLmxvZyhidWxsZXQubWFya1ZhbHVlKTtcblxuICAgICAgICAvLyBtYXJrIGNvbG9yXG4gICAgICAgIGJ1bGxldC5tYXJrZXJDb2xvciA9IGdldFN0cmluZ0Zyb21JbnB1dChcbiAgICAgICAgICAgIHlhbWxCdWxsZXQ/Lm1hcmtlckNvbG9yLFxuICAgICAgICAgICAgYnVsbGV0Lm1hcmtlckNvbG9yXG4gICAgICAgICk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGJ1bGxldC5tYXJrVmFsdWUpO1xuXG4gICAgICAgIHJlbmRlckluZm8uYnVsbGV0LnB1c2goYnVsbGV0KTtcbiAgICB9IC8vIEJ1bGxldCByZWxhdGVkIHBhcmFtZXRlcnNcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLmJ1bGxldCk7XG5cbiAgICByZXR1cm4gcmVuZGVySW5mbztcbn1cbiIsImltcG9ydCB7IENhY2hlZE1ldGFkYXRhLCBURmlsZSwgbm9ybWFsaXplUGF0aCB9IGZyb20gXCJvYnNpZGlhblwiO1xuaW1wb3J0IHtcbiAgICBEYXRhTWFwLFxuICAgIFF1ZXJ5LFxuICAgIFJlbmRlckluZm8sXG4gICAgWFZhbHVlTWFwLFxuICAgIFF1ZXJ5VmFsdWVQYWlyLFxuICAgIFRhYmxlRGF0YSxcbiAgICBTZWFyY2hUeXBlLFxuICAgIFZhbHVlVHlwZSxcbn0gZnJvbSBcIi4vZGF0YVwiO1xuaW1wb3J0ICogYXMgaGVscGVyIGZyb20gXCIuL2hlbHBlclwiO1xuaW1wb3J0IHsgTW9tZW50IH0gZnJvbSBcIm1vbWVudFwiO1xuXG4vLyByZWY6IGh0dHBzOi8vd3d3LnJhcGlkdGFibGVzLmNvbS9jb2RlL3RleHQvdW5pY29kZS1jaGFyYWN0ZXJzLmh0bWxcbmNvbnN0IEN1cnJlbmN5Q29kZXMgPVxuICAgIFwiXFx1MDAyNFxcdTIwQUNcXHUwMEEzXFx1MDBBNVxcdTAwQTJcXHUyMEI5XFx1MjBBOFxcdTIwQjFcXHUyMEE5XFx1MEUzRlxcdTIwQUJcXHUyMEFBXCI7XG5jb25zdCBBbHBoYWJldENvZGVzID0gXCJcXHUwM0IxLVxcdTAzQzlcXHUwMzkxLVxcdTAzQTlcIjtcbmNvbnN0IEludGVsbGVjdHVhbFByb3BlcnR5Q29kZXMgPSBcIlxcdTAwQTlcXHUwMEFFXFx1MjExN1xcdTIxMjJcXHUyMTIwXCI7XG5jb25zdCBDSktDb2RlcyA9IFwiXFx1NEUwMC1cXHU5RkZGXFx1MzQwMC1cXHU0REJGXFx1MzAwMFxcdTMwMDEtXFx1MzAzRlwiO1xuY29uc3QgV29yZENoYXJhY3RlcnMgPVxuICAgIFwiXFxcXHdcIiArXG4gICAgQ3VycmVuY3lDb2RlcyArXG4gICAgQWxwaGFiZXRDb2RlcyArXG4gICAgSW50ZWxsZWN0dWFsUHJvcGVydHlDb2RlcyArXG4gICAgQ0pLQ29kZXM7XG5cbi8vIGZpbGVCYXNlTmFtZSBpcyBhIHN0cmluZyBjb250YWlucyBkYXRlRm9ybWF0IG9ubHlcbmV4cG9ydCBmdW5jdGlvbiBnZXREYXRlRnJvbUZpbGVuYW1lKFxuICAgIGZpbGU6IFRGaWxlLFxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm9cbik6IE1vbWVudCB7XG4gICAgLy8gY29uc29sZS5sb2coYGdldERhdGVGcm9tRmlsZW5hbWU6ICR7ZmlsZS5uYW1lfWApO1xuICAgIC8vIEdldCBkYXRlIGZvcm0gZmlsZUJhc2VOYW1lXG5cbiAgICBsZXQgZmlsZUJhc2VOYW1lID0gZmlsZS5iYXNlbmFtZTtcblxuICAgIGxldCBkYXRlU3RyaW5nID0gaGVscGVyLmdldERhdGVTdHJpbmdGcm9tSW5wdXRTdHJpbmcoXG4gICAgICAgIGZpbGVCYXNlTmFtZSxcbiAgICAgICAgcmVuZGVySW5mby5kYXRlRm9ybWF0UHJlZml4LFxuICAgICAgICByZW5kZXJJbmZvLmRhdGVGb3JtYXRTdWZmaXhcbiAgICApO1xuICAgIC8vIGNvbnNvbGUubG9nKGRhdGVTdHJpbmcpO1xuXG4gICAgbGV0IGZpbGVEYXRlID0gaGVscGVyLnN0clRvRGF0ZShkYXRlU3RyaW5nLCByZW5kZXJJbmZvLmRhdGVGb3JtYXQpO1xuICAgIC8vIGNvbnNvbGUubG9nKGZpbGVEYXRlKTtcblxuICAgIHJldHVybiBmaWxlRGF0ZTtcbn1cblxuLy8gTm90IHN1cHBvcnQgbXVsdGlwbGUgdGFyZ2V0c1xuLy8gSW4gZm9ybSAna2V5OiB2YWx1ZScsIHRhcmdldCB1c2VkIHRvIGlkZW50aWZ5ICdmcm9udG1hdHRlciBrZXknXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF0ZUZyb21Gcm9udG1hdHRlcihcbiAgICBmaWxlQ2FjaGU6IENhY2hlZE1ldGFkYXRhLFxuICAgIHF1ZXJ5OiBRdWVyeSxcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvXG4pOiBNb21lbnQge1xuICAgIC8vIGNvbnNvbGUubG9nKFwiZ2V0RGF0ZUZyb21Gcm9udG1hdHRlclwiKTtcbiAgICAvLyBHZXQgZGF0ZSBmcm9tICdmcm9udE1hdHRlcktleTogZGF0ZSdcblxuICAgIGxldCBkYXRlID0gd2luZG93Lm1vbWVudChcIlwiKTtcblxuICAgIGxldCBmcm9udE1hdHRlciA9IGZpbGVDYWNoZS5mcm9udG1hdHRlcjtcbiAgICBpZiAoZnJvbnRNYXR0ZXIpIHtcbiAgICAgICAgaWYgKGhlbHBlci5kZWVwVmFsdWUoZnJvbnRNYXR0ZXIsIHF1ZXJ5LmdldFRhcmdldCgpKSkge1xuICAgICAgICAgICAgbGV0IHN0ckRhdGUgPSBoZWxwZXIuZGVlcFZhbHVlKGZyb250TWF0dGVyLCBxdWVyeS5nZXRUYXJnZXQoKSk7XG5cbiAgICAgICAgICAgIC8vIFdlIG9ubHkgc3VwcG9ydCBzaW5nbGUgdmFsdWUgZm9yIG5vd1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBzdHJEYXRlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgc3RyRGF0ZSA9IGhlbHBlci5nZXREYXRlU3RyaW5nRnJvbUlucHV0U3RyaW5nKFxuICAgICAgICAgICAgICAgICAgICBzdHJEYXRlLFxuICAgICAgICAgICAgICAgICAgICByZW5kZXJJbmZvLmRhdGVGb3JtYXRQcmVmaXgsXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlckluZm8uZGF0ZUZvcm1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBkYXRlID0gaGVscGVyLnN0clRvRGF0ZShzdHJEYXRlLCByZW5kZXJJbmZvLmRhdGVGb3JtYXQpO1xuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGRhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGU7XG59XG5cbi8vIGhlbHBlciBmdW5jdGlvblxuLy8gc3RyUmVnZXggbXVzdCBoYXZlIG5hbWUgZ3JvdXAgJ3ZhbHVlJ1xuLy8gTmFtZWQgZ3JvdXAgJ3ZhbHVlJyBjb3VsZCBiZSBwcm92aWRlZCBmcm9tIHVzZXJzIG9yIHBsdWdpblxuZnVuY3Rpb24gZXh0cmFjdERhdGVVc2luZ1JlZ2V4V2l0aFZhbHVlKFxuICAgIHRleHQ6IHN0cmluZyxcbiAgICBzdHJSZWdleDogc3RyaW5nLFxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm9cbik6IE1vbWVudCB7XG4gICAgbGV0IGRhdGUgPSB3aW5kb3cubW9tZW50KFwiXCIpO1xuXG4gICAgbGV0IHJlZ2V4ID0gbmV3IFJlZ0V4cChzdHJSZWdleCwgXCJnbVwiKTtcbiAgICBsZXQgbWF0Y2g7XG4gICAgd2hpbGUgKChtYXRjaCA9IHJlZ2V4LmV4ZWModGV4dCkpKSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKG1hdGNoKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdHlwZW9mIG1hdGNoLmdyb3VwcyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgICAgICAgICAgdHlwZW9mIG1hdGNoLmdyb3Vwcy52YWx1ZSAhPT0gXCJ1bmRlZmluZWRcIlxuICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIG11c3QgaGF2ZSBncm91cCBuYW1lICd2YWx1ZSdcbiAgICAgICAgICAgIGxldCBzdHJEYXRlID0gbWF0Y2guZ3JvdXBzLnZhbHVlLnRyaW0oKTtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHN0ckRhdGUpO1xuXG4gICAgICAgICAgICBzdHJEYXRlID0gaGVscGVyLmdldERhdGVTdHJpbmdGcm9tSW5wdXRTdHJpbmcoXG4gICAgICAgICAgICAgICAgc3RyRGF0ZSxcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLmRhdGVGb3JtYXRQcmVmaXgsXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5kYXRlRm9ybWF0U3VmZml4XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBkYXRlID0gaGVscGVyLnN0clRvRGF0ZShzdHJEYXRlLCByZW5kZXJJbmZvLmRhdGVGb3JtYXQpO1xuICAgICAgICAgICAgaWYgKGRhdGUuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGF0ZTtcbn1cblxuLy8gTm90IHN1cHBvcnQgbXVsdGlwbGUgdGFyZ2V0c1xuLy8gSW4gZm9ybSAna2V5OiB2YWx1ZScsIG5hbWUgZ3JvdXAgJ3ZhbHVlJyBmcm9tIHBsdWdpbiwgbm90IGZyb20gdXNlcnNcbmV4cG9ydCBmdW5jdGlvbiBnZXREYXRlRnJvbVRhZyhcbiAgICBjb250ZW50OiBzdHJpbmcsXG4gICAgcXVlcnk6IFF1ZXJ5LFxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm9cbik6IE1vbWVudCB7XG4gICAgLy8gY29uc29sZS5sb2coXCJnZXREYXRlRnJvbVRhZ1wiKTtcbiAgICAvLyBHZXQgZGF0ZSBmcm9tICcjdGFnTmFtZTogZGF0ZSdcbiAgICAvLyBJbmxpbmUgdmFsdWUtYXR0YWNoZWQgdGFnIG9ubHlcblxuICAgIGxldCBkYXRlID0gd2luZG93Lm1vbWVudChcIlwiKTtcblxuICAgIGxldCB0YWdOYW1lID0gcXVlcnkuZ2V0VGFyZ2V0KCk7XG4gICAgaWYgKHF1ZXJ5LmdldFBhcmVudFRhcmdldCgpKSB7XG4gICAgICAgIHRhZ05hbWUgPSBxdWVyeS5nZXRQYXJlbnRUYXJnZXQoKTsgLy8gdXNlIHBhcmVudCB0YWcgbmFtZSBmb3IgbXVsdGlwbGUgdmFsdWVzXG4gICAgfVxuICAgIC8vIGNvbnNvbGUubG9nKHRhZ05hbWUpO1xuXG4gICAgbGV0IHN0clJlZ2V4ID1cbiAgICAgICAgXCIoXnxcXFxccykjXCIgK1xuICAgICAgICB0YWdOYW1lICtcbiAgICAgICAgXCIoXFxcXC9bXFxcXHctXSspKig6KD88dmFsdWU+W1xcXFxkXFxcXC5cXFxcLy1dKilbYS16QS1aXSopPyhbXFxcXC4hLFxcXFw/O34tXSopPyhcXFxcc3wkKVwiO1xuICAgIC8vIGNvbnNvbGUubG9nKHN0clJlZ2V4KTtcblxuICAgIHJldHVybiBleHRyYWN0RGF0ZVVzaW5nUmVnZXhXaXRoVmFsdWUoY29udGVudCwgc3RyUmVnZXgsIHJlbmRlckluZm8pO1xufVxuXG4vLyBOb3Qgc3VwcG9ydCBtdWx0aXBsZSB0YXJnZXRzXG4vLyBJbiBmb3JtICdyZWdleCB3aXRoIHZhbHVlJywgbmFtZSBncm91cCAndmFsdWUnIGZyb20gdXNlcnNcbmV4cG9ydCBmdW5jdGlvbiBnZXREYXRlRnJvbVRleHQoXG4gICAgY29udGVudDogc3RyaW5nLFxuICAgIHF1ZXJ5OiBRdWVyeSxcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvXG4pOiBNb21lbnQge1xuICAgIC8vIGNvbnNvbGUubG9nKFwiZ2V0RGF0ZUZyb21UZXh0XCIpO1xuICAgIC8vIEdldCBkYXRlIGZyb20gdGV4dCB1c2luZyByZWdleCB3aXRoIHZhbHVlXG5cbiAgICBsZXQgZGF0ZSA9IHdpbmRvdy5tb21lbnQoXCJcIik7XG5cbiAgICBsZXQgc3RyUmVnZXggPSBxdWVyeS5nZXRUYXJnZXQoKTtcbiAgICAvLyBjb25zb2xlLmxvZyhzdHJUZXh0UmVnZXgpO1xuXG4gICAgcmV0dXJuIGV4dHJhY3REYXRlVXNpbmdSZWdleFdpdGhWYWx1ZShjb250ZW50LCBzdHJSZWdleCwgcmVuZGVySW5mbyk7XG59XG5cbi8vIE5vdCBzdXBwb3J0IG11bHRpcGxlIHRhcmdldHNcbi8vIEluIGZvcm0gJ2tleTo6dmFsdWUnLCBuYW1lZCBncm91cCAndmFsdWUnIGZyb20gcGx1Z2luXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF0ZUZyb21EdkZpZWxkKFxuICAgIGNvbnRlbnQ6IHN0cmluZyxcbiAgICBxdWVyeTogUXVlcnksXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mb1xuKTogTW9tZW50IHtcbiAgICAvLyBjb25zb2xlLmxvZyhcImdldERhdGVGcm9tRHZGaWVsZFwiKTtcbiAgICAvLyBHZXQgZGF0ZSBmb3JtICd0YXJnZXROYW1lOjogZGF0ZSdcblxuICAgIGxldCBkYXRlID0gd2luZG93Lm1vbWVudChcIlwiKTtcblxuICAgIGxldCBkdlRhcmdldCA9IHF1ZXJ5LmdldFRhcmdldCgpO1xuICAgIGlmIChxdWVyeS5nZXRQYXJlbnRUYXJnZXQoKSkge1xuICAgICAgICBkdlRhcmdldCA9IHF1ZXJ5LmdldFBhcmVudFRhcmdldCgpOyAvLyB1c2UgcGFyZW50IHRhZyBuYW1lIGZvciBtdWx0aXBsZSB2YWx1ZXNcbiAgICB9XG4gICAgLy8gRGF0YXZpZXcgYXNrIHVzZXIgdG8gYWRkIGRhc2hlcyBmb3Igc3BhY2VzIGFzIHNlYXJjaCB0YXJnZXRcbiAgICAvLyBTbyBhIGRhc2ggbWF5IHN0YW5kcyBmb3IgYSByZWFsIGRhc2ggb3IgYSBzcGFjZVxuICAgIGR2VGFyZ2V0ID0gZHZUYXJnZXQucmVwbGFjZShcIi1cIiwgXCJbXFxcXHNcXFxcLV1cIik7XG5cbiAgICAvLyBUZXN0IHRoaXMgaW4gUmVnZXgxMDFcbiAgICAvLyByZW1lbWJlciAnXFxzJyBpbmNsdWRlcyBuZXcgbGluZVxuICAgIC8vIChefCB8XFx0KVxcKnswLDJ9ZHZUYXJnZXRcXCp7MCwyfSg6OlsgfFxcdF0qKD88dmFsdWU+W1xcZFxcLlxcL1xcLVxcdyxAOyBcXHQ6XSopKShcXHI/XFxufFxccnwkKVxuICAgIGxldCBzdHJSZWdleCA9XG4gICAgICAgIFwiKF58IHxcXFxcdClcXFxcKnswLDJ9XCIgK1xuICAgICAgICBkdlRhcmdldCArXG4gICAgICAgIFwiXFxcXCp7MCwyfSg6OlsgfFxcXFx0XSooPzx2YWx1ZT5bXFxcXGRcXFxcLlxcXFwvXFxcXC1cXFxcdyxAOyBcXFxcdDpdKikpKFxcXFxyXFxcXD9cXFxcbnxcXFxccnwkKVwiO1xuICAgIC8vIGNvbnNvbGUubG9nKHN0clJlZ2V4KTtcblxuICAgIHJldHVybiBleHRyYWN0RGF0ZVVzaW5nUmVnZXhXaXRoVmFsdWUoY29udGVudCwgc3RyUmVnZXgsIHJlbmRlckluZm8pO1xufVxuXG4vLyBOb3Qgc3VwcG9ydCBtdWx0aXBsZSB0YXJnZXRzXG4vLyBJbiBmb3JtICdyZWdleCB3aXRoIHZhbHVlJywgbmFtZSBncm91cCAndmFsdWUnIGZyb20gdXNlcnNcbmV4cG9ydCBmdW5jdGlvbiBnZXREYXRlRnJvbVdpa2koXG4gICAgZmlsZUNhY2hlOiBDYWNoZWRNZXRhZGF0YSxcbiAgICBxdWVyeTogUXVlcnksXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mb1xuKTogTW9tZW50IHtcbiAgICAvL2NvbnNvbGUubG9nKFwiZ2V0RGF0ZUZyb21XaWtpXCIpO1xuICAgIC8vIEdldCBkYXRlIGZyb20gJ1tbcmVnZXggd2l0aCB2YWx1ZV1dJ1xuXG4gICAgbGV0IGRhdGUgPSB3aW5kb3cubW9tZW50KFwiXCIpO1xuXG4gICAgbGV0IGxpbmtzID0gZmlsZUNhY2hlLmxpbmtzO1xuICAgIGlmICghbGlua3MpIHJldHVybiBkYXRlO1xuXG4gICAgbGV0IHNlYXJjaFRhcmdldCA9IHF1ZXJ5LmdldFRhcmdldCgpO1xuICAgIGxldCBzZWFyY2hUeXBlID0gcXVlcnkuZ2V0VHlwZSgpO1xuXG4gICAgZm9yIChsZXQgbGluayBvZiBsaW5rcykge1xuICAgICAgICBpZiAoIWxpbmspIGNvbnRpbnVlO1xuXG4gICAgICAgIGxldCB3aWtpVGV4dCA9IFwiXCI7XG4gICAgICAgIGlmIChzZWFyY2hUeXBlID09PSBTZWFyY2hUeXBlLldpa2kpIHtcbiAgICAgICAgICAgIGlmIChsaW5rLmRpc3BsYXlUZXh0KSB7XG4gICAgICAgICAgICAgICAgd2lraVRleHQgPSBsaW5rLmRpc3BsYXlUZXh0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB3aWtpVGV4dCA9IGxpbmsubGluaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChzZWFyY2hUeXBlID09PSBTZWFyY2hUeXBlLldpa2lMaW5rKSB7XG4gICAgICAgICAgICAvLyB3aWtpLmxpbmsgcG9pbnQgdG8gYSBmaWxlIG5hbWVcbiAgICAgICAgICAgIC8vIGEgY29sb24gaXMgbm90IGFsbG93ZWQgYmUgaW4gZmlsZSBuYW1lXG4gICAgICAgICAgICB3aWtpVGV4dCA9IGxpbmsubGluaztcbiAgICAgICAgfSBlbHNlIGlmIChzZWFyY2hUeXBlID09PSBTZWFyY2hUeXBlLldpa2lEaXNwbGF5KSB7XG4gICAgICAgICAgICBpZiAobGluay5kaXNwbGF5VGV4dCkge1xuICAgICAgICAgICAgICAgIHdpa2lUZXh0ID0gbGluay5kaXNwbGF5VGV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChsaW5rLmRpc3BsYXlUZXh0KSB7XG4gICAgICAgICAgICAgICAgd2lraVRleHQgPSBsaW5rLmRpc3BsYXlUZXh0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB3aWtpVGV4dCA9IGxpbmsubGluaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB3aWtpVGV4dCA9IHdpa2lUZXh0LnRyaW0oKTtcblxuICAgICAgICBsZXQgc3RyUmVnZXggPSBcIl5cIiArIHNlYXJjaFRhcmdldCArIFwiJFwiO1xuICAgICAgICByZXR1cm4gZXh0cmFjdERhdGVVc2luZ1JlZ2V4V2l0aFZhbHVlKHdpa2lUZXh0LCBzdHJSZWdleCwgcmVuZGVySW5mbyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGU7XG59XG5cbi8vIE5vdCBzdXBwb3J0IG11bHRpcGxlIHRhcmdldHNcbmV4cG9ydCBmdW5jdGlvbiBnZXREYXRlRnJvbUZpbGVNZXRhKFxuICAgIGZpbGU6IFRGaWxlLFxuICAgIHF1ZXJ5OiBRdWVyeSxcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvXG4pOiBNb21lbnQge1xuICAgIC8vIGNvbnNvbGUubG9nKFwiZ2V0RGF0ZUZyb21GaWxlTWV0YVwiKTtcbiAgICAvLyBHZXQgZGF0ZSBmcm9tIGNEYXRlLCBtRGF0ZSBvciBiYXNlRmlsZU5hbWVcblxuICAgIGxldCBkYXRlID0gd2luZG93Lm1vbWVudChcIlwiKTtcblxuICAgIGlmIChmaWxlICYmIGZpbGUgaW5zdGFuY2VvZiBURmlsZSkge1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhmaWxlLnN0YXQpO1xuXG4gICAgICAgIGxldCB0YXJnZXQgPSBxdWVyeS5nZXRUYXJnZXQoKTtcbiAgICAgICAgaWYgKHRhcmdldCA9PT0gXCJjRGF0ZVwiKSB7XG4gICAgICAgICAgICBsZXQgY3RpbWUgPSBmaWxlLnN0YXQuY3RpbWU7IC8vIHVuaXggdGltZVxuICAgICAgICAgICAgZGF0ZSA9IGhlbHBlci5nZXREYXRlRnJvbVVuaXhUaW1lKGN0aW1lLCByZW5kZXJJbmZvLmRhdGVGb3JtYXQpO1xuICAgICAgICB9IGVsc2UgaWYgKHRhcmdldCA9PT0gXCJtRGF0ZVwiKSB7XG4gICAgICAgICAgICBsZXQgbXRpbWUgPSBmaWxlLnN0YXQubXRpbWU7IC8vIHVuaXggdGltZVxuICAgICAgICAgICAgZGF0ZSA9IGhlbHBlci5nZXREYXRlRnJvbVVuaXhUaW1lKG10aW1lLCByZW5kZXJJbmZvLmRhdGVGb3JtYXQpO1xuICAgICAgICB9IGVsc2UgaWYgKHRhcmdldCA9PT0gXCJuYW1lXCIpIHtcbiAgICAgICAgICAgIGRhdGUgPSBnZXREYXRlRnJvbUZpbGVuYW1lKGZpbGUsIHJlbmRlckluZm8pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gY29uc29sZS5sb2coZGF0ZSk7XG4gICAgcmV0dXJuIGRhdGU7XG59XG5cbi8vIE5vdCBzdXBwb3J0IG11bHRpcGxlIHRhcmdldHNcbi8vIEluIGZvcm0gJ3JlZ2V4IHdpdGggdmFsdWUnLCBuYW1lIGdyb3VwICd2YWx1ZScgZnJvbSB1c2Vyc1xuZXhwb3J0IGZ1bmN0aW9uIGdldERhdGVGcm9tVGFzayhcbiAgICBjb250ZW50OiBzdHJpbmcsXG4gICAgcXVlcnk6IFF1ZXJ5LFxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm9cbik6IE1vbWVudCB7XG4gICAgLy8gY29uc29sZS5sb2coXCJnZXREYXRlRnJvbVRhc2tcIik7XG4gICAgLy8gR2V0IGRhdGUgZnJvbSAnLSBbIF0gcmVnZXggd2l0aCB2YWx1ZScgb3IgJy0gW3hdIHJlZ2V4IHdpdGggdmFsdWUnXG5cbiAgICBsZXQgZGF0ZSA9IHdpbmRvdy5tb21lbnQoXCJcIik7XG4gICAgbGV0IHNlYXJjaFR5cGUgPSBxdWVyeS5nZXRUeXBlKCk7XG4gICAgLy8gY29uc29sZS5sb2coc2VhcmNoVHlwZSk7XG5cbiAgICBsZXQgc3RyUmVnZXggPSBxdWVyeS5nZXRUYXJnZXQoKTtcbiAgICBpZiAoc2VhcmNoVHlwZSA9PT0gU2VhcmNoVHlwZS5UYXNrKSB7XG4gICAgICAgIHN0clJlZ2V4ID0gXCJcXFxcW1tcXFxcc3hdXFxcXF1cXFxcc1wiICsgc3RyUmVnZXg7XG4gICAgfSBlbHNlIGlmIChzZWFyY2hUeXBlID09PSBTZWFyY2hUeXBlLlRhc2tEb25lKSB7XG4gICAgICAgIHN0clJlZ2V4ID0gXCJcXFxcW3hcXFxcXVxcXFxzXCIgKyBzdHJSZWdleDtcbiAgICB9IGVsc2UgaWYgKHNlYXJjaFR5cGUgPT09IFNlYXJjaFR5cGUuVGFza05vdERvbmUpIHtcbiAgICAgICAgc3RyUmVnZXggPSBcIlxcXFxbXFxcXHNcXFxcXVxcXFxzXCIgKyBzdHJSZWdleDtcbiAgICB9IGVsc2Uge1xuICAgICAgICBzdHJSZWdleCA9IFwiXFxcXFtbXFxcXHN4XVxcXFxdXFxcXHNcIiArIHN0clJlZ2V4O1xuICAgIH1cbiAgICAvLyBjb25zb2xlLmxvZyhzdHJUZXh0UmVnZXgpO1xuXG4gICAgcmV0dXJuIGV4dHJhY3REYXRlVXNpbmdSZWdleFdpdGhWYWx1ZShjb250ZW50LCBzdHJSZWdleCwgcmVuZGVySW5mbyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRUb0RhdGFNYXAoXG4gICAgZGF0YU1hcDogRGF0YU1hcCxcbiAgICBkYXRlOiBzdHJpbmcsXG4gICAgcXVlcnk6IFF1ZXJ5LFxuICAgIHZhbHVlOiBudW1iZXIgfCBudWxsXG4pIHtcbiAgICBpZiAoIWRhdGFNYXAuaGFzKGRhdGUpKSB7XG4gICAgICAgIGxldCBxdWVyeVZhbHVlUGFpcnMgPSBuZXcgQXJyYXk8UXVlcnlWYWx1ZVBhaXI+KCk7XG4gICAgICAgIHF1ZXJ5VmFsdWVQYWlycy5wdXNoKHsgcXVlcnk6IHF1ZXJ5LCB2YWx1ZTogdmFsdWUgfSk7XG4gICAgICAgIGRhdGFNYXAuc2V0KGRhdGUsIHF1ZXJ5VmFsdWVQYWlycyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IHRhcmdldFZhbHVlUGFpcnMgPSBkYXRhTWFwLmdldChkYXRlKTtcbiAgICAgICAgdGFyZ2V0VmFsdWVQYWlycy5wdXNoKHsgcXVlcnk6IHF1ZXJ5LCB2YWx1ZTogdmFsdWUgfSk7XG4gICAgfVxufVxuXG4vLyBIZWxwZXIgZnVuY3Rpb25cbi8vIEFjY2VwdCBtdWx0aXBsZSB2YWx1ZXMgdXNpbmcgY3VzdG9tIHNlcGFyYXRvcnNcbi8vIHJlZ2V4IHdpdGggdmFsdWUgLS0+IGV4dHJhY3QgdmFsdWVcbi8vIHJlZ2V4IHdpdGhvdXQgdmFsdWUgLS0+IGNvdW50IG9jY3VycmVuY2llc1xuZnVuY3Rpb24gZXh0cmFjdERhdGFVc2luZ1JlZ2V4V2l0aE11bHRpcGxlVmFsdWVzKFxuICAgIHRleHQ6IHN0cmluZyxcbiAgICBzdHJSZWdleDogc3RyaW5nLFxuICAgIHF1ZXJ5OiBRdWVyeSxcbiAgICBkYXRhTWFwOiBEYXRhTWFwLFxuICAgIHhWYWx1ZU1hcDogWFZhbHVlTWFwLFxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm9cbik6IGJvb2xlYW4ge1xuICAgIC8vIGNvbnNvbGUubG9nKFwiZXh0cmFjdERhdGFVc2luZ1JlZ2V4V2l0aE11bHRpcGxlVmFsdWVzXCIpO1xuXG4gICAgbGV0IHJlZ2V4ID0gbmV3IFJlZ0V4cChzdHJSZWdleCwgXCJnbXVcIik7XG4gICAgbGV0IG1hdGNoO1xuICAgIGxldCBtZWFzdXJlID0gMC4wO1xuICAgIGxldCBleHRyYWN0ZWQgPSBmYWxzZTtcbiAgICB3aGlsZSAoKG1hdGNoID0gcmVnZXguZXhlYyh0ZXh0KSkpIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2cobWF0Y2gpO1xuICAgICAgICBpZiAoIXJlbmRlckluZm8uaWdub3JlQXR0YWNoZWRWYWx1ZVtxdWVyeS5nZXRJZCgpXSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHR5cGVvZiBtYXRjaC5ncm91cHMgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICAgICAgICAgICAgICB0eXBlb2YgbWF0Y2guZ3JvdXBzLnZhbHVlICE9PSBcInVuZGVmaW5lZFwiXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWVzID0gbWF0Y2guZ3JvdXBzLnZhbHVlLnRyaW0oKTtcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyh2YWx1ZXMpO1xuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHF1ZXJ5LmdldFNlcGFyYXRvcigpKTtcbiAgICAgICAgICAgICAgICBsZXQgc3BsaXR0ZWQgPSB2YWx1ZXMuc3BsaXQocXVlcnkuZ2V0U2VwYXJhdG9yKCkpO1xuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHNwbGl0dGVkKTtcbiAgICAgICAgICAgICAgICBpZiAoIXNwbGl0dGVkKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBpZiAoc3BsaXR0ZWQubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwic2luZ2xlLXZhbHVlXCIpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgdG9QYXJzZSA9IHNwbGl0dGVkWzBdLnRyaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2codG9QYXJzZSk7XG4gICAgICAgICAgICAgICAgICAgIGxldCByZXRQYXJzZSA9IGhlbHBlci5wYXJzZUZsb2F0RnJvbUFueShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvUGFyc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJJbmZvLnRleHRWYWx1ZU1hcFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmV0UGFyc2UudmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXRQYXJzZS50eXBlID09PSBWYWx1ZVR5cGUuVGltZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYXN1cmUgPSByZXRQYXJzZS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5LnZhbHVlVHlwZSA9IFZhbHVlVHlwZS5UaW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5LmFkZE51bVRhcmdldHMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhcmVuZGVySW5mby5pZ25vcmVaZXJvVmFsdWVbcXVlcnkuZ2V0SWQoKV0gfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0UGFyc2UudmFsdWUgIT09IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhc3VyZSArPSByZXRQYXJzZS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnkuYWRkTnVtVGFyZ2V0cygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHNwbGl0dGVkLmxlbmd0aCA+IHF1ZXJ5LmdldEFjY2Vzc29yKCkgJiZcbiAgICAgICAgICAgICAgICAgICAgcXVlcnkuZ2V0QWNjZXNzb3IoKSA+PSAwXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwibXVsdGlwbGUtdmFsdWVzXCIpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgdG9QYXJzZSA9IHNwbGl0dGVkW3F1ZXJ5LmdldEFjY2Vzc29yKCldLnRyaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJldFBhcnNlID0gaGVscGVyLnBhcnNlRmxvYXRGcm9tQW55KFxuICAgICAgICAgICAgICAgICAgICAgICAgdG9QYXJzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckluZm8udGV4dFZhbHVlTWFwXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2cocmV0UGFyc2UpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmV0UGFyc2UudmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXRQYXJzZS50eXBlID09PSBWYWx1ZVR5cGUuVGltZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYXN1cmUgPSByZXRQYXJzZS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5LnZhbHVlVHlwZSA9IFZhbHVlVHlwZS5UaW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5LmFkZE51bVRhcmdldHMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhc3VyZSArPSByZXRQYXJzZS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5LmFkZE51bVRhcmdldHMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gbm8gbmFtZWQgZ3JvdXBzLCBjb3VudCBvY2N1cnJlbmNpZXNcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcImNvdW50IG9jY3VycmVuY2llc1wiKTtcbiAgICAgICAgICAgICAgICBtZWFzdXJlICs9IHJlbmRlckluZm8uY29uc3RWYWx1ZVtxdWVyeS5nZXRJZCgpXTtcbiAgICAgICAgICAgICAgICBleHRyYWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHF1ZXJ5LmFkZE51bVRhcmdldHMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGZvcmNlIHRvIGNvdW50IG9jY3VycmVuY2llc1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJmb3JjZWQgY291bnQgb2NjdXJyZW5jaWVzXCIpO1xuICAgICAgICAgICAgbWVhc3VyZSArPSByZW5kZXJJbmZvLmNvbnN0VmFsdWVbcXVlcnkuZ2V0SWQoKV07XG4gICAgICAgICAgICBleHRyYWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgcXVlcnkuYWRkTnVtVGFyZ2V0cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGV4dHJhY3RlZCkge1xuICAgICAgICBsZXQgeFZhbHVlID0geFZhbHVlTWFwLmdldChyZW5kZXJJbmZvLnhEYXRhc2V0W3F1ZXJ5LmdldElkKCldKTtcbiAgICAgICAgYWRkVG9EYXRhTWFwKGRhdGFNYXAsIHhWYWx1ZSwgcXVlcnksIG1lYXN1cmUpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8vIE5vIHZhbHVlLCBjb3VudCBvY2N1cnJlbmNlcyBvbmx5XG5leHBvcnQgZnVuY3Rpb24gY29sbGVjdERhdGFGcm9tRnJvbnRtYXR0ZXJUYWcoXG4gICAgZmlsZUNhY2hlOiBDYWNoZWRNZXRhZGF0YSxcbiAgICBxdWVyeTogUXVlcnksXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mbyxcbiAgICBkYXRhTWFwOiBEYXRhTWFwLFxuICAgIHhWYWx1ZU1hcDogWFZhbHVlTWFwXG4pOiBib29sZWFuIHtcbiAgICAvLyBjb25zb2xlLmxvZyhcImNvbGxlY3REYXRhRnJvbUZyb250bWF0dGVyVGFnXCIpO1xuICAgIC8vIGNvbnNvbGUubG9nKHF1ZXJ5KTtcbiAgICAvLyBjb25zb2xlLmxvZyhkYXRhTWFwKTtcbiAgICAvLyBjb25zb2xlLmxvZyh4VmFsdWVNYXApO1xuXG4gICAgbGV0IGZyb250TWF0dGVyID0gZmlsZUNhY2hlLmZyb250bWF0dGVyO1xuICAgIGxldCBmcm9udE1hdHRlclRhZ3M6IHN0cmluZ1tdID0gW107XG4gICAgaWYgKGZyb250TWF0dGVyICYmIGZyb250TWF0dGVyLnRhZ3MpIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coZnJvbnRNYXR0ZXIudGFncyk7XG4gICAgICAgIGxldCB0YWdNZWFzdXJlID0gMC4wO1xuICAgICAgICBsZXQgdGFnRXhpc3QgPSBmYWxzZTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZnJvbnRNYXR0ZXIudGFncykpIHtcbiAgICAgICAgICAgIGZyb250TWF0dGVyVGFncyA9IGZyb250TWF0dGVyVGFncy5jb25jYXQoZnJvbnRNYXR0ZXIudGFncyk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGZyb250TWF0dGVyLnRhZ3MgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGxldCBzcGxpdHRlZCA9IGZyb250TWF0dGVyLnRhZ3Muc3BsaXQocXVlcnkuZ2V0U2VwYXJhdG9yKHRydWUpKTtcbiAgICAgICAgICAgIGZvciAobGV0IHNwbGl0dGVkUGFydCBvZiBzcGxpdHRlZCkge1xuICAgICAgICAgICAgICAgIGxldCBwYXJ0ID0gc3BsaXR0ZWRQYXJ0LnRyaW0oKTtcbiAgICAgICAgICAgICAgICBpZiAocGFydCAhPT0gXCJcIikge1xuICAgICAgICAgICAgICAgICAgICBmcm9udE1hdHRlclRhZ3MucHVzaChwYXJ0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gY29uc29sZS5sb2coZnJvbnRNYXR0ZXJUYWdzKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2cocXVlcnkuZ2V0VGFyZ2V0KCkpO1xuXG4gICAgICAgIGZvciAobGV0IHRhZyBvZiBmcm9udE1hdHRlclRhZ3MpIHtcbiAgICAgICAgICAgIGlmICh0YWcgPT09IHF1ZXJ5LmdldFRhcmdldCgpKSB7XG4gICAgICAgICAgICAgICAgLy8gc2ltcGxlIHRhZ1xuICAgICAgICAgICAgICAgIHRhZ01lYXN1cmUgPSB0YWdNZWFzdXJlICsgcmVuZGVySW5mby5jb25zdFZhbHVlW3F1ZXJ5LmdldElkKCldO1xuICAgICAgICAgICAgICAgIHRhZ0V4aXN0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBxdWVyeS5hZGROdW1UYXJnZXRzKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRhZy5zdGFydHNXaXRoKHF1ZXJ5LmdldFRhcmdldCgpICsgXCIvXCIpKSB7XG4gICAgICAgICAgICAgICAgLy8gbmVzdGVkIHRhZ1xuICAgICAgICAgICAgICAgIHRhZ01lYXN1cmUgPSB0YWdNZWFzdXJlICsgcmVuZGVySW5mby5jb25zdFZhbHVlW3F1ZXJ5LmdldElkKCldO1xuICAgICAgICAgICAgICAgIHRhZ0V4aXN0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBxdWVyeS5hZGROdW1UYXJnZXRzKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyB2YWx1ZWQtdGFnIGluIGZyb250bWF0dGVyIGlzIG5vdCBzdXBwb3J0ZWRcbiAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhlIFwidGFnOnZhbHVlXCIgaW4gZnJvbnRtYXR0ZXIgd2lsbCBiZSBjb25zaWRlciBhcyBhIG5ldyB0YWcgZm9yIGVhY2ggZXhpc3RpbmcgdmFsdWVcblxuICAgICAgICAgICAgbGV0IHZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgIGlmICh0YWdFeGlzdCkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdGFnTWVhc3VyZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCB4VmFsdWUgPSB4VmFsdWVNYXAuZ2V0KHJlbmRlckluZm8ueERhdGFzZXRbcXVlcnkuZ2V0SWQoKV0pO1xuICAgICAgICAgICAgYWRkVG9EYXRhTWFwKGRhdGFNYXAsIHhWYWx1ZSwgcXVlcnksIHZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG4vLyBJbiBmb3JtICdrZXk6IHZhbHVlJywgdGFyZ2V0IHVzZWQgdG8gaWRlbnRpZnkgJ2Zyb250bWF0dGVyIGtleSdcbmV4cG9ydCBmdW5jdGlvbiBjb2xsZWN0RGF0YUZyb21Gcm9udG1hdHRlcktleShcbiAgICBmaWxlQ2FjaGU6IENhY2hlZE1ldGFkYXRhLFxuICAgIHF1ZXJ5OiBRdWVyeSxcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvLFxuICAgIGRhdGFNYXA6IERhdGFNYXAsXG4gICAgeFZhbHVlTWFwOiBYVmFsdWVNYXBcbik6IGJvb2xlYW4ge1xuICAgIC8vIGNvbnNvbGUubG9nKFwiY29sbGVjdERhdGFGcm9tRnJvbnRtYXR0ZXJLZXlcIik7XG5cbiAgICBsZXQgZnJvbnRNYXR0ZXIgPSBmaWxlQ2FjaGUuZnJvbnRtYXR0ZXI7XG4gICAgaWYgKGZyb250TWF0dGVyKSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGZyb250TWF0dGVyKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2cocXVlcnkuZ2V0VGFyZ2V0KCkpO1xuICAgICAgICBsZXQgZGVlcFZhbHVlID0gaGVscGVyLmRlZXBWYWx1ZShmcm9udE1hdHRlciwgcXVlcnkuZ2V0VGFyZ2V0KCkpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhkZWVwVmFsdWUpO1xuICAgICAgICBpZiAoZGVlcFZhbHVlKSB7XG4gICAgICAgICAgICBsZXQgcmV0UGFyc2UgPSBoZWxwZXIucGFyc2VGbG9hdEZyb21BbnkoXG4gICAgICAgICAgICAgICAgZGVlcFZhbHVlLFxuICAgICAgICAgICAgICAgIHJlbmRlckluZm8udGV4dFZhbHVlTWFwXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2cocmV0UGFyc2UpO1xuICAgICAgICAgICAgaWYgKHJldFBhcnNlLnZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gVHJ5IHBhcnNpbmcgYXMgYSBib29sZWFuOiB0cnVlIG1lYW5zIDEsIGZhbHNlIG1lYW5zIDAuXG4gICAgICAgICAgICAgICAgaWYgKGRlZXBWYWx1ZSA9PT0gXCJ0cnVlXCIgfHwgZGVlcFZhbHVlID09PSBcImZhbHNlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0UGFyc2UudHlwZSA9IFZhbHVlVHlwZS5OdW1iZXI7XG4gICAgICAgICAgICAgICAgICAgIHJldFBhcnNlLnZhbHVlID0gZGVlcFZhbHVlID09PSBcInRydWVcIiA/IDEgOiAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXRQYXJzZS52YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmIChyZXRQYXJzZS50eXBlID09PSBWYWx1ZVR5cGUuVGltZSkge1xuICAgICAgICAgICAgICAgICAgICBxdWVyeS52YWx1ZVR5cGUgPSBWYWx1ZVR5cGUuVGltZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcXVlcnkuYWRkTnVtVGFyZ2V0cygpO1xuICAgICAgICAgICAgICAgIGxldCB4VmFsdWUgPSB4VmFsdWVNYXAuZ2V0KHJlbmRlckluZm8ueERhdGFzZXRbcXVlcnkuZ2V0SWQoKV0pO1xuICAgICAgICAgICAgICAgIGFkZFRvRGF0YU1hcChkYXRhTWFwLCB4VmFsdWUsIHF1ZXJ5LCByZXRQYXJzZS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICBxdWVyeS5nZXRQYXJlbnRUYXJnZXQoKSAmJlxuICAgICAgICAgICAgaGVscGVyLmRlZXBWYWx1ZShmcm9udE1hdHRlciwgcXVlcnkuZ2V0UGFyZW50VGFyZ2V0KCkpXG4gICAgICAgICkge1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJtdWx0aXBsZSB2YWx1ZXNcIik7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhxdWVyeS5nZXRUYXJnZXQoKSk7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhxdWVyeS5nZXRQYXJlbnRUYXJnZXQoKSk7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhxdWVyeS5nZXRTdWJJZCgpKTtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgLy8gICAgIGZyb250TWF0dGVyW3F1ZXJ5LmdldFBhcmVudFRhcmdldCgpXVxuICAgICAgICAgICAgLy8gKTtcbiAgICAgICAgICAgIGxldCB0b1BhcnNlID0gaGVscGVyLmRlZXBWYWx1ZShcbiAgICAgICAgICAgICAgICBmcm9udE1hdHRlcixcbiAgICAgICAgICAgICAgICBxdWVyeS5nZXRQYXJlbnRUYXJnZXQoKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGxldCBzcGxpdHRlZCA9IG51bGw7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0b1BhcnNlKSkge1xuICAgICAgICAgICAgICAgIHNwbGl0dGVkID0gdG9QYXJzZS5tYXAoKHApID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHAudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRvUGFyc2UgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICBzcGxpdHRlZCA9IHRvUGFyc2Uuc3BsaXQocXVlcnkuZ2V0U2VwYXJhdG9yKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coc3BsaXR0ZWQpO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHNwbGl0dGVkICYmXG4gICAgICAgICAgICAgICAgc3BsaXR0ZWQubGVuZ3RoID4gcXVlcnkuZ2V0QWNjZXNzb3IoKSAmJlxuICAgICAgICAgICAgICAgIHF1ZXJ5LmdldEFjY2Vzc29yKCkgPj0gMFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgLy8gVE9ETzogaXQncyBub3QgZWZmaWNlbnQgdG8gcmV0cmlldmUgb25lIHZhbHVlIGF0IGEgdGltZSwgZW5oYW5jZSB0aGlzXG4gICAgICAgICAgICAgICAgbGV0IHNwbGl0dGVkUGFydCA9IHNwbGl0dGVkW3F1ZXJ5LmdldEFjY2Vzc29yKCldLnRyaW0oKTtcbiAgICAgICAgICAgICAgICBsZXQgcmV0UGFyc2UgPSBoZWxwZXIucGFyc2VGbG9hdEZyb21BbnkoXG4gICAgICAgICAgICAgICAgICAgIHNwbGl0dGVkUGFydCxcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVySW5mby50ZXh0VmFsdWVNYXBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGlmIChyZXRQYXJzZS52YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmV0UGFyc2UudHlwZSA9PT0gVmFsdWVUeXBlLlRpbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5LnZhbHVlVHlwZSA9IFZhbHVlVHlwZS5UaW1lO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5LmFkZE51bVRhcmdldHMoKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHhWYWx1ZSA9IHhWYWx1ZU1hcC5nZXQoXG4gICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJJbmZvLnhEYXRhc2V0W3F1ZXJ5LmdldElkKCldXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGFkZFRvRGF0YU1hcChkYXRhTWFwLCB4VmFsdWUsIHF1ZXJ5LCByZXRQYXJzZS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuLy8gSW4gZm9ybSAncmVnZXggd2l0aCB2YWx1ZScsIG5hbWUgZ3JvdXAgJ3ZhbHVlJyBmcm9tIHVzZXJzXG5leHBvcnQgZnVuY3Rpb24gY29sbGVjdERhdGFGcm9tV2lraShcbiAgICBmaWxlQ2FjaGU6IENhY2hlZE1ldGFkYXRhLFxuICAgIHF1ZXJ5OiBRdWVyeSxcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvLFxuICAgIGRhdGFNYXA6IERhdGFNYXAsXG4gICAgeFZhbHVlTWFwOiBYVmFsdWVNYXBcbik6IGJvb2xlYW4ge1xuICAgIGxldCBsaW5rcyA9IGZpbGVDYWNoZS5saW5rcztcbiAgICBpZiAoIWxpbmtzKSByZXR1cm4gZmFsc2U7XG5cbiAgICBsZXQgc2VhcmNoVGFyZ2V0ID0gcXVlcnkuZ2V0VGFyZ2V0KCk7XG4gICAgbGV0IHNlYXJjaFR5cGUgPSBxdWVyeS5nZXRUeXBlKCk7XG5cbiAgICBsZXQgdGV4dFRvU2VhcmNoID0gXCJcIjtcbiAgICBsZXQgc3RyUmVnZXggPSBzZWFyY2hUYXJnZXQ7XG5cbiAgICAvLyBQcmVwYXJlIHRleHRUb1NlYXJjaFxuICAgIGZvciAobGV0IGxpbmsgb2YgbGlua3MpIHtcbiAgICAgICAgaWYgKCFsaW5rKSBjb250aW51ZTtcblxuICAgICAgICBsZXQgd2lraVRleHQgPSBcIlwiO1xuICAgICAgICBpZiAoc2VhcmNoVHlwZSA9PT0gU2VhcmNoVHlwZS5XaWtpKSB7XG4gICAgICAgICAgICBpZiAobGluay5kaXNwbGF5VGV4dCkge1xuICAgICAgICAgICAgICAgIHdpa2lUZXh0ID0gbGluay5kaXNwbGF5VGV4dDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgd2lraVRleHQgPSBsaW5rLmxpbms7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoc2VhcmNoVHlwZSA9PT0gU2VhcmNoVHlwZS5XaWtpTGluaykge1xuICAgICAgICAgICAgLy8gd2lraS5saW5rIHBvaW50IHRvIGEgZmlsZSBuYW1lXG4gICAgICAgICAgICAvLyBhIGNvbG9uIGlzIG5vdCBhbGxvd2VkIGJlIGluIGZpbGUgbmFtZVxuICAgICAgICAgICAgd2lraVRleHQgPSBsaW5rLmxpbms7XG4gICAgICAgIH0gZWxzZSBpZiAoc2VhcmNoVHlwZSA9PT0gU2VhcmNoVHlwZS5XaWtpRGlzcGxheSkge1xuICAgICAgICAgICAgaWYgKGxpbmsuZGlzcGxheVRleHQpIHtcbiAgICAgICAgICAgICAgICB3aWtpVGV4dCA9IGxpbmsuZGlzcGxheVRleHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAobGluay5kaXNwbGF5VGV4dCkge1xuICAgICAgICAgICAgICAgIHdpa2lUZXh0ID0gbGluay5kaXNwbGF5VGV4dDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgd2lraVRleHQgPSBsaW5rLmxpbms7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgd2lraVRleHQgPSB3aWtpVGV4dC50cmltKCk7XG5cbiAgICAgICAgdGV4dFRvU2VhcmNoICs9IHdpa2lUZXh0ICsgXCJcXG5cIjtcbiAgICB9XG5cbiAgICByZXR1cm4gZXh0cmFjdERhdGFVc2luZ1JlZ2V4V2l0aE11bHRpcGxlVmFsdWVzKFxuICAgICAgICB0ZXh0VG9TZWFyY2gsXG4gICAgICAgIHN0clJlZ2V4LFxuICAgICAgICBxdWVyeSxcbiAgICAgICAgZGF0YU1hcCxcbiAgICAgICAgeFZhbHVlTWFwLFxuICAgICAgICByZW5kZXJJbmZvXG4gICAgKTtcbn1cblxuLy8gSW4gZm9ybSAna2V5OiB2YWx1ZScsIG5hbWUgZ3JvdXAgJ3ZhbHVlJyBmcm9tIHBsdWdpbiwgbm90IGZyb20gdXNlcnNcbmV4cG9ydCBmdW5jdGlvbiBjb2xsZWN0RGF0YUZyb21JbmxpbmVUYWcoXG4gICAgY29udGVudDogc3RyaW5nLFxuICAgIHF1ZXJ5OiBRdWVyeSxcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvLFxuICAgIGRhdGFNYXA6IERhdGFNYXAsXG4gICAgeFZhbHVlTWFwOiBYVmFsdWVNYXBcbik6IGJvb2xlYW4ge1xuICAgIC8vIGNvbnNvbGUubG9nKGNvbnRlbnQpO1xuICAgIC8vIFRlc3QgdGhpcyBpbiBSZWdleDEwMVxuICAgIC8vIChefFxccykjdGFnTmFtZShcXC9bXFx3LV0rKSooOig/PHZhbHVlPltcXGRcXC5cXC8tXSopW2EtekEtWl0qKT8oW1xcXFwuISxcXFxcPzt+LV0qKT8oXFxzfCQpXG4gICAgbGV0IHRhZ05hbWUgPSBxdWVyeS5nZXRUYXJnZXQoKTtcbiAgICBpZiAocXVlcnkuZ2V0UGFyZW50VGFyZ2V0KCkpIHtcbiAgICAgICAgdGFnTmFtZSA9IHF1ZXJ5LmdldFBhcmVudFRhcmdldCgpOyAvLyB1c2UgcGFyZW50IHRhZyBuYW1lIGZvciBtdWx0aXBsZSB2YWx1ZXNcbiAgICB9XG4gICAgaWYgKHRhZ05hbWUubGVuZ3RoID4gMSAmJiB0YWdOYW1lLnN0YXJ0c1dpdGgoXCIjXCIpKSB7XG4gICAgICAgIHRhZ05hbWUgPSB0YWdOYW1lLnN1YnN0cmluZygxKTtcbiAgICB9XG4gICAgbGV0IHN0clJlZ2V4ID1cbiAgICAgICAgXCIoXnxcXFxccykjXCIgK1xuICAgICAgICB0YWdOYW1lICtcbiAgICAgICAgXCIoXFxcXC9bXFxcXHctXSspKig6KD88dmFsdWU+W1xcXFxkXFxcXC5cXFxcLy1dKilbYS16QS1aXSopPyhbXFxcXC4hLFxcXFw/O34tXSopPyhcXFxcc3wkKVwiO1xuICAgIC8vIGNvbnNvbGUubG9nKHN0clJlZ2V4KTtcblxuICAgIHJldHVybiBleHRyYWN0RGF0YVVzaW5nUmVnZXhXaXRoTXVsdGlwbGVWYWx1ZXMoXG4gICAgICAgIGNvbnRlbnQsXG4gICAgICAgIHN0clJlZ2V4LFxuICAgICAgICBxdWVyeSxcbiAgICAgICAgZGF0YU1hcCxcbiAgICAgICAgeFZhbHVlTWFwLFxuICAgICAgICByZW5kZXJJbmZvXG4gICAgKTtcbn1cblxuLy8gSW4gZm9ybSAncmVnZXggd2l0aCB2YWx1ZScsIG5hbWUgZ3JvdXAgJ3ZhbHVlJyBmcm9tIHVzZXJzXG5leHBvcnQgZnVuY3Rpb24gY29sbGVjdERhdGFGcm9tVGV4dChcbiAgICBjb250ZW50OiBzdHJpbmcsXG4gICAgcXVlcnk6IFF1ZXJ5LFxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXG4gICAgZGF0YU1hcDogRGF0YU1hcCxcbiAgICB4VmFsdWVNYXA6IFhWYWx1ZU1hcFxuKTogYm9vbGVhbiB7XG4gICAgLy8gY29uc29sZS5sb2coXCJjb2xsZWN0RGF0YUZyb21UZXh0XCIpO1xuXG4gICAgbGV0IHN0clJlZ2V4ID0gcXVlcnkuZ2V0VGFyZ2V0KCk7XG4gICAgLy8gY29uc29sZS5sb2coc3RyUmVnZXgpO1xuXG4gICAgcmV0dXJuIGV4dHJhY3REYXRhVXNpbmdSZWdleFdpdGhNdWx0aXBsZVZhbHVlcyhcbiAgICAgICAgY29udGVudCxcbiAgICAgICAgc3RyUmVnZXgsXG4gICAgICAgIHF1ZXJ5LFxuICAgICAgICBkYXRhTWFwLFxuICAgICAgICB4VmFsdWVNYXAsXG4gICAgICAgIHJlbmRlckluZm9cbiAgICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29sbGVjdERhdGFGcm9tRmlsZU1ldGEoXG4gICAgZmlsZTogVEZpbGUsXG4gICAgY29udGVudDogc3RyaW5nLFxuICAgIHF1ZXJ5OiBRdWVyeSxcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvLFxuICAgIGRhdGFNYXA6IERhdGFNYXAsXG4gICAgeFZhbHVlTWFwOiBYVmFsdWVNYXBcbik6IGJvb2xlYW4ge1xuICAgIC8vIGNvbnNvbGUubG9nKFwiY29sbGVjdERhdGFGcm9tRmlsZU1ldGFcIik7XG5cbiAgICBpZiAoZmlsZSAmJiBmaWxlIGluc3RhbmNlb2YgVEZpbGUpIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coZmlsZS5zdGF0KTtcblxuICAgICAgICBsZXQgdGFyZ2V0ID0gcXVlcnkuZ2V0VGFyZ2V0KCk7XG4gICAgICAgIGxldCB4VmFsdWUgPSB4VmFsdWVNYXAuZ2V0KHJlbmRlckluZm8ueERhdGFzZXRbcXVlcnkuZ2V0SWQoKV0pO1xuXG4gICAgICAgIGlmICh0YXJnZXQgPT09IFwiY0RhdGVcIikge1xuICAgICAgICAgICAgbGV0IGN0aW1lID0gZmlsZS5zdGF0LmN0aW1lOyAvLyB1bml4IHRpbWVcbiAgICAgICAgICAgIHF1ZXJ5LnZhbHVlVHlwZSA9IFZhbHVlVHlwZS5EYXRlO1xuICAgICAgICAgICAgcXVlcnkuYWRkTnVtVGFyZ2V0cygpO1xuICAgICAgICAgICAgYWRkVG9EYXRhTWFwKGRhdGFNYXAsIHhWYWx1ZSwgcXVlcnksIGN0aW1lKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHRhcmdldCA9PT0gXCJtRGF0ZVwiKSB7XG4gICAgICAgICAgICBsZXQgbXRpbWUgPSBmaWxlLnN0YXQubXRpbWU7IC8vIHVuaXggdGltZVxuICAgICAgICAgICAgcXVlcnkudmFsdWVUeXBlID0gVmFsdWVUeXBlLkRhdGU7XG4gICAgICAgICAgICBxdWVyeS5hZGROdW1UYXJnZXRzKCk7XG4gICAgICAgICAgICBhZGRUb0RhdGFNYXAoZGF0YU1hcCwgeFZhbHVlLCBxdWVyeSwgbXRpbWUpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0ID09PSBcInNpemVcIikge1xuICAgICAgICAgICAgbGV0IHNpemUgPSBmaWxlLnN0YXQuc2l6ZTsgLy8gbnVtYmVyIGluXG4gICAgICAgICAgICBxdWVyeS5hZGROdW1UYXJnZXRzKCk7XG4gICAgICAgICAgICBhZGRUb0RhdGFNYXAoZGF0YU1hcCwgeFZhbHVlLCBxdWVyeSwgc2l6ZSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh0YXJnZXQgPT09IFwibnVtV29yZHNcIikge1xuICAgICAgICAgICAgbGV0IG51bVdvcmRzID0gaGVscGVyLmdldFdvcmRDb3VudChjb250ZW50KTtcbiAgICAgICAgICAgIGFkZFRvRGF0YU1hcChkYXRhTWFwLCB4VmFsdWUsIHF1ZXJ5LCBudW1Xb3Jkcyk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh0YXJnZXQgPT09IFwibnVtQ2hhcnNcIikge1xuICAgICAgICAgICAgbGV0IG51bUNoYXJzID0gaGVscGVyLmdldENoYXJhY3RlckNvdW50KGNvbnRlbnQpO1xuICAgICAgICAgICAgcXVlcnkuYWRkTnVtVGFyZ2V0cygpO1xuICAgICAgICAgICAgYWRkVG9EYXRhTWFwKGRhdGFNYXAsIHhWYWx1ZSwgcXVlcnksIG51bUNoYXJzKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHRhcmdldCA9PT0gXCJudW1TZW50ZW5jZXNcIikge1xuICAgICAgICAgICAgbGV0IG51bVNlbnRlbmNlcyA9IGhlbHBlci5nZXRTZW50ZW5jZUNvdW50KGNvbnRlbnQpO1xuICAgICAgICAgICAgcXVlcnkuYWRkTnVtVGFyZ2V0cygpO1xuICAgICAgICAgICAgYWRkVG9EYXRhTWFwKGRhdGFNYXAsIHhWYWx1ZSwgcXVlcnksIG51bVNlbnRlbmNlcyk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh0YXJnZXQgPT09IFwibmFtZVwiKSB7XG4gICAgICAgICAgICBsZXQgdGFyZ2V0TWVhc3VyZSA9IDAuMDtcbiAgICAgICAgICAgIGxldCB0YXJnZXRFeGlzdCA9IGZhbHNlO1xuICAgICAgICAgICAgbGV0IHJldFBhcnNlID0gaGVscGVyLnBhcnNlRmxvYXRGcm9tQW55KFxuICAgICAgICAgICAgICAgIGZpbGUuYmFzZW5hbWUsXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby50ZXh0VmFsdWVNYXBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAocmV0UGFyc2UudmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAocmV0UGFyc2UudHlwZSA9PT0gVmFsdWVUeXBlLlRpbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0TWVhc3VyZSA9IHJldFBhcnNlLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRFeGlzdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5LnZhbHVlVHlwZSA9IFZhbHVlVHlwZS5UaW1lO1xuICAgICAgICAgICAgICAgICAgICBxdWVyeS5hZGROdW1UYXJnZXRzKCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgIXJlbmRlckluZm8uaWdub3JlWmVyb1ZhbHVlW3F1ZXJ5LmdldElkKCldIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICByZXRQYXJzZS52YWx1ZSAhPT0gMFxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldE1lYXN1cmUgKz0gcmV0UGFyc2UudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRFeGlzdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeS5hZGROdW1UYXJnZXRzKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IG51bGw7XG4gICAgICAgICAgICBpZiAodGFyZ2V0RXhpc3QpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHRhcmdldE1lYXN1cmU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBhZGRUb0RhdGFNYXAoZGF0YU1hcCwgeFZhbHVlLCBxdWVyeSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG4vLyBJbiBmb3JtICdrZXk6OnZhbHVlJywgbmFtZWQgZ3JvdXAgJ3ZhbHVlJyBmcm9tIHBsdWdpblxuZXhwb3J0IGZ1bmN0aW9uIGNvbGxlY3REYXRhRnJvbUR2RmllbGQoXG4gICAgY29udGVudDogc3RyaW5nLFxuICAgIHF1ZXJ5OiBRdWVyeSxcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvLFxuICAgIGRhdGFNYXA6IERhdGFNYXAsXG4gICAgeFZhbHVlTWFwOiBYVmFsdWVNYXBcbik6IGJvb2xlYW4ge1xuICAgIGxldCBkdlRhcmdldCA9IHF1ZXJ5LmdldFRhcmdldCgpO1xuICAgIGlmIChxdWVyeS5nZXRQYXJlbnRUYXJnZXQoKSkge1xuICAgICAgICBkdlRhcmdldCA9IHF1ZXJ5LmdldFBhcmVudFRhcmdldCgpOyAvLyB1c2UgcGFyZW50IHRhZyBuYW1lIGZvciBtdWx0aXBsZSB2YWx1ZXNcbiAgICB9XG4gICAgLy8gRGF0YXZpZXcgYXNrIHVzZXIgdG8gYWRkIGRhc2hlcyBmb3Igc3BhY2VzIGFzIHNlYXJjaCB0YXJnZXRcbiAgICAvLyBTbyBhIGRhc2ggbWF5IHN0YW5kcyBmb3IgYSByZWFsIGRhc2ggb3IgYSBzcGFjZVxuICAgIGR2VGFyZ2V0ID0gZHZUYXJnZXQucmVwbGFjZShcIi1cIiwgXCJbXFxcXHNcXFxcLV1cIik7XG5cbiAgICAvLyBUZXN0IHRoaXMgaW4gUmVnZXgxMDFcbiAgICAvLyByZW1lbWJlciAnXFxzJyBpbmNsdWRlcyBuZXcgbGluZVxuICAgIC8vIChefCB8XFx0fFxcfCkoXFxbfFxcKCk/XFwqezAsMn1kdlRhcmdldFxcKnswLDJ9KDo6WyB8XFx0XSooPzx2YWx1ZT5bXFxkXFwuXFwvXFwtXFx3LEA7IFxcdDpdKikoXFxdfFxcKSk/KVxuICAgIGxldCBzdHJSZWdleCA9XG4gICAgICAgIFN0cmluZy5yYXdgKF58IHxcXHR8XFx8KShcXFt8XFwoKT9cXCp7MCwyfWAgK1xuICAgICAgICBkdlRhcmdldCArXG4gICAgICAgIFN0cmluZy5yYXdgXFwqezAsMn0oOjpbIHxcXHRdKig/PHZhbHVlPltcXHB7RXh0UGljdH1cXGRcXC5cXC9cXC1cXHcsQDsgXFx0OmAgK1xuICAgICAgICBXb3JkQ2hhcmFjdGVycyArXG4gICAgICAgIFN0cmluZy5yYXdgXSopKFxcXXxcXCkpPylgO1xuICAgIC8vIGNvbnNvbGUubG9nKHN0clJlZ2V4KTtcblxuICAgIHJldHVybiBleHRyYWN0RGF0YVVzaW5nUmVnZXhXaXRoTXVsdGlwbGVWYWx1ZXMoXG4gICAgICAgIGNvbnRlbnQsXG4gICAgICAgIHN0clJlZ2V4LFxuICAgICAgICBxdWVyeSxcbiAgICAgICAgZGF0YU1hcCxcbiAgICAgICAgeFZhbHVlTWFwLFxuICAgICAgICByZW5kZXJJbmZvXG4gICAgKTtcbn1cblxuLy8gSW4gZm9ybSAncmVnZXggd2l0aCB2YWx1ZScsIG5hbWUgZ3JvdXAgJ3ZhbHVlJyBmcm9tIHVzZXJzXG5leHBvcnQgZnVuY3Rpb24gY29sbGVjdERhdGFGcm9tVGFzayhcbiAgICBjb250ZW50OiBzdHJpbmcsXG4gICAgcXVlcnk6IFF1ZXJ5LFxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXG4gICAgZGF0YU1hcDogRGF0YU1hcCxcbiAgICB4VmFsdWVNYXA6IFhWYWx1ZU1hcFxuKTogYm9vbGVhbiB7XG4gICAgLy8gY29uc29sZS5sb2coXCJjb2xsZWN0RGF0YUZyb21UYXNrXCIpO1xuICAgIGxldCBzZWFyY2hUeXBlID0gcXVlcnkuZ2V0VHlwZSgpO1xuICAgIC8vIGNvbnNvbGUubG9nKHNlYXJjaFR5cGUpO1xuXG4gICAgbGV0IHN0clJlZ2V4ID0gcXVlcnkuZ2V0VGFyZ2V0KCk7XG4gICAgaWYgKHNlYXJjaFR5cGUgPT09IFNlYXJjaFR5cGUuVGFzaykge1xuICAgICAgICBzdHJSZWdleCA9IFwiXFxcXFtbXFxcXHN4XVxcXFxdXFxcXHNcIiArIHN0clJlZ2V4O1xuICAgIH0gZWxzZSBpZiAoc2VhcmNoVHlwZSA9PT0gU2VhcmNoVHlwZS5UYXNrRG9uZSkge1xuICAgICAgICBzdHJSZWdleCA9IFwiXFxcXFt4XFxcXF1cXFxcc1wiICsgc3RyUmVnZXg7XG4gICAgfSBlbHNlIGlmIChzZWFyY2hUeXBlID09PSBTZWFyY2hUeXBlLlRhc2tOb3REb25lKSB7XG4gICAgICAgIHN0clJlZ2V4ID0gXCJcXFxcW1xcXFxzXFxcXF1cXFxcc1wiICsgc3RyUmVnZXg7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gYWxsXG4gICAgICAgIHN0clJlZ2V4ID0gXCJcXFxcW1tcXFxcc3hdXFxcXF1cXFxcc1wiICsgc3RyUmVnZXg7XG4gICAgfVxuICAgIC8vIGNvbnNvbGUubG9nKHN0clJlZ2V4KTtcblxuICAgIHJldHVybiBleHRyYWN0RGF0YVVzaW5nUmVnZXhXaXRoTXVsdGlwbGVWYWx1ZXMoXG4gICAgICAgIGNvbnRlbnQsXG4gICAgICAgIHN0clJlZ2V4LFxuICAgICAgICBxdWVyeSxcbiAgICAgICAgZGF0YU1hcCxcbiAgICAgICAgeFZhbHVlTWFwLFxuICAgICAgICByZW5kZXJJbmZvXG4gICAgKTtcbn1cbiIsImltcG9ydCB7IEFwcCwgUGx1Z2luU2V0dGluZ1RhYiwgU2V0dGluZyB9IGZyb20gXCJvYnNpZGlhblwiO1xuaW1wb3J0IFRyYWNrZXIgZnJvbSBcIi4vbWFpblwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRyYWNrZXJTZXR0aW5ncyB7XG4gICAgZm9sZGVyOiBzdHJpbmc7XG4gICAgZGF0ZUZvcm1hdDogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgREVGQVVMVF9TRVRUSU5HUzogVHJhY2tlclNldHRpbmdzID0ge1xuICAgIGZvbGRlcjogXCIvXCIsXG4gICAgZGF0ZUZvcm1hdDogXCJZWVlZLU1NLUREXCIsXG59O1xuXG5leHBvcnQgY2xhc3MgVHJhY2tlclNldHRpbmdUYWIgZXh0ZW5kcyBQbHVnaW5TZXR0aW5nVGFiIHtcbiAgICBwbHVnaW46IFRyYWNrZXI7XG5cbiAgICBjb25zdHJ1Y3RvcihhcHA6IEFwcCwgcGx1Z2luOiBUcmFja2VyKSB7XG4gICAgICAgIHN1cGVyKGFwcCwgcGx1Z2luKTtcbiAgICAgICAgdGhpcy5wbHVnaW4gPSBwbHVnaW47XG4gICAgfVxuXG4gICAgZGlzcGxheSgpOiB2b2lkIHtcbiAgICAgICAgbGV0IHsgY29udGFpbmVyRWwgfSA9IHRoaXM7XG5cbiAgICAgICAgY29udGFpbmVyRWwuZW1wdHkoKTtcblxuICAgICAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcbiAgICAgICAgICAgIC5zZXROYW1lKFwiRGVmYXVsdCBmb2xkZXIgbG9jYXRpb25cIilcbiAgICAgICAgICAgIC5zZXREZXNjKFxuICAgICAgICAgICAgICAgIFwiRmlsZXMgaW4gdGhpcyBmb2xkZXIgd2lsbCBiZSBwYXJzZWQgYW5kIHVzZWQgYXMgaW5wdXQgZGF0YSBvZiB0aGUgdHJhY2tlciBwbHVnaW4uXFxuWW91IGNhbiBhbHNvIG92ZXJyaWRlIGl0IHVzaW5nICdmb2xkZXInIGFyZ3VtZW50IGluIHRoZSB0cmFja2VyIGNvZGVibG9jay5cIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmFkZFRleHQoKHRleHQpID0+XG4gICAgICAgICAgICAgICAgdGV4dFxuICAgICAgICAgICAgICAgICAgICAuc2V0UGxhY2Vob2xkZXIoXCJGb2xkZXIgUGF0aFwiKVxuICAgICAgICAgICAgICAgICAgICAuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9sZGVyKVxuICAgICAgICAgICAgICAgICAgICAub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5mb2xkZXIgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcblxuICAgICAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcbiAgICAgICAgICAgIC5zZXROYW1lKFwiRGVmYXVsdCBkYXRlIGZvcm1hdFwiKVxuICAgICAgICAgICAgLnNldERlc2MoXG4gICAgICAgICAgICAgICAgXCJUaGlzIGZvcm1hdCBpcyB1c2VkIHRvIHBhcnNlIHRoZSBkYXRlIGluIHlvdXIgZGlhcnkgdGl0bGUuXFxuWW91IGNhbiBhbHNvIG92ZXJyaWRlIGl0IHVzaW5nICdkYXRlRm9ybWF0JyBhcmd1bWVudCBpbiB0aGUgdHJhY2tlciBjb2RlYmxvY2suXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5hZGRUZXh0KCh0ZXh0KSA9PlxuICAgICAgICAgICAgICAgIHRleHRcbiAgICAgICAgICAgICAgICAgICAgLnNldFBsYWNlaG9sZGVyKFwiWVlZWS1NTS1ERFwiKVxuICAgICAgICAgICAgICAgICAgICAuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuZGF0ZUZvcm1hdClcbiAgICAgICAgICAgICAgICAgICAgLm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MuZGF0ZUZvcm1hdCA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IEFwcCwgQ2FjaGVkTWV0YWRhdGEsIGdldExpbmtwYXRoLCBQbHVnaW4gfSBmcm9tIFwib2JzaWRpYW5cIjtcbmltcG9ydCB7IE1hcmtkb3duUG9zdFByb2Nlc3NvckNvbnRleHQsIE1hcmtkb3duVmlldywgRWRpdG9yIH0gZnJvbSBcIm9ic2lkaWFuXCI7XG5pbXBvcnQgeyBURmlsZSwgVEZvbGRlciwgbm9ybWFsaXplUGF0aCB9IGZyb20gXCJvYnNpZGlhblwiO1xuaW1wb3J0ICogYXMgcmVuZGVyaW5nIGZyb20gXCIuL3JlbmRlcmluZ1wiO1xuaW1wb3J0IHsgZ2V0UmVuZGVySW5mb0Zyb21ZYW1sIH0gZnJvbSBcIi4vcGFyc2luZ1wiO1xuaW1wb3J0IHtcbiAgICBEYXRhc2V0cyxcbiAgICBRdWVyeSxcbiAgICBRdWVyeVZhbHVlUGFpcixcbiAgICBHcmFwaFR5cGUsXG4gICAgU2VhcmNoVHlwZSxcbiAgICBUYWJsZURhdGEsXG4gICAgUmVuZGVySW5mbyxcbiAgICBYVmFsdWVNYXAsXG4gICAgRGF0YU1hcCxcbiAgICBDdXN0b21EYXRhc2V0SW5mbyxcbiAgICBDb2xsZWN0aW5nUHJvY2Vzc0luZm8sXG4gICAgVmFsdWVUeXBlLFxufSBmcm9tIFwiLi9kYXRhXCI7XG5pbXBvcnQgKiBhcyBjb2xsZWN0aW5nIGZyb20gXCIuL2NvbGxlY3RpbmdcIjtcbmltcG9ydCB7XG4gICAgVHJhY2tlclNldHRpbmdzLFxuICAgIERFRkFVTFRfU0VUVElOR1MsXG4gICAgVHJhY2tlclNldHRpbmdUYWIsXG59IGZyb20gXCIuL3NldHRpbmdzXCI7XG5pbXBvcnQgKiBhcyBoZWxwZXIgZnJvbSBcIi4vaGVscGVyXCI7XG5pbXBvcnQgeyBNb21lbnQgfSBmcm9tIFwibW9tZW50XCI7XG4vLyBpbXBvcnQgeyBnZXREYWlseU5vdGVTZXR0aW5ncyB9IGZyb20gXCJvYnNpZGlhbi1kYWlseS1ub3Rlcy1pbnRlcmZhY2VcIjtcblxuZGVjbGFyZSBnbG9iYWwge1xuICAgIGludGVyZmFjZSBXaW5kb3cge1xuICAgICAgICBhcHA6IEFwcDtcbiAgICAgICAgbW9tZW50OiAoKSA9PiBNb21lbnQ7XG4gICAgfVxufVxuXG5kZWNsYXJlIG1vZHVsZSAnb2JzaWRpYW4nIHtcbiAgICBpbnRlcmZhY2UgVmF1bHQge1xuICAgICAgICBnZXRDb25maWcocHJvcDogc3RyaW5nKTogYW55O1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVHJhY2tlciBleHRlbmRzIFBsdWdpbiB7XG4gICAgc2V0dGluZ3M6IFRyYWNrZXJTZXR0aW5ncztcblxuICAgIGFzeW5jIG9ubG9hZCgpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJsb2FkaW5nIG9ic2lkaWFuLXRyYWNrZXIgcGx1Z2luXCIpO1xuXG4gICAgICAgIGF3YWl0IHRoaXMubG9hZFNldHRpbmdzKCk7XG5cbiAgICAgICAgdGhpcy5hZGRTZXR0aW5nVGFiKG5ldyBUcmFja2VyU2V0dGluZ1RhYih0aGlzLmFwcCwgdGhpcykpO1xuXG4gICAgICAgIHRoaXMucmVnaXN0ZXJNYXJrZG93bkNvZGVCbG9ja1Byb2Nlc3NvcihcbiAgICAgICAgICAgIFwidHJhY2tlclwiLFxuICAgICAgICAgICAgdGhpcy5wb3N0cHJvY2Vzc29yLmJpbmQodGhpcylcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmFkZENvbW1hbmQoe1xuICAgICAgICAgICAgaWQ6IFwiYWRkLWxpbmUtY2hhcnQtdHJhY2tlclwiLFxuICAgICAgICAgICAgbmFtZTogXCJBZGQgTGluZSBDaGFydCBUcmFja2VyXCIsXG4gICAgICAgICAgICBjYWxsYmFjazogKCkgPT4gdGhpcy5hZGRDb2RlQmxvY2soR3JhcGhUeXBlLkxpbmUpLFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmFkZENvbW1hbmQoe1xuICAgICAgICAgICAgaWQ6IFwiYWRkLWJhci1jaGFydC10cmFja2VyXCIsXG4gICAgICAgICAgICBuYW1lOiBcIkFkZCBCYXIgQ2hhcnQgVHJhY2tlclwiLFxuICAgICAgICAgICAgY2FsbGJhY2s6ICgpID0+IHRoaXMuYWRkQ29kZUJsb2NrKEdyYXBoVHlwZS5CYXIpLFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmFkZENvbW1hbmQoe1xuICAgICAgICAgICAgaWQ6IFwiYWRkLXN1bW1hcnktdHJhY2tlclwiLFxuICAgICAgICAgICAgbmFtZTogXCJBZGQgU3VtbWFyeSBUcmFja2VyXCIsXG4gICAgICAgICAgICBjYWxsYmFjazogKCkgPT4gdGhpcy5hZGRDb2RlQmxvY2soR3JhcGhUeXBlLlN1bW1hcnkpLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyBsb2FkU2V0dGluZ3MoKSB7XG4gICAgICAgIHRoaXMuc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKFxuICAgICAgICAgICAge30sXG4gICAgICAgICAgICBERUZBVUxUX1NFVFRJTkdTLFxuICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkRGF0YSgpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgYXN5bmMgc2F2ZVNldHRpbmdzKCkge1xuICAgICAgICBhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xuICAgIH1cblxuICAgIHJlbmRlckVycm9yTWVzc2FnZShtZXNzYWdlOiBzdHJpbmcsIGNhbnZhczogSFRNTEVsZW1lbnQsIGVsOiBIVE1MRWxlbWVudCkge1xuICAgICAgICByZW5kZXJpbmcucmVuZGVyRXJyb3JNZXNzYWdlKGNhbnZhcywgbWVzc2FnZSk7XG4gICAgICAgIGVsLmFwcGVuZENoaWxkKGNhbnZhcyk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBvbnVubG9hZCgpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJ1bmxvYWRpbmcgb2JzaWRpYW4tdHJhY2tlciBwbHVnaW5cIik7XG4gICAgfVxuXG4gICAgZ2V0RmlsZXNJbkZvbGRlcihcbiAgICAgICAgZm9sZGVyOiBURm9sZGVyLFxuICAgICAgICBpbmNsdWRlU3ViRm9sZGVyczogYm9vbGVhbiA9IHRydWVcbiAgICApOiBURmlsZVtdIHtcbiAgICAgICAgbGV0IGZpbGVzOiBURmlsZVtdID0gW107XG5cbiAgICAgICAgZm9yIChsZXQgaXRlbSBvZiBmb2xkZXIuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgVEZpbGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5leHRlbnNpb24gPT09IFwibWRcIikge1xuICAgICAgICAgICAgICAgICAgICBmaWxlcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0gaW5zdGFuY2VvZiBURm9sZGVyICYmIGluY2x1ZGVTdWJGb2xkZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbGVzID0gZmlsZXMuY29uY2F0KHRoaXMuZ2V0RmlsZXNJbkZvbGRlcihpdGVtKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZpbGVzO1xuICAgIH1cblxuICAgIGFzeW5jIGdldEZpbGVzKFxuICAgICAgICBmaWxlczogVEZpbGVbXSxcbiAgICAgICAgcmVuZGVySW5mbzogUmVuZGVySW5mbyxcbiAgICAgICAgaW5jbHVkZVN1YkZvbGRlcnM6IGJvb2xlYW4gPSB0cnVlXG4gICAgKSB7XG4gICAgICAgIGlmICghZmlsZXMpIHJldHVybjtcblxuICAgICAgICBsZXQgZm9sZGVyVG9TZWFyY2ggPSByZW5kZXJJbmZvLmZvbGRlcjtcbiAgICAgICAgbGV0IHVzZVNwZWNpZmllZEZpbGVzT25seSA9IHJlbmRlckluZm8uc3BlY2lmaWVkRmlsZXNPbmx5O1xuICAgICAgICBsZXQgc3BlY2lmaWVkRmlsZXMgPSByZW5kZXJJbmZvLmZpbGU7XG4gICAgICAgIGxldCBmaWxlc0NvbnRhaW5zTGlua2VkRmlsZXMgPSByZW5kZXJJbmZvLmZpbGVDb250YWluc0xpbmtlZEZpbGVzO1xuICAgICAgICBsZXQgZmlsZU11bHRpcGxpZXJBZnRlckxpbmsgPSByZW5kZXJJbmZvLmZpbGVNdWx0aXBsaWVyQWZ0ZXJMaW5rO1xuXG4gICAgICAgIC8vIEluY2x1ZGUgZmlsZXMgaW4gZm9sZGVyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHVzZVNwZWNpZmllZEZpbGVzT25seSk7XG4gICAgICAgIGlmICghdXNlU3BlY2lmaWVkRmlsZXNPbmx5KSB7XG4gICAgICAgICAgICBsZXQgZm9sZGVyID0gdGhpcy5hcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKFxuICAgICAgICAgICAgICAgIG5vcm1hbGl6ZVBhdGgoZm9sZGVyVG9TZWFyY2gpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGZvbGRlciAmJiBmb2xkZXIgaW5zdGFuY2VvZiBURm9sZGVyKSB7XG4gICAgICAgICAgICAgICAgbGV0IGZvbGRlckZpbGVzID0gdGhpcy5nZXRGaWxlc0luRm9sZGVyKGZvbGRlcik7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgZmlsZSBvZiBmb2xkZXJGaWxlcykge1xuICAgICAgICAgICAgICAgICAgICBmaWxlcy5wdXNoKGZpbGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEluY2x1ZGUgc3BlY2lmaWVkIGZpbGVcbiAgICAgICAgLy8gY29uc29sZS5sb2coc3BlY2lmaWVkRmlsZXMpO1xuICAgICAgICBmb3IgKGxldCBmaWxlUGF0aCBvZiBzcGVjaWZpZWRGaWxlcykge1xuICAgICAgICAgICAgbGV0IHBhdGggPSBmaWxlUGF0aDtcbiAgICAgICAgICAgIGlmICghcGF0aC5lbmRzV2l0aChcIi5tZFwiKSkge1xuICAgICAgICAgICAgICAgIHBhdGggKz0gXCIubWRcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhdGggPSBub3JtYWxpemVQYXRoKHBhdGgpO1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2cocGF0aCk7XG5cbiAgICAgICAgICAgIGxldCBmaWxlID0gdGhpcy5hcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKHBhdGgpO1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coZmlsZSk7XG4gICAgICAgICAgICBpZiAoZmlsZSAmJiBmaWxlIGluc3RhbmNlb2YgVEZpbGUpIHtcbiAgICAgICAgICAgICAgICBmaWxlcy5wdXNoKGZpbGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGZpbGVzKTtcblxuICAgICAgICAvLyBJbmNsdWRlIGZpbGVzIGluIHBvaW50ZWQgYnkgbGlua3MgaW4gZmlsZVxuICAgICAgICAvLyBjb25zb2xlLmxvZyhmaWxlc0NvbnRhaW5zTGlua2VkRmlsZXMpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhmaWxlTXVsdGlwbGllckFmdGVyTGluayk7XG4gICAgICAgIGxldCBsaW5rZWRGaWxlTXVsdGlwbGllciA9IDE7XG4gICAgICAgIGxldCBzZWFyY2hGaWxlTXVsdGlmcGllckFmdGVyTGluayA9IHRydWU7XG4gICAgICAgIGlmIChmaWxlTXVsdGlwbGllckFmdGVyTGluayA9PT0gXCJcIikge1xuICAgICAgICAgICAgc2VhcmNoRmlsZU11bHRpZnBpZXJBZnRlckxpbmsgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmICgvXlswLTldKyQvLnRlc3QoZmlsZU11bHRpcGxpZXJBZnRlckxpbmspKSB7XG4gICAgICAgICAgICAvLyBpbnRlZ2VyXG4gICAgICAgICAgICBsaW5rZWRGaWxlTXVsdGlwbGllciA9IHBhcnNlRmxvYXQoZmlsZU11bHRpcGxpZXJBZnRlckxpbmspO1xuICAgICAgICAgICAgc2VhcmNoRmlsZU11bHRpZnBpZXJBZnRlckxpbmsgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmICghL1xcPzx2YWx1ZT4vLnRlc3QoZmlsZU11bHRpcGxpZXJBZnRlckxpbmspKSB7XG4gICAgICAgICAgICAvLyBubyAndmFsdWUnIG5hbWVkIGdyb3VwXG4gICAgICAgICAgICBzZWFyY2hGaWxlTXVsdGlmcGllckFmdGVyTGluayA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGZpbGVQYXRoIG9mIGZpbGVzQ29udGFpbnNMaW5rZWRGaWxlcykge1xuICAgICAgICAgICAgaWYgKCFmaWxlUGF0aC5lbmRzV2l0aChcIi5tZFwiKSkge1xuICAgICAgICAgICAgICAgIGZpbGVQYXRoICs9IFwiLm1kXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgZmlsZSA9IHRoaXMuYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChcbiAgICAgICAgICAgICAgICBub3JtYWxpemVQYXRoKGZpbGVQYXRoKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChmaWxlICYmIGZpbGUgaW5zdGFuY2VvZiBURmlsZSkge1xuICAgICAgICAgICAgICAgIC8vIEdldCBsaW5rZWQgZmlsZXNcbiAgICAgICAgICAgICAgICBsZXQgZmlsZUNhY2hlID0gdGhpcy5hcHAubWV0YWRhdGFDYWNoZS5nZXRGaWxlQ2FjaGUoZmlsZSk7XG4gICAgICAgICAgICAgICAgbGV0IGZpbGVDb250ZW50ID0gYXdhaXQgdGhpcy5hcHAudmF1bHQuYWRhcHRlci5yZWFkKGZpbGUucGF0aCk7XG4gICAgICAgICAgICAgICAgbGV0IGxpbmVzID0gZmlsZUNvbnRlbnQuc3BsaXQoXG4gICAgICAgICAgICAgICAgICAgIC9cXHJcXG58W1xcblxcdlxcZlxcclxceDg1XFx1MjAyOFxcdTIwMjldL1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2cobGluZXMpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFmaWxlQ2FjaGU/LmxpbmtzKSBjb250aW51ZTtcblxuICAgICAgICAgICAgICAgIGZvciAobGV0IGxpbmsgb2YgZmlsZUNhY2hlLmxpbmtzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghbGluaykgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIGxldCBsaW5rZWRGaWxlID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwLm1ldGFkYXRhQ2FjaGUuZ2V0Rmlyc3RMaW5rcGF0aERlc3QoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluay5saW5rLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVQYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBpZiAobGlua2VkRmlsZSAmJiBsaW5rZWRGaWxlIGluc3RhbmNlb2YgVEZpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWFyY2hGaWxlTXVsdGlmcGllckFmdGVyTGluaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdldCB0aGUgbGluZSBvZiBsaW5rIGluIGZpbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbGluZU51bWJlciA9IGxpbmsucG9zaXRpb24uZW5kLmxpbmU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2cobGluZU51bWJlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpbmVOdW1iZXIgPj0gMCAmJiBsaW5lTnVtYmVyIDwgbGluZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBsaW5lID0gbGluZXNbbGluZU51bWJlcl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGxpbmUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRyeSBleHRyYWN0IG11bHRpcGxpZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgKGxpbmsucG9zaXRpb24pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzcGxpdHRlZCA9IGxpbmUuc3BsaXQobGluay5vcmlnaW5hbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHNwbGl0dGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNwbGl0dGVkLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRvUGFyc2UgPSBzcGxpdHRlZFsxXS50cmltKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3RyUmVnZXggPSBmaWxlTXVsdGlwbGllckFmdGVyTGluaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZWdleCA9IG5ldyBSZWdFeHAoc3RyUmVnZXgsIFwiZ21cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbWF0Y2g7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKG1hdGNoID0gcmVnZXguZXhlYyh0b1BhcnNlKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhtYXRjaCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgbWF0Y2guZ3JvdXBzICE9PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ1bmRlZmluZWRcIiAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgbWF0Y2guZ3JvdXBzLnZhbHVlICE9PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ1bmRlZmluZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtdXN0IGhhdmUgZ3JvdXAgbmFtZSAndmFsdWUnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXRQYXJzZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwZXIucGFyc2VGbG9hdEZyb21BbnkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2guZ3JvdXBzLnZhbHVlLnRyaW0oKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJJbmZvLnRleHRWYWx1ZU1hcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldFBhcnNlLnZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rZWRGaWxlTXVsdGlwbGllciA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0UGFyc2UudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5rZWRGaWxlTXVsdGlwbGllcjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXMucHVzaChsaW5rZWRGaWxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGZpbGVzKTtcbiAgICB9XG5cbiAgICBhc3luYyBwb3N0cHJvY2Vzc29yKFxuICAgICAgICBzb3VyY2U6IHN0cmluZyxcbiAgICAgICAgZWw6IEhUTUxFbGVtZW50LFxuICAgICAgICBjdHg6IE1hcmtkb3duUG9zdFByb2Nlc3NvckNvbnRleHRcbiAgICApIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJwb3N0cHJvY2Vzc1wiKTtcbiAgICAgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblxuICAgICAgICBsZXQgeWFtbFRleHQgPSBzb3VyY2UudHJpbSgpO1xuXG4gICAgICAgIC8vIFJlcGxhY2UgYWxsIHRhYnMgYnkgc3BhY2VzXG4gICAgICAgIGxldCB0YWJTaXplID0gdGhpcy5hcHAudmF1bHQuZ2V0Q29uZmlnKFwidGFiU2l6ZVwiKTtcbiAgICAgICAgbGV0IHNwYWNlcyA9IEFycmF5KHRhYlNpemUpLmZpbGwoXCIgXCIpLmpvaW4oXCJcIik7XG4gICAgICAgIHlhbWxUZXh0ID0geWFtbFRleHQucmVwbGFjZSgvXFx0L2dtLCBzcGFjZXMpO1xuXG4gICAgICAgIC8vIEdldCByZW5kZXIgaW5mb1xuICAgICAgICBsZXQgcmV0UmVuZGVySW5mbyA9IGdldFJlbmRlckluZm9Gcm9tWWFtbCh5YW1sVGV4dCwgdGhpcyk7XG4gICAgICAgIGlmICh0eXBlb2YgcmV0UmVuZGVySW5mbyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyRXJyb3JNZXNzYWdlKHJldFJlbmRlckluZm8sIGNhbnZhcywgZWwpO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZW5kZXJJbmZvID0gcmV0UmVuZGVySW5mbyBhcyBSZW5kZXJJbmZvO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvKTtcblxuICAgICAgICAvLyBHZXQgZmlsZXNcbiAgICAgICAgbGV0IGZpbGVzOiBURmlsZVtdID0gW107XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmdldEZpbGVzKGZpbGVzLCByZW5kZXJJbmZvKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyRXJyb3JNZXNzYWdlKGUubWVzc2FnZSwgY2FudmFzLCBlbCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyRXJyb3JNZXNzYWdlKFxuICAgICAgICAgICAgICAgIFwiTm8gbWFya2Rvd24gZmlsZXMgZm91bmQgaW4gZm9sZGVyXCIsXG4gICAgICAgICAgICAgICAgY2FudmFzLFxuICAgICAgICAgICAgICAgIGVsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGZpbGVzKTtcblxuICAgICAgICAvLyBsZXQgZGFpbHlOb3Rlc1NldHRpbmdzID0gZ2V0RGFpbHlOb3RlU2V0dGluZ3MoKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coZGFpbHlOb3Rlc1NldHRpbmdzKTtcbiAgICAgICAgLy8gSSBhbHdheXMgZ290IFlZWVktTU0tREQgZnJvbSBkYWlseU5vdGVzU2V0dGluZ3MuZm9ybWF0XG4gICAgICAgIC8vIFVzZSBvd24gc2V0dGluZ3MgcGFuZWwgZm9yIG5vd1xuXG4gICAgICAgIC8vIENvbGxlY3RpbmcgZGF0YSB0byBkYXRhTWFwIGZpcnN0XG4gICAgICAgIGxldCBkYXRhTWFwOiBEYXRhTWFwID0gbmV3IE1hcCgpOyAvLyB7c3RyRGF0ZTogW3F1ZXJ5OiB2YWx1ZSwgLi4uXX1cbiAgICAgICAgbGV0IHByb2Nlc3NJbmZvID0gbmV3IENvbGxlY3RpbmdQcm9jZXNzSW5mbygpO1xuICAgICAgICBwcm9jZXNzSW5mby5maWxlVG90YWwgPSBmaWxlcy5sZW5ndGg7XG5cbiAgICAgICAgLy8gQ29sbGVjdCBkYXRhIGZyb20gZmlsZXMsIGVhY2ggZmlsZSBoYXMgb25lIGRhdGEgcG9pbnQgZm9yIGVhY2ggcXVlcnlcbiAgICAgICAgY29uc3QgbG9vcEZpbGVQcm9taXNlcyA9IGZpbGVzLm1hcChhc3luYyAoZmlsZSkgPT4ge1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coZmlsZS5iYXNlbmFtZSk7XG4gICAgICAgICAgICAvLyBHZXQgZmlsZUNhY2hlIGFuZCBjb250ZW50XG4gICAgICAgICAgICBsZXQgZmlsZUNhY2hlOiBDYWNoZWRNZXRhZGF0YSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgbmVlZEZpbGVDYWNoZSA9IHJlbmRlckluZm8ucXVlcmllcy5zb21lKChxKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IHR5cGUgPSBxLmdldFR5cGUoKTtcbiAgICAgICAgICAgICAgICBsZXQgdGFyZ2V0ID0gcS5nZXRUYXJnZXQoKTtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHR5cGUgPT09IFNlYXJjaFR5cGUuRnJvbnRtYXR0ZXIgfHxcbiAgICAgICAgICAgICAgICAgICAgdHlwZSA9PT0gU2VhcmNoVHlwZS5UYWcgfHxcbiAgICAgICAgICAgICAgICAgICAgdHlwZSA9PT0gU2VhcmNoVHlwZS5XaWtpIHx8XG4gICAgICAgICAgICAgICAgICAgIHR5cGUgPT09IFNlYXJjaFR5cGUuV2lraUxpbmsgfHxcbiAgICAgICAgICAgICAgICAgICAgdHlwZSA9PT0gU2VhcmNoVHlwZS5XaWtpRGlzcGxheVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAobmVlZEZpbGVDYWNoZSkge1xuICAgICAgICAgICAgICAgIGZpbGVDYWNoZSA9IHRoaXMuYXBwLm1ldGFkYXRhQ2FjaGUuZ2V0RmlsZUNhY2hlKGZpbGUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgY29udGVudDogc3RyaW5nID0gbnVsbDtcbiAgICAgICAgICAgIGxldCBuZWVkQ29udGVudCA9IHJlbmRlckluZm8ucXVlcmllcy5zb21lKChxKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IHR5cGUgPSBxLmdldFR5cGUoKTtcbiAgICAgICAgICAgICAgICBsZXQgdGFyZ2V0ID0gcS5nZXRUYXJnZXQoKTtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHR5cGUgPT09IFNlYXJjaFR5cGUuVGFnIHx8XG4gICAgICAgICAgICAgICAgICAgIHR5cGUgPT09IFNlYXJjaFR5cGUuVGV4dCB8fFxuICAgICAgICAgICAgICAgICAgICB0eXBlID09PSBTZWFyY2hUeXBlLmR2RmllbGQgfHxcbiAgICAgICAgICAgICAgICAgICAgdHlwZSA9PT0gU2VhcmNoVHlwZS5UYXNrIHx8XG4gICAgICAgICAgICAgICAgICAgIHR5cGUgPT09IFNlYXJjaFR5cGUuVGFza0RvbmUgfHxcbiAgICAgICAgICAgICAgICAgICAgdHlwZSA9PT0gU2VhcmNoVHlwZS5UYXNrTm90RG9uZVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFNlYXJjaFR5cGUuRmlsZU1ldGEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ID09PSBcIm51bVdvcmRzXCIgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCA9PT0gXCJudW1DaGFyc1wiIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQgPT09IFwibnVtU2VudGVuY2VzXCJcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChuZWVkQ29udGVudCkge1xuICAgICAgICAgICAgICAgIGNvbnRlbnQgPSBhd2FpdCB0aGlzLmFwcC52YXVsdC5hZGFwdGVyLnJlYWQoZmlsZS5wYXRoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gR2V0IHhWYWx1ZSBhbmQgYWRkIGl0IGludG8geFZhbHVlTWFwIGZvciBsYXRlciB1c2VcbiAgICAgICAgICAgIGxldCB4VmFsdWVNYXA6IFhWYWx1ZU1hcCA9IG5ldyBNYXAoKTsgLy8gcXVlcnlJZDogeFZhbHVlIGZvciB0aGlzIGZpbGVcbiAgICAgICAgICAgIGxldCBza2lwVGhpc0ZpbGUgPSBmYWxzZTtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8ueERhdGFzZXQpO1xuICAgICAgICAgICAgZm9yIChsZXQgeERhdGFzZXRJZCBvZiByZW5kZXJJbmZvLnhEYXRhc2V0KSB7XG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coYHhEYXRhc2V0SWQ6ICR7eERhdGFzZXRJZH1gKTtcbiAgICAgICAgICAgICAgICBpZiAoIXhWYWx1ZU1hcC5oYXMoeERhdGFzZXRJZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHhEYXRlID0gd2luZG93Lm1vbWVudChcIlwiKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHhEYXRhc2V0SWQgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWZhdWx0IHVzaW5nIGRhdGUgaW4gZmlsZW5hbWUgYXMgeFZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICB4RGF0ZSA9IGNvbGxlY3RpbmcuZ2V0RGF0ZUZyb21GaWxlbmFtZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckluZm9cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyh4RGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgeERhdGFzZXRRdWVyeSA9IHJlbmRlckluZm8ucXVlcmllc1t4RGF0YXNldElkXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHhEYXRhc2V0UXVlcnkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh4RGF0YXNldFF1ZXJ5LmdldFR5cGUoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU2VhcmNoVHlwZS5Gcm9udG1hdHRlcjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeERhdGUgPSBjb2xsZWN0aW5nLmdldERhdGVGcm9tRnJvbnRtYXR0ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlQ2FjaGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4RGF0YXNldFF1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVySW5mb1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNlYXJjaFR5cGUuVGFnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4RGF0ZSA9IGNvbGxlY3RpbmcuZ2V0RGF0ZUZyb21UYWcoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeERhdGFzZXRRdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckluZm9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTZWFyY2hUeXBlLlRleHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhEYXRlID0gY29sbGVjdGluZy5nZXREYXRlRnJvbVRleHQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeERhdGFzZXRRdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckluZm9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTZWFyY2hUeXBlLmR2RmllbGQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhEYXRlID0gY29sbGVjdGluZy5nZXREYXRlRnJvbUR2RmllbGQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeERhdGFzZXRRdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckluZm9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTZWFyY2hUeXBlLkZpbGVNZXRhOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4RGF0ZSA9IGNvbGxlY3RpbmcuZ2V0RGF0ZUZyb21GaWxlTWV0YShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4RGF0YXNldFF1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVySW5mb1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNlYXJjaFR5cGUuVGFzazpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNlYXJjaFR5cGUuVGFza0RvbmU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTZWFyY2hUeXBlLlRhc2tOb3REb25lOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4RGF0ZSA9IGNvbGxlY3RpbmcuZ2V0RGF0ZUZyb21UYXNrKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhEYXRhc2V0UXVlcnksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJJbmZvXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCF4RGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiSW52YWxpZCB4RGF0ZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNraXBUaGlzRmlsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzSW5mby5maWxlTm90SW5Gb3JtYXQrKztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiZmlsZSBcIiArIGZpbGUuYmFzZW5hbWUgKyBcIiBhY2NlcHRlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZW5kZXJJbmZvLnN0YXJ0RGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4RGF0ZSA8IHJlbmRlckluZm8uc3RhcnREYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNraXBUaGlzRmlsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NJbmZvLmZpbGVPdXRPZkRhdGVSYW5nZSsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZW5kZXJJbmZvLmVuZERhdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeERhdGUgPiByZW5kZXJJbmZvLmVuZERhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tpcFRoaXNGaWxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0luZm8uZmlsZU91dE9mRGF0ZVJhbmdlKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFza2lwVGhpc0ZpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NJbmZvLmdvdEFueVZhbGlkWFZhbHVlIHx8PSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgeFZhbHVlTWFwLnNldChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4RGF0YXNldElkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBlci5kYXRlVG9TdHIoeERhdGUsIHJlbmRlckluZm8uZGF0ZUZvcm1hdClcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzSW5mby5maWxlQXZhaWxhYmxlKys7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdldCBtaW4vbWF4IGRhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzSW5mby5maWxlQXZhaWxhYmxlID09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzSW5mby5taW5EYXRlID0geERhdGUuY2xvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzSW5mby5tYXhEYXRlID0geERhdGUuY2xvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHhEYXRlIDwgcHJvY2Vzc0luZm8ubWluRGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzSW5mby5taW5EYXRlID0geERhdGUuY2xvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHhEYXRlID4gcHJvY2Vzc0luZm8ubWF4RGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzSW5mby5tYXhEYXRlID0geERhdGUuY2xvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2tpcFRoaXNGaWxlKSByZXR1cm47XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyh4VmFsdWVNYXApO1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coYG1pbkRhdGU6ICR7bWluRGF0ZX1gKTtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGBtYXhEYXRlOiAke21heERhdGV9YCk7XG5cbiAgICAgICAgICAgIC8vIExvb3Agb3ZlciBxdWVyaWVzXG4gICAgICAgICAgICBsZXQgeURhdGFzZXRRdWVyaWVzID0gcmVuZGVySW5mby5xdWVyaWVzLmZpbHRlcigocSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBxLmdldFR5cGUoKSAhPT0gU2VhcmNoVHlwZS5UYWJsZSAmJiAhcS51c2VkQXNYRGF0YXNldDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coeURhdGFzZXRRdWVyaWVzKTtcblxuICAgICAgICAgICAgY29uc3QgbG9vcFF1ZXJ5UHJvbWlzZXMgPSB5RGF0YXNldFF1ZXJpZXMubWFwKGFzeW5jIChxdWVyeSkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIEdldCB4VmFsdWUgZnJvbSBmaWxlIGlmIHhEYXRhc2V0IGFzc2lnbmVkXG4gICAgICAgICAgICAgICAgLy8gaWYgKHJlbmRlckluZm8ueERhdGFzZXQgIT09IG51bGwpXG4gICAgICAgICAgICAgICAgLy8gbGV0IHhEYXRhc2V0SWQgPSByZW5kZXJJbmZvLnhEYXRhc2V0O1xuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHF1ZXJ5KTtcblxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiU2VhcmNoIGZyb250bWF0dGVyIHRhZ3NcIik7XG4gICAgICAgICAgICAgICAgaWYgKGZpbGVDYWNoZSAmJiBxdWVyeS5nZXRUeXBlKCkgPT09IFNlYXJjaFR5cGUuVGFnKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEFkZCBmcm9udG1hdHRlciB0YWdzLCBhbGxvdyBzaW1wbGUgdGFnIG9ubHlcbiAgICAgICAgICAgICAgICAgICAgbGV0IGdvdEFueVZhbHVlID0gY29sbGVjdGluZy5jb2xsZWN0RGF0YUZyb21Gcm9udG1hdHRlclRhZyhcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVDYWNoZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVySW5mbyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFNYXAsXG4gICAgICAgICAgICAgICAgICAgICAgICB4VmFsdWVNYXBcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0luZm8uZ290QW55VmFsaWRZVmFsdWUgfHw9IGdvdEFueVZhbHVlO1xuICAgICAgICAgICAgICAgIH0gLy8gU2VhcmNoIGZyb250bWF0dGVyIHRhZ3NcblxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiU2VhcmNoIGZyb250bWF0dGVyIGtleXNcIik7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBmaWxlQ2FjaGUgJiZcbiAgICAgICAgICAgICAgICAgICAgcXVlcnkuZ2V0VHlwZSgpID09PSBTZWFyY2hUeXBlLkZyb250bWF0dGVyICYmXG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5LmdldFRhcmdldCgpICE9PSBcInRhZ3NcIlxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZ290QW55VmFsdWUgPSBjb2xsZWN0aW5nLmNvbGxlY3REYXRhRnJvbUZyb250bWF0dGVyS2V5KFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZUNhY2hlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnksXG4gICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJJbmZvLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YU1hcCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHhWYWx1ZU1hcFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzSW5mby5nb3RBbnlWYWxpZFlWYWx1ZSB8fD0gZ290QW55VmFsdWU7XG4gICAgICAgICAgICAgICAgfSAvLyBjb25zb2xlLmxvZyhcIlNlYXJjaCBmcm9udG1hdHRlciBrZXlzXCIpO1xuXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJTZWFyY2ggd2lraSBsaW5rc1wiKTtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIGZpbGVDYWNoZSAmJlxuICAgICAgICAgICAgICAgICAgICAocXVlcnkuZ2V0VHlwZSgpID09PSBTZWFyY2hUeXBlLldpa2kgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5LmdldFR5cGUoKSA9PT0gU2VhcmNoVHlwZS5XaWtpTGluayB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnkuZ2V0VHlwZSgpID09PSBTZWFyY2hUeXBlLldpa2lEaXNwbGF5KVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZ290QW55VmFsdWUgPSBjb2xsZWN0aW5nLmNvbGxlY3REYXRhRnJvbVdpa2koXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlQ2FjaGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckluZm8sXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhTWFwLFxuICAgICAgICAgICAgICAgICAgICAgICAgeFZhbHVlTWFwXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3NJbmZvLmdvdEFueVZhbGlkWVZhbHVlIHx8PSBnb3RBbnlWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIlNlYXJjaCBpbmxpbmUgdGFnc1wiKTtcbiAgICAgICAgICAgICAgICBpZiAoY29udGVudCAmJiBxdWVyeS5nZXRUeXBlKCkgPT09IFNlYXJjaFR5cGUuVGFnKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBnb3RBbnlWYWx1ZSA9IGNvbGxlY3RpbmcuY29sbGVjdERhdGFGcm9tSW5saW5lVGFnKFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVySW5mbyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFNYXAsXG4gICAgICAgICAgICAgICAgICAgICAgICB4VmFsdWVNYXBcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0luZm8uZ290QW55VmFsaWRZVmFsdWUgfHw9IGdvdEFueVZhbHVlO1xuICAgICAgICAgICAgICAgIH0gLy8gU2VhcmNoIGlubGluZSB0YWdzXG5cbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIlNlYXJjaCBUZXh0XCIpO1xuICAgICAgICAgICAgICAgIGlmIChjb250ZW50ICYmIHF1ZXJ5LmdldFR5cGUoKSA9PT0gU2VhcmNoVHlwZS5UZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBnb3RBbnlWYWx1ZSA9IGNvbGxlY3RpbmcuY29sbGVjdERhdGFGcm9tVGV4dChcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckluZm8sXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhTWFwLFxuICAgICAgICAgICAgICAgICAgICAgICAgeFZhbHVlTWFwXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3NJbmZvLmdvdEFueVZhbGlkWVZhbHVlIHx8PSBnb3RBbnlWYWx1ZTtcbiAgICAgICAgICAgICAgICB9IC8vIFNlYXJjaCB0ZXh0XG5cbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIlNlYXJjaCBGaWxlTWV0YVwiKTtcbiAgICAgICAgICAgICAgICBpZiAocXVlcnkuZ2V0VHlwZSgpID09PSBTZWFyY2hUeXBlLkZpbGVNZXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBnb3RBbnlWYWx1ZSA9IGNvbGxlY3RpbmcuY29sbGVjdERhdGFGcm9tRmlsZU1ldGEoXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVySW5mbyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFNYXAsXG4gICAgICAgICAgICAgICAgICAgICAgICB4VmFsdWVNYXBcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0luZm8uZ290QW55VmFsaWRZVmFsdWUgfHw9IGdvdEFueVZhbHVlO1xuICAgICAgICAgICAgICAgIH0gLy8gU2VhcmNoIEZpbGVNZXRhXG5cbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIlNlYXJjaCBkdkZpZWxkXCIpO1xuICAgICAgICAgICAgICAgIGlmIChjb250ZW50ICYmIHF1ZXJ5LmdldFR5cGUoKSA9PT0gU2VhcmNoVHlwZS5kdkZpZWxkKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBnb3RBbnlWYWx1ZSA9IGNvbGxlY3RpbmcuY29sbGVjdERhdGFGcm9tRHZGaWVsZChcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckluZm8sXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhTWFwLFxuICAgICAgICAgICAgICAgICAgICAgICAgeFZhbHVlTWFwXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3NJbmZvLmdvdEFueVZhbGlkWVZhbHVlIHx8PSBnb3RBbnlWYWx1ZTtcbiAgICAgICAgICAgICAgICB9IC8vIHNlYXJjaCBkdkZpZWxkXG5cbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIlNlYXJjaCBUYXNrXCIpO1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgY29udGVudCAmJlxuICAgICAgICAgICAgICAgICAgICAocXVlcnkuZ2V0VHlwZSgpID09PSBTZWFyY2hUeXBlLlRhc2sgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5LmdldFR5cGUoKSA9PT0gU2VhcmNoVHlwZS5UYXNrRG9uZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnkuZ2V0VHlwZSgpID09PSBTZWFyY2hUeXBlLlRhc2tOb3REb25lKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZ290QW55VmFsdWUgPSBjb2xsZWN0aW5nLmNvbGxlY3REYXRhRnJvbVRhc2soXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnksXG4gICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJJbmZvLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YU1hcCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHhWYWx1ZU1hcFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzSW5mby5nb3RBbnlWYWxpZFlWYWx1ZSB8fD0gZ290QW55VmFsdWU7XG4gICAgICAgICAgICAgICAgfSAvLyBzZWFyY2ggVGFza1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChsb29wUXVlcnlQcm9taXNlcyk7XG4gICAgICAgIH0pO1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChsb29wRmlsZVByb21pc2VzKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coZGF0YU1hcCk7XG5cbiAgICAgICAgLy8gQ29sbGVjdCBkYXRhIGZyb20gYSBmaWxlLCBvbmUgZmlsZSBjb250YWlucyBmdWxsIGRhdGFzZXRcbiAgICAgICAgYXdhaXQgdGhpcy5jb2xsZWN0RGF0YUZyb21UYWJsZShkYXRhTWFwLCByZW5kZXJJbmZvLCBwcm9jZXNzSW5mbyk7XG4gICAgICAgIGlmIChwcm9jZXNzSW5mby5lcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlckVycm9yTWVzc2FnZShcbiAgICAgICAgICAgICAgICBwcm9jZXNzSW5mby5lcnJvck1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgY2FudmFzLFxuICAgICAgICAgICAgICAgIGVsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKG1pbkRhdGUpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhtYXhEYXRlKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coZGF0YU1hcCk7XG5cbiAgICAgICAgLy8gQ2hlY2sgZGF0ZSByYW5nZVxuICAgICAgICAvLyBtaW5EYXRlIGFuZCBtYXhEYXRlIGFyZSBjb2xsZWN0ZWQgd2l0aG91dCBrbm93aW5nIHN0YXJ0RGF0ZSBhbmQgZW5kRGF0ZVxuICAgICAgICAvLyBjb25zb2xlLmxvZyhgZmlsZVRvdGFsOiAke3Byb2Nlc3NJbmZvLmZpbGVUb3RhbH1gKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYGZpbGVBdmFpbGFibGU6ICR7cHJvY2Vzc0luZm8uZmlsZUF2YWlsYWJsZX1gKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYGZpbGVOb3RJbkZvcm1hdDogJHtwcm9jZXNzSW5mby5maWxlTm90SW5Gb3JtYXR9YCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGBmaWxlT3V0T2ZEYXRlUmFuZ2U6ICR7cHJvY2Vzc0luZm8uZmlsZU91dE9mRGF0ZVJhbmdlfWApO1xuICAgICAgICBsZXQgZGF0ZUVycm9yTWVzc2FnZSA9IFwiXCI7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICFwcm9jZXNzSW5mby5taW5EYXRlLmlzVmFsaWQoKSB8fFxuICAgICAgICAgICAgIXByb2Nlc3NJbmZvLm1heERhdGUuaXNWYWxpZCgpIHx8XG4gICAgICAgICAgICBwcm9jZXNzSW5mby5maWxlQXZhaWxhYmxlID09PSAwIHx8XG4gICAgICAgICAgICAhcHJvY2Vzc0luZm8uZ290QW55VmFsaWRYVmFsdWVcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBkYXRlRXJyb3JNZXNzYWdlID0gYE5vIHZhbGlkIGRhdGUgYXMgWCB2YWx1ZSBmb3VuZCBpbiBub3Rlc2A7XG4gICAgICAgICAgICBpZiAocHJvY2Vzc0luZm8uZmlsZU91dE9mRGF0ZVJhbmdlID4gMCkge1xuICAgICAgICAgICAgICAgIGRhdGVFcnJvck1lc3NhZ2UgKz0gYFxcbiR7cHJvY2Vzc0luZm8uZmlsZU91dE9mRGF0ZVJhbmdlfSBmaWxlcyBhcmUgb3V0IG9mIHRoZSBkYXRlIHJhbmdlLmA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocHJvY2Vzc0luZm8uZmlsZU5vdEluRm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgZGF0ZUVycm9yTWVzc2FnZSArPSBgXFxuJHtwcm9jZXNzSW5mby5maWxlTm90SW5Gb3JtYXR9IGZpbGVzIGFyZSBub3QgaW4gdGhlIHJpZ2h0IGZvcm1hdC5gO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChyZW5kZXJJbmZvLnN0YXJ0RGF0ZSA9PT0gbnVsbCAmJiByZW5kZXJJbmZvLmVuZERhdGUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIE5vIGRhdGUgYXJndW1lbnRzXG4gICAgICAgICAgICByZW5kZXJJbmZvLnN0YXJ0RGF0ZSA9IHByb2Nlc3NJbmZvLm1pbkRhdGUuY2xvbmUoKTtcbiAgICAgICAgICAgIHJlbmRlckluZm8uZW5kRGF0ZSA9IHByb2Nlc3NJbmZvLm1heERhdGUuY2xvbmUoKTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHJlbmRlckluZm8uc3RhcnREYXRlICE9PSBudWxsICYmXG4gICAgICAgICAgICByZW5kZXJJbmZvLmVuZERhdGUgPT09IG51bGxcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAocmVuZGVySW5mby5zdGFydERhdGUgPCBwcm9jZXNzSW5mby5tYXhEYXRlKSB7XG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5lbmREYXRlID0gcHJvY2Vzc0luZm8ubWF4RGF0ZS5jbG9uZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkYXRlRXJyb3JNZXNzYWdlID0gXCJJbnZhbGlkIGRhdGUgcmFuZ2VcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHJlbmRlckluZm8uZW5kRGF0ZSAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgcmVuZGVySW5mby5zdGFydERhdGUgPT09IG51bGxcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAocmVuZGVySW5mby5lbmREYXRlID4gcHJvY2Vzc0luZm8ubWluRGF0ZSkge1xuICAgICAgICAgICAgICAgIHJlbmRlckluZm8uc3RhcnREYXRlID0gcHJvY2Vzc0luZm8ubWluRGF0ZS5jbG9uZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkYXRlRXJyb3JNZXNzYWdlID0gXCJJbnZhbGlkIGRhdGUgcmFuZ2VcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHN0YXJ0RGF0ZSBhbmQgZW5kRGF0ZSBhcmUgdmFsaWRcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAocmVuZGVySW5mby5zdGFydERhdGUgPCBwcm9jZXNzSW5mby5taW5EYXRlICYmXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlckluZm8uZW5kRGF0ZSA8IHByb2Nlc3NJbmZvLm1pbkRhdGUpIHx8XG4gICAgICAgICAgICAgICAgKHJlbmRlckluZm8uc3RhcnREYXRlID4gcHJvY2Vzc0luZm8ubWF4RGF0ZSAmJlxuICAgICAgICAgICAgICAgICAgICByZW5kZXJJbmZvLmVuZERhdGUgPiBwcm9jZXNzSW5mby5tYXhEYXRlKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgZGF0ZUVycm9yTWVzc2FnZSA9IFwiSW52YWxpZCBkYXRlIHJhbmdlXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRhdGVFcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlckVycm9yTWVzc2FnZShkYXRlRXJyb3JNZXNzYWdlLCBjYW52YXMsIGVsKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLnN0YXJ0RGF0ZSk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8uZW5kRGF0ZSk7XG5cbiAgICAgICAgaWYgKCFwcm9jZXNzSW5mby5nb3RBbnlWYWxpZFlWYWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyRXJyb3JNZXNzYWdlKFxuICAgICAgICAgICAgICAgIFwiTm8gdmFsaWQgWSB2YWx1ZSBmb3VuZCBpbiBub3Rlc1wiLFxuICAgICAgICAgICAgICAgIGNhbnZhcyxcbiAgICAgICAgICAgICAgICBlbFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJlc2hhcGUgZGF0YSBmb3IgcmVuZGVyaW5nXG4gICAgICAgIGxldCBkYXRhc2V0cyA9IG5ldyBEYXRhc2V0cyhyZW5kZXJJbmZvLnN0YXJ0RGF0ZSwgcmVuZGVySW5mby5lbmREYXRlKTtcbiAgICAgICAgZm9yIChsZXQgcXVlcnkgb2YgcmVuZGVySW5mby5xdWVyaWVzKSB7XG4gICAgICAgICAgICAvLyBXZSBzdGlsbCBjcmVhdGUgYSBkYXRhc2V0IGZvciB4RGF0YXNldCxcbiAgICAgICAgICAgIC8vIHRvIGtlZXAgdGhlIHNlcXVlbmNlIGFuZCBvcmRlciBvZiB0YXJnZXRzXG4gICAgICAgICAgICBsZXQgZGF0YXNldCA9IGRhdGFzZXRzLmNyZWF0ZURhdGFzZXQocXVlcnksIHJlbmRlckluZm8pO1xuICAgICAgICAgICAgLy8gQWRkIG51bWJlciBvZiB0YXJnZXRzIHRvIHRoZSBkYXRhc2V0XG4gICAgICAgICAgICAvLyBOdW1iZXIgb2YgdGFyZ2V0cyBoYXMgYmVlbiBhY2N1bXVsYXRlZCB3aGlsZSBjb2xsZWN0aW5nIGRhdGFcbiAgICAgICAgICAgIGRhdGFzZXQuYWRkTnVtVGFyZ2V0cyhxdWVyeS5nZXROdW1UYXJnZXRzKCkpO1xuICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgICBsZXQgY3VyRGF0ZSA9IHJlbmRlckluZm8uc3RhcnREYXRlLmNsb25lKCk7XG4gICAgICAgICAgICAgICAgY3VyRGF0ZSA8PSByZW5kZXJJbmZvLmVuZERhdGU7XG4gICAgICAgICAgICAgICAgY3VyRGF0ZS5hZGQoMSwgXCJkYXlzXCIpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhjdXJEYXRlKTtcblxuICAgICAgICAgICAgICAgIC8vIGRhdGFNYXAgLS0+IHtkYXRlOiBbcXVlcnk6IHZhbHVlLCAuLi5dfVxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgZGF0YU1hcC5oYXMoXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWxwZXIuZGF0ZVRvU3RyKGN1ckRhdGUsIHJlbmRlckluZm8uZGF0ZUZvcm1hdClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcXVlcnlWYWx1ZVBhaXJzID0gZGF0YU1hcFxuICAgICAgICAgICAgICAgICAgICAgICAgLmdldChoZWxwZXIuZGF0ZVRvU3RyKGN1ckRhdGUsIHJlbmRlckluZm8uZGF0ZUZvcm1hdCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChwYWlyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhaXIucXVlcnkuZXF1YWxUbyhxdWVyeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHF1ZXJ5VmFsdWVQYWlycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBNZXJnZSB2YWx1ZXMgb2YgdGhlIHNhbWUgZGF5IHNhbWUgcXVlcnlcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbmRQYWlyID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRQYWlyIDwgcXVlcnlWYWx1ZVBhaXJzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRQYWlyKytcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb2xsZWN0ZWQgPSBxdWVyeVZhbHVlUGFpcnNbaW5kUGFpcl0udmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXIuaXNOdW1iZXIoY29sbGVjdGVkKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhTnVtYmVyLmlzTmFOKGNvbGxlY3RlZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGNvbGxlY3RlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlICs9IGNvbGxlY3RlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGhhc1ZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFzZXQuc2V0VmFsdWUoY3VyRGF0ZSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlbmRlckluZm8uZGF0YXNldHMgPSBkYXRhc2V0cztcbiAgICAgICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby5kYXRhc2V0cyk7XG5cbiAgICAgICAgbGV0IHJldFJlbmRlciA9IHJlbmRlcmluZy5yZW5kZXIoY2FudmFzLCByZW5kZXJJbmZvKTtcbiAgICAgICAgaWYgKHR5cGVvZiByZXRSZW5kZXIgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlckVycm9yTWVzc2FnZShyZXRSZW5kZXIsIGNhbnZhcywgZWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgZWwuYXBwZW5kQ2hpbGQoY2FudmFzKTtcbiAgICB9XG5cbiAgICAvLyBUT0RPOiByZW1vdmUgdGhpcy5hcHAgYW5kIG1vdmUgdG8gY29sbGVjdGluZy50c1xuICAgIGFzeW5jIGNvbGxlY3REYXRhRnJvbVRhYmxlKFxuICAgICAgICBkYXRhTWFwOiBEYXRhTWFwLFxuICAgICAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvLFxuICAgICAgICBwcm9jZXNzSW5mbzogQ29sbGVjdGluZ1Byb2Nlc3NJbmZvXG4gICAgKSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiY29sbGVjdERhdGFGcm9tVGFibGVcIik7XG5cbiAgICAgICAgbGV0IHRhYmxlUXVlcmllcyA9IHJlbmRlckluZm8ucXVlcmllcy5maWx0ZXIoXG4gICAgICAgICAgICAocSkgPT4gcS5nZXRUeXBlKCkgPT09IFNlYXJjaFR5cGUuVGFibGVcbiAgICAgICAgKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2codGFibGVRdWVyaWVzKTtcbiAgICAgICAgLy8gU2VwYXJhdGUgcXVlcmllcyBieSB0YWJsZXMgYW5kIHhEYXRhc2V0cy95RGF0YXNldHNcbiAgICAgICAgbGV0IHRhYmxlczogQXJyYXk8VGFibGVEYXRhPiA9IFtdO1xuICAgICAgICBsZXQgdGFibGVGaWxlTm90Rm91bmQgPSBmYWxzZTtcbiAgICAgICAgZm9yIChsZXQgcXVlcnkgb2YgdGFibGVRdWVyaWVzKSB7XG4gICAgICAgICAgICBsZXQgZmlsZVBhdGggPSBxdWVyeS5nZXRQYXJlbnRUYXJnZXQoKTtcbiAgICAgICAgICAgIGxldCBmaWxlID0gdGhpcy5hcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKFxuICAgICAgICAgICAgICAgIG5vcm1hbGl6ZVBhdGgoZmlsZVBhdGggKyBcIi5tZFwiKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmICghZmlsZSB8fCAhKGZpbGUgaW5zdGFuY2VvZiBURmlsZSkpIHtcbiAgICAgICAgICAgICAgICB0YWJsZUZpbGVOb3RGb3VuZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCB0YWJsZUluZGV4ID0gcXVlcnkuZ2V0QWNjZXNzb3IoKTtcbiAgICAgICAgICAgIGxldCBpc1ggPSBxdWVyeS51c2VkQXNYRGF0YXNldDtcblxuICAgICAgICAgICAgbGV0IHRhYmxlID0gdGFibGVzLmZpbmQoXG4gICAgICAgICAgICAgICAgKHQpID0+IHQuZmlsZVBhdGggPT09IGZpbGVQYXRoICYmIHQudGFibGVJbmRleCA9PT0gdGFibGVJbmRleFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmICh0YWJsZSkge1xuICAgICAgICAgICAgICAgIGlmIChpc1gpIHtcbiAgICAgICAgICAgICAgICAgICAgdGFibGUueERhdGFzZXQgPSBxdWVyeTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0YWJsZS55RGF0YXNldHMucHVzaChxdWVyeSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsZXQgdGFibGVEYXRhID0gbmV3IFRhYmxlRGF0YShmaWxlUGF0aCwgdGFibGVJbmRleCk7XG4gICAgICAgICAgICAgICAgaWYgKGlzWCkge1xuICAgICAgICAgICAgICAgICAgICB0YWJsZURhdGEueERhdGFzZXQgPSBxdWVyeTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0YWJsZURhdGEueURhdGFzZXRzLnB1c2gocXVlcnkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0YWJsZXMucHVzaCh0YWJsZURhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHRhYmxlcyk7XG5cbiAgICAgICAgaWYgKHRhYmxlRmlsZU5vdEZvdW5kKSB7XG4gICAgICAgICAgICBwcm9jZXNzSW5mby5lcnJvck1lc3NhZ2UgPSBcIkZpbGUgY29udGFpbmluZyB0YWJsZXMgbm90IGZvdW5kXCI7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCB0YWJsZURhdGEgb2YgdGFibGVzKSB7XG4gICAgICAgICAgICAvL2V4dHJhY3QgeERhdGFzZXQgZnJvbSBxdWVyeVxuICAgICAgICAgICAgbGV0IHhEYXRhc2V0UXVlcnkgPSB0YWJsZURhdGEueERhdGFzZXQ7XG4gICAgICAgICAgICBpZiAoIXhEYXRhc2V0UXVlcnkpIHtcbiAgICAgICAgICAgICAgICAvLyBtaXNzaW5nIHhEYXRhc2V0XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgeURhdGFzZXRRdWVyaWVzID0gdGFibGVEYXRhLnlEYXRhc2V0cztcbiAgICAgICAgICAgIGxldCBmaWxlUGF0aCA9IHhEYXRhc2V0UXVlcnkuZ2V0UGFyZW50VGFyZ2V0KCk7XG4gICAgICAgICAgICBsZXQgdGFibGVJbmRleCA9IHhEYXRhc2V0UXVlcnkuZ2V0QWNjZXNzb3IoKTtcblxuICAgICAgICAgICAgLy8gR2V0IHRhYmxlIHRleHRcbiAgICAgICAgICAgIGxldCB0ZXh0VGFibGUgPSBcIlwiO1xuICAgICAgICAgICAgZmlsZVBhdGggPSBmaWxlUGF0aCArIFwiLm1kXCI7XG4gICAgICAgICAgICBsZXQgZmlsZSA9IHRoaXMuYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChcbiAgICAgICAgICAgICAgICBub3JtYWxpemVQYXRoKGZpbGVQYXRoKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChmaWxlICYmIGZpbGUgaW5zdGFuY2VvZiBURmlsZSkge1xuICAgICAgICAgICAgICAgIHByb2Nlc3NJbmZvLmZpbGVBdmFpbGFibGUrKztcbiAgICAgICAgICAgICAgICBsZXQgY29udGVudCA9IGF3YWl0IHRoaXMuYXBwLnZhdWx0LmFkYXB0ZXIucmVhZChmaWxlLnBhdGgpO1xuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGNvbnRlbnQpO1xuXG4gICAgICAgICAgICAgICAgLy8gVGVzdCB0aGlzIGluIFJlZ2V4MTAxXG4gICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIG5vdC1zby1zdHJpY3QgdGFibGUgc2VsZWN0b3JcbiAgICAgICAgICAgICAgICAvLyAoKFxccj9cXG4pezJ9fF4pKFteXFxyXFxuXSpcXHxbXlxcclxcbl0qKFxccj9cXG4pPykrKD89KFxccj9cXG4pezJ9fCQpXG4gICAgICAgICAgICAgICAgbGV0IHN0ck1EVGFibGVSZWdleCA9XG4gICAgICAgICAgICAgICAgICAgIFwiKChcXFxccj9cXFxcbil7Mn18XikoW15cXFxcclxcXFxuXSpcXFxcfFteXFxcXHJcXFxcbl0qKFxcXFxyP1xcXFxuKT8pKyg/PShcXFxccj9cXFxcbil7Mn18JClcIjtcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhzdHJNRFRhYmxlUmVnZXgpO1xuICAgICAgICAgICAgICAgIGxldCBtZFRhYmxlUmVnZXggPSBuZXcgUmVnRXhwKHN0ck1EVGFibGVSZWdleCwgXCJnbVwiKTtcbiAgICAgICAgICAgICAgICBsZXQgbWF0Y2g7XG4gICAgICAgICAgICAgICAgbGV0IGluZFRhYmxlID0gMDtcblxuICAgICAgICAgICAgICAgIHdoaWxlICgobWF0Y2ggPSBtZFRhYmxlUmVnZXguZXhlYyhjb250ZW50KSkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2cobWF0Y2gpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kVGFibGUgPT09IHRhYmxlSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHRUYWJsZSA9IG1hdGNoWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaW5kVGFibGUrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGZpbGUgbm90IGV4aXN0c1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2codGV4dFRhYmxlKTtcblxuICAgICAgICAgICAgbGV0IHRhYmxlTGluZXMgPSB0ZXh0VGFibGUuc3BsaXQoL1xccj9cXG4vKTtcbiAgICAgICAgICAgIHRhYmxlTGluZXMgPSB0YWJsZUxpbmVzLmZpbHRlcigobGluZSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBsaW5lICE9PSBcIlwiO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBsZXQgbnVtQ29sdW1ucyA9IDA7XG4gICAgICAgICAgICBsZXQgbnVtRGF0YVJvd3MgPSAwO1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2codGFibGVMaW5lcyk7XG5cbiAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSBpdCBpcyBhIHZhbGlkIHRhYmxlIGZpcnN0XG4gICAgICAgICAgICBpZiAodGFibGVMaW5lcy5sZW5ndGggPj0gMikge1xuICAgICAgICAgICAgICAgIC8vIE11c3QgaGF2ZSBoZWFkZXIgYW5kIHNlcGFyYXRvciBsaW5lXG4gICAgICAgICAgICAgICAgbGV0IGhlYWRlckxpbmUgPSB0YWJsZUxpbmVzLnNoaWZ0KCkudHJpbSgpO1xuICAgICAgICAgICAgICAgIGhlYWRlckxpbmUgPSBoZWxwZXIudHJpbUJ5Q2hhcihoZWFkZXJMaW5lLCBcInxcIik7XG4gICAgICAgICAgICAgICAgbGV0IGhlYWRlclNwbGl0dGVkID0gaGVhZGVyTGluZS5zcGxpdChcInxcIik7XG4gICAgICAgICAgICAgICAgbnVtQ29sdW1ucyA9IGhlYWRlclNwbGl0dGVkLmxlbmd0aDtcblxuICAgICAgICAgICAgICAgIGxldCBzZXBMaW5lID0gdGFibGVMaW5lcy5zaGlmdCgpLnRyaW0oKTtcbiAgICAgICAgICAgICAgICBzZXBMaW5lID0gaGVscGVyLnRyaW1CeUNoYXIoc2VwTGluZSwgXCJ8XCIpO1xuICAgICAgICAgICAgICAgIGxldCBzcGVwTGluZVNwbGl0dGVkID0gc2VwTGluZS5zcGxpdChcInxcIik7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgY29sIG9mIHNwZXBMaW5lU3BsaXR0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjb2wuaW5jbHVkZXMoXCItXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgLy8gTm90IGEgdmFsaWQgc2VwXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBudW1EYXRhUm93cyA9IHRhYmxlTGluZXMubGVuZ3RoO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobnVtRGF0YVJvd3MgPT0gMCkgY29udGludWU7XG5cbiAgICAgICAgICAgIC8vIGdldCB4IGRhdGFcbiAgICAgICAgICAgIGxldCBjb2x1bW5YRGF0YXNldCA9IHhEYXRhc2V0UXVlcnkuZ2V0QWNjZXNzb3IoMSk7XG4gICAgICAgICAgICBpZiAoY29sdW1uWERhdGFzZXQgPj0gbnVtQ29sdW1ucykgY29udGludWU7XG4gICAgICAgICAgICBsZXQgeFZhbHVlcyA9IFtdO1xuXG4gICAgICAgICAgICBsZXQgaW5kTGluZSA9IDA7XG4gICAgICAgICAgICBmb3IgKGxldCB0YWJsZUxpbmUgb2YgdGFibGVMaW5lcykge1xuICAgICAgICAgICAgICAgIGxldCBkYXRhUm93ID0gaGVscGVyLnRyaW1CeUNoYXIodGFibGVMaW5lLnRyaW0oKSwgXCJ8XCIpO1xuICAgICAgICAgICAgICAgIGxldCBkYXRhUm93U3BsaXR0ZWQgPSBkYXRhUm93LnNwbGl0KFwifFwiKTtcbiAgICAgICAgICAgICAgICBpZiAoY29sdW1uWERhdGFzZXQgPCBkYXRhUm93U3BsaXR0ZWQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkYXRhID0gZGF0YVJvd1NwbGl0dGVkW2NvbHVtblhEYXRhc2V0XS50cmltKCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkYXRlID0gaGVscGVyLnN0clRvRGF0ZShkYXRhLCByZW5kZXJJbmZvLmRhdGVGb3JtYXQpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRlLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgeFZhbHVlcy5wdXNoKGRhdGUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIXByb2Nlc3NJbmZvLm1pbkRhdGUuaXNWYWxpZCgpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIXByb2Nlc3NJbmZvLm1heERhdGUuaXNWYWxpZCgpXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzSW5mby5taW5EYXRlID0gZGF0ZS5jbG9uZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NJbmZvLm1heERhdGUgPSBkYXRlLmNsb25lKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRlIDwgcHJvY2Vzc0luZm8ubWluRGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzSW5mby5taW5EYXRlID0gZGF0ZS5jbG9uZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0ZSA+IHByb2Nlc3NJbmZvLm1heERhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0luZm8ubWF4RGF0ZSA9IGRhdGUuY2xvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB4VmFsdWVzLnB1c2gobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB4VmFsdWVzLnB1c2gobnVsbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGluZExpbmUrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHhWYWx1ZXMpO1xuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgeFZhbHVlcy5ldmVyeSgodikgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdiA9PT0gbnVsbDtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcHJvY2Vzc0luZm8uZXJyb3JNZXNzYWdlID1cbiAgICAgICAgICAgICAgICAgICAgXCJObyB2YWxpZCBkYXRlIGFzIFggdmFsdWUgZm91bmQgaW4gdGFibGVcIjtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHByb2Nlc3NJbmZvLmdvdEFueVZhbGlkWFZhbHVlIHx8PSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBnZXQgeSBkYXRhXG4gICAgICAgICAgICBmb3IgKGxldCB5RGF0YXNldFF1ZXJ5IG9mIHlEYXRhc2V0UXVlcmllcykge1xuICAgICAgICAgICAgICAgIGxldCBjb2x1bW5PZkludGVyZXN0ID0geURhdGFzZXRRdWVyeS5nZXRBY2Nlc3NvcigxKTtcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhgY29sdW1uT2ZJbnRlcmVzdDogJHtjb2x1bW5PZkludGVyZXN0fSwgbnVtQ29sdW1uczogJHtudW1Db2x1bW5zfWApO1xuICAgICAgICAgICAgICAgIGlmIChjb2x1bW5PZkludGVyZXN0ID49IG51bUNvbHVtbnMpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAgICAgbGV0IGluZExpbmUgPSAwO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IHRhYmxlTGluZSBvZiB0YWJsZUxpbmVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkYXRhUm93ID0gaGVscGVyLnRyaW1CeUNoYXIodGFibGVMaW5lLnRyaW0oKSwgXCJ8XCIpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgZGF0YVJvd1NwbGl0dGVkID0gZGF0YVJvdy5zcGxpdChcInxcIik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb2x1bW5PZkludGVyZXN0IDwgZGF0YVJvd1NwbGl0dGVkLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGEgPSBkYXRhUm93U3BsaXR0ZWRbY29sdW1uT2ZJbnRlcmVzdF0udHJpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNwbGl0dGVkID0gZGF0YS5zcGxpdCh5RGF0YXNldFF1ZXJ5LmdldFNlcGFyYXRvcigpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHNwbGl0dGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3BsaXR0ZWQpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNwbGl0dGVkLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXRQYXJzZSA9IGhlbHBlci5wYXJzZUZsb2F0RnJvbUFueShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BsaXR0ZWRbMF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckluZm8udGV4dFZhbHVlTWFwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhyZXRQYXJzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldFBhcnNlLnZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXRQYXJzZS50eXBlID09PSBWYWx1ZVR5cGUuVGltZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeURhdGFzZXRRdWVyeS52YWx1ZVR5cGUgPSBWYWx1ZVR5cGUuVGltZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSByZXRQYXJzZS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kTGluZSA8IHhWYWx1ZXMubGVuZ3RoICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4VmFsdWVzW2luZExpbmVdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0luZm8uZ290QW55VmFsaWRZVmFsdWUgfHw9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsZWN0aW5nLmFkZFRvRGF0YU1hcChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTWFwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBlci5kYXRlVG9TdHIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhWYWx1ZXNbaW5kTGluZV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckluZm8uZGF0ZUZvcm1hdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeURhdGFzZXRRdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BsaXR0ZWQubGVuZ3RoID4geURhdGFzZXRRdWVyeS5nZXRBY2Nlc3NvcigyKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlEYXRhc2V0UXVlcnkuZ2V0QWNjZXNzb3IoMikgPj0gMFxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3BsaXR0ZWRQYXJ0ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BsaXR0ZWRbeURhdGFzZXRRdWVyeS5nZXRBY2Nlc3NvcigyKV0udHJpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHNwbGl0dGVkUGFydCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJldFBhcnNlID0gaGVscGVyLnBhcnNlRmxvYXRGcm9tQW55KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGxpdHRlZFBhcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckluZm8udGV4dFZhbHVlTWFwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhyZXRQYXJzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldFBhcnNlLnZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXRQYXJzZS50eXBlID09PSBWYWx1ZVR5cGUuVGltZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeURhdGFzZXRRdWVyeS52YWx1ZVR5cGUgPSBWYWx1ZVR5cGUuVGltZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHJldFBhcnNlLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRMaW5lIDwgeFZhbHVlcy5sZW5ndGggJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhWYWx1ZXNbaW5kTGluZV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzSW5mby5nb3RBbnlWYWxpZFlWYWx1ZSB8fD0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxlY3RpbmcuYWRkVG9EYXRhTWFwKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFNYXAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscGVyLmRhdGVUb1N0cihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeFZhbHVlc1tpbmRMaW5lXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVySW5mby5kYXRlRm9ybWF0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5RGF0YXNldFF1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaW5kTGluZSsrO1xuICAgICAgICAgICAgICAgIH0gLy8gTG9vcCBvdmVyIHRhYmxlTGluZXNcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldEVkaXRvcigpOiBFZGl0b3Ige1xuICAgICAgICByZXR1cm4gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZVZpZXdPZlR5cGUoTWFya2Rvd25WaWV3KS5lZGl0b3I7XG4gICAgfVxuXG4gICAgYWRkQ29kZUJsb2NrKG91dHB1dFR5cGU6IEdyYXBoVHlwZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBjdXJyZW50VmlldyA9IHRoaXMuYXBwLndvcmtzcGFjZS5hY3RpdmVMZWFmLnZpZXc7XG5cbiAgICAgICAgaWYgKCEoY3VycmVudFZpZXcgaW5zdGFuY2VvZiBNYXJrZG93blZpZXcpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgY29kZWJsb2NrVG9JbnNlcnQgPSBcIlwiO1xuICAgICAgICBzd2l0Y2ggKG91dHB1dFR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgR3JhcGhUeXBlLkxpbmU6XG4gICAgICAgICAgICAgICAgY29kZWJsb2NrVG9JbnNlcnQgPSBgXFxgXFxgXFxgIHRyYWNrZXJcbnNlYXJjaFR5cGU6IHRhZ1xuc2VhcmNoVGFyZ2V0OiB0YWdOYW1lXG5mb2xkZXI6IC9cbnN0YXJ0RGF0ZTpcbmVuZERhdGU6XG5saW5lOlxuICAgIHRpdGxlOiBcIkxpbmUgQ2hhcnRcIlxuICAgIHhBeGlzTGFiZWw6IERhdGVcbiAgICB5QXhpc0xhYmVsOiBWYWx1ZVxuXFxgXFxgXFxgYDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgR3JhcGhUeXBlLkJhcjpcbiAgICAgICAgICAgICAgICBjb2RlYmxvY2tUb0luc2VydCA9IGBcXGBcXGBcXGAgdHJhY2tlclxuc2VhcmNoVHlwZTogdGFnXG5zZWFyY2hUYXJnZXQ6IHRhZ05hbWVcbmZvbGRlcjogL1xuc3RhcnREYXRlOlxuZW5kRGF0ZTpcbmJhcjpcbiAgICB0aXRsZTogXCJCYXIgQ2hhcnRcIlxuICAgIHhBeGlzTGFiZWw6IERhdGVcbiAgICB5QXhpc0xhYmVsOiBWYWx1ZVxuXFxgXFxgXFxgYDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgR3JhcGhUeXBlLlN1bW1hcnk6XG4gICAgICAgICAgICAgICAgY29kZWJsb2NrVG9JbnNlcnQgPSBgXFxgXFxgXFxgIHRyYWNrZXJcbnNlYXJjaFR5cGU6IHRhZ1xuc2VhcmNoVGFyZ2V0OiB0YWdOYW1lXG5mb2xkZXI6IC9cbnN0YXJ0RGF0ZTpcbmVuZERhdGU6XG5zdW1tYXJ5OlxuICAgIHRlbXBsYXRlOiBcIkF2ZXJhZ2UgdmFsdWUgb2YgdGFnTmFtZSBpcyB7e2F2ZXJhZ2UoKX19XCJcbiAgICBzdHlsZTogXCJjb2xvcjp3aGl0ZTtcIlxuXFxgXFxgXFxgYDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29kZWJsb2NrVG9JbnNlcnQgIT09IFwiXCIpIHtcbiAgICAgICAgICAgIGxldCB0ZXh0SW5zZXJ0ZWQgPSB0aGlzLmluc2VydFRvTmV4dExpbmUoY29kZWJsb2NrVG9JbnNlcnQpO1xuICAgICAgICAgICAgaWYgKCF0ZXh0SW5zZXJ0ZWQpIHtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluc2VydFRvTmV4dExpbmUodGV4dDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGxldCBlZGl0b3IgPSB0aGlzLmdldEVkaXRvcigpO1xuXG4gICAgICAgIGlmIChlZGl0b3IpIHtcbiAgICAgICAgICAgIGxldCBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yKCk7XG4gICAgICAgICAgICBsZXQgbGluZU51bWJlciA9IGN1cnNvci5saW5lO1xuICAgICAgICAgICAgbGV0IGxpbmUgPSBlZGl0b3IuZ2V0TGluZShsaW5lTnVtYmVyKTtcblxuICAgICAgICAgICAgY3Vyc29yLmNoID0gbGluZS5sZW5ndGg7XG4gICAgICAgICAgICBlZGl0b3Iuc2V0U2VsZWN0aW9uKGN1cnNvcik7XG4gICAgICAgICAgICBlZGl0b3IucmVwbGFjZVNlbGVjdGlvbihcIlxcblwiICsgdGV4dCk7XG5cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbiJdLCJuYW1lcyI6WyJfX2F3YWl0ZXIiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsIlAiLCJnZW5lcmF0b3IiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImZ1bGZpbGxlZCIsInZhbHVlIiwic3RlcCIsIm5leHQiLCJlIiwicmVqZWN0ZWQiLCJyZXN1bHQiLCJkb25lIiwidGhlbiIsImFwcGx5IiwiYXNjZW5kaW5nIiwiYSIsImIiLCJOYU4iLCJkZXNjZW5kaW5nIiwiYmlzZWN0b3IiLCJmIiwiY29tcGFyZTEiLCJjb21wYXJlMiIsImRlbHRhIiwibGVmdCIsIngiLCJsbyIsImhpIiwibGVuZ3RoIiwibWlkIiwiZCIsInplcm8iLCJjZW50ZXIiLCJpIiwicmlnaHQiLCJTdXBwcmVzc2VkRXJyb3IiLCJiaXNlY3RSaWdodCIsIkludGVybk1hcCIsIk1hcCIsImNvbnN0cnVjdG9yIiwiZW50cmllcyIsImtleSIsImtleW9mIiwic3VwZXIiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0aWVzIiwidGhpcyIsIl9pbnRlcm4iLCJfa2V5Iiwic2V0IiwiZ2V0IiwiaW50ZXJuX2dldCIsImhhcyIsImludGVybl9zZXQiLCJkZWxldGUiLCJpbnRlcm5fZGVsZXRlIiwidmFsdWVPZiIsImFzY2VuZGluZ0RlZmluZWQiLCJlMTAiLCJNYXRoIiwic3FydCIsImU1IiwiZTIiLCJ0aWNrU3BlYyIsInN0YXJ0Iiwic3RvcCIsImNvdW50IiwibWF4IiwicG93ZXIiLCJmbG9vciIsImxvZzEwIiwiZXJyb3IiLCJwb3ciLCJmYWN0b3IiLCJpMSIsImkyIiwiaW5jIiwicm91bmQiLCJ0aWNrSW5jcmVtZW50IiwidGlja1N0ZXAiLCJyZXZlcnNlIiwidmFsdWVzIiwidmFsdWVvZiIsInVuZGVmaW5lZCIsImluZGV4IiwibWluIiwicXVpY2tzZWxlY3QiLCJhcnJheSIsImsiLCJJbmZpbml0eSIsImNvbXBhcmUiLCJUeXBlRXJyb3IiLCJjb21wYXJlRGVmaW5lZCIsIm4iLCJtIiwieiIsImxvZyIsInMiLCJleHAiLCJzZCIsInQiLCJqIiwic3dhcCIsIm1lZGlhbiIsInAiLCJGbG9hdDY0QXJyYXkiLCJmcm9tIiwibnVtYmVycyIsImlzTmFOIiwiaTAiLCJ2YWx1ZTAiLCJzdWJhcnJheSIsInF1YW50aWxlIiwicmFuZ2UiLCJhcmd1bWVudHMiLCJjZWlsIiwiQXJyYXkiLCJzdW0iLCJpZGVudGl0eSQ0IiwidG9wIiwiYm90dG9tIiwiZXBzaWxvbiIsInRyYW5zbGF0ZVgiLCJ0cmFuc2xhdGVZIiwieSIsIm51bWJlciIsInNjYWxlIiwib2Zmc2V0IiwiYmFuZHdpZHRoIiwiZW50ZXJpbmciLCJfX2F4aXMiLCJheGlzIiwib3JpZW50IiwidGlja0FyZ3VtZW50cyIsInRpY2tWYWx1ZXMiLCJ0aWNrRm9ybWF0IiwidGlja1NpemVJbm5lciIsInRpY2tTaXplT3V0ZXIiLCJ0aWNrUGFkZGluZyIsIndpbmRvdyIsImRldmljZVBpeGVsUmF0aW8iLCJ0cmFuc2Zvcm0iLCJjb250ZXh0IiwidGlja3MiLCJkb21haW4iLCJmb3JtYXQiLCJpZGVudGl0eSIsInNwYWNpbmciLCJyYW5nZTAiLCJyYW5nZTEiLCJwb3NpdGlvbiIsImNvcHkiLCJzZWxlY3Rpb24iLCJwYXRoIiwic2VsZWN0QWxsIiwiZGF0YSIsInRpY2siLCJvcmRlciIsInRpY2tFeGl0IiwiZXhpdCIsInRpY2tFbnRlciIsImVudGVyIiwiYXBwZW5kIiwiYXR0ciIsImxpbmUiLCJzZWxlY3QiLCJ0ZXh0IiwibWVyZ2UiLCJpbnNlcnQiLCJ0cmFuc2l0aW9uIiwiaXNGaW5pdGUiLCJnZXRBdHRyaWJ1dGUiLCJwYXJlbnROb2RlIiwicmVtb3ZlIiwiZmlsdGVyIiwiZWFjaCIsIl8iLCJzbGljZSIsInRpY2tTaXplIiwiYXhpc0JvdHRvbSIsImF4aXNMZWZ0Iiwibm9vcCIsImRpc3BhdGNoIiwidGVzdCIsIkVycm9yIiwiRGlzcGF0Y2giLCJ0eXBlIiwibmFtZSIsImMiLCJjYWxsYmFjayIsImNvbmNhdCIsInB1c2giLCJwcm90b3R5cGUiLCJvbiIsInR5cGVuYW1lIiwidHlwZXMiLCJUIiwidHJpbSIsInNwbGl0IiwibWFwIiwiaW5kZXhPZiIsImhhc093blByb3BlcnR5IiwiY2FsbCIsInRoYXQiLCJhcmdzIiwieGh0bWwiLCJuYW1lc3BhY2VzIiwic3ZnIiwieGxpbmsiLCJ4bWwiLCJ4bWxucyIsIm5hbWVzcGFjZSIsInByZWZpeCIsInNwYWNlIiwibG9jYWwiLCJjcmVhdG9ySW5oZXJpdCIsImRvY3VtZW50Iiwib3duZXJEb2N1bWVudCIsInVyaSIsIm5hbWVzcGFjZVVSSSIsImRvY3VtZW50RWxlbWVudCIsImNyZWF0ZUVsZW1lbnQiLCJjcmVhdGVFbGVtZW50TlMiLCJjcmVhdG9yRml4ZWQiLCJmdWxsbmFtZSIsImNyZWF0b3IiLCJub25lIiwic2VsZWN0b3IiLCJxdWVyeVNlbGVjdG9yIiwiZW1wdHkiLCJzZWxlY3RvckFsbCIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJhcnJheUFsbCIsImlzQXJyYXkiLCJtYXRjaGVyIiwibWF0Y2hlcyIsImNoaWxkTWF0Y2hlciIsIm5vZGUiLCJmaW5kIiwiY2hpbGRGaXJzdCIsImZpcnN0RWxlbWVudENoaWxkIiwiY2hpbGRyZW4iLCJzcGFyc2UiLCJ1cGRhdGUiLCJFbnRlck5vZGUiLCJwYXJlbnQiLCJkYXR1bSIsIl9uZXh0IiwiX3BhcmVudCIsIl9fZGF0YV9fIiwiYmluZEluZGV4IiwiZ3JvdXAiLCJncm91cExlbmd0aCIsImRhdGFMZW5ndGgiLCJiaW5kS2V5Iiwia2V5VmFsdWUiLCJub2RlQnlLZXlWYWx1ZSIsImtleVZhbHVlcyIsImFycmF5bGlrZSIsImF0dHJSZW1vdmUiLCJyZW1vdmVBdHRyaWJ1dGUiLCJhdHRyUmVtb3ZlTlMiLCJyZW1vdmVBdHRyaWJ1dGVOUyIsImF0dHJDb25zdGFudCIsInNldEF0dHJpYnV0ZSIsImF0dHJDb25zdGFudE5TIiwic2V0QXR0cmlidXRlTlMiLCJhdHRyRnVuY3Rpb24iLCJ2IiwiYXR0ckZ1bmN0aW9uTlMiLCJkZWZhdWx0VmlldyIsInN0eWxlUmVtb3ZlIiwic3R5bGUiLCJyZW1vdmVQcm9wZXJ0eSIsInN0eWxlQ29uc3RhbnQiLCJwcmlvcml0eSIsInNldFByb3BlcnR5Iiwic3R5bGVGdW5jdGlvbiIsInN0eWxlVmFsdWUiLCJnZXRQcm9wZXJ0eVZhbHVlIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsInByb3BlcnR5UmVtb3ZlIiwicHJvcGVydHlDb25zdGFudCIsInByb3BlcnR5RnVuY3Rpb24iLCJjbGFzc0FycmF5Iiwic3RyaW5nIiwiY2xhc3NMaXN0IiwiQ2xhc3NMaXN0IiwiX25vZGUiLCJfbmFtZXMiLCJjbGFzc2VkQWRkIiwibmFtZXMiLCJsaXN0IiwiYWRkIiwiY2xhc3NlZFJlbW92ZSIsImNsYXNzZWRUcnVlIiwiY2xhc3NlZEZhbHNlIiwiY2xhc3NlZEZ1bmN0aW9uIiwidGV4dFJlbW92ZSIsInRleHRDb250ZW50IiwidGV4dENvbnN0YW50IiwidGV4dEZ1bmN0aW9uIiwiaHRtbFJlbW92ZSIsImlubmVySFRNTCIsImh0bWxDb25zdGFudCIsImh0bWxGdW5jdGlvbiIsInJhaXNlIiwibmV4dFNpYmxpbmciLCJhcHBlbmRDaGlsZCIsImxvd2VyIiwicHJldmlvdXNTaWJsaW5nIiwiaW5zZXJ0QmVmb3JlIiwiZmlyc3RDaGlsZCIsImNvbnN0YW50TnVsbCIsInJlbW92ZUNoaWxkIiwic2VsZWN0aW9uX2Nsb25lU2hhbGxvdyIsImNsb25lIiwiY2xvbmVOb2RlIiwic2VsZWN0aW9uX2Nsb25lRGVlcCIsIm9uUmVtb3ZlIiwiX19vbiIsIm8iLCJyZW1vdmVFdmVudExpc3RlbmVyIiwibGlzdGVuZXIiLCJvcHRpb25zIiwib25BZGQiLCJldmVudCIsImNvbnRleHRMaXN0ZW5lciIsImFkZEV2ZW50TGlzdGVuZXIiLCJkaXNwYXRjaEV2ZW50IiwicGFyYW1zIiwiQ3VzdG9tRXZlbnQiLCJjcmVhdGVFdmVudCIsImluaXRFdmVudCIsImJ1YmJsZXMiLCJjYW5jZWxhYmxlIiwiZGV0YWlsIiwiZGlzcGF0Y2hDb25zdGFudCIsImRpc3BhdGNoRnVuY3Rpb24iLCJjaGlsZCIsImpvaW4iLCJzcGxpY2UiLCJjb250YWlucyIsInJvb3QiLCJTZWxlY3Rpb24iLCJncm91cHMiLCJwYXJlbnRzIiwiX2dyb3VwcyIsIl9wYXJlbnRzIiwiZGVmaW5lIiwiZmFjdG9yeSIsImV4dGVuZCIsImRlZmluaXRpb24iLCJjcmVhdGUiLCJDb2xvciIsInN1Ymdyb3VwcyIsInN1Ym5vZGUiLCJzdWJncm91cCIsInNlbGVjdENoaWxkIiwibWF0Y2giLCJjaGlsZEZpbmQiLCJzZWxlY3RDaGlsZHJlbiIsImNoaWxkcmVuRmlsdGVyIiwiYmluZCIsImNvbnN0YW50IiwiZW50ZXJHcm91cCIsInVwZGF0ZUdyb3VwIiwicHJldmlvdXMiLCJfZW50ZXIiLCJfZXhpdCIsIm9uZW50ZXIiLCJvbnVwZGF0ZSIsIm9uZXhpdCIsImdyb3VwczAiLCJncm91cHMxIiwibTAiLCJtMSIsIm1lcmdlcyIsImdyb3VwMCIsImdyb3VwMSIsImNvbXBhcmVEb2N1bWVudFBvc2l0aW9uIiwic29ydCIsImNvbXBhcmVOb2RlIiwic29ydGdyb3VwcyIsInNvcnRncm91cCIsIm5vZGVzIiwic2l6ZSIsImdldEF0dHJpYnV0ZU5TIiwicHJvcGVydHkiLCJjbGFzc2VkIiwiaHRtbCIsImJlZm9yZSIsImRlZXAiLCJ0eXBlbmFtZXMiLCJwYXJzZVR5cGVuYW1lcyIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiZGFya2VyIiwiYnJpZ2h0ZXIiLCJyZUkiLCJyZU4iLCJyZVAiLCJyZUhleCIsInJlUmdiSW50ZWdlciIsIlJlZ0V4cCIsInJlUmdiUGVyY2VudCIsInJlUmdiYUludGVnZXIiLCJyZVJnYmFQZXJjZW50IiwicmVIc2xQZXJjZW50IiwicmVIc2xhUGVyY2VudCIsIm5hbWVkIiwiYWxpY2VibHVlIiwiYW50aXF1ZXdoaXRlIiwiYXF1YSIsImFxdWFtYXJpbmUiLCJhenVyZSIsImJlaWdlIiwiYmlzcXVlIiwiYmxhY2siLCJibGFuY2hlZGFsbW9uZCIsImJsdWUiLCJibHVldmlvbGV0IiwiYnJvd24iLCJidXJseXdvb2QiLCJjYWRldGJsdWUiLCJjaGFydHJldXNlIiwiY2hvY29sYXRlIiwiY29yYWwiLCJjb3JuZmxvd2VyYmx1ZSIsImNvcm5zaWxrIiwiY3JpbXNvbiIsImN5YW4iLCJkYXJrYmx1ZSIsImRhcmtjeWFuIiwiZGFya2dvbGRlbnJvZCIsImRhcmtncmF5IiwiZGFya2dyZWVuIiwiZGFya2dyZXkiLCJkYXJra2hha2kiLCJkYXJrbWFnZW50YSIsImRhcmtvbGl2ZWdyZWVuIiwiZGFya29yYW5nZSIsImRhcmtvcmNoaWQiLCJkYXJrcmVkIiwiZGFya3NhbG1vbiIsImRhcmtzZWFncmVlbiIsImRhcmtzbGF0ZWJsdWUiLCJkYXJrc2xhdGVncmF5IiwiZGFya3NsYXRlZ3JleSIsImRhcmt0dXJxdW9pc2UiLCJkYXJrdmlvbGV0IiwiZGVlcHBpbmsiLCJkZWVwc2t5Ymx1ZSIsImRpbWdyYXkiLCJkaW1ncmV5IiwiZG9kZ2VyYmx1ZSIsImZpcmVicmljayIsImZsb3JhbHdoaXRlIiwiZm9yZXN0Z3JlZW4iLCJmdWNoc2lhIiwiZ2FpbnNib3JvIiwiZ2hvc3R3aGl0ZSIsImdvbGQiLCJnb2xkZW5yb2QiLCJncmF5IiwiZ3JlZW4iLCJncmVlbnllbGxvdyIsImdyZXkiLCJob25leWRldyIsImhvdHBpbmsiLCJpbmRpYW5yZWQiLCJpbmRpZ28iLCJpdm9yeSIsImtoYWtpIiwibGF2ZW5kZXIiLCJsYXZlbmRlcmJsdXNoIiwibGF3bmdyZWVuIiwibGVtb25jaGlmZm9uIiwibGlnaHRibHVlIiwibGlnaHRjb3JhbCIsImxpZ2h0Y3lhbiIsImxpZ2h0Z29sZGVucm9keWVsbG93IiwibGlnaHRncmF5IiwibGlnaHRncmVlbiIsImxpZ2h0Z3JleSIsImxpZ2h0cGluayIsImxpZ2h0c2FsbW9uIiwibGlnaHRzZWFncmVlbiIsImxpZ2h0c2t5Ymx1ZSIsImxpZ2h0c2xhdGVncmF5IiwibGlnaHRzbGF0ZWdyZXkiLCJsaWdodHN0ZWVsYmx1ZSIsImxpZ2h0eWVsbG93IiwibGltZSIsImxpbWVncmVlbiIsImxpbmVuIiwibWFnZW50YSIsIm1hcm9vbiIsIm1lZGl1bWFxdWFtYXJpbmUiLCJtZWRpdW1ibHVlIiwibWVkaXVtb3JjaGlkIiwibWVkaXVtcHVycGxlIiwibWVkaXVtc2VhZ3JlZW4iLCJtZWRpdW1zbGF0ZWJsdWUiLCJtZWRpdW1zcHJpbmdncmVlbiIsIm1lZGl1bXR1cnF1b2lzZSIsIm1lZGl1bXZpb2xldHJlZCIsIm1pZG5pZ2h0Ymx1ZSIsIm1pbnRjcmVhbSIsIm1pc3R5cm9zZSIsIm1vY2Nhc2luIiwibmF2YWpvd2hpdGUiLCJuYXZ5Iiwib2xkbGFjZSIsIm9saXZlIiwib2xpdmVkcmFiIiwib3JhbmdlIiwib3JhbmdlcmVkIiwib3JjaGlkIiwicGFsZWdvbGRlbnJvZCIsInBhbGVncmVlbiIsInBhbGV0dXJxdW9pc2UiLCJwYWxldmlvbGV0cmVkIiwicGFwYXlhd2hpcCIsInBlYWNocHVmZiIsInBlcnUiLCJwaW5rIiwicGx1bSIsInBvd2RlcmJsdWUiLCJwdXJwbGUiLCJyZWJlY2NhcHVycGxlIiwicmVkIiwicm9zeWJyb3duIiwicm95YWxibHVlIiwic2FkZGxlYnJvd24iLCJzYWxtb24iLCJzYW5keWJyb3duIiwic2VhZ3JlZW4iLCJzZWFzaGVsbCIsInNpZW5uYSIsInNpbHZlciIsInNreWJsdWUiLCJzbGF0ZWJsdWUiLCJzbGF0ZWdyYXkiLCJzbGF0ZWdyZXkiLCJzbm93Iiwic3ByaW5nZ3JlZW4iLCJzdGVlbGJsdWUiLCJ0YW4iLCJ0ZWFsIiwidGhpc3RsZSIsInRvbWF0byIsInR1cnF1b2lzZSIsInZpb2xldCIsIndoZWF0Iiwid2hpdGUiLCJ3aGl0ZXNtb2tlIiwieWVsbG93IiwieWVsbG93Z3JlZW4iLCJjb2xvcl9mb3JtYXRIZXgiLCJyZ2IiLCJmb3JtYXRIZXgiLCJjb2xvcl9mb3JtYXRSZ2IiLCJmb3JtYXRSZ2IiLCJjb2xvciIsImwiLCJ0b0xvd2VyQ2FzZSIsImV4ZWMiLCJwYXJzZUludCIsInJnYm4iLCJSZ2IiLCJyZ2JhIiwiaHNsYSIsInIiLCJnIiwicmdiQ29udmVydCIsIm9wYWNpdHkiLCJyZ2JfZm9ybWF0SGV4IiwiaGV4IiwicmdiX2Zvcm1hdFJnYiIsImNsYW1wYSIsImNsYW1waSIsInRvU3RyaW5nIiwiaCIsIkhzbCIsImhzbENvbnZlcnQiLCJjbGFtcGgiLCJjbGFtcHQiLCJoc2wycmdiIiwibTIiLCJjaGFubmVscyIsImFzc2lnbiIsImRpc3BsYXlhYmxlIiwiZm9ybWF0SGV4OCIsImZvcm1hdEhzbCIsImNsYW1wIiwicmFkaWFucyIsIlBJIiwiZGVncmVlcyIsIlhuIiwiWW4iLCJabiIsInQwIiwidDEiLCJ0MiIsInQzIiwibGFiQ29udmVydCIsIkxhYiIsIkhjbCIsImhjbDJsYWIiLCJyZ2IybHJnYiIsInh5ejJsYWIiLCJsYWIiLCJsYWIyeHl6IiwibHJnYjJyZ2IiLCJjb3MiLCJzaW4iLCJhdGFuMiIsImhjbENvbnZlcnQiLCJjb25zdGFudCQxIiwiZ2FtbWEiLCJub2dhbW1hIiwiZXhwb25lbnRpYWwiLCJsaW5lYXIiLCJpbnRlcnBvbGF0ZVJnYiIsInJnYkdhbW1hIiwiZW5kIiwiY29sb3JSZ2IiLCJzcGxpbmUiLCJyZ2JCYXNpcyIsInYxIiwidjIiLCJ2MCIsInYzIiwiYmFzaXMiLCJjb2xvcnMiLCJudW1iZXJBcnJheSIsImdlbmVyaWNBcnJheSIsIm5iIiwibmEiLCJkYXRlJDEiLCJEYXRlIiwic2V0VGltZSIsImludGVycG9sYXRlTnVtYmVyIiwib2JqZWN0IiwicmVBIiwicmVCIiwic291cmNlIiwiaW50ZXJwb2xhdGVTdHJpbmciLCJhbSIsImJtIiwiYnMiLCJiaSIsImxhc3RJbmRleCIsInEiLCJvbmUiLCJpbnRlcnBvbGF0ZSQxIiwiZGF0ZSIsIkFycmF5QnVmZmVyIiwiaXNWaWV3IiwiRGF0YVZpZXciLCJpc051bWJlckFycmF5IiwiaW50ZXJwb2xhdGVSb3VuZCIsInN2Z05vZGUiLCJyb3RhdGUiLCJza2V3WCIsInNjYWxlWCIsInNjYWxlWSIsImRlY29tcG9zZSIsImF0YW4iLCJpbnRlcnBvbGF0ZVRyYW5zZm9ybSIsInBhcnNlIiwicHhDb21tYSIsInB4UGFyZW4iLCJkZWdQYXJlbiIsInBvcCIsInhhIiwieWEiLCJ4YiIsInliIiwidHJhbnNsYXRlIiwiaW50ZXJwb2xhdGVUcmFuc2Zvcm1Dc3MiLCJET01NYXRyaXgiLCJXZWJLaXRDU1NNYXRyaXgiLCJpc0lkZW50aXR5IiwiaW50ZXJwb2xhdGVUcmFuc2Zvcm1TdmciLCJiYXNlVmFsIiwiY29uc29saWRhdGUiLCJtYXRyaXgiLCJjb2xvckxhYiIsInRhc2tIZWFkIiwidGFza1RhaWwiLCJmcmFtZSIsInRpbWVvdXQiLCJpbnRlcnZhbCIsInBva2VEZWxheSIsImNsb2NrTGFzdCIsImNsb2NrTm93IiwiY2xvY2tTa2V3IiwiY2xvY2siLCJwZXJmb3JtYW5jZSIsIm5vdyIsInNldEZyYW1lIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwic2V0VGltZW91dCIsImNsZWFyTm93IiwiVGltZXIiLCJfY2FsbCIsIl90aW1lIiwidGltZXIiLCJkZWxheSIsInRpbWUiLCJyZXN0YXJ0Iiwid2FrZSIsInRpbWVyRmx1c2giLCJzbGVlcCIsIm5hcCIsInBva2UiLCJjbGVhclRpbWVvdXQiLCJjbGVhckludGVydmFsIiwic2V0SW50ZXJ2YWwiLCJlbGFwc2VkIiwiZW1wdHlPbiIsImVtcHR5VHdlZW4iLCJDUkVBVEVEIiwiU0NIRURVTEVEIiwiU1RBUlRJTkciLCJTVEFSVEVEIiwiUlVOTklORyIsIkVORElORyIsIkVOREVEIiwic2NoZWR1bGUiLCJpZCIsInRpbWluZyIsInNjaGVkdWxlcyIsIl9fdHJhbnNpdGlvbiIsInNlbGYiLCJ0d2VlbiIsInN0YXRlIiwiZHVyYXRpb24iLCJlYXNlIiwiaW5pdCIsInR3ZWVuUmVtb3ZlIiwidHdlZW4wIiwidHdlZW4xIiwidHdlZW5GdW5jdGlvbiIsInR3ZWVuVmFsdWUiLCJfaWQiLCJpbnRlcnBvbGF0ZSIsInZhbHVlMSIsInN0cmluZzAwIiwiaW50ZXJwb2xhdGUwIiwic3RyaW5nMSIsInN0cmluZzAiLCJzdHJpbmcxMCIsImF0dHJUd2Vlbk5TIiwiYXR0ckludGVycG9sYXRlTlMiLCJfdmFsdWUiLCJhdHRyVHdlZW4iLCJhdHRySW50ZXJwb2xhdGUiLCJkZWxheUZ1bmN0aW9uIiwiZGVsYXlDb25zdGFudCIsImR1cmF0aW9uRnVuY3Rpb24iLCJkdXJhdGlvbkNvbnN0YW50IiwiVHJhbnNpdGlvbiIsIl9uYW1lIiwibmV3SWQiLCJzZWxlY3Rpb25fcHJvdG90eXBlIiwiaW5oZXJpdCIsImlkMCIsImlkMSIsIm9uMCIsIm9uMSIsInNpdCIsImV2ZXJ5Iiwib25GdW5jdGlvbiIsInN0eWxlVHdlZW4iLCJzdHlsZU51bGwiLCJsaXN0ZW5lcjAiLCJzdHlsZU1heWJlUmVtb3ZlIiwic3R5bGVJbnRlcnBvbGF0ZSIsInRleHRUd2VlbiIsInRleHRJbnRlcnBvbGF0ZSIsInJlbW92ZUZ1bmN0aW9uIiwiZWFzZUNvbnN0YW50IiwiZWFzZVZhcnlpbmciLCJjYW5jZWwiLCJpbnRlcnJ1cHQiLCJkZWZhdWx0VGltaW5nIiwiYWN0aXZlIiwicGkiLCJ0YXUiLCJ0YXVFcHNpbG9uIiwic3RyaW5ncyIsIlBhdGgiLCJkaWdpdHMiLCJfeDAiLCJfeTAiLCJfeDEiLCJfeTEiLCJfYXBwZW5kIiwiYXBwZW5kUm91bmQiLCJtb3ZlVG8iLCJjbG9zZVBhdGgiLCJsaW5lVG8iLCJxdWFkcmF0aWNDdXJ2ZVRvIiwieDEiLCJ5MSIsImJlemllckN1cnZlVG8iLCJ4MiIsInkyIiwiYXJjVG8iLCJ4MCIsInkwIiwieDIxIiwieTIxIiwieDAxIiwieTAxIiwibDAxXzIiLCJhYnMiLCJ4MjAiLCJ5MjAiLCJsMjFfMiIsImwyMF8yIiwibDIxIiwibDAxIiwiYWNvcyIsInQwMSIsInQyMSIsImFyYyIsImEwIiwiYTEiLCJjY3ciLCJkeCIsImR5IiwiY3ciLCJkYSIsInJlY3QiLCJ3IiwiZm9ybWF0RGVjaW1hbFBhcnRzIiwidG9FeHBvbmVudGlhbCIsImNvZWZmaWNpZW50IiwiZXhwb25lbnQiLCJwcmVmaXhFeHBvbmVudCIsInJlIiwiZm9ybWF0U3BlY2lmaWVyIiwic3BlY2lmaWVyIiwiRm9ybWF0U3BlY2lmaWVyIiwiZmlsbCIsImFsaWduIiwic2lnbiIsInN5bWJvbCIsIndpZHRoIiwiY29tbWEiLCJwcmVjaXNpb24iLCJmb3JtYXRSb3VuZGVkIiwiZm9ybWF0VHlwZXMiLCJ0b0ZpeGVkIiwidG9Mb2NhbGVTdHJpbmciLCJyZXBsYWNlIiwidG9QcmVjaXNpb24iLCJYIiwidG9VcHBlckNhc2UiLCJpZGVudGl0eSQyIiwibG9jYWxlIiwiZm9ybWF0UHJlZml4IiwicHJlZml4ZXMiLCJmb3JtYXRMb2NhbGUkMSIsImdyb3VwaW5nIiwidGhvdXNhbmRzIiwiTnVtYmVyIiwic3Vic3RyaW5nIiwiY3VycmVuY3lQcmVmaXgiLCJjdXJyZW5jeSIsImN1cnJlbmN5U3VmZml4IiwiZGVjaW1hbCIsIm51bWVyYWxzIiwiZm9ybWF0TnVtZXJhbHMiLCJTdHJpbmciLCJwZXJjZW50IiwibWludXMiLCJuYW4iLCJuZXdGb3JtYXQiLCJzdWZmaXgiLCJmb3JtYXRUeXBlIiwibWF5YmVTdWZmaXgiLCJ2YWx1ZVByZWZpeCIsInZhbHVlU3VmZml4IiwidmFsdWVOZWdhdGl2ZSIsIm91dCIsImZvcm1hdFRyaW0iLCJjaGFyQ29kZUF0IiwicGFkZGluZyIsImluaXRSYW5nZSIsImZvcm1hdExvY2FsZSIsImltcGxpY2l0Iiwib3JkaW5hbCIsInVua25vd24iLCJ1bml0Iiwibm9ybWFsaXplIiwiYmltYXAiLCJkMCIsImQxIiwicjAiLCJyMSIsInBvbHltYXAiLCJiaXNlY3QiLCJ0YXJnZXQiLCJ0cmFuc2Zvcm1lciIsInVudHJhbnNmb3JtIiwicGllY2V3aXNlIiwib3V0cHV0IiwiaW5wdXQiLCJpbnRlcnBvbGF0ZVZhbHVlIiwicmVzY2FsZSIsImludmVydCIsInJhbmdlUm91bmQiLCJ1IiwiY29udGludW91cyIsInByZWNpc2lvblByZWZpeCIsInByZWNpc2lvblJvdW5kIiwicHJlY2lzaW9uRml4ZWQiLCJsaW5lYXJpc2giLCJuaWNlIiwicHJlc3RlcCIsIm1heEl0ZXIiLCJ0aW1lSW50ZXJ2YWwiLCJmbG9vcmkiLCJvZmZzZXRpIiwiZmllbGQiLCJtaWxsaXNlY29uZCIsImR1cmF0aW9uU2Vjb25kIiwiZHVyYXRpb25NaW51dGUiLCJkdXJhdGlvbkhvdXIiLCJkdXJhdGlvbkRheSIsImR1cmF0aW9uV2VlayIsImR1cmF0aW9uTW9udGgiLCJkdXJhdGlvblllYXIiLCJzZWNvbmQiLCJnZXRNaWxsaXNlY29uZHMiLCJnZXRVVENTZWNvbmRzIiwidGltZU1pbnV0ZSIsImdldFNlY29uZHMiLCJnZXRNaW51dGVzIiwidXRjTWludXRlIiwic2V0VVRDU2Vjb25kcyIsImdldFVUQ01pbnV0ZXMiLCJ0aW1lSG91ciIsImdldEhvdXJzIiwidXRjSG91ciIsInNldFVUQ01pbnV0ZXMiLCJnZXRVVENIb3VycyIsInRpbWVEYXkiLCJzZXRIb3VycyIsInNldERhdGUiLCJnZXREYXRlIiwiZ2V0VGltZXpvbmVPZmZzZXQiLCJ1dGNEYXkiLCJzZXRVVENIb3VycyIsInNldFVUQ0RhdGUiLCJnZXRVVENEYXRlIiwidW5peERheSIsInRpbWVXZWVrZGF5IiwiZ2V0RGF5IiwidGltZVN1bmRheSIsInRpbWVNb25kYXkiLCJ0aW1lVHVlc2RheSIsInRpbWVXZWRuZXNkYXkiLCJ0aW1lVGh1cnNkYXkiLCJ0aW1lRnJpZGF5IiwidGltZVNhdHVyZGF5IiwidXRjV2Vla2RheSIsImdldFVUQ0RheSIsInV0Y1N1bmRheSIsInV0Y01vbmRheSIsInV0Y1R1ZXNkYXkiLCJ1dGNXZWRuZXNkYXkiLCJ1dGNUaHVyc2RheSIsInV0Y0ZyaWRheSIsInV0Y1NhdHVyZGF5IiwidGltZU1vbnRoIiwic2V0TW9udGgiLCJnZXRNb250aCIsImdldEZ1bGxZZWFyIiwidXRjTW9udGgiLCJzZXRVVENNb250aCIsImdldFVUQ01vbnRoIiwiZ2V0VVRDRnVsbFllYXIiLCJ0aW1lWWVhciIsInNldEZ1bGxZZWFyIiwidXRjWWVhciIsInNldFVUQ0Z1bGxZZWFyIiwidGltZVRpY2tzIiwidGltZVRpY2tJbnRlcnZhbCIsInllYXIiLCJtb250aCIsIndlZWsiLCJkYXkiLCJob3VyIiwibWludXRlIiwidGlja0ludGVydmFscyIsInRpY2tJbnRlcnZhbCIsInRpY2tlciIsImxvY2FsRGF0ZSIsIkgiLCJNIiwiUyIsIkwiLCJ1dGNEYXRlIiwiVVRDIiwibmV3RGF0ZSIsInRpbWVGb3JtYXQiLCJwYWRzIiwibnVtYmVyUmUiLCJwZXJjZW50UmUiLCJyZXF1b3RlUmUiLCJwYWQiLCJyZXF1b3RlIiwiZm9ybWF0UmUiLCJmb3JtYXRMb29rdXAiLCJwYXJzZVdlZWtkYXlOdW1iZXJTdW5kYXkiLCJwYXJzZVdlZWtkYXlOdW1iZXJNb25kYXkiLCJwYXJzZVdlZWtOdW1iZXJTdW5kYXkiLCJVIiwicGFyc2VXZWVrTnVtYmVySVNPIiwiViIsInBhcnNlV2Vla051bWJlck1vbmRheSIsIlciLCJwYXJzZUZ1bGxZZWFyIiwicGFyc2VZZWFyIiwicGFyc2Vab25lIiwiWiIsInBhcnNlUXVhcnRlciIsInBhcnNlTW9udGhOdW1iZXIiLCJwYXJzZURheU9mTW9udGgiLCJwYXJzZURheU9mWWVhciIsInBhcnNlSG91cjI0IiwicGFyc2VNaW51dGVzIiwicGFyc2VTZWNvbmRzIiwicGFyc2VNaWxsaXNlY29uZHMiLCJwYXJzZU1pY3Jvc2Vjb25kcyIsInBhcnNlTGl0ZXJhbFBlcmNlbnQiLCJwYXJzZVVuaXhUaW1lc3RhbXAiLCJRIiwicGFyc2VVbml4VGltZXN0YW1wU2Vjb25kcyIsImZvcm1hdERheU9mTW9udGgiLCJmb3JtYXRIb3VyMjQiLCJmb3JtYXRIb3VyMTIiLCJmb3JtYXREYXlPZlllYXIiLCJmb3JtYXRNaWxsaXNlY29uZHMiLCJmb3JtYXRNaWNyb3NlY29uZHMiLCJmb3JtYXRNb250aE51bWJlciIsImZvcm1hdE1pbnV0ZXMiLCJmb3JtYXRTZWNvbmRzIiwiZm9ybWF0V2Vla2RheU51bWJlck1vbmRheSIsImZvcm1hdFdlZWtOdW1iZXJTdW5kYXkiLCJkSVNPIiwiZm9ybWF0V2Vla051bWJlcklTTyIsImZvcm1hdFdlZWtkYXlOdW1iZXJTdW5kYXkiLCJmb3JtYXRXZWVrTnVtYmVyTW9uZGF5IiwiZm9ybWF0WWVhciIsImZvcm1hdFllYXJJU08iLCJmb3JtYXRGdWxsWWVhciIsImZvcm1hdEZ1bGxZZWFySVNPIiwiZm9ybWF0Wm9uZSIsImZvcm1hdFVUQ0RheU9mTW9udGgiLCJmb3JtYXRVVENIb3VyMjQiLCJmb3JtYXRVVENIb3VyMTIiLCJmb3JtYXRVVENEYXlPZlllYXIiLCJmb3JtYXRVVENNaWxsaXNlY29uZHMiLCJnZXRVVENNaWxsaXNlY29uZHMiLCJmb3JtYXRVVENNaWNyb3NlY29uZHMiLCJmb3JtYXRVVENNb250aE51bWJlciIsImZvcm1hdFVUQ01pbnV0ZXMiLCJmb3JtYXRVVENTZWNvbmRzIiwiZm9ybWF0VVRDV2Vla2RheU51bWJlck1vbmRheSIsImRvdyIsImZvcm1hdFVUQ1dlZWtOdW1iZXJTdW5kYXkiLCJVVENkSVNPIiwiZm9ybWF0VVRDV2Vla051bWJlcklTTyIsImZvcm1hdFVUQ1dlZWtkYXlOdW1iZXJTdW5kYXkiLCJmb3JtYXRVVENXZWVrTnVtYmVyTW9uZGF5IiwiZm9ybWF0VVRDWWVhciIsImZvcm1hdFVUQ1llYXJJU08iLCJmb3JtYXRVVENGdWxsWWVhciIsImZvcm1hdFVUQ0Z1bGxZZWFySVNPIiwiZm9ybWF0VVRDWm9uZSIsImZvcm1hdExpdGVyYWxQZXJjZW50IiwiZm9ybWF0VW5peFRpbWVzdGFtcCIsImZvcm1hdFVuaXhUaW1lc3RhbXBTZWNvbmRzIiwiY2FsZW5kYXIiLCJmb3JtYXRNaWxsaXNlY29uZCIsImZvcm1hdFNlY29uZCIsImZvcm1hdE1pbnV0ZSIsImZvcm1hdEhvdXIiLCJmb3JtYXREYXkiLCJmb3JtYXRXZWVrIiwiZm9ybWF0TW9udGgiLCJ0aW1lV2VlayIsInRpbWVTZWNvbmQiLCJsb2NhbGVfZGF0ZVRpbWUiLCJkYXRlVGltZSIsImxvY2FsZV9kYXRlIiwibG9jYWxlX3RpbWUiLCJsb2NhbGVfcGVyaW9kcyIsInBlcmlvZHMiLCJsb2NhbGVfd2Vla2RheXMiLCJkYXlzIiwibG9jYWxlX3Nob3J0V2Vla2RheXMiLCJzaG9ydERheXMiLCJsb2NhbGVfbW9udGhzIiwibW9udGhzIiwibG9jYWxlX3Nob3J0TW9udGhzIiwic2hvcnRNb250aHMiLCJwZXJpb2RSZSIsInBlcmlvZExvb2t1cCIsIndlZWtkYXlSZSIsIndlZWtkYXlMb29rdXAiLCJzaG9ydFdlZWtkYXlSZSIsInNob3J0V2Vla2RheUxvb2t1cCIsIm1vbnRoUmUiLCJtb250aExvb2t1cCIsInNob3J0TW9udGhSZSIsInNob3J0TW9udGhMb29rdXAiLCJmb3JtYXRzIiwiQSIsIkIiLCJHIiwiSSIsIlkiLCJ1dGNGb3JtYXRzIiwicGFyc2VzIiwicGFyc2VTcGVjaWZpZXIiLCJjaGFyQXQiLCJuZXdQYXJzZSIsInV0Y0Zvcm1hdCIsInV0Y1BhcnNlIiwiZGVmYXVsdExvY2FsZSIsInNjaGVtZSIsImludGVycG9sYXRlUmdiQmFzaXMiLCJyYW1wIiwiaGFsZlBpIiwiYXNpbiIsIndpdGhQYXRoIiwic2hhcGUiLCJSYW5nZUVycm9yIiwiYXJjSW5uZXJSYWRpdXMiLCJpbm5lclJhZGl1cyIsImFyY091dGVyUmFkaXVzIiwib3V0ZXJSYWRpdXMiLCJhcmNTdGFydEFuZ2xlIiwic3RhcnRBbmdsZSIsImFyY0VuZEFuZ2xlIiwiZW5kQW5nbGUiLCJhcmNQYWRBbmdsZSIsInBhZEFuZ2xlIiwiY29ybmVyVGFuZ2VudHMiLCJyYyIsIm94Iiwib3kiLCJ4MTEiLCJ5MTEiLCJ4MTAiLCJ5MTAiLCJ4MDAiLCJ5MDAiLCJkMiIsIkQiLCJjeDAiLCJjeTAiLCJjeDEiLCJjeTEiLCJkeDAiLCJkeTAiLCJkeDEiLCJkeTEiLCJjeCIsImN5IiwiY29ybmVyUmFkaXVzIiwicGFkUmFkaXVzIiwiYnVmZmVyIiwiYTAxIiwiYTExIiwiYTAwIiwiYTEwIiwiZGEwIiwiZGExIiwiYXAiLCJycCIsInJjMCIsInJjMSIsInAwIiwicDEiLCJvYyIsIngzIiwieTMiLCJ4MzIiLCJ5MzIiLCJpbnRlcnNlY3QiLCJheCIsImF5IiwiYngiLCJieSIsImtjIiwibGMiLCJjZW50cm9pZCIsIkxpbmVhciIsIl9jb250ZXh0IiwiY3VydmVMaW5lYXIiLCJUcmFuc2Zvcm0iLCJTZWFyY2hUeXBlIiwiR3JhcGhUeXBlIiwiVmFsdWVUeXBlIiwiYXJlYVN0YXJ0IiwiX2xpbmUiLCJhcmVhRW5kIiwibGluZVN0YXJ0IiwiX3BvaW50IiwibGluZUVuZCIsInBvaW50IiwiYXBwbHlYIiwiYXBwbHlZIiwibG9jYXRpb24iLCJpbnZlcnRYIiwiaW52ZXJ0WSIsInJlc2NhbGVYIiwicmVzY2FsZVkiLCJEYXRhUG9pbnQiLCJRdWVyeSIsInNlYXJjaFR5cGUiLCJzZWFyY2hUYXJnZXQiLCJzZXBhcmF0b3IiLCJhY2Nlc3NvciIsImFjY2Vzc29yMSIsImFjY2Vzc29yMiIsInZhbHVlVHlwZSIsInVzZWRBc1hEYXRhc2V0IiwibnVtVGFyZ2V0cyIsIlRhYmxlIiwicmVnZXgiLCJwYXJzZUZsb2F0IiwiaXNOdW1iZXIiLCJwYXJlbnRUYXJnZXQiLCJlcXVhbFRvIiwib3RoZXIiLCJnZXRUeXBlIiwiZ2V0VGFyZ2V0IiwiZ2V0UGFyZW50VGFyZ2V0IiwiZ2V0SWQiLCJnZXRBY2Nlc3NvciIsInNldFNlcGFyYXRvciIsInNlcCIsImdldFNlcGFyYXRvciIsImlzRm9yRnJvbnRtYXR0ZXJUYWdzIiwiYWRkTnVtVGFyZ2V0cyIsIm51bSIsImdldE51bVRhcmdldHMiLCJEYXRhc2V0IiwicXVlcnkiLCJjdXJyZW50SW5kZXgiLCJ5TWluIiwieU1heCIsInN0YXJ0RGF0ZSIsImVuZERhdGUiLCJsaW5lSW5mbyIsImJhckluZm8iLCJpc1RtcERhdGFzZXQiLCJpbmQiLCJnZXREYXRlcyIsImNsb25lVG9UbXBEYXRhc2V0IiwidG1wRGF0YXNldCIsImdldE5hbWUiLCJzZXROYW1lIiwic2V0SWQiLCJnZXRWYWx1ZSIsImRheVNoaWZ0IiwiZ2V0SW5kZXhPZkRhdGUiLCJzZXRWYWx1ZSIsInJlY2FsY3VsYXRlTWluTWF4IiwiZ2V0WU1pbiIsImdldFlNYXgiLCJnZXRTdGFydERhdGUiLCJnZXRFbmREYXRlIiwic2hpZnQiLCJzaGlmdEFtb3VudCIsImRvTGFyZ2VydGhhbiIsImFueVNoaWZ0ZWQiLCJzZXRQZW5hbHR5IiwicGVuYWx0eSIsImdldFF1ZXJ5IiwiYWNjdW11bGF0ZVZhbHVlcyIsImFjY3VtVmFsdWUiLCJnZXRWYWx1ZXMiLCJnZXRMZW5ndGgiLCJnZXRMZW5ndGhOb3ROdWxsIiwiY291bnROb3ROdWxsIiwiRGF0YXNldHMiLCJkYXRlcyIsImRhdGFzZXRzIiwiZGF0ZUZvcm1hdCIsImNyZWF0aW9uRGF0YSIsImN1ckRhdGUiLCJtb21lbnQiLCJjcmVhdGVEYXRhc2V0IiwicmVuZGVySW5mbyIsImRhdGFzZXQiLCJkYXRhc2V0TmFtZSIsImdldERhdGFzZXRCeVF1ZXJ5IiwiZ2V0RGF0YXNldEJ5SWQiLCJnZXRYRGF0YXNldElkcyIsImlkcyIsImluY2x1ZGVzIiwiZ2V0TmFtZXMiLCJSZW5kZXJJbmZvIiwicXVlcmllcyIsInhEYXRhc2V0IiwiZm9sZGVyIiwiZmlsZSIsInNwZWNpZmllZEZpbGVzT25seSIsImZpbGVDb250YWluc0xpbmtlZEZpbGVzIiwiZmlsZU11bHRpcGxpZXJBZnRlckxpbmsiLCJkYXRlRm9ybWF0UHJlZml4IiwiZGF0ZUZvcm1hdFN1ZmZpeCIsImNvbnN0VmFsdWUiLCJpZ25vcmVBdHRhY2hlZFZhbHVlIiwiaWdub3JlWmVyb1ZhbHVlIiwiYWNjdW0iLCJ2YWx1ZVNoaWZ0Iiwic2hpZnRPbmx5VmFsdWVMYXJnZXJUaGFuIiwidGV4dFZhbHVlTWFwIiwiZGF0YUFyZWFTaXplIiwiU2l6ZSIsImFzcGVjdFJhdGlvIiwiQXNwZWN0UmF0aW8iLCJtYXJnaW4iLCJNYXJnaW4iLCJmaXhlZFNjYWxlIiwiZml0UGFuZWxXaWR0aCIsImJhciIsInBpZSIsInN1bW1hcnkiLCJoZWF0bWFwIiwiYnVsbGV0IiwiY3VzdG9tRGF0YXNldCIsImdldFF1ZXJ5QnlJZCIsIkN1c3RvbURhdGFzZXRJbmZvIiwieERhdGEiLCJ5RGF0YSIsIkNvbW1vbkNoYXJ0SW5mbyIsInRpdGxlIiwieEF4aXNMYWJlbCIsInhBeGlzQ29sb3IiLCJ4QXhpc0xhYmVsQ29sb3IiLCJ5QXhpc0xhYmVsIiwieUF4aXNDb2xvciIsInlBeGlzTGFiZWxDb2xvciIsInlBeGlzVW5pdCIsInhBeGlzVGlja0ludGVydmFsIiwieUF4aXNUaWNrSW50ZXJ2YWwiLCJ4QXhpc1RpY2tMYWJlbEZvcm1hdCIsInlBeGlzVGlja0xhYmVsRm9ybWF0IiwicmV2ZXJzZVlBeGlzIiwiYWxsb3dJbnNwZWN0RGF0YSIsInNob3dMZWdlbmQiLCJsZWdlbmRQb3NpdGlvbiIsImxlZ2VuZE9yaWVudGF0aW9uIiwibGVnZW5kQmdDb2xvciIsImxlZ2VuZEJvcmRlckNvbG9yIiwiR2V0R3JhcGhUeXBlIiwiVW5rbm93biIsIkxpbmVJbmZvIiwibGluZUNvbG9yIiwibGluZVdpZHRoIiwic2hvd0xpbmUiLCJzaG93UG9pbnQiLCJwb2ludENvbG9yIiwicG9pbnRCb3JkZXJDb2xvciIsInBvaW50Qm9yZGVyV2lkdGgiLCJwb2ludFNpemUiLCJmaWxsR2FwIiwieUF4aXNMb2NhdGlvbiIsIkxpbmUiLCJCYXJJbmZvIiwiYmFyQ29sb3IiLCJCYXIiLCJQaWVJbmZvIiwiZGF0YUNvbG9yIiwiZGF0YU5hbWUiLCJsYWJlbCIsImhpZGVMYWJlbExlc3NUaGFuIiwiZXh0TGFiZWwiLCJzaG93RXh0TGFiZWxPbmx5SWZOb0xhYmVsIiwicmF0aW9Jbm5lclJhZGl1cyIsIlBpZSIsIlN1bW1hcnlJbmZvIiwidGVtcGxhdGUiLCJTdW1tYXJ5IiwiTW9udGhJbmZvIiwibW9kZSIsInN0YXJ0V2Vla09uIiwidGhyZXNob2xkIiwiZGltTm90SW5Nb250aCIsImluaXRNb250aCIsInNob3dTZWxlY3RlZFZhbHVlIiwiaGVhZGVyWWVhckNvbG9yIiwiaGVhZGVyTW9udGhDb2xvciIsImRpdmlkaW5nTGluZUNvbG9yIiwic2hvd0NpcmNsZSIsInNob3dTdHJlYWsiLCJzaG93VG9kYXlSaW5nIiwic2hvd1NlbGVjdGVkUmluZyIsImNpcmNsZUNvbG9yIiwiY2lyY2xlQ29sb3JCeVZhbHVlIiwidG9kYXlSaW5nQ29sb3IiLCJzZWxlY3RlZFJpbmdDb2xvciIsInNob3dBbm5vdGF0aW9uIiwiYW5ub3RhdGlvbiIsInNob3dBbm5vdGF0aW9uT2ZBbGxUYXJnZXRzIiwic2VsZWN0ZWREYXRlIiwic2VsZWN0ZWREYXRhc2V0IiwiTW9udGgiLCJIZWF0bWFwSW5mbyIsIm9yaWVudGF0aW9uIiwiSGVhdG1hcCIsIkJ1bGxldEluZm8iLCJ2YWx1ZVVuaXQiLCJ2YWx1ZUNvbG9yIiwicmFuZ2VDb2xvciIsInNob3dNYXJrZXIiLCJtYXJrZXJWYWx1ZSIsIm1hcmtlckNvbG9yIiwiQnVsbGV0IiwiaGVpZ2h0IiwicmVjYWxjdWxhdGVTaXplIiwiVGFibGVEYXRhIiwiZmlsZVBhdGgiLCJ0YWJsZUluZGV4IiwieURhdGFzZXRzIiwiQ29sbGVjdGluZ1Byb2Nlc3NJbmZvIiwiZmlsZVRvdGFsIiwiZmlsZUF2YWlsYWJsZSIsImZpbGVPdXRPZkRhdGVSYW5nZSIsImZpbGVOb3RJbkZvcm1hdCIsImVycm9yTWVzc2FnZSIsIm1pbkRhdGUiLCJtYXhEYXRlIiwiZ290QW55VmFsaWRYVmFsdWUiLCJnb3RBbnlWYWxpZFlWYWx1ZSIsImZtdEhvdXJzIiwiZm10TWlucyIsImZtdFNlY3MiLCJmbXRIb3VyIiwiZm10TWluIiwiZm10U2VjIiwiZm10IiwibWFrZVRpbWVGb3JtYXQiLCJnZXREYXRlU3RyaW5nRnJvbUlucHV0U3RyaW5nIiwiaW5wdXRTdHJpbmciLCJkYXRlU3RyaW5nIiwic3RhcnRzV2l0aCIsInN0clRvRGF0ZSIsInN0ckRhdGUiLCJlbmRzV2l0aCIsIklTT184NjAxIiwic3RhcnRPZiIsImV4dHJhY3RWYWx1ZUZyb21EdXJhdGlvblN0cmluZyIsInN0ckR1cmF0aW9uIiwidW5pdHMiLCJyZW1vdmVQYXR0ZXJuIiwic3RyUmVnZXgiLCJwYXJzZUR1cmF0aW9uU3RyaW5nIiwiaGFzVmFsdWUiLCJuZWdhdGl2ZVZhbHVlIiwieWVhclZhbHVlIiwibW9udGhWYWx1ZSIsIndlZWtWYWx1ZSIsImRheVZhbHVlIiwiaG91clZhbHVlIiwibWludXRlVmFsdWUiLCJzZWNvbmRWYWx1ZSIsImdldERhdGVCeUR1cmF0aW9uVG9Ub2RheSIsInJlbERhdGVTdHJpbmciLCJpc0R1cmF0aW9uIiwiZ2V0RGF0ZVRvZGF5IiwiaXNWYWxpZCIsImRhdGVUb1N0ciIsImdldERhdGVGcm9tVW5peFRpbWUiLCJ1bml4VGltZSIsImRlZXBWYWx1ZSIsIm9iaiIsInN0ciIsInRyaW1CeUNoYXIiLCJjaGFyIiwiYXJyIiwiZmlyc3QiLCJmaW5kSW5kZXgiLCJsYXN0IiwicmVwbGFjZUltZ1RhZ0J5QWx0IiwiZW1vamkiLCJwYXJzZUZsb2F0RnJvbUFueSIsInRvUGFyc2UiLCJ0aW1lVmFsdWUiLCJkaWZmIiwiVGltZSIsImtleXMiLCJzdHJSZXBsYWNlZFZhbHVlIiwibWVhc3VyZVRleHRTaXplIiwic3R5bGVDbGFzcyIsImNvbnRhaW5lciIsImQzLnNlbGVjdCIsInRleHRCbG9jayIsImdldEJCb3giLCJleHBhbmRBcmVhIiwiYXJlYSIsImFkZFciLCJhZGRIIiwibmV3V2lkdGgiLCJuZXdIZWlnaHQiLCJtb3ZlQXJlYSIsInNoaWZ0WCIsInNoaWZ0WSIsInRyYW5zIiwiY2xlYW5UZXh0IiwiSnNlcCIsInZlcnNpb24iLCJhZGRVbmFyeU9wIiwib3BfbmFtZSIsIm1heF91bm9wX2xlbiIsInVuYXJ5X29wcyIsImFkZEJpbmFyeU9wIiwicHJlY2VkZW5jZSIsImlzUmlnaHRBc3NvY2lhdGl2ZSIsIm1heF9iaW5vcF9sZW4iLCJiaW5hcnlfb3BzIiwicmlnaHRfYXNzb2NpYXRpdmUiLCJhZGRJZGVudGlmaWVyQ2hhciIsImFkZGl0aW9uYWxfaWRlbnRpZmllcl9jaGFycyIsImFkZExpdGVyYWwiLCJsaXRlcmFsX25hbWUiLCJsaXRlcmFsX3ZhbHVlIiwibGl0ZXJhbHMiLCJyZW1vdmVVbmFyeU9wIiwiZ2V0TWF4S2V5TGVuIiwicmVtb3ZlQWxsVW5hcnlPcHMiLCJyZW1vdmVJZGVudGlmaWVyQ2hhciIsInJlbW92ZUJpbmFyeU9wIiwicmVtb3ZlQWxsQmluYXJ5T3BzIiwicmVtb3ZlTGl0ZXJhbCIsInJlbW92ZUFsbExpdGVyYWxzIiwiZXhwciIsImNvZGUiLCJpc0RlY2ltYWxEaWdpdCIsImNoIiwiYmluYXJ5UHJlY2VkZW5jZSIsIm9wX3ZhbCIsImlzSWRlbnRpZmllclN0YXJ0IiwiZnJvbUNoYXJDb2RlIiwiaXNJZGVudGlmaWVyUGFydCIsInRocm93RXJyb3IiLCJtZXNzYWdlIiwiZGVzY3JpcHRpb24iLCJydW5Ib29rIiwiaG9va3MiLCJlbnYiLCJydW4iLCJzZWFyY2hIb29rIiwiZ29iYmxlU3BhY2VzIiwiU1BBQ0VfQ09ERSIsIlRBQl9DT0RFIiwiTEZfQ09ERSIsIkNSX0NPREUiLCJnb2JibGVFeHByZXNzaW9ucyIsIkNPTVBPVU5EIiwiYm9keSIsInVudGlsSUNvZGUiLCJjaF9pIiwiU0VNQ09MX0NPREUiLCJDT01NQV9DT0RFIiwiZ29iYmxlRXhwcmVzc2lvbiIsImdvYmJsZUJpbmFyeUV4cHJlc3Npb24iLCJnb2JibGVCaW5hcnlPcCIsInRvX2NoZWNrIiwic3Vic3RyIiwidGNfbGVuIiwiYmlvcCIsInByZWMiLCJzdGFjayIsImJpb3BfaW5mbyIsImN1cl9iaW9wIiwiZ29iYmxlVG9rZW4iLCJyaWdodF9hIiwiY29tcGFyZVByZXYiLCJwcmV2IiwiQklOQVJZX0VYUCIsIm9wZXJhdG9yIiwiUEVSSU9EX0NPREUiLCJnb2JibGVOdW1lcmljTGl0ZXJhbCIsIlNRVU9URV9DT0RFIiwiRFFVT1RFX0NPREUiLCJnb2JibGVTdHJpbmdMaXRlcmFsIiwiT0JSQUNLX0NPREUiLCJnb2JibGVBcnJheSIsImFyZ3VtZW50IiwiVU5BUllfRVhQIiwiZ29iYmxlSWRlbnRpZmllciIsIkxJVEVSQUwiLCJyYXciLCJ0aGlzX3N0ciIsIlRISVNfRVhQIiwiT1BBUkVOX0NPREUiLCJnb2JibGVHcm91cCIsImdvYmJsZVRva2VuUHJvcGVydHkiLCJRVU1BUktfQ09ERSIsIm9wdGlvbmFsIiwiTUVNQkVSX0VYUCIsImNvbXB1dGVkIiwiQ0JSQUNLX0NPREUiLCJDQUxMX0VYUCIsImdvYmJsZUFyZ3VtZW50cyIsIkNQQVJFTl9DT0RFIiwiY2FsbGVlIiwiY2hDb2RlIiwic3RhcnRJbmRleCIsInF1b3RlIiwiY2xvc2VkIiwiSURFTlRJRklFUiIsInRlcm1pbmF0aW9uIiwic2VwYXJhdG9yX2NvdW50IiwiYXJnIiwiU0VRVUVOQ0VfRVhQIiwiZXhwcmVzc2lvbnMiLCJBUlJBWV9FWFAiLCJlbGVtZW50cyIsImZvckVhY2giLCJwbHVnaW5zIiwianNlcCIsInJlZ2lzdGVyZWQiLCJyZWdpc3RlciIsInBsdWdpbiIsIkNPTE9OX0NPREUiLCJTZXQiLCJ0cnVlIiwiZmFsc2UiLCJudWxsIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsInRlcm5hcnkiLCJjb25zZXF1ZW50IiwiYWx0ZXJuYXRlIiwibmV3VGVzdCIsImNoZWNrRGl2aXNvciIsImRpdmlzb3IiLCJzb21lIiwibm90X3N0cmluZyIsIm5vdF9ib29sIiwibm90X3R5cGUiLCJub3RfcHJpbWl0aXZlIiwibnVtZXJpY19hcmciLCJqc29uIiwibm90X2pzb24iLCJtb2R1bG8iLCJwbGFjZWhvbGRlciIsImtleV9hY2Nlc3MiLCJpbmRleF9hY2Nlc3MiLCJzcHJpbnRmIiwicGFyc2VfdHJlZSIsImFyZ3YiLCJwaCIsInBhZF9jaGFyYWN0ZXIiLCJwYWRfbGVuZ3RoIiwiaXNfcG9zaXRpdmUiLCJjdXJzb3IiLCJ0cmVlX2xlbmd0aCIsInBhcmFtX25vIiwiRnVuY3Rpb24iLCJKU09OIiwic3RyaW5naWZ5IiwicGFkX2NoYXIiLCJyZXBlYXQiLCJzcHJpbnRmX2Zvcm1hdCIsInNwcmludGZfY2FjaGUiLCJfZm10IiwiYXJnX25hbWVzIiwiU3ludGF4RXJyb3IiLCJmaWVsZF9saXN0IiwicmVwbGFjZW1lbnRfZmllbGQiLCJmaWVsZF9tYXRjaCIsInNwcmludGZfcGFyc2UiLCJ2c3ByaW50ZiIsImV4cG9ydHMiLCJmbk1hcERhdGFzZXRUb1ZhbHVlIiwiZDMubWluIiwiYXJyYXlEYXRhc2V0IiwiZGF0YVBvaW50IiwiZDMubWF4IiwiZDMuc3VtIiwibnVtRGF5cyIsIm51bURheXNIYXZpbmdEYXRhIiwibWF4U3RyZWFrIiwic3RyZWFrIiwibWF4U3RyZWFrU3RhcnQiLCJzdHJlYWtTdGFydCIsIm1heFN0cmVha0VuZCIsInN0cmVha0VuZCIsIm5leHRQb2ludCIsIm1heEJyZWFrcyIsImJyZWFrcyIsIm1heEJyZWFrc1N0YXJ0IiwiYnJlYWtzU3RhcnQiLCJtYXhCcmVha3NFbmQiLCJicmVha3NFbmQiLCJsYXN0U3RyZWFrIiwiY3VycmVudFN0cmVhayIsImN1cnJlbnRTdHJlYWtTdGFydCIsImN1cnJlbnRTdHJlYWtFbmQiLCJjdXJyZW50QnJlYWtzIiwiY3VycmVudEJyZWFrc1N0YXJ0IiwiY3VycmVudEJyZWFrc0VuZCIsImF2ZXJhZ2UiLCJkMy5tZWRpYW4iLCJ2YXJpYW5jZSIsIm1lYW4iLCJkMy52YXJpYW5jZSIsImZuTWFwVW5pcnlPcCIsImZuTWFwQmluYXJ5T3AiLCJmbk1hcERhdGFzZXRUb0RhdGFzZXQiLCJub3JtYWxpemVkIiwic2V0TWlzc2luZ1ZhbHVlcyIsIm1pc3NpbmdWYWx1ZSIsIm5ld0RhdGFzZXQiLCJldmFsdWF0ZSIsImlkZW50aWZpZXJOYW1lIiwidW5pcnlFeHByIiwicmV0VW5pcnlBcmciLCJiaW5hcnlFeHByIiwibGVmdFZhbHVlIiwicmlnaHRWYWx1ZSIsInJldENoZWNrIiwiaXNNb21lbnQiLCJjaGVja0JpbmFyeU9wZXJhbnRUeXBlIiwiY2FsbEV4cHIiLCJmbk5hbWUiLCJldmFsdWF0ZWRBcmdzIiwiZXZhbHVhdGVBcnJheSIsImRhdGFzZXRJZCIsImRzIiwiZXhwck1hcCIsImV4cHJSZWdleCIsImZ1bGxtYXRjaCIsImFzdCIsImVyciIsInJlc29sdmVUZW1wbGF0ZSIsInJldFJlc29sdmUiLCJleHByUmVzb2x2ZWQiLCJzdHJWYWx1ZSIsImhlbHBlci5kYXRlVG9TdHIiLCJyZXNvbHZlVmFsdWUiLCJyZW5kZXJQaWUiLCJjYW52YXMiLCJjaGFydEVsZW1lbnRzIiwicGllSW5mbyIsInJhZGl1cyIsIm91dHRlclJhZGl1cyIsInN0ckV4cHIiLCJyZXRWYWx1ZSIsImV4cHIucmVzb2x2ZVZhbHVlIiwibGFiZWxzIiwicmV0TGFiZWwiLCJleHByLnJlc29sdmVUZW1wbGF0ZSIsImxhYmVsU2l6ZXMiLCJoZWxwZXIubWVhc3VyZVRleHRTaXplIiwiZXh0TGFiZWxzIiwicmV0RXh0TGFiZWwiLCJleHRMYWJlbFNpemVzIiwiY29sb3JTY2FsZSIsImQzLnNjYWxlT3JkaW5hbCIsInNlY3RvcnNHcm91cCIsImRhdGFBcmVhIiwic29ydFZhbHVlcyIsImFyY3MiLCJwYSIsImQzLnBpZSIsInBpZVZhbHVlcyIsInNlY3RvcnMiLCJkMy5hcmMiLCJoaWRkZW5BcmMiLCJkM1xuICAgICAgICAuYXJjIiwiaXNMYWJlbEhpZGRlbiIsImFyY09iaiIsImdldE1pZEFuZ2xlIiwiZ2V0UG9pbnRzRm9yQ29ubmVjdGlvbkxpbmVzIiwibGFiZWxXaWR0aCIsImV4dExhYmVsV2lkdGgiLCJtaWRBbmdsZSIsInBvc0xhYmVsIiwicG9zTWlkZGxlIiwicG9zRXh0TGFiZWwiLCJkaXN0TWlkZGxlVG9MYWJlbCIsInJlbmRlclBpZUNoYXJ0IiwicHJvcHMiLCJkM1xuICAgICAgICAuc2VsZWN0IiwiZ3JhcGhBcmVhIiwiY3JlYXRlQXJlYXMiLCJkZWZhdWx0RGF0YUNvbG9yIiwiZDMuc2NoZW1lU3BlY3RyYWwiLCJ0aXRsZVNpemUiLCJoZWxwZXIuZXhwYW5kQXJlYSIsImhlbHBlci5tb3ZlQXJlYSIsInJlbmRlclRpdGxlIiwidGl0bGVIZWlnaHQiLCJuYW1lU2l6ZXMiLCJpbmRNYXhOYW1lIiwibWF4TmFtZVdpZHRoIiwiY2hhcmFjdGVyV2lkdGgiLCJuYW1lSGVpZ2h0IiwibnVtTmFtZXMiLCJ4U3BhY2luZyIsInlTcGFjaW5nIiwibWFya2VyV2lkdGgiLCJsZWdlbmRXaWR0aCIsImxlZ2VuZEhlaWdodCIsImxlZ2VuZFgiLCJsZWdlbmRZIiwibGVnZW5kIiwibGVnZW5kQmciLCJmaXJzdE1hcmtlclgiLCJmaXJzdE1hcmtlclkiLCJmaXJzdExhYmVsWCIsImZpcnN0TGFiZWxZIiwiY3VyclJlbmRlclBvc1giLCJyZW5kZXJMZWdlbmQiLCJfY2FudmFzIiwic3ZnV2lkdGgiLCJzdmdIZWlnaHQiLCJzZXRDaGFydFNjYWxlIiwicmVuZGVyU3VtbWFyeSIsInN1bW1hcnlJbmZvIiwib3V0cHV0U3VtbWFyeSIsInJldFJlc29sdmVkVGVtcGxhdGUiLCJvdXRwdXRMaW5lcyIsIm91dHB1dExpbmUiLCJsb2dUb0NvbnNvbGUiLCJyYXRpb0NlbGxUb1RleHQiLCJyYXRpb0RvdFRvVGV4dCIsInRvTmV4dERhdGFzZXQiLCJtb250aEluZm8iLCJkYXRhc2V0SWRzIiwiY3VyRGF0YXNldElkIiwiY3VySW5kZXgiLCJjbGVhclNlbGVjdGlvbiIsImNpcmNsZXMiLCJjaXJjbGUiLCJtb25pdG9yIiwicmVuZGVyTW9udGhIZWFkZXIiLCJjdXJNb250aERhdGUiLCJkYXlzSW5Nb250aCIsIm1heERheVRleHRTaXplIiwiY2VsbFNpemUiLCJoZWFkZXJZZWFyVGV4dCIsImhlYWRlck1vbnRoVGV4dCIsImhlYWRlclllYXJTaXplIiwiaGVhZGVyTW9udGhTaXplIiwiaGVhZGVySGVpZ2h0IiwiaGVhZGVyR3JvdXAiLCJoZWFkZXJNb250aCIsImhlYWRlclllYXIiLCJkYXRhc2V0TmFtZVNpemUiLCJkYXRhc2V0Um90YXRvciIsInJlZnJlc2giLCJtb25pdG9yVGV4dFNpemUiLCJhcnJvd1NpemUiLCJwcmV2TW9udGhEYXRlIiwibmV4dE1vbnRoRGF0ZSIsInRvZGF5RGF0ZSIsImhlbHBlci5nZXREYXRlVG9kYXkiLCJ3ZWVrZGF5TmFtZXMiLCJ3ZWVrZGF5TmFtZVNpemUiLCJkaXZpZGluZ0xpbmUiLCJyZW5kZXJNb250aERheXMiLCJjdXJEYXRhc2V0SW5kZXgiLCJkb3RSYWRpdXMiLCJzdHJlYWtXaWR0aCIsImFsbG93U2NhbGVkVmFsdWUiLCJtb250aFN0YXJ0RGF0ZSIsInN1YnRyYWN0IiwibW9udGhFbmREYXRlIiwiZW5kT2YiLCJkYXRhU3RhcnREYXRlIiwiZGF0YUVuZERhdGUiLCJhbm5vdGF0aW9ucyIsImN1ckFubm90YXRpb24iLCJkYXlzSW5Nb250aFZpZXciLCJpbmRDb2wiLCJpbmRSb3ciLCJoZWxwZXIuc3RyVG9EYXRlIiwiaXNJblRoaXNNb250aCIsImlzT3V0T2ZEYXRhUmFuZ2UiLCJjdXJWYWx1ZSIsImNvbnNvbGUiLCJzY2FsZWRWYWx1ZSIsIm5leHRWYWx1ZSIsInByZXZWYWx1ZSIsInN0cmVha0luIiwic3RyZWFrT3V0IiwidGV4dEFubm90YXRpb24iLCJkYXRhc2V0SW5kZXgiLCJkYXlJbk1vbnRoIiwicm93IiwiY29sIiwidG90YWxEYXlCbG9ja1dpZHRoIiwiZDNcbiAgICAgICAgLnNjYWxlTGluZWFyIiwic3RyZWFrQ29sb3IiLCJzdHJlYWtIZWlnaHQiLCJkMy5pbnRlcnBvbGF0ZUxhYiIsInRvZGF5IiwidG9kYXlSaW5ncyIsInZhbHVlVGV4dCIsInRyYW5zWCIsInRyYW5zWSIsImdyYXBoQXJlYVdpZHRoIiwiZ3JhcGhBcmVhSGVpZ2h0IiwidG90YWxIZWlnaHQiLCJoZWFkZXIiLCJ0b3RhbFdpZHRoIiwicmVuZGVyTW9udGgiLCJudW1BdmFpbGFibGVEYXRhc2V0IiwibW9udGhEYXRlIiwiaGVscGVyLmdldERhdGVCeUR1cmF0aW9uVG9Ub2RheSIsInJlbmRlckhlYXRtYXAiLCJoZWF0bWFwSW5mbyIsInJlbmRlckJ1bGxldCIsImJ1bGxldEluZm8iLCJyZXRSZW5kZXJBeGlzIiwibGFzdFJhbmdlIiwidGlja0Zvcm1hdEZuIiwiZDMudGlja0Zvcm1hdCIsIm1heFRpY2tMYWJlbFNpemUiLCJkMy5zY2FsZUxpbmVhciIsImF4aXNHZW4iLCJkMy5heGlzQm90dG9tIiwiZDMuYXhpc0xlZnQiLCJyZW5kZXJBeGlzIiwieE1pZGRsZSIsImF4aXNXaWR0aCIsInVuaXRTaXplIiwibGFzdEJvdW5kIiwicmVuZGVyQmFja1BhbmVsIiwicmV0UmVuZGVyQmFyIiwicmV0QWN0dWFsVmFsdWUiLCJhY3R1YWxWYWx1ZSIsImJhcldpZHRoIiwicmVuZGVyQmFyIiwibWFya2VyTGVuZ3RoIiwicmVuZGVyTWFyayIsInJlbmRlclhBeGlzIiwiY2hhcnRJbmZvIiwieERvbWFpbiIsImQzLmV4dGVudCIsInhTY2FsZSIsImQzXG4gICAgICAgIC5zY2FsZVRpbWUiLCJ0aWNrSW50ZXJ2YWxJbkR1cmF0aW9uIiwiaGVscGVyLnBhcnNlRHVyYXRpb25TdHJpbmciLCJmaXJzdERhdGUiLCJsYXN0RGF0ZSIsImQzLnRpbWVEYXkiLCJ0b0RhdGUiLCJhc0RheXMiLCJkMy50aW1lV2VlayIsImQzLnRpbWVNb250aCIsImQzLnRpbWVZZWFyIiwiZ2V0WFRpY2tWYWx1ZXMiLCJpblRpY2tMYWJlbEZvcm1hdCIsImZuVGlja0xhYmVsRm9ybWF0IiwidGlja0xhYmVsRm9ybWF0IiwiZDMudGltZUZvcm1hdCIsImdldFhUaWNrTGFiZWxGb3JtYXQiLCJ4QXhpc0dlbiIsInhBeGlzIiwidGV4dFNpemUiLCJ4QXhpc1RpY2tMYWJlbHMiLCJ0aWNrTGFiZWxIZWlnaHQiLCJyZW5kZXJZQXhpcyIsInlNaW5PZkRhdGFzZXRzIiwieU1heE9mRGF0YXNldHMiLCJ0bXBWYWx1ZUlzVGltZSIsInZhbHVlSXNUaW1lIiwieU1pbkFzc2lnbmVkIiwieU1heEFzc2lnbmVkIiwieVRtcCIsInlUbXBBc3NpZ25lZCIsInlMb3dlciIsInlVcHBlciIsInlFeHRlbnQiLCJ5U2NhbGUiLCJ5QXhpc0xhYmVsVGV4dCIsInlBeGlzVW5pdFRleHQiLCJ5QXhpc0dlbiIsImlzVGltZVZhbHVlIiwiYWJzRXh0ZW50IiwiZ2V0WVRpY2tMYWJlbEZvcm1hdCIsImQzLnJhbmdlIiwiYXNTZWNvbmRzIiwiZ2V0WVRpY2tWYWx1ZXMiLCJ5QXhpcyIsInlBeGlzTGluZSIsInlBeGlzVGlja3MiLCJ5QXhpc1RpY2tMYWJlbHMiLCJtYXhUaWNrTGFiZWxXaWR0aCIsImxhYmVsU2l6ZSIsInlBeGlzTGFiZWxTaXplIiwieUF4aXNXaWR0aCIsInJlbmRlckxpbmUiLCJsZWZ0WVNjYWxlIiwicmlnaHRZU2NhbGUiLCJsaW5lR2VuIiwiZGVmaW5lZCIsImN1cnZlIiwiZGVmaW5lZDAiLCJwb2ludFgiLCJwb2ludFkiLCJkM1xuICAgICAgICAgICAgLmxpbmUiLCJyZW5kZXJQb2ludHMiLCJkb3RzIiwiaXNJbnRlZ2VyIiwidGFyZ2V0RWxlbWVudHMiLCJ0b29sdGlwIiwidG9vbHRpcEJnIiwidG9vbHRpcExhYmVsIiwidG9vbHRpcExhYmVsRGF0ZSIsInRvb2x0aXBMYWJlbFZhbHVlIiwic291cmNlRXZlbnQiLCJjdXJyZW50VGFyZ2V0Iiwib3duZXJTVkdFbGVtZW50IiwiY3JlYXRlU1ZHUG9pbnQiLCJjbGllbnRYIiwiY2xpZW50WSIsIm1hdHJpeFRyYW5zZm9ybSIsImdldFNjcmVlbkNUTSIsImludmVyc2UiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJjbGllbnRMZWZ0IiwiY2xpZW50VG9wIiwicGFnZVgiLCJwYWdlWSIsImQzLnBvaW50ZXIiLCJ0b29sdGlwQmdXaWR0aCIsInRvb2x0aXBCZ0hlaWdodCIsImxhYmVsRGF0ZVRleHQiLCJsYWJlbERhdGVTaXplIiwibGFiZWxWYWx1ZVRleHQiLCJsYWJlbFZhbHVlU2l6ZSIsInRvb2x0aXBQb3NYIiwidG9vbHRpcFBvc1kiLCJ0b29sdGlwWE9mZnNldCIsInRvb2x0aXBZT2Zmc2V0IiwicmVuZGVyVG9vbHRpcCIsImN1cnJCYXJTZXQiLCJ0b3RhbE51bU9mQmFyU2V0cyIsImJhclNldFdpZHRoIiwiYmFycyIsInBvcnRpb25WaXNpYmxlIiwibGVmdFlBeGlzIiwicmlnaHRZQXhpcyIsInhBeGlzSGVpZ2h0IiwibGVmdFlBeGlzV2lkdGgiLCJyaWdodFlBeGlzV2lkdGgiLCJ4RGF0YXNldElkcyIsIm51bUVsZW1zRXhjbHVkZWQiLCJuYW1lTGFiZWxzIiwicG9zWCIsInJlbmRlckxpbmVDaGFydCIsImRhdGFzZXRPbkxlZnRZQXhpcyIsImRhdGFzZXRPblJpZ2h0WUF4aXMiLCJ0b0xvY2FsZUxvd2VyQ2FzZSIsInJldFJlbmRlckxlZnRZQXhpcyIsInJldFJlbmRlclJpZ2h0WUF4aXMiLCJyZW5kZXJCYXJDaGFydCIsInN0clRvQm9vbCIsInZhbGlkYXRlU2VhcmNoVHlwZSIsInZhbGlkYXRlWUF4aXNMb2NhdGlvbiIsInZhbGlkYXRlQ29sb3IiLCJzcGxpdElucHV0QnlDb21tYSIsImR1bW15Iiwic3BsaXR0ZWQiLCJnZXRCb29sQXJyYXlGcm9tSW5wdXQiLCJudW1EYXRhc2V0IiwiZGVmYXVsdFZhbHVlIiwiYWxsb3dOb1ZhbGlkVmFsdWUiLCJudW1WYWxpZFZhbHVlIiwiY3VyciIsImN1cnJCb29sIiwiaW5wdXRCb29sIiwiZ2V0TnVtYmVyQXJyYXlGcm9tSW5wdXQiLCJoZWxwZXIucGFyc2VGbG9hdEZyb21BbnkiLCJjdXJyTnVtIiwiaW5wdXROdW0iLCJnZXRTdHJpbmdGcm9tSW5wdXQiLCJoZWxwZXIucmVwbGFjZUltZ1RhZ0J5QWx0IiwiZ2V0U3RyaW5nQXJyYXlGcm9tSW5wdXQiLCJ2YWxpZGF0b3IiLCJzdHJOdW1iZXIiLCJnZXROdW1iZXJBcnJheSIsIm51bUFycmF5IiwiZWxlbSIsInBpZWNlIiwiZ2V0U3RyaW5nQXJyYXkiLCJzdHJBcnJheSIsInBhcnNlQ29tbW9uQ2hhcnRJbmZvIiwieWFtbCIsInJldFlBeGlzTGFiZWwiLCJyZXRZQXhpc0NvbG9yIiwicmV0WUF4aXNMYWJlbENvbG9yIiwicmV0WUF4aXNVbml0IiwicmV0WUF4aXNUaWNrSW50ZXJ2YWwiLCJyZXRZQXhpc1RpY2tMYWJlbEZvcm1hdCIsInJldFlNaW4iLCJyZXRZTWF4IiwicmV0UmV2ZXJzZVlBeGlzIiwiZ2V0QXZhaWxhYmxlS2V5c09mQ2xhc3MiLCJvYmplY3RLZXlzIiwiZ2V0RGF0ZUZyb21GaWxlbmFtZSIsImhlbHBlci5nZXREYXRlU3RyaW5nRnJvbUlucHV0U3RyaW5nIiwiYmFzZW5hbWUiLCJnZXREYXRlRnJvbUZyb250bWF0dGVyIiwiZmlsZUNhY2hlIiwiZnJvbnRNYXR0ZXIiLCJmcm9udG1hdHRlciIsImhlbHBlci5kZWVwVmFsdWUiLCJleHRyYWN0RGF0ZVVzaW5nUmVnZXhXaXRoVmFsdWUiLCJnZXREYXRlRnJvbVRhZyIsImNvbnRlbnQiLCJ0YWdOYW1lIiwiZ2V0RGF0ZUZyb21UZXh0IiwiZ2V0RGF0ZUZyb21EdkZpZWxkIiwiZHZUYXJnZXQiLCJnZXREYXRlRnJvbUZpbGVNZXRhIiwiVEZpbGUiLCJoZWxwZXIuZ2V0RGF0ZUZyb21Vbml4VGltZSIsInN0YXQiLCJjdGltZSIsIm10aW1lIiwiZ2V0RGF0ZUZyb21UYXNrIiwiVGFzayIsIlRhc2tEb25lIiwiVGFza05vdERvbmUiLCJhZGRUb0RhdGFNYXAiLCJkYXRhTWFwIiwicXVlcnlWYWx1ZVBhaXJzIiwiZXh0cmFjdERhdGFVc2luZ1JlZ2V4V2l0aE11bHRpcGxlVmFsdWVzIiwieFZhbHVlTWFwIiwibWVhc3VyZSIsImV4dHJhY3RlZCIsInJldFBhcnNlIiwiY29sbGVjdERhdGFGcm9tRmlsZU1ldGEiLCJ4VmFsdWUiLCJwYXR0ZXJuIiwiaGVscGVyLmdldFdvcmRDb3VudCIsIm51bUNoYXJzIiwibnVtU2VudGVuY2VzIiwiaGVscGVyLmdldFNlbnRlbmNlQ291bnQiLCJ0YXJnZXRNZWFzdXJlIiwidGFyZ2V0RXhpc3QiLCJERUZBVUxUX1NFVFRJTkdTIiwiVHJhY2tlclNldHRpbmdUYWIiLCJQbHVnaW5TZXR0aW5nVGFiIiwiYXBwIiwiZGlzcGxheSIsImNvbnRhaW5lckVsIiwiU2V0dGluZyIsInNldERlc2MiLCJhZGRUZXh0Iiwic2V0UGxhY2Vob2xkZXIiLCJzZXR0aW5ncyIsIm9uQ2hhbmdlIiwic2F2ZVNldHRpbmdzIiwiVHJhY2tlciIsIlBsdWdpbiIsIm9ubG9hZCIsImxvYWRTZXR0aW5ncyIsImFkZFNldHRpbmdUYWIiLCJyZWdpc3Rlck1hcmtkb3duQ29kZUJsb2NrUHJvY2Vzc29yIiwicG9zdHByb2Nlc3NvciIsImFkZENvbW1hbmQiLCJhZGRDb2RlQmxvY2siLCJsb2FkRGF0YSIsInNhdmVEYXRhIiwicmVuZGVyRXJyb3JNZXNzYWdlIiwiZWwiLCJyZW5kZXJpbmcucmVuZGVyRXJyb3JNZXNzYWdlIiwib251bmxvYWQiLCJnZXRGaWxlc0luRm9sZGVyIiwiaW5jbHVkZVN1YkZvbGRlcnMiLCJmaWxlcyIsIml0ZW0iLCJleHRlbnNpb24iLCJURm9sZGVyIiwiZ2V0RmlsZXMiLCJmaWxlc18xIiwicmVuZGVySW5mb18xIiwiZm9sZGVyVG9TZWFyY2giLCJ1c2VTcGVjaWZpZWRGaWxlc09ubHkiLCJzcGVjaWZpZWRGaWxlcyIsImZpbGVzQ29udGFpbnNMaW5rZWRGaWxlcyIsInZhdWx0IiwiZ2V0QWJzdHJhY3RGaWxlQnlQYXRoIiwibm9ybWFsaXplUGF0aCIsImZvbGRlckZpbGVzIiwibGlua2VkRmlsZU11bHRpcGxpZXIiLCJzZWFyY2hGaWxlTXVsdGlmcGllckFmdGVyTGluayIsIm1ldGFkYXRhQ2FjaGUiLCJnZXRGaWxlQ2FjaGUiLCJsaW5lcyIsImFkYXB0ZXIiLCJyZWFkIiwibGlua3MiLCJsaW5rIiwibGlua2VkRmlsZSIsImdldEZpcnN0TGlua3BhdGhEZXN0IiwibGluZU51bWJlciIsIm9yaWdpbmFsIiwiY3R4IiwieWFtbFRleHQiLCJ0YWJTaXplIiwiZ2V0Q29uZmlnIiwic3BhY2VzIiwicmV0UmVuZGVySW5mbyIsInBhcnNlWWFtbCIsImtleXNGb3VuZEluWUFNTCIsIm51bURhdGFzZXRzIiwicmV0U2VhcmNoVHlwZSIsInN0clR5cGUiLCJUYWciLCJGcm9udG1hdHRlciIsIldpa2kiLCJXaWtpTGluayIsIldpa2lEaXNwbGF5IiwiVGV4dCIsImR2RmllbGQiLCJGaWxlTWV0YSIsIm11bHRpcGxlVmFsdWVTcGFyYXRvciIsInJldE11bHRpcGxlVmFsdWVTcGFyYXRvciIsInJldFhEYXRhc2V0Iiwia2V5c09mUmVuZGVySW5mbyIsImFkZGl0aW9uYWxBbGxvd2VkS2V5cyIsInlhbWxMaW5lS2V5cyIsInlhbWxCYXJLZXlzIiwieWFtbFBpZUtleXMiLCJ5YW1sU3VtbWFyeUtleXMiLCJ5YW1sTW9udGhLZXlzIiwieWFtbEhlYXRtYXBLZXlzIiwieWFtbEJ1bGxldEtleXMiLCJ5YW1sQ3VzdG9tRGF0YXNldEtleXMiLCJjdXN0b21EYXRhc2V0SWQiLCJzdHJDdXN0b21EYXRhc2V0SWQiLCJhYnN0cmFjdEZvbGRlciIsInJldEZpbGVzIiwic3RyU3RhcnREYXRlIiwiaXNTdGFydERhdGVWYWxpZCIsInN0ckVuZERhdGUiLCJpc0VuZERhdGVWYWxpZCIsInJldERhdGFzZXROYW1lIiwiaW5kVW50aXRsZWQiLCJyZXRDb25zdFZhbHVlIiwicmV0SWdub3JlQXR0YWNoZWRWYWx1ZSIsInJldElnbm9yZVplcm9WYWx1ZSIsInJldEFjY3VtIiwicmV0UGVuYWx0eSIsInJldFZhbHVlU2hpZnQiLCJyZXRTaGlmdE9ubHlWYWx1ZUxhcmdlclRoYW4iLCJyYXRpb1JlZ0V4IiwicGFydHMiLCJyZXRNYXJnaW4iLCJkYXRhc2V0S2V5IiwieWFtbEN1c3RvbURhdGFzZXQiLCJrZXlzT2ZDdXN0b21EYXRhc2V0SW5mbyIsInJldFhEYXRhIiwibnVtWERhdGEiLCJyZXRZRGF0YSIsImxpbmVLZXkiLCJ5YW1sTGluZSIsImtleXNPZkxpbmVJbmZvIiwicmV0UGFyc2VDb21tb25DaGFydEluZm8iLCJyZXRMaW5lQ29sb3IiLCJyZXRMaW5lV2lkdGgiLCJyZXRTaG93TGluZSIsInJldFNob3dQb2ludCIsInJldFBvaW50Q29sb3IiLCJyZXRQb2ludEJvcmRlckNvbG9yIiwicmV0UG9pbnRCb3JkZXJXaWR0aCIsInJldFBvaW50U2l6ZSIsInJldEZpbGxHYXAiLCJyZXRZQXhpc0xvY2F0aW9uIiwiYmFyS2V5IiwieWFtbEJhciIsImtleXNPZkJhckluZm8iLCJyZXRCYXJDb2xvciIsInBpZUtleSIsInlhbWxQaWUiLCJrZXlzT2ZQaWVJbmZvIiwicmV0RGF0YSIsIm51bURhdGEiLCJyZXREYXRhQ29sb3IiLCJyZXREYXRhTmFtZSIsImRlZmF1bHRMZWdlbmRPcmllbnRhdGlvbiIsInN1bW1hcnlLZXkiLCJ5YW1sU3VtbWFyeSIsImtleXNPZlN1bW1hcnlJbmZvIiwibW9udGhLZXkiLCJ5YW1sTW9udGgiLCJrZXlzT2ZNb250aEluZm8iLCJyZXREYXRhc2V0IiwicmV0VGhyZXNob2xkIiwiaW5kRGF0YXNldCIsInJldEFubm90YXRpb24iLCJoZWF0bWFwS2V5IiwieWFtbEhlYXRtYXAiLCJrZXlzT2ZIZWF0bWFwSW5mbyIsImJ1bGxldEtleSIsInlhbWxCdWxsZXQiLCJrZXlzT2ZCdWxsZXRJbmZvIiwicmV0UmFuZ2UiLCJudW1SYW5nZSIsInJldFJhbmdlQ29sb3IiLCJnZXRSZW5kZXJJbmZvRnJvbVlhbWwiLCJwcm9jZXNzSW5mbyIsImxvb3BGaWxlUHJvbWlzZXMiLCJza2lwVGhpc0ZpbGUiLCJ4RGF0YXNldElkIiwieERhdGUiLCJjb2xsZWN0aW5nLmdldERhdGVGcm9tRmlsZW5hbWUiLCJ4RGF0YXNldFF1ZXJ5IiwiY29sbGVjdGluZy5nZXREYXRlRnJvbUZyb250bWF0dGVyIiwiY29sbGVjdGluZy5nZXREYXRlRnJvbVRhZyIsImNvbGxlY3RpbmcuZ2V0RGF0ZUZyb21UZXh0IiwiY29sbGVjdGluZy5nZXREYXRlRnJvbUR2RmllbGQiLCJjb2xsZWN0aW5nLmdldERhdGVGcm9tRmlsZU1ldGEiLCJjb2xsZWN0aW5nLmdldERhdGVGcm9tVGFzayIsImxvb3BRdWVyeVByb21pc2VzIiwiZ290QW55VmFsdWUiLCJmcm9udE1hdHRlclRhZ3MiLCJ0YWdzIiwidGFnTWVhc3VyZSIsInRhZ0V4aXN0Iiwic3BsaXR0ZWRQYXJ0IiwicGFydCIsInRhZyIsImNvbGxlY3RpbmcuY29sbGVjdERhdGFGcm9tRnJvbnRtYXR0ZXJUYWciLCJjb2xsZWN0aW5nLmNvbGxlY3REYXRhRnJvbUZyb250bWF0dGVyS2V5IiwidGV4dFRvU2VhcmNoIiwid2lraVRleHQiLCJkaXNwbGF5VGV4dCIsImNvbGxlY3RpbmcuY29sbGVjdERhdGFGcm9tV2lraSIsImNvbGxlY3RpbmcuY29sbGVjdERhdGFGcm9tSW5saW5lVGFnIiwiY29sbGVjdGluZy5jb2xsZWN0RGF0YUZyb21UZXh0IiwiY29sbGVjdGluZy5jb2xsZWN0RGF0YUZyb21GaWxlTWV0YSIsImNvbGxlY3RpbmcuY29sbGVjdERhdGFGcm9tRHZGaWVsZCIsImNvbGxlY3RpbmcuY29sbGVjdERhdGFGcm9tVGFzayIsImFsbCIsImNvbGxlY3REYXRhRnJvbVRhYmxlIiwiZGF0ZUVycm9yTWVzc2FnZSIsInBhaXIiLCJpbmRQYWlyIiwiY29sbGVjdGVkIiwicmV0UmVuZGVyIiwicmV0IiwicGllLnJlbmRlclBpZUNoYXJ0Iiwic3VtbWFyeS5yZW5kZXJTdW1tYXJ5IiwiYnVsbGV0LnJlbmRlckJ1bGxldCIsIm1vbnRoLnJlbmRlck1vbnRoIiwiaGVhdG1hcC5yZW5kZXJIZWF0bWFwIiwicmVuZGVyaW5nLnJlbmRlciIsInRhYmxlUXVlcmllcyIsInRhYmxlcyIsInRhYmxlRmlsZU5vdEZvdW5kIiwiaXNYIiwidGFibGUiLCJ0YWJsZURhdGEiLCJ5RGF0YXNldFF1ZXJpZXMiLCJ0ZXh0VGFibGUiLCJtZFRhYmxlUmVnZXgiLCJpbmRUYWJsZSIsInRhYmxlTGluZXMiLCJudW1Db2x1bW5zIiwibnVtRGF0YVJvd3MiLCJoZWFkZXJMaW5lIiwiaGVscGVyLnRyaW1CeUNoYXIiLCJzZXBMaW5lIiwic3BlcExpbmVTcGxpdHRlZCIsImNvbHVtblhEYXRhc2V0IiwieFZhbHVlcyIsInRhYmxlTGluZSIsImRhdGFSb3dTcGxpdHRlZCIsInlEYXRhc2V0UXVlcnkiLCJjb2x1bW5PZkludGVyZXN0IiwiaW5kTGluZSIsImNvbGxlY3RpbmcuYWRkVG9EYXRhTWFwIiwiZ2V0RWRpdG9yIiwid29ya3NwYWNlIiwiZ2V0QWN0aXZlVmlld09mVHlwZSIsIk1hcmtkb3duVmlldyIsImVkaXRvciIsIm91dHB1dFR5cGUiLCJhY3RpdmVMZWFmIiwidmlldyIsImNvZGVibG9ja1RvSW5zZXJ0IiwiaW5zZXJ0VG9OZXh0TGluZSIsImdldEN1cnNvciIsImdldExpbmUiLCJzZXRTZWxlY3Rpb24iLCJyZXBsYWNlU2VsZWN0aW9uIl0sIm1hcHBpbmdzIjoidUNBa0hPLFNBQVNBLEVBQVVDLEVBQVNDLEVBQVlDLEVBQUdDLEdBRTlDLE9BQU8sSUFBS0QsSUFBTUEsRUFBSUUsV0FBVSxTQUFVQyxFQUFTQyxHQUMvQyxTQUFTQyxFQUFVQyxHQUFTLElBQU1DLEVBQUtOLEVBQVVPLEtBQUtGLEdBQVEsQ0FBRyxNQUFPRyxHQUFLTCxFQUFPSyxHQUFPLENBQzNGLFNBQVNDLEVBQVNKLEdBQVMsSUFBTUMsRUFBS04sRUFBaUIsTUFBRUssR0FBVSxDQUFDLE1BQU9HLEdBQUtMLEVBQU9LLEdBQU8sQ0FDOUYsU0FBU0YsRUFBS0ksR0FKbEIsSUFBZUwsRUFJYUssRUFBT0MsS0FBT1QsRUFBUVEsRUFBT0wsUUFKMUNBLEVBSXlESyxFQUFPTCxNQUpoREEsYUFBaUJOLEVBQUlNLEVBQVEsSUFBSU4sR0FBRSxTQUFVRyxHQUFXQSxFQUFRRyxFQUFPLEtBSWhCTyxLQUFLUixFQUFXSyxFQUFZLENBQzlHSCxHQUFNTixFQUFZQSxFQUFVYSxNQUFNaEIsRUFBU0MsR0FBYyxLQUFLUyxPQUN0RSxHQUNBLENDMUhlLFNBQVNPLEVBQVVDLEVBQUdDLEdBQ25DLE9BQVksTUFBTEQsR0FBa0IsTUFBTEMsRUFBWUMsSUFBTUYsRUFBSUMsR0FBSyxFQUFJRCxFQUFJQyxFQUFJLEVBQUlELEdBQUtDLEVBQUksRUFBSUMsR0FDOUUsQ0NGZSxTQUFTQyxFQUFXSCxFQUFHQyxHQUNwQyxPQUFZLE1BQUxELEdBQWtCLE1BQUxDLEVBQVlDLElBQzVCRCxFQUFJRCxHQUFLLEVBQ1RDLEVBQUlELEVBQUksRUFDUkMsR0FBS0QsRUFBSSxFQUNURSxHQUNOLENDSGUsU0FBU0UsRUFBU0MsR0FDL0IsSUFBSUMsRUFBVUMsRUFBVUMsRUFpQnhCLFNBQVNDLEVBQUtULEVBQUdVLEVBQUdDLEVBQUssRUFBR0MsRUFBS1osRUFBRWEsUUFDakMsR0FBSUYsRUFBS0MsRUFBSSxDQUNYLEdBQXVCLElBQW5CTixFQUFTSSxFQUFHQSxHQUFVLE9BQU9FLEVBQ2pDLEVBQUcsQ0FDRCxNQUFNRSxFQUFPSCxFQUFLQyxJQUFRLEVBQ3RCTCxFQUFTUCxFQUFFYyxHQUFNSixHQUFLLEVBQUdDLEVBQUtHLEVBQU0sRUFDbkNGLEVBQUtFLENBQ2xCLE9BQWVILEVBQUtDLEVBQ2YsQ0FDRCxPQUFPRCxDQUNSLENBbUJELE9BdkNpQixJQUFiTixFQUFFUSxRQUNKUCxFQUFXUCxFQUNYUSxFQUFXLENBQUNRLEVBQUdMLElBQU1YLEVBQVVNLEVBQUVVLEdBQUlMLEdBQ3JDRixFQUFRLENBQUNPLEVBQUdMLElBQU1MLEVBQUVVLEdBQUtMLElBRXpCSixFQUFXRCxJQUFNTixHQUFhTSxJQUFNRixFQUFhRSxFQUFJVyxFQUNyRFQsRUFBV0YsRUFDWEcsRUFBUUgsR0FnQ0gsQ0FBQ0ksT0FBTVEsT0FMZCxTQUFnQmpCLEVBQUdVLEVBQUdDLEVBQUssRUFBR0MsRUFBS1osRUFBRWEsUUFDbkMsTUFBTUssRUFBSVQsRUFBS1QsRUFBR1UsRUFBR0MsRUFBSUMsRUFBSyxHQUM5QixPQUFPTSxFQUFJUCxHQUFNSCxFQUFNUixFQUFFa0IsRUFBSSxHQUFJUixJQUFNRixFQUFNUixFQUFFa0IsR0FBSVIsR0FBS1EsRUFBSSxFQUFJQSxDQUNqRSxFQUVxQkMsTUFqQnRCLFNBQWVuQixFQUFHVSxFQUFHQyxFQUFLLEVBQUdDLEVBQUtaLEVBQUVhLFFBQ2xDLEdBQUlGLEVBQUtDLEVBQUksQ0FDWCxHQUF1QixJQUFuQk4sRUFBU0ksRUFBR0EsR0FBVSxPQUFPRSxFQUNqQyxFQUFHLENBQ0QsTUFBTUUsRUFBT0gsRUFBS0MsSUFBUSxFQUN0QkwsRUFBU1AsRUFBRWMsR0FBTUosSUFBTSxFQUFHQyxFQUFLRyxFQUFNLEVBQ3BDRixFQUFLRSxDQUNsQixPQUFlSCxFQUFLQyxFQUNmLENBQ0QsT0FBT0QsQ0FDUixFQVFILENBRUEsU0FBU0ssSUFDUCxPQUFPLENBQ1QsQ0hvUWtELG1CQUFwQkksaUJBQWlDQSxnQkl2VC9ELE1BQ2FDLEVBRFdqQixFQUFTTCxHQUNVb0IsTUFFZmYsR0NQYixTQUFnQk0sR0FDN0IsT0FBYSxPQUFOQSxFQUFhUixLQUFPUSxDQUM3QixJREs2Q08sT0VQdEMsTUFBTUssVUFBa0JDLElBQzdCLFdBQUFDLENBQVlDLEVBQVNDLEVBQU1DLEdBR3pCLEdBRkFDLFFBQ0FDLE9BQU9DLGlCQUFpQkMsS0FBTSxDQUFDQyxRQUFTLENBQUMxQyxNQUFPLElBQUlpQyxLQUFRVSxLQUFNLENBQUMzQyxNQUFPb0MsS0FDM0QsTUFBWEQsRUFBaUIsSUFBSyxNQUFPQyxFQUFLcEMsS0FBVW1DLEVBQVNNLEtBQUtHLElBQUlSLEVBQUtwQyxFQUN4RSxDQUNELEdBQUE2QyxDQUFJVCxHQUNGLE9BQU9FLE1BQU1PLElBQUlDLEVBQVdMLEtBQU1MLEdBQ25DLENBQ0QsR0FBQVcsQ0FBSVgsR0FDRixPQUFPRSxNQUFNUyxJQUFJRCxFQUFXTCxLQUFNTCxHQUNuQyxDQUNELEdBQUFRLENBQUlSLEVBQUtwQyxHQUNQLE9BQU9zQyxNQUFNTSxJQTZCakIsVUFBb0JGLFFBQUNBLEVBQU9DLEtBQUVBLEdBQU8zQyxHQUNuQyxNQUFNb0MsRUFBTU8sRUFBSzNDLEdBQ2pCLE9BQUkwQyxFQUFRSyxJQUFJWCxHQUFhTSxFQUFRRyxJQUFJVCxJQUN6Q00sRUFBUUUsSUFBSVIsRUFBS3BDLEdBQ1ZBLEVBQ1QsQ0FsQ3FCZ0QsQ0FBV1AsS0FBTUwsR0FBTXBDLEVBQ3pDLENBQ0QsT0FBT29DLEdBQ0wsT0FBT0UsTUFBTVcsT0FpQ2pCLFVBQXVCUCxRQUFDQSxFQUFPQyxLQUFFQSxHQUFPM0MsR0FDdEMsTUFBTW9DLEVBQU1PLEVBQUszQyxHQUNiMEMsRUFBUUssSUFBSVgsS0FDZHBDLEVBQVEwQyxFQUFRRyxJQUFJVCxHQUNwQk0sRUFBUU8sT0FBT2IsSUFFakIsT0FBT3BDLENBQ1QsQ0F4Q3dCa0QsQ0FBY1QsS0FBTUwsR0FDekMsRUFvQkgsU0FBU1UsR0FBV0osUUFBQ0EsRUFBT0MsS0FBRUEsR0FBTzNDLEdBQ25DLE1BQU1vQyxFQUFNTyxFQUFLM0MsR0FDakIsT0FBTzBDLEVBQVFLLElBQUlYLEdBQU9NLEVBQVFHLElBQUlULEdBQU9wQyxDQUMvQyxDQWtCQSxTQUFTcUMsRUFBTXJDLEdBQ2IsT0FBaUIsT0FBVkEsR0FBbUMsaUJBQVZBLEVBQXFCQSxFQUFNbUQsVUFBWW5ELENBQ3pFLENDeEJPLFNBQVNvRCxFQUFpQjFDLEVBQUdDLEdBQ2xDLE9BQWEsTUFBTEQsS0FBZUEsR0FBS0EsS0FBWSxNQUFMQyxLQUFlQSxHQUFLQSxNQUFRRCxFQUFJQyxHQUFLLEVBQUlELEVBQUlDLEVBQUksRUFBSSxFQUMxRixDQ3RDQSxNQUFNMEMsRUFBTUMsS0FBS0MsS0FBSyxJQUNsQkMsRUFBS0YsS0FBS0MsS0FBSyxJQUNmRSxFQUFLSCxLQUFLQyxLQUFLLEdBRW5CLFNBQVNHLEVBQVNDLEVBQU9DLEVBQU1DLEdBQzdCLE1BQU01RCxHQUFRMkQsRUFBT0QsR0FBU0wsS0FBS1EsSUFBSSxFQUFHRCxHQUN0Q0UsRUFBUVQsS0FBS1UsTUFBTVYsS0FBS1csTUFBTWhFLElBQzlCaUUsRUFBUWpFLEVBQU9xRCxLQUFLYSxJQUFJLEdBQUlKLEdBQzVCSyxFQUFTRixHQUFTYixFQUFNLEdBQUthLEdBQVNWLEVBQUssRUFBSVUsR0FBU1QsRUFBSyxFQUFJLEVBQ3JFLElBQUlZLEVBQUlDLEVBQUlDLEVBZVosT0FkSVIsRUFBUSxHQUNWUSxFQUFNakIsS0FBS2EsSUFBSSxJQUFLSixHQUFTSyxFQUM3QkMsRUFBS2YsS0FBS2tCLE1BQU1iLEVBQVFZLEdBQ3hCRCxFQUFLaEIsS0FBS2tCLE1BQU1aLEVBQU9XLEdBQ25CRixFQUFLRSxFQUFNWixLQUFTVSxFQUNwQkMsRUFBS0MsRUFBTVgsS0FBUVUsRUFDdkJDLEdBQU9BLElBRVBBLEVBQU1qQixLQUFLYSxJQUFJLEdBQUlKLEdBQVNLLEVBQzVCQyxFQUFLZixLQUFLa0IsTUFBTWIsRUFBUVksR0FDeEJELEVBQUtoQixLQUFLa0IsTUFBTVosRUFBT1csR0FDbkJGLEVBQUtFLEVBQU1aLEtBQVNVLEVBQ3BCQyxFQUFLQyxFQUFNWCxLQUFRVSxHQUVyQkEsRUFBS0QsR0FBTSxJQUFPUixHQUFTQSxFQUFRLEVBQVVILEVBQVNDLEVBQU9DLEVBQWMsRUFBUkMsR0FDaEUsQ0FBQ1EsRUFBSUMsRUFBSUMsRUFDbEIsQ0FtQk8sU0FBU0UsRUFBY2QsRUFBT0MsRUFBTUMsR0FFekMsT0FBT0gsRUFET0MsR0FBU0EsRUFBdkJDLEdBQVFBLEVBQXNCQyxHQUFTQSxHQUNILEVBQ3RDLENBRU8sU0FBU2EsRUFBU2YsRUFBT0MsRUFBTUMsR0FDTkEsR0FBU0EsRUFDdkMsTUFBTWMsR0FETmYsR0FBUUEsSUFBTUQsR0FBU0EsR0FDT1ksRUFBTUksRUFBVUYsRUFBY2IsRUFBTUQsRUFBT0UsR0FBU1ksRUFBY2QsRUFBT0MsRUFBTUMsR0FDN0csT0FBUWMsR0FBVyxFQUFJLElBQU1KLEVBQU0sRUFBSSxHQUFLQSxFQUFNQSxFQUNwRCxDQ3REZSxTQUFTVCxFQUFJYyxFQUFRQyxHQUNsQyxJQUFJZixFQUNKLFFBQWdCZ0IsSUFBWkQsRUFDRixJQUFLLE1BQU03RSxLQUFTNEUsRUFDTCxNQUFUNUUsSUFDSThELEVBQU05RCxRQUFrQjhFLElBQVJoQixHQUFxQjlELEdBQVNBLEtBQ3BEOEQsRUFBTTlELE9BR0wsQ0FDTCxJQUFJK0UsR0FBUyxFQUNiLElBQUssSUFBSS9FLEtBQVM0RSxFQUNpQyxPQUE1QzVFLEVBQVE2RSxFQUFRN0UsSUFBUytFLEVBQU9ILE1BQzdCZCxFQUFNOUQsUUFBa0I4RSxJQUFSaEIsR0FBcUI5RCxHQUFTQSxLQUNwRDhELEVBQU05RCxFQUdYLENBQ0QsT0FBTzhELENBQ1QsQ0NuQmUsU0FBU2tCLEVBQUlKLEVBQVFDLEdBQ2xDLElBQUlHLEVBQ0osUUFBZ0JGLElBQVpELEVBQ0YsSUFBSyxNQUFNN0UsS0FBUzRFLEVBQ0wsTUFBVDVFLElBQ0lnRixFQUFNaEYsUUFBa0I4RSxJQUFSRSxHQUFxQmhGLEdBQVNBLEtBQ3BEZ0YsRUFBTWhGLE9BR0wsQ0FDTCxJQUFJK0UsR0FBUyxFQUNiLElBQUssSUFBSS9FLEtBQVM0RSxFQUNpQyxPQUE1QzVFLEVBQVE2RSxFQUFRN0UsSUFBUytFLEVBQU9ILE1BQzdCSSxFQUFNaEYsUUFBa0I4RSxJQUFSRSxHQUFxQmhGLEdBQVNBLEtBQ3BEZ0YsRUFBTWhGLEVBR1gsQ0FDRCxPQUFPZ0YsQ0FDVCxDQ2ZlLFNBQVNDLEVBQVlDLEVBQU9DLEVBQUdoRSxFQUFPLEVBQUdVLEVBQVF1RCxJQUFVQyxHQUt4RSxHQUpBRixFQUFJN0IsS0FBS1UsTUFBTW1CLEdBQ2ZoRSxFQUFPbUMsS0FBS1UsTUFBTVYsS0FBS1EsSUFBSSxFQUFHM0MsSUFDOUJVLEVBQVF5QixLQUFLVSxNQUFNVixLQUFLMEIsSUFBSUUsRUFBTTNELE9BQVMsRUFBR00sTUFFeENWLEdBQVFnRSxHQUFLQSxHQUFLdEQsR0FBUSxPQUFPcUQsRUFJdkMsSUFGQUcsT0FBc0JQLElBQVpPLEVBQXdCakMsRUplN0IsU0FBd0JpQyxFQUFVNUUsR0FDdkMsR0FBSTRFLElBQVk1RSxFQUFXLE9BQU8yQyxFQUNsQyxHQUF1QixtQkFBWmlDLEVBQXdCLE1BQU0sSUFBSUMsVUFBVSw2QkFDdkQsTUFBTyxDQUFDNUUsRUFBR0MsS0FDVCxNQUFNUyxFQUFJaUUsRUFBUTNFLEVBQUdDLEdBQ3JCLE9BQUlTLEdBQVcsSUFBTkEsRUFBZ0JBLEdBQ0MsSUFBbEJpRSxFQUFRMUUsRUFBR0EsS0FBK0IsSUFBbEIwRSxFQUFRM0UsRUFBR0EsR0FBUyxDQUV4RCxDSXZCdUQ2RSxDQUFlRixHQUU3RHhELEVBQVFWLEdBQU0sQ0FDbkIsR0FBSVUsRUFBUVYsRUFBTyxJQUFLLENBQ3RCLE1BQU1xRSxFQUFJM0QsRUFBUVYsRUFBTyxFQUNuQnNFLEVBQUlOLEVBQUloRSxFQUFPLEVBQ2Z1RSxFQUFJcEMsS0FBS3FDLElBQUlILEdBQ2JJLEVBQUksR0FBTXRDLEtBQUt1QyxJQUFJLEVBQUlILEVBQUksR0FDM0JJLEVBQUssR0FBTXhDLEtBQUtDLEtBQUttQyxFQUFJRSxHQUFLSixFQUFJSSxHQUFLSixJQUFNQyxFQUFJRCxFQUFJLEVBQUksR0FBSyxFQUFJLEdBR3hFUCxFQUFZQyxFQUFPQyxFQUZIN0IsS0FBS1EsSUFBSTNDLEVBQU1tQyxLQUFLVSxNQUFNbUIsRUFBSU0sRUFBSUcsRUFBSUosRUFBSU0sSUFDekN4QyxLQUFLMEIsSUFBSW5ELEVBQU95QixLQUFLVSxNQUFNbUIsR0FBS0ssRUFBSUMsR0FBS0csRUFBSUosRUFBSU0sSUFDekJULEVBQzFDLENBRUQsTUFBTVUsRUFBSWIsRUFBTUMsR0FDaEIsSUFBSXZELEVBQUlULEVBQ0o2RSxFQUFJbkUsRUFLUixJQUhBb0UsRUFBS2YsRUFBTy9ELEVBQU1nRSxHQUNkRSxFQUFRSCxFQUFNckQsR0FBUWtFLEdBQUssR0FBR0UsRUFBS2YsRUFBTy9ELEVBQU1VLEdBRTdDRCxFQUFJb0UsR0FBRyxDQUVaLElBREFDLEVBQUtmLEVBQU90RCxFQUFHb0UsS0FBTXBFLElBQUtvRSxFQUNuQlgsRUFBUUgsRUFBTXRELEdBQUltRSxHQUFLLEtBQUtuRSxFQUNuQyxLQUFPeUQsRUFBUUgsRUFBTWMsR0FBSUQsR0FBSyxLQUFLQyxDQUNwQyxDQUUrQixJQUE1QlgsRUFBUUgsRUFBTS9ELEdBQU80RSxHQUFVRSxFQUFLZixFQUFPL0QsRUFBTTZFLE1BQzlDQSxFQUFHQyxFQUFLZixFQUFPYyxFQUFHbkUsSUFFckJtRSxHQUFLYixJQUFHaEUsRUFBTzZFLEVBQUksR0FDbkJiLEdBQUthLElBQUduRSxFQUFRbUUsRUFBSSxFQUN6QixDQUVELE9BQU9kLENBQ1QsQ0FFQSxTQUFTZSxFQUFLZixFQUFPdEQsRUFBR29FLEdBQ3RCLE1BQU1ELEVBQUliLEVBQU10RCxHQUNoQnNELEVBQU10RCxHQUFLc0QsRUFBTWMsR0FDakJkLEVBQU1jLEdBQUtELENBQ2IsQ0NsRGUsU0FBU0csRUFBT3RCLEVBQVFDLEdBQ3JDLE9DTWEsU0FBa0JELEVBQVF1QixFQUFHdEIsR0FFMUMsR0FEQUQsRUFBU3dCLGFBQWFDLEtSTmpCLFVBQWtCekIsRUFBUUMsR0FDL0IsUUFBZ0JDLElBQVpELEVBQ0YsSUFBSyxJQUFJN0UsS0FBUzRFLEVBQ0gsTUFBVDVFLElBQWtCQSxHQUFTQSxJQUFVQSxVQUNqQ0EsT0FHTCxDQUNMLElBQUkrRSxHQUFTLEVBQ2IsSUFBSyxJQUFJL0UsS0FBUzRFLEVBQ2lDLE9BQTVDNUUsRUFBUTZFLEVBQVE3RSxJQUFTK0UsRUFBT0gsTUFBcUI1RSxHQUFTQSxJQUFVQSxVQUNyRUEsRUFHWCxDQUNILENRVDZCc0csQ0FBUTFCLEVBQVFDLEtBQ3JDVyxFQUFJWixFQUFPckQsVUFBV2dGLE1BQU1KLEdBQUtBLEdBQXZDLENBQ0EsR0FBSUEsR0FBSyxHQUFLWCxFQUFJLEVBQUcsT0FBT1IsRUFBSUosR0FDaEMsR0FBSXVCLEdBQUssRUFBRyxPQUFPckMsRUFBSWMsR0FDdkIsSUFBSVksRUFDQTVELEdBQUs0RCxFQUFJLEdBQUtXLEVBQ2RLLEVBQUtsRCxLQUFLVSxNQUFNcEMsR0FDaEI2RSxFQUFTM0MsRUFBSW1CLEVBQVlMLEVBQVE0QixHQUFJRSxTQUFTLEVBQUdGLEVBQUssSUFFMUQsT0FBT0MsR0FETXpCLEVBQUlKLEVBQU84QixTQUFTRixFQUFLLElBQ1pDLElBQVc3RSxFQUFJNEUsRUFSUyxDQVNwRCxDRGpCU0csQ0FBUy9CLEVBQVEsR0FBS0MsRUFDL0IsQ0VKZSxTQUFTK0IsRUFBTWpELEVBQU9DLEVBQU0zRCxHQUN6QzBELEdBQVNBLEVBQU9DLEdBQVFBLEVBQU0zRCxHQUFRdUYsRUFBSXFCLFVBQVV0RixRQUFVLEdBQUtxQyxFQUFPRCxFQUFPQSxFQUFRLEVBQUcsR0FBSzZCLEVBQUksRUFBSSxHQUFLdkYsRUFNOUcsSUFKQSxJQUFJMkIsR0FBSyxFQUNMNEQsRUFBb0QsRUFBaERsQyxLQUFLUSxJQUFJLEVBQUdSLEtBQUt3RCxNQUFNbEQsRUFBT0QsR0FBUzFELElBQzNDMkcsRUFBUSxJQUFJRyxNQUFNdkIsS0FFYjVELEVBQUk0RCxHQUNYb0IsRUFBTWhGLEdBQUsrQixFQUFRL0IsRUFBSTNCLEVBR3pCLE9BQU8yRyxDQUNULENDWmUsU0FBU0ksRUFBSXBDLEVBQVFDLEdBQ2xDLElBQUltQyxFQUFNLEVBQ1YsUUFBZ0JsQyxJQUFaRCxFQUNGLElBQUssSUFBSTdFLEtBQVM0RSxHQUNaNUUsR0FBU0EsS0FDWGdILEdBQU9oSCxPQUdOLENBQ0wsSUFBSStFLEdBQVMsRUFDYixJQUFLLElBQUkvRSxLQUFTNEUsR0FDWjVFLEdBQVM2RSxFQUFRN0UsSUFBUytFLEVBQU9ILE1BQ25Db0MsR0FBT2hILEVBR1osQ0FDRCxPQUFPZ0gsQ0FDVCxDQ2pCZSxTQUFRQyxFQUFDN0YsR0FDdEIsT0FBT0EsQ0FDVCxDQ0FBLElBQUk4RixFQUFNLEVBQ05yRixFQUFRLEVBQ1JzRixFQUFTLEVBQ1RoRyxFQUFPLEVBQ1BpRyxFQUFVLEtBRWQsU0FBU0MsRUFBV2pHLEdBQ2xCLE1BQU8sYUFBZUEsRUFBSSxLQUM1QixDQUVBLFNBQVNrRyxFQUFXQyxHQUNsQixNQUFPLGVBQWlCQSxFQUFJLEdBQzlCLENBRUEsU0FBU0MsRUFBT0MsR0FDZCxPQUFPaEcsSUFBTWdHLEVBQU1oRyxFQUNyQixDQUVBLFNBQVNFLEVBQU84RixFQUFPQyxHQUdyQixPQUZBQSxFQUFTcEUsS0FBS1EsSUFBSSxFQUFHMkQsRUFBTUUsWUFBdUIsRUFBVEQsR0FBYyxFQUNuREQsRUFBTWpELFVBQVNrRCxFQUFTcEUsS0FBS2tCLE1BQU1rRCxJQUNoQ2pHLElBQU1nRyxFQUFNaEcsR0FBS2lHLENBQzFCLENBRUEsU0FBU0UsSUFDUCxPQUFRbkYsS0FBS29GLE1BQ2YsQ0FFQSxTQUFTQyxFQUFLQyxFQUFRTixHQUNwQixJQUFJTyxFQUFnQixHQUNoQkMsRUFBYSxLQUNiQyxFQUFhLEtBQ2JDLEVBQWdCLEVBQ2hCQyxFQUFnQixFQUNoQkMsRUFBYyxFQUNkWCxFQUEyQixvQkFBWFksUUFBMEJBLE9BQU9DLGlCQUFtQixFQUFJLEVBQUksR0FDNUVwRCxFQUFJNEMsSUFBV2IsR0FBT2EsSUFBVzVHLEdBQVEsRUFBSSxFQUM3Q0MsRUFBSTJHLElBQVc1RyxHQUFRNEcsSUFBV2xHLEVBQVEsSUFBTSxJQUNoRDJHLEVBQVlULElBQVdiLEdBQU9hLElBQVdaLEVBQVNFLEVBQWFDLEVBRW5FLFNBQVNRLEVBQUtXLEdBQ1osSUFBSTdELEVBQXVCLE1BQWRxRCxFQUFzQlIsRUFBTWlCLE1BQVFqQixFQUFNaUIsTUFBTWxJLE1BQU1pSCxFQUFPTyxHQUFpQlAsRUFBTWtCLFNBQVlWLEVBQ3pHVyxFQUF1QixNQUFkVixFQUFzQlQsRUFBTVMsV0FBYVQsRUFBTVMsV0FBVzFILE1BQU1pSCxFQUFPTyxHQUFpQmEsRUFBWVgsRUFDN0dZLEVBQVV4RixLQUFLUSxJQUFJcUUsRUFBZSxHQUFLRSxFQUN2Q3pCLEVBQVFhLEVBQU1iLFFBQ2RtQyxHQUFVbkMsRUFBTSxHQUFLYyxFQUNyQnNCLEdBQVVwQyxFQUFNQSxFQUFNckYsT0FBUyxHQUFLbUcsRUFDcEN1QixHQUFZeEIsRUFBTUUsVUFBWWhHLEVBQVM2RixHQUFRQyxFQUFNeUIsT0FBUXhCLEdBQzdEeUIsRUFBWVYsRUFBUVUsVUFBWVYsRUFBUVUsWUFBY1YsRUFDdERXLEVBQU9ELEVBQVVFLFVBQVUsV0FBV0MsS0FBSyxDQUFDLE9BQzVDQyxFQUFPSixFQUFVRSxVQUFVLFNBQVNDLEtBQUsxRSxFQUFRNkMsR0FBTytCLFFBQ3hEQyxFQUFXRixFQUFLRyxPQUNoQkMsRUFBWUosRUFBS0ssUUFBUUMsT0FBTyxLQUFLQyxLQUFLLFFBQVMsUUFDbkRDLEVBQU9SLEVBQUtTLE9BQU8sUUFDbkJDLEVBQU9WLEVBQUtTLE9BQU8sUUFFdkJaLEVBQU9BLEVBQUtjLE1BQU1kLEVBQUtRLFFBQVFPLE9BQU8sT0FBUSxTQUN6Q0wsS0FBSyxRQUFTLFVBQ2RBLEtBQUssU0FBVSxpQkFFcEJQLEVBQU9BLEVBQUtXLE1BQU1QLEdBRWxCSSxFQUFPQSxFQUFLRyxNQUFNUCxFQUFVRSxPQUFPLFFBQzlCQyxLQUFLLFNBQVUsZ0JBQ2ZBLEtBQUsxSSxFQUFJLElBQUsrRCxFQUFJZ0QsSUFFdkI4QixFQUFPQSxFQUFLQyxNQUFNUCxFQUFVRSxPQUFPLFFBQzlCQyxLQUFLLE9BQVEsZ0JBQ2JBLEtBQUsxSSxFQUFHK0QsRUFBSTJELEdBQ1pnQixLQUFLLEtBQU0vQixJQUFXYixFQUFNLE1BQVFhLElBQVdaLEVBQVMsU0FBVyxXQUVwRXNCLElBQVlVLElBQ2RDLEVBQU9BLEVBQUtnQixXQUFXM0IsR0FDdkJjLEVBQU9BLEVBQUthLFdBQVczQixHQUN2QnNCLEVBQU9BLEVBQUtLLFdBQVczQixHQUN2QndCLEVBQU9BLEVBQUtHLFdBQVczQixHQUV2QmdCLEVBQVdBLEVBQVNXLFdBQVczQixHQUMxQnFCLEtBQUssVUFBVzFDLEdBQ2hCMEMsS0FBSyxhQUFhLFNBQVNySSxHQUFLLE9BQU80SSxTQUFTNUksRUFBSXdILEVBQVN4SCxJQUFNK0csRUFBVS9HLEVBQUlpRyxHQUFVakYsS0FBSzZILGFBQWEsWUFBYSxJQUUvSFgsRUFDS0csS0FBSyxVQUFXMUMsR0FDaEIwQyxLQUFLLGFBQWEsU0FBU3JJLEdBQUssSUFBSTBFLEVBQUkxRCxLQUFLOEgsV0FBVzFDLE9BQVEsT0FBT1csR0FBV3JDLEdBQUtrRSxTQUFTbEUsRUFBSUEsRUFBRTFFLElBQU0wRSxFQUFJOEMsRUFBU3hILElBQU1pRyxFQUFVLEtBR2hKK0IsRUFBU2UsU0FFVHBCLEVBQ0tVLEtBQUssSUFBSy9CLElBQVc1RyxHQUFRNEcsSUFBV2xHLEVBQ2xDdUcsRUFBZ0IsSUFBTWpELEVBQUlpRCxFQUFnQixJQUFNVyxFQUFTLElBQU1yQixFQUFTLElBQU1zQixFQUFTLElBQU03RCxFQUFJaUQsRUFBZ0IsSUFBTVYsRUFBUyxJQUFNcUIsRUFBUyxJQUFNQyxFQUNySlosRUFBZ0IsSUFBTVcsRUFBUyxJQUFNNUQsRUFBSWlELEVBQWdCLElBQU1WLEVBQVMsSUFBTXNCLEVBQVMsSUFBTTdELEVBQUlpRCxFQUFnQixJQUFNVyxFQUFTLElBQU1yQixFQUFTLElBQU1zQixHQUVoS08sRUFDS08sS0FBSyxVQUFXLEdBQ2hCQSxLQUFLLGFBQWEsU0FBU3JJLEdBQUssT0FBTytHLEVBQVVTLEVBQVN4SCxHQUFLaUcsRUFBVSxJQUU5RXFDLEVBQ0tELEtBQUsxSSxFQUFJLElBQUsrRCxFQUFJZ0QsR0FFdkI4QixFQUNLSCxLQUFLMUksRUFBRytELEVBQUkyRCxHQUNabUIsS0FBS3JCLEdBRVZPLEVBQVVzQixPQUFPN0MsR0FDWmtDLEtBQUssT0FBUSxRQUNiQSxLQUFLLFlBQWEsSUFDbEJBLEtBQUssY0FBZSxjQUNwQkEsS0FBSyxjQUFlL0IsSUFBV2xHLEVBQVEsUUFBVWtHLElBQVc1RyxFQUFPLE1BQVEsVUFFaEZnSSxFQUNLdUIsTUFBSyxXQUFhakksS0FBS29GLE9BQVNvQixDQUFXLEdBQ2pELENBMENELE9BeENBbkIsRUFBS0wsTUFBUSxTQUFTa0QsR0FDcEIsT0FBTzlELFVBQVV0RixRQUFVa0csRUFBUWtELEVBQUc3QyxHQUFRTCxDQUNsRCxFQUVFSyxFQUFLWSxNQUFRLFdBQ1gsT0FBT1YsRUFBZ0JqQixNQUFNVixLQUFLUSxXQUFZaUIsQ0FDbEQsRUFFRUEsRUFBS0UsY0FBZ0IsU0FBUzJDLEdBQzVCLE9BQU85RCxVQUFVdEYsUUFBVXlHLEVBQXFCLE1BQUwyQyxFQUFZLEdBQUs1RCxNQUFNVixLQUFLc0UsR0FBSTdDLEdBQVFFLEVBQWM0QyxPQUNyRyxFQUVFOUMsRUFBS0csV0FBYSxTQUFTMEMsR0FDekIsT0FBTzlELFVBQVV0RixRQUFVMEcsRUFBa0IsTUFBTDBDLEVBQVksS0FBTzVELE1BQU1WLEtBQUtzRSxHQUFJN0MsR0FBUUcsR0FBY0EsRUFBVzJDLE9BQy9HLEVBRUU5QyxFQUFLSSxXQUFhLFNBQVN5QyxHQUN6QixPQUFPOUQsVUFBVXRGLFFBQVUyRyxFQUFheUMsRUFBRzdDLEdBQVFJLENBQ3ZELEVBRUVKLEVBQUsrQyxTQUFXLFNBQVNGLEdBQ3ZCLE9BQU85RCxVQUFVdEYsUUFBVTRHLEVBQWdCQyxHQUFpQnVDLEVBQUc3QyxHQUFRSyxDQUMzRSxFQUVFTCxFQUFLSyxjQUFnQixTQUFTd0MsR0FDNUIsT0FBTzlELFVBQVV0RixRQUFVNEcsR0FBaUJ3QyxFQUFHN0MsR0FBUUssQ0FDM0QsRUFFRUwsRUFBS00sY0FBZ0IsU0FBU3VDLEdBQzVCLE9BQU85RCxVQUFVdEYsUUFBVTZHLEdBQWlCdUMsRUFBRzdDLEdBQVFNLENBQzNELEVBRUVOLEVBQUtPLFlBQWMsU0FBU3NDLEdBQzFCLE9BQU85RCxVQUFVdEYsUUFBVThHLEdBQWVzQyxFQUFHN0MsR0FBUU8sQ0FDekQsRUFFRVAsRUFBS0osT0FBUyxTQUFTaUQsR0FDckIsT0FBTzlELFVBQVV0RixRQUFVbUcsR0FBVWlELEVBQUc3QyxHQUFRSixDQUNwRCxFQUVTSSxDQUNULENBVU8sU0FBU2dELEVBQVdyRCxHQUN6QixPQUFPSyxFQUFLWCxFQUFRTSxFQUN0QixDQUVPLFNBQVNzRCxFQUFTdEQsR0FDdkIsT0FBT0ssRUFBSzNHLEVBQU1zRyxFQUNwQixDQzdLQSxJQUFJdUQsRUFBTyxDQUFDaEwsTUFBTyxRQUVuQixTQUFTaUwsSUFDUCxJQUFLLElBQXlDbEYsRUFBckNuRSxFQUFJLEVBQUc0RCxFQUFJcUIsVUFBVXRGLE9BQVFvSixFQUFJLENBQUEsRUFBTy9JLEVBQUk0RCxJQUFLNUQsRUFBRyxDQUMzRCxLQUFNbUUsRUFBSWMsVUFBVWpGLEdBQUssS0FBUW1FLEtBQUs0RSxHQUFNLFFBQVFPLEtBQUtuRixHQUFJLE1BQU0sSUFBSW9GLE1BQU0saUJBQW1CcEYsR0FDaEc0RSxFQUFFNUUsR0FBSyxFQUNSLENBQ0QsT0FBTyxJQUFJcUYsRUFBU1QsRUFDdEIsQ0FFQSxTQUFTUyxFQUFTVCxHQUNoQmxJLEtBQUtrSSxFQUFJQSxDQUNYLENBb0RBLFNBQVM5SCxFQUFJd0ksRUFBTUMsR0FDakIsSUFBSyxJQUE0QkMsRUFBeEIzSixFQUFJLEVBQUc0RCxFQUFJNkYsRUFBSzlKLE9BQVdLLEVBQUk0RCxJQUFLNUQsRUFDM0MsSUFBSzJKLEVBQUlGLEVBQUt6SixJQUFJMEosT0FBU0EsRUFDekIsT0FBT0MsRUFBRXZMLEtBR2YsQ0FFQSxTQUFTNEMsRUFBSXlJLEVBQU1DLEVBQU1FLEdBQ3ZCLElBQUssSUFBSTVKLEVBQUksRUFBRzRELEVBQUk2RixFQUFLOUosT0FBUUssRUFBSTRELElBQUs1RCxFQUN4QyxHQUFJeUosRUFBS3pKLEdBQUcwSixPQUFTQSxFQUFNLENBQ3pCRCxFQUFLekosR0FBS29KLEVBQU1LLEVBQU9BLEVBQUtULE1BQU0sRUFBR2hKLEdBQUc2SixPQUFPSixFQUFLVCxNQUFNaEosRUFBSSxJQUM5RCxLQUNELENBR0gsT0FEZ0IsTUFBWjRKLEdBQWtCSCxFQUFLSyxLQUFLLENBQUNKLEtBQU1BLEVBQU10TCxNQUFPd0wsSUFDN0NILENBQ1QsQ0ExREFELEVBQVNPLFVBQVlWLEVBQVNVLFVBQVksQ0FDeEN6SixZQUFha0osRUFDYlEsR0FBSSxTQUFTQyxFQUFVTCxHQUNyQixJQUVJekYsRUFkMkIrRixFQVkzQm5CLEVBQUlsSSxLQUFLa0ksRUFDVG9CLEdBYjJCRCxFQWFPbkIsR0FBZmtCLEVBQVcsSUFabkJHLE9BQU9DLE1BQU0sU0FBU0MsS0FBSSxTQUFTbkcsR0FDbEQsSUFBSXVGLEVBQU8sR0FBSTFKLEVBQUltRSxFQUFFb0csUUFBUSxLQUU3QixHQURJdkssR0FBSyxJQUFHMEosRUFBT3ZGLEVBQUU2RSxNQUFNaEosRUFBSSxHQUFJbUUsRUFBSUEsRUFBRTZFLE1BQU0sRUFBR2hKLElBQzlDbUUsSUFBTStGLEVBQU1NLGVBQWVyRyxHQUFJLE1BQU0sSUFBSW9GLE1BQU0saUJBQW1CcEYsR0FDdEUsTUFBTyxDQUFDc0YsS0FBTXRGLEVBQUd1RixLQUFNQSxFQUMzQixLQVNRMUosR0FBSyxFQUNMNEQsRUFBSXVHLEVBQUV4SyxPQUdWLEtBQUlzRixVQUFVdEYsT0FBUyxHQUF2QixDQU9BLEdBQWdCLE1BQVppSyxHQUF3QyxtQkFBYkEsRUFBeUIsTUFBTSxJQUFJTCxNQUFNLHFCQUF1QkssR0FDL0YsT0FBUzVKLEVBQUk0RCxHQUNYLEdBQUlPLEdBQUs4RixFQUFXRSxFQUFFbkssSUFBSXlKLEtBQU1WLEVBQUU1RSxHQUFLbkQsRUFBSStILEVBQUU1RSxHQUFJOEYsRUFBU1AsS0FBTUUsUUFDM0QsR0FBZ0IsTUFBWkEsRUFBa0IsSUFBS3pGLEtBQUs0RSxFQUFHQSxFQUFFNUUsR0FBS25ELEVBQUkrSCxFQUFFNUUsR0FBSThGLEVBQVNQLEtBQU0sTUFHMUUsT0FBTzdJLElBVk4sQ0FGQyxPQUFTYixFQUFJNEQsT0FBUU8sR0FBSzhGLEVBQVdFLEVBQUVuSyxJQUFJeUosUUFBVXRGLEVBQUlsRCxFQUFJOEgsRUFBRTVFLEdBQUk4RixFQUFTUCxPQUFRLE9BQU92RixDQWE5RixFQUNEbUQsS0FBTSxXQUNKLElBQUlBLEVBQU8sQ0FBRSxFQUFFeUIsRUFBSWxJLEtBQUtrSSxFQUN4QixJQUFLLElBQUk1RSxLQUFLNEUsRUFBR3pCLEVBQUtuRCxHQUFLNEUsRUFBRTVFLEdBQUc2RSxRQUNoQyxPQUFPLElBQUlRLEVBQVNsQyxFQUNyQixFQUNEbUQsS0FBTSxTQUFTaEIsRUFBTWlCLEdBQ25CLElBQUs5RyxFQUFJcUIsVUFBVXRGLE9BQVMsR0FBSyxFQUFHLElBQUssSUFBZ0NpRSxFQUFHTyxFQUEvQndHLEVBQU8sSUFBSXhGLE1BQU12QixHQUFJNUQsRUFBSSxFQUFTQSxFQUFJNEQsSUFBSzVELEVBQUcySyxFQUFLM0ssR0FBS2lGLFVBQVVqRixFQUFJLEdBQ25ILElBQUthLEtBQUtrSSxFQUFFeUIsZUFBZWYsR0FBTyxNQUFNLElBQUlGLE1BQU0saUJBQW1CRSxHQUNyRSxJQUF1QnpKLEVBQUksRUFBRzRELEdBQXpCTyxFQUFJdEQsS0FBS2tJLEVBQUVVLElBQW9COUosT0FBUUssRUFBSTRELElBQUs1RCxFQUFHbUUsRUFBRW5FLEdBQUc1QixNQUFNUSxNQUFNOEwsRUFBTUMsRUFDaEYsRUFDRC9MLE1BQU8sU0FBUzZLLEVBQU1pQixFQUFNQyxHQUMxQixJQUFLOUosS0FBS2tJLEVBQUV5QixlQUFlZixHQUFPLE1BQU0sSUFBSUYsTUFBTSxpQkFBbUJFLEdBQ3JFLElBQUssSUFBSXRGLEVBQUl0RCxLQUFLa0ksRUFBRVUsR0FBT3pKLEVBQUksRUFBRzRELEVBQUlPLEVBQUV4RSxPQUFRSyxFQUFJNEQsSUFBSzVELEVBQUdtRSxFQUFFbkUsR0FBRzVCLE1BQU1RLE1BQU04TCxFQUFNQyxFQUNwRixHQzdESSxJQUFJQyxFQUFRLCtCQUVKQyxFQUFBLENBQ2JDLElBQUssNkJBQ0xGLE1BQU9BLEVBQ1BHLE1BQU8sK0JBQ1BDLElBQUssdUNBQ0xDLE1BQU8saUNDTE0sU0FBUUMsRUFBQ3hCLEdBQ3RCLElBQUl5QixFQUFTekIsR0FBUSxHQUFJMUosRUFBSW1MLEVBQU9aLFFBQVEsS0FFNUMsT0FESXZLLEdBQUssR0FBcUMsV0FBL0JtTCxFQUFTekIsRUFBS1YsTUFBTSxFQUFHaEosTUFBaUIwSixFQUFPQSxFQUFLVixNQUFNaEosRUFBSSxJQUN0RTZLLEVBQVdMLGVBQWVXLEdBQVUsQ0FBQ0MsTUFBT1AsRUFBV00sR0FBU0UsTUFBTzNCLEdBQVFBLENBQ3hGLENDSEEsU0FBUzRCLEVBQWU1QixHQUN0QixPQUFPLFdBQ0wsSUFBSTZCLEVBQVcxSyxLQUFLMkssY0FDaEJDLEVBQU01SyxLQUFLNkssYUFDZixPQUFPRCxJQUFRYixHQUFTVyxFQUFTSSxnQkFBZ0JELGVBQWlCZCxFQUM1RFcsRUFBU0ssY0FBY2xDLEdBQ3ZCNkIsRUFBU00sZ0JBQWdCSixFQUFLL0IsRUFDeEMsQ0FDQSxDQUVBLFNBQVNvQyxFQUFhQyxHQUNwQixPQUFPLFdBQ0wsT0FBT2xMLEtBQUsySyxjQUFjSyxnQkFBZ0JFLEVBQVNYLE1BQU9XLEVBQVNWLE1BQ3ZFLENBQ0EsQ0FFZSxTQUFRVyxFQUFDdEMsR0FDdEIsSUFBSXFDLEVBQVdiLEVBQVV4QixHQUN6QixPQUFRcUMsRUFBU1YsTUFDWFMsRUFDQVIsR0FBZ0JTLEVBQ3hCLENDeEJBLFNBQVNFLElBQVMsQ0FFSCxTQUFRQyxFQUFDQSxHQUN0QixPQUFtQixNQUFaQSxFQUFtQkQsRUFBTyxXQUMvQixPQUFPcEwsS0FBS3NMLGNBQWNELEVBQzlCLENBQ0EsQ0NOQSxTQUFTRSxJQUNQLE1BQU8sRUFDVCxDQUVlLFNBQVFDLEVBQUNILEdBQ3RCLE9BQW1CLE1BQVpBLEVBQW1CRSxFQUFRLFdBQ2hDLE9BQU92TCxLQUFLeUwsaUJBQWlCSixFQUNqQyxDQUNBLENDSkEsU0FBU0ssRUFBU25FLEdBQ2hCLE9BQU8sV0FDTCxPQ0FXLFNBQWU1SSxHQUM1QixPQUFZLE1BQUxBLEVBQVksR0FBSzJGLE1BQU1xSCxRQUFRaE4sR0FBS0EsRUFBSTJGLE1BQU1WLEtBQUtqRixFQUM1RCxDREZXOEQsQ0FBTThFLEVBQU94SixNQUFNaUMsS0FBTW9FLFdBQ3BDLENBQ0EsQ0VSZSxTQUFRd0gsR0FBQ1AsR0FDdEIsT0FBTyxXQUNMLE9BQU9yTCxLQUFLNkwsUUFBUVIsRUFDeEIsQ0FDQSxDQUVPLFNBQVNTLEdBQWFULEdBQzNCLE9BQU8sU0FBU1UsR0FDZCxPQUFPQSxFQUFLRixRQUFRUixFQUN4QixDQUNBLENDUkEsSUFBSVcsR0FBTzFILE1BQU00RSxVQUFVOEMsS0FRM0IsU0FBU0MsS0FDUCxPQUFPak0sS0FBS2tNLGlCQUNkLENDVkEsSUFBSWxFLEdBQVMxRCxNQUFNNEUsVUFBVWxCLE9BRTdCLFNBQVNtRSxLQUNQLE9BQU83SCxNQUFNVixLQUFLNUQsS0FBS21NLFNBQ3pCLENDTmUsU0FBUUMsR0FBQ0MsR0FDdEIsT0FBTyxJQUFJL0gsTUFBTStILEVBQU92TixPQUMxQixDQ0tPLFNBQVN3TixHQUFVQyxFQUFRQyxHQUNoQ3hNLEtBQUsySyxjQUFnQjRCLEVBQU81QixjQUM1QjNLLEtBQUs2SyxhQUFlMEIsRUFBTzFCLGFBQzNCN0ssS0FBS3lNLE1BQVEsS0FDYnpNLEtBQUswTSxRQUFVSCxFQUNmdk0sS0FBSzJNLFNBQVdILENBQ2xCLENDVEEsU0FBU0ksR0FBVUwsRUFBUU0sRUFBTzFGLEVBQU9rRixFQUFRcEYsRUFBTUosR0FTckQsSUFSQSxJQUNJa0YsRUFEQTVNLEVBQUksRUFFSjJOLEVBQWNELEVBQU0vTixPQUNwQmlPLEVBQWFsRyxFQUFLL0gsT0FLZkssRUFBSTROLElBQWM1TixHQUNuQjRNLEVBQU9jLEVBQU0xTixLQUNmNE0sRUFBS1ksU0FBVzlGLEVBQUsxSCxHQUNyQmtOLEVBQU9sTixHQUFLNE0sR0FFWjVFLEVBQU1oSSxHQUFLLElBQUltTixHQUFVQyxFQUFRMUYsRUFBSzFILElBSzFDLEtBQU9BLEVBQUkyTixJQUFlM04sR0FDcEI0TSxFQUFPYyxFQUFNMU4sTUFDZjhILEVBQUs5SCxHQUFLNE0sRUFHaEIsQ0FFQSxTQUFTaUIsR0FBUVQsRUFBUU0sRUFBTzFGLEVBQU9rRixFQUFRcEYsRUFBTUosRUFBTWxILEdBQ3pELElBQUlSLEVBQ0E0TSxFQUtBa0IsRUFKQUMsRUFBaUIsSUFBSTFOLElBQ3JCc04sRUFBY0QsRUFBTS9OLE9BQ3BCaU8sRUFBYWxHLEVBQUsvSCxPQUNsQnFPLEVBQVksSUFBSTdJLE1BQU13SSxHQUsxQixJQUFLM04sRUFBSSxFQUFHQSxFQUFJMk4sSUFBZTNOLEdBQ3pCNE0sRUFBT2MsRUFBTTFOLE1BQ2ZnTyxFQUFVaE8sR0FBSzhOLEVBQVd0TixFQUFJaUssS0FBS21DLEVBQU1BLEVBQUtZLFNBQVV4TixFQUFHME4sR0FBUyxHQUNoRUssRUFBZTVNLElBQUkyTSxHQUNyQmhHLEVBQUs5SCxHQUFLNE0sRUFFVm1CLEVBQWUvTSxJQUFJOE0sRUFBVWxCLElBUW5DLElBQUs1TSxFQUFJLEVBQUdBLEVBQUk0TixJQUFjNU4sRUFDNUI4TixFQUFXdE4sRUFBSWlLLEtBQUsyQyxFQUFRMUYsRUFBSzFILEdBQUlBLEVBQUcwSCxHQUFRLElBQzVDa0YsRUFBT21CLEVBQWU5TSxJQUFJNk0sS0FDNUJaLEVBQU9sTixHQUFLNE0sRUFDWkEsRUFBS1ksU0FBVzlGLEVBQUsxSCxHQUNyQitOLEVBQWUxTSxPQUFPeU0sSUFFdEI5RixFQUFNaEksR0FBSyxJQUFJbU4sR0FBVUMsRUFBUTFGLEVBQUsxSCxJQUsxQyxJQUFLQSxFQUFJLEVBQUdBLEVBQUkyTixJQUFlM04sR0FDeEI0TSxFQUFPYyxFQUFNMU4sS0FBUStOLEVBQWU5TSxJQUFJK00sRUFBVWhPLE1BQVE0TSxJQUM3RDlFLEVBQUs5SCxHQUFLNE0sRUFHaEIsQ0FFQSxTQUFTUyxHQUFNVCxHQUNiLE9BQU9BLEVBQUtZLFFBQ2QsQ0ErQ0EsU0FBU1MsR0FBVXZHLEdBQ2pCLE1BQXVCLGlCQUFUQSxHQUFxQixXQUFZQSxFQUMzQ0EsRUFDQXZDLE1BQU1WLEtBQUtpRCxFQUNqQixDQzFHQSxTQUFTN0ksR0FBVUMsRUFBR0MsR0FDcEIsT0FBT0QsRUFBSUMsR0FBSyxFQUFJRCxFQUFJQyxFQUFJLEVBQUlELEdBQUtDLEVBQUksRUFBSUMsR0FDL0MsQ0NyQkEsU0FBU2tQLEdBQVd4RSxHQUNsQixPQUFPLFdBQ0w3SSxLQUFLc04sZ0JBQWdCekUsRUFDekIsQ0FDQSxDQUVBLFNBQVMwRSxHQUFhckMsR0FDcEIsT0FBTyxXQUNMbEwsS0FBS3dOLGtCQUFrQnRDLEVBQVNYLE1BQU9XLEVBQVNWLE1BQ3BELENBQ0EsQ0FFQSxTQUFTaUQsR0FBYTVFLEVBQU10TCxHQUMxQixPQUFPLFdBQ0x5QyxLQUFLME4sYUFBYTdFLEVBQU10TCxFQUM1QixDQUNBLENBRUEsU0FBU29RLEdBQWV6QyxFQUFVM04sR0FDaEMsT0FBTyxXQUNMeUMsS0FBSzROLGVBQWUxQyxFQUFTWCxNQUFPVyxFQUFTVixNQUFPak4sRUFDeEQsQ0FDQSxDQUVBLFNBQVNzUSxHQUFhaEYsRUFBTXRMLEdBQzFCLE9BQU8sV0FDTCxJQUFJdVEsRUFBSXZRLEVBQU1RLE1BQU1pQyxLQUFNb0UsV0FDakIsTUFBTDBKLEVBQVc5TixLQUFLc04sZ0JBQWdCekUsR0FDL0I3SSxLQUFLME4sYUFBYTdFLEVBQU1pRixFQUNqQyxDQUNBLENBRUEsU0FBU0MsR0FBZTdDLEVBQVUzTixHQUNoQyxPQUFPLFdBQ0wsSUFBSXVRLEVBQUl2USxFQUFNUSxNQUFNaUMsS0FBTW9FLFdBQ2pCLE1BQUwwSixFQUFXOU4sS0FBS3dOLGtCQUFrQnRDLEVBQVNYLE1BQU9XLEVBQVNWLE9BQzFEeEssS0FBSzROLGVBQWUxQyxFQUFTWCxNQUFPVyxFQUFTVixNQUFPc0QsRUFDN0QsQ0FDQSxDQ3hDZSxTQUFRRSxHQUFDakMsR0FDdEIsT0FBUUEsRUFBS3BCLGVBQWlCb0IsRUFBS3BCLGNBQWNxRCxhQUN6Q2pDLEVBQUtyQixVQUFZcUIsR0FDbEJBLEVBQUtpQyxXQUNkLENDRkEsU0FBU0MsR0FBWXBGLEdBQ25CLE9BQU8sV0FDTDdJLEtBQUtrTyxNQUFNQyxlQUFldEYsRUFDOUIsQ0FDQSxDQUVBLFNBQVN1RixHQUFjdkYsRUFBTXRMLEVBQU84USxHQUNsQyxPQUFPLFdBQ0xyTyxLQUFLa08sTUFBTUksWUFBWXpGLEVBQU10TCxFQUFPOFEsRUFDeEMsQ0FDQSxDQUVBLFNBQVNFLEdBQWMxRixFQUFNdEwsRUFBTzhRLEdBQ2xDLE9BQU8sV0FDTCxJQUFJUCxFQUFJdlEsRUFBTVEsTUFBTWlDLEtBQU1vRSxXQUNqQixNQUFMMEosRUFBVzlOLEtBQUtrTyxNQUFNQyxlQUFldEYsR0FDcEM3SSxLQUFLa08sTUFBTUksWUFBWXpGLEVBQU1pRixFQUFHTyxFQUN6QyxDQUNBLENBV08sU0FBU0csR0FBV3pDLEVBQU1sRCxHQUMvQixPQUFPa0QsRUFBS21DLE1BQU1PLGlCQUFpQjVGLElBQzVCbUYsR0FBWWpDLEdBQU0yQyxpQkFBaUIzQyxFQUFNLE1BQU0wQyxpQkFBaUI1RixFQUN6RSxDQ2xDQSxTQUFTOEYsR0FBZTlGLEdBQ3RCLE9BQU8sa0JBQ0U3SSxLQUFLNkksRUFDaEIsQ0FDQSxDQUVBLFNBQVMrRixHQUFpQi9GLEVBQU10TCxHQUM5QixPQUFPLFdBQ0x5QyxLQUFLNkksR0FBUXRMLENBQ2pCLENBQ0EsQ0FFQSxTQUFTc1IsR0FBaUJoRyxFQUFNdEwsR0FDOUIsT0FBTyxXQUNMLElBQUl1USxFQUFJdlEsRUFBTVEsTUFBTWlDLEtBQU1vRSxXQUNqQixNQUFMMEosU0FBa0I5TixLQUFLNkksR0FDdEI3SSxLQUFLNkksR0FBUWlGLENBQ3RCLENBQ0EsQ0NsQkEsU0FBU2dCLEdBQVdDLEdBQ2xCLE9BQU9BLEVBQU94RixPQUFPQyxNQUFNLFFBQzdCLENBRUEsU0FBU3dGLEdBQVVqRCxHQUNqQixPQUFPQSxFQUFLaUQsV0FBYSxJQUFJQyxHQUFVbEQsRUFDekMsQ0FFQSxTQUFTa0QsR0FBVWxELEdBQ2pCL0wsS0FBS2tQLE1BQVFuRCxFQUNiL0wsS0FBS21QLE9BQVNMLEdBQVcvQyxFQUFLbEUsYUFBYSxVQUFZLEdBQ3pELENBc0JBLFNBQVN1SCxHQUFXckQsRUFBTXNELEdBRXhCLElBREEsSUFBSUMsRUFBT04sR0FBVWpELEdBQU81TSxHQUFLLEVBQUc0RCxFQUFJc00sRUFBTXZRLFNBQ3JDSyxFQUFJNEQsR0FBR3VNLEVBQUtDLElBQUlGLEVBQU1sUSxHQUNqQyxDQUVBLFNBQVNxUSxHQUFjekQsRUFBTXNELEdBRTNCLElBREEsSUFBSUMsRUFBT04sR0FBVWpELEdBQU81TSxHQUFLLEVBQUc0RCxFQUFJc00sRUFBTXZRLFNBQ3JDSyxFQUFJNEQsR0FBR3VNLEVBQUt2SCxPQUFPc0gsRUFBTWxRLEdBQ3BDLENBRUEsU0FBU3NRLEdBQVlKLEdBQ25CLE9BQU8sV0FDTEQsR0FBV3BQLEtBQU1xUCxFQUNyQixDQUNBLENBRUEsU0FBU0ssR0FBYUwsR0FDcEIsT0FBTyxXQUNMRyxHQUFjeFAsS0FBTXFQLEVBQ3hCLENBQ0EsQ0FFQSxTQUFTTSxHQUFnQk4sRUFBTzlSLEdBQzlCLE9BQU8sWUFDSkEsRUFBTVEsTUFBTWlDLEtBQU1vRSxXQUFhZ0wsR0FBYUksSUFBZXhQLEtBQU1xUCxFQUN0RSxDQUNBLENDM0RBLFNBQVNPLEtBQ1A1UCxLQUFLNlAsWUFBYyxFQUNyQixDQUVBLFNBQVNDLEdBQWF2UyxHQUNwQixPQUFPLFdBQ0x5QyxLQUFLNlAsWUFBY3RTLENBQ3ZCLENBQ0EsQ0FFQSxTQUFTd1MsR0FBYXhTLEdBQ3BCLE9BQU8sV0FDTCxJQUFJdVEsRUFBSXZRLEVBQU1RLE1BQU1pQyxLQUFNb0UsV0FDMUJwRSxLQUFLNlAsWUFBbUIsTUFBTC9CLEVBQVksR0FBS0EsQ0FDeEMsQ0FDQSxDQ2ZBLFNBQVNrQyxLQUNQaFEsS0FBS2lRLFVBQVksRUFDbkIsQ0FFQSxTQUFTQyxHQUFhM1MsR0FDcEIsT0FBTyxXQUNMeUMsS0FBS2lRLFVBQVkxUyxDQUNyQixDQUNBLENBRUEsU0FBUzRTLEdBQWE1UyxHQUNwQixPQUFPLFdBQ0wsSUFBSXVRLEVBQUl2USxFQUFNUSxNQUFNaUMsS0FBTW9FLFdBQzFCcEUsS0FBS2lRLFVBQWlCLE1BQUxuQyxFQUFZLEdBQUtBLENBQ3RDLENBQ0EsQ0NmQSxTQUFTc0MsS0FDSHBRLEtBQUtxUSxhQUFhclEsS0FBSzhILFdBQVd3SSxZQUFZdFEsS0FDcEQsQ0NGQSxTQUFTdVEsS0FDSHZRLEtBQUt3USxpQkFBaUJ4USxLQUFLOEgsV0FBVzJJLGFBQWF6USxLQUFNQSxLQUFLOEgsV0FBVzRJLFdBQy9FLENDQ0EsU0FBU0MsS0FDUCxPQUFPLElBQ1QsQ0NMQSxTQUFTNUksS0FDUCxJQUFJd0UsRUFBU3ZNLEtBQUs4SCxXQUNkeUUsR0FBUUEsRUFBT3FFLFlBQVk1USxLQUNqQyxDQ0hBLFNBQVM2USxLQUNQLElBQUlDLEVBQVE5USxLQUFLK1EsV0FBVSxHQUFReEUsRUFBU3ZNLEtBQUs4SCxXQUNqRCxPQUFPeUUsRUFBU0EsRUFBT2tFLGFBQWFLLEVBQU85USxLQUFLcVEsYUFBZVMsQ0FDakUsQ0FFQSxTQUFTRSxLQUNQLElBQUlGLEVBQVE5USxLQUFLK1EsV0FBVSxHQUFPeEUsRUFBU3ZNLEtBQUs4SCxXQUNoRCxPQUFPeUUsRUFBU0EsRUFBT2tFLGFBQWFLLEVBQU85USxLQUFLcVEsYUFBZVMsQ0FDakUsQ0NNQSxTQUFTRyxHQUFTN0gsR0FDaEIsT0FBTyxXQUNMLElBQUlELEVBQUtuSixLQUFLa1IsS0FDZCxHQUFLL0gsRUFBTCxDQUNBLElBQUssSUFBa0NnSSxFQUE5QjVOLEVBQUksRUFBR3BFLEdBQUssRUFBRzZELEVBQUltRyxFQUFHckssT0FBV3lFLEVBQUlQLElBQUtPLEVBQzdDNE4sRUFBSWhJLEVBQUc1RixHQUFNNkYsRUFBU1IsTUFBUXVJLEVBQUV2SSxPQUFTUSxFQUFTUixNQUFTdUksRUFBRXRJLE9BQVNPLEVBQVNQLEtBR2pGTSxJQUFLaEssR0FBS2dTLEVBRlZuUixLQUFLb1Isb0JBQW9CRCxFQUFFdkksS0FBTXVJLEVBQUVFLFNBQVVGLEVBQUVHLFdBSzdDblMsRUFBR2dLLEVBQUdySyxPQUFTSyxTQUNUYSxLQUFLa1IsSUFURCxDQVVwQixDQUNBLENBRUEsU0FBU0ssR0FBTW5JLEVBQVU3TCxFQUFPK1QsR0FDOUIsT0FBTyxXQUNMLElBQW9CSCxFQUFoQmhJLEVBQUtuSixLQUFLa1IsS0FBU0csRUFoQzNCLFNBQXlCQSxHQUN2QixPQUFPLFNBQVNHLEdBQ2RILEVBQVN6SCxLQUFLNUosS0FBTXdSLEVBQU94UixLQUFLMk0sU0FDcEMsQ0FDQSxDQTRCc0M4RSxDQUFnQmxVLEdBQ2xELEdBQUk0TCxFQUFJLElBQUssSUFBSTVGLEVBQUksRUFBR1AsRUFBSW1HLEVBQUdySyxPQUFReUUsRUFBSVAsSUFBS08sRUFDOUMsSUFBSzROLEVBQUloSSxFQUFHNUYsSUFBSXFGLE9BQVNRLEVBQVNSLE1BQVF1SSxFQUFFdEksT0FBU08sRUFBU1AsS0FJNUQsT0FIQTdJLEtBQUtvUixvQkFBb0JELEVBQUV2SSxLQUFNdUksRUFBRUUsU0FBVUYsRUFBRUcsU0FDL0N0UixLQUFLMFIsaUJBQWlCUCxFQUFFdkksS0FBTXVJLEVBQUVFLFNBQVdBLEVBQVVGLEVBQUVHLFFBQVVBLFFBQ2pFSCxFQUFFNVQsTUFBUUEsR0FJZHlDLEtBQUswUixpQkFBaUJ0SSxFQUFTUixLQUFNeUksRUFBVUMsR0FDL0NILEVBQUksQ0FBQ3ZJLEtBQU1RLEVBQVNSLEtBQU1DLEtBQU1PLEVBQVNQLEtBQU10TCxNQUFPQSxFQUFPOFQsU0FBVUEsRUFBVUMsUUFBU0EsR0FDckZuSSxFQUNBQSxFQUFHRixLQUFLa0ksR0FESm5SLEtBQUtrUixLQUFPLENBQUNDLEVBRTFCLENBQ0EsQ0M1Q0EsU0FBU1EsR0FBYzVGLEVBQU1uRCxFQUFNZ0osR0FDakMsSUFBSS9MLEVBQVNtSSxHQUFZakMsR0FDckJ5RixFQUFRM0wsRUFBT2dNLFlBRUUsbUJBQVZMLEVBQ1RBLEVBQVEsSUFBSUEsRUFBTTVJLEVBQU1nSixJQUV4QkosRUFBUTNMLEVBQU82RSxTQUFTb0gsWUFBWSxTQUNoQ0YsR0FBUUosRUFBTU8sVUFBVW5KLEVBQU1nSixFQUFPSSxRQUFTSixFQUFPSyxZQUFhVCxFQUFNVSxPQUFTTixFQUFPTSxRQUN2RlYsRUFBTU8sVUFBVW5KLEdBQU0sR0FBTyxJQUdwQ21ELEVBQUs0RixjQUFjSCxFQUNyQixDQUVBLFNBQVNXLEdBQWlCdkosRUFBTWdKLEdBQzlCLE9BQU8sV0FDTCxPQUFPRCxHQUFjM1IsS0FBTTRJLEVBQU1nSixFQUNyQyxDQUNBLENBRUEsU0FBU1EsR0FBaUJ4SixFQUFNZ0osR0FDOUIsT0FBTyxXQUNMLE9BQU9ELEdBQWMzUixLQUFNNEksRUFBTWdKLEVBQU83VCxNQUFNaUMsS0FBTW9FLFdBQ3hELENBQ0EsQ2hCWkFrSSxHQUFVcEQsVUFBWSxDQUNwQnpKLFlBQWE2TSxHQUNiZ0UsWUFBYSxTQUFTK0IsR0FBUyxPQUFPclMsS0FBSzBNLFFBQVErRCxhQUFhNEIsRUFBT3JTLEtBQUt5TSxNQUFTLEVBQ3JGZ0UsYUFBYyxTQUFTNEIsRUFBTzVVLEdBQVEsT0FBT3VDLEtBQUswTSxRQUFRK0QsYUFBYTRCLEVBQU81VSxFQUFRLEVBQ3RGNk4sY0FBZSxTQUFTRCxHQUFZLE9BQU9yTCxLQUFLME0sUUFBUXBCLGNBQWNELEVBQVksRUFDbEZJLGlCQUFrQixTQUFTSixHQUFZLE9BQU9yTCxLQUFLME0sUUFBUWpCLGlCQUFpQkosRUFBWSxHT1AxRjRELEdBQVUvRixVQUFZLENBQ3BCcUcsSUFBSyxTQUFTMUcsR0FDSjdJLEtBQUttUCxPQUFPekYsUUFBUWIsR0FDcEIsSUFDTjdJLEtBQUttUCxPQUFPbEcsS0FBS0osR0FDakI3SSxLQUFLa1AsTUFBTXhCLGFBQWEsUUFBUzFOLEtBQUttUCxPQUFPbUQsS0FBSyxNQUVyRCxFQUNEdkssT0FBUSxTQUFTYyxHQUNmLElBQUkxSixFQUFJYSxLQUFLbVAsT0FBT3pGLFFBQVFiLEdBQ3hCMUosR0FBSyxJQUNQYSxLQUFLbVAsT0FBT29ELE9BQU9wVCxFQUFHLEdBQ3RCYSxLQUFLa1AsTUFBTXhCLGFBQWEsUUFBUzFOLEtBQUttUCxPQUFPbUQsS0FBSyxNQUVyRCxFQUNERSxTQUFVLFNBQVMzSixHQUNqQixPQUFPN0ksS0FBS21QLE9BQU96RixRQUFRYixJQUFTLENBQ3JDLEdVS0ksSUFBSTRKLEdBQU8sQ0FBQyxNQUVaLFNBQVNDLEdBQVVDLEVBQVFDLEdBQ2hDNVMsS0FBSzZTLFFBQVVGLEVBQ2YzUyxLQUFLOFMsU0FBV0YsQ0FDbEIsQ0FFQSxTQUFTbE0sS0FDUCxPQUFPLElBQUlnTSxHQUFVLENBQUMsQ0FBQ2hJLFNBQVNJLGtCQUFtQjJILEdBQ3JELENDMUNlLFNBQVFsTCxHQUFDOEQsR0FDdEIsTUFBMkIsaUJBQWJBLEVBQ1IsSUFBSXFILEdBQVUsQ0FBQyxDQUFDaEksU0FBU1ksY0FBY0QsS0FBYSxDQUFDWCxTQUFTSSxrQkFDOUQsSUFBSTRILEdBQVUsQ0FBQyxDQUFDckgsSUFBWW9ILEdBQ3BDLENDTmUsU0FBQU0sR0FBU3RULEVBQWF1VCxFQUFTOUosR0FDNUN6SixFQUFZeUosVUFBWThKLEVBQVE5SixVQUFZQSxFQUM1Q0EsRUFBVXpKLFlBQWNBLENBQzFCLENBRU8sU0FBU3dULEdBQU8xRyxFQUFRMkcsR0FDN0IsSUFBSWhLLEVBQVlwSixPQUFPcVQsT0FBTzVHLEVBQU9yRCxXQUNyQyxJQUFLLElBQUl2SixLQUFPdVQsRUFBWWhLLEVBQVV2SixHQUFPdVQsRUFBV3ZULEdBQ3hELE9BQU91SixDQUNULENDUE8sU0FBU2tLLEtBQVUsQ0hnRDFCVixHQUFVeEosVUFBWXhDLEdBQVV3QyxVQUFZLENBQzFDekosWUFBYWlULEdBQ2JuTCxPSWpEYSxTQUFTQSxHQUNBLG1CQUFYQSxJQUF1QkEsRUFBUzhELEVBQVM5RCxJQUVwRCxJQUFLLElBQUlvTCxFQUFTM1MsS0FBSzZTLFFBQVM3UCxFQUFJMlAsRUFBTzdULE9BQVF1VSxFQUFZLElBQUkvTyxNQUFNdEIsR0FBSU8sRUFBSSxFQUFHQSxFQUFJUCxJQUFLTyxFQUMzRixJQUFLLElBQWlGd0ksRUFBTXVILEVBQW5GekcsRUFBUThGLEVBQU9wUCxHQUFJUixFQUFJOEosRUFBTS9OLE9BQVF5VSxFQUFXRixFQUFVOVAsR0FBSyxJQUFJZSxNQUFNdkIsR0FBbUI1RCxFQUFJLEVBQUdBLEVBQUk0RCxJQUFLNUQsR0FDOUc0TSxFQUFPYyxFQUFNMU4sTUFBUW1VLEVBQVUvTCxFQUFPcUMsS0FBS21DLEVBQU1BLEVBQUtZLFNBQVV4TixFQUFHME4sTUFDbEUsYUFBY2QsSUFBTXVILEVBQVEzRyxTQUFXWixFQUFLWSxVQUNoRDRHLEVBQVNwVSxHQUFLbVUsR0FLcEIsT0FBTyxJQUFJWixHQUFVVyxFQUFXclQsS0FBSzhTLFNBQ3ZDLEVKcUNFbE0sVXZCM0NhLFNBQVNXLEdBQ1lBLEVBQVosbUJBQVhBLEVBQWdDbUUsRUFBU25FLEdBQ3RDaUUsRUFBWWpFLEdBRTFCLElBQUssSUFBSW9MLEVBQVMzUyxLQUFLNlMsUUFBUzdQLEVBQUkyUCxFQUFPN1QsT0FBUXVVLEVBQVksR0FBSVQsRUFBVSxHQUFJclAsRUFBSSxFQUFHQSxFQUFJUCxJQUFLTyxFQUMvRixJQUFLLElBQXlDd0ksRUFBckNjLEVBQVE4RixFQUFPcFAsR0FBSVIsRUFBSThKLEVBQU0vTixPQUFjSyxFQUFJLEVBQUdBLEVBQUk0RCxJQUFLNUQsR0FDOUQ0TSxFQUFPYyxFQUFNMU4sTUFDZmtVLEVBQVVwSyxLQUFLMUIsRUFBT3FDLEtBQUttQyxFQUFNQSxFQUFLWSxTQUFVeE4sRUFBRzBOLElBQ25EK0YsRUFBUTNKLEtBQUs4QyxJQUtuQixPQUFPLElBQUkyRyxHQUFVVyxFQUFXVCxFQUNsQyxFdUI4QkVZLFlwQnhDYSxTQUFTQyxHQUN0QixPQUFPelQsS0FBS3VILE9BQWdCLE1BQVRrTSxFQUFnQnhILEdBWHJDLFNBQW1Cd0gsR0FDakIsT0FBTyxXQUNMLE9BQU96SCxHQUFLcEMsS0FBSzVKLEtBQUttTSxTQUFVc0gsRUFDcEMsQ0FDQSxDQVFRQyxDQUEyQixtQkFBVkQsRUFBdUJBLEVBQVEzSCxHQUFhMkgsSUFDckUsRW9Cc0NFRSxlbkJ6Q2EsU0FBU0YsR0FDdEIsT0FBT3pULEtBQUs0RyxVQUFtQixNQUFUNk0sRUFBZ0J0SCxHQVB4QyxTQUF3QnNILEdBQ3RCLE9BQU8sV0FDTCxPQUFPekwsR0FBTzRCLEtBQUs1SixLQUFLbU0sU0FBVXNILEVBQ3RDLENBQ0EsQ0FJUUcsQ0FBZ0MsbUJBQVZILEVBQXVCQSxFQUFRM0gsR0FBYTJILElBQzFFLEVtQnVDRXpMLE9LckRhLFNBQVN5TCxHQUNELG1CQUFWQSxJQUFzQkEsRUFBUTdILEdBQVE2SCxJQUVqRCxJQUFLLElBQUlkLEVBQVMzUyxLQUFLNlMsUUFBUzdQLEVBQUkyUCxFQUFPN1QsT0FBUXVVLEVBQVksSUFBSS9PLE1BQU10QixHQUFJTyxFQUFJLEVBQUdBLEVBQUlQLElBQUtPLEVBQzNGLElBQUssSUFBdUV3SSxFQUFuRWMsRUFBUThGLEVBQU9wUCxHQUFJUixFQUFJOEosRUFBTS9OLE9BQVF5VSxFQUFXRixFQUFVOVAsR0FBSyxHQUFVcEUsRUFBSSxFQUFHQSxFQUFJNEQsSUFBSzVELEdBQzNGNE0sRUFBT2MsRUFBTTFOLEtBQU9zVSxFQUFNN0osS0FBS21DLEVBQU1BLEVBQUtZLFNBQVV4TixFQUFHME4sSUFDMUQwRyxFQUFTdEssS0FBSzhDLEdBS3BCLE9BQU8sSUFBSTJHLEdBQVVXLEVBQVdyVCxLQUFLOFMsU0FDdkMsRUwwQ0VqTSxLaEJxQmEsU0FBU3RKLEVBQU9vQyxHQUM3QixJQUFLeUUsVUFBVXRGLE9BQVEsT0FBT3dGLE1BQU1WLEtBQUs1RCxLQUFNd00sSUFFL0MsSUFBSXFILEVBQU9sVSxFQUFNcU4sR0FBVUosR0FDdkJnRyxFQUFVNVMsS0FBSzhTLFNBQ2ZILEVBQVMzUyxLQUFLNlMsUUFFRyxtQkFBVnRWLElBQXNCQSxFc0JyRnBCLFNBQVNvQixHQUN0QixPQUFPLFdBQ0wsT0FBT0EsQ0FDWCxDQUNBLEN0QmlGMkNtVixDQUFTdlcsSUFFbEQsSUFBSyxJQUFJeUYsRUFBSTJQLEVBQU83VCxPQUFRdU4sRUFBUyxJQUFJL0gsTUFBTXRCLEdBQUltRSxFQUFRLElBQUk3QyxNQUFNdEIsR0FBSWlFLEVBQU8sSUFBSTNDLE1BQU10QixHQUFJTyxFQUFJLEVBQUdBLEVBQUlQLElBQUtPLEVBQUcsQ0FDL0csSUFBSWdKLEVBQVNxRyxFQUFRclAsR0FDakJzSixFQUFROEYsRUFBT3BQLEdBQ2Z1SixFQUFjRCxFQUFNL04sT0FDcEIrSCxFQUFPdUcsR0FBVTdQLEVBQU1xTSxLQUFLMkMsRUFBUUEsR0FBVUEsRUFBT0ksU0FBVXBKLEVBQUdxUCxJQUNsRTdGLEVBQWFsRyxFQUFLL0gsT0FDbEJpVixFQUFhNU0sRUFBTTVELEdBQUssSUFBSWUsTUFBTXlJLEdBQ2xDaUgsRUFBYzNILEVBQU85SSxHQUFLLElBQUllLE1BQU15SSxHQUd4QzhHLEVBQUt0SCxFQUFRTSxFQUFPa0gsRUFBWUMsRUFGaEIvTSxFQUFLMUQsR0FBSyxJQUFJZSxNQUFNd0ksR0FFb0JqRyxFQUFNbEgsR0FLOUQsSUFBSyxJQUFvQnNVLEVBQVV4VyxFQUExQnNHLEVBQUssRUFBR25DLEVBQUssRUFBbUJtQyxFQUFLZ0osSUFBY2hKLEVBQzFELEdBQUlrUSxFQUFXRixFQUFXaFEsR0FBSyxDQUU3QixJQURJQSxHQUFNbkMsSUFBSUEsRUFBS21DLEVBQUssS0FDZnRHLEVBQU91VyxFQUFZcFMsT0FBVUEsRUFBS21MLElBQzNDa0gsRUFBU3hILE1BQVFoUCxHQUFRLElBQzFCLENBRUosQ0FLRCxPQUhBNE8sRUFBUyxJQUFJcUcsR0FBVXJHLEVBQVF1RyxJQUN4QnNCLE9BQVMvTSxFQUNoQmtGLEVBQU84SCxNQUFRbE4sRUFDUm9GLENBQ1QsRWdCekRFbEYsTWpCdkRhLFdBQ2IsT0FBTyxJQUFJdUwsR0FBVTFTLEtBQUtrVSxRQUFVbFUsS0FBSzZTLFFBQVFwSixJQUFJMkMsSUFBU3BNLEtBQUs4UyxTQUNyRSxFaUJzREU3TCxLT3hEYSxXQUNiLE9BQU8sSUFBSXlMLEdBQVUxUyxLQUFLbVUsT0FBU25VLEtBQUs2UyxRQUFRcEosSUFBSTJDLElBQVNwTSxLQUFLOFMsU0FDcEUsRVB1REVSLEtRNURhLFNBQVM4QixFQUFTQyxFQUFVQyxHQUN6QyxJQUFJbk4sRUFBUW5ILEtBQUttSCxRQUFTa0YsRUFBU3JNLEtBQU1pSCxFQUFPakgsS0FBS2lILE9BWXJELE1BWHVCLG1CQUFabU4sR0FDVGpOLEVBQVFpTixFQUFRak4sTUFDTEEsRUFBUUEsRUFBTVQsYUFFekJTLEVBQVFBLEVBQU1DLE9BQU9nTixFQUFVLElBRWpCLE1BQVpDLElBQ0ZoSSxFQUFTZ0ksRUFBU2hJLE1BQ05BLEVBQVNBLEVBQU8zRixhQUVoQixNQUFWNE4sRUFBZ0JyTixFQUFLYyxTQUFldU0sRUFBT3JOLEdBQ3hDRSxHQUFTa0YsRUFBU2xGLEVBQU1NLE1BQU00RSxHQUFRdEYsUUFBVXNGLENBQ3pELEVSK0NFNUUsTVMzRGEsU0FBU3pCLEdBR3RCLElBRkEsSUFBSVUsRUFBWVYsRUFBUVUsVUFBWVYsRUFBUVUsWUFBY1YsRUFFakR1TyxFQUFVdlUsS0FBSzZTLFFBQVMyQixFQUFVOU4sRUFBVW1NLFFBQVM0QixFQUFLRixFQUFRelYsT0FBUTRWLEVBQUtGLEVBQVExVixPQUFRa0UsRUFBSW5DLEtBQUswQixJQUFJa1MsRUFBSUMsR0FBS0MsRUFBUyxJQUFJclEsTUFBTW1RLEdBQUtsUixFQUFJLEVBQUdBLEVBQUlQLElBQUtPLEVBQ3BLLElBQUssSUFBbUd3SSxFQUEvRjZJLEVBQVNMLEVBQVFoUixHQUFJc1IsRUFBU0wsRUFBUWpSLEdBQUlSLEVBQUk2UixFQUFPOVYsT0FBUTJJLEVBQVFrTixFQUFPcFIsR0FBSyxJQUFJZSxNQUFNdkIsR0FBVTVELEVBQUksRUFBR0EsRUFBSTRELElBQUs1RCxHQUN4SDRNLEVBQU82SSxFQUFPelYsSUFBTTBWLEVBQU8xVixNQUM3QnNJLEVBQU10SSxHQUFLNE0sR0FLakIsS0FBT3hJLEVBQUlrUixJQUFNbFIsRUFDZm9SLEVBQU9wUixHQUFLZ1IsRUFBUWhSLEdBR3RCLE9BQU8sSUFBSW1QLEdBQVVpQyxFQUFRM1UsS0FBSzhTLFNBQ3BDLEVUNENFcE0sVUFoQkYsV0FDRSxPQUFPMUcsSUFDVCxFQWVFK0csTVUvRGEsV0FFYixJQUFLLElBQUk0TCxFQUFTM1MsS0FBSzZTLFFBQVN0UCxHQUFLLEVBQUdQLEVBQUkyUCxFQUFPN1QsU0FBVXlFLEVBQUlQLEdBQy9ELElBQUssSUFBOEQrSSxFQUExRGMsRUFBUThGLEVBQU9wUCxHQUFJcEUsRUFBSTBOLEVBQU0vTixPQUFTLEVBQUdyQixFQUFPb1AsRUFBTTFOLEtBQVlBLEdBQUssSUFDMUU0TSxFQUFPYyxFQUFNMU4sTUFDWDFCLEdBQTZDLEVBQXJDc08sRUFBSytJLHdCQUF3QnJYLElBQVdBLEVBQUtxSyxXQUFXMkksYUFBYTFFLEVBQU10TyxHQUN2RkEsRUFBT3NPLEdBS2IsT0FBTy9MLElBQ1QsRVZvREUrVSxLZjlEYSxTQUFTblMsR0FHdEIsU0FBU29TLEVBQVkvVyxFQUFHQyxHQUN0QixPQUFPRCxHQUFLQyxFQUFJMEUsRUFBUTNFLEVBQUUwTyxTQUFVek8sRUFBRXlPLFdBQWExTyxHQUFLQyxDQUN6RCxDQUpJMEUsSUFBU0EsRUFBVTVFLElBTXhCLElBQUssSUFBSTJVLEVBQVMzUyxLQUFLNlMsUUFBUzdQLEVBQUkyUCxFQUFPN1QsT0FBUW1XLEVBQWEsSUFBSTNRLE1BQU10QixHQUFJTyxFQUFJLEVBQUdBLEVBQUlQLElBQUtPLEVBQUcsQ0FDL0YsSUFBSyxJQUFtRndJLEVBQS9FYyxFQUFROEYsRUFBT3BQLEdBQUlSLEVBQUk4SixFQUFNL04sT0FBUW9XLEVBQVlELEVBQVcxUixHQUFLLElBQUllLE1BQU12QixHQUFVNUQsRUFBSSxFQUFHQSxFQUFJNEQsSUFBSzVELEdBQ3hHNE0sRUFBT2MsRUFBTTFOLE1BQ2YrVixFQUFVL1YsR0FBSzRNLEdBR25CbUosRUFBVUgsS0FBS0MsRUFDaEIsQ0FFRCxPQUFPLElBQUl0QyxHQUFVdUMsRUFBWWpWLEtBQUs4UyxVQUFVL0wsT0FDbEQsRWU4Q0U2QyxLV2pFYSxXQUNiLElBQUliLEVBQVczRSxVQUFVLEdBR3pCLE9BRkFBLFVBQVUsR0FBS3BFLEtBQ2YrSSxFQUFTaEwsTUFBTSxLQUFNcUcsV0FDZHBFLElBQ1QsRVg2REVtVixNWWxFYSxXQUNiLE9BQU83USxNQUFNVixLQUFLNUQsS0FDcEIsRVppRUUrTCxLYW5FYSxXQUViLElBQUssSUFBSTRHLEVBQVMzUyxLQUFLNlMsUUFBU3RQLEVBQUksRUFBR1AsRUFBSTJQLEVBQU83VCxPQUFReUUsRUFBSVAsSUFBS08sRUFDakUsSUFBSyxJQUFJc0osRUFBUThGLEVBQU9wUCxHQUFJcEUsRUFBSSxFQUFHNEQsRUFBSThKLEVBQU0vTixPQUFRSyxFQUFJNEQsSUFBSzVELEVBQUcsQ0FDL0QsSUFBSTRNLEVBQU9jLEVBQU0xTixHQUNqQixHQUFJNE0sRUFBTSxPQUFPQSxDQUNsQixDQUdILE9BQU8sSUFDVCxFYjBERXFKLEtjcEVhLFdBQ2IsSUFBSUEsRUFBTyxFQUNYLElBQUssTUFBTXJKLEtBQVEvTCxPQUFRb1YsRUFDM0IsT0FBT0EsQ0FDVCxFZGlFRTdKLE1lckVhLFdBQ2IsT0FBUXZMLEtBQUsrTCxNQUNmLEVmb0VFOUQsS2dCdEVhLFNBQVNjLEdBRXRCLElBQUssSUFBSTRKLEVBQVMzUyxLQUFLNlMsUUFBU3RQLEVBQUksRUFBR1AsRUFBSTJQLEVBQU83VCxPQUFReUUsRUFBSVAsSUFBS08sRUFDakUsSUFBSyxJQUFnRHdJLEVBQTVDYyxFQUFROEYsRUFBT3BQLEdBQUlwRSxFQUFJLEVBQUc0RCxFQUFJOEosRUFBTS9OLE9BQWNLLEVBQUk0RCxJQUFLNUQsR0FDOUQ0TSxFQUFPYyxFQUFNMU4sS0FBSTRKLEVBQVNhLEtBQUttQyxFQUFNQSxFQUFLWSxTQUFVeE4sRUFBRzBOLEdBSS9ELE9BQU83TSxJQUNULEVoQjhERXFILEtkN0JhLFNBQVN3QixFQUFNdEwsR0FDNUIsSUFBSTJOLEVBQVdiLEVBQVV4QixHQUV6QixHQUFJekUsVUFBVXRGLE9BQVMsRUFBRyxDQUN4QixJQUFJaU4sRUFBTy9MLEtBQUsrTCxPQUNoQixPQUFPYixFQUFTVixNQUNWdUIsRUFBS3NKLGVBQWVuSyxFQUFTWCxNQUFPVyxFQUFTVixPQUM3Q3VCLEVBQUtsRSxhQUFhcUQsRUFDekIsQ0FFRCxPQUFPbEwsS0FBS2lJLE1BQWUsTUFBVDFLLEVBQ1gyTixFQUFTVixNQUFRK0MsR0FBZUYsR0FBZ0MsbUJBQVY5UCxFQUN0RDJOLEVBQVNWLE1BQVF1RCxHQUFpQkYsR0FDbEMzQyxFQUFTVixNQUFRbUQsR0FBaUJGLElBQWdCdkMsRUFBVTNOLEdBQ3JFLEVjZ0JFMlEsTVpsRGEsU0FBU3JGLEVBQU10TCxFQUFPOFEsR0FDbkMsT0FBT2pLLFVBQVV0RixPQUFTLEVBQ3BCa0IsS0FBS2lJLE1BQWUsTUFBVDFLLEVBQ0wwUSxHQUErQixtQkFBVjFRLEVBQ3JCZ1IsR0FDQUgsSUFBZXZGLEVBQU10TCxFQUFtQixNQUFaOFEsRUFBbUIsR0FBS0EsSUFDMURHLEdBQVd4TyxLQUFLK0wsT0FBUWxELEVBQ2hDLEVZNENFeU0sU1hyRGEsU0FBU3pNLEVBQU10TCxHQUM1QixPQUFPNkcsVUFBVXRGLE9BQVMsRUFDcEJrQixLQUFLaUksTUFBZSxNQUFUMUssRUFDUG9SLEdBQWtDLG1CQUFWcFIsRUFDeEJzUixHQUNBRCxJQUFrQi9GLEVBQU10TCxJQUM1QnlDLEtBQUsrTCxPQUFPbEQsRUFDcEIsRVcrQ0UwTSxRVmJhLFNBQVMxTSxFQUFNdEwsR0FDNUIsSUFBSThSLEVBQVFQLEdBQVdqRyxFQUFPLElBRTlCLEdBQUl6RSxVQUFVdEYsT0FBUyxFQUFHLENBRXhCLElBREEsSUFBSXdRLEVBQU9OLEdBQVVoUCxLQUFLK0wsUUFBUzVNLEdBQUssRUFBRzRELEVBQUlzTSxFQUFNdlEsU0FDNUNLLEVBQUk0RCxPQUFRdU0sRUFBS2tELFNBQVNuRCxFQUFNbFEsSUFBSyxPQUFPLEVBQ3JELE9BQU8sQ0FDUixDQUVELE9BQU9hLEtBQUtpSSxNQUF1QixtQkFBVjFLLEVBQ25Cb1MsR0FBa0JwUyxFQUNsQmtTLEdBQ0FDLElBQWNMLEVBQU85UixHQUM3QixFVUNFaUssS1QxRGEsU0FBU2pLLEdBQ3RCLE9BQU82RyxVQUFVdEYsT0FDWGtCLEtBQUtpSSxLQUFjLE1BQVQxSyxFQUNOcVMsSUFBK0IsbUJBQVZyUyxFQUNyQndTLEdBQ0FELElBQWN2UyxJQUNsQnlDLEtBQUsrTCxPQUFPOEQsV0FDcEIsRVNvREUyRixLUjNEYSxTQUFTalksR0FDdEIsT0FBTzZHLFVBQVV0RixPQUNYa0IsS0FBS2lJLEtBQWMsTUFBVDFLLEVBQ055UyxJQUErQixtQkFBVnpTLEVBQ3JCNFMsR0FDQUQsSUFBYzNTLElBQ2xCeUMsS0FBSytMLE9BQU9rRSxTQUNwQixFUXFERUcsTVB6RWEsV0FDYixPQUFPcFEsS0FBS2lJLEtBQUttSSxHQUNuQixFT3dFRUcsTU4xRWEsV0FDYixPQUFPdlEsS0FBS2lJLEtBQUtzSSxHQUNuQixFTXlFRW5KLE9pQjdFYSxTQUFTeUIsR0FDdEIsSUFBSXNLLEVBQXlCLG1CQUFUdEssRUFBc0JBLEVBQU9zQyxFQUFRdEMsR0FDekQsT0FBTzdJLEtBQUt1SCxRQUFPLFdBQ2pCLE9BQU92SCxLQUFLc1EsWUFBWTZDLEVBQU9wVixNQUFNaUMsS0FBTW9FLFdBQy9DLEdBQ0EsRWpCeUVFc0QsT0x6RWEsU0FBU21CLEVBQU00TSxHQUM1QixJQUFJdEMsRUFBeUIsbUJBQVR0SyxFQUFzQkEsRUFBT3NDLEVBQVF0QyxHQUNyRHRCLEVBQW1CLE1BQVZrTyxFQUFpQjlFLEdBQWlDLG1CQUFYOEUsRUFBd0JBLEVBQVNwSyxFQUFTb0ssR0FDOUYsT0FBT3pWLEtBQUt1SCxRQUFPLFdBQ2pCLE9BQU92SCxLQUFLeVEsYUFBYTBDLEVBQU9wVixNQUFNaUMsS0FBTW9FLFdBQVltRCxFQUFPeEosTUFBTWlDLEtBQU1vRSxZQUFjLEtBQzdGLEdBQ0EsRUtvRUUyRCxPSjVFYSxXQUNiLE9BQU8vSCxLQUFLaUksS0FBS0YsR0FDbkIsRUkyRUUrSSxNSHhFYSxTQUFTNEUsR0FDdEIsT0FBTzFWLEtBQUt1SCxPQUFPbU8sRUFBTzFFLEdBQXNCSCxHQUNsRCxFR3VFRXJFLE1rQm5GYSxTQUFTalAsR0FDdEIsT0FBTzZHLFVBQVV0RixPQUNYa0IsS0FBS3NWLFNBQVMsV0FBWS9YLEdBQzFCeUMsS0FBSytMLE9BQU9ZLFFBQ3BCLEVsQmdGRXhELEdGcENhLFNBQVNDLEVBQVU3TCxFQUFPK1QsR0FDdkMsSUFBK0NuUyxFQUF5Qm1FLEVBQXBFcVMsRUEzQ04sU0FBd0JBLEdBQ3RCLE9BQU9BLEVBQVVwTSxPQUFPQyxNQUFNLFNBQVNDLEtBQUksU0FBU25HLEdBQ2xELElBQUl1RixFQUFPLEdBQUkxSixFQUFJbUUsRUFBRW9HLFFBQVEsS0FFN0IsT0FESXZLLEdBQUssSUFBRzBKLEVBQU92RixFQUFFNkUsTUFBTWhKLEVBQUksR0FBSW1FLEVBQUlBLEVBQUU2RSxNQUFNLEVBQUdoSixJQUMzQyxDQUFDeUosS0FBTXRGLEVBQUd1RixLQUFNQSxFQUMzQixHQUNBLENBcUNrQitNLENBQWV4TSxFQUFXLElBQVFyRyxFQUFJNFMsRUFBVTdXLE9BRWhFLEtBQUlzRixVQUFVdEYsT0FBUyxHQUF2QixDQWFBLElBREFxSyxFQUFLNUwsRUFBUWdVLEdBQVFOLEdBQ2hCOVIsRUFBSSxFQUFHQSxFQUFJNEQsSUFBSzVELEVBQUdhLEtBQUtpSSxLQUFLa0IsRUFBR3dNLEVBQVV4VyxHQUFJNUIsRUFBTytULElBQzFELE9BQU90UixJQUpOLENBVEMsSUFBSW1KLEVBQUtuSixLQUFLK0wsT0FBT21GLEtBQ3JCLEdBQUkvSCxFQUFJLElBQUssSUFBMEJnSSxFQUF0QjVOLEVBQUksRUFBR1AsRUFBSW1HLEVBQUdySyxPQUFXeUUsRUFBSVAsSUFBS08sRUFDakQsSUFBS3BFLEVBQUksRUFBR2dTLEVBQUloSSxFQUFHNUYsR0FBSXBFLEVBQUk0RCxJQUFLNUQsRUFDOUIsSUFBS21FLEVBQUlxUyxFQUFVeFcsSUFBSXlKLE9BQVN1SSxFQUFFdkksTUFBUXRGLEVBQUV1RixPQUFTc0ksRUFBRXRJLEtBQ3JELE9BQU9zSSxFQUFFNVQsS0FVbkIsRUVtQkVpTCxTRHhEYSxTQUFTSSxFQUFNZ0osR0FDNUIsT0FBTzVSLEtBQUtpSSxNQUF3QixtQkFBWDJKLEVBQ25CUSxHQUNBRCxJQUFrQnZKLEVBQU1nSixHQUNoQyxFQ3FERSxDQUFDaUUsT0FBT0MsVW1CdEZLLFlBQ2IsSUFBSyxJQUFJbkQsRUFBUzNTLEtBQUs2UyxRQUFTdFAsRUFBSSxFQUFHUCxFQUFJMlAsRUFBTzdULE9BQVF5RSxFQUFJUCxJQUFLTyxFQUNqRSxJQUFLLElBQWdEd0ksRUFBNUNjLEVBQVE4RixFQUFPcFAsR0FBSXBFLEVBQUksRUFBRzRELEVBQUk4SixFQUFNL04sT0FBY0ssRUFBSTRELElBQUs1RCxHQUM5RDRNLEVBQU9jLEVBQU0xTixZQUFVNE0sRUFHakMsR2hCRk8sSUFBSWdLLEdBQVMsR0FDVEMsR0FBVyxFQUFJRCxHQUV0QkUsR0FBTSxzQkFDTkMsR0FBTSxvREFDTkMsR0FBTSxxREFDTkMsR0FBUSxxQkFDUkMsR0FBZSxJQUFJQyxPQUFPLFVBQVVMLE1BQU9BLE1BQU9BLFVBQ2xETSxHQUFlLElBQUlELE9BQU8sVUFBVUgsTUFBT0EsTUFBT0EsVUFDbERLLEdBQWdCLElBQUlGLE9BQU8sV0FBV0wsTUFBT0EsTUFBT0EsTUFBT0MsVUFDM0RPLEdBQWdCLElBQUlILE9BQU8sV0FBV0gsTUFBT0EsTUFBT0EsTUFBT0QsVUFDM0RRLEdBQWUsSUFBSUosT0FBTyxVQUFVSixNQUFPQyxNQUFPQSxVQUNsRFEsR0FBZ0IsSUFBSUwsT0FBTyxXQUFXSixNQUFPQyxNQUFPQSxNQUFPRCxVQUUzRFUsR0FBUSxDQUNWQyxVQUFXLFNBQ1hDLGFBQWMsU0FDZEMsS0FBTSxNQUNOQyxXQUFZLFFBQ1pDLE1BQU8sU0FDUEMsTUFBTyxTQUNQQyxPQUFRLFNBQ1JDLE1BQU8sRUFDUEMsZUFBZ0IsU0FDaEJDLEtBQU0sSUFDTkMsV0FBWSxRQUNaQyxNQUFPLFNBQ1BDLFVBQVcsU0FDWEMsVUFBVyxRQUNYQyxXQUFZLFFBQ1pDLFVBQVcsU0FDWEMsTUFBTyxTQUNQQyxlQUFnQixRQUNoQkMsU0FBVSxTQUNWQyxRQUFTLFNBQ1RDLEtBQU0sTUFDTkMsU0FBVSxJQUNWQyxTQUFVLE1BQ1ZDLGNBQWUsU0FDZkMsU0FBVSxTQUNWQyxVQUFXLE1BQ1hDLFNBQVUsU0FDVkMsVUFBVyxTQUNYQyxZQUFhLFFBQ2JDLGVBQWdCLFFBQ2hCQyxXQUFZLFNBQ1pDLFdBQVksU0FDWkMsUUFBUyxRQUNUQyxXQUFZLFNBQ1pDLGFBQWMsUUFDZEMsY0FBZSxRQUNmQyxjQUFlLFFBQ2ZDLGNBQWUsUUFDZkMsY0FBZSxNQUNmQyxXQUFZLFFBQ1pDLFNBQVUsU0FDVkMsWUFBYSxNQUNiQyxRQUFTLFFBQ1RDLFFBQVMsUUFDVEMsV0FBWSxRQUNaQyxVQUFXLFNBQ1hDLFlBQWEsU0FDYkMsWUFBYSxRQUNiQyxRQUFTLFNBQ1RDLFVBQVcsU0FDWEMsV0FBWSxTQUNaQyxLQUFNLFNBQ05DLFVBQVcsU0FDWEMsS0FBTSxRQUNOQyxNQUFPLE1BQ1BDLFlBQWEsU0FDYkMsS0FBTSxRQUNOQyxTQUFVLFNBQ1ZDLFFBQVMsU0FDVEMsVUFBVyxTQUNYQyxPQUFRLFFBQ1JDLE1BQU8sU0FDUEMsTUFBTyxTQUNQQyxTQUFVLFNBQ1ZDLGNBQWUsU0FDZkMsVUFBVyxRQUNYQyxhQUFjLFNBQ2RDLFVBQVcsU0FDWEMsV0FBWSxTQUNaQyxVQUFXLFNBQ1hDLHFCQUFzQixTQUN0QkMsVUFBVyxTQUNYQyxXQUFZLFFBQ1pDLFVBQVcsU0FDWEMsVUFBVyxTQUNYQyxZQUFhLFNBQ2JDLGNBQWUsUUFDZkMsYUFBYyxRQUNkQyxlQUFnQixRQUNoQkMsZUFBZ0IsUUFDaEJDLGVBQWdCLFNBQ2hCQyxZQUFhLFNBQ2JDLEtBQU0sTUFDTkMsVUFBVyxRQUNYQyxNQUFPLFNBQ1BDLFFBQVMsU0FDVEMsT0FBUSxRQUNSQyxpQkFBa0IsUUFDbEJDLFdBQVksSUFDWkMsYUFBYyxTQUNkQyxhQUFjLFFBQ2RDLGVBQWdCLFFBQ2hCQyxnQkFBaUIsUUFDakJDLGtCQUFtQixNQUNuQkMsZ0JBQWlCLFFBQ2pCQyxnQkFBaUIsU0FDakJDLGFBQWMsUUFDZEMsVUFBVyxTQUNYQyxVQUFXLFNBQ1hDLFNBQVUsU0FDVkMsWUFBYSxTQUNiQyxLQUFNLElBQ05DLFFBQVMsU0FDVEMsTUFBTyxRQUNQQyxVQUFXLFFBQ1hDLE9BQVEsU0FDUkMsVUFBVyxTQUNYQyxPQUFRLFNBQ1JDLGNBQWUsU0FDZkMsVUFBVyxTQUNYQyxjQUFlLFNBQ2ZDLGNBQWUsU0FDZkMsV0FBWSxTQUNaQyxVQUFXLFNBQ1hDLEtBQU0sU0FDTkMsS0FBTSxTQUNOQyxLQUFNLFNBQ05DLFdBQVksU0FDWkMsT0FBUSxRQUNSQyxjQUFlLFFBQ2ZDLElBQUssU0FDTEMsVUFBVyxTQUNYQyxVQUFXLFFBQ1hDLFlBQWEsUUFDYkMsT0FBUSxTQUNSQyxXQUFZLFNBQ1pDLFNBQVUsUUFDVkMsU0FBVSxTQUNWQyxPQUFRLFNBQ1JDLE9BQVEsU0FDUkMsUUFBUyxRQUNUQyxVQUFXLFFBQ1hDLFVBQVcsUUFDWEMsVUFBVyxRQUNYQyxLQUFNLFNBQ05DLFlBQWEsTUFDYkMsVUFBVyxRQUNYQyxJQUFLLFNBQ0xDLEtBQU0sTUFDTkMsUUFBUyxTQUNUQyxPQUFRLFNBQ1JDLFVBQVcsUUFDWEMsT0FBUSxTQUNSQyxNQUFPLFNBQ1BDLE1BQU8sU0FDUEMsV0FBWSxTQUNaQyxPQUFRLFNBQ1JDLFlBQWEsVUFrQmYsU0FBU0MsS0FDUCxPQUFPamdCLEtBQUtrZ0IsTUFBTUMsV0FDcEIsQ0FVQSxTQUFTQyxLQUNQLE9BQU9wZ0IsS0FBS2tnQixNQUFNRyxXQUNwQixDQUVlLFNBQVNDLEdBQU1uYSxHQUM1QixJQUFJbkQsRUFBR3VkLEVBRVAsT0FEQXBhLEdBQVVBLEVBQVMsSUFBSW9ELE9BQU9pWCxlQUN0QnhkLEVBQUlvVCxHQUFNcUssS0FBS3RhLEtBQVlvYSxFQUFJdmQsRUFBRSxHQUFHbEUsT0FBUWtFLEVBQUkwZCxTQUFTMWQsRUFBRSxHQUFJLElBQVcsSUFBTnVkLEVBQVVJLEdBQUszZCxHQUMvRSxJQUFOdWQsRUFBVSxJQUFJSyxHQUFLNWQsR0FBSyxFQUFJLEdBQVFBLEdBQUssRUFBSSxJQUFRQSxHQUFLLEVBQUksR0FBWSxJQUFKQSxHQUFpQixHQUFKQSxJQUFZLEVBQVUsR0FBSkEsRUFBVSxHQUN6RyxJQUFOdWQsRUFBVU0sR0FBSzdkLEdBQUssR0FBSyxJQUFNQSxHQUFLLEdBQUssSUFBTUEsR0FBSyxFQUFJLEtBQVcsSUFBSkEsR0FBWSxLQUNyRSxJQUFOdWQsRUFBVU0sR0FBTTdkLEdBQUssR0FBSyxHQUFRQSxHQUFLLEVBQUksSUFBUUEsR0FBSyxFQUFJLEdBQVFBLEdBQUssRUFBSSxJQUFRQSxHQUFLLEVBQUksR0FBWSxJQUFKQSxJQUFrQixHQUFKQSxJQUFZLEVBQVUsR0FBSkEsR0FBWSxLQUNsSixPQUNDQSxFQUFJcVQsR0FBYW9LLEtBQUt0YSxJQUFXLElBQUl5YSxHQUFJNWQsRUFBRSxHQUFJQSxFQUFFLEdBQUlBLEVBQUUsR0FBSSxJQUMzREEsRUFBSXVULEdBQWFrSyxLQUFLdGEsSUFBVyxJQUFJeWEsR0FBVyxJQUFQNWQsRUFBRSxHQUFXLElBQVksSUFBUEEsRUFBRSxHQUFXLElBQVksSUFBUEEsRUFBRSxHQUFXLElBQUssSUFDL0ZBLEVBQUl3VCxHQUFjaUssS0FBS3RhLElBQVcwYSxHQUFLN2QsRUFBRSxHQUFJQSxFQUFFLEdBQUlBLEVBQUUsR0FBSUEsRUFBRSxLQUMzREEsRUFBSXlULEdBQWNnSyxLQUFLdGEsSUFBVzBhLEdBQVksSUFBUDdkLEVBQUUsR0FBVyxJQUFZLElBQVBBLEVBQUUsR0FBVyxJQUFZLElBQVBBLEVBQUUsR0FBVyxJQUFLQSxFQUFFLEtBQy9GQSxFQUFJMFQsR0FBYStKLEtBQUt0YSxJQUFXMmEsR0FBSzlkLEVBQUUsR0FBSUEsRUFBRSxHQUFLLElBQUtBLEVBQUUsR0FBSyxJQUFLLElBQ3BFQSxFQUFJMlQsR0FBYzhKLEtBQUt0YSxJQUFXMmEsR0FBSzlkLEVBQUUsR0FBSUEsRUFBRSxHQUFLLElBQUtBLEVBQUUsR0FBSyxJQUFLQSxFQUFFLElBQ3hFNFQsR0FBTWpOLGVBQWV4RCxHQUFVd2EsR0FBSy9KLEdBQU16USxJQUMvQixnQkFBWEEsRUFBMkIsSUFBSXlhLEdBQUl6aUIsSUFBS0EsSUFBS0EsSUFBSyxHQUNsRCxJQUNSLENBRUEsU0FBU3dpQixHQUFLNWQsR0FDWixPQUFPLElBQUk2ZCxHQUFJN2QsR0FBSyxHQUFLLElBQU1BLEdBQUssRUFBSSxJQUFVLElBQUpBLEVBQVUsRUFDMUQsQ0FFQSxTQUFTOGQsR0FBS0UsRUFBR0MsRUFBRzlpQixFQUFHRCxHQUVyQixPQURJQSxHQUFLLElBQUc4aUIsRUFBSUMsRUFBSTlpQixFQUFJQyxLQUNqQixJQUFJeWlCLEdBQUlHLEVBQUdDLEVBQUc5aUIsRUFBR0QsRUFDMUIsQ0FFTyxTQUFTZ2pCLEdBQVc5UCxHQUV6QixPQURNQSxhQUFhaUMsS0FBUWpDLEVBQUltUCxHQUFNblAsSUFDaENBLEVBRUUsSUFBSXlQLElBRFh6UCxFQUFJQSxFQUFFK08sT0FDV2EsRUFBRzVQLEVBQUU2UCxFQUFHN1AsRUFBRWpULEVBQUdpVCxFQUFFK1AsU0FGakIsSUFBSU4sRUFHckIsQ0FFTyxTQUFTVixHQUFJYSxFQUFHQyxFQUFHOWlCLEVBQUdnakIsR0FDM0IsT0FBNEIsSUFBckI5YyxVQUFVdEYsT0FBZW1pQixHQUFXRixHQUFLLElBQUlILEdBQUlHLEVBQUdDLEVBQUc5aUIsRUFBYyxNQUFYZ2pCLEVBQWtCLEVBQUlBLEVBQ3pGLENBRU8sU0FBU04sR0FBSUcsRUFBR0MsRUFBRzlpQixFQUFHZ2pCLEdBQzNCbGhCLEtBQUsrZ0IsR0FBS0EsRUFDVi9nQixLQUFLZ2hCLEdBQUtBLEVBQ1ZoaEIsS0FBSzlCLEdBQUtBLEVBQ1Y4QixLQUFLa2hCLFNBQVdBLENBQ2xCLENBOEJBLFNBQVNDLEtBQ1AsTUFBTyxJQUFJQyxHQUFJcGhCLEtBQUsrZ0IsS0FBS0ssR0FBSXBoQixLQUFLZ2hCLEtBQUtJLEdBQUlwaEIsS0FBSzlCLElBQ2xELENBTUEsU0FBU21qQixLQUNQLE1BQU1wakIsRUFBSXFqQixHQUFPdGhCLEtBQUtraEIsU0FDdEIsTUFBTyxHQUFTLElBQU5qakIsRUFBVSxPQUFTLFVBQVVzakIsR0FBT3ZoQixLQUFLK2dCLE9BQU9RLEdBQU92aEIsS0FBS2doQixPQUFPTyxHQUFPdmhCLEtBQUs5QixLQUFXLElBQU5ELEVBQVUsSUFBTSxLQUFLQSxNQUNySCxDQUVBLFNBQVNxakIsR0FBT0osR0FDZCxPQUFPcGQsTUFBTW9kLEdBQVcsRUFBSXJnQixLQUFLUSxJQUFJLEVBQUdSLEtBQUswQixJQUFJLEVBQUcyZSxHQUN0RCxDQUVBLFNBQVNLLEdBQU9oa0IsR0FDZCxPQUFPc0QsS0FBS1EsSUFBSSxFQUFHUixLQUFLMEIsSUFBSSxJQUFLMUIsS0FBS2tCLE1BQU14RSxJQUFVLEdBQ3hELENBRUEsU0FBUzZqQixHQUFJN2pCLEdBRVgsUUFEQUEsRUFBUWdrQixHQUFPaGtCLElBQ0MsR0FBSyxJQUFNLElBQU1BLEVBQU1pa0IsU0FBUyxHQUNsRCxDQUVBLFNBQVNWLEdBQUtXLEVBQUd0ZSxFQUFHb2QsRUFBR3RpQixHQUlyQixPQUhJQSxHQUFLLEVBQUd3akIsRUFBSXRlLEVBQUlvZCxFQUFJcGlCLElBQ2ZvaUIsR0FBSyxHQUFLQSxHQUFLLEVBQUdrQixFQUFJdGUsRUFBSWhGLElBQzFCZ0YsR0FBSyxJQUFHc2UsRUFBSXRqQixLQUNkLElBQUl1akIsR0FBSUQsRUFBR3RlLEVBQUdvZCxFQUFHdGlCLEVBQzFCLENBRU8sU0FBUzBqQixHQUFXeFEsR0FDekIsR0FBSUEsYUFBYXVRLEdBQUssT0FBTyxJQUFJQSxHQUFJdlEsRUFBRXNRLEVBQUd0USxFQUFFaE8sRUFBR2dPLEVBQUVvUCxFQUFHcFAsRUFBRStQLFNBRXRELEdBRE0vUCxhQUFhaUMsS0FBUWpDLEVBQUltUCxHQUFNblAsS0FDaENBLEVBQUcsT0FBTyxJQUFJdVEsR0FDbkIsR0FBSXZRLGFBQWF1USxHQUFLLE9BQU92USxFQUU3QixJQUFJNFAsR0FESjVQLEVBQUlBLEVBQUUrTyxPQUNJYSxFQUFJLElBQ1ZDLEVBQUk3UCxFQUFFNlAsRUFBSSxJQUNWOWlCLEVBQUlpVCxFQUFFalQsRUFBSSxJQUNWcUUsRUFBTTFCLEtBQUswQixJQUFJd2UsRUFBR0MsRUFBRzlpQixHQUNyQm1ELEVBQU1SLEtBQUtRLElBQUkwZixFQUFHQyxFQUFHOWlCLEdBQ3JCdWpCLEVBQUl0akIsSUFDSmdGLEVBQUk5QixFQUFNa0IsRUFDVmdlLEdBQUtsZixFQUFNa0IsR0FBTyxFQVV0QixPQVRJWSxHQUNhc2UsRUFBWFYsSUFBTTFmLEdBQVUyZixFQUFJOWlCLEdBQUtpRixFQUFjLEdBQVQ2ZCxFQUFJOWlCLEdBQzdCOGlCLElBQU0zZixHQUFVbkQsRUFBSTZpQixHQUFLNWQsRUFBSSxHQUM1QjRkLEVBQUlDLEdBQUs3ZCxFQUFJLEVBQ3ZCQSxHQUFLb2QsRUFBSSxHQUFNbGYsRUFBTWtCLEVBQU0sRUFBSWxCLEVBQU1rQixFQUNyQ2tmLEdBQUssSUFFTHRlLEVBQUlvZCxFQUFJLEdBQUtBLEVBQUksRUFBSSxFQUFJa0IsRUFFcEIsSUFBSUMsR0FBSUQsRUFBR3RlLEVBQUdvZCxFQUFHcFAsRUFBRStQLFFBQzVCLENBTUEsU0FBU1EsR0FBSUQsRUFBR3RlLEVBQUdvZCxFQUFHVyxHQUNwQmxoQixLQUFLeWhCLEdBQUtBLEVBQ1Z6aEIsS0FBS21ELEdBQUtBLEVBQ1ZuRCxLQUFLdWdCLEdBQUtBLEVBQ1Z2Z0IsS0FBS2toQixTQUFXQSxDQUNsQixDQXNDQSxTQUFTVSxHQUFPcmtCLEdBRWQsT0FEQUEsR0FBU0EsR0FBUyxHQUFLLEtBQ1IsRUFBSUEsRUFBUSxJQUFNQSxDQUNuQyxDQUVBLFNBQVNza0IsR0FBT3RrQixHQUNkLE9BQU9zRCxLQUFLUSxJQUFJLEVBQUdSLEtBQUswQixJQUFJLEVBQUdoRixHQUFTLEdBQzFDLENBR0EsU0FBU3VrQixHQUFRTCxFQUFHL00sRUFBSXFOLEdBQ3RCLE9BR1ksS0FISk4sRUFBSSxHQUFLL00sR0FBTXFOLEVBQUtyTixHQUFNK00sRUFBSSxHQUNoQ0EsRUFBSSxJQUFNTSxFQUNWTixFQUFJLElBQU0vTSxHQUFNcU4sRUFBS3JOLElBQU8sSUFBTStNLEdBQUssR0FDdkMvTSxFQUNSLENBbE9BM0IsR0FBT0ssR0FBT2tOLEdBQU8sQ0FDbkIsSUFBQTdaLENBQUt1YixHQUNILE9BQU9saUIsT0FBT21pQixPQUFPLElBQUlqaUIsS0FBS1AsWUFBYU8sS0FBTWdpQixFQUNsRCxFQUNELFdBQUFFLEdBQ0UsT0FBT2xpQixLQUFLa2dCLE1BQU1nQyxhQUNuQixFQUNEZCxJQUFLbkIsR0FDTEUsVUFBV0YsR0FDWGtDLFdBVUYsV0FDRSxPQUFPbmlCLEtBQUtrZ0IsTUFBTWlDLFlBQ3BCLEVBWEVDLFVBYUYsV0FDRSxPQUFPVCxHQUFXM2hCLE1BQU1vaUIsV0FDMUIsRUFkRS9CLFVBQVdELEdBQ1hvQixTQUFVcEIsS0FpRVpyTixHQUFPNk4sR0FBS1YsR0FBS2pOLEdBQU9HLEdBQU8sQ0FDN0IsUUFBQTRDLENBQVN0VCxHQUVQLE9BREFBLEVBQVMsTUFBTEEsRUFBWXNULEdBQVduVixLQUFLYSxJQUFJc1UsR0FBVXRULEdBQ3ZDLElBQUlrZSxHQUFJNWdCLEtBQUsrZ0IsRUFBSXJlLEVBQUcxQyxLQUFLZ2hCLEVBQUl0ZSxFQUFHMUMsS0FBSzlCLEVBQUl3RSxFQUFHMUMsS0FBS2toQixRQUN6RCxFQUNELE1BQUFuTCxDQUFPclQsR0FFTCxPQURBQSxFQUFTLE1BQUxBLEVBQVlxVCxHQUFTbFYsS0FBS2EsSUFBSXFVLEdBQVFyVCxHQUNuQyxJQUFJa2UsR0FBSTVnQixLQUFLK2dCLEVBQUlyZSxFQUFHMUMsS0FBS2doQixFQUFJdGUsRUFBRzFDLEtBQUs5QixFQUFJd0UsRUFBRzFDLEtBQUtraEIsUUFDekQsRUFDRCxHQUFBaEIsR0FDRSxPQUFPbGdCLElBQ1IsRUFDRCxLQUFBcWlCLEdBQ0UsT0FBTyxJQUFJekIsR0FBSVcsR0FBT3ZoQixLQUFLK2dCLEdBQUlRLEdBQU92aEIsS0FBS2doQixHQUFJTyxHQUFPdmhCLEtBQUs5QixHQUFJb2pCLEdBQU90aEIsS0FBS2toQixTQUM1RSxFQUNELFdBQUFnQixHQUNFLE9BQVMsSUFBT2xpQixLQUFLK2dCLEdBQUsvZ0IsS0FBSytnQixFQUFJLFFBQzFCLElBQU8vZ0IsS0FBS2doQixHQUFLaGhCLEtBQUtnaEIsRUFBSSxRQUMxQixJQUFPaGhCLEtBQUs5QixHQUFLOEIsS0FBSzlCLEVBQUksT0FDM0IsR0FBSzhCLEtBQUtraEIsU0FBV2xoQixLQUFLa2hCLFNBQVcsQ0FDOUMsRUFDREUsSUFBS0QsR0FDTGhCLFVBQVdnQixHQUNYZ0IsV0FTRixXQUNFLE1BQU8sSUFBSWYsR0FBSXBoQixLQUFLK2dCLEtBQUtLLEdBQUlwaEIsS0FBS2doQixLQUFLSSxHQUFJcGhCLEtBQUs5QixLQUFLa2pCLEdBQStDLEtBQTFDdGQsTUFBTTlELEtBQUtraEIsU0FBVyxFQUFJbGhCLEtBQUtraEIsV0FDM0YsRUFWRWIsVUFBV2dCLEdBQ1hHLFNBQVVILE1BeUVadE8sR0FBTzJPLElBWEEsU0FBYUQsRUFBR3RlLEVBQUdvZCxFQUFHVyxHQUMzQixPQUE0QixJQUFyQjljLFVBQVV0RixPQUFlNmlCLEdBQVdGLEdBQUssSUFBSUMsR0FBSUQsRUFBR3RlLEVBQUdvZCxFQUFjLE1BQVhXLEVBQWtCLEVBQUlBLEVBQ3pGLEdBU2lCak8sR0FBT0csR0FBTyxDQUM3QixRQUFBNEMsQ0FBU3RULEdBRVAsT0FEQUEsRUFBUyxNQUFMQSxFQUFZc1QsR0FBV25WLEtBQUthLElBQUlzVSxHQUFVdFQsR0FDdkMsSUFBSWdmLEdBQUkxaEIsS0FBS3loQixFQUFHemhCLEtBQUttRCxFQUFHbkQsS0FBS3VnQixFQUFJN2QsRUFBRzFDLEtBQUtraEIsUUFDakQsRUFDRCxNQUFBbkwsQ0FBT3JULEdBRUwsT0FEQUEsRUFBUyxNQUFMQSxFQUFZcVQsR0FBU2xWLEtBQUthLElBQUlxVSxHQUFRclQsR0FDbkMsSUFBSWdmLEdBQUkxaEIsS0FBS3loQixFQUFHemhCLEtBQUttRCxFQUFHbkQsS0FBS3VnQixFQUFJN2QsRUFBRzFDLEtBQUtraEIsUUFDakQsRUFDRCxHQUFBaEIsR0FDRSxJQUFJdUIsRUFBSXpoQixLQUFLeWhCLEVBQUksSUFBcUIsS0FBZHpoQixLQUFLeWhCLEVBQUksR0FDN0J0ZSxFQUFJVyxNQUFNMmQsSUFBTTNkLE1BQU05RCxLQUFLbUQsR0FBSyxFQUFJbkQsS0FBS21ELEVBQ3pDb2QsRUFBSXZnQixLQUFLdWdCLEVBQ1R3QixFQUFLeEIsR0FBS0EsRUFBSSxHQUFNQSxFQUFJLEVBQUlBLEdBQUtwZCxFQUNqQ3VSLEVBQUssRUFBSTZMLEVBQUl3QixFQUNqQixPQUFPLElBQUluQixHQUNUa0IsR0FBUUwsR0FBSyxJQUFNQSxFQUFJLElBQU1BLEVBQUksSUFBSy9NLEVBQUlxTixHQUMxQ0QsR0FBUUwsRUFBRy9NLEVBQUlxTixHQUNmRCxHQUFRTCxFQUFJLElBQU1BLEVBQUksSUFBTUEsRUFBSSxJQUFLL00sRUFBSXFOLEdBQ3pDL2hCLEtBQUtraEIsUUFFUixFQUNELEtBQUFtQixHQUNFLE9BQU8sSUFBSVgsR0FBSUUsR0FBTzVoQixLQUFLeWhCLEdBQUlJLEdBQU83aEIsS0FBS21ELEdBQUkwZSxHQUFPN2hCLEtBQUt1Z0IsR0FBSWUsR0FBT3RoQixLQUFLa2hCLFNBQzVFLEVBQ0QsV0FBQWdCLEdBQ0UsT0FBUSxHQUFLbGlCLEtBQUttRCxHQUFLbkQsS0FBS21ELEdBQUssR0FBS1csTUFBTTlELEtBQUttRCxLQUN6QyxHQUFLbkQsS0FBS3VnQixHQUFLdmdCLEtBQUt1Z0IsR0FBSyxHQUN6QixHQUFLdmdCLEtBQUtraEIsU0FBV2xoQixLQUFLa2hCLFNBQVcsQ0FDOUMsRUFDRCxTQUFBa0IsR0FDRSxNQUFNbmtCLEVBQUlxakIsR0FBT3RoQixLQUFLa2hCLFNBQ3RCLE1BQU8sR0FBUyxJQUFOampCLEVBQVUsT0FBUyxVQUFVMmpCLEdBQU81aEIsS0FBS3loQixPQUF3QixJQUFqQkksR0FBTzdoQixLQUFLbUQsUUFBK0IsSUFBakIwZSxHQUFPN2hCLEtBQUt1Z0IsTUFBa0IsSUFBTnRpQixFQUFVLElBQU0sS0FBS0EsTUFDbEksS2lCelhJLE1BQU1xa0IsR0FBVXpoQixLQUFLMGhCLEdBQUssSUFDcEJDLEdBQVUsSUFBTTNoQixLQUFLMGhCLEdDSzlCRSxHQUFLLE9BQ0xDLEdBQUssRUFDTEMsR0FBSyxPQUNMQyxHQUFLLEVBQUksR0FDVEMsR0FBSyxFQUFJLEdBQ1RDLEdBQUssRUFBSUQsR0FBS0EsR0FDZEUsR0FBS0YsR0FBS0EsR0FBS0EsR0FFbkIsU0FBU0csR0FBVzdSLEdBQ2xCLEdBQUlBLGFBQWE4UixHQUFLLE9BQU8sSUFBSUEsR0FBSTlSLEVBQUVvUCxFQUFHcFAsRUFBRWxULEVBQUdrVCxFQUFFalQsRUFBR2lULEVBQUUrUCxTQUN0RCxHQUFJL1AsYUFBYStSLEdBQUssT0FBT0MsR0FBUWhTLEdBQy9CQSxhQUFheVAsS0FBTXpQLEVBQUk4UCxHQUFXOVAsSUFDeEMsSUFHdUV4UyxFQUFHc0UsRUFIdEU4ZCxFQUFJcUMsR0FBU2pTLEVBQUU0UCxHQUNmQyxFQUFJb0MsR0FBU2pTLEVBQUU2UCxHQUNmOWlCLEVBQUlrbEIsR0FBU2pTLEVBQUVqVCxHQUNmNEcsRUFBSXVlLElBQVMsU0FBWXRDLEVBQUksU0FBWUMsRUFBSSxTQUFZOWlCLEdBQUt3a0IsSUFLbEUsT0FKSTNCLElBQU1DLEdBQUtBLElBQU05aUIsRUFBR1MsRUFBSXNFLEVBQUk2QixHQUM5Qm5HLEVBQUkwa0IsSUFBUyxTQUFZdEMsRUFBSSxTQUFZQyxFQUFJLFNBQVk5aUIsR0FBS3VrQixJQUM5RHhmLEVBQUlvZ0IsSUFBUyxTQUFZdEMsRUFBSSxTQUFZQyxFQUFJLFNBQVk5aUIsR0FBS3lrQixLQUV6RCxJQUFJTSxHQUFJLElBQU1uZSxFQUFJLEdBQUksS0FBT25HLEVBQUltRyxHQUFJLEtBQU9BLEVBQUk3QixHQUFJa08sRUFBRStQLFFBQy9ELENBTWUsU0FBU29DLEdBQUkvQyxFQUFHdGlCLEVBQUdDLEVBQUdnakIsR0FDbkMsT0FBNEIsSUFBckI5YyxVQUFVdEYsT0FBZWtrQixHQUFXekMsR0FBSyxJQUFJMEMsR0FBSTFDLEVBQUd0aUIsRUFBR0MsRUFBYyxNQUFYZ2pCLEVBQWtCLEVBQUlBLEVBQ3pGLENBRU8sU0FBUytCLEdBQUkxQyxFQUFHdGlCLEVBQUdDLEVBQUdnakIsR0FDM0JsaEIsS0FBS3VnQixHQUFLQSxFQUNWdmdCLEtBQUsvQixHQUFLQSxFQUNWK0IsS0FBSzlCLEdBQUtBLEVBQ1Y4QixLQUFLa2hCLFNBQVdBLENBQ2xCLENBeUJBLFNBQVNtQyxHQUFRL2YsR0FDZixPQUFPQSxFQUFJeWYsR0FBS2xpQixLQUFLYSxJQUFJNEIsRUFBRyxFQUFJLEdBQUtBLEVBQUl3ZixHQUFLRixFQUNoRCxDQUVBLFNBQVNXLEdBQVFqZ0IsR0FDZixPQUFPQSxFQUFJdWYsR0FBS3ZmLEVBQUlBLEVBQUlBLEVBQUl3ZixJQUFNeGYsRUFBSXNmLEdBQ3hDLENBRUEsU0FBU1ksR0FBUzdrQixHQUNoQixPQUFPLEtBQU9BLEdBQUssU0FBWSxNQUFRQSxFQUFJLE1BQVFrQyxLQUFLYSxJQUFJL0MsRUFBRyxFQUFJLEtBQU8sS0FDNUUsQ0FFQSxTQUFTeWtCLEdBQVN6a0IsR0FDaEIsT0FBUUEsR0FBSyxNQUFRLE9BQVVBLEVBQUksTUFBUWtDLEtBQUthLEtBQUsvQyxFQUFJLE1BQVMsTUFBTyxJQUMzRSxDQWtCTyxTQUFTdWtCLEdBQUl6QixFQUFHM1ksRUFBR3lYLEVBQUdXLEdBQzNCbGhCLEtBQUt5aEIsR0FBS0EsRUFDVnpoQixLQUFLOEksR0FBS0EsRUFDVjlJLEtBQUt1Z0IsR0FBS0EsRUFDVnZnQixLQUFLa2hCLFNBQVdBLENBQ2xCLENBRUEsU0FBU2lDLEdBQVFoUyxHQUNmLEdBQUlyTixNQUFNcU4sRUFBRXNRLEdBQUksT0FBTyxJQUFJd0IsR0FBSTlSLEVBQUVvUCxFQUFHLEVBQUcsRUFBR3BQLEVBQUUrUCxTQUM1QyxJQUFJTyxFQUFJdFEsRUFBRXNRLEVBQUlhLEdBQ2QsT0FBTyxJQUFJVyxHQUFJOVIsRUFBRW9QLEVBQUcxZixLQUFLNGlCLElBQUloQyxHQUFLdFEsRUFBRXJJLEVBQUdqSSxLQUFLNmlCLElBQUlqQyxHQUFLdFEsRUFBRXJJLEVBQUdxSSxFQUFFK1AsUUFDOUQsQ0FsRUFuTyxHQUFPa1EsR0FBS0ssR0FBS3JRLEdBQU9HLEdBQU8sQ0FDN0IsUUFBQTRDLENBQVN0VCxHQUNQLE9BQU8sSUFBSXVnQixHQUFJampCLEtBQUt1Z0IsRUF6Q2QsSUF5QzRCLE1BQUw3ZCxFQUFZLEVBQUlBLEdBQUkxQyxLQUFLL0IsRUFBRytCLEtBQUs5QixFQUFHOEIsS0FBS2toQixRQUN2RSxFQUNELE1BQUFuTCxDQUFPclQsR0FDTCxPQUFPLElBQUl1Z0IsR0FBSWpqQixLQUFLdWdCLEVBNUNkLElBNEM0QixNQUFMN2QsRUFBWSxFQUFJQSxHQUFJMUMsS0FBSy9CLEVBQUcrQixLQUFLOUIsRUFBRzhCLEtBQUtraEIsUUFDdkUsRUFDRCxHQUFBaEIsR0FDRSxJQUFJcGIsR0FBSzlFLEtBQUt1Z0IsRUFBSSxJQUFNLElBQ3BCNWhCLEVBQUltRixNQUFNOUQsS0FBSy9CLEdBQUs2RyxFQUFJQSxFQUFJOUUsS0FBSy9CLEVBQUksSUFDckNnRixFQUFJYSxNQUFNOUQsS0FBSzlCLEdBQUs0RyxFQUFJQSxFQUFJOUUsS0FBSzlCLEVBQUksSUFJekMsT0FBTyxJQUFJMGlCLEdBQ1Q0QyxHQUFVLFdBSlo3a0IsRUFBSThqQixHQUFLYyxHQUFRNWtCLElBSVcsV0FINUJtRyxFQUFJNGQsR0FBS2EsR0FBUXplLElBRzJCLFVBRjVDN0IsRUFBSTBmLEdBQUtZLEdBQVF0Z0IsS0FHZnVnQixJQUFVLFNBQVk3a0IsRUFBSSxVQUFZbUcsRUFBSSxRQUFZN0IsR0FDdER1Z0IsR0FBVSxTQUFZN2tCLEVBQUksU0FBWW1HLEVBQUksVUFBWTdCLEdBQ3REakQsS0FBS2toQixRQUVSLEtBZ0RIbk8sR0FBT21RLElBakJBLFNBQWF6QixFQUFHM1ksRUFBR3lYLEVBQUdXLEdBQzNCLE9BQTRCLElBQXJCOWMsVUFBVXRGLE9BYm5CLFNBQW9CcVMsR0FDbEIsR0FBSUEsYUFBYStSLEdBQUssT0FBTyxJQUFJQSxHQUFJL1IsRUFBRXNRLEVBQUd0USxFQUFFckksRUFBR3FJLEVBQUVvUCxFQUFHcFAsRUFBRStQLFNBRXRELEdBRE0vUCxhQUFhOFIsS0FBTTlSLEVBQUk2UixHQUFXN1IsSUFDNUIsSUFBUkEsRUFBRWxULEdBQW1CLElBQVJrVCxFQUFFalQsRUFBUyxPQUFPLElBQUlnbEIsR0FBSS9rQixJQUFLLEVBQUlnVCxFQUFFb1AsR0FBS3BQLEVBQUVvUCxFQUFJLElBQU0sRUFBSXBpQixJQUFLZ1QsRUFBRW9QLEVBQUdwUCxFQUFFK1AsU0FDdkYsSUFBSU8sRUFBSTVnQixLQUFLOGlCLE1BQU14UyxFQUFFalQsRUFBR2lULEVBQUVsVCxHQUFLdWtCLEdBQy9CLE9BQU8sSUFBSVUsR0FBSXpCLEVBQUksRUFBSUEsRUFBSSxJQUFNQSxFQUFHNWdCLEtBQUtDLEtBQUtxUSxFQUFFbFQsRUFBSWtULEVBQUVsVCxFQUFJa1QsRUFBRWpULEVBQUlpVCxFQUFFalQsR0FBSWlULEVBQUVvUCxFQUFHcFAsRUFBRStQLFFBQy9FLENBT2tDMEMsQ0FBV25DLEdBQUssSUFBSXlCLEdBQUl6QixFQUFHM1ksRUFBR3lYLEVBQWMsTUFBWFcsRUFBa0IsRUFBSUEsRUFDekYsR0FlaUJqTyxHQUFPRyxHQUFPLENBQzdCLFFBQUE0QyxDQUFTdFQsR0FDUCxPQUFPLElBQUl3Z0IsR0FBSWxqQixLQUFLeWhCLEVBQUd6aEIsS0FBSzhJLEVBQUc5SSxLQUFLdWdCLEVBN0c5QixJQTZHNEMsTUFBTDdkLEVBQVksRUFBSUEsR0FBSTFDLEtBQUtraEIsUUFDdkUsRUFDRCxNQUFBbkwsQ0FBT3JULEdBQ0wsT0FBTyxJQUFJd2dCLEdBQUlsakIsS0FBS3loQixFQUFHemhCLEtBQUs4SSxFQUFHOUksS0FBS3VnQixFQWhIOUIsSUFnSDRDLE1BQUw3ZCxFQUFZLEVBQUlBLEdBQUkxQyxLQUFLa2hCLFFBQ3ZFLEVBQ0QsR0FBQWhCLEdBQ0UsT0FBT2lELEdBQVFuakIsTUFBTWtnQixLQUN0QixLQ3pISCxJQUFlMkQsR0FBQWxsQixHQUFLLElBQU1BLEVDbUJuQixTQUFTbWxCLEdBQU1oZixHQUNwQixPQUFvQixJQUFaQSxHQUFLQSxHQUFXaWYsR0FBVSxTQUFTOWxCLEVBQUdDLEdBQzVDLE9BQU9BLEVBQUlELEVBYmYsU0FBcUJBLEVBQUdDLEVBQUc0RyxHQUN6QixPQUFPN0csRUFBSTRDLEtBQUthLElBQUl6RCxFQUFHNkcsR0FBSTVHLEVBQUkyQyxLQUFLYSxJQUFJeEQsRUFBRzRHLEdBQUs3RyxFQUFHNkcsRUFBSSxFQUFJQSxFQUFHLFNBQVN4QixHQUNyRSxPQUFPekMsS0FBS2EsSUFBSXpELEVBQUlxRixFQUFJcEYsRUFBRzRHLEVBQy9CLENBQ0EsQ0FTbUJrZixDQUFZL2xCLEVBQUdDLEVBQUc0RyxHQUFLZ1AsR0FBU2hRLE1BQU03RixHQUFLQyxFQUFJRCxFQUNsRSxDQUNBLENBRWUsU0FBUzhsQixHQUFROWxCLEVBQUdDLEdBQ2pDLElBQUljLEVBQUlkLEVBQUlELEVBQ1osT0FBT2UsRUF6QlQsU0FBZ0JmLEVBQUdlLEdBQ2pCLE9BQU8sU0FBU3NFLEdBQ2QsT0FBT3JGLEVBQUlxRixFQUFJdEUsQ0FDbkIsQ0FDQSxDQXFCYWlsQixDQUFPaG1CLEVBQUdlLEdBQUs4VSxHQUFTaFEsTUFBTTdGLEdBQUtDLEVBQUlELEVBQ3BELENDdkJBLElBQUFpbUIsR0FBZSxTQUFVQyxFQUFTcmYsR0FDaEMsSUFBSXdiLEVBQVF3RCxHQUFNaGYsR0FFbEIsU0FBU29iLEVBQUloZixFQUFPa2pCLEdBQ2xCLElBQUlyRCxFQUFJVCxHQUFPcGYsRUFBUW1qQixHQUFTbmpCLElBQVE2ZixHQUFJcUQsRUFBTUMsR0FBU0QsSUFBTXJELEdBQzdEQyxFQUFJVixFQUFNcGYsRUFBTThmLEVBQUdvRCxFQUFJcEQsR0FDdkI5aUIsRUFBSW9pQixFQUFNcGYsRUFBTWhELEVBQUdrbUIsRUFBSWxtQixHQUN2QmdqQixFQUFVNkMsR0FBUTdpQixFQUFNZ2dCLFFBQVNrRCxFQUFJbEQsU0FDekMsT0FBTyxTQUFTNWQsR0FLZCxPQUpBcEMsRUFBTTZmLEVBQUlBLEVBQUV6ZCxHQUNacEMsRUFBTThmLEVBQUlBLEVBQUUxZCxHQUNacEMsRUFBTWhELEVBQUlBLEVBQUVvRixHQUNacEMsRUFBTWdnQixRQUFVQSxFQUFRNWQsR0FDakJwQyxFQUFRLEVBQ3JCLENBQ0csQ0FJRCxPQUZBZ2YsRUFBSTRELE1BQVFLLEVBRUxqRSxDQUNSLENBcEJjLENBb0JaLEdBNEJJLElBMUJZb0UsR0EwQlJDLElBMUJRRCxHQ25CSixTQUFTbmlCLEdBQ3RCLElBQUlZLEVBQUlaLEVBQU9yRCxPQUFTLEVBQ3hCLE9BQU8sU0FBU3dFLEdBQ2QsSUFBSW5FLEVBQUltRSxHQUFLLEVBQUtBLEVBQUksRUFBS0EsR0FBSyxHQUFLQSxFQUFJLEVBQUdQLEVBQUksR0FBS2xDLEtBQUtVLE1BQU0rQixFQUFJUCxHQUNoRXloQixFQUFLcmlCLEVBQU9oRCxHQUNac2xCLEVBQUt0aUIsRUFBT2hELEVBQUksR0FDaEJ1bEIsRUFBS3ZsQixFQUFJLEVBQUlnRCxFQUFPaEQsRUFBSSxHQUFLLEVBQUlxbEIsRUFBS0MsRUFDdENFLEVBQUt4bEIsRUFBSTRELEVBQUksRUFBSVosRUFBT2hELEVBQUksR0FBSyxFQUFJc2xCLEVBQUtELEVBQzlDLE9BaEJHLFNBQWUzQixFQUFJNkIsRUFBSUYsRUFBSUMsRUFBSUUsR0FDcEMsSUFBSTdCLEVBQUtELEVBQUtBLEVBQUlFLEVBQUtELEVBQUtELEVBQzVCLFFBQVMsRUFBSSxFQUFJQSxFQUFLLEVBQUlDLEVBQUtDLEdBQU0yQixHQUM5QixFQUFJLEVBQUk1QixFQUFLLEVBQUlDLEdBQU15QixHQUN2QixFQUFJLEVBQUkzQixFQUFLLEVBQUlDLEVBQUssRUFBSUMsR0FBTTBCLEVBQ2pDMUIsRUFBSzRCLEdBQU0sQ0FDbkIsQ0FVV0MsRUFBT3RoQixFQUFJbkUsRUFBSTRELEdBQUtBLEVBQUcyaEIsRUFBSUYsRUFBSUMsRUFBSUUsRUFDOUMsQ0FDQSxFRFVTLFNBQVNFLEdBQ2QsSUFJSTFsQixFQUFHbWhCLEVBSkh2ZCxFQUFJOGhCLEVBQU8vbEIsT0FDWGlpQixFQUFJLElBQUl6YyxNQUFNdkIsR0FDZGllLEVBQUksSUFBSTFjLE1BQU12QixHQUNkN0UsRUFBSSxJQUFJb0csTUFBTXZCLEdBRWxCLElBQUs1RCxFQUFJLEVBQUdBLEVBQUk0RCxJQUFLNUQsRUFDbkJtaEIsRUFBUStELEdBQVNRLEVBQU8xbEIsSUFDeEI0aEIsRUFBRTVoQixHQUFLbWhCLEVBQU1TLEdBQUssRUFDbEJDLEVBQUU3aEIsR0FBS21oQixFQUFNVSxHQUFLLEVBQ2xCOWlCLEVBQUVpQixHQUFLbWhCLEVBQU1waUIsR0FBSyxFQU1wQixPQUpBNmlCLEVBQUl1RCxHQUFPdkQsR0FDWEMsRUFBSXNELEdBQU90RCxHQUNYOWlCLEVBQUlvbUIsR0FBT3BtQixHQUNYb2lCLEVBQU1ZLFFBQVUsRUFDVCxTQUFTNWQsR0FJZCxPQUhBZ2QsRUFBTVMsRUFBSUEsRUFBRXpkLEdBQ1pnZCxFQUFNVSxFQUFJQSxFQUFFMWQsR0FDWmdkLEVBQU1waUIsRUFBSUEsRUFBRW9GLEdBQ0xnZCxFQUFRLEVBQ3JCLENBQ0EsR0VsRGUsU0FBQXdFLEdBQVM3bUIsRUFBR0MsR0FDcEJBLElBQUdBLEVBQUksSUFDWixJQUVJaUIsRUFGQTRELEVBQUk5RSxFQUFJNEMsS0FBSzBCLElBQUlyRSxFQUFFWSxPQUFRYixFQUFFYSxRQUFVLEVBQ3ZDZ0ssRUFBSTVLLEVBQUVpSyxRQUVWLE9BQU8sU0FBUzdFLEdBQ2QsSUFBS25FLEVBQUksRUFBR0EsRUFBSTRELElBQUs1RCxFQUFHMkosRUFBRTNKLEdBQUtsQixFQUFFa0IsSUFBTSxFQUFJbUUsR0FBS3BGLEVBQUVpQixHQUFLbUUsRUFDdkQsT0FBT3dGLENBQ1gsQ0FDQSxDQ0ZPLFNBQVNpYyxHQUFhOW1CLEVBQUdDLEdBQzlCLElBSUlpQixFQUpBNmxCLEVBQUs5bUIsRUFBSUEsRUFBRVksT0FBUyxFQUNwQm1tQixFQUFLaG5CLEVBQUk0QyxLQUFLMEIsSUFBSXlpQixFQUFJL21CLEVBQUVhLFFBQVUsRUFDbENILEVBQUksSUFBSTJGLE1BQU0yZ0IsR0FDZG5jLEVBQUksSUFBSXhFLE1BQU0wZ0IsR0FHbEIsSUFBSzdsQixFQUFJLEVBQUdBLEVBQUk4bEIsSUFBTTlsQixFQUFHUixFQUFFUSxHQUFLNUIsR0FBTVUsRUFBRWtCLEdBQUlqQixFQUFFaUIsSUFDOUMsS0FBT0EsRUFBSTZsQixJQUFNN2xCLEVBQUcySixFQUFFM0osR0FBS2pCLEVBQUVpQixHQUU3QixPQUFPLFNBQVNtRSxHQUNkLElBQUtuRSxFQUFJLEVBQUdBLEVBQUk4bEIsSUFBTTlsQixFQUFHMkosRUFBRTNKLEdBQUtSLEVBQUVRLEdBQUdtRSxHQUNyQyxPQUFPd0YsQ0FDWCxDQUNBLENDckJlLFNBQUFvYyxHQUFTam5CLEVBQUdDLEdBQ3pCLElBQUljLEVBQUksSUFBSW1tQixLQUNaLE9BQU9sbkIsR0FBS0EsRUFBR0MsR0FBS0EsRUFBRyxTQUFTb0YsR0FDOUIsT0FBT3RFLEVBQUVvbUIsUUFBUW5uQixHQUFLLEVBQUlxRixHQUFLcEYsRUFBSW9GLEdBQUl0RSxDQUMzQyxDQUNBLENDTGUsU0FBQXFtQixHQUFTcG5CLEVBQUdDLEdBQ3pCLE9BQU9ELEdBQUtBLEVBQUdDLEdBQUtBLEVBQUcsU0FBU29GLEdBQzlCLE9BQU9yRixHQUFLLEVBQUlxRixHQUFLcEYsRUFBSW9GLENBQzdCLENBQ0EsQ0NGZSxTQUFBZ2lCLEdBQVNybkIsRUFBR0MsR0FDekIsSUFFSXdFLEVBRkF2RCxFQUFJLENBQUUsRUFDTjJKLEVBQUksQ0FBRSxFQU1WLElBQUtwRyxLQUhLLE9BQU56RSxHQUEyQixpQkFBTkEsSUFBZ0JBLEVBQUksSUFDbkMsT0FBTkMsR0FBMkIsaUJBQU5BLElBQWdCQSxFQUFJLElBRW5DQSxFQUNKd0UsS0FBS3pFLEVBQ1BrQixFQUFFdUQsR0FBS25GLEdBQU1VLEVBQUV5RSxHQUFJeEUsRUFBRXdFLElBRXJCb0csRUFBRXBHLEdBQUt4RSxFQUFFd0UsR0FJYixPQUFPLFNBQVNZLEdBQ2QsSUFBS1osS0FBS3ZELEVBQUcySixFQUFFcEcsR0FBS3ZELEVBQUV1RCxHQUFHWSxHQUN6QixPQUFPd0YsQ0FDWCxDQUNBLENDcEJBLElBQUl5YyxHQUFNLDhDQUNOQyxHQUFNLElBQUlsUCxPQUFPaVAsR0FBSUUsT0FBUSxLQWNsQixTQUFBQyxHQUFTem5CLEVBQUdDLEdBQ3pCLElBQ0l5bkIsRUFDQUMsRUFDQUMsRUFIQUMsRUFBS1AsR0FBSVEsVUFBWVAsR0FBSU8sVUFBWSxFQUlyQzVtQixHQUFLLEVBQ0xnRSxFQUFJLEdBQ0o2aUIsRUFBSSxHQU1SLElBSEEvbkIsR0FBUSxHQUFJQyxHQUFRLElBR1p5bkIsRUFBS0osR0FBSTlFLEtBQUt4aUIsTUFDZDJuQixFQUFLSixHQUFJL0UsS0FBS3ZpQixNQUNmMm5CLEVBQUtELEVBQUd0akIsT0FBU3dqQixJQUNwQkQsRUFBSzNuQixFQUFFaUssTUFBTTJkLEVBQUlELEdBQ2IxaUIsRUFBRWhFLEdBQUlnRSxFQUFFaEUsSUFBTTBtQixFQUNiMWlCLElBQUloRSxHQUFLMG1CLElBRVhGLEVBQUtBLEVBQUcsT0FBU0MsRUFBS0EsRUFBRyxJQUN4QnppQixFQUFFaEUsR0FBSWdFLEVBQUVoRSxJQUFNeW1CLEVBQ2J6aUIsSUFBSWhFLEdBQUt5bUIsR0FFZHppQixJQUFJaEUsR0FBSyxLQUNUNm1CLEVBQUUvYyxLQUFLLENBQUM5SixFQUFHQSxFQUFHUixFQUFHb0csR0FBTzRnQixFQUFJQyxNQUU5QkUsRUFBS04sR0FBSU8sVUFZWCxPQVJJRCxFQUFLNW5CLEVBQUVZLFNBQ1QrbUIsRUFBSzNuQixFQUFFaUssTUFBTTJkLEdBQ1QzaUIsRUFBRWhFLEdBQUlnRSxFQUFFaEUsSUFBTTBtQixFQUNiMWlCLElBQUloRSxHQUFLMG1CLEdBS1QxaUIsRUFBRXJFLE9BQVMsRUFBS2tuQixFQUFFLEdBN0MzQixTQUFhOW5CLEdBQ1gsT0FBTyxTQUFTb0YsR0FDZCxPQUFPcEYsRUFBRW9GLEdBQUssRUFDbEIsQ0FDQSxDQTBDUTJpQixDQUFJRCxFQUFFLEdBQUdybkIsR0FwRGpCLFNBQWNULEdBQ1osT0FBTyxXQUNMLE9BQU9BLENBQ1gsQ0FDQSxDQWlEUWUsQ0FBS2YsSUFDSkEsRUFBSThuQixFQUFFbG5CLE9BQVEsU0FBU3dFLEdBQ3RCLElBQUssSUFBVzZOLEVBQVBoUyxFQUFJLEVBQU1BLEVBQUlqQixJQUFLaUIsRUFBR2dFLEdBQUdnTyxFQUFJNlUsRUFBRTdtQixJQUFJQSxHQUFLZ1MsRUFBRXhTLEVBQUUyRSxHQUNyRCxPQUFPSCxFQUFFbVAsS0FBSyxHQUN4QixFQUNBLENDckRlLFNBQUE0VCxHQUFTam9CLEVBQUdDLEdBQ3pCLElBQWtCNEssRUFBZHhGLFNBQVdwRixFQUNmLE9BQVksTUFBTEEsR0FBbUIsWUFBTm9GLEVBQWtCd1EsR0FBUzVWLElBQ2xDLFdBQU5vRixFQUFpQnlCLEdBQ1osV0FBTnpCLEdBQW1Cd0YsRUFBSXdYLEdBQU1waUIsS0FBT0EsRUFBSTRLLEVBQUdvWCxJQUFPblIsR0FDbEQ3USxhQUFhb2lCLEdBQVFKLEdBQ3JCaGlCLGFBQWFpbkIsS0FBT2dCLEdOTHJCLFNBQXVCeG5CLEdBQzVCLE9BQU95bkIsWUFBWUMsT0FBTzFuQixNQUFRQSxhQUFhMm5CLFNBQ2pELENNSVFDLENBQWNyb0IsR0FBSzRtQixHQUNuQnhnQixNQUFNcUgsUUFBUXpOLEdBQUs2bUIsR0FDRSxtQkFBZDdtQixFQUFFd0MsU0FBZ0QsbUJBQWZ4QyxFQUFFc2pCLFVBQTJCMWQsTUFBTTVGLEdBQUtvbkIsR0FDbEZ2Z0IsSUFBUTlHLEVBQUdDLEVBQ25CLENDckJlLFNBQUFzb0IsR0FBU3ZvQixFQUFHQyxHQUN6QixPQUFPRCxHQUFLQSxFQUFHQyxHQUFLQSxFQUFHLFNBQVNvRixHQUM5QixPQUFPekMsS0FBS2tCLE1BQU05RCxHQUFLLEVBQUlxRixHQUFLcEYsRUFBSW9GLEVBQ3hDLENBQ0EsQ0NKQSxJQ0VJbWpCLEdERkFqRSxHQUFVLElBQU0zaEIsS0FBSzBoQixHQUVkbmMsR0FBVyxDQUNwQnhCLFdBQVksRUFDWkMsV0FBWSxFQUNaNmhCLE9BQVEsRUFDUkMsTUFBTyxFQUNQQyxPQUFRLEVBQ1JDLE9BQVEsR0FHSyxTQUFBQyxHQUFTN29CLEVBQUdDLEVBQUc0SyxFQUFHOUosRUFBR3RCLEVBQUdZLEdBQ3JDLElBQUlzb0IsRUFBUUMsRUFBUUYsRUFLcEIsT0FKSUMsRUFBUy9sQixLQUFLQyxLQUFLN0MsRUFBSUEsRUFBSUMsRUFBSUEsTUFBSUQsR0FBSzJvQixFQUFRMW9CLEdBQUswb0IsSUFDckRELEVBQVExb0IsRUFBSTZLLEVBQUk1SyxFQUFJYyxLQUFHOEosR0FBSzdLLEVBQUkwb0IsRUFBTzNuQixHQUFLZCxFQUFJeW9CLElBQ2hERSxFQUFTaG1CLEtBQUtDLEtBQUtnSSxFQUFJQSxFQUFJOUosRUFBSUEsTUFBSThKLEdBQUsrZCxFQUFRN25CLEdBQUs2bkIsRUFBUUYsR0FBU0UsR0FDdEU1b0IsRUFBSWUsRUFBSWQsRUFBSTRLLElBQUc3SyxHQUFLQSxFQUFHQyxHQUFLQSxFQUFHeW9CLEdBQVNBLEVBQU9DLEdBQVVBLEdBQ3RELENBQ0xoaUIsV0FBWWxILEVBQ1ptSCxXQUFZdkcsRUFDWm9vQixPQUFRN2xCLEtBQUs4aUIsTUFBTXpsQixFQUFHRCxHQUFLdWtCLEdBQzNCbUUsTUFBTzlsQixLQUFLa21CLEtBQUtKLEdBQVNuRSxHQUMxQm9FLE9BQVFBLEVBQ1JDLE9BQVFBLEVBRVosQ0V0QkEsU0FBU0csR0FBcUJDLEVBQU9DLEVBQVNDLEVBQVNDLEdBRXJELFNBQVNDLEVBQUlsa0IsR0FDWCxPQUFPQSxFQUFFckUsT0FBU3FFLEVBQUVra0IsTUFBUSxJQUFNLEVBQ25DLENBcUNELE9BQU8sU0FBU3BwQixFQUFHQyxHQUNqQixJQUFJaUYsRUFBSSxHQUNKNmlCLEVBQUksR0FPUixPQU5BL25CLEVBQUlncEIsRUFBTWhwQixHQUFJQyxFQUFJK29CLEVBQU0vb0IsR0F0QzFCLFNBQW1Cb3BCLEVBQUlDLEVBQUlDLEVBQUlDLEVBQUl0a0IsRUFBRzZpQixHQUNwQyxHQUFJc0IsSUFBT0UsR0FBTUQsSUFBT0UsRUFBSSxDQUMxQixJQUFJdG9CLEVBQUlnRSxFQUFFOEYsS0FBSyxhQUFjLEtBQU1pZSxFQUFTLEtBQU1DLEdBQ2xEbkIsRUFBRS9jLEtBQUssQ0FBQzlKLEVBQUdBLEVBQUksRUFBR1IsRUFBR29HLEdBQU91aUIsRUFBSUUsSUFBTSxDQUFDcm9CLEVBQUdBLEVBQUksRUFBR1IsRUFBR29HLEdBQU93aUIsRUFBSUUsSUFDckUsTUFBZUQsR0FBTUMsSUFDZnRrQixFQUFFOEYsS0FBSyxhQUFldWUsRUFBS04sRUFBVU8sRUFBS04sRUFFN0MsQ0FnQ0NPLENBQVV6cEIsRUFBRTJHLFdBQVkzRyxFQUFFNEcsV0FBWTNHLEVBQUUwRyxXQUFZMUcsRUFBRTJHLFdBQVkxQixFQUFHNmlCLEdBOUJ2RSxTQUFnQi9uQixFQUFHQyxFQUFHaUYsRUFBRzZpQixHQUNuQi9uQixJQUFNQyxHQUNKRCxFQUFJQyxFQUFJLElBQUtBLEdBQUssSUFBY0EsRUFBSUQsRUFBSSxNQUFLQSxHQUFLLEtBQ3REK25CLEVBQUUvYyxLQUFLLENBQUM5SixFQUFHZ0UsRUFBRThGLEtBQUtvZSxFQUFJbGtCLEdBQUssVUFBVyxLQUFNaWtCLEdBQVksRUFBR3pvQixFQUFHb0csR0FBTzlHLEVBQUdDLE1BQy9EQSxHQUNUaUYsRUFBRThGLEtBQUtvZSxFQUFJbGtCLEdBQUssVUFBWWpGLEVBQUlrcEIsRUFFbkMsQ0F3QkNWLENBQU96b0IsRUFBRXlvQixPQUFReG9CLEVBQUV3b0IsT0FBUXZqQixFQUFHNmlCLEdBdEJoQyxTQUFlL25CLEVBQUdDLEVBQUdpRixFQUFHNmlCLEdBQ2xCL25CLElBQU1DLEVBQ1I4bkIsRUFBRS9jLEtBQUssQ0FBQzlKLEVBQUdnRSxFQUFFOEYsS0FBS29lLEVBQUlsa0IsR0FBSyxTQUFVLEtBQU1pa0IsR0FBWSxFQUFHem9CLEVBQUdvRyxHQUFPOUcsRUFBR0MsS0FDOURBLEdBQ1RpRixFQUFFOEYsS0FBS29lLEVBQUlsa0IsR0FBSyxTQUFXakYsRUFBSWtwQixFQUVsQyxDQWlCQ1QsQ0FBTTFvQixFQUFFMG9CLE1BQU96b0IsRUFBRXlvQixNQUFPeGpCLEVBQUc2aUIsR0FmN0IsU0FBZXNCLEVBQUlDLEVBQUlDLEVBQUlDLEVBQUl0a0IsRUFBRzZpQixHQUNoQyxHQUFJc0IsSUFBT0UsR0FBTUQsSUFBT0UsRUFBSSxDQUMxQixJQUFJdG9CLEVBQUlnRSxFQUFFOEYsS0FBS29lLEVBQUlsa0IsR0FBSyxTQUFVLEtBQU0sSUFBSyxLQUFNLEtBQ25ENmlCLEVBQUUvYyxLQUFLLENBQUM5SixFQUFHQSxFQUFJLEVBQUdSLEVBQUdvRyxHQUFPdWlCLEVBQUlFLElBQU0sQ0FBQ3JvQixFQUFHQSxFQUFJLEVBQUdSLEVBQUdvRyxHQUFPd2lCLEVBQUlFLElBQ2hFLE1BQWlCLElBQVBELEdBQW1CLElBQVBDLEdBQ3JCdGtCLEVBQUU4RixLQUFLb2UsRUFBSWxrQixHQUFLLFNBQVdxa0IsRUFBSyxJQUFNQyxFQUFLLElBRTlDLENBU0N6aUIsQ0FBTS9HLEVBQUUyb0IsT0FBUTNvQixFQUFFNG9CLE9BQVEzb0IsRUFBRTBvQixPQUFRMW9CLEVBQUUyb0IsT0FBUTFqQixFQUFHNmlCLEdBQ2pEL25CLEVBQUlDLEVBQUksS0FDRCxTQUFTb0YsR0FFZCxJQURBLElBQTBCNk4sRUFBdEJoUyxHQUFLLEVBQUc0RCxFQUFJaWpCLEVBQUVsbkIsU0FDVEssRUFBSTRELEdBQUdJLEdBQUdnTyxFQUFJNlUsRUFBRTdtQixJQUFJQSxHQUFLZ1MsRUFBRXhTLEVBQUUyRSxHQUN0QyxPQUFPSCxFQUFFbVAsS0FBSyxHQUNwQixDQUNBLENBQ0EsQ0FFTyxJQUFJcVYsR0FBMEJYLElEeEQ5QixTQUFrQnpwQixHQUN2QixNQUFNeUYsRUFBSSxJQUEwQixtQkFBZDRrQixVQUEyQkEsVUFBWUMsaUJBQWlCdHFCLEVBQVEsSUFDdEYsT0FBT3lGLEVBQUU4a0IsV0FBYTFoQixHQUFXMGdCLEdBQVU5akIsRUFBRS9FLEVBQUcrRSxFQUFFOUUsRUFBRzhFLEVBQUU4RixFQUFHOUYsRUFBRWhFLEVBQUdnRSxFQUFFdEYsRUFBR3NGLEVBQUUxRSxFQUN4RSxHQ3FEb0UsT0FBUSxNQUFPLFFBQ3hFeXBCLEdBQTBCZixJRHBEOUIsU0FBa0J6cEIsR0FDdkIsT0FBYSxNQUFUQSxFQUFzQjZJLElBQ3JCcWdCLEtBQVNBLEdBQVUvYixTQUFTTSxnQkFBZ0IsNkJBQThCLE1BQy9FeWIsR0FBUS9ZLGFBQWEsWUFBYW5RLElBQzVCQSxFQUFRa3BCLEdBQVExZ0IsVUFBVWlpQixRQUFRQyxlQUVqQ25CLElBRFB2cEIsRUFBUUEsRUFBTTJxQixRQUNTanFCLEVBQUdWLEVBQU1XLEVBQUdYLEVBQU11TCxFQUFHdkwsRUFBTXlCLEVBQUd6QixFQUFNRyxFQUFHSCxFQUFNZSxHQUZMOEgsR0FHakUsR0M2Q29FLEtBQU0sSUFBSyxLQzNEaEUsU0FBU2tkLEdBQUlwaUIsRUFBT2tqQixHQUNqQyxJQUFJN0QsRUFBSUQsSUFBT3BmLEVBQVFpbkIsR0FBU2puQixJQUFRcWYsR0FBSTZELEVBQU0rRCxHQUFTL0QsSUFBTTdELEdBQzdEdGlCLEVBQUlxaUIsR0FBTXBmLEVBQU1qRCxFQUFHbW1CLEVBQUlubUIsR0FDdkJDLEVBQUlvaUIsR0FBTXBmLEVBQU1oRCxFQUFHa21CLEVBQUlsbUIsR0FDdkJnakIsRUFBVVosR0FBTXBmLEVBQU1nZ0IsUUFBU2tELEVBQUlsRCxTQUN2QyxPQUFPLFNBQVM1ZCxHQUtkLE9BSkFwQyxFQUFNcWYsRUFBSUEsRUFBRWpkLEdBQ1pwQyxFQUFNakQsRUFBSUEsRUFBRXFGLEdBQ1pwQyxFQUFNaEQsRUFBSUEsRUFBRW9GLEdBQ1pwQyxFQUFNZ2dCLFFBQVVBLEVBQVE1ZCxHQUNqQnBDLEVBQVEsRUFDbkIsQ0FDQSxDQ2ZBLElBSUlrbkIsR0FDQUMsR0FMQUMsR0FBUSxFQUNSQyxHQUFVLEVBQ1ZDLEdBQVcsRUFDWEMsR0FBWSxJQUdaQyxHQUFZLEVBQ1pDLEdBQVcsRUFDWEMsR0FBWSxFQUNaQyxHQUErQixpQkFBaEJDLGFBQTRCQSxZQUFZQyxJQUFNRCxZQUFjM0QsS0FDM0U2RCxHQUE2QixpQkFBWG5qQixRQUF1QkEsT0FBT29qQixzQkFBd0JwakIsT0FBT29qQixzQkFBc0JwVixLQUFLaE8sUUFBVSxTQUFTdkgsR0FBSzRxQixXQUFXNXFCLEVBQUcsS0FFN0ksU0FBU3lxQixLQUNkLE9BQU9KLEtBQWFLLEdBQVNHLElBQVdSLEdBQVdFLEdBQU1FLE1BQVFILEdBQ25FLENBRUEsU0FBU08sS0FDUFIsR0FBVyxDQUNiLENBRU8sU0FBU1MsS0FDZHBwQixLQUFLcXBCLE1BQ0xycEIsS0FBS3NwQixNQUNMdHBCLEtBQUt5TSxNQUFRLElBQ2YsQ0F5Qk8sU0FBUzhjLEdBQU14Z0IsRUFBVXlnQixFQUFPQyxHQUNyQyxJQUFJbm1CLEVBQUksSUFBSThsQixHQUVaLE9BREE5bEIsRUFBRW9tQixRQUFRM2dCLEVBQVV5Z0IsRUFBT0MsR0FDcEJubUIsQ0FDVCxDQWFBLFNBQVNxbUIsS0FDUGhCLElBQVlELEdBQVlHLEdBQU1FLE9BQVNILEdBQ3ZDTixHQUFRQyxHQUFVLEVBQ2xCLEtBZEssV0FDTFEsT0FDRVQsR0FFRixJQURBLElBQWtCNXFCLEVBQWQ0RixFQUFJOGtCLEdBQ0Q5a0IsSUFDQTVGLEVBQUlpckIsR0FBV3JsQixFQUFFZ21CLFFBQVUsR0FBR2htQixFQUFFK2xCLE1BQU16ZixVQUFLdkgsRUFBVzNFLEdBQzNENEYsRUFBSUEsRUFBRW1KLFFBRU42YixFQUNKLENBTUlzQixFQUNKLENBQVksUUFDUnRCLEdBQVEsRUFXWixXQUNFLElBQUkxRixFQUFtQkUsRUFBZkQsRUFBS3VGLEdBQWNxQixFQUFPOW1CLElBQ2xDLEtBQU9rZ0IsR0FDREEsRUFBR3dHLE9BQ0RJLEVBQU81RyxFQUFHeUcsUUFBT0csRUFBTzVHLEVBQUd5RyxPQUMvQjFHLEVBQUtDLEVBQUlBLEVBQUtBLEVBQUdwVyxRQUVqQnFXLEVBQUtELEVBQUdwVyxNQUFPb1csRUFBR3BXLE1BQVEsS0FDMUJvVyxFQUFLRCxFQUFLQSxFQUFHblcsTUFBUXFXLEVBQUtzRixHQUFXdEYsR0FHekN1RixHQUFXekYsRUFDWGlILEdBQU1KLEVBQ1IsQ0F2QklLLEdBQ0FuQixHQUFXLENBQ1osQ0FDSCxDQUVBLFNBQVNvQixLQUNQLElBQUloQixFQUFNRixHQUFNRSxNQUFPUyxFQUFRVCxFQUFNTCxHQUNqQ2MsRUFBUWYsS0FBV0csSUFBYVksRUFBT2QsR0FBWUssRUFDekQsQ0FpQkEsU0FBU2MsR0FBTUosR0FDVG5CLEtBQ0FDLEtBQVNBLEdBQVV5QixhQUFhekIsS0FDeEJrQixFQUFPZCxHQUNQLElBQ05jLEVBQU85bUIsTUFBVTRsQixHQUFVVyxXQUFXUyxHQUFNRixFQUFPWixHQUFNRSxNQUFRSCxLQUNqRUosS0FBVUEsR0FBV3lCLGNBQWN6QixPQUVsQ0EsS0FBVUUsR0FBWUcsR0FBTUUsTUFBT1AsR0FBVzBCLFlBQVlILEdBQU10QixLQUNyRUgsR0FBUSxFQUFHVSxHQUFTVyxLQUV4QixDQzNHZSxTQUFBcEIsR0FBU3hmLEVBQVV5Z0IsRUFBT0MsR0FDdkMsSUFBSW5tQixFQUFJLElBQUk4bEIsR0FNWixPQUxBSSxFQUFpQixNQUFUQSxFQUFnQixHQUFLQSxFQUM3QmxtQixFQUFFb21CLFNBQVFTLElBQ1I3bUIsRUFBRW5DLE9BQ0Y0SCxFQUFTb2hCLEVBQVVYLEVBQU0sR0FDeEJBLEVBQU9DLEdBQ0hubUIsQ0FDVCxDRGdCQThsQixHQUFNbGdCLFVBQVlxZ0IsR0FBTXJnQixVQUFZLENBQ2xDekosWUFBYTJwQixHQUNiTSxRQUFTLFNBQVMzZ0IsRUFBVXlnQixFQUFPQyxHQUNqQyxHQUF3QixtQkFBYjFnQixFQUF5QixNQUFNLElBQUlsRyxVQUFVLDhCQUN4RDRtQixHQUFnQixNQUFSQSxFQUFlVixNQUFTVSxJQUFrQixNQUFURCxFQUFnQixHQUFLQSxHQUN6RHhwQixLQUFLeU0sT0FBUzRiLEtBQWFyb0IsT0FDMUJxb0IsR0FBVUEsR0FBUzViLE1BQVF6TSxLQUMxQm9vQixHQUFXcG9CLEtBQ2hCcW9CLEdBQVdyb0IsTUFFYkEsS0FBS3FwQixNQUFRdGdCLEVBQ2IvSSxLQUFLc3BCLE1BQVFHLEVBQ2JJLElBQ0QsRUFDRDFvQixLQUFNLFdBQ0FuQixLQUFLcXBCLFFBQ1BycEIsS0FBS3FwQixNQUFRLEtBQ2JycEIsS0FBS3NwQixNQUFRM21CLElBQ2JrbkIsS0FFSCxHRTNDSCxJQUFJTyxHQUFVNWhCLEVBQVMsUUFBUyxNQUFPLFNBQVUsYUFDN0M2aEIsR0FBYSxHQUVOQyxHQUFVLEVBQ1ZDLEdBQVksRUFDWkMsR0FBVyxFQUNYQyxHQUFVLEVBQ1ZDLEdBQVUsRUFDVkMsR0FBUyxFQUNUQyxHQUFRLEVBRUosU0FBQUMsR0FBUzllLEVBQU1sRCxFQUFNaWlCLEVBQUl4b0IsRUFBT3VLLEVBQU9rZSxHQUNwRCxJQUFJQyxFQUFZamYsRUFBS2tmLGFBQ3JCLEdBQUtELEdBQ0EsR0FBSUYsS0FBTUUsRUFBVyxZQURWamYsRUFBS2tmLGFBQWUsQ0FBQSxHQW1DdEMsU0FBZ0JsZixFQUFNK2UsRUFBSUksR0FDeEIsSUFDSUMsRUFEQUgsRUFBWWpmLEVBQUtrZixhQVFyQixTQUFTSixFQUFTVixHQUNoQmUsRUFBS0UsTUFBUWIsR0FDYlcsRUFBSzNCLE1BQU1HLFFBQVF4b0IsRUFBT2dxQixFQUFLMUIsTUFBTzBCLEVBQUt6QixNQUd2Q3lCLEVBQUsxQixPQUFTVyxHQUFTanBCLEVBQU1pcEIsRUFBVWUsRUFBSzFCLE1BQ2pELENBRUQsU0FBU3RvQixFQUFNaXBCLEdBQ2IsSUFBSWhyQixFQUFHb0UsRUFBR1IsRUFBR29PLEVBR2IsR0FBSStaLEVBQUtFLFFBQVViLEdBQVcsT0FBT3BwQixJQUVyQyxJQUFLaEMsS0FBSzZyQixFQUVSLElBREE3WixFQUFJNlosRUFBVTdyQixJQUNSMEosT0FBU3FpQixFQUFLcmlCLEtBQXBCLENBS0EsR0FBSXNJLEVBQUVpYSxRQUFVWCxHQUFTLE9BQU9sQyxHQUFRcm5CLEdBR3BDaVEsRUFBRWlhLFFBQVVWLElBQ2R2WixFQUFFaWEsTUFBUVIsR0FDVnpaLEVBQUVvWSxNQUFNcG9CLE9BQ1JnUSxFQUFFaEksR0FBR1MsS0FBSyxZQUFhbUMsRUFBTUEsRUFBS1ksU0FBVXdFLEVBQUU3TyxNQUFPNk8sRUFBRXRFLGNBQ2hEbWUsRUFBVTdyQixLQUlUQSxFQUFJMnJCLElBQ1ozWixFQUFFaWEsTUFBUVIsR0FDVnpaLEVBQUVvWSxNQUFNcG9CLE9BQ1JnUSxFQUFFaEksR0FBR1MsS0FBSyxTQUFVbUMsRUFBTUEsRUFBS1ksU0FBVXdFLEVBQUU3TyxNQUFPNk8sRUFBRXRFLGNBQzdDbWUsRUFBVTdyQixHQXBCZ0IsQ0F3Q3JDLEdBWkFvcEIsSUFBUSxXQUNGMkMsRUFBS0UsUUFBVVgsS0FDakJTLEVBQUtFLE1BQVFWLEdBQ2JRLEVBQUszQixNQUFNRyxRQUFRNWlCLEVBQU1va0IsRUFBSzFCLE1BQU8wQixFQUFLekIsTUFDMUMzaUIsRUFBS3FqQixHQUViLElBSUllLEVBQUtFLE1BQVFaLEdBQ2JVLEVBQUsvaEIsR0FBR1MsS0FBSyxRQUFTbUMsRUFBTUEsRUFBS1ksU0FBVXVlLEVBQUs1b0IsTUFBTzRvQixFQUFLcmUsT0FDeERxZSxFQUFLRSxRQUFVWixHQUFuQixDQUtBLElBSkFVLEVBQUtFLE1BQVFYLEdBR2JVLEVBQVEsSUFBSTdtQixNQUFNdkIsRUFBSW1vQixFQUFLQyxNQUFNcnNCLFFBQzVCSyxFQUFJLEVBQUdvRSxHQUFLLEVBQUdwRSxFQUFJNEQsSUFBSzVELEdBQ3ZCZ1MsRUFBSStaLEVBQUtDLE1BQU1oc0IsR0FBRzVCLE1BQU1xTSxLQUFLbUMsRUFBTUEsRUFBS1ksU0FBVXVlLEVBQUs1b0IsTUFBTzRvQixFQUFLcmUsVUFDckVzZSxJQUFRNW5CLEdBQUs0TixHQUdqQmdhLEVBQU1yc0IsT0FBU3lFLEVBQUksQ0FWaUIsQ0FXckMsQ0FFRCxTQUFTdUQsRUFBS3FqQixHQUtaLElBSkEsSUFBSTdtQixFQUFJNm1CLEVBQVVlLEVBQUtHLFNBQVdILEVBQUtJLEtBQUsxaEIsS0FBSyxLQUFNdWdCLEVBQVVlLEVBQUtHLFdBQWFILEVBQUszQixNQUFNRyxRQUFRdm9CLEdBQU8rcEIsRUFBS0UsTUFBUVQsR0FBUSxHQUM5SHhyQixHQUFLLEVBQ0w0RCxFQUFJb29CLEVBQU1yc0IsU0FFTEssRUFBSTRELEdBQ1hvb0IsRUFBTWhzQixHQUFHeUssS0FBS21DLEVBQU16SSxHQUlsQjRuQixFQUFLRSxRQUFVVCxLQUNqQk8sRUFBSy9oQixHQUFHUyxLQUFLLE1BQU9tQyxFQUFNQSxFQUFLWSxTQUFVdWUsRUFBSzVvQixNQUFPNG9CLEVBQUtyZSxPQUMxRDFMLElBRUgsQ0FFRCxTQUFTQSxJQUlQLElBQUssSUFBSWhDLEtBSFQrckIsRUFBS0UsTUFBUVIsR0FDYk0sRUFBSzNCLE1BQU1wb0IsY0FDSjZwQixFQUFVRixHQUNIRSxFQUFXLGNBQ2xCamYsRUFBS2tmLFlBQ2IsQ0E5RkRELEVBQVVGLEdBQU1JLEVBQ2hCQSxFQUFLM0IsTUFBUUEsR0FBTXNCLEVBQVUsRUFBR0ssRUFBS3pCLEtBOEZ2QyxDQXRJRXRXLENBQU9wSCxFQUFNK2UsRUFBSSxDQUNmamlCLEtBQU1BLEVBQ052RyxNQUFPQSxFQUNQdUssTUFBT0EsRUFDUDFELEdBQUlpaEIsR0FDSmUsTUFBT2QsR0FDUFosS0FBTXNCLEVBQU90QixLQUNiRCxNQUFPdUIsRUFBT3ZCLE1BQ2Q2QixTQUFVTixFQUFPTSxTQUNqQkMsS0FBTVAsRUFBT08sS0FDYi9CLE1BQU8sS0FDUDZCLE1BQU9kLElBRVgsQ0FFTyxTQUFTaUIsR0FBS3hmLEVBQU0rZSxHQUN6QixJQUFJRCxFQUFXenFCLEdBQUkyTCxFQUFNK2UsR0FDekIsR0FBSUQsRUFBU08sTUFBUWQsR0FBUyxNQUFNLElBQUk1aEIsTUFBTSwrQkFDOUMsT0FBT21pQixDQUNULENBRU8sU0FBUzFxQixHQUFJNEwsRUFBTStlLEdBQ3hCLElBQUlELEVBQVd6cUIsR0FBSTJMLEVBQU0rZSxHQUN6QixHQUFJRCxFQUFTTyxNQUFRWCxHQUFTLE1BQU0sSUFBSS9oQixNQUFNLDZCQUM5QyxPQUFPbWlCLENBQ1QsQ0FFTyxTQUFTenFCLEdBQUkyTCxFQUFNK2UsR0FDeEIsSUFBSUQsRUFBVzllLEVBQUtrZixhQUNwQixJQUFLSixLQUFjQSxFQUFXQSxFQUFTQyxJQUFNLE1BQU0sSUFBSXBpQixNQUFNLHdCQUM3RCxPQUFPbWlCLENBQ1QsQ0MvQ0EsU0FBU1csR0FBWVYsRUFBSWppQixHQUN2QixJQUFJNGlCLEVBQVFDLEVBQ1osT0FBTyxXQUNMLElBQUliLEVBQVcxcUIsR0FBSUgsS0FBTThxQixHQUNyQkssRUFBUU4sRUFBU00sTUFLckIsR0FBSUEsSUFBVU0sRUFFWixJQUFLLElBQUl0c0IsRUFBSSxFQUFHNEQsR0FEaEIyb0IsRUFBU0QsRUFBU04sR0FDU3JzQixPQUFRSyxFQUFJNEQsSUFBSzVELEVBQzFDLEdBQUl1c0IsRUFBT3ZzQixHQUFHMEosT0FBU0EsRUFBTSxFQUMzQjZpQixFQUFTQSxFQUFPdmpCLFNBQ1RvSyxPQUFPcFQsRUFBRyxHQUNqQixLQUNELENBSUwwckIsRUFBU00sTUFBUU8sQ0FDckIsQ0FDQSxDQUVBLFNBQVNDLEdBQWNiLEVBQUlqaUIsRUFBTXRMLEdBQy9CLElBQUlrdUIsRUFBUUMsRUFDWixHQUFxQixtQkFBVm51QixFQUFzQixNQUFNLElBQUltTCxNQUMzQyxPQUFPLFdBQ0wsSUFBSW1pQixFQUFXMXFCLEdBQUlILEtBQU04cUIsR0FDckJLLEVBQVFOLEVBQVNNLE1BS3JCLEdBQUlBLElBQVVNLEVBQVEsQ0FDcEJDLEdBQVVELEVBQVNOLEdBQU9oakIsUUFDMUIsSUFBSyxJQUFJN0UsRUFBSSxDQUFDdUYsS0FBTUEsRUFBTXRMLE1BQU9BLEdBQVE0QixFQUFJLEVBQUc0RCxFQUFJMm9CLEVBQU81c0IsT0FBUUssRUFBSTRELElBQUs1RCxFQUMxRSxHQUFJdXNCLEVBQU92c0IsR0FBRzBKLE9BQVNBLEVBQU0sQ0FDM0I2aUIsRUFBT3ZzQixHQUFLbUUsRUFDWixLQUNELENBRUNuRSxJQUFNNEQsR0FBRzJvQixFQUFPemlCLEtBQUszRixFQUMxQixDQUVEdW5CLEVBQVNNLE1BQVFPLENBQ3JCLENBQ0EsQ0FvQk8sU0FBU0UsR0FBV2prQixFQUFZa0IsRUFBTXRMLEdBQzNDLElBQUl1dEIsRUFBS25qQixFQUFXa2tCLElBT3BCLE9BTEFsa0IsRUFBV00sTUFBSyxXQUNkLElBQUk0aUIsRUFBVzFxQixHQUFJSCxLQUFNOHFCLElBQ3hCRCxFQUFTdHRCLFFBQVVzdEIsRUFBU3R0QixNQUFRLENBQUUsSUFBR3NMLEdBQVF0TCxFQUFNUSxNQUFNaUMsS0FBTW9FLFVBQ3hFLElBRVMsU0FBUzJILEdBQ2QsT0FBTzNMLEdBQUkyTCxFQUFNK2UsR0FBSXZ0QixNQUFNc0wsRUFDL0IsQ0FDQSxDQzdFZSxTQUFBaWpCLEdBQVM3dEIsRUFBR0MsR0FDekIsSUFBSTRLLEVBQ0osT0FBcUIsaUJBQU41SyxFQUFpQm1uQixHQUMxQm5uQixhQUFhb2lCLEdBQVE0RCxJQUNwQnBiLEVBQUl3WCxHQUFNcGlCLEtBQU9BLEVBQUk0SyxFQUFHb2IsSUFDekJ3QixJQUFtQnpuQixFQUFHQyxFQUM5QixDQ0pBLFNBQVNtUCxHQUFXeEUsR0FDbEIsT0FBTyxXQUNMN0ksS0FBS3NOLGdCQUFnQnpFLEVBQ3pCLENBQ0EsQ0FFQSxTQUFTMEUsR0FBYXJDLEdBQ3BCLE9BQU8sV0FDTGxMLEtBQUt3TixrQkFBa0J0QyxFQUFTWCxNQUFPVyxFQUFTVixNQUNwRCxDQUNBLENBRUEsU0FBU2lELEdBQWE1RSxFQUFNaWpCLEVBQWFDLEdBQ3ZDLElBQUlDLEVBRUFDLEVBREFDLEVBQVVILEVBQVMsR0FFdkIsT0FBTyxXQUNMLElBQUlJLEVBQVVuc0IsS0FBSzZILGFBQWFnQixHQUNoQyxPQUFPc2pCLElBQVlELEVBQVUsS0FDdkJDLElBQVlILEVBQVdDLEVBQ3ZCQSxFQUFlSCxFQUFZRSxFQUFXRyxFQUFTSixFQUN6RCxDQUNBLENBRUEsU0FBU3BlLEdBQWV6QyxFQUFVNGdCLEVBQWFDLEdBQzdDLElBQUlDLEVBRUFDLEVBREFDLEVBQVVILEVBQVMsR0FFdkIsT0FBTyxXQUNMLElBQUlJLEVBQVVuc0IsS0FBS3FWLGVBQWVuSyxFQUFTWCxNQUFPVyxFQUFTVixPQUMzRCxPQUFPMmhCLElBQVlELEVBQVUsS0FDdkJDLElBQVlILEVBQVdDLEVBQ3ZCQSxFQUFlSCxFQUFZRSxFQUFXRyxFQUFTSixFQUN6RCxDQUNBLENBRUEsU0FBU2xlLEdBQWFoRixFQUFNaWpCLEVBQWF2dUIsR0FDdkMsSUFBSXl1QixFQUNBSSxFQUNBSCxFQUNKLE9BQU8sV0FDTCxJQUFJRSxFQUErQkQsRUFBdEJILEVBQVN4dUIsRUFBTXlDLE1BQzVCLEdBQWMsTUFBVityQixFQUdKLE9BRkFJLEVBQVVuc0IsS0FBSzZILGFBQWFnQixPQUM1QnFqQixFQUFVSCxFQUFTLElBQ1UsS0FDdkJJLElBQVlILEdBQVlFLElBQVlFLEVBQVdILEdBQzlDRyxFQUFXRixFQUFTRCxFQUFlSCxFQUFZRSxFQUFXRyxFQUFTSixJQUwxQy9yQixLQUFLc04sZ0JBQWdCekUsRUFNekQsQ0FDQSxDQUVBLFNBQVNrRixHQUFlN0MsRUFBVTRnQixFQUFhdnVCLEdBQzdDLElBQUl5dUIsRUFDQUksRUFDQUgsRUFDSixPQUFPLFdBQ0wsSUFBSUUsRUFBK0JELEVBQXRCSCxFQUFTeHVCLEVBQU15QyxNQUM1QixHQUFjLE1BQVYrckIsRUFHSixPQUZBSSxFQUFVbnNCLEtBQUtxVixlQUFlbkssRUFBU1gsTUFBT1csRUFBU1YsV0FDdkQwaEIsRUFBVUgsRUFBUyxJQUNVLEtBQ3ZCSSxJQUFZSCxHQUFZRSxJQUFZRSxFQUFXSCxHQUM5Q0csRUFBV0YsRUFBU0QsRUFBZUgsRUFBWUUsRUFBV0csRUFBU0osSUFMMUMvckIsS0FBS3dOLGtCQUFrQnRDLEVBQVNYLE1BQU9XLEVBQVNWLE1BTXBGLENBQ0EsQ0N2REEsU0FBUzZoQixHQUFZbmhCLEVBQVUzTixHQUM3QixJQUFJcWxCLEVBQUk3ZSxFQUNSLFNBQVNvbkIsSUFDUCxJQUFJaHNCLEVBQUk1QixFQUFNUSxNQUFNaUMsS0FBTW9FLFdBRTFCLE9BRElqRixJQUFNNEUsSUFBSTZlLEdBQU03ZSxFQUFLNUUsSUFWN0IsU0FBMkIrTCxFQUFVL0wsR0FDbkMsT0FBTyxTQUFTbUUsR0FDZHRELEtBQUs0TixlQUFlMUMsRUFBU1gsTUFBT1csRUFBU1YsTUFBT3JMLEVBQUV5SyxLQUFLNUosS0FBTXNELEdBQ3JFLENBQ0EsQ0FNbUNncEIsQ0FBa0JwaEIsRUFBVS9MLElBQ3BEeWpCLENBQ1IsQ0FFRCxPQURBdUksRUFBTW9CLE9BQVNodkIsRUFDUjR0QixDQUNULENBRUEsU0FBU3FCLEdBQVUzakIsRUFBTXRMLEdBQ3ZCLElBQUlxbEIsRUFBSTdlLEVBQ1IsU0FBU29uQixJQUNQLElBQUloc0IsRUFBSTVCLEVBQU1RLE1BQU1pQyxLQUFNb0UsV0FFMUIsT0FESWpGLElBQU00RSxJQUFJNmUsR0FBTTdlLEVBQUs1RSxJQTNCN0IsU0FBeUIwSixFQUFNMUosR0FDN0IsT0FBTyxTQUFTbUUsR0FDZHRELEtBQUswTixhQUFhN0UsRUFBTTFKLEVBQUV5SyxLQUFLNUosS0FBTXNELEdBQ3pDLENBQ0EsQ0F1Qm1DbXBCLENBQWdCNWpCLEVBQU0xSixJQUM5Q3lqQixDQUNSLENBRUQsT0FEQXVJLEVBQU1vQixPQUFTaHZCLEVBQ1I0dEIsQ0FDVCxDQ2hDQSxTQUFTdUIsR0FBYzVCLEVBQUl2dEIsR0FDekIsT0FBTyxXQUNMZ3VCLEdBQUt2ckIsS0FBTThxQixHQUFJdEIsT0FBU2pzQixFQUFNUSxNQUFNaUMsS0FBTW9FLFVBQzlDLENBQ0EsQ0FFQSxTQUFTdW9CLEdBQWM3QixFQUFJdnRCLEdBQ3pCLE9BQU9BLEdBQVNBLEVBQU8sV0FDckJndUIsR0FBS3ZyQixLQUFNOHFCLEdBQUl0QixNQUFRanNCLENBQzNCLENBQ0EsQ0NWQSxTQUFTcXZCLEdBQWlCOUIsRUFBSXZ0QixHQUM1QixPQUFPLFdBQ0w0QyxHQUFJSCxLQUFNOHFCLEdBQUlPLFVBQVk5dEIsRUFBTVEsTUFBTWlDLEtBQU1vRSxVQUNoRCxDQUNBLENBRUEsU0FBU3lvQixHQUFpQi9CLEVBQUl2dEIsR0FDNUIsT0FBT0EsR0FBU0EsRUFBTyxXQUNyQjRDLEdBQUlILEtBQU04cUIsR0FBSU8sU0FBVzl0QixDQUM3QixDQUNBLENDVkEsSUFBSW1WLEdBQVloTSxHQUFVd0MsVUFBVXpKLFlDaUJwQyxTQUFTd08sR0FBWXBGLEdBQ25CLE9BQU8sV0FDTDdJLEtBQUtrTyxNQUFNQyxlQUFldEYsRUFDOUIsQ0FDQSxDQ0RBLElBQUlpaUIsR0FBSyxFQUVGLFNBQVNnQyxHQUFXbmEsRUFBUUMsRUFBUy9KLEVBQU1paUIsR0FDaEQ5cUIsS0FBSzZTLFFBQVVGLEVBQ2YzUyxLQUFLOFMsU0FBV0YsRUFDaEI1UyxLQUFLK3NCLE1BQVFsa0IsRUFDYjdJLEtBQUs2ckIsSUFBTWYsQ0FDYixDQU1PLFNBQVNrQyxLQUNkLFFBQVNsQyxFQUNYLENBRUEsSUFBSW1DLEdBQXNCdm1CLEdBQVV3QyxVQUVwQzRqQixHQUFXNWpCLFVBQW1DLENBQzVDekosWUFBYXF0QixHQUNidmxCLE9DdkNhLFNBQVNBLEdBQ3RCLElBQUlzQixFQUFPN0ksS0FBSytzQixNQUNaakMsRUFBSzlxQixLQUFLNnJCLElBRVEsbUJBQVh0a0IsSUFBdUJBLEVBQVM4RCxFQUFTOUQsSUFFcEQsSUFBSyxJQUFJb0wsRUFBUzNTLEtBQUs2UyxRQUFTN1AsRUFBSTJQLEVBQU83VCxPQUFRdVUsRUFBWSxJQUFJL08sTUFBTXRCLEdBQUlPLEVBQUksRUFBR0EsRUFBSVAsSUFBS08sRUFDM0YsSUFBSyxJQUFpRndJLEVBQU11SCxFQUFuRnpHLEVBQVE4RixFQUFPcFAsR0FBSVIsRUFBSThKLEVBQU0vTixPQUFReVUsRUFBV0YsRUFBVTlQLEdBQUssSUFBSWUsTUFBTXZCLEdBQW1CNUQsRUFBSSxFQUFHQSxFQUFJNEQsSUFBSzVELEdBQzlHNE0sRUFBT2MsRUFBTTFOLE1BQVFtVSxFQUFVL0wsRUFBT3FDLEtBQUttQyxFQUFNQSxFQUFLWSxTQUFVeE4sRUFBRzBOLE1BQ2xFLGFBQWNkLElBQU11SCxFQUFRM0csU0FBV1osRUFBS1ksVUFDaEQ0RyxFQUFTcFUsR0FBS21VLEVBQ2R1WCxHQUFTdFgsRUFBU3BVLEdBQUkwSixFQUFNaWlCLEVBQUkzckIsRUFBR29VLEVBQVVuVCxHQUFJMkwsRUFBTStlLEtBSzdELE9BQU8sSUFBSWdDLEdBQVd6WixFQUFXclQsS0FBSzhTLFNBQVVqSyxFQUFNaWlCLEVBQ3hELEVEdUJFbGtCLFVFeENhLFNBQVNXLEdBQ3RCLElBQUlzQixFQUFPN0ksS0FBSytzQixNQUNaakMsRUFBSzlxQixLQUFLNnJCLElBRVEsbUJBQVh0a0IsSUFBdUJBLEVBQVNpRSxFQUFZakUsSUFFdkQsSUFBSyxJQUFJb0wsRUFBUzNTLEtBQUs2UyxRQUFTN1AsRUFBSTJQLEVBQU83VCxPQUFRdVUsRUFBWSxHQUFJVCxFQUFVLEdBQUlyUCxFQUFJLEVBQUdBLEVBQUlQLElBQUtPLEVBQy9GLElBQUssSUFBeUN3SSxFQUFyQ2MsRUFBUThGLEVBQU9wUCxHQUFJUixFQUFJOEosRUFBTS9OLE9BQWNLLEVBQUksRUFBR0EsRUFBSTRELElBQUs1RCxFQUNsRSxHQUFJNE0sRUFBT2MsRUFBTTFOLEdBQUksQ0FDbkIsSUFBSyxJQUEyRGtULEVBQXZEbEcsRUFBVzVFLEVBQU9xQyxLQUFLbUMsRUFBTUEsRUFBS1ksU0FBVXhOLEVBQUcwTixHQUFlcWdCLEVBQVU5c0IsR0FBSTJMLEVBQU0rZSxHQUFLcG9CLEVBQUksRUFBRzZkLEVBQUlwVSxFQUFTck4sT0FBUTRELEVBQUk2ZCxJQUFLN2QsR0FDL0gyUCxFQUFRbEcsRUFBU3pKLEtBQ25CbW9CLEdBQVN4WSxFQUFPeEosRUFBTWlpQixFQUFJcG9CLEVBQUd5SixFQUFVK2dCLEdBRzNDN1osRUFBVXBLLEtBQUtrRCxHQUNmeUcsRUFBUTNKLEtBQUs4QyxFQUNkLENBSUwsT0FBTyxJQUFJK2dCLEdBQVd6WixFQUFXVCxFQUFTL0osRUFBTWlpQixFQUNsRCxFRm9CRXRYLFlBQWF5WixHQUFvQnpaLFlBQ2pDRyxlQUFnQnNaLEdBQW9CdFosZUFDcEMzTCxPRzVDYSxTQUFTeUwsR0FDRCxtQkFBVkEsSUFBc0JBLEVBQVE3SCxHQUFRNkgsSUFFakQsSUFBSyxJQUFJZCxFQUFTM1MsS0FBSzZTLFFBQVM3UCxFQUFJMlAsRUFBTzdULE9BQVF1VSxFQUFZLElBQUkvTyxNQUFNdEIsR0FBSU8sRUFBSSxFQUFHQSxFQUFJUCxJQUFLTyxFQUMzRixJQUFLLElBQXVFd0ksRUFBbkVjLEVBQVE4RixFQUFPcFAsR0FBSVIsRUFBSThKLEVBQU0vTixPQUFReVUsRUFBV0YsRUFBVTlQLEdBQUssR0FBVXBFLEVBQUksRUFBR0EsRUFBSTRELElBQUs1RCxHQUMzRjRNLEVBQU9jLEVBQU0xTixLQUFPc1UsRUFBTTdKLEtBQUttQyxFQUFNQSxFQUFLWSxTQUFVeE4sRUFBRzBOLElBQzFEMEcsRUFBU3RLLEtBQUs4QyxHQUtwQixPQUFPLElBQUkrZ0IsR0FBV3paLEVBQVdyVCxLQUFLOFMsU0FBVTlTLEtBQUsrc0IsTUFBTy9zQixLQUFLNnJCLElBQ25FLEVIaUNFcGtCLE1JOUNhLFNBQVNFLEdBQ3RCLEdBQUlBLEVBQVdra0IsTUFBUTdyQixLQUFLNnJCLElBQUssTUFBTSxJQUFJbmpCLE1BRTNDLElBQUssSUFBSTZMLEVBQVV2VSxLQUFLNlMsUUFBUzJCLEVBQVU3TSxFQUFXa0wsUUFBUzRCLEVBQUtGLEVBQVF6VixPQUFRNFYsRUFBS0YsRUFBUTFWLE9BQVFrRSxFQUFJbkMsS0FBSzBCLElBQUlrUyxFQUFJQyxHQUFLQyxFQUFTLElBQUlyUSxNQUFNbVEsR0FBS2xSLEVBQUksRUFBR0EsRUFBSVAsSUFBS08sRUFDckssSUFBSyxJQUFtR3dJLEVBQS9GNkksRUFBU0wsRUFBUWhSLEdBQUlzUixFQUFTTCxFQUFRalIsR0FBSVIsRUFBSTZSLEVBQU85VixPQUFRMkksRUFBUWtOLEVBQU9wUixHQUFLLElBQUllLE1BQU12QixHQUFVNUQsRUFBSSxFQUFHQSxFQUFJNEQsSUFBSzVELEdBQ3hINE0sRUFBTzZJLEVBQU96VixJQUFNMFYsRUFBTzFWLE1BQzdCc0ksRUFBTXRJLEdBQUs0TSxHQUtqQixLQUFPeEksRUFBSWtSLElBQU1sUixFQUNmb1IsRUFBT3BSLEdBQUtnUixFQUFRaFIsR0FHdEIsT0FBTyxJQUFJdXBCLEdBQVduWSxFQUFRM1UsS0FBSzhTLFNBQVU5UyxLQUFLK3NCLE1BQU8vc0IsS0FBSzZyQixJQUNoRSxFSitCRW5sQixVRjdDYSxXQUNiLE9BQU8sSUFBSWdNLEdBQVUxUyxLQUFLNlMsUUFBUzdTLEtBQUs4UyxTQUMxQyxFRTRDRW5MLFdLL0NhLFdBS2IsSUFKQSxJQUFJa0IsRUFBTzdJLEtBQUsrc0IsTUFDWkksRUFBTW50QixLQUFLNnJCLElBQ1h1QixFQUFNSixLQUVEcmEsRUFBUzNTLEtBQUs2UyxRQUFTN1AsRUFBSTJQLEVBQU83VCxPQUFReUUsRUFBSSxFQUFHQSxFQUFJUCxJQUFLTyxFQUNqRSxJQUFLLElBQXlDd0ksRUFBckNjLEVBQVE4RixFQUFPcFAsR0FBSVIsRUFBSThKLEVBQU0vTixPQUFjSyxFQUFJLEVBQUdBLEVBQUk0RCxJQUFLNUQsRUFDbEUsR0FBSTRNLEVBQU9jLEVBQU0xTixHQUFJLENBQ25CLElBQUkrdEIsRUFBVTlzQixHQUFJMkwsRUFBTW9oQixHQUN4QnRDLEdBQVM5ZSxFQUFNbEQsRUFBTXVrQixFQUFLanVCLEVBQUcwTixFQUFPLENBQ2xDNGMsS0FBTXlELEVBQVF6RCxLQUFPeUQsRUFBUTFELE1BQVEwRCxFQUFRN0IsU0FDN0M3QixNQUFPLEVBQ1A2QixTQUFVNkIsRUFBUTdCLFNBQ2xCQyxLQUFNNEIsRUFBUTVCLE1BRWpCLENBSUwsT0FBTyxJQUFJd0IsR0FBV25hLEVBQVEzUyxLQUFLOFMsU0FBVWpLLEVBQU11a0IsRUFDckQsRUw0QkV4akIsS0FBTXFqQixHQUFvQnJqQixLQUMxQnVMLE1BQU84WCxHQUFvQjlYLE1BQzNCcEosS0FBTWtoQixHQUFvQmxoQixLQUMxQnFKLEtBQU02WCxHQUFvQjdYLEtBQzFCN0osTUFBTzBoQixHQUFvQjFoQixNQUMzQnRELEtBQU1nbEIsR0FBb0JobEIsS0FDMUJrQixHTWhDYSxTQUFTTixFQUFNd0ksR0FDNUIsSUFBSXlaLEVBQUs5cUIsS0FBSzZyQixJQUVkLE9BQU96bkIsVUFBVXRGLE9BQVMsRUFDcEJzQixHQUFJSixLQUFLK0wsT0FBUStlLEdBQUkzaEIsR0FBR0EsR0FBR04sR0FDM0I3SSxLQUFLaUksS0FwQmIsU0FBb0I2aUIsRUFBSWppQixFQUFNd0ksR0FDNUIsSUFBSWdjLEVBQUtDLEVBQUtDLEVBVGhCLFNBQWUxa0IsR0FDYixPQUFRQSxFQUFPLElBQUlVLE9BQU9DLE1BQU0sU0FBU2drQixPQUFNLFNBQVNscUIsR0FDdEQsSUFBSW5FLEVBQUltRSxFQUFFb0csUUFBUSxLQUVsQixPQURJdkssR0FBSyxJQUFHbUUsRUFBSUEsRUFBRTZFLE1BQU0sRUFBR2hKLEtBQ25CbUUsR0FBVyxVQUFOQSxDQUNqQixHQUNBLENBR3NCcEMsQ0FBTTJILEdBQVEwaUIsR0FBT3ByQixHQUN6QyxPQUFPLFdBQ0wsSUFBSTBxQixFQUFXMEMsRUFBSXZ0QixLQUFNOHFCLEdBQ3JCM2hCLEVBQUswaEIsRUFBUzFoQixHQUtkQSxJQUFPa2tCLElBQU1DLEdBQU9ELEVBQU1sa0IsR0FBSTFDLFFBQVEwQyxHQUFHTixFQUFNd0ksR0FFbkR3WixFQUFTMWhCLEdBQUtta0IsQ0FDbEIsQ0FDQSxDQU9rQkcsQ0FBVzNDLEVBQUlqaUIsRUFBTXdJLEdBQ3ZDLEVOMkJFaEssS05hYSxTQUFTd0IsRUFBTXRMLEdBQzVCLElBQUkyTixFQUFXYixFQUFVeEIsR0FBTzFKLEVBQWlCLGNBQWIrTCxFQUEyQjhiLEdBQXVCOEUsR0FDdEYsT0FBTzlyQixLQUFLd3NCLFVBQVUzakIsRUFBdUIsbUJBQVZ0TCxHQUM1QjJOLEVBQVNWLE1BQVF1RCxHQUFpQkYsSUFBYzNDLEVBQVUvTCxFQUFHeXNCLEdBQVc1ckIsS0FBTSxRQUFVNkksRUFBTXRMLElBQ3RGLE1BQVRBLEdBQWlCMk4sRUFBU1YsTUFBUStDLEdBQWVGLElBQVluQyxJQUM1REEsRUFBU1YsTUFBUW1ELEdBQWlCRixJQUFjdkMsRUFBVS9MLEVBQUc1QixHQUN0RSxFTWxCRWl2QixVTHZCYSxTQUFTM2pCLEVBQU10TCxHQUM1QixJQUFJb0MsRUFBTSxRQUFVa0osRUFDcEIsR0FBSXpFLFVBQVV0RixPQUFTLEVBQUcsT0FBUWEsRUFBTUssS0FBS21yQixNQUFNeHJCLEtBQVNBLEVBQUk0c0IsT0FDaEUsR0FBYSxNQUFUaHZCLEVBQWUsT0FBT3lDLEtBQUttckIsTUFBTXhyQixFQUFLLE1BQzFDLEdBQXFCLG1CQUFWcEMsRUFBc0IsTUFBTSxJQUFJbUwsTUFDM0MsSUFBSXdDLEVBQVdiLEVBQVV4QixHQUN6QixPQUFPN0ksS0FBS21yQixNQUFNeHJCLEdBQU11TCxFQUFTVixNQUFRNmhCLEdBQWNHLElBQVd0aEIsRUFBVTNOLEdBQzlFLEVLaUJFMlEsTURRYSxTQUFTckYsRUFBTXRMLEVBQU84USxHQUNuQyxJQUFJbFAsRUFBcUIsY0FBaEIwSixHQUFRLElBQXNCbWUsR0FBdUI4RSxHQUM5RCxPQUFnQixNQUFUdnVCLEVBQWdCeUMsS0FDbEIwdEIsV0FBVzdrQixFQWpFbEIsU0FBbUJBLEVBQU1pakIsR0FDdkIsSUFBSUUsRUFDQUksRUFDQUgsRUFDSixPQUFPLFdBQ0wsSUFBSUUsRUFBVWplLEdBQU1sTyxLQUFNNkksR0FDdEJxakIsR0FBV2xzQixLQUFLa08sTUFBTUMsZUFBZXRGLEdBQU9xRixHQUFNbE8sS0FBTTZJLElBQzVELE9BQU9zakIsSUFBWUQsRUFBVSxLQUN2QkMsSUFBWUgsR0FBWUUsSUFBWUUsRUFBV0gsRUFDL0NBLEVBQWVILEVBQVlFLEVBQVdHLEVBQVNDLEVBQVdGLEVBQ3BFLENBQ0EsQ0FzRHdCeUIsQ0FBVTlrQixFQUFNMUosSUFDakNnSyxHQUFHLGFBQWVOLEVBQU1vRixHQUFZcEYsSUFDcEIsbUJBQVZ0TCxFQUF1QnlDLEtBQzdCMHRCLFdBQVc3a0IsRUFyQ2xCLFNBQXVCQSxFQUFNaWpCLEVBQWF2dUIsR0FDeEMsSUFBSXl1QixFQUNBSSxFQUNBSCxFQUNKLE9BQU8sV0FDTCxJQUFJRSxFQUFVamUsR0FBTWxPLEtBQU02SSxHQUN0QmtqQixFQUFTeHVCLEVBQU15QyxNQUNma3NCLEVBQVVILEVBQVMsR0FFdkIsT0FEYyxNQUFWQSxJQUFvQy9yQixLQUFLa08sTUFBTUMsZUFBZXRGLEdBQTlDcWpCLEVBQVVILEVBQTJDN2QsR0FBTWxPLEtBQU02SSxJQUM5RXNqQixJQUFZRCxFQUFVLEtBQ3ZCQyxJQUFZSCxHQUFZRSxJQUFZRSxFQUFXSCxHQUM5Q0csRUFBV0YsRUFBU0QsRUFBZUgsRUFBWUUsRUFBV0csRUFBU0osR0FDOUUsQ0FDQSxDQXdCd0J4ZCxDQUFjMUYsRUFBTTFKLEVBQUd5c0IsR0FBVzVyQixLQUFNLFNBQVc2SSxFQUFNdEwsS0FDMUUwSyxLQXZCUCxTQUEwQjZpQixFQUFJamlCLEdBQzVCLElBQUl3a0IsRUFBS0MsRUFBS00sRUFBd0Q3bEIsRUFBN0NwSSxFQUFNLFNBQVdrSixFQUFNMkksRUFBUSxPQUFTN1IsRUFDakUsT0FBTyxXQUNMLElBQUlrckIsRUFBVzFxQixHQUFJSCxLQUFNOHFCLEdBQ3JCM2hCLEVBQUswaEIsRUFBUzFoQixHQUNka0ksRUFBa0MsTUFBdkJ3WixFQUFTdHRCLE1BQU1vQyxHQUFlb0ksSUFBV0EsRUFBU2tHLEdBQVlwRixTQUFTeEcsRUFLbEY4RyxJQUFPa2tCLEdBQU9PLElBQWN2YyxJQUFXaWMsR0FBT0QsRUFBTWxrQixHQUFJMUMsUUFBUTBDLEdBQUdxSSxFQUFPb2MsRUFBWXZjLEdBRTFGd1osRUFBUzFoQixHQUFLbWtCLENBQ2xCLENBQ0EsQ0FTWU8sQ0FBaUI3dEIsS0FBSzZyQixJQUFLaGpCLElBQ2pDN0ksS0FDQzB0QixXQUFXN2tCLEVBcERsQixTQUF1QkEsRUFBTWlqQixFQUFhQyxHQUN4QyxJQUFJQyxFQUVBQyxFQURBQyxFQUFVSCxFQUFTLEdBRXZCLE9BQU8sV0FDTCxJQUFJSSxFQUFVamUsR0FBTWxPLEtBQU02SSxHQUMxQixPQUFPc2pCLElBQVlELEVBQVUsS0FDdkJDLElBQVlILEVBQVdDLEVBQ3ZCQSxFQUFlSCxFQUFZRSxFQUFXRyxFQUFTSixFQUN6RCxDQUNBLENBMEN3QjNkLENBQWN2RixFQUFNMUosRUFBRzVCLEdBQVE4USxHQUNoRGxGLEdBQUcsYUFBZU4sRUFBTSxLQUMvQixFQ2xCRTZrQixXTzVDYSxTQUFTN2tCLEVBQU10TCxFQUFPOFEsR0FDbkMsSUFBSTFPLEVBQU0sVUFBWWtKLEdBQVEsSUFDOUIsR0FBSXpFLFVBQVV0RixPQUFTLEVBQUcsT0FBUWEsRUFBTUssS0FBS21yQixNQUFNeHJCLEtBQVNBLEVBQUk0c0IsT0FDaEUsR0FBYSxNQUFUaHZCLEVBQWUsT0FBT3lDLEtBQUttckIsTUFBTXhyQixFQUFLLE1BQzFDLEdBQXFCLG1CQUFWcEMsRUFBc0IsTUFBTSxJQUFJbUwsTUFDM0MsT0FBTzFJLEtBQUttckIsTUFBTXhyQixFQWhCcEIsU0FBb0JrSixFQUFNdEwsRUFBTzhRLEdBQy9CLElBQUkvSyxFQUFHUyxFQUNQLFNBQVNvbkIsSUFDUCxJQUFJaHNCLEVBQUk1QixFQUFNUSxNQUFNaUMsS0FBTW9FLFdBRTFCLE9BRElqRixJQUFNNEUsSUFBSVQsR0FBS1MsRUFBSzVFLElBVjVCLFNBQTBCMEosRUFBTTFKLEVBQUdrUCxHQUNqQyxPQUFPLFNBQVMvSyxHQUNkdEQsS0FBS2tPLE1BQU1JLFlBQVl6RixFQUFNMUosRUFBRXlLLEtBQUs1SixLQUFNc0QsR0FBSStLLEVBQ2xELENBQ0EsQ0FNa0N5ZixDQUFpQmpsQixFQUFNMUosRUFBR2tQLElBQ2pEL0ssQ0FDUixDQUVELE9BREE2bkIsRUFBTW9CLE9BQVNodkIsRUFDUjR0QixDQUNULENBT3lCdUMsQ0FBVzdrQixFQUFNdEwsRUFBbUIsTUFBWjhRLEVBQW1CLEdBQUtBLEdBQ3pFLEVQdUNFN0csS1EvQ2EsU0FBU2pLLEdBQ3RCLE9BQU95QyxLQUFLbXJCLE1BQU0sT0FBeUIsbUJBQVY1dEIsRUFSbkMsU0FBc0JBLEdBQ3BCLE9BQU8sV0FDTCxJQUFJd3VCLEVBQVN4dUIsRUFBTXlDLE1BQ25CQSxLQUFLNlAsWUFBd0IsTUFBVmtjLEVBQWlCLEdBQUtBLENBQzdDLENBQ0EsQ0FJUWhjLENBQWE2YixHQUFXNXJCLEtBQU0sT0FBUXpDLElBZjlDLFNBQXNCQSxHQUNwQixPQUFPLFdBQ0x5QyxLQUFLNlAsWUFBY3RTLENBQ3ZCLENBQ0EsQ0FZUXVTLENBQXNCLE1BQVR2UyxFQUFnQixHQUFLQSxFQUFRLElBQ2xELEVSNENFd3dCLFVTOUNhLFNBQVN4d0IsR0FDdEIsSUFBSW9DLEVBQU0sT0FDVixHQUFJeUUsVUFBVXRGLE9BQVMsRUFBRyxPQUFRYSxFQUFNSyxLQUFLbXJCLE1BQU14ckIsS0FBU0EsRUFBSTRzQixPQUNoRSxHQUFhLE1BQVRodkIsRUFBZSxPQUFPeUMsS0FBS21yQixNQUFNeHJCLEVBQUssTUFDMUMsR0FBcUIsbUJBQVZwQyxFQUFzQixNQUFNLElBQUltTCxNQUMzQyxPQUFPMUksS0FBS21yQixNQUFNeHJCLEVBaEJwQixTQUFtQnBDLEdBQ2pCLElBQUlxbEIsRUFBSTdlLEVBQ1IsU0FBU29uQixJQUNQLElBQUloc0IsRUFBSTVCLEVBQU1RLE1BQU1pQyxLQUFNb0UsV0FFMUIsT0FESWpGLElBQU00RSxJQUFJNmUsR0FBTTdlLEVBQUs1RSxJQVY3QixTQUF5QkEsR0FDdkIsT0FBTyxTQUFTbUUsR0FDZHRELEtBQUs2UCxZQUFjMVEsRUFBRXlLLEtBQUs1SixLQUFNc0QsRUFDcEMsQ0FDQSxDQU1tQzBxQixDQUFnQjd1QixJQUN4Q3lqQixDQUNSLENBRUQsT0FEQXVJLEVBQU1vQixPQUFTaHZCLEVBQ1I0dEIsQ0FDVCxDQU95QjRDLENBQVV4d0IsR0FDbkMsRVR5Q0V3SyxPVXhEYSxXQUNiLE9BQU8vSCxLQUFLbUosR0FBRyxhQVRqQixTQUF3QjJoQixHQUN0QixPQUFPLFdBQ0wsSUFBSXZlLEVBQVN2TSxLQUFLOEgsV0FDbEIsSUFBSyxJQUFJM0ksS0FBS2EsS0FBS2lyQixhQUFjLElBQUs5ckIsSUFBTTJyQixFQUFJLE9BQzVDdmUsR0FBUUEsRUFBT3FFLFlBQVk1USxLQUNuQyxDQUNBLENBRytCaXVCLENBQWVqdUIsS0FBSzZyQixLQUNuRCxFVnVERVYsTVJkYSxTQUFTdGlCLEVBQU10TCxHQUM1QixJQUFJdXRCLEVBQUs5cUIsS0FBSzZyQixJQUlkLEdBRkFoakIsR0FBUSxHQUVKekUsVUFBVXRGLE9BQVMsRUFBRyxDQUV4QixJQURBLElBQ2tDd0UsRUFEOUI2bkIsRUFBUS9xQixHQUFJSixLQUFLK0wsT0FBUStlLEdBQUlLLE1BQ3hCaHNCLEVBQUksRUFBRzRELEVBQUlvb0IsRUFBTXJzQixPQUFXSyxFQUFJNEQsSUFBSzVELEVBQzVDLElBQUttRSxFQUFJNm5CLEVBQU1oc0IsSUFBSTBKLE9BQVNBLEVBQzFCLE9BQU92RixFQUFFL0YsTUFHYixPQUFPLElBQ1IsQ0FFRCxPQUFPeUMsS0FBS2lJLE1BQWUsTUFBVDFLLEVBQWdCaXVCLEdBQWNHLElBQWViLEVBQUlqaUIsRUFBTXRMLEdBQzNFLEVRREVpc0IsTUpwRGEsU0FBU2pzQixHQUN0QixJQUFJdXRCLEVBQUs5cUIsS0FBSzZyQixJQUVkLE9BQU96bkIsVUFBVXRGLE9BQ1hrQixLQUFLaUksTUFBdUIsbUJBQVYxSyxFQUNkbXZCLEdBQ0FDLElBQWU3QixFQUFJdnRCLElBQ3ZCNkMsR0FBSUosS0FBSytMLE9BQVErZSxHQUFJdEIsS0FDN0IsRUk2Q0U2QixTSHJEYSxTQUFTOXRCLEdBQ3RCLElBQUl1dEIsRUFBSzlxQixLQUFLNnJCLElBRWQsT0FBT3puQixVQUFVdEYsT0FDWGtCLEtBQUtpSSxNQUF1QixtQkFBVjFLLEVBQ2RxdkIsR0FDQUMsSUFBa0IvQixFQUFJdnRCLElBQzFCNkMsR0FBSUosS0FBSytMLE9BQVErZSxHQUFJTyxRQUM3QixFRzhDRUMsS1czRGEsU0FBUy90QixHQUN0QixJQUFJdXRCLEVBQUs5cUIsS0FBSzZyQixJQUVkLE9BQU96bkIsVUFBVXRGLE9BQ1hrQixLQUFLaUksS0FYYixTQUFzQjZpQixFQUFJdnRCLEdBQ3hCLEdBQXFCLG1CQUFWQSxFQUFzQixNQUFNLElBQUltTCxNQUMzQyxPQUFPLFdBQ0x2SSxHQUFJSCxLQUFNOHFCLEdBQUlRLEtBQU8vdEIsQ0FDekIsQ0FDQSxDQU1rQjJ3QixDQUFhcEQsRUFBSXZ0QixJQUMzQjZDLEdBQUlKLEtBQUsrTCxPQUFRK2UsR0FBSVEsSUFDN0IsRVhzREU2QyxZWTNEYSxTQUFTNXdCLEdBQ3RCLEdBQXFCLG1CQUFWQSxFQUFzQixNQUFNLElBQUltTCxNQUMzQyxPQUFPMUksS0FBS2lJLEtBVmQsU0FBcUI2aUIsRUFBSXZ0QixHQUN2QixPQUFPLFdBQ0wsSUFBSXVRLEVBQUl2USxFQUFNUSxNQUFNaUMsS0FBTW9FLFdBQzFCLEdBQWlCLG1CQUFOMEosRUFBa0IsTUFBTSxJQUFJcEYsTUFDdkN2SSxHQUFJSCxLQUFNOHFCLEdBQUlRLEtBQU94ZCxDQUN6QixDQUNBLENBSW1CcWdCLENBQVludUIsS0FBSzZyQixJQUFLdHVCLEdBQ3pDLEVaeURFNm1CLElhcEVhLFdBQ2IsSUFBSWlKLEVBQUtDLEVBQUt6akIsRUFBTzdKLEtBQU04cUIsRUFBS2poQixFQUFLZ2lCLElBQUt6VyxFQUFPdkwsRUFBS3VMLE9BQ3RELE9BQU8sSUFBSWpZLFNBQVEsU0FBU0MsRUFBU0MsR0FDbkMsSUFBSSt3QixFQUFTLENBQUM3d0IsTUFBT0YsR0FDakIrbUIsRUFBTSxDQUFDN21CLE1BQU8sV0FBNEIsS0FBVDZYLEdBQVloWSxHQUFVLEdBRTNEeU0sRUFBSzVCLE1BQUssV0FDUixJQUFJNGlCLEVBQVcxcUIsR0FBSUgsS0FBTThxQixHQUNyQjNoQixFQUFLMGhCLEVBQVMxaEIsR0FLZEEsSUFBT2trQixLQUNUQyxHQUFPRCxFQUFNbGtCLEdBQUkxQyxRQUNieUIsRUFBRWttQixPQUFPbmxCLEtBQUttbEIsR0FDbEJkLEVBQUlwbEIsRUFBRW1tQixVQUFVcGxCLEtBQUttbEIsR0FDckJkLEVBQUlwbEIsRUFBRWtjLElBQUluYixLQUFLbWIsSUFHakJ5RyxFQUFTMWhCLEdBQUtta0IsQ0FDcEIsSUFHaUIsSUFBVGxZLEdBQVloWSxHQUNwQixHQUNBLEViMkNFLENBQUN5WSxPQUFPQyxVQUFXbVgsR0FBb0JwWCxPQUFPQyxXY2xFaEQsSUFBSXdZLEdBQWdCLENBQ2xCN0UsS0FBTSxLQUNORCxNQUFPLEVBQ1A2QixTQUFVLElBQ1ZDLEtDREssU0FBb0Job0IsR0FDekIsUUFBU0EsR0FBSyxJQUFNLEVBQUlBLEVBQUlBLEVBQUlBLEdBQUtBLEdBQUssR0FBS0EsRUFBSUEsRUFBSSxHQUFLLENBQzlELEdERUEsU0FBUzRwQixHQUFRbmhCLEVBQU0rZSxHQUVyQixJQURBLElBQUlDLElBQ0tBLEVBQVNoZixFQUFLa2YsaUJBQW1CRixFQUFTQSxFQUFPRCxLQUN4RCxLQUFNL2UsRUFBT0EsRUFBS2pFLFlBQ2hCLE1BQU0sSUFBSVksTUFBTSxjQUFjb2lCLGVBR2xDLE9BQU9DLENBQ1QsQ0VoQkFya0IsR0FBVXdDLFVBQVVtbEIsVUNGTCxTQUFTeGxCLEdBQ3RCLE9BQU83SSxLQUFLaUksTUFBSyxZQ0RKLFNBQVM4RCxFQUFNbEQsR0FDNUIsSUFDSWdpQixFQUNBMEQsRUFFQXB2QixFQUpBNnJCLEVBQVlqZixFQUFLa2YsYUFHakIxZixHQUFRLEVBR1osR0FBS3lmLEVBQUwsQ0FJQSxJQUFLN3JCLEtBRkwwSixFQUFlLE1BQVJBLEVBQWUsS0FBT0EsRUFBTyxHQUUxQm1pQixHQUNISCxFQUFXRyxFQUFVN3JCLElBQUkwSixPQUFTQSxHQUN2QzBsQixFQUFTMUQsRUFBU08sTUFBUVosSUFBWUssRUFBU08sTUFBUVQsR0FDdkRFLEVBQVNPLE1BQVFSLEdBQ2pCQyxFQUFTdEIsTUFBTXBvQixPQUNmMHBCLEVBQVMxaEIsR0FBR1MsS0FBSzJrQixFQUFTLFlBQWMsU0FBVXhpQixFQUFNQSxFQUFLWSxTQUFVa2UsRUFBU3ZvQixNQUFPdW9CLEVBQVNoZSxjQUN6Rm1lLEVBQVU3ckIsSUFMOEJvTSxHQUFRLEVBUXJEQSxVQUFjUSxFQUFLa2YsWUFiQSxDQWN6QixDRG5CSW9ELENBQVVydUIsS0FBTTZJLEVBQ3BCLEdBQ0EsRUREQW5DLEdBQVV3QyxVQUFVdkIsV0ZpQkwsU0FBU2tCLEdBQ3RCLElBQUlpaUIsRUFDQUMsRUFFQWxpQixhQUFnQmlrQixJQUNsQmhDLEVBQUtqaUIsRUFBS2dqQixJQUFLaGpCLEVBQU9BLEVBQUtra0IsUUFFM0JqQyxFQUFLa0MsTUFBVWpDLEVBQVN1RCxJQUFlN0UsS0FBT1YsS0FBT2xnQixFQUFlLE1BQVJBLEVBQWUsS0FBT0EsRUFBTyxJQUczRixJQUFLLElBQUk4SixFQUFTM1MsS0FBSzZTLFFBQVM3UCxFQUFJMlAsRUFBTzdULE9BQVF5RSxFQUFJLEVBQUdBLEVBQUlQLElBQUtPLEVBQ2pFLElBQUssSUFBeUN3SSxFQUFyQ2MsRUFBUThGLEVBQU9wUCxHQUFJUixFQUFJOEosRUFBTS9OLE9BQWNLLEVBQUksRUFBR0EsRUFBSTRELElBQUs1RCxHQUM5RDRNLEVBQU9jLEVBQU0xTixLQUNmMHJCLEdBQVM5ZSxFQUFNbEQsRUFBTWlpQixFQUFJM3JCLEVBQUcwTixFQUFPa2UsR0FBVW1DLEdBQVFuaEIsRUFBTStlLElBS2pFLE9BQU8sSUFBSWdDLEdBQVduYSxFQUFRM1MsS0FBSzhTLFNBQVVqSyxFQUFNaWlCLEVBQ3JELEVLekNBLE1BQU0wRCxHQUFLM3RCLEtBQUswaEIsR0FDWmtNLEdBQU0sRUFBSUQsR0FDVjdwQixHQUFVLEtBQ1YrcEIsR0FBYUQsR0FBTTlwQixHQUV2QixTQUFTeUMsR0FBT3VuQixHQUNkM3VCLEtBQUtrSSxHQUFLeW1CLEVBQVEsR0FDbEIsSUFBSyxJQUFJeHZCLEVBQUksRUFBRzRELEVBQUk0ckIsRUFBUTd2QixPQUFRSyxFQUFJNEQsSUFBSzVELEVBQzNDYSxLQUFLa0ksR0FBSzlELFVBQVVqRixHQUFLd3ZCLEVBQVF4dkIsRUFFckMsQ0FlTyxNQUFNeXZCLEdBQ1gsV0FBQW52QixDQUFZb3ZCLEdBQ1Y3dUIsS0FBSzh1QixJQUFNOXVCLEtBQUsrdUIsSUFDaEIvdUIsS0FBS2d2QixJQUFNaHZCLEtBQUtpdkIsSUFBTSxLQUN0Qmp2QixLQUFLa0ksRUFBSSxHQUNUbEksS0FBS2t2QixRQUFvQixNQUFWTCxFQUFpQnpuQixHQWxCcEMsU0FBcUJ5bkIsR0FDbkIsSUFBSTd2QixFQUFJNkIsS0FBS1UsTUFBTXN0QixHQUNuQixLQUFNN3ZCLEdBQUssR0FBSSxNQUFNLElBQUkwSixNQUFNLG1CQUFtQm1tQixLQUNsRCxHQUFJN3ZCLEVBQUksR0FBSSxPQUFPb0ksR0FDbkIsTUFBTTFFLEVBQUksSUFBTTFELEVBQ2hCLE9BQU8sU0FBUzJ2QixHQUNkM3VCLEtBQUtrSSxHQUFLeW1CLEVBQVEsR0FDbEIsSUFBSyxJQUFJeHZCLEVBQUksRUFBRzRELEVBQUk0ckIsRUFBUTd2QixPQUFRSyxFQUFJNEQsSUFBSzVELEVBQzNDYSxLQUFLa0ksR0FBS3JILEtBQUtrQixNQUFNcUMsVUFBVWpGLEdBQUt1RCxHQUFLQSxFQUFJaXNCLEVBQVF4dkIsRUFFM0QsQ0FDQSxDQU82Q2d3QixDQUFZTixFQUN0RCxDQUNELE1BQUFPLENBQU96d0IsRUFBR21HLEdBQ1I5RSxLQUFLa3ZCLE9BQU8sSUFBSWx2QixLQUFLOHVCLElBQU05dUIsS0FBS2d2QixLQUFPcndCLEtBQUtxQixLQUFLK3VCLElBQU0vdUIsS0FBS2l2QixLQUFPbnFCLEdBQ3BFLENBQ0QsU0FBQXVxQixHQUNtQixPQUFicnZCLEtBQUtndkIsTUFDUGh2QixLQUFLZ3ZCLElBQU1odkIsS0FBSzh1QixJQUFLOXVCLEtBQUtpdkIsSUFBTWp2QixLQUFLK3VCLElBQ3JDL3VCLEtBQUtrdkIsT0FBTyxJQUVmLENBQ0QsTUFBQUksQ0FBTzN3QixFQUFHbUcsR0FDUjlFLEtBQUtrdkIsT0FBTyxJQUFJbHZCLEtBQUtndkIsS0FBT3J3QixLQUFLcUIsS0FBS2l2QixLQUFPbnFCLEdBQzlDLENBQ0QsZ0JBQUF5cUIsQ0FBaUJDLEVBQUlDLEVBQUk5d0IsRUFBR21HLEdBQzFCOUUsS0FBS2t2QixPQUFPLEtBQUtNLE1BQU9DLEtBQU16dkIsS0FBS2d2QixLQUFPcndCLEtBQUtxQixLQUFLaXZCLEtBQU9ucUIsR0FDNUQsQ0FDRCxhQUFBNHFCLENBQWNGLEVBQUlDLEVBQUlFLEVBQUlDLEVBQUlqeEIsRUFBR21HLEdBQy9COUUsS0FBS2t2QixPQUFPLEtBQUtNLE1BQU9DLE1BQU9FLE1BQU9DLEtBQU01dkIsS0FBS2d2QixLQUFPcndCLEtBQUtxQixLQUFLaXZCLEtBQU9ucUIsR0FDMUUsQ0FDRCxLQUFBK3FCLENBQU1MLEVBQUlDLEVBQUlFLEVBQUlDLEVBQUk3TyxHQUlwQixHQUhBeU8sR0FBTUEsRUFBSUMsR0FBTUEsRUFBSUUsR0FBTUEsRUFBSUMsR0FBTUEsR0FBSTdPLEdBQUtBLEdBR3JDLEVBQUcsTUFBTSxJQUFJclksTUFBTSxvQkFBb0JxWSxLQUUvQyxJQUFJK08sRUFBSzl2QixLQUFLZ3ZCLElBQ1ZlLEVBQUsvdkIsS0FBS2l2QixJQUNWZSxFQUFNTCxFQUFLSCxFQUNYUyxFQUFNTCxFQUFLSCxFQUNYUyxFQUFNSixFQUFLTixFQUNYVyxFQUFNSixFQUFLTixFQUNYVyxFQUFRRixFQUFNQSxFQUFNQyxFQUFNQSxFQUc5QixHQUFpQixPQUFibndCLEtBQUtndkIsSUFDUGh2QixLQUFLa3ZCLE9BQU8sSUFBSWx2QixLQUFLZ3ZCLElBQU1RLEtBQU14dkIsS0FBS2l2QixJQUFNUSxTQUl6QyxHQUFNVyxFQUFRenJCLEdBS2QsR0FBTTlELEtBQUt3dkIsSUFBSUYsRUFBTUgsRUFBTUMsRUFBTUMsR0FBT3ZyQixJQUFhb2MsRUFLckQsQ0FDSCxJQUFJdVAsRUFBTVgsRUFBS0csRUFDWFMsRUFBTVgsRUFBS0csRUFDWFMsRUFBUVIsRUFBTUEsRUFBTUMsRUFBTUEsRUFDMUJRLEVBQVFILEVBQU1BLEVBQU1DLEVBQU1BLEVBQzFCRyxFQUFNN3ZCLEtBQUtDLEtBQUswdkIsR0FDaEJHLEVBQU05dkIsS0FBS0MsS0FBS3N2QixHQUNoQjdQLEVBQUlRLEVBQUlsZ0IsS0FBS3llLEtBQUtrUCxHQUFLM3RCLEtBQUsrdkIsTUFBTUosRUFBUUosRUFBUUssSUFBVSxFQUFJQyxFQUFNQyxLQUFTLEdBQy9FRSxFQUFNdFEsRUFBSW9RLEVBQ1ZHLEVBQU12USxFQUFJbVEsRUFHVjd2QixLQUFLd3ZCLElBQUlRLEVBQU0sR0FBS2xzQixJQUN0QjNFLEtBQUtrdkIsT0FBTyxJQUFJTSxFQUFLcUIsRUFBTVgsS0FBT1QsRUFBS29CLEVBQU1WLElBRy9DbndCLEtBQUtrdkIsT0FBTyxJQUFJbk8sS0FBS0EsV0FBV29QLEVBQU1HLEVBQU1KLEVBQU1LLE1BQVF2d0IsS0FBS2d2QixJQUFNUSxFQUFLc0IsRUFBTWQsS0FBT2h3QixLQUFLaXZCLElBQU1RLEVBQUtxQixFQUFNYixHQUM5RyxNQXJCQ2p3QixLQUFLa3ZCLE9BQU8sSUFBSWx2QixLQUFLZ3ZCLElBQU1RLEtBQU14dkIsS0FBS2l2QixJQUFNUSxTQXNCL0MsQ0FDRCxHQUFBc0IsQ0FBSXB5QixFQUFHbUcsRUFBR2ljLEVBQUdpUSxFQUFJQyxFQUFJQyxHQUluQixHQUhBdnlCLEdBQUtBLEVBQUdtRyxHQUFLQSxFQUFXb3NCLElBQVFBLEdBQWhCblEsR0FBS0EsR0FHYixFQUFHLE1BQU0sSUFBSXJZLE1BQU0sb0JBQW9CcVksS0FFL0MsSUFBSW9RLEVBQUtwUSxFQUFJbGdCLEtBQUs0aUIsSUFBSXVOLEdBQ2xCSSxFQUFLclEsRUFBSWxnQixLQUFLNmlCLElBQUlzTixHQUNsQmxCLEVBQUtueEIsRUFBSXd5QixFQUNUcEIsRUFBS2pyQixFQUFJc3NCLEVBQ1RDLEVBQUssRUFBSUgsRUFDVEksRUFBS0osRUFBTUYsRUFBS0MsRUFBS0EsRUFBS0QsRUFHYixPQUFiaHhCLEtBQUtndkIsSUFDUGh2QixLQUFLa3ZCLE9BQU8sSUFBSVksS0FBTUMsS0FJZmx2QixLQUFLd3ZCLElBQUlyd0IsS0FBS2d2QixJQUFNYyxHQUFNbnJCLElBQVc5RCxLQUFLd3ZCLElBQUlyd0IsS0FBS2l2QixJQUFNYyxHQUFNcHJCLEtBQ3RFM0UsS0FBS2t2QixPQUFPLElBQUlZLEtBQU1DLElBSW5CaFAsSUFHRHVRLEVBQUssSUFBR0EsRUFBS0EsRUFBSzdDLEdBQU1BLElBR3hCNkMsRUFBSzVDLEdBQ1AxdUIsS0FBS2t2QixPQUFPLElBQUluTyxLQUFLQSxTQUFTc1EsS0FBTTF5QixFQUFJd3lCLEtBQU1yc0IsRUFBSXNzQixLQUFNclEsS0FBS0EsU0FBU3NRLEtBQU1yeEIsS0FBS2d2QixJQUFNYyxLQUFNOXZCLEtBQUtpdkIsSUFBTWMsSUFJakd1QixFQUFLM3NCLElBQ1ozRSxLQUFLa3ZCLE9BQU8sSUFBSW5PLEtBQUtBLFNBQVN1USxHQUFNOUMsT0FBTzZDLEtBQU1yeEIsS0FBS2d2QixJQUFNcndCLEVBQUlvaUIsRUFBSWxnQixLQUFLNGlCLElBQUl3TixNQUFPanhCLEtBQUtpdkIsSUFBTW5xQixFQUFJaWMsRUFBSWxnQixLQUFLNmlCLElBQUl1TixLQUVuSCxDQUNELElBQUFNLENBQUs1eUIsRUFBR21HLEVBQUcwc0IsRUFBRy9QLEdBQ1p6aEIsS0FBS2t2QixPQUFPLElBQUlsdkIsS0FBSzh1QixJQUFNOXVCLEtBQUtndkIsS0FBT3J3QixLQUFLcUIsS0FBSyt1QixJQUFNL3VCLEtBQUtpdkIsS0FBT25xQixLQUFLMHNCLEdBQUtBLE1BQU0vUCxNQUFNK1AsSUFDMUYsQ0FDRCxRQUFBaFEsR0FDRSxPQUFPeGhCLEtBQUtrSSxDQUNiLEVDdElJLFNBQVN1cEIsR0FBbUI5eUIsRUFBRytFLEdBQ3BDLElBQUt2RSxHQUFLUixFQUFJK0UsRUFBSS9FLEVBQUUreUIsY0FBY2h1QixFQUFJLEdBQUsvRSxFQUFFK3lCLGlCQUFpQmhvQixRQUFRLE1BQVEsRUFBRyxPQUFPLEtBQ3hGLElBQUl2SyxFQUFHd3lCLEVBQWNoekIsRUFBRXdKLE1BQU0sRUFBR2hKLEdBSWhDLE1BQU8sQ0FDTHd5QixFQUFZN3lCLE9BQVMsRUFBSTZ5QixFQUFZLEdBQUtBLEVBQVl4cEIsTUFBTSxHQUFLd3BCLEdBQ2hFaHpCLEVBQUV3SixNQUFNaEosRUFBSSxHQUVqQixDQ2pCZSxTQUFReXlCLEdBQUNqekIsR0FDdEIsT0FBT0EsRUFBSTh5QixHQUFtQjV3QixLQUFLd3ZCLElBQUkxeEIsS0FBU0EsRUFBRSxHQUFLUixHQUN6RCxDQ0hBLElDQ1cwekIsR0REUEMsR0FBSywyRUFFTSxTQUFTQyxHQUFnQkMsR0FDdEMsS0FBTXZlLEVBQVFxZSxHQUFHclIsS0FBS3VSLElBQWEsTUFBTSxJQUFJdHBCLE1BQU0sbUJBQXFCc3BCLEdBQ3hFLElBQUl2ZSxFQUNKLE9BQU8sSUFBSXdlLEdBQWdCLENBQ3pCQyxLQUFNemUsRUFBTSxHQUNaMGUsTUFBTzFlLEVBQU0sR0FDYjJlLEtBQU0zZSxFQUFNLEdBQ1o0ZSxPQUFRNWUsRUFBTSxHQUNkeFUsS0FBTXdVLEVBQU0sR0FDWjZlLE1BQU83ZSxFQUFNLEdBQ2I4ZSxNQUFPOWUsRUFBTSxHQUNiK2UsVUFBVy9lLEVBQU0sSUFBTUEsRUFBTSxHQUFHdEwsTUFBTSxHQUN0Q29CLEtBQU1rSyxFQUFNLEdBQ1o3SyxLQUFNNkssRUFBTSxLQUVoQixDQUlPLFNBQVN3ZSxHQUFnQkQsR0FDOUJoeUIsS0FBS2t5QixVQUEwQjd2QixJQUFuQjJ2QixFQUFVRSxLQUFxQixJQUFNRixFQUFVRSxLQUFPLEdBQ2xFbHlCLEtBQUtteUIsV0FBNEI5dkIsSUFBcEIydkIsRUFBVUcsTUFBc0IsSUFBTUgsRUFBVUcsTUFBUSxHQUNyRW55QixLQUFLb3lCLFVBQTBCL3ZCLElBQW5CMnZCLEVBQVVJLEtBQXFCLElBQU1KLEVBQVVJLEtBQU8sR0FDbEVweUIsS0FBS3F5QixZQUE4Qmh3QixJQUFyQjJ2QixFQUFVSyxPQUF1QixHQUFLTCxFQUFVSyxPQUFTLEdBQ3ZFcnlCLEtBQUtmLE9BQVMreUIsRUFBVS95QixLQUN4QmUsS0FBS3N5QixXQUE0Qmp3QixJQUFwQjJ2QixFQUFVTSxXQUFzQmp3QixHQUFhMnZCLEVBQVVNLE1BQ3BFdHlCLEtBQUt1eUIsUUFBVVAsRUFBVU8sTUFDekJ2eUIsS0FBS3d5QixlQUFvQ253QixJQUF4QjJ2QixFQUFVUSxlQUEwQm53QixHQUFhMnZCLEVBQVVRLFVBQzVFeHlCLEtBQUt1SixPQUFTeW9CLEVBQVV6b0IsS0FDeEJ2SixLQUFLNEksVUFBMEJ2RyxJQUFuQjJ2QixFQUFVcHBCLEtBQXFCLEdBQUtvcEIsRUFBVXBwQixLQUFPLEVBQ25FLENFL0JlLFNBQUE2cEIsR0FBUzl6QixFQUFHK0UsR0FDekIsSUFBSTFFLEVBQUl5eUIsR0FBbUI5eUIsRUFBRytFLEdBQzlCLElBQUsxRSxFQUFHLE9BQU9MLEVBQUksR0FDbkIsSUFBSWd6QixFQUFjM3lCLEVBQUUsR0FDaEI0eUIsRUFBVzV5QixFQUFFLEdBQ2pCLE9BQU80eUIsRUFBVyxFQUFJLEtBQU8sSUFBSXR0QixPQUFPc3RCLEdBQVV0ZixLQUFLLEtBQU9xZixFQUN4REEsRUFBWTd5QixPQUFTOHlCLEVBQVcsRUFBSUQsRUFBWXhwQixNQUFNLEVBQUd5cEIsRUFBVyxHQUFLLElBQU1ELEVBQVl4cEIsTUFBTXlwQixFQUFXLEdBQzVHRCxFQUFjLElBQUlydEIsTUFBTXN0QixFQUFXRCxFQUFZN3lCLE9BQVMsR0FBR3dULEtBQUssSUFDeEUsQ0ZVQXlmLEdBQWdCN29CLFVBQVkrb0IsR0FBZ0Ivb0IsVUFlNUMrb0IsR0FBZ0Ivb0IsVUFBVXNZLFNBQVcsV0FDbkMsT0FBT3hoQixLQUFLa3lCLEtBQ05seUIsS0FBS215QixNQUNMbnlCLEtBQUtveUIsS0FDTHB5QixLQUFLcXlCLFFBQ0pyeUIsS0FBS2YsS0FBTyxJQUFNLFVBQ0hvRCxJQUFmckMsS0FBS3N5QixNQUFzQixHQUFLenhCLEtBQUtRLElBQUksRUFBZ0IsRUFBYnJCLEtBQUtzeUIsU0FDakR0eUIsS0FBS3V5QixNQUFRLElBQU0sVUFDQWx3QixJQUFuQnJDLEtBQUt3eUIsVUFBMEIsR0FBSyxJQUFNM3hCLEtBQUtRLElBQUksRUFBb0IsRUFBakJyQixLQUFLd3lCLGFBQzNEeHlCLEtBQUt1SixLQUFPLElBQU0sSUFDbkJ2SixLQUFLNEksSUFDYixFRzFDQSxJQUFlOHBCLEdBQUEsQ0FDYixJQUFLLENBQUMvekIsRUFBRytFLEtBQVcsSUFBSi9FLEdBQVNnMEIsUUFBUWp2QixHQUNqQ3hGLEVBQU1TLEdBQU1rQyxLQUFLa0IsTUFBTXBELEdBQUc2aUIsU0FBUyxHQUNuQzFZLEVBQU1uSyxHQUFNQSxFQUFJLEdBQ2hCSyxFTFJhLFNBQVNMLEdBQ3RCLE9BQU9rQyxLQUFLd3ZCLElBQUkxeEIsRUFBSWtDLEtBQUtrQixNQUFNcEQsS0FBTyxLQUNoQ0EsRUFBRWkwQixlQUFlLE1BQU1DLFFBQVEsS0FBTSxJQUNyQ2wwQixFQUFFNmlCLFNBQVMsR0FDbkIsRUtLRTlqQixFQUFLLENBQUNpQixFQUFHK0UsSUFBTS9FLEVBQUUreUIsY0FBY2h1QixHQUMvQnBGLEVBQUssQ0FBQ0ssRUFBRytFLElBQU0vRSxFQUFFZzBCLFFBQVFqdkIsR0FDekJzZCxFQUFLLENBQUNyaUIsRUFBRytFLElBQU0vRSxFQUFFbTBCLFlBQVlwdkIsR0FDN0J5TixFQUFNeFMsR0FBTWtDLEtBQUtrQixNQUFNcEQsR0FBRzZpQixTQUFTLEdBQ25DOWQsRUFBSyxDQUFDL0UsRUFBRytFLElBQU0rdUIsR0FBa0IsSUFBSjl6QixFQUFTK0UsR0FDdENxZCxFQUFLMFIsR0FDTHR2QixFRlhhLFNBQVN4RSxFQUFHK0UsR0FDekIsSUFBSTFFLEVBQUl5eUIsR0FBbUI5eUIsRUFBRytFLEdBQzlCLElBQUsxRSxFQUFHLE9BQU9MLEVBQUksR0FDbkIsSUFBSWd6QixFQUFjM3lCLEVBQUUsR0FDaEI0eUIsRUFBVzV5QixFQUFFLEdBQ2JHLEVBQUl5eUIsR0FBWUMsR0FBdUUsRUFBdERoeEIsS0FBS1EsS0FBSyxFQUFHUixLQUFLMEIsSUFBSSxFQUFHMUIsS0FBS1UsTUFBTXF3QixFQUFXLE1BQVksRUFDNUY3dUIsRUFBSTR1QixFQUFZN3lCLE9BQ3BCLE9BQU9LLElBQU00RCxFQUFJNHVCLEVBQ1h4eUIsRUFBSTRELEVBQUk0dUIsRUFBYyxJQUFJcnRCLE1BQU1uRixFQUFJNEQsRUFBSSxHQUFHdVAsS0FBSyxLQUNoRG5ULEVBQUksRUFBSXd5QixFQUFZeHBCLE1BQU0sRUFBR2hKLEdBQUssSUFBTXd5QixFQUFZeHBCLE1BQU1oSixHQUMxRCxLQUFPLElBQUltRixNQUFNLEVBQUluRixHQUFHbVQsS0FBSyxLQUFPbWYsR0FBbUI5eUIsRUFBR2tDLEtBQUtRLElBQUksRUFBR3FDLEVBQUl2RSxFQUFJLElBQUksRUFDMUYsRUVDRTR6QixFQUFNcDBCLEdBQU1rQyxLQUFLa0IsTUFBTXBELEdBQUc2aUIsU0FBUyxJQUFJd1IsY0FDdkNyMEIsRUFBTUEsR0FBTWtDLEtBQUtrQixNQUFNcEQsR0FBRzZpQixTQUFTLEtDakJ0QixTQUFReVIsR0FBQ3QwQixHQUN0QixPQUFPQSxDQUNULENDT0EsSUNQSXUwQixHQUNPL3NCLEdBQ0FndEIsR0RLUDFwQixHQUFNbkYsTUFBTTRFLFVBQVVPLElBQ3RCMnBCLEdBQVcsQ0FBQyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLEtBRWhFLFNBQVFDLEdBQUNILEdBQ3RCLElFYnNCSSxFQUFVQyxFRmE1QjFtQixPQUE0QnhLLElBQXBCNndCLEVBQU9JLGVBQStDanhCLElBQXJCNndCLEVBQU9LLFVBQTBCbnRCLElFYnhEa3RCLEVGYStFN3BCLEdBQUlHLEtBQUtzcEIsRUFBT0ksU0FBVUUsUUViL0ZELEVGYXdHTCxFQUFPSyxVQUFZLEdFWnBKLFNBQVNoMkIsRUFBTyswQixHQU9yQixJQU5BLElBQUluekIsRUFBSTVCLEVBQU11QixPQUNWd0UsRUFBSSxHQUNKQyxFQUFJLEVBQ0p5ZCxFQUFJc1MsRUFBUyxHQUNieDBCLEVBQVMsRUFFTkssRUFBSSxHQUFLNmhCLEVBQUksSUFDZGxpQixFQUFTa2lCLEVBQUksRUFBSXNSLElBQU90UixFQUFJbmdCLEtBQUtRLElBQUksRUFBR2l4QixFQUFReHpCLElBQ3BEd0UsRUFBRTJGLEtBQUsxTCxFQUFNazJCLFVBQVV0MEIsR0FBSzZoQixFQUFHN2hCLEVBQUk2aEIsT0FDOUJsaUIsR0FBVWtpQixFQUFJLEdBQUtzUixLQUN4QnRSLEVBQUlzUyxFQUFTL3ZCLEdBQUtBLEVBQUksR0FBSyt2QixFQUFTeDBCLFFBR3RDLE9BQU93RSxFQUFFcEIsVUFBVW9RLEtBQUtpaEIsRUFDNUIsR0ZGTUcsT0FBcUNyeEIsSUFBcEI2d0IsRUFBT1MsU0FBeUIsR0FBS1QsRUFBT1MsU0FBUyxHQUFLLEdBQzNFQyxPQUFxQ3Z4QixJQUFwQjZ3QixFQUFPUyxTQUF5QixHQUFLVCxFQUFPUyxTQUFTLEdBQUssR0FDM0VFLE9BQTZCeHhCLElBQW5CNndCLEVBQU9XLFFBQXdCLElBQU1YLEVBQU9XLFFBQVUsR0FDaEVDLE9BQStCenhCLElBQXBCNndCLEVBQU9ZLFNBQXlCMXRCLEdHakJsQyxTQUFTMHRCLEdBQ3RCLE9BQU8sU0FBU3YyQixHQUNkLE9BQU9BLEVBQU1zMUIsUUFBUSxVQUFVLFNBQVMxekIsR0FDdEMsT0FBTzIwQixHQUFVMzBCLEVBQ3ZCLEdBQ0EsQ0FDQSxDSFc0RDQwQixDQUFldHFCLEdBQUlHLEtBQUtzcEIsRUFBT1ksU0FBVUUsU0FDL0ZDLE9BQTZCNXhCLElBQW5CNndCLEVBQU9lLFFBQXdCLElBQU1mLEVBQU9lLFFBQVUsR0FDaEVDLE9BQXlCN3hCLElBQWpCNndCLEVBQU9nQixNQUFzQixJQUFNaEIsRUFBT2dCLE1BQVEsR0FDMURDLE9BQXFCOXhCLElBQWY2d0IsRUFBT2lCLElBQW9CLE1BQVFqQixFQUFPaUIsSUFBTSxHQUUxRCxTQUFTQyxFQUFVcEMsR0FHakIsSUFBSUUsR0FGSkYsRUFBWUQsR0FBZ0JDLElBRVBFLEtBQ2pCQyxFQUFRSCxFQUFVRyxNQUNsQkMsRUFBT0osRUFBVUksS0FDakJDLEVBQVNMLEVBQVVLLE9BQ25CcHpCLEVBQU8reUIsRUFBVS95QixLQUNqQnF6QixFQUFRTixFQUFVTSxNQUNsQkMsRUFBUVAsRUFBVU8sTUFDbEJDLEVBQVlSLEVBQVVRLFVBQ3RCanBCLEVBQU95b0IsRUFBVXpvQixLQUNqQlgsRUFBT29wQixFQUFVcHBCLEtBR1IsTUFBVEEsR0FBYzJwQixHQUFRLEVBQU0zcEIsRUFBTyxLQUc3QjhwQixHQUFZOXBCLFVBQXFCdkcsSUFBZG13QixJQUE0QkEsRUFBWSxJQUFLanBCLEdBQU8sRUFBTVgsRUFBTyxNQUcxRjNKLEdBQWtCLE1BQVRpekIsR0FBMEIsTUFBVkMsS0FBZ0JsekIsR0FBTyxFQUFNaXpCLEVBQU8sSUFBS0MsRUFBUSxLQUk5RSxJQUFJN25CLEVBQW9CLE1BQVgrbkIsRUFBaUJxQixFQUE0QixNQUFYckIsR0FBa0IsU0FBUzVwQixLQUFLRyxHQUFRLElBQU1BLEVBQUs0WCxjQUFnQixHQUM5RzZULEVBQW9CLE1BQVhoQyxFQUFpQnVCLEVBQWlCLE9BQU9uckIsS0FBS0csR0FBUXFyQixFQUFVLEdBS3pFSyxFQUFhNUIsR0FBWTlwQixHQUN6QjJyQixFQUFjLGFBQWE5ckIsS0FBS0csR0FVcEMsU0FBU3pDLEVBQU81SSxHQUNkLElBRUk0QixFQUFHNEQsRUFBRytGLEVBRk4wckIsRUFBY2xxQixFQUNkbXFCLEVBQWNKLEVBR2xCLEdBQWEsTUFBVHpyQixFQUNGNnJCLEVBQWNILEVBQVcvMkIsR0FBU2szQixFQUNsQ2wzQixFQUFRLE9BQ0gsQ0FJTCxJQUFJbTNCLEdBSEpuM0IsR0FBU0EsR0FHbUIsR0FBSyxFQUFJQSxFQUFRLEVBaUI3QyxHQWRBQSxFQUFRdUcsTUFBTXZHLEdBQVM0MkIsRUFBTUcsRUFBV3p6QixLQUFLd3ZCLElBQUk5eUIsR0FBUWkxQixHQUdyRGpwQixJQUFNaE0sRUlqRkgsU0FBUzRGLEdBQ3RCd3hCLEVBQUssSUFBSyxJQUFrQy95QixFQUE5Qm1CLEVBQUlJLEVBQUVyRSxPQUFRSyxFQUFJLEVBQUc0RSxHQUFNLEVBQU81RSxFQUFJNEQsSUFBSzVELEVBQ3ZELE9BQVFnRSxFQUFFaEUsSUFDUixJQUFLLElBQUs0RSxFQUFLbkMsRUFBS3pDLEVBQUcsTUFDdkIsSUFBSyxJQUFnQixJQUFQNEUsSUFBVUEsRUFBSzVFLEdBQUd5QyxFQUFLekMsRUFBRyxNQUN4QyxRQUFTLEtBQU1nRSxFQUFFaEUsR0FBSSxNQUFNdzFCLEVBQVM1d0IsRUFBSyxJQUFHQSxFQUFLLEdBR3JELE9BQU9BLEVBQUssRUFBSVosRUFBRWdGLE1BQU0sRUFBR3BFLEdBQU1aLEVBQUVnRixNQUFNdkcsRUFBSyxHQUFLdUIsQ0FDckQsQ0p3RTBCeXhCLENBQVdyM0IsSUFHekJtM0IsR0FBNEIsSUFBVm4zQixHQUF3QixNQUFUNjBCLElBQWNzQyxHQUFnQixHQUduRUYsR0FBZUUsRUFBMEIsTUFBVHRDLEVBQWVBLEVBQU84QixFQUFrQixNQUFUOUIsR0FBeUIsTUFBVEEsRUFBZSxHQUFLQSxHQUFRb0MsRUFDM0dDLEdBQXdCLE1BQVQ3ckIsRUFBZXdxQixHQUFTLEVBQUl2QixHQUFpQixHQUFLLElBQU00QyxHQUFlQyxHQUEwQixNQUFUdEMsRUFBZSxJQUFNLElBSXhIbUMsRUFFRixJQURBcDFCLEdBQUssRUFBRzRELEVBQUl4RixFQUFNdUIsU0FDVEssRUFBSTRELEdBQ1gsR0FBNkIsSUFBekIrRixFQUFJdkwsRUFBTXMzQixXQUFXMTFCLEtBQWMySixFQUFJLEdBQUksQ0FDN0MyckIsR0FBcUIsS0FBTjNyQixFQUFXK3FCLEVBQVV0MkIsRUFBTTRLLE1BQU1oSixFQUFJLEdBQUs1QixFQUFNNEssTUFBTWhKLElBQU1zMUIsRUFDM0VsM0IsRUFBUUEsRUFBTTRLLE1BQU0sRUFBR2hKLEdBQ3ZCLEtBQ0QsQ0FHTixDQUdHb3pCLElBQVV0ekIsSUFBTTFCLEVBQVFzUCxFQUFNdFAsRUFBT29GLE1BR3pDLElBQUk3RCxFQUFTMDFCLEVBQVkxMUIsT0FBU3ZCLEVBQU11QixPQUFTMjFCLEVBQVkzMUIsT0FDekRnMkIsRUFBVWgyQixFQUFTd3pCLEVBQVEsSUFBSWh1QixNQUFNZ3VCLEVBQVF4ekIsRUFBUyxHQUFHd1QsS0FBSzRmLEdBQVEsR0FNMUUsT0FISUssR0FBU3R6QixJQUFNMUIsRUFBUXNQLEVBQU1pb0IsRUFBVXYzQixFQUFPdTNCLEVBQVFoMkIsT0FBU3d6QixFQUFRbUMsRUFBWTMxQixPQUFTNkQsS0FBV215QixFQUFVLElBRzdHM0MsR0FDTixJQUFLLElBQUs1MEIsRUFBUWkzQixFQUFjajNCLEVBQVFrM0IsRUFBY0ssRUFBUyxNQUMvRCxJQUFLLElBQUt2M0IsRUFBUWkzQixFQUFjTSxFQUFVdjNCLEVBQVFrM0IsRUFBYSxNQUMvRCxJQUFLLElBQUtsM0IsRUFBUXUzQixFQUFRM3NCLE1BQU0sRUFBR3JKLEVBQVNnMkIsRUFBUWgyQixRQUFVLEdBQUswMUIsRUFBY2ozQixFQUFRazNCLEVBQWNLLEVBQVEzc0IsTUFBTXJKLEdBQVMsTUFDOUgsUUFBU3ZCLEVBQVF1M0IsRUFBVU4sRUFBY2ozQixFQUFRazNCLEVBR25ELE9BQU9YLEVBQVN2MkIsRUFDakIsQ0FNRCxPQXRFQWkxQixPQUEwQm53QixJQUFkbXdCLEVBQTBCLEVBQ2hDLFNBQVMvcEIsS0FBS0csR0FBUS9ILEtBQUtRLElBQUksRUFBR1IsS0FBSzBCLElBQUksR0FBSWl3QixJQUMvQzN4QixLQUFLUSxJQUFJLEVBQUdSLEtBQUswQixJQUFJLEdBQUlpd0IsSUFnRS9CcnNCLEVBQU9xYixTQUFXLFdBQ2hCLE9BQU93USxFQUFZLEVBQ3pCLEVBRVc3ckIsQ0FDUixDQVlELE1BQU8sQ0FDTEEsT0FBUWl1QixFQUNSakIsYUFaRixTQUFzQm5CLEVBQVd6MEIsR0FDL0IsSUFBSWUsRUFBSTgxQixJQUFXcEMsRUFBWUQsR0FBZ0JDLElBQXNCcHBCLEtBQU8sSUFBS29wQixJQUM3RXQwQixFQUFpRSxFQUE3RG1ELEtBQUtRLEtBQUssRUFBR1IsS0FBSzBCLElBQUksRUFBRzFCLEtBQUtVLE1BQU1xd0IsR0FBU3IwQixHQUFTLEtBQzFEbUYsRUFBSTdCLEtBQUthLElBQUksSUFBS2hFLEdBQ2xCNE0sRUFBUzhvQixHQUFTLEVBQUkxMUIsRUFBSSxHQUM5QixPQUFPLFNBQVNILEdBQ2QsT0FBT2UsRUFBRW9FLEVBQUluRixHQUFTK00sQ0FDNUIsQ0FDRyxFQU1ILENLbkpPLFNBQVN5cUIsR0FBVTd1QixFQUFRL0IsR0FDaEMsT0FBUUMsVUFBVXRGLFFBQ2hCLEtBQUssRUFBRyxNQUNSLEtBQUssRUFBR2tCLEtBQUttRSxNQUFNK0IsR0FBUyxNQUM1QixRQUFTbEcsS0FBS21FLE1BQU1BLEdBQU8rQixPQUFPQSxHQUVwQyxPQUFPbEcsSUFDVCxDSk1Fa3pCLEdBQVM4QixHQVBHLENBQ1p6QixVQUFXLElBQ1hELFNBQVUsQ0FBQyxHQUNYSyxTQUFVLENBQUMsSUFBSyxNQUtoQnh0QixHQUFTK3NCLEdBQU8vc0IsT0FDaEJndEIsR0FBZUQsR0FBT0MsYUtaakIsTUFBTThCLEdBQVdwZixPQUFPLFlBRWhCLFNBQVNxZixLQUN0QixJQUFJNXlCLEVBQVEsSUFBSS9DLEVBQ1oyRyxFQUFTLEdBQ1QvQixFQUFRLEdBQ1JneEIsRUFBVUYsR0FFZCxTQUFTandCLEVBQU1oRyxHQUNiLElBQUlHLEVBQUltRCxFQUFNbEMsSUFBSXBCLEdBQ2xCLFFBQVVxRCxJQUFObEQsRUFBaUIsQ0FDbkIsR0FBSWcyQixJQUFZRixHQUFVLE9BQU9FLEVBQ2pDN3lCLEVBQU1uQyxJQUFJbkIsRUFBR0csRUFBSStHLEVBQU8rQyxLQUFLakssR0FBSyxFQUNuQyxDQUNELE9BQU9tRixFQUFNaEYsRUFBSWdGLEVBQU1yRixPQUN4QixDQTBCRCxPQXhCQWtHLEVBQU1rQixPQUFTLFNBQVNnQyxHQUN0QixJQUFLOUQsVUFBVXRGLE9BQVEsT0FBT29ILEVBQU9pQyxRQUNyQ2pDLEVBQVMsR0FBSTVELEVBQVEsSUFBSS9DLEVBQ3pCLElBQUssTUFBTWhDLEtBQVMySyxFQUNkNUYsRUFBTWhDLElBQUkvQyxJQUNkK0UsRUFBTW5DLElBQUk1QyxFQUFPMkksRUFBTytDLEtBQUsxTCxHQUFTLEdBRXhDLE9BQU95SCxDQUNYLEVBRUVBLEVBQU1iLE1BQVEsU0FBUytELEdBQ3JCLE9BQU85RCxVQUFVdEYsUUFBVXFGLEVBQVFHLE1BQU1WLEtBQUtzRSxHQUFJbEQsR0FBU2IsRUFBTWdFLE9BQ3JFLEVBRUVuRCxFQUFNbXdCLFFBQVUsU0FBU2p0QixHQUN2QixPQUFPOUQsVUFBVXRGLFFBQVVxMkIsRUFBVWp0QixFQUFHbEQsR0FBU213QixDQUNyRCxFQUVFbndCLEVBQU15QixLQUFPLFdBQ1gsT0FBT3l1QixHQUFRaHZCLEVBQVEvQixHQUFPZ3hCLFFBQVFBLEVBQzFDLEVBRUVKLEdBQVVoM0IsTUFBTWlILEVBQU9aLFdBRWhCWSxDQUNULENDN0NlLFNBQVNELEdBQU9wRyxHQUM3QixPQUFRQSxDQUNWLENDR0EsSUFBSXkyQixHQUFPLENBQUMsRUFBRyxHQUVSLFNBQVNodkIsR0FBU3pILEdBQ3ZCLE9BQU9BLENBQ1QsQ0FFQSxTQUFTMDJCLEdBQVVwM0IsRUFBR0MsR0FDcEIsT0FBUUEsR0FBTUQsR0FBS0EsR0FDYixTQUFTVSxHQUFLLE9BQVFBLEVBQUlWLEdBQUtDLENBQUksRUNiNUIsU0FBbUJTLEdBQ2hDLE9BQU8sV0FDTCxPQUFPQSxDQUNYLENBQ0EsQ0RVUW1WLENBQVNoUSxNQUFNNUYsR0FBS0MsSUFBTSxHQUNsQyxDQVVBLFNBQVNtM0IsR0FBTXB2QixFQUFRL0IsRUFBTzJuQixHQUM1QixJQUFJeUosRUFBS3J2QixFQUFPLEdBQUlzdkIsRUFBS3R2QixFQUFPLEdBQUl1dkIsRUFBS3R4QixFQUFNLEdBQUl1eEIsRUFBS3Z4QixFQUFNLEdBRzlELE9BRklxeEIsRUFBS0QsR0FBSUEsRUFBS0YsR0FBVUcsRUFBSUQsR0FBS0UsRUFBSzNKLEVBQVk0SixFQUFJRCxLQUNyREYsRUFBS0YsR0FBVUUsRUFBSUMsR0FBS0MsRUFBSzNKLEVBQVkySixFQUFJQyxJQUMzQyxTQUFTLzJCLEdBQUssT0FBTzgyQixFQUFHRixFQUFHNTJCLElBQ3BDLENBRUEsU0FBU2czQixHQUFRenZCLEVBQVEvQixFQUFPMm5CLEdBQzlCLElBQUl2b0IsRUFBSTFDLEtBQUswQixJQUFJMkQsRUFBT3BILE9BQVFxRixFQUFNckYsUUFBVSxFQUM1Q0UsRUFBSSxJQUFJc0YsTUFBTWYsR0FDZHdkLEVBQUksSUFBSXpjLE1BQU1mLEdBQ2RwRSxHQUFLLEVBUVQsSUFMSStHLEVBQU8zQyxHQUFLMkMsRUFBTyxLQUNyQkEsRUFBU0EsRUFBT2lDLFFBQVFqRyxVQUN4QmlDLEVBQVFBLEVBQU1nRSxRQUFRakcsYUFHZi9DLEVBQUlvRSxHQUNYdkUsRUFBRUcsR0FBS2syQixHQUFVbnZCLEVBQU8vRyxHQUFJK0csRUFBTy9HLEVBQUksSUFDdkM0aEIsRUFBRTVoQixHQUFLMnNCLEVBQVkzbkIsRUFBTWhGLEdBQUlnRixFQUFNaEYsRUFBSSxJQUd6QyxPQUFPLFNBQVNSLEdBQ2QsSUFBSVEsRUFBSXkyQixFQUFPMXZCLEVBQVF2SCxFQUFHLEVBQUc0RSxHQUFLLEVBQ2xDLE9BQU93ZCxFQUFFNWhCLEdBQUdILEVBQUVHLEdBQUdSLEdBQ3JCLENBQ0EsQ0FFTyxTQUFTOEgsR0FBS2dmLEVBQVFvUSxHQUMzQixPQUFPQSxFQUNGM3ZCLE9BQU91ZixFQUFPdmYsVUFDZC9CLE1BQU1zaEIsRUFBT3RoQixTQUNiMm5CLFlBQVlyRyxFQUFPcUcsZUFDbkJ6SixNQUFNb0QsRUFBT3BELFNBQ2I4UyxRQUFRMVAsRUFBTzBQLFVBQ3RCLENBRU8sU0FBU1csS0FDZCxJQUdJL3ZCLEVBQ0Fnd0IsRUFDQVosRUFFQWEsRUFDQUMsRUFDQUMsRUFUQWh3QixFQUFTa3ZCLEdBQ1RqeEIsRUFBUWl4QixHQUNSdEosRUFBY3FLLEdBSWQ5VCxFQUFRamMsR0FLWixTQUFTZ3dCLElBQ1AsSUE1RGFuNEIsRUFBR0MsRUFDZG9GLEVBMkRFUCxFQUFJbEMsS0FBSzBCLElBQUkyRCxFQUFPcEgsT0FBUXFGLEVBQU1yRixRQUl0QyxPQUhJdWpCLElBQVVqYyxLQTdERG5JLEVBNkQyQmlJLEVBQU8sR0E3RC9CaEksRUE2RG1DZ0ksRUFBT25ELEVBQUksR0EzRDVEOUUsRUFBSUMsSUFBR29GLEVBQUlyRixFQUFHQSxFQUFJQyxFQUFHQSxFQUFJb0YsR0EyREgrZSxFQTFEbkIsU0FBUzFqQixHQUFLLE9BQU9rQyxLQUFLUSxJQUFJcEQsRUFBRzRDLEtBQUswQixJQUFJckUsRUFBR1MsR0FBSSxHQTJEdERxM0IsRUFBWWp6QixFQUFJLEVBQUk0eUIsR0FBVUwsR0FDOUJXLEVBQVNDLEVBQVEsS0FDVmx4QixDQUNSLENBRUQsU0FBU0EsRUFBTXJHLEdBQ2IsT0FBWSxNQUFMQSxHQUFhbUYsTUFBTW5GLEdBQUtBLEdBQUt3MkIsR0FBV2MsSUFBV0EsRUFBU0QsRUFBVTl2QixFQUFPdUQsSUFBSTFELEdBQVk1QixFQUFPMm5CLEtBQWUvbEIsRUFBVXNjLEVBQU0xakIsSUFDM0ksQ0E4QkQsT0E1QkFxRyxFQUFNcXhCLE9BQVMsU0FBU3Z4QixHQUN0QixPQUFPdWQsRUFBTTBULEdBQWFHLElBQVVBLEVBQVFGLEVBQVU3eEIsRUFBTytCLEVBQU91RCxJQUFJMUQsR0FBWXNmLE1BQXFCdmdCLElBQzdHLEVBRUVFLEVBQU1rQixPQUFTLFNBQVNnQyxHQUN0QixPQUFPOUQsVUFBVXRGLFFBQVVvSCxFQUFTNUIsTUFBTVYsS0FBS3NFLEVBQUduRCxJQUFTcXhCLEtBQWFsd0IsRUFBT2lDLE9BQ25GLEVBRUVuRCxFQUFNYixNQUFRLFNBQVMrRCxHQUNyQixPQUFPOUQsVUFBVXRGLFFBQVVxRixFQUFRRyxNQUFNVixLQUFLc0UsR0FBSWt1QixLQUFhanlCLEVBQU1nRSxPQUN6RSxFQUVFbkQsRUFBTXN4QixXQUFhLFNBQVNwdUIsR0FDMUIsT0FBTy9ELEVBQVFHLE1BQU1WLEtBQUtzRSxHQUFJNGpCLEVBQWN0RixHQUFrQjRQLEdBQ2xFLEVBRUVweEIsRUFBTXFkLE1BQVEsU0FBU25hLEdBQ3JCLE9BQU85RCxVQUFVdEYsUUFBVXVqQixJQUFRbmEsR0FBVzlCLEdBQVVnd0IsS0FBYS9ULElBQVVqYyxFQUNuRixFQUVFcEIsRUFBTThtQixZQUFjLFNBQVM1akIsR0FDM0IsT0FBTzlELFVBQVV0RixRQUFVZ3RCLEVBQWM1akIsRUFBR2t1QixLQUFhdEssQ0FDN0QsRUFFRTltQixFQUFNbXdCLFFBQVUsU0FBU2p0QixHQUN2QixPQUFPOUQsVUFBVXRGLFFBQVVxMkIsRUFBVWp0QixFQUFHbEQsR0FBU213QixDQUNyRCxFQUVTLFNBQVM3eEIsRUFBR2l6QixHQUVqQixPQURBeHdCLEVBQVl6QyxFQUFHeXlCLEVBQWNRLEVBQ3RCSCxHQUNYLENBQ0EsQ0FFZSxTQUFTSSxLQUN0QixPQUFPVixLQUFjMXZCLEdBQVVBLEdBQ2pDLENFekhlLFNBQVNYLEdBQVd2RSxFQUFPQyxFQUFNQyxFQUFPNHdCLEdBQ3JELElBQ0lRLEVBREFoMUIsRUFBT3lFLEVBQVNmLEVBQU9DLEVBQU1DLEdBR2pDLFFBREE0d0IsRUFBWUQsR0FBNkIsTUFBYkMsRUFBb0IsS0FBT0EsSUFDckNwcEIsTUFDaEIsSUFBSyxJQUNILElBQUlyTCxFQUFRc0QsS0FBS1EsSUFBSVIsS0FBS3d2QixJQUFJbnZCLEdBQVFMLEtBQUt3dkIsSUFBSWx2QixJQUUvQyxPQUQyQixNQUF2QjZ3QixFQUFVUSxXQUFzQjF1QixNQUFNMHVCLEVDUmpDLFNBQVNoMUIsRUFBTUQsR0FDNUIsT0FBT3NELEtBQUtRLElBQUksRUFBZ0UsRUFBN0RSLEtBQUtRLEtBQUssRUFBR1IsS0FBSzBCLElBQUksRUFBRzFCLEtBQUtVLE1BQU1xd0IsR0FBU3IwQixHQUFTLEtBQVdxMEIsR0FBUy93QixLQUFLd3ZCLElBQUk3eUIsSUFDeEcsQ0RNNERpNUIsQ0FBZ0JqNUIsRUFBTUQsTUFBU3kwQixFQUFVUSxVQUFZQSxHQUNwR1csR0FBYW5CLEVBQVd6MEIsR0FFakMsSUFBSyxHQUNMLElBQUssSUFDTCxJQUFLLElBQ0wsSUFBSyxJQUNMLElBQUssSUFDd0IsTUFBdkJ5MEIsRUFBVVEsV0FBc0IxdUIsTUFBTTB1QixFRWhCakMsU0FBU2gxQixFQUFNNkQsR0FFNUIsT0FEQTdELEVBQU9xRCxLQUFLd3ZCLElBQUk3eUIsR0FBTzZELEVBQU1SLEtBQUt3dkIsSUFBSWh2QixHQUFPN0QsRUFDdENxRCxLQUFLUSxJQUFJLEVBQUd1d0IsR0FBU3Z3QixHQUFPdXdCLEdBQVNwMEIsSUFBUyxDQUN2RCxDRmE0RGs1QixDQUFlbDVCLEVBQU1xRCxLQUFLUSxJQUFJUixLQUFLd3ZCLElBQUludkIsR0FBUUwsS0FBS3d2QixJQUFJbHZCLFFBQVU2d0IsRUFBVVEsVUFBWUEsR0FBZ0MsTUFBbkJSLEVBQVVwcEIsT0FDckssTUFFRixJQUFLLElBQ0wsSUFBSyxJQUN3QixNQUF2Qm9wQixFQUFVUSxXQUFzQjF1QixNQUFNMHVCLEVHckJqQyxTQUFTaDFCLEdBQ3RCLE9BQU9xRCxLQUFLUSxJQUFJLEdBQUl1d0IsR0FBUy93QixLQUFLd3ZCLElBQUk3eUIsSUFDeEMsQ0htQjREbTVCLENBQWVuNUIsTUFBUXcwQixFQUFVUSxVQUFZQSxFQUF1QyxHQUFQLE1BQW5CUixFQUFVcHBCLE9BSTlILE9BQU96QyxHQUFPNnJCLEVBQ2hCLENJdkJPLFNBQVM0RSxHQUFVNXhCLEdBQ3hCLElBQUlrQixFQUFTbEIsRUFBTWtCLE9Ba0RuQixPQWhEQWxCLEVBQU1pQixNQUFRLFNBQVM3RSxHQUNyQixJQUFJcEMsRUFBSWtILElBQ1IsT2pJa0JXLFNBQWVoRixFQUFPQyxFQUFNQyxHQUV6QyxNQUQ4QkEsR0FBU0EsR0FDekIsR0FBSSxNQUFPLEdBQ3pCLElBRmNGLEdBQVNBLEtBQXZCQyxHQUFRQSxHQUVZLE1BQU8sQ0FBQ0QsR0FDNUIsTUFBTWdCLEVBQVVmLEVBQU9ELEdBQVFVLEVBQUlDLEVBQUlDLEdBQU9JLEVBQVVqQixFQUFTRSxFQUFNRCxFQUFPRSxHQUFTSCxFQUFTQyxFQUFPQyxFQUFNQyxHQUM3RyxLQUFNUyxHQUFNRCxHQUFLLE1BQU8sR0FDeEIsTUFBTW1CLEVBQUlsQixFQUFLRCxFQUFLLEVBQUdxRSxFQUFRLElBQUkzQixNQUFNdkIsR0FDekMsR0FBSWIsRUFDRixHQUFJSixFQUFNLEVBQUcsSUFBSyxJQUFJM0MsRUFBSSxFQUFHQSxFQUFJNEQsSUFBSzVELEVBQUc4RyxFQUFNOUcsSUFBTTBDLEVBQUsxQyxJQUFNMkMsT0FDM0QsSUFBSyxJQUFJM0MsRUFBSSxFQUFHQSxFQUFJNEQsSUFBSzVELEVBQUc4RyxFQUFNOUcsSUFBTTBDLEVBQUsxQyxHQUFLMkMsT0FFdkQsR0FBSUEsRUFBTSxFQUFHLElBQUssSUFBSTNDLEVBQUksRUFBR0EsRUFBSTRELElBQUs1RCxFQUFHOEcsRUFBTTlHLElBQU15QyxFQUFLekMsSUFBTTJDLE9BQzNELElBQUssSUFBSTNDLEVBQUksRUFBR0EsRUFBSTRELElBQUs1RCxFQUFHOEcsRUFBTTlHLElBQU15QyxFQUFLekMsR0FBSzJDLEVBRXpELE9BQU9tRSxDQUNULENpSWpDV0EsQ0FBTWpILEVBQUUsR0FBSUEsRUFBRUEsRUFBRUYsT0FBUyxHQUFhLE1BQVRzQyxFQUFnQixHQUFLQSxFQUM3RCxFQUVFNEQsRUFBTVMsV0FBYSxTQUFTckUsRUFBTzR3QixHQUNqQyxJQUFJaHpCLEVBQUlrSCxJQUNSLE9BQU9ULEdBQVd6RyxFQUFFLEdBQUlBLEVBQUVBLEVBQUVGLE9BQVMsR0FBYSxNQUFUc0MsRUFBZ0IsR0FBS0EsRUFBTzR3QixFQUN6RSxFQUVFaHRCLEVBQU02eEIsS0FBTyxTQUFTejFCLEdBQ1AsTUFBVEEsSUFBZUEsRUFBUSxJQUUzQixJQUtJMDFCLEVBQ0F0NUIsRUFOQXdCLEVBQUlrSCxJQUNKbkMsRUFBSyxFQUNMbkMsRUFBSzVDLEVBQUVGLE9BQVMsRUFDaEJvQyxFQUFRbEMsRUFBRStFLEdBQ1Y1QyxFQUFPbkMsRUFBRTRDLEdBR1RtMUIsRUFBVSxHQU9kLElBTEk1MUIsRUFBT0QsSUFDVDFELEVBQU8wRCxFQUFPQSxFQUFRQyxFQUFNQSxFQUFPM0QsRUFDbkNBLEVBQU91RyxFQUFJQSxFQUFLbkMsRUFBSUEsRUFBS3BFLEdBR3BCdTVCLEtBQVksR0FBRyxDQUVwQixJQURBdjVCLEVBQU93RSxFQUFjZCxFQUFPQyxFQUFNQyxNQUNyQjAxQixFQUdYLE9BRkE5M0IsRUFBRStFLEdBQU03QyxFQUNSbEMsRUFBRTRDLEdBQU1ULEVBQ0QrRSxFQUFPbEgsR0FDVCxHQUFJeEIsRUFBTyxFQUNoQjBELEVBQVFMLEtBQUtVLE1BQU1MLEVBQVExRCxHQUFRQSxFQUNuQzJELEVBQU9OLEtBQUt3RCxLQUFLbEQsRUFBTzNELEdBQVFBLE1BQzNCLE1BQUlBLEVBQU8sR0FJaEIsTUFIQTBELEVBQVFMLEtBQUt3RCxLQUFLbkQsRUFBUTFELEdBQVFBLEVBQ2xDMkQsRUFBT04sS0FBS1UsTUFBTUosRUFBTzNELEdBQVFBLENBR2xDLENBQ0RzNUIsRUFBVXQ1QixDQUNYLENBRUQsT0FBT3dILENBQ1gsRUFFU0EsQ0FDVCxDQUVlLFNBQVNpZixLQUN0QixJQUFJamYsRUFBUXd4QixLQVFaLE9BTkF4eEIsRUFBTXlCLEtBQU8sV0FDWCxPQUFPQSxHQUFLekIsRUFBT2lmLEtBQ3ZCLEVBRUU4USxHQUFVaDNCLE1BQU1pSCxFQUFPWixXQUVoQnd5QixHQUFVNXhCLEVBQ25CLENDckVBLE1BQU00ZCxHQUFLLElBQUl1QyxLQUFNdEMsR0FBSyxJQUFJc0MsS0FFdkIsU0FBUzZSLEdBQWFDLEVBQVFDLEVBQVM5MUIsRUFBTysxQixHQUVuRCxTQUFTM08sRUFBU3JDLEdBQ2hCLE9BQU84USxFQUFPOVEsRUFBNEIsSUFBckIvaEIsVUFBVXRGLE9BQWUsSUFBSXFtQixLQUFPLElBQUlBLE1BQU1nQixJQUFRQSxDQUM1RSxDQTZERCxPQTNEQXFDLEVBQVNqbkIsTUFBUzRrQixJQUNUOFEsRUFBTzlRLEVBQU8sSUFBSWhCLE1BQU1nQixJQUFRQSxHQUd6Q3FDLEVBQVNua0IsS0FBUThoQixJQUNSOFEsRUFBTzlRLEVBQU8sSUFBSWhCLEtBQUtnQixFQUFPLElBQUsrUSxFQUFRL1EsRUFBTSxHQUFJOFEsRUFBTzlRLEdBQU9BLEdBRzVFcUMsRUFBU3ptQixNQUFTb2tCLElBQ2hCLE1BQU1vUCxFQUFLL00sRUFBU3JDLEdBQU9xUCxFQUFLaE4sRUFBU25rQixLQUFLOGhCLEdBQzlDLE9BQU9BLEVBQU9vUCxFQUFLQyxFQUFLclAsRUFBT29QLEVBQUtDLENBQUUsRUFHeENoTixFQUFTdmpCLE9BQVMsQ0FBQ2toQixFQUFNM29CLEtBQ2hCMDVCLEVBQVEvUSxFQUFPLElBQUloQixNQUFNZ0IsR0FBZSxNQUFSM29CLEVBQWUsRUFBSXFELEtBQUtVLE1BQU0vRCxJQUFRMm9CLEdBRy9FcUMsRUFBU3JrQixNQUFRLENBQUNqRCxFQUFPQyxFQUFNM0QsS0FDN0IsTUFBTTJHLEVBQVEsR0FHZCxHQUZBakQsRUFBUXNuQixFQUFTbmtCLEtBQUtuRCxHQUN0QjFELEVBQWUsTUFBUkEsRUFBZSxFQUFJcUQsS0FBS1UsTUFBTS9ELEtBQy9CMEQsRUFBUUMsR0FBVzNELEVBQU8sR0FBSSxPQUFPMkcsRUFDM0MsSUFBSThQLEVBQ0osR0FBRzlQLEVBQU04RSxLQUFLZ0wsRUFBVyxJQUFJa1IsTUFBTWprQixJQUFTZzJCLEVBQVFoMkIsRUFBTzFELEdBQU95NUIsRUFBTy8xQixTQUNsRStTLEVBQVcvUyxHQUFTQSxFQUFRQyxHQUNuQyxPQUFPZ0QsQ0FBSyxFQUdkcWtCLEVBQVN4Z0IsT0FBVVMsR0FDVnV1QixJQUFjN1EsSUFDbkIsR0FBSUEsR0FBUUEsRUFBTSxLQUFPOFEsRUFBTzlRLElBQVExZCxFQUFLMGQsSUFBT0EsRUFBS2YsUUFBUWUsRUFBTyxFQUFFLElBQ3pFLENBQUNBLEVBQU0zb0IsS0FDUixHQUFJMm9CLEdBQVFBLEVBQ1YsR0FBSTNvQixFQUFPLEVBQUcsT0FBU0EsR0FBUSxHQUM3QixLQUFPMDVCLEVBQVEvUSxHQUFPLElBQUsxZCxFQUFLMGQsVUFDM0IsT0FBUzNvQixHQUFRLEdBQ3RCLEtBQU8wNUIsRUFBUS9RLEVBQU0sSUFBTTFkLEVBQUswZCxLQUVuQyxJQUlEL2tCLElBQ0ZvbkIsRUFBU3BuQixNQUFRLENBQUNGLEVBQU9rakIsS0FDdkJ4QixHQUFHd0MsU0FBU2xrQixHQUFRMmhCLEdBQUd1QyxTQUFTaEIsR0FDaEM2UyxFQUFPclUsSUFBS3FVLEVBQU9wVSxJQUNaaGlCLEtBQUtVLE1BQU1ILEVBQU13aEIsR0FBSUMsTUFHOUIyRixFQUFTZ0YsTUFBU2h3QixJQUNoQkEsRUFBT3FELEtBQUtVLE1BQU0vRCxHQUNWb0ssU0FBU3BLLElBQVdBLEVBQU8sRUFDM0JBLEVBQU8sRUFDVGdyQixFQUFTeGdCLE9BQU9tdkIsRUFDWG40QixHQUFNbTRCLEVBQU1uNEIsR0FBS3hCLEdBQVMsRUFDMUJ3QixHQUFNd3BCLEVBQVNwbkIsTUFBTSxFQUFHcEMsR0FBS3hCLEdBQVMsR0FIN0JnckIsRUFEb0IsT0FRckNBLENBQ1QsQ0NsRU8sTUFBTTRPLEdBQWNKLElBQWEsU0FFckMsQ0FBQzdRLEVBQU0zb0IsS0FDUjJvQixFQUFLZixTQUFTZSxFQUFPM29CLEVBQUssSUFDekIsQ0FBQzBELEVBQU9rakIsSUFDRkEsRUFBTWxqQixJQUlmazJCLEdBQVk1SixNQUFTOXFCLElBQ25CQSxFQUFJN0IsS0FBS1UsTUFBTW1CLEdBQ1ZrRixTQUFTbEYsSUFBUUEsRUFBSSxFQUNwQkEsRUFBSSxFQUNIczBCLElBQWM3USxJQUNuQkEsRUFBS2YsUUFBUXZrQixLQUFLVSxNQUFNNGtCLEVBQU96akIsR0FBS0EsRUFBRSxJQUNyQyxDQUFDeWpCLEVBQU0zb0IsS0FDUjJvQixFQUFLZixTQUFTZSxFQUFPM29CLEVBQU9rRixFQUFFLElBQzdCLENBQUN4QixFQUFPa2pCLEtBQ0RBLEVBQU1sakIsR0FBU3dCLElBTkowMEIsR0FEZ0IsTUFXWEEsR0FBWWp6QixNQ3hCakMsTUFBTWt6QixHQUFpQixJQUNqQkMsR0FBaUJELElBQ2pCRSxHQUFlRCxLQUNmRSxHQUFjRCxNQUNkRSxHQUFlRCxPQUNmRSxHQUFnQkYsT0FDaEJHLEdBQWVILFFDSGZJLEdBQVNaLElBQWM3USxJQUNsQ0EsRUFBS2YsUUFBUWUsRUFBT0EsRUFBSzBSLGtCQUFrQixJQUMxQyxDQUFDMVIsRUFBTTNvQixLQUNSMm9CLEVBQUtmLFNBQVNlLEVBQU8zb0IsRUFBTzY1QixHQUFlLElBQzFDLENBQUNuMkIsRUFBT2tqQixLQUNEQSxFQUFNbGpCLEdBQVNtMkIsS0FDckJsUixHQUNLQSxFQUFLMlIsa0JBR1NGLEdBQU96ekIsTUNWdkIsTUFBTTR6QixHQUFhZixJQUFjN1EsSUFDdENBLEVBQUtmLFFBQVFlLEVBQU9BLEVBQUswUixrQkFBb0IxUixFQUFLNlIsYUFBZVgsR0FBZSxJQUMvRSxDQUFDbFIsRUFBTTNvQixLQUNSMm9CLEVBQUtmLFNBQVNlLEVBQU8zb0IsRUFBTzg1QixHQUFlLElBQzFDLENBQUNwMkIsRUFBT2tqQixLQUNEQSxFQUFNbGpCLEdBQVNvMkIsS0FDckJuUixHQUNLQSxFQUFLOFIsZUFHYUYsR0FBVzV6QixNQUUvQixNQUFNK3pCLEdBQVlsQixJQUFjN1EsSUFDckNBLEVBQUtnUyxjQUFjLEVBQUcsRUFBRSxJQUN2QixDQUFDaFMsRUFBTTNvQixLQUNSMm9CLEVBQUtmLFNBQVNlLEVBQU8zb0IsRUFBTzg1QixHQUFlLElBQzFDLENBQUNwMkIsRUFBT2tqQixLQUNEQSxFQUFNbGpCLEdBQVNvMkIsS0FDckJuUixHQUNLQSxFQUFLaVMsa0JBR1lGLEdBQVUvekIsTUN0QjdCLE1BQU1rMEIsR0FBV3JCLElBQWM3USxJQUNwQ0EsRUFBS2YsUUFBUWUsRUFBT0EsRUFBSzBSLGtCQUFvQjFSLEVBQUs2UixhQUFlWCxHQUFpQmxSLEVBQUs4UixhQUFlWCxHQUFlLElBQ3BILENBQUNuUixFQUFNM29CLEtBQ1Iyb0IsRUFBS2YsU0FBU2UsRUFBTzNvQixFQUFPKzVCLEdBQWEsSUFDeEMsQ0FBQ3IyQixFQUFPa2pCLEtBQ0RBLEVBQU1sakIsR0FBU3EyQixLQUNyQnBSLEdBQ0tBLEVBQUttUyxhQUdXRCxHQUFTbDBCLE1BRTNCLE1BQU1vMEIsR0FBVXZCLElBQWM3USxJQUNuQ0EsRUFBS3FTLGNBQWMsRUFBRyxFQUFHLEVBQUUsSUFDMUIsQ0FBQ3JTLEVBQU0zb0IsS0FDUjJvQixFQUFLZixTQUFTZSxFQUFPM29CLEVBQU8rNUIsR0FBYSxJQUN4QyxDQUFDcjJCLEVBQU9rakIsS0FDREEsRUFBTWxqQixHQUFTcTJCLEtBQ3JCcFIsR0FDS0EsRUFBS3NTLGdCQUdVRixHQUFRcDBCLE1DdEJ6QixNQUFNdTBCLEdBQVUxQixJQUNyQjdRLEdBQVFBLEVBQUt3UyxTQUFTLEVBQUcsRUFBRyxFQUFHLEtBQy9CLENBQUN4UyxFQUFNM29CLElBQVMyb0IsRUFBS3lTLFFBQVF6UyxFQUFLMFMsVUFBWXI3QixLQUM5QyxDQUFDMEQsRUFBT2tqQixLQUFTQSxFQUFNbGpCLEdBQVNrakIsRUFBSTBVLG9CQUFzQjUzQixFQUFNNDNCLHFCQUF1QnhCLElBQWtCRSxLQUN6R3JSLEdBQVFBLEVBQUswUyxVQUFZLElBR0hILEdBQVF2MEIsTUFFekIsTUFBTTQwQixHQUFTL0IsSUFBYzdRLElBQ2xDQSxFQUFLNlMsWUFBWSxFQUFHLEVBQUcsRUFBRyxFQUFFLElBQzNCLENBQUM3UyxFQUFNM29CLEtBQ1Iyb0IsRUFBSzhTLFdBQVc5UyxFQUFLK1MsYUFBZTE3QixFQUFLLElBQ3hDLENBQUMwRCxFQUFPa2pCLEtBQ0RBLEVBQU1sakIsR0FBU3MyQixLQUNyQnJSLEdBQ0tBLEVBQUsrUyxhQUFlLElBR05ILEdBQU81MEIsTUFFdkIsTUFBTWcxQixHQUFVbkMsSUFBYzdRLElBQ25DQSxFQUFLNlMsWUFBWSxFQUFHLEVBQUcsRUFBRyxFQUFFLElBQzNCLENBQUM3UyxFQUFNM29CLEtBQ1Iyb0IsRUFBSzhTLFdBQVc5UyxFQUFLK1MsYUFBZTE3QixFQUFLLElBQ3hDLENBQUMwRCxFQUFPa2pCLEtBQ0RBLEVBQU1sakIsR0FBU3MyQixLQUNyQnJSLEdBQ0t0bEIsS0FBS1UsTUFBTTRrQixFQUFPcVIsTUM1QjNCLFNBQVM0QixHQUFZajZCLEdBQ25CLE9BQU82M0IsSUFBYzdRLElBQ25CQSxFQUFLeVMsUUFBUXpTLEVBQUswUyxXQUFhMVMsRUFBS2tULFNBQVcsRUFBSWw2QixHQUFLLEdBQ3hEZ25CLEVBQUt3UyxTQUFTLEVBQUcsRUFBRyxFQUFHLEVBQUUsSUFDeEIsQ0FBQ3hTLEVBQU0zb0IsS0FDUjJvQixFQUFLeVMsUUFBUXpTLEVBQUswUyxVQUFtQixFQUFQcjdCLEVBQVMsSUFDdEMsQ0FBQzBELEVBQU9rakIsS0FDREEsRUFBTWxqQixHQUFTa2pCLEVBQUkwVSxvQkFBc0I1M0IsRUFBTTQzQixxQkFBdUJ4QixJQUFrQkcsSUFFcEcsQ0RzQndCMEIsR0FBUWgxQixNQ3BCekIsTUFBTW0xQixHQUFhRixHQUFZLEdBQ3pCRyxHQUFhSCxHQUFZLEdBQ3pCSSxHQUFjSixHQUFZLEdBQzFCSyxHQUFnQkwsR0FBWSxHQUM1Qk0sR0FBZU4sR0FBWSxHQUMzQk8sR0FBYVAsR0FBWSxHQUN6QlEsR0FBZVIsR0FBWSxHQVV4QyxTQUFTUyxHQUFXMTZCLEdBQ2xCLE9BQU82M0IsSUFBYzdRLElBQ25CQSxFQUFLOFMsV0FBVzlTLEVBQUsrUyxjQUFnQi9TLEVBQUsyVCxZQUFjLEVBQUkzNkIsR0FBSyxHQUNqRWduQixFQUFLNlMsWUFBWSxFQUFHLEVBQUcsRUFBRyxFQUFFLElBQzNCLENBQUM3UyxFQUFNM29CLEtBQ1Iyb0IsRUFBSzhTLFdBQVc5UyxFQUFLK1MsYUFBc0IsRUFBUDE3QixFQUFTLElBQzVDLENBQUMwRCxFQUFPa2pCLEtBQ0RBLEVBQU1sakIsR0FBU3UyQixJQUUzQixDQWpCMkI2QixHQUFXbjFCLE1BQ1hvMUIsR0FBV3AxQixNQUNWcTFCLEdBQVlyMUIsTUFDVnMxQixHQUFjdDFCLE1BQ2Z1MUIsR0FBYXYxQixNQUNmdzFCLEdBQVd4MUIsTUFDVHkxQixHQUFhejFCLE1BYW5DLE1BQU00MUIsR0FBWUYsR0FBVyxHQUN2QkcsR0FBWUgsR0FBVyxHQUN2QkksR0FBYUosR0FBVyxHQUN4QkssR0FBZUwsR0FBVyxHQUMxQk0sR0FBY04sR0FBVyxHQUN6Qk8sR0FBWVAsR0FBVyxHQUN2QlEsR0FBY1IsR0FBVyxHQUVaRSxHQUFVNTFCLE1BQ1Y2MUIsR0FBVTcxQixNQUNUODFCLEdBQVc5MUIsTUFDVCsxQixHQUFhLzFCLE1BQ2RnMkIsR0FBWWgyQixNQUNkaTJCLEdBQVVqMkIsTUFDUmsyQixHQUFZbDJCLE1DckRqQyxNQUFNbTJCLEdBQVl0RCxJQUFjN1EsSUFDckNBLEVBQUt5UyxRQUFRLEdBQ2J6UyxFQUFLd1MsU0FBUyxFQUFHLEVBQUcsRUFBRyxFQUFFLElBQ3hCLENBQUN4UyxFQUFNM29CLEtBQ1Iyb0IsRUFBS29VLFNBQVNwVSxFQUFLcVUsV0FBYWg5QixFQUFLLElBQ3BDLENBQUMwRCxFQUFPa2pCLElBQ0ZBLEVBQUlvVyxXQUFhdDVCLEVBQU1zNUIsV0FBeUQsSUFBM0NwVyxFQUFJcVcsY0FBZ0J2NUIsRUFBTXU1QixpQkFDcEV0VSxHQUNLQSxFQUFLcVUsYUFHWUYsR0FBVW4yQixNQUU3QixNQUFNdTJCLEdBQVcxRCxJQUFjN1EsSUFDcENBLEVBQUs4UyxXQUFXLEdBQ2hCOVMsRUFBSzZTLFlBQVksRUFBRyxFQUFHLEVBQUcsRUFBRSxJQUMzQixDQUFDN1MsRUFBTTNvQixLQUNSMm9CLEVBQUt3VSxZQUFZeFUsRUFBS3lVLGNBQWdCcDlCLEVBQUssSUFDMUMsQ0FBQzBELEVBQU9rakIsSUFDRkEsRUFBSXdXLGNBQWdCMTVCLEVBQU0wNUIsY0FBa0UsSUFBakR4VyxFQUFJeVcsaUJBQW1CMzVCLEVBQU0yNUIsb0JBQzdFMVUsR0FDS0EsRUFBS3lVLGdCQUdXRixHQUFTdjJCLE1DeEIzQixNQUFNMjJCLEdBQVc5RCxJQUFjN1EsSUFDcENBLEVBQUtvVSxTQUFTLEVBQUcsR0FDakJwVSxFQUFLd1MsU0FBUyxFQUFHLEVBQUcsRUFBRyxFQUFFLElBQ3hCLENBQUN4UyxFQUFNM29CLEtBQ1Iyb0IsRUFBSzRVLFlBQVk1VSxFQUFLc1UsY0FBZ0JqOUIsRUFBSyxJQUMxQyxDQUFDMEQsRUFBT2tqQixJQUNGQSxFQUFJcVcsY0FBZ0J2NUIsRUFBTXU1QixnQkFDL0J0VSxHQUNLQSxFQUFLc1UsZ0JBSWRLLEdBQVN0TixNQUFTOXFCLEdBQ1JrRixTQUFTbEYsRUFBSTdCLEtBQUtVLE1BQU1tQixLQUFTQSxFQUFJLEVBQVlzMEIsSUFBYzdRLElBQ3JFQSxFQUFLNFUsWUFBWWw2QixLQUFLVSxNQUFNNGtCLEVBQUtzVSxjQUFnQi8zQixHQUFLQSxHQUN0RHlqQixFQUFLb1UsU0FBUyxFQUFHLEdBQ2pCcFUsRUFBS3dTLFNBQVMsRUFBRyxFQUFHLEVBQUcsRUFBRSxJQUN4QixDQUFDeFMsRUFBTTNvQixLQUNSMm9CLEVBQUs0VSxZQUFZNVUsRUFBS3NVLGNBQWdCajlCLEVBQU9rRixFQUFFLElBTEMsS0FTM0JvNEIsR0FBUzMyQixNQUUzQixNQUFNNjJCLEdBQVVoRSxJQUFjN1EsSUFDbkNBLEVBQUt3VSxZQUFZLEVBQUcsR0FDcEJ4VSxFQUFLNlMsWUFBWSxFQUFHLEVBQUcsRUFBRyxFQUFFLElBQzNCLENBQUM3UyxFQUFNM29CLEtBQ1Iyb0IsRUFBSzhVLGVBQWU5VSxFQUFLMFUsaUJBQW1CcjlCLEVBQUssSUFDaEQsQ0FBQzBELEVBQU9rakIsSUFDRkEsRUFBSXlXLGlCQUFtQjM1QixFQUFNMjVCLG1CQUNsQzFVLEdBQ0tBLEVBQUswVSxtQkFJZEcsR0FBUXhOLE1BQVM5cUIsR0FDUGtGLFNBQVNsRixFQUFJN0IsS0FBS1UsTUFBTW1CLEtBQVNBLEVBQUksRUFBWXMwQixJQUFjN1EsSUFDckVBLEVBQUs4VSxlQUFlcDZCLEtBQUtVLE1BQU00a0IsRUFBSzBVLGlCQUFtQm40QixHQUFLQSxHQUM1RHlqQixFQUFLd1UsWUFBWSxFQUFHLEdBQ3BCeFUsRUFBSzZTLFlBQVksRUFBRyxFQUFHLEVBQUcsRUFBRSxJQUMzQixDQUFDN1MsRUFBTTNvQixLQUNSMm9CLEVBQUs4VSxlQUFlOVUsRUFBSzBVLGlCQUFtQnI5QixFQUFPa0YsRUFBRSxJQUxMLEtBUzVCczRCLEdBQVE3MkIsTUNPaEMsTUFBTysyQixHQUFXQyxJQTVDbEIsU0FBZ0JDLEVBQU1DLEVBQU9DLEVBQU1DLEVBQUtDLEVBQU1DLEdBRTVDLE1BQU1DLEVBQWdCLENBQ3BCLENBQUM5RCxHQUFTLEVBQVFQLElBQ2xCLENBQUNPLEdBQVMsRUFBSSxLQUNkLENBQUNBLEdBQVEsR0FBSSxNQUNiLENBQUNBLEdBQVEsR0FBSSxLQUNiLENBQUM2RCxFQUFTLEVBQVFuRSxJQUNsQixDQUFDbUUsRUFBUyxFQUFJLEtBQ2QsQ0FBQ0EsRUFBUSxHQUFJLEtBQ2IsQ0FBQ0EsRUFBUSxHQUFJLE1BQ2IsQ0FBR0QsRUFBTyxFQUFRakUsSUFDbEIsQ0FBR2lFLEVBQU8sRUFBSSxPQUNkLENBQUdBLEVBQU8sRUFBSSxPQUNkLENBQUdBLEVBQU0sR0FBSSxPQUNiLENBQUlELEVBQU0sRUFBUS9ELElBQ2xCLENBQUkrRCxFQUFNLEVBQUksUUFDZCxDQUFHRCxFQUFPLEVBQVE3RCxJQUNsQixDQUFFNEQsRUFBUSxFQUFRM0QsSUFDbEIsQ0FBRTJELEVBQVEsRUFBSSxRQUNkLENBQUdELEVBQU8sRUFBUXpELEtBV3BCLFNBQVNnRSxFQUFhejZCLEVBQU9DLEVBQU1DLEdBQ2pDLE1BQU15MEIsRUFBU2gxQixLQUFLd3ZCLElBQUlsdkIsRUFBT0QsR0FBU0UsRUFDbENqQyxFQUFJZCxHQUFTLElBQUtiLEtBQVVBLElBQU00QixNQUFNczhCLEVBQWU3RixHQUM3RCxHQUFJMTJCLElBQU11OEIsRUFBYzU4QixPQUFRLE9BQU9zOEIsRUFBSzVOLE1BQU12ckIsRUFBU2YsRUFBUXkyQixHQUFjeDJCLEVBQU93MkIsR0FBY3YyQixJQUN0RyxHQUFVLElBQU5qQyxFQUFTLE9BQU9pNEIsR0FBWTVKLE1BQU0zc0IsS0FBS1EsSUFBSVksRUFBU2YsRUFBT0MsRUFBTUMsR0FBUSxJQUM3RSxNQUFPa0MsRUFBRzlGLEdBQVFrK0IsRUFBYzdGLEVBQVM2RixFQUFjdjhCLEVBQUksR0FBRyxHQUFLdThCLEVBQWN2OEIsR0FBRyxHQUFLMDJCLEVBQVMxMkIsRUFBSSxFQUFJQSxHQUMxRyxPQUFPbUUsRUFBRWtxQixNQUFNaHdCLEVBQ2hCLENBRUQsTUFBTyxDQWpCUCxTQUFlMEQsRUFBT0MsRUFBTUMsR0FDMUIsTUFBTWMsRUFBVWYsRUFBT0QsRUFDbkJnQixLQUFVaEIsRUFBT0MsR0FBUSxDQUFDQSxFQUFNRCxJQUNwQyxNQUFNc25CLEVBQVdwbkIsR0FBZ0MsbUJBQWhCQSxFQUFNK0MsTUFBdUIvQyxFQUFRdTZCLEVBQWF6NkIsRUFBT0MsRUFBTUMsR0FDMUY2RSxFQUFRdWlCLEVBQVdBLEVBQVNya0IsTUFBTWpELEdBQVFDLEVBQU8sR0FBSyxHQUM1RCxPQUFPZSxFQUFVK0QsRUFBTS9ELFVBQVkrRCxDQUNwQyxFQVdjMDFCLEVBQ2pCLENBR3NDQyxDQUFPZCxHQUFVUixHQUFXaEIsR0FBWVosR0FBU0wsR0FBVU4sSUMxQ2pHLFNBQVM4RCxHQUFVNzhCLEdBQ2pCLEdBQUksR0FBS0EsRUFBRThGLEdBQUs5RixFQUFFOEYsRUFBSSxJQUFLLENBQ3pCLElBQUlxaEIsRUFBTyxJQUFJaEIsTUFBTSxFQUFHbm1CLEVBQUVnRSxFQUFHaEUsRUFBRUEsRUFBR0EsRUFBRTg4QixFQUFHOThCLEVBQUUrOEIsRUFBRy84QixFQUFFZzlCLEVBQUdoOUIsRUFBRWk5QixHQUVuRCxPQURBOVYsRUFBSzRVLFlBQVkvN0IsRUFBRThGLEdBQ1pxaEIsQ0FDUixDQUNELE9BQU8sSUFBSWhCLEtBQUtubUIsRUFBRThGLEVBQUc5RixFQUFFZ0UsRUFBR2hFLEVBQUVBLEVBQUdBLEVBQUU4OEIsRUFBRzk4QixFQUFFKzhCLEVBQUcvOEIsRUFBRWc5QixFQUFHaDlCLEVBQUVpOUIsRUFDbEQsQ0FFQSxTQUFTQyxHQUFRbDlCLEdBQ2YsR0FBSSxHQUFLQSxFQUFFOEYsR0FBSzlGLEVBQUU4RixFQUFJLElBQUssQ0FDekIsSUFBSXFoQixFQUFPLElBQUloQixLQUFLQSxLQUFLZ1gsS0FBSyxFQUFHbjlCLEVBQUVnRSxFQUFHaEUsRUFBRUEsRUFBR0EsRUFBRTg4QixFQUFHOThCLEVBQUUrOEIsRUFBRy84QixFQUFFZzlCLEVBQUdoOUIsRUFBRWk5QixJQUU1RCxPQURBOVYsRUFBSzhVLGVBQWVqOEIsRUFBRThGLEdBQ2ZxaEIsQ0FDUixDQUNELE9BQU8sSUFBSWhCLEtBQUtBLEtBQUtnWCxJQUFJbjlCLEVBQUU4RixFQUFHOUYsRUFBRWdFLEVBQUdoRSxFQUFFQSxFQUFHQSxFQUFFODhCLEVBQUc5OEIsRUFBRSs4QixFQUFHLzhCLEVBQUVnOUIsRUFBR2g5QixFQUFFaTlCLEdBQzNELENBRUEsU0FBU0csR0FBUXQzQixFQUFHOUIsRUFBR2hFLEdBQ3JCLE1BQU8sQ0FBQzhGLEVBQUdBLEVBQUc5QixFQUFHQSxFQUFHaEUsRUFBR0EsRUFBRzg4QixFQUFHLEVBQUdDLEVBQUcsRUFBR0MsRUFBRyxFQUFHQyxFQUFHLEVBQ2pELENBa1dBLElDallJL0ksR0FDT21KLEdEZ1lQQyxHQUFPLENBQUMsSUFBSyxHQUFJcDBCLEVBQUssSUFBSyxFQUFLLEtBQ2hDcTBCLEdBQVcsVUFDWEMsR0FBWSxLQUNaQyxHQUFZLHNCQUVoQixTQUFTQyxHQUFJbi9CLEVBQU8yMEIsRUFBTUksR0FDeEIsSUFBSUYsRUFBTzcwQixFQUFRLEVBQUksSUFBTSxHQUN6QndSLEdBQVVxakIsR0FBUTcwQixFQUFRQSxHQUFTLEdBQ25DdUIsRUFBU2lRLEVBQU9qUSxPQUNwQixPQUFPc3pCLEdBQVF0ekIsRUFBU3d6QixFQUFRLElBQUlodUIsTUFBTWd1QixFQUFReHpCLEVBQVMsR0FBR3dULEtBQUs0ZixHQUFRbmpCLEVBQVNBLEVBQ3RGLENBRUEsU0FBUzR0QixHQUFReDVCLEdBQ2YsT0FBT0EsRUFBRTB2QixRQUFRNEosR0FBVyxPQUM5QixDQUVBLFNBQVNHLEdBQVN2dEIsR0FDaEIsT0FBTyxJQUFJaUgsT0FBTyxPQUFTakgsRUFBTTVGLElBQUlrekIsSUFBU3JxQixLQUFLLEtBQU8sSUFBSyxJQUNqRSxDQUVBLFNBQVN1cUIsR0FBYXh0QixHQUNwQixPQUFPLElBQUk3UCxJQUFJNlAsRUFBTTVGLEtBQUksQ0FBQ1osRUFBTTFKLElBQU0sQ0FBQzBKLEVBQUsyWCxjQUFlcmhCLEtBQzdELENBRUEsU0FBUzI5QixHQUF5Qjk5QixFQUFHK1AsRUFBUTVQLEdBQzNDLElBQUk0RCxFQUFJdzVCLEdBQVM5YixLQUFLMVIsRUFBTzVHLE1BQU1oSixFQUFHQSxFQUFJLElBQzFDLE9BQU80RCxHQUFLL0QsRUFBRXd5QixHQUFLenVCLEVBQUUsR0FBSTVELEVBQUk0RCxFQUFFLEdBQUdqRSxTQUFXLENBQy9DLENBRUEsU0FBU2krQixHQUF5Qi85QixFQUFHK1AsRUFBUTVQLEdBQzNDLElBQUk0RCxFQUFJdzVCLEdBQVM5YixLQUFLMVIsRUFBTzVHLE1BQU1oSixFQUFHQSxFQUFJLElBQzFDLE9BQU80RCxHQUFLL0QsRUFBRXUzQixHQUFLeHpCLEVBQUUsR0FBSTVELEVBQUk0RCxFQUFFLEdBQUdqRSxTQUFXLENBQy9DLENBRUEsU0FBU2srQixHQUFzQmgrQixFQUFHK1AsRUFBUTVQLEdBQ3hDLElBQUk0RCxFQUFJdzVCLEdBQVM5YixLQUFLMVIsRUFBTzVHLE1BQU1oSixFQUFHQSxFQUFJLElBQzFDLE9BQU80RCxHQUFLL0QsRUFBRWkrQixHQUFLbDZCLEVBQUUsR0FBSTVELEVBQUk0RCxFQUFFLEdBQUdqRSxTQUFXLENBQy9DLENBRUEsU0FBU28rQixHQUFtQmwrQixFQUFHK1AsRUFBUTVQLEdBQ3JDLElBQUk0RCxFQUFJdzVCLEdBQVM5YixLQUFLMVIsRUFBTzVHLE1BQU1oSixFQUFHQSxFQUFJLElBQzFDLE9BQU80RCxHQUFLL0QsRUFBRW0rQixHQUFLcDZCLEVBQUUsR0FBSTVELEVBQUk0RCxFQUFFLEdBQUdqRSxTQUFXLENBQy9DLENBRUEsU0FBU3MrQixHQUFzQnArQixFQUFHK1AsRUFBUTVQLEdBQ3hDLElBQUk0RCxFQUFJdzVCLEdBQVM5YixLQUFLMVIsRUFBTzVHLE1BQU1oSixFQUFHQSxFQUFJLElBQzFDLE9BQU80RCxHQUFLL0QsRUFBRXErQixHQUFLdDZCLEVBQUUsR0FBSTVELEVBQUk0RCxFQUFFLEdBQUdqRSxTQUFXLENBQy9DLENBRUEsU0FBU3crQixHQUFjdCtCLEVBQUcrUCxFQUFRNVAsR0FDaEMsSUFBSTRELEVBQUl3NUIsR0FBUzliLEtBQUsxUixFQUFPNUcsTUFBTWhKLEVBQUdBLEVBQUksSUFDMUMsT0FBTzRELEdBQUsvRCxFQUFFOEYsR0FBSy9CLEVBQUUsR0FBSTVELEVBQUk0RCxFQUFFLEdBQUdqRSxTQUFXLENBQy9DLENBRUEsU0FBU3krQixHQUFVditCLEVBQUcrUCxFQUFRNVAsR0FDNUIsSUFBSTRELEVBQUl3NUIsR0FBUzliLEtBQUsxUixFQUFPNUcsTUFBTWhKLEVBQUdBLEVBQUksSUFDMUMsT0FBTzRELEdBQUsvRCxFQUFFOEYsR0FBSy9CLEVBQUUsS0FBT0EsRUFBRSxHQUFLLEdBQUssS0FBTyxLQUFPNUQsRUFBSTRELEVBQUUsR0FBR2pFLFNBQVcsQ0FDNUUsQ0FFQSxTQUFTMCtCLEdBQVV4K0IsRUFBRytQLEVBQVE1UCxHQUM1QixJQUFJNEQsRUFBSSwrQkFBK0IwZCxLQUFLMVIsRUFBTzVHLE1BQU1oSixFQUFHQSxFQUFJLElBQ2hFLE9BQU80RCxHQUFLL0QsRUFBRXkrQixFQUFJMTZCLEVBQUUsR0FBSyxJQUFNQSxFQUFFLElBQU1BLEVBQUUsSUFBTSxPQUFRNUQsRUFBSTRELEVBQUUsR0FBR2pFLFNBQVcsQ0FDN0UsQ0FFQSxTQUFTNCtCLEdBQWExK0IsRUFBRytQLEVBQVE1UCxHQUMvQixJQUFJNEQsRUFBSXc1QixHQUFTOWIsS0FBSzFSLEVBQU81RyxNQUFNaEosRUFBR0EsRUFBSSxJQUMxQyxPQUFPNEQsR0FBSy9ELEVBQUVnbkIsRUFBVyxFQUFQampCLEVBQUUsR0FBUyxFQUFHNUQsRUFBSTRELEVBQUUsR0FBR2pFLFNBQVcsQ0FDdEQsQ0FFQSxTQUFTNitCLEdBQWlCMytCLEVBQUcrUCxFQUFRNVAsR0FDbkMsSUFBSTRELEVBQUl3NUIsR0FBUzliLEtBQUsxUixFQUFPNUcsTUFBTWhKLEVBQUdBLEVBQUksSUFDMUMsT0FBTzRELEdBQUsvRCxFQUFFZ0UsRUFBSUQsRUFBRSxHQUFLLEVBQUc1RCxFQUFJNEQsRUFBRSxHQUFHakUsU0FBVyxDQUNsRCxDQUVBLFNBQVM4K0IsR0FBZ0I1K0IsRUFBRytQLEVBQVE1UCxHQUNsQyxJQUFJNEQsRUFBSXc1QixHQUFTOWIsS0FBSzFSLEVBQU81RyxNQUFNaEosRUFBR0EsRUFBSSxJQUMxQyxPQUFPNEQsR0FBSy9ELEVBQUVBLEdBQUsrRCxFQUFFLEdBQUk1RCxFQUFJNEQsRUFBRSxHQUFHakUsU0FBVyxDQUMvQyxDQUVBLFNBQVMrK0IsR0FBZTcrQixFQUFHK1AsRUFBUTVQLEdBQ2pDLElBQUk0RCxFQUFJdzVCLEdBQVM5YixLQUFLMVIsRUFBTzVHLE1BQU1oSixFQUFHQSxFQUFJLElBQzFDLE9BQU80RCxHQUFLL0QsRUFBRWdFLEVBQUksRUFBR2hFLEVBQUVBLEdBQUsrRCxFQUFFLEdBQUk1RCxFQUFJNEQsRUFBRSxHQUFHakUsU0FBVyxDQUN4RCxDQUVBLFNBQVNnL0IsR0FBWTkrQixFQUFHK1AsRUFBUTVQLEdBQzlCLElBQUk0RCxFQUFJdzVCLEdBQVM5YixLQUFLMVIsRUFBTzVHLE1BQU1oSixFQUFHQSxFQUFJLElBQzFDLE9BQU80RCxHQUFLL0QsRUFBRTg4QixHQUFLLzRCLEVBQUUsR0FBSTVELEVBQUk0RCxFQUFFLEdBQUdqRSxTQUFXLENBQy9DLENBRUEsU0FBU2kvQixHQUFhLytCLEVBQUcrUCxFQUFRNVAsR0FDL0IsSUFBSTRELEVBQUl3NUIsR0FBUzliLEtBQUsxUixFQUFPNUcsTUFBTWhKLEVBQUdBLEVBQUksSUFDMUMsT0FBTzRELEdBQUsvRCxFQUFFKzhCLEdBQUtoNUIsRUFBRSxHQUFJNUQsRUFBSTRELEVBQUUsR0FBR2pFLFNBQVcsQ0FDL0MsQ0FFQSxTQUFTay9CLEdBQWFoL0IsRUFBRytQLEVBQVE1UCxHQUMvQixJQUFJNEQsRUFBSXc1QixHQUFTOWIsS0FBSzFSLEVBQU81RyxNQUFNaEosRUFBR0EsRUFBSSxJQUMxQyxPQUFPNEQsR0FBSy9ELEVBQUVnOUIsR0FBS2o1QixFQUFFLEdBQUk1RCxFQUFJNEQsRUFBRSxHQUFHakUsU0FBVyxDQUMvQyxDQUVBLFNBQVNtL0IsR0FBa0JqL0IsRUFBRytQLEVBQVE1UCxHQUNwQyxJQUFJNEQsRUFBSXc1QixHQUFTOWIsS0FBSzFSLEVBQU81RyxNQUFNaEosRUFBR0EsRUFBSSxJQUMxQyxPQUFPNEQsR0FBSy9ELEVBQUVpOUIsR0FBS2w1QixFQUFFLEdBQUk1RCxFQUFJNEQsRUFBRSxHQUFHakUsU0FBVyxDQUMvQyxDQUVBLFNBQVNvL0IsR0FBa0JsL0IsRUFBRytQLEVBQVE1UCxHQUNwQyxJQUFJNEQsRUFBSXc1QixHQUFTOWIsS0FBSzFSLEVBQU81RyxNQUFNaEosRUFBR0EsRUFBSSxJQUMxQyxPQUFPNEQsR0FBSy9ELEVBQUVpOUIsRUFBSXA3QixLQUFLVSxNQUFNd0IsRUFBRSxHQUFLLEtBQU81RCxFQUFJNEQsRUFBRSxHQUFHakUsU0FBVyxDQUNqRSxDQUVBLFNBQVNxL0IsR0FBb0JuL0IsRUFBRytQLEVBQVE1UCxHQUN0QyxJQUFJNEQsRUFBSXk1QixHQUFVL2IsS0FBSzFSLEVBQU81RyxNQUFNaEosRUFBR0EsRUFBSSxJQUMzQyxPQUFPNEQsRUFBSTVELEVBQUk0RCxFQUFFLEdBQUdqRSxRQUFVLENBQ2hDLENBRUEsU0FBU3MvQixHQUFtQnAvQixFQUFHK1AsRUFBUTVQLEdBQ3JDLElBQUk0RCxFQUFJdzVCLEdBQVM5YixLQUFLMVIsRUFBTzVHLE1BQU1oSixJQUNuQyxPQUFPNEQsR0FBSy9ELEVBQUVxL0IsR0FBS3Q3QixFQUFFLEdBQUk1RCxFQUFJNEQsRUFBRSxHQUFHakUsU0FBVyxDQUMvQyxDQUVBLFNBQVN3L0IsR0FBMEJ0L0IsRUFBRytQLEVBQVE1UCxHQUM1QyxJQUFJNEQsRUFBSXc1QixHQUFTOWIsS0FBSzFSLEVBQU81RyxNQUFNaEosSUFDbkMsT0FBTzRELEdBQUsvRCxFQUFFbUUsR0FBS0osRUFBRSxHQUFJNUQsRUFBSTRELEVBQUUsR0FBR2pFLFNBQVcsQ0FDL0MsQ0FFQSxTQUFTeS9CLEdBQWlCdi9CLEVBQUcwRSxHQUMzQixPQUFPZzVCLEdBQUkxOUIsRUFBRTY1QixVQUFXbjFCLEVBQUcsRUFDN0IsQ0FFQSxTQUFTODZCLEdBQWF4L0IsRUFBRzBFLEdBQ3ZCLE9BQU9nNUIsR0FBSTE5QixFQUFFczVCLFdBQVk1MEIsRUFBRyxFQUM5QixDQUVBLFNBQVMrNkIsR0FBYXovQixFQUFHMEUsR0FDdkIsT0FBT2c1QixHQUFJMTlCLEVBQUVzNUIsV0FBYSxJQUFNLEdBQUk1MEIsRUFBRyxFQUN6QyxDQUVBLFNBQVNnN0IsR0FBZ0IxL0IsRUFBRzBFLEdBQzFCLE9BQU9nNUIsR0FBSSxFQUFJaEUsR0FBUXQzQixNQUFNMDVCLEdBQVM5N0IsR0FBSUEsR0FBSTBFLEVBQUcsRUFDbkQsQ0FFQSxTQUFTaTdCLEdBQW1CMy9CLEVBQUcwRSxHQUM3QixPQUFPZzVCLEdBQUkxOUIsRUFBRTY0QixrQkFBbUJuMEIsRUFBRyxFQUNyQyxDQUVBLFNBQVNrN0IsR0FBbUI1L0IsRUFBRzBFLEdBQzdCLE9BQU9pN0IsR0FBbUIzL0IsRUFBRzBFLEdBQUssS0FDcEMsQ0FFQSxTQUFTbTdCLEdBQWtCNy9CLEVBQUcwRSxHQUM1QixPQUFPZzVCLEdBQUkxOUIsRUFBRXc3QixXQUFhLEVBQUc5MkIsRUFBRyxFQUNsQyxDQUVBLFNBQVNvN0IsR0FBYzkvQixFQUFHMEUsR0FDeEIsT0FBT2c1QixHQUFJMTlCLEVBQUVpNUIsYUFBY3YwQixFQUFHLEVBQ2hDLENBRUEsU0FBU3E3QixHQUFjLy9CLEVBQUcwRSxHQUN4QixPQUFPZzVCLEdBQUkxOUIsRUFBRWc1QixhQUFjdDBCLEVBQUcsRUFDaEMsQ0FFQSxTQUFTczdCLEdBQTBCaGdDLEdBQ2pDLElBQUl1OEIsRUFBTXY4QixFQUFFcTZCLFNBQ1osT0FBZSxJQUFSa0MsRUFBWSxFQUFJQSxDQUN6QixDQUVBLFNBQVMwRCxHQUF1QmpnQyxFQUFHMEUsR0FDakMsT0FBT2c1QixHQUFJcEQsR0FBV2w0QixNQUFNMDVCLEdBQVM5N0IsR0FBSyxFQUFHQSxHQUFJMEUsRUFBRyxFQUN0RCxDQUVBLFNBQVN3N0IsR0FBS2xnQyxHQUNaLElBQUl1OEIsRUFBTXY4QixFQUFFcTZCLFNBQ1osT0FBUWtDLEdBQU8sR0FBYSxJQUFSQSxFQUFhN0IsR0FBYTE2QixHQUFLMDZCLEdBQWFyMUIsS0FBS3JGLEVBQ3ZFLENBRUEsU0FBU21nQyxHQUFvQm5nQyxFQUFHMEUsR0FFOUIsT0FEQTFFLEVBQUlrZ0MsR0FBS2xnQyxHQUNGMDlCLEdBQUloRCxHQUFhdDRCLE1BQU0wNUIsR0FBUzk3QixHQUFJQSxJQUErQixJQUF6Qjg3QixHQUFTOTdCLEdBQUdxNkIsVUFBaUIzMUIsRUFBRyxFQUNuRixDQUVBLFNBQVMwN0IsR0FBMEJwZ0MsR0FDakMsT0FBT0EsRUFBRXE2QixRQUNYLENBRUEsU0FBU2dHLEdBQXVCcmdDLEVBQUcwRSxHQUNqQyxPQUFPZzVCLEdBQUluRCxHQUFXbjRCLE1BQU0wNUIsR0FBUzk3QixHQUFLLEVBQUdBLEdBQUkwRSxFQUFHLEVBQ3RELENBRUEsU0FBUzQ3QixHQUFXdGdDLEVBQUcwRSxHQUNyQixPQUFPZzVCLEdBQUkxOUIsRUFBRXk3QixjQUFnQixJQUFLLzJCLEVBQUcsRUFDdkMsQ0FFQSxTQUFTNjdCLEdBQWN2Z0MsRUFBRzBFLEdBRXhCLE9BQU9nNUIsSUFEUDE5QixFQUFJa2dDLEdBQUtsZ0MsSUFDSXk3QixjQUFnQixJQUFLLzJCLEVBQUcsRUFDdkMsQ0FFQSxTQUFTODdCLEdBQWV4Z0MsRUFBRzBFLEdBQ3pCLE9BQU9nNUIsR0FBSTE5QixFQUFFeTdCLGNBQWdCLElBQU8vMkIsRUFBRyxFQUN6QyxDQUVBLFNBQVMrN0IsR0FBa0J6Z0MsRUFBRzBFLEdBQzVCLElBQUk2M0IsRUFBTXY4QixFQUFFcTZCLFNBRVosT0FBT3FELElBRFAxOUIsRUFBS3U4QixHQUFPLEdBQWEsSUFBUkEsRUFBYTdCLEdBQWExNkIsR0FBSzA2QixHQUFhcjFCLEtBQUtyRixJQUNyRHk3QixjQUFnQixJQUFPLzJCLEVBQUcsRUFDekMsQ0FFQSxTQUFTZzhCLEdBQVcxZ0MsR0FDbEIsSUFBSWlFLEVBQUlqRSxFQUFFODVCLG9CQUNWLE9BQVE3MUIsRUFBSSxFQUFJLEtBQU9BLElBQU0sRUFBRyxNQUMxQnk1QixHQUFJejVCLEVBQUksR0FBSyxFQUFHLElBQUssR0FDckJ5NUIsR0FBSXo1QixFQUFJLEdBQUksSUFBSyxFQUN6QixDQUVBLFNBQVMwOEIsR0FBb0IzZ0MsRUFBRzBFLEdBQzlCLE9BQU9nNUIsR0FBSTE5QixFQUFFazZCLGFBQWN4MUIsRUFBRyxFQUNoQyxDQUVBLFNBQVNrOEIsR0FBZ0I1Z0MsRUFBRzBFLEdBQzFCLE9BQU9nNUIsR0FBSTE5QixFQUFFeTVCLGNBQWUvMEIsRUFBRyxFQUNqQyxDQUVBLFNBQVNtOEIsR0FBZ0I3Z0MsRUFBRzBFLEdBQzFCLE9BQU9nNUIsR0FBSTE5QixFQUFFeTVCLGNBQWdCLElBQU0sR0FBSS8wQixFQUFHLEVBQzVDLENBRUEsU0FBU284QixHQUFtQjlnQyxFQUFHMEUsR0FDN0IsT0FBT2c1QixHQUFJLEVBQUkzRCxHQUFPMzNCLE1BQU00NUIsR0FBUWg4QixHQUFJQSxHQUFJMEUsRUFBRyxFQUNqRCxDQUVBLFNBQVNxOEIsR0FBc0IvZ0MsRUFBRzBFLEdBQ2hDLE9BQU9nNUIsR0FBSTE5QixFQUFFZ2hDLHFCQUFzQnQ4QixFQUFHLEVBQ3hDLENBRUEsU0FBU3U4QixHQUFzQmpoQyxFQUFHMEUsR0FDaEMsT0FBT3E4QixHQUFzQi9nQyxFQUFHMEUsR0FBSyxLQUN2QyxDQUVBLFNBQVN3OEIsR0FBcUJsaEMsRUFBRzBFLEdBQy9CLE9BQU9nNUIsR0FBSTE5QixFQUFFNDdCLGNBQWdCLEVBQUdsM0IsRUFBRyxFQUNyQyxDQUVBLFNBQVN5OEIsR0FBaUJuaEMsRUFBRzBFLEdBQzNCLE9BQU9nNUIsR0FBSTE5QixFQUFFbzVCLGdCQUFpQjEwQixFQUFHLEVBQ25DLENBRUEsU0FBUzA4QixHQUFpQnBoQyxFQUFHMEUsR0FDM0IsT0FBT2c1QixHQUFJMTlCLEVBQUU4NEIsZ0JBQWlCcDBCLEVBQUcsRUFDbkMsQ0FFQSxTQUFTMjhCLEdBQTZCcmhDLEdBQ3BDLElBQUlzaEMsRUFBTXRoQyxFQUFFODZCLFlBQ1osT0FBZSxJQUFSd0csRUFBWSxFQUFJQSxDQUN6QixDQUVBLFNBQVNDLEdBQTBCdmhDLEVBQUcwRSxHQUNwQyxPQUFPZzVCLEdBQUkzQyxHQUFVMzRCLE1BQU00NUIsR0FBUWg4QixHQUFLLEVBQUdBLEdBQUkwRSxFQUFHLEVBQ3BELENBRUEsU0FBUzg4QixHQUFReGhDLEdBQ2YsSUFBSXU4QixFQUFNdjhCLEVBQUU4NkIsWUFDWixPQUFReUIsR0FBTyxHQUFhLElBQVJBLEVBQWFwQixHQUFZbjdCLEdBQUttN0IsR0FBWTkxQixLQUFLckYsRUFDckUsQ0FFQSxTQUFTeWhDLEdBQXVCemhDLEVBQUcwRSxHQUVqQyxPQURBMUUsRUFBSXdoQyxHQUFReGhDLEdBQ0wwOUIsR0FBSXZDLEdBQVkvNEIsTUFBTTQ1QixHQUFRaDhCLEdBQUlBLElBQWlDLElBQTNCZzhCLEdBQVFoOEIsR0FBRzg2QixhQUFvQnAyQixFQUFHLEVBQ25GLENBRUEsU0FBU2c5QixHQUE2QjFoQyxHQUNwQyxPQUFPQSxFQUFFODZCLFdBQ1gsQ0FFQSxTQUFTNkcsR0FBMEIzaEMsRUFBRzBFLEdBQ3BDLE9BQU9nNUIsR0FBSTFDLEdBQVU1NEIsTUFBTTQ1QixHQUFRaDhCLEdBQUssRUFBR0EsR0FBSTBFLEVBQUcsRUFDcEQsQ0FFQSxTQUFTazlCLEdBQWM1aEMsRUFBRzBFLEdBQ3hCLE9BQU9nNUIsR0FBSTE5QixFQUFFNjdCLGlCQUFtQixJQUFLbjNCLEVBQUcsRUFDMUMsQ0FFQSxTQUFTbTlCLEdBQWlCN2hDLEVBQUcwRSxHQUUzQixPQUFPZzVCLElBRFAxOUIsRUFBSXdoQyxHQUFReGhDLElBQ0M2N0IsaUJBQW1CLElBQUtuM0IsRUFBRyxFQUMxQyxDQUVBLFNBQVNvOUIsR0FBa0I5aEMsRUFBRzBFLEdBQzVCLE9BQU9nNUIsR0FBSTE5QixFQUFFNjdCLGlCQUFtQixJQUFPbjNCLEVBQUcsRUFDNUMsQ0FFQSxTQUFTcTlCLEdBQXFCL2hDLEVBQUcwRSxHQUMvQixJQUFJNjNCLEVBQU12OEIsRUFBRTg2QixZQUVaLE9BQU80QyxJQURQMTlCLEVBQUt1OEIsR0FBTyxHQUFhLElBQVJBLEVBQWFwQixHQUFZbjdCLEdBQUttN0IsR0FBWTkxQixLQUFLckYsSUFDbkQ2N0IsaUJBQW1CLElBQU9uM0IsRUFBRyxFQUM1QyxDQUVBLFNBQVNzOUIsS0FDUCxNQUFPLE9BQ1QsQ0FFQSxTQUFTQyxLQUNQLE1BQU8sR0FDVCxDQUVBLFNBQVNDLEdBQW9CbGlDLEdBQzNCLE9BQVFBLENBQ1YsQ0FFQSxTQUFTbWlDLEdBQTJCbmlDLEdBQ2xDLE9BQU82QixLQUFLVSxPQUFPdkMsRUFBSSxJQUN6QixDRWxyQkEsU0FBU21uQixHQUFLN2lCLEdBQ1osT0FBTyxJQUFJNmhCLEtBQUs3aEIsRUFDbEIsQ0FFQSxTQUFTeUIsR0FBT3pCLEdBQ2QsT0FBT0EsYUFBYTZoQixNQUFRN2hCLEdBQUssSUFBSTZoQixNQUFNN2hCLEVBQzdDLENBRU8sU0FBUzg5QixHQUFTbjdCLEVBQU8wMUIsRUFBY1AsRUFBTUMsRUFBT0MsRUFBTUMsRUFBS0MsRUFBTUMsRUFBUTdELEVBQVF6eEIsR0FDMUYsSUFBSW5CLEVBQVF3eEIsS0FDUkgsRUFBU3J4QixFQUFNcXhCLE9BQ2Zud0IsRUFBU2xCLEVBQU1rQixPQUVmbTdCLEVBQW9CbDdCLEVBQU8sT0FDM0JtN0IsRUFBZW43QixFQUFPLE9BQ3RCbzdCLEVBQWVwN0IsRUFBTyxTQUN0QnE3QixFQUFhcjdCLEVBQU8sU0FDcEJzN0IsRUFBWXQ3QixFQUFPLFNBQ25CdTdCLEVBQWF2N0IsRUFBTyxTQUNwQnc3QixFQUFjeDdCLEVBQU8sTUFDckJtNUIsRUFBYW41QixFQUFPLE1BRXhCLFNBQVNWLEVBQVcwZ0IsR0FDbEIsT0FBUXlSLEVBQU96UixHQUFRQSxFQUFPa2IsRUFDeEI1RixFQUFPdFYsR0FBUUEsRUFBT21iLEVBQ3RCOUYsRUFBS3JWLEdBQVFBLEVBQU9vYixFQUNwQmhHLEVBQUlwVixHQUFRQSxFQUFPcWIsRUFDbkJuRyxFQUFNbFYsR0FBUUEsRUFBUW1WLEVBQUtuVixHQUFRQSxFQUFPc2IsRUFBWUMsRUFDdER0RyxFQUFLalYsR0FBUUEsRUFBT3diLEVBQ3BCckMsR0FBWW5aLEVBQ25CLENBNkJELE9BM0JBbmhCLEVBQU1xeEIsT0FBUyxTQUFTdnhCLEdBQ3RCLE9BQU8sSUFBSXFnQixLQUFLa1IsRUFBT3Z4QixHQUMzQixFQUVFRSxFQUFNa0IsT0FBUyxTQUFTZ0MsR0FDdEIsT0FBTzlELFVBQVV0RixPQUFTb0gsRUFBTzVCLE1BQU1WLEtBQUtzRSxFQUFHbkQsS0FBV21CLElBQVN1RCxJQUFJMGMsR0FDM0UsRUFFRW5oQixFQUFNaUIsTUFBUSxTQUFTdWlCLEdBQ3JCLElBQUl4cEIsRUFBSWtILElBQ1IsT0FBT0QsRUFBTWpILEVBQUUsR0FBSUEsRUFBRUEsRUFBRUYsT0FBUyxHQUFnQixNQUFaMHBCLEVBQW1CLEdBQUtBLEVBQ2hFLEVBRUV4akIsRUFBTVMsV0FBYSxTQUFTckUsRUFBTzR3QixHQUNqQyxPQUFvQixNQUFiQSxFQUFvQnZzQixFQUFhVSxFQUFPNnJCLEVBQ25ELEVBRUVodEIsRUFBTTZ4QixLQUFPLFNBQVNyTyxHQUNwQixJQUFJeHBCLEVBQUlrSCxJQUVSLE9BREtzaUIsR0FBc0MsbUJBQW5CQSxFQUFTcmtCLFFBQXNCcWtCLEVBQVdtVCxFQUFhMzhCLEVBQUUsR0FBSUEsRUFBRUEsRUFBRUYsT0FBUyxHQUFnQixNQUFaMHBCLEVBQW1CLEdBQUtBLElBQ3ZIQSxFQUFXdGlCLEVDMURQLFNBQWNBLEVBQVFzaUIsR0FHbkMsSUFJSWxsQixFQUpBUyxFQUFLLEVBQ0xuQyxHQUhKc0UsRUFBU0EsRUFBT2lDLFNBR0FySixPQUFTLEVBQ3JCZ3hCLEVBQUs1cEIsRUFBT25DLEdBQ1p5ckIsRUFBS3RwQixFQUFPdEUsR0FVaEIsT0FQSTR0QixFQUFLTSxJQUNQeHNCLEVBQUlTLEVBQUlBLEVBQUtuQyxFQUFJQSxFQUFLMEIsRUFDdEJBLEVBQUl3c0IsRUFBSUEsRUFBS04sRUFBSUEsRUFBS2xzQixHQUd4QjRDLEVBQU9uQyxHQUFNeWtCLEVBQVNqbkIsTUFBTXV1QixHQUM1QjVwQixFQUFPdEUsR0FBTTRtQixFQUFTbmtCLEtBQUttckIsR0FDcEJ0cEIsQ0FDVCxDRHlDNkIyd0IsQ0FBSzczQixFQUFHd3BCLElBQWF4akIsQ0FDbEQsRUFFRUEsRUFBTXlCLEtBQU8sV0FDWCxPQUFPQSxHQUFLekIsRUFBT284QixHQUFTbjdCLEVBQU8wMUIsRUFBY1AsRUFBTUMsRUFBT0MsRUFBTUMsRUFBS0MsRUFBTUMsRUFBUTdELEVBQVF6eEIsR0FDbkcsRUFFU25CLENBQ1QsQ0FFZSxTQUFTeWtCLEtBQ3RCLE9BQU9zTCxHQUFVaDNCLE1BQU1xakMsR0FBU2xHLEdBQVdDLEdBQWtCTCxHQUFVUixHQUFXc0gsR0FBVWxKLEdBQVNMLEdBQVVOLEdBQVk4SixHQUFZeEYsSUFBWW4yQixPQUFPLENBQUMsSUFBSWlmLEtBQUssSUFBTSxFQUFHLEdBQUksSUFBSUEsS0FBSyxJQUFNLEVBQUcsS0FBTS9nQixVQUMzTSxFRG5EZSxTQUF1QjhPLEdBQ3BDZ2dCLEdEZWEsU0FBc0JBLEdBQ25DLElBQUk0TyxFQUFrQjVPLEVBQU82TyxTQUN6QkMsRUFBYzlPLEVBQU8vTSxLQUNyQjhiLEVBQWMvTyxFQUFPekosS0FDckJ5WSxFQUFpQmhQLEVBQU9pUCxRQUN4QkMsRUFBa0JsUCxFQUFPbVAsS0FDekJDLEVBQXVCcFAsRUFBT3FQLFVBQzlCQyxFQUFnQnRQLEVBQU91UCxPQUN2QkMsRUFBcUJ4UCxFQUFPeVAsWUFFNUJDLEVBQVdoRyxHQUFTc0YsR0FDcEJXLEVBQWVoRyxHQUFhcUYsR0FDNUJZLEVBQVlsRyxHQUFTd0YsR0FDckJXLEVBQWdCbEcsR0FBYXVGLEdBQzdCWSxFQUFpQnBHLEdBQVMwRixHQUMxQlcsRUFBcUJwRyxHQUFheUYsR0FDbENZLEVBQVV0RyxHQUFTNEYsR0FDbkJXLEVBQWN0RyxHQUFhMkYsR0FDM0JZLEVBQWV4RyxHQUFTOEYsR0FDeEJXLEVBQW1CeEcsR0FBYTZGLEdBRWhDWSxFQUFVLENBQ1pybEMsRUFrUUYsU0FBNEJlLEdBQzFCLE9BQU9zakMsRUFBcUJ0akMsRUFBRXE2QixTQUMvQixFQW5RQ2tLLEVBcVFGLFNBQXVCdmtDLEdBQ3JCLE9BQU9vakMsRUFBZ0JwakMsRUFBRXE2QixTQUMxQixFQXRRQ243QixFQXdRRixTQUEwQmMsR0FDeEIsT0FBTzBqQyxFQUFtQjFqQyxFQUFFdzdCLFdBQzdCLEVBelFDZ0osRUEyUUYsU0FBcUJ4a0MsR0FDbkIsT0FBT3dqQyxFQUFjeGpDLEVBQUV3N0IsV0FDeEIsRUE1UUMxeEIsRUFBSyxLQUNMOUosRUFBS3UvQixHQUNMN2dDLEVBQUs2Z0MsR0FDTGpnQyxFQUFLc2dDLEdBQ0w1ZCxFQUFLdWUsR0FDTGtFLEVBQUtoRSxHQUNMM0QsRUFBSzBDLEdBQ0xrRixFQUFLakYsR0FDTGw3QixFQUFLbTdCLEdBQ0x6QyxFQUFLMEMsR0FDTDM3QixFQUFLNjdCLEdBQ0w5QyxFQUFLK0MsR0FDTHA3QixFQWtRRixTQUFzQjFFLEdBQ3BCLE9BQU9rakMsSUFBaUJsakMsRUFBRXM1QixZQUFjLElBQ3pDLEVBblFDdFMsRUFxUUYsU0FBdUJobkIsR0FDckIsT0FBTyxLQUFPQSxFQUFFdzdCLFdBQWEsRUFDOUIsRUF0UUM2RCxFQUFLNkMsR0FDTC85QixFQUFLZytCLEdBQ0xuRixFQUFLK0MsR0FDTHhJLEVBQUt5SSxHQUNML0IsRUFBS2dDLEdBQ0w5QixFQUFLZ0MsR0FDTDNOLEVBQUs0TixHQUNML0IsRUFBS2dDLEdBQ0wxZ0MsRUFBSyxLQUNMbzBCLEVBQUssS0FDTGp1QixFQUFLdzZCLEdBQ0xxRSxFQUFLbkUsR0FDTC9CLEVBQUtpQyxHQUNMLElBQUt1QixJQUdIMkMsRUFBYSxDQUNmM2xDLEVBdVBGLFNBQStCZSxHQUM3QixPQUFPc2pDLEVBQXFCdGpDLEVBQUU4NkIsWUFDL0IsRUF4UEN5SixFQTBQRixTQUEwQnZrQyxHQUN4QixPQUFPb2pDLEVBQWdCcGpDLEVBQUU4NkIsWUFDMUIsRUEzUEM1N0IsRUE2UEYsU0FBNkJjLEdBQzNCLE9BQU8wakMsRUFBbUIxakMsRUFBRTQ3QixjQUM3QixFQTlQQzRJLEVBZ1FGLFNBQXdCeGtDLEdBQ3RCLE9BQU93akMsRUFBY3hqQyxFQUFFNDdCLGNBQ3hCLEVBalFDOXhCLEVBQUssS0FDTDlKLEVBQUsyZ0MsR0FDTGppQyxFQUFLaWlDLEdBQ0xyaEMsRUFBSzJoQyxHQUNMamYsRUFBSzZmLEdBQ0w0QyxFQUFLMUMsR0FDTGpGLEVBQUs4RCxHQUNMOEQsRUFBSzdELEdBQ0x0OEIsRUFBS3U4QixHQUNMN0QsRUFBSzhELEdBQ0wvOEIsRUFBS2s5QixHQUNMbkUsRUFBS29FLEdBQ0x6OEIsRUF1UEYsU0FBeUIxRSxHQUN2QixPQUFPa2pDLElBQWlCbGpDLEVBQUV5NUIsZUFBaUIsSUFDNUMsRUF4UEN6UyxFQTBQRixTQUEwQmhuQixHQUN4QixPQUFPLEtBQU9BLEVBQUU0N0IsY0FBZ0IsRUFDakMsRUEzUEN5RCxFQUFLNkMsR0FDTC85QixFQUFLZytCLEdBQ0xuRixFQUFLb0UsR0FDTDdKLEVBQUs4SixHQUNMcEQsRUFBS3NELEdBQ0xwRCxFQUFLc0QsR0FDTGpQLEVBQUtrUCxHQUNMckQsRUFBS3NELEdBQ0xoaUMsRUFBSyxLQUNMbzBCLEVBQUssS0FDTGp1QixFQUFLODdCLEdBQ0wrQyxFQUFLN0MsR0FDTHJELEVBQUt1RCxHQUNMLElBQUtDLElBR0g0QyxFQUFTLENBQ1g1bEMsRUE0SkYsU0FBMkJlLEVBQUcrUCxFQUFRNVAsR0FDcEMsSUFBSTRELEVBQUlpZ0MsRUFBZXZpQixLQUFLMVIsRUFBTzVHLE1BQU1oSixJQUN6QyxPQUFPNEQsR0FBSy9ELEVBQUV3eUIsRUFBSXlSLEVBQW1CN2lDLElBQUkyQyxFQUFFLEdBQUd5ZCxlQUFnQnJoQixFQUFJNEQsRUFBRSxHQUFHakUsU0FBVyxDQUNuRixFQTlKQ3lrQyxFQWdLRixTQUFzQnZrQyxFQUFHK1AsRUFBUTVQLEdBQy9CLElBQUk0RCxFQUFJKy9CLEVBQVVyaUIsS0FBSzFSLEVBQU81RyxNQUFNaEosSUFDcEMsT0FBTzRELEdBQUsvRCxFQUFFd3lCLEVBQUl1UixFQUFjM2lDLElBQUkyQyxFQUFFLEdBQUd5ZCxlQUFnQnJoQixFQUFJNEQsRUFBRSxHQUFHakUsU0FBVyxDQUM5RSxFQWxLQ1osRUFvS0YsU0FBeUJjLEVBQUcrUCxFQUFRNVAsR0FDbEMsSUFBSTRELEVBQUlxZ0MsRUFBYTNpQixLQUFLMVIsRUFBTzVHLE1BQU1oSixJQUN2QyxPQUFPNEQsR0FBSy9ELEVBQUVnRSxFQUFJcWdDLEVBQWlCampDLElBQUkyQyxFQUFFLEdBQUd5ZCxlQUFnQnJoQixFQUFJNEQsRUFBRSxHQUFHakUsU0FBVyxDQUNqRixFQXRLQzBrQyxFQXdLRixTQUFvQnhrQyxFQUFHK1AsRUFBUTVQLEdBQzdCLElBQUk0RCxFQUFJbWdDLEVBQVF6aUIsS0FBSzFSLEVBQU81RyxNQUFNaEosSUFDbEMsT0FBTzRELEdBQUsvRCxFQUFFZ0UsRUFBSW1nQyxFQUFZL2lDLElBQUkyQyxFQUFFLEdBQUd5ZCxlQUFnQnJoQixFQUFJNEQsRUFBRSxHQUFHakUsU0FBVyxDQUM1RSxFQTFLQ2dLLEVBNEtGLFNBQTZCOUosRUFBRytQLEVBQVE1UCxHQUN0QyxPQUFPMmtDLEVBQWU5a0MsRUFBRzhpQyxFQUFpQi95QixFQUFRNVAsRUFDbkQsRUE3S0NILEVBQUs0K0IsR0FDTGxnQyxFQUFLa2dDLEdBQ0x0L0IsRUFBSzQvQixHQUNMbGQsRUFBS3VjLEdBQ0xrRyxFQUFLbkcsR0FDTHhCLEVBQUtnQyxHQUNMNEYsRUFBSzVGLEdBQ0x2NkIsRUFBS3M2QixHQUNMNUIsRUFBS2dDLEdBQ0xqN0IsRUFBSzI2QixHQUNMNUIsRUFBS2dDLEdBQ0xyNkIsRUF1SUYsU0FBcUIxRSxFQUFHK1AsRUFBUTVQLEdBQzlCLElBQUk0RCxFQUFJNi9CLEVBQVNuaUIsS0FBSzFSLEVBQU81RyxNQUFNaEosSUFDbkMsT0FBTzRELEdBQUsvRCxFQUFFMEUsRUFBSW0vQixFQUFhemlDLElBQUkyQyxFQUFFLEdBQUd5ZCxlQUFnQnJoQixFQUFJNEQsRUFBRSxHQUFHakUsU0FBVyxDQUM3RSxFQXpJQ2tuQixFQUFLMFgsR0FDTFcsRUFBS0QsR0FDTGo3QixFQUFLbTdCLEdBQ0x0QyxFQUFLZ0MsR0FDTHpILEVBQUt3RyxHQUNMRSxFQUFLRCxHQUNMRyxFQUFLRCxHQUNMMUwsRUFBS3NMLEdBQ0xPLEVBQUtELEdBQ0x6K0IsRUEwSkYsU0FBeUJLLEVBQUcrUCxFQUFRNVAsR0FDbEMsT0FBTzJrQyxFQUFlOWtDLEVBQUdnakMsRUFBYWp6QixFQUFRNVAsRUFDL0MsRUEzSkM0ekIsRUE2SkYsU0FBeUIvekIsRUFBRytQLEVBQVE1UCxHQUNsQyxPQUFPMmtDLEVBQWU5a0MsRUFBR2lqQyxFQUFhbHpCLEVBQVE1UCxFQUMvQyxFQTlKQzJGLEVBQUt5NEIsR0FDTG9HLEVBQUtyRyxHQUNMRyxFQUFLRCxHQUNMLElBQUtXLElBV1AsU0FBUy9KLEVBQVVwQyxFQUFXc1IsR0FDNUIsT0FBTyxTQUFTbmQsR0FDZCxJQUlJcmQsRUFDQTR6QixFQUNBdjJCLEVBTkE0SSxFQUFTLEdBQ1Q1UCxHQUFLLEVBQ0xvRSxFQUFJLEVBQ0pSLEVBQUlpdkIsRUFBVWx6QixPQU9sQixJQUZNcW5CLGFBQWdCaEIsT0FBT2dCLEVBQU8sSUFBSWhCLE1BQU1nQixNQUVyQ2huQixFQUFJNEQsR0FDcUIsS0FBNUJpdkIsRUFBVTZDLFdBQVcxMUIsS0FDdkI0UCxFQUFPOUYsS0FBSytvQixFQUFVN3BCLE1BQU01RSxFQUFHcEUsSUFDZ0IsT0FBMUN1OUIsRUFBTUosR0FBS3h6QixFQUFJa3BCLEVBQVUrUixTQUFTNWtDLEtBQWMySixFQUFJa3BCLEVBQVUrUixTQUFTNWtDLEdBQ3ZFdTlCLEVBQVksTUFBTjV6QixFQUFZLElBQU0sS0FDekIzQyxFQUFTbTlCLEVBQVF4NkIsTUFBSUEsRUFBSTNDLEVBQU9nZ0IsRUFBTXVXLElBQzFDM3RCLEVBQU85RixLQUFLSCxHQUNadkYsRUFBSXBFLEVBQUksR0FLWixPQURBNFAsRUFBTzlGLEtBQUsrb0IsRUFBVTdwQixNQUFNNUUsRUFBR3BFLElBQ3hCNFAsRUFBT3VELEtBQUssR0FDekIsQ0FDRyxDQUVELFNBQVMweEIsRUFBU2hTLEVBQVd5TCxHQUMzQixPQUFPLFNBQVMxdUIsR0FDZCxJQUVJdXNCLEVBQU1DLEVBRk52OEIsRUFBSW85QixHQUFRLFVBQU0vNUIsRUFBVyxHQUdqQyxHQUZReWhDLEVBQWU5a0MsRUFBR2d6QixFQUFXampCLEdBQVUsR0FBSSxJQUUxQ0EsRUFBT2pRLE9BQVEsT0FBTyxLQUcvQixHQUFJLE1BQU9FLEVBQUcsT0FBTyxJQUFJbW1CLEtBQUtubUIsRUFBRXEvQixHQUNoQyxHQUFJLE1BQU9yL0IsRUFBRyxPQUFPLElBQUltbUIsS0FBVyxJQUFObm1CLEVBQUVtRSxHQUFZLE1BQU9uRSxFQUFJQSxFQUFFaTlCLEVBQUksSUFZN0QsR0FUSXdCLEtBQU8sTUFBT3orQixLQUFJQSxFQUFFeStCLEVBQUksR0FHeEIsTUFBT3orQixJQUFHQSxFQUFFODhCLEVBQUk5OEIsRUFBRTg4QixFQUFJLEdBQVcsR0FBTjk4QixFQUFFMEUsUUFHckJyQixJQUFSckQsRUFBRWdFLElBQWlCaEUsRUFBRWdFLEVBQUksTUFBT2hFLEVBQUlBLEVBQUVnbkIsRUFBSSxHQUcxQyxNQUFPaG5CLEVBQUcsQ0FDWixHQUFJQSxFQUFFbStCLEVBQUksR0FBS24rQixFQUFFbStCLEVBQUksR0FBSSxPQUFPLEtBQzFCLE1BQU9uK0IsSUFBSUEsRUFBRXd5QixFQUFJLEdBQ25CLE1BQU94eUIsR0FDMkJ1OEIsR0FBcENELEVBQU9ZLEdBQVFFLEdBQVFwOUIsRUFBRThGLEVBQUcsRUFBRyxLQUFnQmcxQixZQUMvQ3dCLEVBQU9DLEVBQU0sR0FBYSxJQUFSQSxFQUFZdkIsR0FBVTMxQixLQUFLaTNCLEdBQVF0QixHQUFVc0IsR0FDL0RBLEVBQU92QyxHQUFPOXpCLE9BQU9xMkIsRUFBa0IsR0FBWHQ4QixFQUFFbStCLEVBQUksSUFDbENuK0IsRUFBRThGLEVBQUl3MkIsRUFBS1QsaUJBQ1g3N0IsRUFBRWdFLEVBQUlzNEIsRUFBS1YsY0FDWDU3QixFQUFFQSxFQUFJczhCLEVBQUtwQyxjQUFnQmw2QixFQUFFd3lCLEVBQUksR0FBSyxJQUVBK0osR0FBdENELEVBQU9PLEdBQVVPLEdBQVFwOUIsRUFBRThGLEVBQUcsRUFBRyxLQUFnQnUwQixTQUNqRGlDLEVBQU9DLEVBQU0sR0FBYSxJQUFSQSxFQUFZaEMsR0FBV2wxQixLQUFLaTNCLEdBQVEvQixHQUFXK0IsR0FDakVBLEVBQU81QyxHQUFRenpCLE9BQU9xMkIsRUFBa0IsR0FBWHQ4QixFQUFFbStCLEVBQUksSUFDbkNuK0IsRUFBRThGLEVBQUl3MkIsRUFBS2IsY0FDWHo3QixFQUFFZ0UsRUFBSXM0QixFQUFLZCxXQUNYeDdCLEVBQUVBLEVBQUlzOEIsRUFBS3pDLFdBQWE3NUIsRUFBRXd5QixFQUFJLEdBQUssRUFFdEMsTUFBVSxNQUFPeHlCLEdBQUssTUFBT0EsS0FDdEIsTUFBT0EsSUFBSUEsRUFBRXd5QixFQUFJLE1BQU94eUIsRUFBSUEsRUFBRXUzQixFQUFJLEVBQUksTUFBT3YzQixFQUFJLEVBQUksR0FDM0R1OEIsRUFBTSxNQUFPdjhCLEVBQUlrOUIsR0FBUUUsR0FBUXA5QixFQUFFOEYsRUFBRyxFQUFHLElBQUlnMUIsWUFBYytCLEdBQVVPLEdBQVFwOUIsRUFBRThGLEVBQUcsRUFBRyxJQUFJdTBCLFNBQ3pGcjZCLEVBQUVnRSxFQUFJLEVBQ05oRSxFQUFFQSxFQUFJLE1BQU9BLEdBQUtBLEVBQUV3eUIsRUFBSSxHQUFLLEVBQVUsRUFBTnh5QixFQUFFcStCLEdBQVM5QixFQUFNLEdBQUssRUFBSXY4QixFQUFFd3lCLEVBQVUsRUFBTnh5QixFQUFFaStCLEdBQVMxQixFQUFNLEdBQUssR0FLekYsTUFBSSxNQUFPdjhCLEdBQ1RBLEVBQUU4OEIsR0FBSzk4QixFQUFFeStCLEVBQUksSUFBTSxFQUNuQnorQixFQUFFKzhCLEdBQUsvOEIsRUFBRXkrQixFQUFJLElBQ052QixHQUFRbDlCLElBSVY2OEIsR0FBVTc4QixFQUN2QixDQUNHLENBRUQsU0FBUzhrQyxFQUFlOWtDLEVBQUdnekIsRUFBV2pqQixFQUFReEwsR0FPNUMsSUFOQSxJQUdJdUYsRUFDQW1lLEVBSkE5bkIsRUFBSSxFQUNKNEQsRUFBSWl2QixFQUFVbHpCLE9BQ2RrRSxFQUFJK0wsRUFBT2pRLE9BSVJLLEVBQUk0RCxHQUFHLENBQ1osR0FBSVEsR0FBS1AsRUFBRyxPQUFRLEVBRXBCLEdBQVUsTUFEVjhGLEVBQUlrcEIsRUFBVTZDLFdBQVcxMUIsT0FJdkIsR0FGQTJKLEVBQUlrcEIsRUFBVStSLE9BQU81a0MsT0FDckI4bkIsRUFBUTRjLEVBQU8vNkIsS0FBS3d6QixHQUFPdEssRUFBVStSLE9BQU81a0MsS0FBTzJKLE1BQ25DdkYsRUFBSTBqQixFQUFNam9CLEVBQUcrUCxFQUFReEwsSUFBTSxFQUFJLE9BQVEsT0FDbEQsR0FBSXVGLEdBQUtpRyxFQUFPOGxCLFdBQVd0eEIsS0FDaEMsT0FBUSxDQUVYLENBRUQsT0FBT0EsQ0FDUixDQXVGRCxPQXpNQSsvQixFQUFRM2tDLEVBQUl5MUIsRUFBVTROLEVBQWFzQixHQUNuQ0EsRUFBUXZRLEVBQUlxQixFQUFVNk4sRUFBYXFCLEdBQ25DQSxFQUFReDZCLEVBQUlzckIsRUFBVTBOLEVBQWlCd0IsR0FDdkNNLEVBQVdqbEMsRUFBSXkxQixFQUFVNE4sRUFBYTRCLEdBQ3RDQSxFQUFXN1EsRUFBSXFCLEVBQVU2TixFQUFhMkIsR0FDdENBLEVBQVc5NkIsRUFBSXNyQixFQUFVME4sRUFBaUI4QixHQW9NbkMsQ0FDTHo5QixPQUFRLFNBQVM2ckIsR0FDZixJQUFJMXpCLEVBQUk4MUIsRUFBVXBDLEdBQWEsR0FBSXNSLEdBRW5DLE9BREFobEMsRUFBRWtqQixTQUFXLFdBQWEsT0FBT3dRLENBQVUsRUFDcEMxekIsQ0FDUixFQUNEMm9CLE1BQU8sU0FBUytLLEdBQ2QsSUFBSXR1QixFQUFJc2dDLEVBQVNoUyxHQUFhLElBQUksR0FFbEMsT0FEQXR1QixFQUFFOGQsU0FBVyxXQUFhLE9BQU93USxDQUFVLEVBQ3BDdHVCLENBQ1IsRUFDRHVnQyxVQUFXLFNBQVNqUyxHQUNsQixJQUFJMXpCLEVBQUk4MUIsRUFBVXBDLEdBQWEsR0FBSTRSLEdBRW5DLE9BREF0bEMsRUFBRWtqQixTQUFXLFdBQWEsT0FBT3dRLENBQVUsRUFDcEMxekIsQ0FDUixFQUNENGxDLFNBQVUsU0FBU2xTLEdBQ2pCLElBQUl0dUIsRUFBSXNnQyxFQUFTaFMsR0FBYSxJQUFJLEdBRWxDLE9BREF0dUIsRUFBRThkLFNBQVcsV0FBYSxPQUFPd1EsQ0FBVSxFQUNwQ3R1QixDQUNSLEVBRUwsQ0M3V1dzeEIsQ0FBYTloQixHQUN0Qm1wQixHQUFhbkosR0FBTy9zQixPQUNSK3NCLEdBQU9qTSxNQUNQaU0sR0FBTytRLFVBQ1IvUSxHQUFPZ1IsUUFFcEIsQ0FsQkFDLENBQWMsQ0FDWnBDLFNBQVUsU0FDVjViLEtBQU0sYUFDTnNELEtBQU0sZUFDTjBZLFFBQVMsQ0FBQyxLQUFNLE1BQ2hCRSxLQUFNLENBQUMsU0FBVSxTQUFVLFVBQVcsWUFBYSxXQUFZLFNBQVUsWUFDekVFLFVBQVcsQ0FBQyxNQUFPLE1BQU8sTUFBTyxNQUFPLE1BQU8sTUFBTyxPQUN0REUsT0FBUSxDQUFDLFVBQVcsV0FBWSxRQUFTLFFBQVMsTUFBTyxPQUFRLE9BQVEsU0FBVSxZQUFhLFVBQVcsV0FBWSxZQUN2SEUsWUFBYSxDQUFDLE1BQU8sTUFBTyxNQUFPLE1BQU8sTUFBTyxNQUFPLE1BQU8sTUFBTyxNQUFPLE1BQU8sTUFBTyxTR2Q3RixJQ0NXeUIsR0FBUyxJQUFJOS9CLE1BQU0sR0FBRzBFLE9BQy9CLHFCQUNBLDJCQUNBLGlDQUNBLHVDQUNBLDZDQUNBLG1EQUNBLHlEQUNBLCtEQUNBLHNFQUNBUyxLQ2JhLFNBQVN1b0IsR0FFdEIsSUFEQSxJQUFJanZCLEVBQUlpdkIsRUFBVWx6QixPQUFTLEVBQUksRUFBRytsQixFQUFTLElBQUl2Z0IsTUFBTXZCLEdBQUk1RCxFQUFJLEVBQ3REQSxFQUFJNEQsR0FBRzhoQixFQUFPMWxCLEdBQUssSUFBTTZ5QixFQUFVN3BCLE1BQVUsRUFBSmhKLEVBQWEsSUFBSkEsR0FDekQsT0FBTzBsQixDQUNULElDSmUsU0FBUS9RLEdBQUNuVixHQUN0QixPQUFPLFdBQ0wsT0FBT0EsQ0FDWCxDQUNBLENIRmV5bEMsS0FBVUMsR0FBb0JELEVBQU9BLEVBQU90bEMsT0FBUyxHQUFHLEVDYXhEd2xDLENBQUtGLElHZmIsTUFBTS9ULEdBQU14dkIsS0FBS3d2QixJQUNYMU0sR0FBUTlpQixLQUFLOGlCLE1BQ2JGLEdBQU01aUIsS0FBSzRpQixJQUNYcGlCLEdBQU1SLEtBQUtRLElBQ1hrQixHQUFNMUIsS0FBSzBCLElBQ1htaEIsR0FBTTdpQixLQUFLNmlCLElBQ1g1aUIsR0FBT0QsS0FBS0MsS0FFWjZELEdBQVUsTUFDVjZwQixHQUFLM3RCLEtBQUswaEIsR0FDVmdpQixHQUFTL1YsR0FBSyxFQUNkQyxHQUFNLEVBQUlELEdBTWhCLFNBQVNnVyxHQUFLN2xDLEdBQ25CLE9BQU9BLEdBQUssRUFBSTRsQyxHQUFTNWxDLElBQU0sR0FBSzRsQyxHQUFTMWpDLEtBQUsyakMsS0FBSzdsQyxFQUN6RCxDQ2pCTyxTQUFTOGxDLEdBQVNDLEdBQ3ZCLElBQUk3VixFQUFTLEVBY2IsT0FaQTZWLEVBQU03VixPQUFTLFNBQVMzbUIsR0FDdEIsSUFBSzlELFVBQVV0RixPQUFRLE9BQU8rdkIsRUFDOUIsR0FBUyxNQUFMM21CLEVBQ0YybUIsRUFBUyxTQUNKLENBQ0wsTUFBTTd2QixFQUFJNkIsS0FBS1UsTUFBTTJHLEdBQ3JCLEtBQU1sSixHQUFLLEdBQUksTUFBTSxJQUFJMmxDLFdBQVcsbUJBQW1CejhCLEtBQ3ZEMm1CLEVBQVM3dkIsQ0FDVixDQUNELE9BQU8wbEMsQ0FDWCxFQUVTLElBQU0sSUFBSTlWLEdBQUtDLEVBQ3hCLENDZEEsU0FBUytWLEdBQWU1bEMsR0FDdEIsT0FBT0EsRUFBRTZsQyxXQUNYLENBRUEsU0FBU0MsR0FBZTlsQyxHQUN0QixPQUFPQSxFQUFFK2xDLFdBQ1gsQ0FFQSxTQUFTQyxHQUFjaG1DLEdBQ3JCLE9BQU9BLEVBQUVpbUMsVUFDWCxDQUVBLFNBQVNDLEdBQVlsbUMsR0FDbkIsT0FBT0EsRUFBRW1tQyxRQUNYLENBRUEsU0FBU0MsR0FBWXBtQyxHQUNuQixPQUFPQSxHQUFLQSxFQUFFcW1DLFFBQ2hCLENBYUEsU0FBU0MsR0FBZXhWLEVBQUlDLEVBQUlQLEVBQUlDLEVBQUlpRyxFQUFJNlAsRUFBSWxVLEdBQzlDLElBQUluQixFQUFNSixFQUFLTixFQUNYVyxFQUFNSixFQUFLTixFQUNYN3dCLEdBQU15eUIsRUFBS2tVLEdBQU1BLEdBQU16a0MsR0FBS292QixFQUFNQSxFQUFNQyxFQUFNQSxHQUM5Q3FWLEVBQUs1bUMsRUFBS3V4QixFQUNWc1YsR0FBTTdtQyxFQUFLc3hCLEVBQ1h3VixFQUFNNVYsRUFBSzBWLEVBQ1hHLEVBQU01VixFQUFLMFYsRUFDWEcsRUFBTXBXLEVBQUtnVyxFQUNYSyxFQUFNcFcsRUFBS2dXLEVBQ1hLLEdBQU9KLEVBQU1FLEdBQU8sRUFDcEJHLEdBQU9KLEVBQU1FLEdBQU8sRUFDcEIxVSxFQUFLeVUsRUFBTUYsRUFDWHRVLEVBQUt5VSxFQUFNRixFQUNYSyxFQUFLN1UsRUFBS0EsRUFBS0MsRUFBS0EsRUFDcEJyUSxFQUFJMlUsRUFBSzZQLEVBQ1RVLEVBQUlQLEVBQU1HLEVBQU1ELEVBQU1ELEVBQ3RCM21DLEdBQUtveUIsRUFBSyxHQUFLLEVBQUksR0FBS3R3QixHQUFLTyxHQUFJLEVBQUcwZixFQUFJQSxFQUFJaWxCLEVBQUtDLEVBQUlBLElBQ3JEQyxHQUFPRCxFQUFJN1UsRUFBS0QsRUFBS255QixHQUFLZ25DLEVBQzFCRyxJQUFRRixFQUFJOVUsRUFBS0MsRUFBS3B5QixHQUFLZ25DLEVBQzNCSSxHQUFPSCxFQUFJN1UsRUFBS0QsRUFBS255QixHQUFLZ25DLEVBQzFCSyxJQUFRSixFQUFJOVUsRUFBS0MsRUFBS3B5QixHQUFLZ25DLEVBQzNCTSxFQUFNSixFQUFNSixFQUNaUyxFQUFNSixFQUFNSixFQUNaUyxFQUFNSixFQUFNTixFQUNaVyxFQUFNSixFQUFNTixFQU1oQixPQUZJTyxFQUFNQSxFQUFNQyxFQUFNQSxFQUFNQyxFQUFNQSxFQUFNQyxFQUFNQSxJQUFLUCxFQUFNRSxFQUFLRCxFQUFNRSxHQUU3RCxDQUNMSyxHQUFJUixFQUNKUyxHQUFJUixFQUNKalcsS0FBTXNWLEVBQ05yVixLQUFNc1YsRUFDTkMsSUFBS1EsR0FBT3hRLEVBQUszVSxFQUFJLEdBQ3JCNGtCLElBQUtRLEdBQU96USxFQUFLM1UsRUFBSSxHQUV6QixDQUVlLFNBQUFnUSxLQUNiLElBQUk4VCxFQUFjRCxHQUNkRyxFQUFjRCxHQUNkOEIsRUFBZTl5QixHQUFTLEdBQ3hCK3lCLEVBQVksS0FDWjVCLEVBQWFELEdBQ2JHLEVBQVdELEdBQ1hHLEVBQVdELEdBQ1hwL0IsRUFBVSxLQUNWVyxFQUFPODlCLEdBQVMxVCxHQUVwQixTQUFTQSxJQUNQLElBQUkrVixFQUNBL2xCLEVBQ0EwVSxHQUFNb1AsRUFBWTltQyxNQUFNaUMsS0FBTW9FLFdBQzlCc3hCLEdBQU1xUCxFQUFZaG5DLE1BQU1pQyxLQUFNb0UsV0FDOUI0c0IsRUFBS2lVLEVBQVdsbkMsTUFBTWlDLEtBQU1vRSxXQUFhbWdDLEdBQ3pDdFQsRUFBS2tVLEVBQVNwbkMsTUFBTWlDLEtBQU1vRSxXQUFhbWdDLEdBQ3ZDalQsRUFBS2pCLEdBQUlZLEVBQUtELEdBQ2RLLEVBQUtKLEVBQUtELEVBUWQsR0FOS2hyQixJQUFTQSxFQUFVOGdDLEVBQVNuZ0MsS0FHN0IrdUIsRUFBS0QsSUFBSTFVLEVBQUkyVSxFQUFJQSxFQUFLRCxFQUFJQSxFQUFLMVUsR0FHN0IyVSxFQUFLL3dCLEdBR04sR0FBSTJzQixFQUFLN0MsR0FBTTlwQixHQUNsQnFCLEVBQVFvcEIsT0FBT3NHLEVBQUtqUyxHQUFJdU4sR0FBSzBFLEVBQUtoUyxHQUFJc04sSUFDdENockIsRUFBUStxQixJQUFJLEVBQUcsRUFBRzJFLEVBQUkxRSxFQUFJQyxHQUFLSSxHQUMzQm9FLEVBQUs5d0IsS0FDUHFCLEVBQVFvcEIsT0FBT3FHLEVBQUtoUyxHQUFJd04sR0FBS3dFLEVBQUsvUixHQUFJdU4sSUFDdENqckIsRUFBUStxQixJQUFJLEVBQUcsRUFBRzBFLEVBQUl4RSxFQUFJRCxFQUFJSyxRQUs3QixDQUNILElBV0l6TyxFQUNBQyxFQVpBa2tCLEVBQU0vVixFQUNOZ1csRUFBTS9WLEVBQ05nVyxFQUFNalcsRUFDTmtXLEVBQU1qVyxFQUNOa1csRUFBTTdWLEVBQ044VixFQUFNOVYsRUFDTitWLEVBQUtoQyxFQUFTdG5DLE1BQU1pQyxLQUFNb0UsV0FBYSxFQUN2Q2tqQyxFQUFNRCxFQUFLMWlDLEtBQWFraUMsR0FBYUEsRUFBVTlvQyxNQUFNaUMsS0FBTW9FLFdBQWF0RCxHQUFLMjBCLEVBQUtBLEVBQUtDLEVBQUtBLElBQzVGNlAsRUFBS2hqQyxHQUFJOHRCLEdBQUlxRixFQUFLRCxHQUFNLEdBQUltUixFQUFhN29DLE1BQU1pQyxLQUFNb0UsWUFDckRtakMsRUFBTWhDLEVBQ05pQyxFQUFNakMsRUFLVixHQUFJK0IsRUFBSzNpQyxHQUFTLENBQ2hCLElBQUk4aUMsRUFBS2pELEdBQUs4QyxFQUFLN1IsRUFBSy9SLEdBQUkyakIsSUFDeEJLLEVBQUtsRCxHQUFLOEMsRUFBSzVSLEVBQUtoUyxHQUFJMmpCLEtBQ3ZCRixHQUFZLEVBQUxNLEdBQVU5aUMsSUFBOEJzaUMsR0FBckJRLEdBQU9wVyxFQUFLLEdBQUssRUFBZTZWLEdBQU9PLElBQ2pFTixFQUFNLEVBQUdGLEVBQU1DLEdBQU9sVyxFQUFLQyxHQUFNLElBQ2pDbVcsR0FBWSxFQUFMTSxHQUFVL2lDLElBQThCb2lDLEdBQXJCVyxHQUFPclcsRUFBSyxHQUFLLEVBQWUyVixHQUFPVSxJQUNqRU4sRUFBTSxFQUFHTCxFQUFNQyxHQUFPaFcsRUFBS0MsR0FBTSxFQUN2QyxDQUVELElBQUlmLEVBQU13RixFQUFLalMsR0FBSXNqQixHQUNmNVcsRUFBTXVGLEVBQUtoUyxHQUFJcWpCLEdBQ2ZuQixFQUFNblEsRUFBS2hTLEdBQUl5akIsR0FDZnJCLEVBQU1wUSxFQUFLL1IsR0FBSXdqQixHQUduQixHQUFJM0IsRUFBSzVnQyxHQUFTLENBQ2hCLElBSUlnakMsRUFKQWpDLEVBQU1oUSxFQUFLalMsR0FBSXVqQixHQUNmckIsRUFBTWpRLEVBQUtoUyxHQUFJc2pCLEdBQ2ZsQixFQUFNclEsRUFBS2hTLEdBQUl3akIsR0FDZmxCLEVBQU10USxFQUFLL1IsR0FBSXVqQixHQU1uQixHQUFJM1YsRUFBSzlDLEdBQ1AsR0FBSW1aLEVBdElkLFNBQW1CN1gsRUFBSUMsRUFBSVAsRUFBSUMsRUFBSUUsRUFBSUMsRUFBSWdZLEVBQUlDLEdBQzdDLElBQUlqQyxFQUFNcFcsRUFBS00sRUFBSStWLEVBQU1wVyxFQUFLTSxFQUMxQitYLEVBQU1GLEVBQUtqWSxFQUFJb1ksRUFBTUYsRUFBS2pZLEVBQzFCdHNCLEVBQUl5a0MsRUFBTW5DLEVBQU1rQyxFQUFNakMsRUFDMUIsS0FBSXZpQyxFQUFJQSxFQUFJcUIsSUFFWixNQUFPLENBQUNtckIsR0FEUnhzQixHQUFLd2tDLEdBQU8vWCxFQUFLSCxHQUFNbVksR0FBT2pZLEVBQUtILElBQU9yc0IsR0FDekJzaUMsRUFBSzdWLEVBQUt6c0IsRUFBSXVpQyxFQUNqQyxDQStIbUJtQyxDQUFVOVgsRUFBS0MsRUFBSzJWLEVBQUtDLEVBQUtMLEVBQUtDLEVBQUtDLEVBQUtDLEdBQU0sQ0FDMUQsSUFBSW9DLEVBQUsvWCxFQUFNeVgsRUFBRyxHQUNkTyxFQUFLL1gsRUFBTXdYLEVBQUcsR0FDZFEsRUFBS3pDLEVBQU1pQyxFQUFHLEdBQ2RTLEVBQUt6QyxFQUFNZ0MsRUFBRyxHQUNkVSxFQUFLLEVBQUkza0IsR0Z0SmxCLFNBQWMva0IsR0FDbkIsT0FBT0EsRUFBSSxFQUFJLEVBQUlBLEdBQUssRUFBSTZ2QixHQUFLM3RCLEtBQUsrdkIsS0FBS2p5QixFQUM3QyxDRW9KNkJpeUIsRUFBTXFYLEVBQUtFLEVBQUtELEVBQUtFLElBQU90bkMsR0FBS21uQyxFQUFLQSxFQUFLQyxFQUFLQSxHQUFNcG5DLEdBQUtxbkMsRUFBS0EsRUFBS0MsRUFBS0EsS0FBUSxHQUMvRkUsRUFBS3huQyxHQUFLNm1DLEVBQUcsR0FBS0EsRUFBRyxHQUFLQSxFQUFHLEdBQUtBLEVBQUcsSUFDekNKLEVBQU1obEMsR0FBSWdqQyxHQUFLOVAsRUFBSzZTLElBQU9ELEVBQUssSUFDaENiLEVBQU1qbEMsR0FBSWdqQyxHQUFLN1AsRUFBSzRTLElBQU9ELEVBQUssR0FDNUMsTUFDWWQsRUFBTUMsRUFBTSxDQUdqQixDQUdLSixFQUFNemlDLEdBR0g2aUMsRUFBTTdpQyxJQUNiaWUsRUFBSzBpQixHQUFlUSxFQUFLQyxFQUFLN1YsRUFBS0MsRUFBS3VGLEVBQUk4UixFQUFLblcsR0FDakR4TyxFQUFLeWlCLEdBQWVJLEVBQUtDLEVBQUtDLEVBQUtDLEVBQUtuUSxFQUFJOFIsRUFBS25XLEdBRWpEcnJCLEVBQVFvcEIsT0FBT3hNLEVBQUc4akIsR0FBSzlqQixFQUFHc04sSUFBS3ROLEVBQUcrakIsR0FBSy9qQixFQUFHdU4sS0FHdENxWCxFQUFNakMsRUFBSXYvQixFQUFRK3FCLElBQUluTyxFQUFHOGpCLEdBQUk5akIsRUFBRytqQixHQUFJYSxFQUFLN2pCLEdBQU1mLEVBQUd1TixJQUFLdk4sRUFBR3NOLEtBQU12TSxHQUFNZCxFQUFHc04sSUFBS3ROLEVBQUdxTixNQUFPbUIsSUFJMUZyckIsRUFBUStxQixJQUFJbk8sRUFBRzhqQixHQUFJOWpCLEVBQUcrakIsR0FBSWEsRUFBSzdqQixHQUFNZixFQUFHdU4sSUFBS3ZOLEVBQUdzTixLQUFNdk0sR0FBTWYsRUFBRytpQixJQUFLL2lCLEVBQUc4aUIsTUFBT3JVLEdBQzlFcnJCLEVBQVErcUIsSUFBSSxFQUFHLEVBQUcyRSxFQUFJL1IsR0FBTWYsRUFBRytqQixHQUFLL2pCLEVBQUcraUIsSUFBSy9pQixFQUFHOGpCLEdBQUs5akIsRUFBRzhpQixLQUFNL2hCLEdBQU1kLEVBQUc4akIsR0FBSzlqQixFQUFHOGlCLElBQUs5aUIsRUFBRzZqQixHQUFLN2pCLEVBQUc2aUIsTUFBT3JVLEdBQ3JHcnJCLEVBQVErcUIsSUFBSWxPLEVBQUc2akIsR0FBSTdqQixFQUFHOGpCLEdBQUlhLEVBQUs3akIsR0FBTWQsRUFBRzhpQixJQUFLOWlCLEVBQUc2aUIsS0FBTS9oQixHQUFNZCxFQUFHc04sSUFBS3ROLEVBQUdxTixNQUFPbUIsTUFLN0VyckIsRUFBUW9wQixPQUFPYyxFQUFLQyxHQUFNbnFCLEVBQVErcUIsSUFBSSxFQUFHLEVBQUcyRSxFQUFJcVIsRUFBS0MsR0FBTTNWLElBckIxQ3JyQixFQUFRb3BCLE9BQU9jLEVBQUtDLEdBeUJwQ3NGLEVBQUs5d0IsSUFBY3dpQyxFQUFNeGlDLEdBR3RCNGlDLEVBQU01aUMsSUFDYmllLEVBQUswaUIsR0FBZU0sRUFBS0MsRUFBS0gsRUFBS0MsRUFBS2xRLEdBQUs4UixFQUFLbFcsR0FDbER4TyxFQUFLeWlCLEdBQWVwVixFQUFLQyxFQUFLMlYsRUFBS0MsRUFBS3RRLEdBQUs4UixFQUFLbFcsR0FFbERyckIsRUFBUXNwQixPQUFPMU0sRUFBRzhqQixHQUFLOWpCLEVBQUdzTixJQUFLdE4sRUFBRytqQixHQUFLL2pCLEVBQUd1TixLQUd0Q29YLEVBQU1oQyxFQUFJdi9CLEVBQVErcUIsSUFBSW5PLEVBQUc4akIsR0FBSTlqQixFQUFHK2pCLEdBQUlZLEVBQUs1akIsR0FBTWYsRUFBR3VOLElBQUt2TixFQUFHc04sS0FBTXZNLEdBQU1kLEVBQUdzTixJQUFLdE4sRUFBR3FOLE1BQU9tQixJQUkxRnJyQixFQUFRK3FCLElBQUluTyxFQUFHOGpCLEdBQUk5akIsRUFBRytqQixHQUFJWSxFQUFLNWpCLEdBQU1mLEVBQUd1TixJQUFLdk4sRUFBR3NOLEtBQU12TSxHQUFNZixFQUFHK2lCLElBQUsvaUIsRUFBRzhpQixNQUFPclUsR0FDOUVyckIsRUFBUStxQixJQUFJLEVBQUcsRUFBRzBFLEVBQUk5UixHQUFNZixFQUFHK2pCLEdBQUsvakIsRUFBRytpQixJQUFLL2lCLEVBQUc4akIsR0FBSzlqQixFQUFHOGlCLEtBQU0vaEIsR0FBTWQsRUFBRzhqQixHQUFLOWpCLEVBQUc4aUIsSUFBSzlpQixFQUFHNmpCLEdBQUs3akIsRUFBRzZpQixLQUFNclUsR0FDcEdyckIsRUFBUStxQixJQUFJbE8sRUFBRzZqQixHQUFJN2pCLEVBQUc4akIsR0FBSVksRUFBSzVqQixHQUFNZCxFQUFHOGlCLElBQUs5aUIsRUFBRzZpQixLQUFNL2hCLEdBQU1kLEVBQUdzTixJQUFLdE4sRUFBR3FOLE1BQU9tQixLQUs3RXJyQixFQUFRK3FCLElBQUksRUFBRyxFQUFHMEUsRUFBSXlSLEVBQUtELEVBQUs1VixHQXJCSXJyQixFQUFRc3BCLE9BQU9zVyxFQUFLQyxFQXNCOUQsTUF0SG9CNy9CLEVBQVFvcEIsT0FBTyxFQUFHLEdBMEh2QyxHQUZBcHBCLEVBQVFxcEIsWUFFSnlYLEVBQVEsT0FBTzlnQyxFQUFVLEtBQU04Z0MsRUFBUyxJQUFNLElBQ25ELENBd0NELE9BdENBL1YsRUFBSXdYLFNBQVcsV0FDYixJQUFJeG5CLElBQU04akIsRUFBWTltQyxNQUFNaUMsS0FBTW9FLGFBQWMyZ0MsRUFBWWhuQyxNQUFNaUMsS0FBTW9FLFlBQWMsRUFDbEZuRyxJQUFNZ25DLEVBQVdsbkMsTUFBTWlDLEtBQU1vRSxhQUFjK2dDLEVBQVNwbkMsTUFBTWlDLEtBQU1vRSxZQUFjLEVBQUlvcUIsR0FBSyxFQUMzRixNQUFPLENBQUMvSyxHQUFJeGxCLEdBQUs4aUIsRUFBRzJDLEdBQUl6bEIsR0FBSzhpQixFQUNqQyxFQUVFZ1EsRUFBSThULFlBQWMsU0FBUzM4QixHQUN6QixPQUFPOUQsVUFBVXRGLFFBQVUrbEMsRUFBMkIsbUJBQU4zOEIsRUFBbUJBLEVBQUk0TCxJQUFVNUwsR0FBSTZvQixHQUFPOFQsQ0FDaEcsRUFFRTlULEVBQUlnVSxZQUFjLFNBQVM3OEIsR0FDekIsT0FBTzlELFVBQVV0RixRQUFVaW1DLEVBQTJCLG1CQUFONzhCLEVBQW1CQSxFQUFJNEwsSUFBVTVMLEdBQUk2b0IsR0FBT2dVLENBQ2hHLEVBRUVoVSxFQUFJNlYsYUFBZSxTQUFTMStCLEdBQzFCLE9BQU85RCxVQUFVdEYsUUFBVThuQyxFQUE0QixtQkFBTjErQixFQUFtQkEsRUFBSTRMLElBQVU1TCxHQUFJNm9CLEdBQU82VixDQUNqRyxFQUVFN1YsRUFBSThWLFVBQVksU0FBUzMrQixHQUN2QixPQUFPOUQsVUFBVXRGLFFBQVUrbkMsRUFBaUIsTUFBTDMrQixFQUFZLEtBQW9CLG1CQUFOQSxFQUFtQkEsRUFBSTRMLElBQVU1TCxHQUFJNm9CLEdBQU84VixDQUNqSCxFQUVFOVYsRUFBSWtVLFdBQWEsU0FBUy84QixHQUN4QixPQUFPOUQsVUFBVXRGLFFBQVVtbUMsRUFBMEIsbUJBQU4vOEIsRUFBbUJBLEVBQUk0TCxJQUFVNUwsR0FBSTZvQixHQUFPa1UsQ0FDL0YsRUFFRWxVLEVBQUlvVSxTQUFXLFNBQVNqOUIsR0FDdEIsT0FBTzlELFVBQVV0RixRQUFVcW1DLEVBQXdCLG1CQUFOajlCLEVBQW1CQSxFQUFJNEwsSUFBVTVMLEdBQUk2b0IsR0FBT29VLENBQzdGLEVBRUVwVSxFQUFJc1UsU0FBVyxTQUFTbjlCLEdBQ3RCLE9BQU85RCxVQUFVdEYsUUFBVXVtQyxFQUF3QixtQkFBTm45QixFQUFtQkEsRUFBSTRMLElBQVU1TCxHQUFJNm9CLEdBQU9zVSxDQUM3RixFQUVFdFUsRUFBSS9xQixRQUFVLFNBQVNrQyxHQUNyQixPQUFPOUQsVUFBVXRGLFFBQVdrSCxFQUFlLE1BQUxrQyxFQUFZLEtBQU9BLEVBQUk2b0IsR0FBTy9xQixDQUN4RSxFQUVTK3FCLENBQ1QsQ0N6UWUsU0FBUXR1QixHQUFDOUQsR0FDdEIsTUFBb0IsaUJBQU5BLEdBQWtCLFdBQVlBLEVBQ3hDQSxFQUNBMkYsTUFBTVYsS0FBS2pGLEVBQ2pCLENDTkEsU0FBUzZwQyxHQUFPeGlDLEdBQ2RoRyxLQUFLeW9DLFNBQVd6aUMsQ0FDbEIsQ0EwQmUsU0FBUTBpQyxHQUFDMWlDLEdBQ3RCLE9BQU8sSUFBSXdpQyxHQUFPeGlDLEVBQ3BCLENDOUJPLFNBQVNySCxHQUFFK0UsR0FDaEIsT0FBT0EsRUFBRSxFQUNYLENBRU8sU0FBU29CLEdBQUVwQixHQUNoQixPQUFPQSxFQUFFLEVBQ1gsQ0NOZSxTQUFBdEYsR0FBU0gsRUFBR0MsR0FDekIsT0FBT0EsRUFBSUQsR0FBSyxFQUFJQyxFQUFJRCxFQUFJLEVBQUlDLEdBQUtELEVBQUksRUFBSUUsR0FDL0MsQ0NGZSxTQUFRaUksR0FBQ3BILEdBQ3RCLE9BQU9BLENBQ1QsQ0NGTyxTQUFTMnBDLEdBQVVqbUMsRUFBRy9ELEVBQUdtRyxHQUM5QjlFLEtBQUswQyxFQUFJQSxFQUNUMUMsS0FBS3JCLEVBQUlBLEVBQ1RxQixLQUFLOEUsRUFBSUEsQ0FDWCxDQ0ZBLElBQVk4akMsR0FlQUMsR0FhQUMsR0wxQlpOLEdBQU90L0IsVUFBWSxDQUNqQjYvQixVQUFXLFdBQ1Qvb0MsS0FBS2dwQyxNQUFRLENBQ2QsRUFDREMsUUFBUyxXQUNQanBDLEtBQUtncEMsTUFBUTdxQyxHQUNkLEVBQ0QrcUMsVUFBVyxXQUNUbHBDLEtBQUttcEMsT0FBUyxDQUNmLEVBQ0RDLFFBQVMsWUFDSHBwQyxLQUFLZ3BDLE9BQXlCLElBQWZocEMsS0FBS2dwQyxPQUErQixJQUFoQmhwQyxLQUFLbXBDLFNBQWVucEMsS0FBS3lvQyxTQUFTcFosWUFDekVydkIsS0FBS2dwQyxNQUFRLEVBQUlocEMsS0FBS2dwQyxLQUN2QixFQUNESyxNQUFPLFNBQVMxcUMsRUFBR21HLEdBRWpCLE9BREFuRyxHQUFLQSxFQUFHbUcsR0FBS0EsRUFDTDlFLEtBQUttcEMsUUFDWCxLQUFLLEVBQUducEMsS0FBS21wQyxPQUFTLEVBQUducEMsS0FBS2dwQyxNQUFRaHBDLEtBQUt5b0MsU0FBU25aLE9BQU8zd0IsRUFBR21HLEdBQUs5RSxLQUFLeW9DLFNBQVNyWixPQUFPendCLEVBQUdtRyxHQUFJLE1BQy9GLEtBQUssRUFBRzlFLEtBQUttcEMsT0FBUyxFQUN0QixRQUFTbnBDLEtBQUt5b0MsU0FBU25aLE9BQU8zd0IsRUFBR21HLEdBRXBDLEdJbkJINmpDLEdBQVV6L0IsVUFBWSxDQUNwQnpKLFlBQWFrcEMsR0FDYjNqQyxNQUFPLFNBQVN0QyxHQUNkLE9BQWEsSUFBTkEsRUFBVTFDLEtBQU8sSUFBSTJvQyxHQUFVM29DLEtBQUswQyxFQUFJQSxFQUFHMUMsS0FBS3JCLEVBQUdxQixLQUFLOEUsRUFDaEUsRUFDRDRpQixVQUFXLFNBQVMvb0IsRUFBR21HLEdBQ3JCLE9BQWEsSUFBTm5HLEVBQWdCLElBQU5tRyxFQUFVOUUsS0FBTyxJQUFJMm9DLEdBQVUzb0MsS0FBSzBDLEVBQUcxQyxLQUFLckIsRUFBSXFCLEtBQUswQyxFQUFJL0QsRUFBR3FCLEtBQUs4RSxFQUFJOUUsS0FBSzBDLEVBQUlvQyxFQUNoRyxFQUNEL0csTUFBTyxTQUFTc3JDLEdBQ2QsTUFBTyxDQUFDQSxFQUFNLEdBQUtycEMsS0FBSzBDLEVBQUkxQyxLQUFLckIsRUFBRzBxQyxFQUFNLEdBQUtycEMsS0FBSzBDLEVBQUkxQyxLQUFLOEUsRUFDOUQsRUFDRHdrQyxPQUFRLFNBQVMzcUMsR0FDZixPQUFPQSxFQUFJcUIsS0FBSzBDLEVBQUkxQyxLQUFLckIsQ0FDMUIsRUFDRDRxQyxPQUFRLFNBQVN6a0MsR0FDZixPQUFPQSxFQUFJOUUsS0FBSzBDLEVBQUkxQyxLQUFLOEUsQ0FDMUIsRUFDRHV4QixPQUFRLFNBQVNtVCxHQUNmLE1BQU8sRUFBRUEsRUFBUyxHQUFLeHBDLEtBQUtyQixHQUFLcUIsS0FBSzBDLEdBQUk4bUMsRUFBUyxHQUFLeHBDLEtBQUs4RSxHQUFLOUUsS0FBSzBDLEVBQ3hFLEVBQ0QrbUMsUUFBUyxTQUFTOXFDLEdBQ2hCLE9BQVFBLEVBQUlxQixLQUFLckIsR0FBS3FCLEtBQUswQyxDQUM1QixFQUNEZ25DLFFBQVMsU0FBUzVrQyxHQUNoQixPQUFRQSxFQUFJOUUsS0FBSzhFLEdBQUs5RSxLQUFLMEMsQ0FDNUIsRUFDRGluQyxTQUFVLFNBQVNockMsR0FDakIsT0FBT0EsRUFBRThILE9BQU9QLE9BQU92SCxFQUFFd0YsUUFBUXNGLElBQUl6SixLQUFLeXBDLFFBQVN6cEMsTUFBTXlKLElBQUk5SyxFQUFFMDNCLE9BQVExM0IsR0FDeEUsRUFDRGlyQyxTQUFVLFNBQVM5a0MsR0FDakIsT0FBT0EsRUFBRTJCLE9BQU9QLE9BQU9wQixFQUFFWCxRQUFRc0YsSUFBSXpKLEtBQUswcEMsUUFBUzFwQyxNQUFNeUosSUFBSTNFLEVBQUV1eEIsT0FBUXZ4QixHQUN4RSxFQUNEMGMsU0FBVSxXQUNSLE1BQU8sYUFBZXhoQixLQUFLckIsRUFBSSxJQUFNcUIsS0FBSzhFLEVBQUksV0FBYTlFLEtBQUswQyxFQUFJLEdBQ3JFLEdBS21CaW1DLEdBQVV6L0IsVUMzQ2hDLFNBQVkwL0IsR0FDUkEsRUFBQUEsRUFBQSxJQUFBLEdBQUEsTUFDQUEsRUFBQUEsRUFBQSxZQUFBLEdBQUEsY0FDQUEsRUFBQUEsRUFBQSxLQUFBLEdBQUEsT0FDQUEsRUFBQUEsRUFBQSxTQUFBLEdBQUEsV0FDQUEsRUFBQUEsRUFBQSxZQUFBLEdBQUEsY0FDQUEsRUFBQUEsRUFBQSxLQUFBLEdBQUEsT0FDQUEsRUFBQUEsRUFBQSxRQUFBLEdBQUEsVUFDQUEsRUFBQUEsRUFBQSxNQUFBLEdBQUEsUUFDQUEsRUFBQUEsRUFBQSxTQUFBLEdBQUEsV0FDQUEsRUFBQUEsRUFBQSxLQUFBLEdBQUEsT0FDQUEsRUFBQUEsRUFBQSxTQUFBLElBQUEsV0FDQUEsRUFBQUEsRUFBQSxZQUFBLElBQUEsYUFDSCxDQWJELENBQVlBLEtBQUFBLEdBYVgsQ0FBQSxJQUVELFNBQVlDLEdBQ1JBLEVBQUFBLEVBQUEsS0FBQSxHQUFBLE9BQ0FBLEVBQUFBLEVBQUEsSUFBQSxHQUFBLE1BQ0FBLEVBQUFBLEVBQUEsSUFBQSxHQUFBLE1BQ0FBLEVBQUFBLEVBQUEsTUFBQSxHQUFBLFFBQ0FBLEVBQUFBLEVBQUEsUUFBQSxHQUFBLFVBQ0FBLEVBQUFBLEVBQUEsTUFBQSxHQUFBLFFBQ0FBLEVBQUFBLEVBQUEsTUFBQSxHQUFBLFFBQ0FBLEVBQUFBLEVBQUEsUUFBQSxHQUFBLFVBQ0FBLEVBQUFBLEVBQUEsT0FBQSxHQUFBLFNBQ0FBLEVBQUFBLEVBQUEsUUFBQSxHQUFBLFNBQ0gsQ0FYRCxDQUFZQSxLQUFBQSxHQVdYLENBQUEsSUFFRCxTQUFZQyxHQUNSQSxFQUFBQSxFQUFBLE9BQUEsR0FBQSxTQUNBQSxFQUFBQSxFQUFBLElBQUEsR0FBQSxNQUNBQSxFQUFBQSxFQUFBLEtBQUEsR0FBQSxPQUNBQSxFQUFBQSxFQUFBLEtBQUEsR0FBQSxPQUNBQSxFQUFBQSxFQUFBLFNBQUEsR0FBQSxXQUNBQSxFQUFBQSxFQUFBLE9BQUEsR0FBQSxRQUNILENBUEQsQ0FBWUEsS0FBQUEsR0FPWCxDQUFBLFVBTVllLEdBSVQsV0FBQXBxQyxDQUFZMG1CLEVBQWM1b0IsR0FDdEJ5QyxLQUFLbW1CLEtBQU9BLEVBQ1pubUIsS0FBS3pDLE1BQVFBLENBQ2hCLFFBR1F1c0MsR0FjVCxXQUFBcnFDLENBQVlxckIsRUFBWWlmLEVBQXdCQyxHQVk1QyxHQVhBaHFDLEtBQUs0SSxLQUFPbWhDLEVBQ1ovcEMsS0FBSzYxQixPQUFTbVUsRUFDZGhxQyxLQUFLaXFDLFVBQVksR0FDakJqcUMsS0FBSzhxQixHQUFLQSxFQUNWOXFCLEtBQUtrcUMsVUFBWSxFQUNqQmxxQyxLQUFLbXFDLFdBQWEsRUFDbEJucUMsS0FBS29xQyxXQUFhLEVBQ2xCcHFDLEtBQUtxcUMsVUFBWXZCLEdBQVV0VixPQUMzQnh6QixLQUFLc3FDLGdCQUFpQixFQUN0QnRxQyxLQUFLdXFDLFdBQWEsRUFFZFIsSUFBZW5CLEdBQVc0QixNQUFPLENBRWpDLElBR0kvMkIsRUFEQWczQixFQUFRLElBQUluMEIsT0FEWixtRkFDNkIsTUFFakMsS0FBUTdDLEVBQVFnM0IsRUFBTWhxQixLQUFLdXBCLElBQ3ZCLFFBQXFDLElBQTFCdjJCLEVBQU1kLE9BQU91M0IsU0FBMEIsQ0FDOUMsSUFBSUEsRUFBV1EsV0FBV2ozQixFQUFNZCxPQUFPdTNCLFVBQ3ZDLEdBQUkxVyxPQUFPbVgsU0FBU1QsU0FDc0IsSUFBM0J6MkIsRUFBTWQsT0FBT3czQixVQUEyQixDQUMvQyxJQUFJQSxFQUFZTyxXQUFXajNCLEVBQU1kLE9BQU93M0IsV0FDeEMsR0FBSTNXLE9BQU9tWCxTQUFTUixHQUFZLENBQzVCLElBQUlDLE9BR0EsSUFETzMyQixFQUFNZCxPQUFPeTNCLFlBR3BCQSxFQUFZTSxXQUNSajNCLEVBQU1kLE9BQU95M0IsWUFJckJwcUMsS0FBS2txQyxTQUFXQSxFQUNoQmxxQyxLQUFLbXFDLFVBQVlBLEVBQ2IzVyxPQUFPbVgsU0FBU1AsS0FDaEJwcUMsS0FBS29xQyxVQUFZQSxHQUVyQnBxQyxLQUFLNHFDLGFBQWVaLEVBQWFuWCxRQUM3QjRYLEVBQ0EsR0FFUCxDQUNELEtBQ0gsQ0FFUixDQUVSLEtBQU0sQ0FDSCxJQUVJaDNCLEVBREFnM0IsRUFBUSxJQUFJbjBCLE9BREQsNEJBQ2tCLE1BRWpDLEtBQVE3QyxFQUFRZzNCLEVBQU1ocUIsS0FBS3VwQixJQUN2QixRQUFxQyxJQUExQnYyQixFQUFNZCxPQUFPdTNCLFNBQTBCLENBQzlDLElBQUlBLEVBQVdRLFdBQVdqM0IsRUFBTWQsT0FBT3UzQixVQUNuQzFXLE9BQU9tWCxTQUFTVCxLQUNoQmxxQyxLQUFLa3FDLFNBQVdBLEVBQ2hCbHFDLEtBQUs0cUMsYUFBZVosRUFBYW5YLFFBQVE0WCxFQUFPLEtBRXBELEtBQ0gsQ0FFUixDQUNKLENBRU0sT0FBQUksQ0FBUUMsR0FDWCxPQUFJOXFDLEtBQUs0SSxPQUFTa2lDLEVBQU1saUMsTUFBUTVJLEtBQUs2MUIsU0FBV2lWLEVBQU1qVixNQUl6RCxDQUVNLE9BQUFrVixHQUNILE9BQU8vcUMsS0FBSzRJLElBQ2YsQ0FFTSxTQUFBb2lDLEdBQ0gsT0FBT2hyQyxLQUFLNjFCLE1BQ2YsQ0FFTSxlQUFBb1YsR0FDSCxPQUFPanJDLEtBQUs0cUMsWUFDZixDQUVNLEtBQUFNLEdBQ0gsT0FBT2xyQyxLQUFLOHFCLEVBQ2YsQ0FFTSxXQUFBcWdCLENBQVk3b0MsRUFBUSxHQUN2QixPQUFRQSxHQUNKLEtBQUssRUFDRCxPQUFPdEMsS0FBS2txQyxTQUNoQixLQUFLLEVBQ0QsT0FBT2xxQyxLQUFLbXFDLFVBQ2hCLEtBQUssRUFDRCxPQUFPbnFDLEtBQUtvcUMsVUFHcEIsT0FBTyxJQUNWLENBRU0sWUFBQWdCLENBQWFDLEdBQ2hCcnJDLEtBQUtpcUMsVUFBWW9CLENBQ3BCLENBRU0sWUFBQUMsQ0FBYUMsR0FBZ0MsR0FDaEQsTUFBdUIsS0FBbkJ2ckMsS0FBS2lxQyxVQUNEc0IsRUFDTyxJQUVKLElBRUp2ckMsS0FBS2lxQyxTQUNmLENBRU0sYUFBQXVCLENBQWNDLEVBQWMsR0FDL0J6ckMsS0FBS3VxQyxXQUFhdnFDLEtBQUt1cUMsV0FBYWtCLENBQ3ZDLENBRU0sYUFBQUMsR0FDSCxPQUFPMXJDLEtBQUt1cUMsVUFDZixRQVFRb0IsR0FxQlQsV0FBQWxzQyxDQUFZOE0sRUFBa0JxL0IsR0FGdEI1ckMsS0FBQTZyQyxhQUFlLEVBR25CN3JDLEtBQUs2SSxLQUFPLFdBQ1o3SSxLQUFLNHJDLE1BQVFBLEVBQ2I1ckMsS0FBS21DLE9BQVMsR0FDZG5DLEtBQUt1TSxPQUFTQSxFQUNkdk0sS0FBSzhxQixJQUFNLEVBQ1g5cUIsS0FBSzhyQyxLQUFPLEtBQ1o5ckMsS0FBSytyQyxLQUFPLEtBQ1ovckMsS0FBS2dzQyxVQUFZLEtBQ2pCaHNDLEtBQUtpc0MsUUFBVSxLQUNmanNDLEtBQUt1cUMsV0FBYSxFQUNsQnZxQyxLQUFLa3NDLFNBQVcsS0FDaEJsc0MsS0FBS21zQyxRQUFVLEtBRWZuc0MsS0FBS29zQyxjQUFlLEVBRXBCcHNDLEtBQUtxcUMsVUFBWXVCLGFBQUEsRUFBQUEsRUFBT3ZCLFVBRXhCLElBQUssSUFBSWdDLEVBQU0sRUFBR0EsRUFBTTkvQixFQUFPKy9CLFdBQVd4dEMsT0FBUXV0QyxJQUM5Q3JzQyxLQUFLbUMsT0FBTzhHLEtBQUssS0FFeEIsQ0FFTSxpQkFBQXNqQyxHQUNILElBQUt2c0MsS0FBS29zQyxhQUFjLENBQ3BCLElBQUlJLEVBQWEsSUFBSWIsR0FBUTNyQyxLQUFLdU0sT0FBUSxNQVUxQyxPQVRBaWdDLEVBQVczakMsS0FBTyxNQUNsQjJqQyxFQUFXcnFDLE9BQVMsSUFBSW5DLEtBQUttQyxRQUM3QnFxQyxFQUFXVixLQUFPOXJDLEtBQUs4ckMsS0FDdkJVLEVBQVdULEtBQU8vckMsS0FBSytyQyxLQUN2QlMsRUFBV1IsVUFBWWhzQyxLQUFLZ3NDLFVBQVVsN0IsUUFDdEMwN0IsRUFBV1AsUUFBVWpzQyxLQUFLaXNDLFFBQVFuN0IsUUFDbEMwN0IsRUFBV2pDLFdBQWF2cUMsS0FBS3VxQyxXQUM3QmlDLEVBQVdKLGNBQWUsRUFDMUJJLEVBQVduQyxVQUFZcnFDLEtBQUtxcUMsVUFDckJtQyxDQUNWLENBQ0QsT0FBT3hzQyxJQUNWLENBRU0sT0FBQXlzQyxHQUNILE9BQU96c0MsS0FBSzZJLElBQ2YsQ0FFTSxPQUFBNmpDLENBQVE3akMsR0FDWDdJLEtBQUs2SSxLQUFPQSxDQUNmLENBRU0sS0FBQXFpQyxHQUNILE9BQU9sckMsS0FBSzhxQixFQUNmLENBRU0sS0FBQTZoQixDQUFNN2hCLEdBQ1Q5cUIsS0FBSzhxQixHQUFLQSxDQUNiLENBRU0sYUFBQTBnQixDQUFjQyxHQUNqQnpyQyxLQUFLdXFDLFdBQWF2cUMsS0FBS3VxQyxXQUFha0IsQ0FDdkMsQ0FFTSxhQUFBQyxHQUNILE9BQU8xckMsS0FBS3VxQyxVQUNmLENBRU0sUUFBQXFDLENBQVN6bUIsRUFBYzBtQixFQUFtQixHQUM3QyxJQUFJUixFQUFNcnNDLEtBQUt1TSxPQUFPdWdDLGVBQWUzbUIsR0FBUXRsQixLQUFLVSxNQUFNc3JDLEdBQ3hELE9BQUlSLEdBQU8sR0FBS0EsRUFBTXJzQyxLQUFLbUMsT0FBT3JELE9BQ3ZCa0IsS0FBS21DLE9BQU9rcUMsR0FFaEIsSUFDVixDQUVNLFFBQUFVLENBQVM1bUIsRUFBYzVvQixHQUMxQixJQUFJOHVDLEVBQU1yc0MsS0FBS3VNLE9BQU91Z0MsZUFBZTNtQixHQUdqQ2ttQixHQUFPLEdBQUtBLEVBQU1yc0MsS0FBS21DLE9BQU9yRCxTQUU5QmtCLEtBQUttQyxPQUFPa3FDLEdBQU85dUMsR0FHRCxPQUFkeUMsS0FBSzhyQyxNQUFpQnZ1QyxFQUFReUMsS0FBSzhyQyxRQUNuQzlyQyxLQUFLOHJDLEtBQU92dUMsSUFFRSxPQUFkeUMsS0FBSytyQyxNQUFpQnh1QyxFQUFReUMsS0FBSytyQyxRQUNuQy9yQyxLQUFLK3JDLEtBQU94dUMsSUFJTyxPQUFuQnlDLEtBQUtnc0MsV0FBc0I3bEIsRUFBT25tQixLQUFLZ3NDLGFBQ3ZDaHNDLEtBQUtnc0MsVUFBWTdsQixFQUFLclYsVUFFTCxPQUFqQjlRLEtBQUtpc0MsU0FBb0I5bEIsRUFBT25tQixLQUFLaXNDLFdBQ3JDanNDLEtBQUtpc0MsUUFBVTlsQixFQUFLclYsU0FHL0IsQ0FFTSxpQkFBQWs4QixHQUNIaHRDLEtBQUs4ckMsS0FBT2pyQyxLQUFLMEIsT0FBT3ZDLEtBQUttQyxRQUM3Qm5DLEtBQUsrckMsS0FBT2xyQyxLQUFLUSxPQUFPckIsS0FBS21DLE9BQ2hDLENBRU0sT0FBQThxQyxHQUNILE9BQU9qdEMsS0FBSzhyQyxJQUNmLENBRU0sT0FBQW9CLEdBQ0gsT0FBT2x0QyxLQUFLK3JDLElBQ2YsQ0FFTSxZQUFBb0IsR0FDSCxPQUFPbnRDLEtBQUtnc0MsU0FDZixDQUVNLFVBQUFvQixHQUNILE9BQU9wdEMsS0FBS2lzQyxPQUNmLENBRU0sS0FBQW9CLENBQU1DLEVBQXFCQyxHQUM5QixJQUFJQyxHQUFhLEVBQ2pCLElBQUssSUFBSW5CLEVBQU0sRUFBR0EsRUFBTXJzQyxLQUFLbUMsT0FBT3JELE9BQVF1dEMsSUFDZixPQUFyQnJzQyxLQUFLbUMsT0FBT2txQyxLQUNTLE9BQWpCa0IsR0FJSXZ0QyxLQUFLbUMsT0FBT2txQyxJQUFRa0IsS0FIeEJ2dEMsS0FBS21DLE9BQU9rcUMsR0FBT3JzQyxLQUFLbUMsT0FBT2txQyxHQUFPaUIsRUFDdENFLEdBQWEsR0FTckJBLElBQ0F4dEMsS0FBSzhyQyxLQUFPOXJDLEtBQUs4ckMsS0FBT3dCLEVBQ3hCdHRDLEtBQUsrckMsS0FBTy9yQyxLQUFLK3JDLEtBQU91QixFQUUvQixDQUVNLFVBQUFHLENBQVdDLEdBQ2QsSUFBSyxJQUFJckIsRUFBTSxFQUFHQSxFQUFNcnNDLEtBQUttQyxPQUFPckQsT0FBUXV0QyxJQUNmLE9BQXJCcnNDLEtBQUttQyxPQUFPa3FDLEtBQ1pyc0MsS0FBS21DLE9BQU9rcUMsR0FBT3FCLEVBQ2ZBLEVBQVUxdEMsS0FBSzhyQyxPQUNmOXJDLEtBQUs4ckMsS0FBTzRCLEdBRVpBLEVBQVUxdEMsS0FBSytyQyxPQUNmL3JDLEtBQUsrckMsS0FBTzJCLEdBSTNCLENBRU0sUUFBQUMsR0FDSCxPQUFPM3RDLEtBQUs0ckMsS0FDZixDQUVNLGdCQUFBZ0MsR0FDSCxJQUFJQyxFQUFhLEVBQ2pCLElBQUssSUFBSXhCLEVBQU0sRUFBR0EsRUFBTXJzQyxLQUFLbUMsT0FBT3JELE9BQVF1dEMsSUFDZixPQUFyQnJzQyxLQUFLbUMsT0FBT2txQyxLQUNad0IsR0FBYzd0QyxLQUFLbUMsT0FBT2txQyxJQUU5QnJzQyxLQUFLbUMsT0FBT2txQyxHQUFPd0IsRUFDZkEsRUFBYTd0QyxLQUFLOHJDLE9BQ2xCOXJDLEtBQUs4ckMsS0FBTytCLEdBRVpBLEVBQWE3dEMsS0FBSytyQyxPQUNsQi9yQyxLQUFLK3JDLEtBQU84QixFQUd2QixDQUVNLFNBQUFDLEdBQ0gsT0FBTzl0QyxLQUFLbUMsTUFDZixDQUVNLFNBQUE0ckMsR0FDSCxPQUFPL3RDLEtBQUttQyxPQUFPckQsTUFDdEIsQ0FFTSxnQkFBQWt2QyxHQUNILElBQUlDLEVBQWUsRUFDbkIsSUFBSyxJQUFJNUIsRUFBTSxFQUFHQSxFQUFNcnNDLEtBQUttQyxPQUFPckQsT0FBUXV0QyxJQUNmLE9BQXJCcnNDLEtBQUttQyxPQUFPa3FDLElBQ1o0QixJQUdSLE9BQU9BLENBQ1YsQ0FFRCxJQUFBeHdDLEdBQ0ksR0FBSXVDLEtBQUs2ckMsYUFBZTdyQyxLQUFLbUMsT0FBT3JELE9BQVEsQ0FDeEMsSUFBSXV0QyxFQUFNcnNDLEtBQUs2ckMsZUFLZixNQUFPLENBQ0hodUMsTUFBTSxFQUNOTixNQU5ZLElBQUlzc0MsR0FDaEI3cEMsS0FBS3VNLE9BQU8rL0IsV0FBV0QsR0FDdkJyc0MsS0FBS21DLE9BQU9rcUMsSUFNbkIsQ0FFRyxPQURBcnNDLEtBQUs2ckMsYUFBZSxFQUNiLENBQ0hodUMsTUFBTSxFQUNOTixNQUFPLEtBR2xCLENBRUQsQ0FBQ3NZLE9BQU9DLFlBQ0osT0FBTzlWLElBQ1YsUUFHUWt1QyxHQU9ULFdBQUF6dUMsQ0FBWXVzQyxFQUFtQkMsR0FGdkJqc0MsS0FBQTZyQyxhQUFlLEVBR25CN3JDLEtBQUttdUMsTUFBUSxHQUNibnVDLEtBQUtvdUMsU0FBVyxHQUloQixNQUFNQyxFQUZNckMsRUFBVXNDLGVBRUdub0MsT0FBT3FiLFdBQ2hDLElBQ0ksSUFBSStzQixFQUFVdkMsRUFBVWw3QixRQUN4Qnk5QixHQUFXdEMsRUFDWHNDLEVBQVFoL0IsSUFBSSxFQUFHLFFBQ2pCLENBQ0UsSUFBSTZzQixFQUFVdjJCLE9BQU8yb0MsT0FDakJELEVBQVFwb0MsT0FBT2tvQyxHQUNmQSxHQUNBLEdBRUpydUMsS0FBS211QyxNQUFNbGxDLEtBQUttekIsRUFDbkIsQ0FFSixDQUVNLGFBQUFxUyxDQUFjN0MsRUFBYzhDLEdBQy9CLElBQUlDLEVBQVUsSUFBSWhELEdBQVEzckMsS0FBTTRyQyxHQVFoQyxPQVBBK0MsRUFBUWhDLE1BQU1mLEVBQU1WLFNBQ2hCd0QsR0FDQUMsRUFBUWpDLFFBQVFnQyxFQUFXRSxZQUFZaEQsRUFBTVYsVUFHakRsckMsS0FBS291QyxTQUFTbmxDLEtBQUswbEMsR0FFWkEsQ0FDVixDQUVNLGNBQUE3QixDQUFlM21CLEdBRWxCLE1BQU1rb0IsRUFETWxvQixFQUFLbW9CLGVBQ1Fub0MsT0FBT3FiLFdBQ2hDLElBQUssSUFBSTZxQixFQUFNLEVBQUdBLEVBQU1yc0MsS0FBS211QyxNQUFNcnZDLE9BQVF1dEMsSUFDdkMsR0FDSXJzQyxLQUFLbXVDLE1BQU05QixHQUFLbG1DLE9BQU9rb0MsS0FBZ0Jsb0IsRUFBS2hnQixPQUFPa29DLEdBRW5ELE9BQU9oQyxFQUdmLE9BQVEsQ0FDWCxDQUVNLGlCQUFBd0MsQ0FBa0JqRCxHQUNyQixJQUFLLElBQUkrQyxLQUFXM3VDLEtBQUtvdUMsU0FDckIsR0FBSU8sRUFBUWhCLFdBQVc5QyxRQUFRZSxHQUMzQixPQUFPK0MsRUFHZixPQUFPLElBQ1YsQ0FFTSxjQUFBRyxDQUFlaGtCLEdBQ2xCLElBQUssSUFBSTZqQixLQUFXM3VDLEtBQUtvdUMsU0FDckIsR0FBSU8sRUFBUXpELFVBQVlwZ0IsRUFDcEIsT0FBTzZqQixFQUlmLE9BQU8sSUFDVixDQUVNLGNBQUFJLEdBQ0gsSUFBSUMsRUFBcUIsR0FDekIsSUFBSyxJQUFJTCxLQUFXM3VDLEtBQUtvdUMsU0FDckIsR0FBSU8sRUFBUWhCLFdBQVdyRCxlQUFnQixDQUNuQyxJQUFJeGYsRUFBSzZqQixFQUFRaEIsV0FBV3pDLFFBQ3ZCOEQsRUFBSUMsU0FBU25rQixLQUFlLElBQVJBLEdBQ3JCa2tCLEVBQUkvbEMsS0FBSzZoQixFQUVoQixDQUVMLE9BQU9ra0IsQ0FDVixDQUVNLFFBQUExQyxHQUNILE9BQU90c0MsS0FBS211QyxLQUNmLENBRU0sUUFBQWUsR0FDSCxJQUFJNy9CLEVBQVEsR0FDWixJQUFLLElBQUlzL0IsS0FBVzN1QyxLQUFLb3VDLFNBQ3JCLytCLEVBQU1wRyxLQUFLMGxDLEVBQVFsQyxXQUV2QixPQUFPcDlCLENBQ1YsQ0FFRCxJQUFBNVIsR0FDSSxPQUFJdUMsS0FBSzZyQyxhQUFlN3JDLEtBQUtvdUMsU0FBU3R2QyxPQUMzQixDQUNIakIsTUFBTSxFQUNOTixNQUFPeUMsS0FBS291QyxTQUFTcHVDLEtBQUs2ckMsa0JBRzlCN3JDLEtBQUs2ckMsYUFBZSxFQUNiLENBQ0hodUMsTUFBTSxFQUNOTixNQUFPLE1BR2xCLENBRUQsQ0FBQ3NZLE9BQU9DLFlBQ0osT0FBTzlWLElBQ1YsUUFHUW12QyxHQTRDVCxXQUFBMXZDLENBQVkydkMsR0FDUnB2QyxLQUFLb3ZDLFFBQVVBLEVBQ2ZwdkMsS0FBS3F2QyxTQUFXLEdBQ2hCcnZDLEtBQUtzdkMsT0FBUyxJQUNkdHZDLEtBQUt1dkMsS0FBTyxHQUNadnZDLEtBQUt3dkMsb0JBQXFCLEVBQzFCeHZDLEtBQUt5dkMsd0JBQTBCLEdBQy9CenZDLEtBQUswdkMsd0JBQTBCLEdBQy9CMXZDLEtBQUtxdUMsV0FBYSxhQUNsQnJ1QyxLQUFLMnZDLGlCQUFtQixHQUN4QjN2QyxLQUFLNHZDLGlCQUFtQixHQUN4QjV2QyxLQUFLZ3NDLFVBQVksS0FDakJoc0MsS0FBS2lzQyxRQUFVLEtBQ2Zqc0MsS0FBSzR1QyxZQUFjLEdBQ25CNXVDLEtBQUs2dkMsV0FBYSxDQUFDLEdBQ25CN3ZDLEtBQUs4dkMsb0JBQXNCLEdBQzNCOXZDLEtBQUsrdkMsZ0JBQWtCLEdBQ3ZCL3ZDLEtBQUtnd0MsTUFBUSxHQUNiaHdDLEtBQUswdEMsUUFBVSxHQUNmMXRDLEtBQUtpd0MsV0FBYSxHQUNsQmp3QyxLQUFLa3dDLHlCQUEyQixHQUNoQ2x3QyxLQUFLcXFDLFVBQVksR0FDakJycUMsS0FBS213QyxhQUFlLEdBRXBCbndDLEtBQUtvd0MsYUFBZSxJQUFJQyxHQUFLLElBQUssS0FDbENyd0MsS0FBS3N3QyxZQUFjLElBQUlDLEdBQVksRUFBRyxHQUN0Q3Z3QyxLQUFLd3dDLE9BQVMsSUFBSUMsR0FBTyxHQUFJLEdBQUksR0FBSSxJQUVyQ3p3QyxLQUFLMHdDLFdBQWEsRUFDbEIxd0MsS0FBSzJ3QyxlQUFnQixFQUVyQjN3QyxLQUFLaTJCLE9BQVMsR0FDZGoyQixLQUFLc0gsS0FBTyxHQUNadEgsS0FBSzR3QyxJQUFNLEdBQ1g1d0MsS0FBSzZ3QyxJQUFNLEdBQ1g3d0MsS0FBSzh3QyxRQUFVLEdBQ2Y5d0MsS0FBS3E3QixNQUFRLEdBQ2JyN0IsS0FBSyt3QyxRQUFVLEdBQ2Yvd0MsS0FBS2d4QyxPQUFTLEdBQ2RoeEMsS0FBS2l4QyxjQUFnQixHQUVyQmp4QyxLQUFLb3VDLFNBQVcsSUFDbkIsQ0FFTSxZQUFBOEMsQ0FBYXBtQixHQUNoQixJQUFLLElBQUk4Z0IsS0FBUzVyQyxLQUFLb3ZDLFFBQ25CLEdBQUl4RCxFQUFNVixVQUFZcGdCLEVBQ2xCLE9BQU84Z0IsQ0FHbEIsUUFHUXVGLEdBTVQsV0FBQTF4QyxHQUNJTyxLQUFLOHFCLElBQU0sRUFDWDlxQixLQUFLNkksS0FBTyxHQUNaN0ksS0FBS294QyxNQUFRLEdBQ2JweEMsS0FBS3F4QyxNQUFRLEVBQ2hCLFFBZVFDLEdBeUJULFdBQUE3eEMsR0FDSU8sS0FBS3V4QyxNQUFRLEdBQ2J2eEMsS0FBS3d4QyxXQUFhLE9BQ2xCeHhDLEtBQUt5eEMsV0FBYSxHQUNsQnp4QyxLQUFLMHhDLGdCQUFrQixHQUN2QjF4QyxLQUFLMnhDLFdBQWEsR0FDbEIzeEMsS0FBSzR4QyxXQUFhLEdBQ2xCNXhDLEtBQUs2eEMsZ0JBQWtCLEdBQ3ZCN3hDLEtBQUs4eEMsVUFBWSxHQUNqQjl4QyxLQUFLK3hDLGtCQUFvQixLQUN6Qi94QyxLQUFLZ3lDLGtCQUFvQixHQUN6Qmh5QyxLQUFLaXlDLHFCQUF1QixLQUM1Qmp5QyxLQUFLa3lDLHFCQUF1QixHQUM1Qmx5QyxLQUFLOHJDLEtBQU8sR0FDWjlyQyxLQUFLK3JDLEtBQU8sR0FDWi9yQyxLQUFLbXlDLGFBQWUsR0FDcEJueUMsS0FBS295QyxrQkFBbUIsRUFHeEJweUMsS0FBS3F5QyxZQUFhLEVBQ2xCcnlDLEtBQUtzeUMsZUFBaUIsR0FDdEJ0eUMsS0FBS3V5QyxrQkFBb0IsR0FDekJ2eUMsS0FBS3d5QyxjQUFnQixHQUNyQnh5QyxLQUFLeXlDLGtCQUFvQixFQUM1QixDQUVNLFlBQUFDLEdBQ0gsT0FBTzdKLEdBQVU4SixPQUNwQixFQUdDLE1BQU9DLFdBQWlCdEIsR0FZMUIsV0FBQTd4QyxHQUNJSSxRQUNBRyxLQUFLNnlDLFVBQVksR0FDakI3eUMsS0FBSzh5QyxVQUFZLEdBQ2pCOXlDLEtBQUsreUMsU0FBVyxHQUNoQi95QyxLQUFLZ3pDLFVBQVksR0FDakJoekMsS0FBS2l6QyxXQUFhLEdBQ2xCanpDLEtBQUtrekMsaUJBQW1CLEdBQ3hCbHpDLEtBQUttekMsaUJBQW1CLEdBQ3hCbnpDLEtBQUtvekMsVUFBWSxHQUNqQnB6QyxLQUFLcXpDLFFBQVUsR0FDZnJ6QyxLQUFLc3pDLGNBQWdCLEVBQ3hCLENBRU0sWUFBQVosR0FDSCxPQUFPN0osR0FBVTBLLElBQ3BCLEVBR0MsTUFBT0MsV0FBZ0JsQyxHQUl6QixXQUFBN3hDLEdBQ0lJLFFBQ0FHLEtBQUt5ekMsU0FBVyxHQUNoQnp6QyxLQUFLc3pDLGNBQWdCLEVBQ3hCLENBRU0sWUFBQVosR0FDSCxPQUFPN0osR0FBVTZLLEdBQ3BCLFFBR1FDLEdBbUJULFdBQUFsMEMsR0FDSU8sS0FBS3V4QyxNQUFRLEdBQ2J2eEMsS0FBSzZHLEtBQU8sR0FDWjdHLEtBQUs0ekMsVUFBWSxHQUNqQjV6QyxLQUFLNnpDLFNBQVcsR0FDaEI3ekMsS0FBSzh6QyxNQUFRLEdBQ2I5ekMsS0FBSyt6QyxrQkFBb0IsSUFDekIvekMsS0FBS2cwQyxTQUFXLEdBQ2hCaDBDLEtBQUtpMEMsMkJBQTRCLEVBQ2pDajBDLEtBQUtrMEMsaUJBQW1CLEVBR3hCbDBDLEtBQUtxeUMsWUFBYSxFQUNsQnJ5QyxLQUFLc3lDLGVBQWlCLEdBQ3RCdHlDLEtBQUt1eUMsa0JBQW9CLEdBQ3pCdnlDLEtBQUt3eUMsY0FBZ0IsR0FDckJ4eUMsS0FBS3l5QyxrQkFBb0IsRUFDNUIsQ0FFTSxZQUFBQyxHQUNILE9BQU83SixHQUFVc0wsR0FDcEIsUUFHUUMsR0FJVCxXQUFBMzBDLEdBQ0lPLEtBQUtxMEMsU0FBVyxHQUNoQnIwQyxLQUFLa08sTUFBUSxFQUNoQixDQUVNLFlBQUF3a0MsR0FDSCxPQUFPN0osR0FBVXlMLE9BQ3BCLFFBR1FDLEdBb0NULFdBQUE5MEMsR0FDSU8sS0FBS3cwQyxLQUFPLFNBQ1p4MEMsS0FBSzJ1QyxRQUFVLEdBQ2YzdUMsS0FBS3kwQyxZQUFjLE1BQ25CejBDLEtBQUswMEMsVUFBWSxHQUNqQjEwQyxLQUFLOHJDLEtBQU8sR0FDWjlyQyxLQUFLK3JDLEtBQU8sR0FDWi9yQyxLQUFLc2dCLE1BQVEsS0FDYnRnQixLQUFLMjBDLGVBQWdCLEVBQ3JCMzBDLEtBQUs0MEMsVUFBWSxHQUNqQjUwQyxLQUFLNjBDLG1CQUFvQixFQUd6QjcwQyxLQUFLODBDLGdCQUFrQixLQUN2QjkwQyxLQUFLKzBDLGlCQUFtQixLQUN4Qi8wQyxLQUFLZzFDLGtCQUFvQixLQUd6QmgxQyxLQUFLaTFDLFlBQWEsRUFDbEJqMUMsS0FBS2sxQyxZQUFhLEVBQ2xCbDFDLEtBQUttMUMsZUFBZ0IsRUFDckJuMUMsS0FBS28xQyxrQkFBbUIsRUFDeEJwMUMsS0FBS3ExQyxZQUFjLEtBQ25CcjFDLEtBQUtzMUMsb0JBQXFCLEVBQzFCdDFDLEtBQUt1MUMsZUFBaUIsR0FDdEJ2MUMsS0FBS3cxQyxrQkFBb0IsWUFHekJ4MUMsS0FBS3kxQyxnQkFBaUIsRUFDdEJ6MUMsS0FBSzAxQyxXQUFhLEdBQ2xCMTFDLEtBQUsyMUMsNEJBQTZCLEVBR2xDMzFDLEtBQUs0MUMsYUFBZSxHQUNwQjUxQyxLQUFLNjFDLGdCQUFrQixJQUMxQixDQUVNLFlBQUFuRCxHQUNILE9BQU83SixHQUFVaU4sS0FDcEIsUUFHUUMsR0FRVCxXQUFBdDJDLEdBQ0lPLEtBQUsydUMsUUFBVSxJQUNmM3VDLEtBQUt5MEMsWUFBYyxNQUNuQnowQyxLQUFLZzJDLFlBQWMsV0FDbkJoMkMsS0FBSzhyQyxLQUFPLEtBQ1o5ckMsS0FBSytyQyxLQUFPLEtBQ1ovckMsS0FBS3NnQixNQUFRLElBQ2hCLENBRU0sWUFBQW95QixHQUNILE9BQU83SixHQUFVb04sT0FDcEIsUUFHUUMsR0FhVCxXQUFBejJDLEdBQ0lPLEtBQUt1eEMsTUFBUSxHQUNidnhDLEtBQUsydUMsUUFBVSxJQUNmM3VDLEtBQUtnMkMsWUFBYyxhQUNuQmgyQyxLQUFLekMsTUFBUSxHQUNieUMsS0FBS20yQyxVQUFZLEdBQ2pCbjJDLEtBQUtvMkMsV0FBYSxVQUNsQnAyQyxLQUFLbUUsTUFBUSxHQUNibkUsS0FBS3EyQyxXQUFhLEdBQ2xCcjJDLEtBQUtzMkMsWUFBYSxFQUNsQnQyQyxLQUFLdTJDLFlBQWMsRUFDbkJ2MkMsS0FBS3cyQyxZQUFjLEVBQ3RCLENBRU0sWUFBQTlELEdBQ0gsT0FBTzdKLEdBQVU0TixNQUNwQixRQUdRcEcsR0FJVCxXQUFBNXdDLENBQVkreEIsRUFBVy9QLEdBQ25CemhCLEtBQUtzeUIsTUFBUWQsRUFDYnh4QixLQUFLMDJDLE9BQVNqMUIsQ0FDakIsUUFHUTh1QixHQUlULFdBQUE5d0MsQ0FBWWQsRUFBV21HLEdBQ25COUUsS0FBS3JCLEVBQUlBLEVBQ1RxQixLQUFLOEUsRUFBSUEsQ0FDWixDQUVNLGVBQUE2eEMsQ0FBZ0J2aEMsR0FDbkIsSUFBSWs3QixFQUFjdHdDLEtBQUtyQixFQUFJcUIsS0FBSzhFLEVBQzVCd3RCLEVBQVFvWSxZQUFZdDFCLEVBQUtrZCxNQUFRZ2UsR0FBYTNkLFFBQVEsSUFDMUQsT0FBTyxJQUFJMGQsR0FBSy9kLEVBQU9sZCxFQUFLc2hDLE9BQy9CLFFBR1FqRyxHQU1ULFdBQUFoeEMsQ0FBWWdGLEVBQWFyRixFQUFlc0YsRUFBZ0JoRyxHQUNwRHNCLEtBQUt5RSxJQUFNQSxFQUNYekUsS0FBS1osTUFBUUEsRUFDYlksS0FBSzBFLE9BQVNBLEVBQ2QxRSxLQUFLdEIsS0FBT0EsQ0FDZixRQUdRaXFDLEdBSVQsV0FBQWxwQyxDQUFZc0csR0FJUixHQUhBL0YsS0FBSzRFLFdBQWEsRUFDbEI1RSxLQUFLNkUsV0FBYSxFQUVPLGlCQUFka0IsRUFBd0IsQ0FDL0IsSUFBSTRNLEVBQVM1TSxFQUFVME4sTUFDbkIsOERBQ0ZkLE9BQ0VBLElBQ0EzUyxLQUFLNEUsV0FBYThsQyxXQUFXLzNCLEVBQU9oVSxHQUNwQ3FCLEtBQUs2RSxXQUFhNmxDLFdBQVcvM0IsRUFBTzdOLEdBRTNDLENBQ0osUUFPUTh4QyxHQU1ULFdBQUFuM0MsQ0FBWW8zQyxFQUFrQkMsR0FDMUI5MkMsS0FBSzYyQyxTQUFXQSxFQUNoQjcyQyxLQUFLODJDLFdBQWFBLEVBQ2xCOTJDLEtBQUtxdkMsU0FBVyxLQUNoQnJ2QyxLQUFLKzJDLFVBQVksRUFDcEIsUUFHUUMsR0FXVCxXQUFBdjNDLEdBQ0lPLEtBQUtpM0MsVUFBWSxFQUNqQmozQyxLQUFLazNDLGNBQWdCLEVBQ3JCbDNDLEtBQUttM0MsbUJBQXFCLEVBQzFCbjNDLEtBQUtvM0MsZ0JBQWtCLEVBQ3ZCcDNDLEtBQUtxM0MsYUFBZSxHQUNwQnIzQyxLQUFLczNDLFFBQVV6eEMsT0FBTzJvQyxPQUFPLElBQzdCeHVDLEtBQUt1M0MsUUFBVTF4QyxPQUFPMm9DLE9BQU8sSUFDN0J4dUMsS0FBS3czQyxtQkFBb0IsRUFDekJ4M0MsS0FBS3kzQyxtQkFBb0IsQ0FDNUIsRUN2Z0NMLE1BQU1wYixHQTdCTixXQUlJLE1BQU1xYixFQUFXLENBQUMsS0FBTSxJQUFLLEtBQU0sS0FFN0JDLEVBQVUsQ0FBQyxLQUFNLEtBR2pCQyxFQUFVLENBQUMsS0FBTSxJQUFLLElBRTVCLElBQUl2YixFQUFhLEdBQ2pCLElBQUssSUFBSXdiLEtBQVdILEVBQ2hCLElBQUssSUFBSUksS0FBVUgsRUFDZixJQUFLLElBQUlJLEtBQVVILEVBQVMsQ0FDeEIsSUFBSUksRUFBTSxHQUFHSCxLQUFXQyxJQUNULEtBQVhDLElBQ0FDLEdBQU8sSUFBSUQsS0FFWEYsRUFBUXJsQyxTQUFTLE9BQ2pCd2xDLEdBQU8sTUFFWDNiLEVBQVdwekIsS0FBSyt1QyxFQUNuQixDQUlULE9BQU8zYixDQUNYLENBQ21CNGIsWUFFSEMsR0FDWkMsRUFDQXhJLEVBQ0FDLEdBRUEsSUFBS0QsSUFBcUJDLEVBQWtCLE9BQU91SSxFQUVuRCxJQUFJQyxFQUFhRCxFQU1qQixHQUxJQyxFQUFXQyxXQUFXLE9BQ3RCRCxFQUFhQSxFQUFXandDLE1BQU0sSUFJOUJ3bkMsRUFBa0IsQ0FDbEIsSUFFSWxGLEVBQVEsSUFBSW4wQixPQUZELEtBQU9xNUIsRUFBbUIsSUFFUixNQUM3QmxGLEVBQU1oaUMsS0FBSzJ2QyxLQUNYQSxFQUFhQSxFQUFXdmxCLFFBQVE0WCxFQUFPLElBRTlDLENBR0QsR0FBSW1GLEVBQWtCLENBQ2xCLElBRUluRixFQUFRLElBQUluMEIsT0FGRCxJQUFNczVCLEVBQW1CLEtBRVAsTUFDN0JuRixFQUFNaGlDLEtBQUsydkMsS0FDWEEsRUFBYUEsRUFBV3ZsQixRQUFRNFgsRUFBTyxJQUU5QyxDQUdELE9BQU8yTixDQUNYLENBRWdCLFNBQUFFLEdBQVVDLEVBQWlCbEssR0FDdkMsSUFBSWxvQyxFQUFja29DLEVBR2RrSyxFQUFRejVDLE9BQVMsR0FDakJ5NUMsRUFBUUYsV0FBVyxPQUNuQkUsRUFBUUMsU0FBUyxRQUVqQkQsRUFBVUEsRUFBUTlrQixVQUFVLEVBQUc4a0IsRUFBUXo1QyxPQUFTLElBR25CLGFBQTdCdXZDLEVBQVc3dEIsZ0JBQ1hyYSxFQUFTTixPQUFPMm9DLE9BQU9pSyxVQUczQixJQUFJdHlCLEVBQU90Z0IsT0FBTzJvQyxPQUFPK0osRUFBU3B5QyxHQUFRLEdBSzFDLE9BRkFnZ0IsRUFBT0EsRUFBS3V5QixRQUFRLE9BRWJ2eUIsQ0FDWCxDQUVBLFNBQVN3eUIsR0FDTEMsRUFDQUMsRUFDQUMsR0FBeUIsR0FFekIsSUFBS0YsSUFBZ0JDLEdBQTBCLElBQWpCQSxFQUFNLzVDLE9BQ2hDLE1BQU8sQ0FBQyxLQUFNODVDLEdBR2xCLElBQUlyN0MsRUFBUSxLQUNaLE1BQU13N0MsRUFBVyxxQkFBdUJGLEVBQU12bUMsS0FBSyxLQUFPLEtBRXBEbTRCLEVBQVEsSUFBSW4wQixPQUFPeWlDLEVBQVUsTUFDbkMsSUFBSXRsQyxFQUFRZzNCLEVBQU1ocUIsS0FBS200QixHQUN2QixPQUNJbmxDLFFBQ3dCLElBQWpCQSxFQUFNZCxhQUNpQixJQUF2QmMsRUFBTWQsT0FBT3BWLFFBR3BCQSxFQUFRbXRDLFdBQVdqM0IsRUFBTWQsT0FBT3BWLE9BQzVCaTJCLE9BQU9tWCxTQUFTcHRDLEtBQVdpMkIsT0FBTzF2QixNQUFNdkcsS0FDcEN1N0MsSUFDQUYsRUFBY0EsRUFBWS9sQixRQUFRNFgsRUFBTyxLQUl0QyxDQUFDbHRDLEVBQU9xN0MsSUFJaEIsQ0FBQyxLQUFNQSxFQUNsQixDQUVNLFNBQVVJLEdBQW9CSixHQVNoQyxJQUFLQSxFQUFhLE9BQU8sS0FFekIsSUFBSXZ0QixFQUFxQnhsQixPQUFPMm9DLE9BQU9uakIsU0FBUyxHQUM1QzR0QixHQUFXLEVBRVhDLEdBQWdCLEVBQ2hCTixFQUFZUCxXQUFXLE9BQ3ZCYSxHQUFnQixFQUNoQk4sRUFBY0EsRUFBWW5sQixVQUFVLElBRXBDbWxCLEVBQVlQLFdBQVcsT0FDdkJhLEdBQWdCLEVBQ2hCTixFQUFjQSxFQUFZbmxCLFVBQVUsSUFHeEMsSUFBSTBsQixFQUFZLE1BQ2ZBLEVBQVdQLEdBQWVELEdBQStCQyxFQUFhLENBQ25FLE9BQ0EsUUFDQSxJQUNBLE1BRWMsT0FBZE8sSUFDSUQsSUFDQUMsSUFBYyxHQUVsQjl0QixFQUFTOWIsSUFBSTRwQyxFQUFXLFNBQ3hCRixHQUFXLEdBR2YsSUFBSUcsRUFBYSxNQUNoQkEsRUFBWVIsR0FBZUQsR0FBK0JDLEVBQWEsQ0FDcEUsUUFDQSxTQUNBLE1BRWUsT0FBZlEsSUFDSUYsSUFDQUUsSUFBZSxHQUVuQi90QixFQUFTOWIsSUFBSTZwQyxFQUFZLFVBQ3pCSCxHQUFXLEdBR2YsSUFBSUksRUFBWSxNQUNmQSxFQUFXVCxHQUFlRCxHQUErQkMsRUFBYSxDQUNuRSxPQUNBLFFBQ0EsSUFDQSxNQUVjLE9BQWRTLElBQ0lILElBQ0FHLElBQWMsR0FFbEJodUIsRUFBUzliLElBQUk4cEMsRUFBVyxTQUN4QkosR0FBVyxHQUdmLElBQUlLLEVBQVcsTUFDZEEsRUFBVVYsR0FBZUQsR0FBK0JDLEVBQWEsQ0FDbEUsTUFDQSxPQUNBLElBQ0EsTUFFYSxPQUFiVSxJQUNJSixJQUNBSSxJQUFhLEdBRWpCanVCLEVBQVM5YixJQUFJK3BDLEVBQVUsUUFDdkJMLEdBQVcsR0FHZixJQUFJTSxFQUFZLE1BQ2ZBLEVBQVdYLEdBQWVELEdBQStCQyxFQUFhLENBQ25FLE9BQ0EsUUFDQSxJQUNBLE1BRWMsT0FBZFcsSUFDSUwsSUFDQUssSUFBYyxHQUVsQmx1QixFQUFTOWIsSUFBSWdxQyxFQUFXLFNBQ3hCTixHQUFXLEdBR2YsSUFBSU8sRUFBYyxNQUNqQkEsRUFBYVosR0FBZUQsR0FBK0JDLEVBQWEsQ0FDckUsU0FDQSxVQUNBLE1BRWdCLE9BQWhCWSxJQUNJTixJQUNBTSxJQUFnQixHQUVwQm51QixFQUFTOWIsSUFBSWlxQyxFQUFhLFdBQzFCUCxHQUFXLEdBR2YsSUFBSVEsRUFBYyxLQWVsQixPQWRDQSxFQUFhYixHQUFlRCxHQUErQkMsRUFBYSxDQUNyRSxTQUNBLFVBQ0EsSUFDQSxNQUVnQixPQUFoQmEsSUFDSVAsSUFDQU8sSUFBZ0IsR0FFcEJwdUIsRUFBUzliLElBQUlrcUMsRUFBYSxXQUMxQlIsR0FBVyxHQUdWQSxFQUNFNXRCLEVBRGUsSUFFMUIsQ0FFZ0IsU0FBQXF1QixHQUNaQyxFQUNBdEwsR0FFQSxJQUFJbG9CLEVBQU8sS0FDUGtGLEVBQVcydEIsR0FBb0JXLEdBQ25DLE9BQUl0dUIsR0FBWXhsQixPQUFPMm9DLE9BQU9vTCxXQUFXdnVCLEtBQ3JDbEYsRUFBTzB6QixHQUFheEwsR0FDcEJsb0IsRUFBT0EsRUFBSzVXLElBQUk4YixHQUVabEYsR0FBUUEsRUFBSzJ6QixXQUNOM3pCLENBS25CLENBRWdCLFNBQUE0ekIsR0FBVTV6QixFQUFja29CLEdBQ3BDLE9BQUksTUFBT2xvQixFQUE4QyxLQUV4QixhQUE3QmtvQixFQUFXN3RCLGNBQ0oyRixFQUFLaGdCLFNBRVRnZ0IsRUFBS2hnQixPQUFPa29DLEVBQ3ZCLENBRWdCLFNBQUEyTCxHQUNaQyxFQUNBNUwsR0FJQSxPQUFPaUssR0FET3lCLEdBREhsMEMsT0FBTzJvQyxPQUFPeUwsR0FDSzVMLEdBQ0pBLEVBQzlCLENBRU0sU0FBVXdMLEdBQWF4TCxHQUd6QixPQUFPaUssR0FEUXlCLEdBREhsMEMsT0FBTzJvQyxTQUNhSCxHQUNMQSxFQUMvQixDQUdnQixTQUFBNkwsR0FBVUMsRUFBVUMsR0FHaEMsSUFEQSxJQUFJbjhDLEdBREptOEMsRUFBTUEsRUFBSXZuQixRQUFRLE1BQU8sS0FDYnJwQixNQUFNLEtBQ1RySyxFQUFJLEVBQUc0RCxFQUFJOUUsRUFBRWEsT0FBUUssRUFBSTRELElBQUs1RCxFQUFHLENBQ3RDLElBQUl1RCxFQUFJekUsRUFBRWtCLEdBQ1YsS0FBSXVELEtBQUt5M0MsR0FHTCxPQUFPLEtBRlBBLEVBQU1BLEVBQUl6M0MsRUFJakIsQ0FDRCxNQUFtQixpQkFBUnkzQyxHQUFvQjcxQyxNQUFNcUgsUUFBUXd1QyxHQUNsQ0EsRUFDZSxpQkFBUkEsR0FBbUMsa0JBQVJBLEVBQ2xDQSxFQUFJMzRCLFdBRVIsSUFDWCxDQUdnQixTQUFBNjRCLEdBQVdELEVBQWFFLEdBQ3BDLE1BQU1DLEVBQU1qMkMsTUFBTVYsS0FBS3cyQyxHQUNqQkksRUFBUUQsRUFBSUUsV0FBVzN4QyxHQUFNQSxJQUFNd3hDLElBQ25DSSxFQUFPSCxFQUFJcjRDLFVBQVV1NEMsV0FBVzN4QyxHQUFNQSxJQUFNd3hDLElBQ2xELE9BQWtCLElBQVhFLElBQTBCLElBQVZFLEVBQ2pCTixFQUNBQSxFQUFJM21CLFVBQVUrbUIsRUFBT0osRUFBSXQ3QyxPQUFTNDdDLEVBQzVDLENBRU0sU0FBVUMsR0FBbUJ6a0IsR0FDL0IsR0FBYyxPQUFWQSxFQUFnQixPQUFPLEtBRzNCLElBR0l1VSxFQUFRLElBQUluMEIsT0FGWixtRUFFNkIsS0FVakMsT0FSYTRmLEVBQU1yRCxRQUFRNFgsR0FBTyxJQUFJM2dDLEtBQ2xDLElBQUk2SSxFQUFTN0ksRUFBS0EsRUFBS2hMLE9BQVMsR0FDaEMsT0FBSTZULEdBQVVBLEVBQU9pb0MsTUFDVmpvQyxFQUFPaW9DLE1BQU1yeEMsT0FFakIsRUFBRSxHQUlqQixVQUVnQnN4QyxHQUNaQyxFQUNBM0ssRUFBNkIsTUFLN0IsSUFBSTV5QyxFQUFRLEtBQ1I4c0MsRUFBWXZCLEdBQVV0VixPQUMxQixHQUF1QixpQkFBWnNuQixFQUVQLEdBQUlBLEVBQVE3TCxTQUFTLEtBQU0sQ0FDdkIsSUFBSWlLLEdBQWdCLEVBQ2hCNEIsRUFBUXpDLFdBQVcsT0FDbkJhLEdBQWdCLEVBQ2hCNEIsRUFBVUEsRUFBUXJuQixVQUFVLElBRWhDLElBQUlzbkIsRUFBWWwxQyxPQUFPMm9DLE9BQU9zTSxFQUFTemUsSUFBWSxHQUMvQzBlLEVBQVVqQixZQUNWdjhDLEVBQVF3OUMsRUFBVUMsS0FDZG4xQyxPQUFPMm9DLE9BQU8sUUFBUyxTQUFTLEdBQ2hDLFdBRUEwSyxJQUNBMzdDLElBQVMsR0FFYjhzQyxFQUFZdkIsR0FBVW1TLEtBRTdCLE1BQ0csR0FBSTlLLEVBQWMsQ0FFZCxNQUFNK0ssRUFBT3A3QyxPQUFPbzdDLEtBQUsvSyxHQUN6QixJQUFLLElBQUl4d0MsS0FBT3U3QyxFQUNaLEdBQW1CLGlCQUFSdjdDLEVBQWtCLENBQ3pCLElBQUk4cUMsRUFBUSxJQUFJbjBCLE9BQU8zVyxFQUFLLE1BRTVCLEdBQ0k4cUMsRUFBTWhpQyxLQUFLcXlDLElBQ1h0bkIsT0FBT21YLFNBQVN3RixFQUFheHdDLElBQy9CLENBQ0UsSUFBSXc3QyxFQUFtQmhMLEVBQWF4d0MsR0FBSzZoQixXQUN6Q3M1QixFQUFVQSxFQUFRam9CLFFBQVE0WCxFQUFPMFEsR0FHakMsS0FDSCxDQUNKLENBR0w1OUMsRUFBUW10QyxXQUFXb1EsR0FDZnRuQixPQUFPMXZCLE1BQU12RyxLQUNiQSxFQUFRLEtBRWYsTUFDR0EsRUFBUW10QyxXQUFXb1EsR0FDZnRuQixPQUFPMXZCLE1BQU12RyxLQUNiQSxFQUFRLFVBSU0saUJBQVp1OUMsSUFDZHY5QyxFQUFRdTlDLEdBR1osTUFBTyxDQUFFbHlDLEtBQU15aEMsRUFBVzlzQyxNQUFPQSxFQUNyQyxDQUdNLFNBQVU2OUMsR0FDWjV6QyxFQUNBNnpDLEVBQXFCLEdBQ3JCMzBCLEVBQWlCLElBRWpCLElBQUk0MEIsRUFBWUMsR0FBVSxRQUFRbjBDLE9BQU8sT0FDekMsSUFBSW8wQyxFQUFZRixFQUNYbDBDLE9BQU8sUUFDUEksS0FBS0EsR0FDTEgsS0FBSyxLQUFNLE9BQ1hBLEtBQUssS0FBTSxPQUNaZzBDLEdBQ0FHLEVBQVVuMEMsS0FBSyxRQUFTZzBDLEdBRXhCMzBCLEdBQ0E4MEIsRUFBVW4wQyxLQUFLLFlBQWEsVUFBWXFmLEVBQVMsS0FFckQsSUFBSXRSLEVBQU9rbUMsRUFBVXZ2QyxPQUFPMHZDLFVBRTVCLE9BREFILEVBQVV2ekMsU0FDSCxDQUFFdXFCLE1BQU9sZCxFQUFLa2QsTUFBT29rQixPQUFRdGhDLEVBQUtzaEMsT0FDN0MsVUFHZ0JnRixHQUFXQyxFQUFXQyxFQUFjQyxHQUNoRCxJQUVJQyxHQUY0QyxFQUFqQ3BSLFdBQVdpUixFQUFLdDBDLEtBQUssV0FFVnUwQyxFQUN0QkcsR0FGOEMsRUFBbENyUixXQUFXaVIsRUFBS3QwQyxLQUFLLFlBRVR3MEMsRUFDNUJGLEVBQUt0MEMsS0FBSyxRQUFTeTBDLEdBQ25CSCxFQUFLdDBDLEtBQUssU0FBVTAwQyxFQUN4QixVQUVnQkMsR0FBU0wsRUFBV00sRUFBZ0JDLEdBQ2hELElBQUlDLEVBQVEsSUFBSXhULEdBQVVnVCxFQUFLdDBDLEtBQUssY0FDcENzMEMsRUFBS3QwQyxLQUNELFlBQ0EsY0FDSzgwQyxFQUFNdjNDLFdBQWFxM0MsR0FDcEIsS0FDQ0UsRUFBTXQzQyxXQUFhcTNDLEdBQ3BCLElBRVosQ0FHQSxTQUFTRSxHQUFVNTBDLEdBTWYsT0FEQUEsR0FEQUEsR0FEQUEsRUFBT0EsRUFBS3FyQixRQUFRLHNCQUF1QixLQUMvQkEsUUFBUSxjQUFlLE1BQ3ZCQSxRQUFRLE9BQVEsTUFFaEMsQ0MxWEEsTUFBTXdwQixHQUlMLGtCQUFXQyxHQUVWLE1BQU8sT0FDUCxDQUtELGVBQU85NkIsR0FDTixNQUFPLHdDQUEwQzY2QixHQUFLQyxPQUN0RCxDQVFELGlCQUFPQyxDQUFXQyxHQUdqQixPQUZBSCxHQUFLSSxhQUFlNTdDLEtBQUtRLElBQUltN0MsRUFBUTE5QyxPQUFRdTlDLEdBQUtJLGNBQ2xESixHQUFLSyxVQUFVRixHQUFXLEVBQ25CSCxFQUNQLENBU0Qsa0JBQU9NLENBQVlILEVBQVNJLEVBQVlDLEdBU3ZDLE9BUkFSLEdBQUtTLGNBQWdCajhDLEtBQUtRLElBQUltN0MsRUFBUTE5QyxPQUFRdTlDLEdBQUtTLGVBQ25EVCxHQUFLVSxXQUFXUCxHQUFXSSxFQUN2QkMsRUFDSFIsR0FBS1csa0JBQWtCenRDLElBQUlpdEMsR0FHM0JILEdBQUtXLGtCQUFrQng4QyxPQUFPZzhDLEdBRXhCSCxFQUNQLENBT0Qsd0JBQU9ZLENBQWtCM0MsR0FFeEIsT0FEQStCLEdBQUthLDRCQUE0QjN0QyxJQUFJK3FDLEdBQzlCK0IsRUFDUCxDQVFELGlCQUFPYyxDQUFXQyxFQUFjQyxHQUUvQixPQURBaEIsR0FBS2lCLFNBQVNGLEdBQWdCQyxFQUN2QmhCLEVBQ1AsQ0FPRCxvQkFBT2tCLENBQWNmLEdBS3BCLGNBSk9ILEdBQUtLLFVBQVVGLEdBQ2xCQSxFQUFRMTlDLFNBQVd1OUMsR0FBS0ksZUFDM0JKLEdBQUtJLGFBQWVKLEdBQUttQixhQUFhbkIsR0FBS0ssWUFFckNMLEVBQ1AsQ0FNRCx3QkFBT29CLEdBSU4sT0FIQXBCLEdBQUtLLFVBQVksR0FDakJMLEdBQUtJLGFBQWUsRUFFYkosRUFDUCxDQU9ELDJCQUFPcUIsQ0FBcUJwRCxHQUUzQixPQURBK0IsR0FBS2EsNEJBQTRCMThDLE9BQU84NUMsR0FDakMrQixFQUNQLENBT0QscUJBQU9zQixDQUFlbkIsR0FRckIsY0FQT0gsR0FBS1UsV0FBV1AsR0FFbkJBLEVBQVExOUMsU0FBV3U5QyxHQUFLUyxnQkFDM0JULEdBQUtTLGNBQWdCVCxHQUFLbUIsYUFBYW5CLEdBQUtVLGFBRTdDVixHQUFLVyxrQkFBa0J4OEMsT0FBT2c4QyxHQUV2QkgsRUFDUCxDQU1ELHlCQUFPdUIsR0FJTixPQUhBdkIsR0FBS1UsV0FBYSxHQUNsQlYsR0FBS1MsY0FBZ0IsRUFFZFQsRUFDUCxDQU9ELG9CQUFPd0IsQ0FBY1QsR0FFcEIsY0FET2YsR0FBS2lCLFNBQVNGLEdBQ2RmLEVBQ1AsQ0FNRCx3QkFBT3lCLEdBR04sT0FGQXpCLEdBQUtpQixTQUFXLEdBRVRqQixFQUNQLENBT0QsUUFBSS9CLEdBQ0gsT0FBT3Q2QyxLQUFLKzlDLEtBQUtoYSxPQUFPL2pDLEtBQUtzQyxNQUM3QixDQUtELFFBQUkwN0MsR0FDSCxPQUFPaCtDLEtBQUsrOUMsS0FBS2xwQixXQUFXNzBCLEtBQUtzQyxNQUNqQyxDQU9ELFdBQUE3QyxDQUFZcytDLEdBR1gvOUMsS0FBSys5QyxLQUFPQSxFQUNaLzlDLEtBQUtzQyxNQUFRLENBQ2IsQ0FNRCxZQUFPMmtCLENBQU04MkIsR0FDWixPQUFPLElBQUsxQixHQUFLMEIsR0FBTzkyQixPQUN4QixDQU9ELG1CQUFPdTJCLENBQWFyRCxHQUNuQixPQUFPdDVDLEtBQUtRLElBQUksS0FBTXZCLE9BQU9vN0MsS0FBS2YsR0FBSzF3QyxLQUFJL0csR0FBS0EsRUFBRTVELFNBQ2xELENBT0QscUJBQU9tL0MsQ0FBZUMsR0FDckIsT0FBUUEsR0FBTSxJQUFNQSxHQUFNLEVBQzFCLENBT0QsdUJBQU9DLENBQWlCQyxHQUN2QixPQUFPL0IsR0FBS1UsV0FBV3FCLElBQVcsQ0FDbEMsQ0FPRCx3QkFBT0MsQ0FBa0JILEdBQ3hCLE9BQVNBLEdBQU0sSUFBTUEsR0FBTSxJQUN6QkEsR0FBTSxJQUFNQSxHQUFNLEtBQ2xCQSxHQUFNLE1BQVE3QixHQUFLVSxXQUFXL29CLE9BQU9zcUIsYUFBYUosS0FDbEQ3QixHQUFLYSw0QkFBNEI1OEMsSUFBSTB6QixPQUFPc3FCLGFBQWFKLEdBQzNELENBTUQsdUJBQU9LLENBQWlCTCxHQUN2QixPQUFPN0IsR0FBS2dDLGtCQUFrQkgsSUFBTzdCLEdBQUs0QixlQUFlQyxFQUN6RCxDQU9ELFVBQUFNLENBQVdDLEdBQ1YsTUFBTWg5QyxFQUFRLElBQUlpSCxNQUFNKzFDLEVBQVUsaUJBQW1CeitDLEtBQUtzQyxPQUcxRCxNQUZBYixFQUFNYSxNQUFRdEMsS0FBS3NDLE1BQ25CYixFQUFNaTlDLFlBQWNELEVBQ2RoOUMsQ0FDTixDQVFELE9BQUFrOUMsQ0FBUTkxQyxFQUFNa0QsR0FDYixHQUFJc3dDLEdBQUt1QyxNQUFNLzFDLEdBQU8sQ0FDckIsTUFBTWcyQyxFQUFNLENBQUU3NEMsUUFBU2hHLEtBQU0rTCxRQUU3QixPQURBc3dDLEdBQUt1QyxNQUFNRSxJQUFJajJDLEVBQU1nMkMsR0FDZEEsRUFBSTl5QyxJQUNYLENBQ0QsT0FBT0EsQ0FDUCxDQU9ELFVBQUFnekMsQ0FBV2wyQyxHQUNWLEdBQUl3ekMsR0FBS3VDLE1BQU0vMUMsR0FBTyxDQUNyQixNQUFNZzJDLEVBQU0sQ0FBRTc0QyxRQUFTaEcsTUFLdkIsT0FKQXE4QyxHQUFLdUMsTUFBTS8xQyxHQUFNbUQsTUFBSyxTQUFVakQsR0FFL0IsT0FEQUEsRUFBU2EsS0FBS2kxQyxFQUFJNzRDLFFBQVM2NEMsR0FDcEJBLEVBQUk5eUMsSUFDZixJQUNVOHlDLEVBQUk5eUMsSUFDWCxDQUNELENBS0QsWUFBQWl6QyxHQUNDLElBQUlkLEVBQUtsK0MsS0FBS2crQyxLQUVkLEtBQU9FLElBQU83QixHQUFLNEMsWUFDaEJmLElBQU83QixHQUFLNkMsVUFDWmhCLElBQU83QixHQUFLOEMsU0FDWmpCLElBQU83QixHQUFLK0MsU0FDZGxCLEVBQUtsK0MsS0FBSys5QyxLQUFLbHBCLGFBQWE3MEIsS0FBS3NDLE9BRWxDdEMsS0FBSzIrQyxRQUFRLGdCQUNiLENBTUQsS0FBQTEzQixHQUNDam5CLEtBQUsyK0MsUUFBUSxjQUNiLE1BQU14cEMsRUFBUW5WLEtBQUtxL0Msb0JBR2J0ekMsRUFBd0IsSUFBakJvSixFQUFNclcsT0FDZnFXLEVBQU0sR0FDUCxDQUNEdk0sS0FBTXl6QyxHQUFLaUQsU0FDWEMsS0FBTXBxQyxHQUVSLE9BQU9uVixLQUFLMitDLFFBQVEsWUFBYTV5QyxFQUNqQyxDQU9ELGlCQUFBc3pDLENBQWtCRyxHQUNqQixJQUFnQkMsRUFBTTF6QyxFQUFsQm9KLEVBQVEsR0FFWixLQUFPblYsS0FBS3NDLE1BQVF0QyxLQUFLKzlDLEtBQUtqL0MsUUFLN0IsR0FKQTJnRCxFQUFPei9DLEtBQUtnK0MsS0FJUnlCLElBQVNwRCxHQUFLcUQsYUFBZUQsSUFBU3BELEdBQUtzRCxXQUM5QzMvQyxLQUFLc0MsYUFJTCxHQUFJeUosRUFBTy9MLEtBQUs0L0MsbUJBQ2Z6cUMsRUFBTWxNLEtBQUs4QyxRQUlQLEdBQUkvTCxLQUFLc0MsTUFBUXRDLEtBQUsrOUMsS0FBS2ovQyxPQUFRLENBQ3ZDLEdBQUkyZ0QsSUFBU0QsRUFDWixNQUVEeC9DLEtBQUt3K0MsV0FBVyxlQUFpQngrQyxLQUFLczZDLEtBQU8sSUFDN0MsQ0FJSCxPQUFPbmxDLENBQ1AsQ0FNRCxnQkFBQXlxQyxHQUNDLE1BQU03ekMsRUFBTy9MLEtBQUsrK0MsV0FBVyxzQkFBd0IvK0MsS0FBSzYvQyx5QkFHMUQsT0FGQTcvQyxLQUFLZy9DLGVBRUVoL0MsS0FBSzIrQyxRQUFRLG1CQUFvQjV5QyxFQUN4QyxDQVNELGNBQUErekMsR0FDQzkvQyxLQUFLZy9DLGVBQ0wsSUFBSWUsRUFBVy8vQyxLQUFLKzlDLEtBQUtpQyxPQUFPaGdELEtBQUtzQyxNQUFPKzVDLEdBQUtTLGVBQzdDbUQsRUFBU0YsRUFBU2poRCxPQUV0QixLQUFPbWhELEVBQVMsR0FBRyxDQUlsQixHQUFJNUQsR0FBS1UsV0FBV3B6QyxlQUFlbzJDLE1BQ2pDMUQsR0FBS2dDLGtCQUFrQnIrQyxLQUFLZytDLE9BQzVCaCtDLEtBQUtzQyxNQUFReTlDLEVBQVNqaEQsT0FBU2tCLEtBQUsrOUMsS0FBS2ovQyxTQUFXdTlDLEdBQUtrQyxpQkFBaUJ2K0MsS0FBSys5QyxLQUFLbHBCLFdBQVc3MEIsS0FBS3NDLE1BQVF5OUMsRUFBU2poRCxVQUd0SCxPQURBa0IsS0FBS3NDLE9BQVMyOUMsRUFDUEYsRUFFUkEsRUFBV0EsRUFBU0MsT0FBTyxJQUFLQyxFQUNoQyxDQUNELE9BQU8sQ0FDUCxDQU9ELHNCQUFBSixHQUNDLElBQUk5ekMsRUFBTW0wQyxFQUFNQyxFQUFNQyxFQUFPQyxFQUFXM2hELEVBQU1VLEVBQU9ELEVBQUdtaEQsRUFNeEQsR0FEQTVoRCxFQUFPc0IsS0FBS3VnRCxlQUNQN2hELEVBQ0osT0FBT0EsRUFLUixHQUhBd2hELEVBQU9sZ0QsS0FBSzgvQyxrQkFHUEksRUFDSixPQUFPeGhELEVBZ0JSLElBWEEyaEQsRUFBWSxDQUFFOWlELE1BQU8yaUQsRUFBTUMsS0FBTTlELEdBQUs4QixpQkFBaUIrQixHQUFPTSxRQUFTbkUsR0FBS1csa0JBQWtCMThDLElBQUk0L0MsSUFFbEc5Z0QsRUFBUVksS0FBS3VnRCxjQUVSbmhELEdBQ0pZLEtBQUt3K0MsV0FBVyw2QkFBK0IwQixHQUdoREUsRUFBUSxDQUFDMWhELEVBQU0yaEQsRUFBV2poRCxHQUdsQjhnRCxFQUFPbGdELEtBQUs4L0Msa0JBQW1CLENBR3RDLEdBRkFLLEVBQU85RCxHQUFLOEIsaUJBQWlCK0IsR0FFaEIsSUFBVEMsRUFBWSxDQUNmbmdELEtBQUtzQyxPQUFTNDlDLEVBQUtwaEQsT0FDbkIsS0FDQSxDQUVEdWhELEVBQVksQ0FBRTlpRCxNQUFPMmlELEVBQU1DLE9BQU1LLFFBQVNuRSxHQUFLVyxrQkFBa0IxOEMsSUFBSTQvQyxJQUVyRUksRUFBV0osRUFHWCxNQUFNTyxFQUFjQyxHQUFRTCxFQUFVRyxTQUFXRSxFQUFLRixRQUNuREwsRUFBT08sRUFBS1AsS0FDWkEsR0FBUU8sRUFBS1AsS0FDaEIsS0FBUUMsRUFBTXRoRCxPQUFTLEdBQU0yaEQsRUFBWUwsRUFBTUEsRUFBTXRoRCxPQUFTLEtBQzdETSxFQUFRZ2hELEVBQU0vNEIsTUFDZDY0QixFQUFPRSxFQUFNLzRCLE1BQU05cEIsTUFDbkJtQixFQUFPMGhELEVBQU0vNEIsTUFDYnRiLEVBQU8sQ0FDTm5ELEtBQU15ekMsR0FBS3NFLFdBQ1hDLFNBQVVWLEVBQ1Z4aEQsT0FDQVUsU0FFRGdoRCxFQUFNbjNDLEtBQUs4QyxHQUdaQSxFQUFPL0wsS0FBS3VnRCxjQUVQeDBDLEdBQ0ovTCxLQUFLdytDLFdBQVcsNkJBQStCOEIsR0FHaERGLEVBQU1uM0MsS0FBS28zQyxFQUFXdDBDLEVBQ3RCLENBS0QsSUFIQTVNLEVBQUlpaEQsRUFBTXRoRCxPQUFTLEVBQ25CaU4sRUFBT3EwQyxFQUFNamhELEdBRU5BLEVBQUksR0FDVjRNLEVBQU8sQ0FDTm5ELEtBQU15ekMsR0FBS3NFLFdBQ1hDLFNBQVVSLEVBQU1qaEQsRUFBSSxHQUFHNUIsTUFDdkJtQixLQUFNMGhELEVBQU1qaEQsRUFBSSxHQUNoQkMsTUFBTzJNLEdBRVI1TSxHQUFLLEVBR04sT0FBTzRNLENBQ1AsQ0FPRCxXQUFBdzBDLEdBQ0MsSUFBSXJDLEVBQUk2QixFQUFVRSxFQUFRbDBDLEVBSTFCLEdBRkEvTCxLQUFLZy9DLGVBQ0xqekMsRUFBTy9MLEtBQUsrK0MsV0FBVyxnQkFDbkJoekMsRUFDSCxPQUFPL0wsS0FBSzIrQyxRQUFRLGNBQWU1eUMsR0FLcEMsR0FGQW15QyxFQUFLbCtDLEtBQUtnK0MsS0FFTjNCLEdBQUs0QixlQUFlQyxJQUFPQSxJQUFPN0IsR0FBS3dFLFlBRTFDLE9BQU83Z0QsS0FBSzhnRCx1QkFHYixHQUFJNUMsSUFBTzdCLEdBQUswRSxhQUFlN0MsSUFBTzdCLEdBQUsyRSxZQUUxQ2oxQyxFQUFPL0wsS0FBS2loRCwyQkFFUixHQUFJL0MsSUFBTzdCLEdBQUs2RSxZQUNwQm4xQyxFQUFPL0wsS0FBS21oRCxrQkFFUixDQUlKLElBSEFwQixFQUFXLy9DLEtBQUsrOUMsS0FBS2lDLE9BQU9oZ0QsS0FBS3NDLE1BQU8rNUMsR0FBS0ksY0FDN0N3RCxFQUFTRixFQUFTamhELE9BRVhtaEQsRUFBUyxHQUFHLENBSWxCLEdBQUk1RCxHQUFLSyxVQUFVL3lDLGVBQWVvMkMsTUFDaEMxRCxHQUFLZ0Msa0JBQWtCcitDLEtBQUtnK0MsT0FDNUJoK0MsS0FBS3NDLE1BQVF5OUMsRUFBU2poRCxPQUFTa0IsS0FBSys5QyxLQUFLai9DLFNBQVd1OUMsR0FBS2tDLGlCQUFpQnYrQyxLQUFLKzlDLEtBQUtscEIsV0FBVzcwQixLQUFLc0MsTUFBUXk5QyxFQUFTamhELFVBQ3BILENBQ0ZrQixLQUFLc0MsT0FBUzI5QyxFQUNkLE1BQU1tQixFQUFXcGhELEtBQUt1Z0QsY0FJdEIsT0FIS2EsR0FDSnBoRCxLQUFLdytDLFdBQVcsNEJBRVZ4K0MsS0FBSzIrQyxRQUFRLGNBQWUsQ0FDbEMvMUMsS0FBTXl6QyxHQUFLZ0YsVUFDWFQsU0FBVWIsRUFDVnFCLFdBQ0E5MkMsUUFBUSxHQUVULENBRUR5MUMsRUFBV0EsRUFBU0MsT0FBTyxJQUFLQyxFQUNoQyxDQUVHNUQsR0FBS2dDLGtCQUFrQkgsSUFDMUJueUMsRUFBTy9MLEtBQUtzaEQsbUJBQ1JqRixHQUFLaUIsU0FBUzN6QyxlQUFlb0MsRUFBS2xELE1BQ3JDa0QsRUFBTyxDQUNObkQsS0FBTXl6QyxHQUFLa0YsUUFDWGhrRCxNQUFPOCtDLEdBQUtpQixTQUFTdnhDLEVBQUtsRCxNQUMxQjI0QyxJQUFLejFDLEVBQUtsRCxNQUdIa0QsRUFBS2xELE9BQVN3ekMsR0FBS29GLFdBQzNCMTFDLEVBQU8sQ0FBRW5ELEtBQU15ekMsR0FBS3FGLFlBR2J4RCxJQUFPN0IsR0FBS3NGLGNBQ3BCNTFDLEVBQU8vTCxLQUFLNGhELGNBRWIsQ0FFRCxPQUFLNzFDLEdBSUxBLEVBQU8vTCxLQUFLNmhELG9CQUFvQjkxQyxHQUN6Qi9MLEtBQUsyK0MsUUFBUSxjQUFlNXlDLElBSjNCL0wsS0FBSzIrQyxRQUFRLGVBQWUsRUFLcEMsQ0FVRCxtQkFBQWtELENBQW9COTFDLEdBQ25CL0wsS0FBS2cvQyxlQUVMLElBQUlkLEVBQUtsK0MsS0FBS2crQyxLQUNkLEtBQU9FLElBQU83QixHQUFLd0UsYUFBZTNDLElBQU83QixHQUFLNkUsYUFBZWhELElBQU83QixHQUFLc0YsYUFBZXpELElBQU83QixHQUFLeUYsYUFBYSxDQUNoSCxJQUFJQyxFQUNKLEdBQUk3RCxJQUFPN0IsR0FBS3lGLFlBQWEsQ0FDNUIsR0FBSTloRCxLQUFLKzlDLEtBQUtscEIsV0FBVzcwQixLQUFLc0MsTUFBUSxLQUFPKzVDLEdBQUt3RSxZQUNqRCxNQUVEa0IsR0FBVyxFQUNYL2hELEtBQUtzQyxPQUFTLEVBQ2R0QyxLQUFLZy9DLGVBQ0xkLEVBQUtsK0MsS0FBS2crQyxJQUNWLENBQ0RoK0MsS0FBS3NDLFFBRUQ0N0MsSUFBTzdCLEdBQUs2RSxhQUNmbjFDLEVBQU8sQ0FDTm5ELEtBQU15ekMsR0FBSzJGLFdBQ1hDLFVBQVUsRUFDVjM4QixPQUFRdlosRUFDUnVKLFNBQVV0VixLQUFLNC9DLG9CQUVoQjUvQyxLQUFLZy9DLGVBQ0xkLEVBQUtsK0MsS0FBS2crQyxLQUNORSxJQUFPN0IsR0FBSzZGLGFBQ2ZsaUQsS0FBS3crQyxXQUFXLGNBRWpCeCtDLEtBQUtzQyxTQUVHNDdDLElBQU83QixHQUFLc0YsWUFFcEI1MUMsRUFBTyxDQUNObkQsS0FBTXl6QyxHQUFLOEYsU0FDWC85QyxVQUFhcEUsS0FBS29pRCxnQkFBZ0IvRixHQUFLZ0csYUFDdkNDLE9BQVF2MkMsSUFHRG15QyxJQUFPN0IsR0FBS3dFLGFBQWVrQixLQUMvQkEsR0FDSC9oRCxLQUFLc0MsUUFFTnRDLEtBQUtnL0MsZUFDTGp6QyxFQUFPLENBQ05uRCxLQUFNeXpDLEdBQUsyRixXQUNYQyxVQUFVLEVBQ1YzOEIsT0FBUXZaLEVBQ1J1SixTQUFVdFYsS0FBS3NoRCxxQkFJYlMsSUFDSGgyQyxFQUFLZzJDLFVBQVcsR0FHakIvaEQsS0FBS2cvQyxlQUNMZCxFQUFLbCtDLEtBQUtnK0MsSUFDVixDQUVELE9BQU9qeUMsQ0FDUCxDQU9ELG9CQUFBKzBDLEdBQ0MsSUFBaUI1QyxFQUFJcUUsRUFBakJ4OUMsRUFBUyxHQUViLEtBQU9zM0MsR0FBSzRCLGVBQWVqK0MsS0FBS2crQyxPQUMvQmo1QyxHQUFVL0UsS0FBSys5QyxLQUFLaGEsT0FBTy9qQyxLQUFLc0MsU0FHakMsR0FBSXRDLEtBQUtnK0MsT0FBUzNCLEdBQUt3RSxZQUd0QixJQUZBOTdDLEdBQVUvRSxLQUFLKzlDLEtBQUtoYSxPQUFPL2pDLEtBQUtzQyxTQUV6Qis1QyxHQUFLNEIsZUFBZWorQyxLQUFLZytDLE9BQy9CajVDLEdBQVUvRSxLQUFLKzlDLEtBQUtoYSxPQUFPL2pDLEtBQUtzQyxTQU1sQyxHQUZBNDdDLEVBQUtsK0MsS0FBS3M2QyxLQUVDLE1BQVA0RCxHQUFxQixNQUFQQSxFQUFZLENBUTdCLElBUEFuNUMsR0FBVS9FLEtBQUsrOUMsS0FBS2hhLE9BQU8vakMsS0FBS3NDLFNBQ2hDNDdDLEVBQUtsK0MsS0FBS3M2QyxLQUVDLE1BQVA0RCxHQUFxQixNQUFQQSxJQUNqQm41QyxHQUFVL0UsS0FBSys5QyxLQUFLaGEsT0FBTy9qQyxLQUFLc0MsVUFHMUIrNUMsR0FBSzRCLGVBQWVqK0MsS0FBS2crQyxPQUMvQmo1QyxHQUFVL0UsS0FBSys5QyxLQUFLaGEsT0FBTy9qQyxLQUFLc0MsU0FHNUIrNUMsR0FBSzRCLGVBQWVqK0MsS0FBSys5QyxLQUFLbHBCLFdBQVc3MEIsS0FBS3NDLE1BQVEsS0FDMUR0QyxLQUFLdytDLFdBQVcsc0JBQXdCejVDLEVBQVMvRSxLQUFLczZDLEtBQU8sSUFFOUQsQ0FhRCxPQVhBaUksRUFBU3ZpRCxLQUFLZytDLEtBR1YzQixHQUFLZ0Msa0JBQWtCa0UsR0FDMUJ2aUQsS0FBS3crQyxXQUFXLDhDQUNmejVDLEVBQVMvRSxLQUFLczZDLEtBQU8sTUFFZGlJLElBQVdsRyxHQUFLd0UsYUFBa0MsSUFBbEI5N0MsRUFBT2pHLFFBQWdCaUcsRUFBTzh2QixXQUFXLEtBQU93bkIsR0FBS3dFLGNBQzdGN2dELEtBQUt3K0MsV0FBVyxxQkFHVixDQUNONTFDLEtBQU15ekMsR0FBS2tGLFFBQ1hoa0QsTUFBT210QyxXQUFXM2xDLEdBQ2xCeThDLElBQUt6OEMsRUFFTixDQU9ELG1CQUFBazhDLEdBQ0MsSUFBSTdHLEVBQU0sR0FDVixNQUFNb0ksRUFBYXhpRCxLQUFLc0MsTUFDbEJtZ0QsRUFBUXppRCxLQUFLKzlDLEtBQUtoYSxPQUFPL2pDLEtBQUtzQyxTQUNwQyxJQUFJb2dELEdBQVMsRUFFYixLQUFPMWlELEtBQUtzQyxNQUFRdEMsS0FBSys5QyxLQUFLai9DLFFBQVEsQ0FDckMsSUFBSW8vQyxFQUFLbCtDLEtBQUsrOUMsS0FBS2hhLE9BQU8vakMsS0FBS3NDLFNBRS9CLEdBQUk0N0MsSUFBT3VFLEVBQU8sQ0FDakJDLEdBQVMsRUFDVCxLQUNBLENBQ0ksR0FBVyxPQUFQeEUsRUFJUixPQUZBQSxFQUFLbCtDLEtBQUsrOUMsS0FBS2hhLE9BQU8vakMsS0FBS3NDLFNBRW5CNDdDLEdBQ1AsSUFBSyxJQUFLOUQsR0FBTyxLQUFNLE1BQ3ZCLElBQUssSUFBS0EsR0FBTyxLQUFNLE1BQ3ZCLElBQUssSUFBS0EsR0FBTyxLQUFNLE1BQ3ZCLElBQUssSUFBS0EsR0FBTyxLQUFNLE1BQ3ZCLElBQUssSUFBS0EsR0FBTyxLQUFNLE1BQ3ZCLElBQUssSUFBS0EsR0FBTyxLQUFRLE1BQ3pCLFFBQVVBLEdBQU84RCxPQUlsQjlELEdBQU84RCxDQUVSLENBTUQsT0FKS3dFLEdBQ0oxaUQsS0FBS3crQyxXQUFXLHlCQUEyQnBFLEVBQU0sS0FHM0MsQ0FDTnh4QyxLQUFNeXpDLEdBQUtrRixRQUNYaGtELE1BQU82OEMsRUFDUG9ILElBQUt4aEQsS0FBSys5QyxLQUFLdHFCLFVBQVUrdUIsRUFBWXhpRCxLQUFLc0MsT0FFM0MsQ0FTRCxnQkFBQWcvQyxHQUNDLElBQUlwRCxFQUFLbCtDLEtBQUtnK0MsS0FBTTk4QyxFQUFRbEIsS0FBS3NDLE1BU2pDLElBUEkrNUMsR0FBS2dDLGtCQUFrQkgsR0FDMUJsK0MsS0FBS3NDLFFBR0x0QyxLQUFLdytDLFdBQVcsY0FBZ0J4K0MsS0FBS3M2QyxNQUcvQnQ2QyxLQUFLc0MsTUFBUXRDLEtBQUsrOUMsS0FBS2ovQyxTQUM3Qm8vQyxFQUFLbCtDLEtBQUtnK0MsS0FFTjNCLEdBQUtrQyxpQkFBaUJMLEtBQ3pCbCtDLEtBQUtzQyxRQU1QLE1BQU8sQ0FDTnNHLEtBQU15ekMsR0FBS3NHLFdBQ1g5NUMsS0FBTTdJLEtBQUsrOUMsS0FBSzUxQyxNQUFNakgsRUFBT2xCLEtBQUtzQyxPQUVuQyxDQVdELGVBQUE4L0MsQ0FBZ0JRLEdBQ2YsTUFBTTk0QyxFQUFPLEdBQ2IsSUFBSTQ0QyxHQUFTLEVBQ1RHLEVBQWtCLEVBRXRCLEtBQU83aUQsS0FBS3NDLE1BQVF0QyxLQUFLKzlDLEtBQUtqL0MsUUFBUSxDQUNyQ2tCLEtBQUtnL0MsZUFDTCxJQUFJUyxFQUFPei9DLEtBQUtnK0MsS0FFaEIsR0FBSXlCLElBQVNtRCxFQUFhLENBQ3pCRixHQUFTLEVBQ1QxaUQsS0FBS3NDLFFBRURzZ0QsSUFBZ0J2RyxHQUFLZ0csYUFBZVEsR0FBbUJBLEdBQW1CLzRDLEVBQUtoTCxRQUNsRmtCLEtBQUt3K0MsV0FBVyxvQkFBc0J4cUIsT0FBT3NxQixhQUFhc0UsSUFHM0QsS0FDQSxDQUNJLEdBQUluRCxJQUFTcEQsR0FBS3NELFlBSXRCLEdBSEEzL0MsS0FBS3NDLFFBQ0x1Z0QsSUFFSUEsSUFBb0IvNEMsRUFBS2hMLE9BQzVCLEdBQUk4akQsSUFBZ0J2RyxHQUFLZ0csWUFDeEJyaUQsS0FBS3crQyxXQUFXLDJCQUVaLEdBQUlvRSxJQUFnQnZHLEdBQUs2RixZQUM3QixJQUFLLElBQUlZLEVBQU1oNUMsRUFBS2hMLE9BQVFna0QsRUFBTUQsRUFBaUJDLElBQ2xEaDVDLEVBQUtiLEtBQUssV0FLVCxHQUFJYSxFQUFLaEwsU0FBVytqRCxHQUF1QyxJQUFwQkEsRUFFM0M3aUQsS0FBS3crQyxXQUFXLHNCQUVaLENBQ0osTUFBTXp5QyxFQUFPL0wsS0FBSzQvQyxtQkFFYjd6QyxHQUFRQSxFQUFLbkQsT0FBU3l6QyxHQUFLaUQsVUFDL0J0L0MsS0FBS3crQyxXQUFXLGtCQUdqQjEwQyxFQUFLYixLQUFLOEMsRUFDVixDQUNELENBTUQsT0FKSzIyQyxHQUNKMWlELEtBQUt3K0MsV0FBVyxZQUFjeHFCLE9BQU9zcUIsYUFBYXNFLElBRzVDOTRDLENBQ1AsQ0FXRCxXQUFBODNDLEdBQ0M1aEQsS0FBS3NDLFFBQ0wsSUFBSTZTLEVBQVFuVixLQUFLcS9DLGtCQUFrQmhELEdBQUtnRyxhQUN4QyxHQUFJcmlELEtBQUtnK0MsT0FBUzNCLEdBQUtnRyxZQUV0QixPQURBcmlELEtBQUtzQyxRQUNnQixJQUFqQjZTLEVBQU1yVyxPQUNGcVcsRUFBTSxLQUVKQSxFQUFNclcsUUFJUixDQUNOOEosS0FBTXl6QyxHQUFLMEcsYUFDWEMsWUFBYTd0QyxHQUtmblYsS0FBS3crQyxXQUFXLGFBRWpCLENBUUQsV0FBQTJDLEdBR0MsT0FGQW5oRCxLQUFLc0MsUUFFRSxDQUNOc0csS0FBTXl6QyxHQUFLNEcsVUFDWEMsU0FBVWxqRCxLQUFLb2lELGdCQUFnQi9GLEdBQUs2RixhQUVyQyxFQUlGLE1BQU10RCxHQUFRLElBejhCZCxNQW1CQyxHQUFBcnZDLENBQUkxRyxFQUFNRSxFQUFVeXhDLEdBQ25CLEdBQTJCLGlCQUFoQnAyQyxVQUFVLEdBRXBCLElBQUssSUFBSXlFLEtBQVF6RSxVQUFVLEdBQzFCcEUsS0FBS3VQLElBQUkxRyxFQUFNekUsVUFBVSxHQUFHeUUsR0FBT3pFLFVBQVUsU0FJN0NFLE1BQU1xSCxRQUFROUMsR0FBUUEsRUFBTyxDQUFDQSxJQUFPczZDLFNBQVEsU0FBVXQ2QyxHQUN2RDdJLEtBQUs2SSxHQUFRN0ksS0FBSzZJLElBQVMsR0FFdkJFLEdBQ0gvSSxLQUFLNkksR0FBTTJ4QyxFQUFRLFVBQVksUUFBUXp4QyxFQUV4QyxHQUFFL0ksS0FFSixDQVdELEdBQUE4K0MsQ0FBSWoyQyxFQUFNZzJDLEdBQ1Q3K0MsS0FBSzZJLEdBQVE3SSxLQUFLNkksSUFBUyxHQUMzQjdJLEtBQUs2SSxHQUFNczZDLFNBQVEsU0FBVXA2QyxHQUM1QkEsRUFBU2EsS0FBS2kxQyxHQUFPQSxFQUFJNzRDLFFBQVU2NEMsRUFBSTc0QyxRQUFVNjRDLEVBQUtBLEVBQ3pELEdBQ0UsR0F1NUJGLytDLE9BQU9taUIsT0FBT282QixHQUFNLENBQ25CdUMsU0FDQXdFLFFBQVMsSUFuNUJWLE1BQ0MsV0FBQTNqRCxDQUFZNGpELEdBQ1hyakQsS0FBS3FqRCxLQUFPQSxFQUNacmpELEtBQUtzakQsV0FBYSxFQUNsQixDQWVELFFBQUFDLElBQVlILEdBQ1hBLEVBQVFELFNBQVNLLElBQ2hCLEdBQXNCLGlCQUFYQSxJQUF3QkEsRUFBTzM2QyxPQUFTMjZDLEVBQU9qNEIsS0FDekQsTUFBTSxJQUFJN2lCLE1BQU0sOEJBRWIxSSxLQUFLc2pELFdBQVdFLEVBQU8zNkMsUUFJM0IyNkMsRUFBT2o0QixLQUFLdnJCLEtBQUtxakQsTUFDakJyakQsS0FBS3NqRCxXQUFXRSxFQUFPMzZDLE1BQVEyNkMsRUFBTSxHQUV0QyxHQW8zQm9CbkgsSUFNckJpRCxTQUFpQixXQUNqQnlELGFBQWlCLHFCQUNqQkosV0FBaUIsYUFDakJYLFdBQWlCLG1CQUNqQlQsUUFBaUIsVUFDakJHLFNBQWlCLGlCQUNqQlMsU0FBaUIsaUJBQ2pCZCxVQUFpQixrQkFDakJWLFdBQWlCLG1CQUNqQnNDLFVBQWlCLGtCQUVqQi9ELFNBQWEsRUFDYkMsUUFBYSxHQUNiQyxRQUFhLEdBQ2JILFdBQWEsR0FDYjRCLFlBQWEsR0FDYmxCLFdBQWEsR0FDYm9CLFlBQWEsR0FDYkMsWUFBYSxHQUNiVyxZQUFhLEdBQ2JVLFlBQWEsR0FDYm5CLFlBQWEsR0FDYmdCLFlBQWEsR0FDYkosWUFBYSxHQUNicEMsWUFBYSxHQUNiK0QsV0FBYSxHQU9iL0csVUFBVyxDQUNWLElBQUssRUFDTCxJQUFLLEVBQ0wsSUFBSyxFQUNMLElBQUssR0FNTkssV0FBWSxDQUNYLEtBQU0sRUFBRyxLQUFNLEVBQUcsSUFBSyxFQUFHLElBQUssRUFBRyxJQUFLLEVBQ3ZDLEtBQU0sRUFBRyxLQUFNLEVBQUcsTUFBTyxFQUFHLE1BQU8sRUFDbkMsSUFBSyxFQUFHLElBQUssRUFBRyxLQUFNLEVBQUcsS0FBTSxFQUMvQixLQUFNLEVBQUcsS0FBTSxFQUFHLE1BQU8sRUFDekIsSUFBSyxFQUFHLElBQUssRUFDYixJQUFLLEdBQUksSUFBSyxHQUFJLElBQUssSUFJeEJDLGtCQUFtQixJQUFJMEcsSUFHdkJ4Ryw0QkFBNkIsSUFBSXdHLElBQUksQ0FBQyxJQUFLLE1BSzNDcEcsU0FBVSxDQUNUcUcsTUFBUSxFQUNSQyxPQUFTLEVBQ1RDLEtBQVEsTUFJVHBDLFNBQVUsU0FFWHBGLEdBQUtJLGFBQWVKLEdBQUttQixhQUFhbkIsR0FBS0ssV0FDM0NMLEdBQUtTLGNBQWdCVCxHQUFLbUIsYUFBYW5CLEdBQUtVLFlBRzVDLE1BQU1zRyxHQUFPdEYsR0FBUSxJQUFLMUIsR0FBSzBCLEdBQU85MkIsUUFDaEJubkIsT0FBT2drRCxvQkFBb0J6SCxJQUUvQzhHLFNBQVNuZ0QsU0FDT1gsSUFBWmdoRCxHQUFLcmdELElBQTBCLGNBQU5BLElBQzVCcWdELEdBQUtyZ0QsR0FBS3E1QyxHQUFLcjVDLEdBQ2YsSUFFSHFnRCxHQUFLaEgsS0FBT0EsR0FJWixJQUFJMEgsR0FBVSxDQUNibDdDLEtBQU0sVUFFTixJQUFBMGlCLENBQUs4M0IsR0FFSkEsRUFBS3pFLE1BQU1ydkMsSUFBSSxvQkFBb0IsU0FBdUJzdkMsR0FDekQsR0FBSUEsRUFBSTl5QyxNQUFRL0wsS0FBS2crQyxPQUFTcUYsRUFBS3ZCLFlBQWEsQ0FDL0M5aEQsS0FBS3NDLFFBQ0wsTUFBTW1HLEVBQU9vMkMsRUFBSTl5QyxLQUNYaTRDLEVBQWFoa0QsS0FBSzQvQyxtQkFReEIsR0FOS29FLEdBQ0poa0QsS0FBS3crQyxXQUFXLHVCQUdqQngrQyxLQUFLZy9DLGVBRURoL0MsS0FBS2crQyxPQUFTcUYsRUFBS0ksV0FBWSxDQUNsQ3pqRCxLQUFLc0MsUUFDTCxNQUFNMmhELEVBQVlqa0QsS0FBSzQvQyxtQkFjdkIsR0FaS3FFLEdBQ0pqa0QsS0FBS3crQyxXQUFXLHVCQUVqQkssRUFBSTl5QyxLQUFPLENBQ1ZuRCxLQTNCa0Isd0JBNEJsQkgsT0FDQXU3QyxhQUNBQyxhQUtHeDdDLEVBQUttNEMsVUFBWXlDLEVBQUt0RyxXQUFXdDBDLEVBQUttNEMsV0FBYSxHQUFLLENBQzNELElBQUlzRCxFQUFVejdDLEVBQ2QsS0FBT3k3QyxFQUFROWtELE1BQU13aEQsVUFBWXlDLEVBQUt0RyxXQUFXbUgsRUFBUTlrRCxNQUFNd2hELFdBQWEsSUFDM0VzRCxFQUFVQSxFQUFROWtELE1BRW5CeS9DLEVBQUk5eUMsS0FBS3RELEtBQU95N0MsRUFBUTlrRCxNQUN4QjhrRCxFQUFROWtELE1BQVF5L0MsRUFBSTl5QyxLQUNwQjh5QyxFQUFJOXlDLEtBQU90RCxDQUNYLENBQ0QsTUFFQXpJLEtBQUt3K0MsV0FBVyxhQUVqQixDQUNKLEdBQ0UsR0FLRjZFLEdBQUtELFFBQVFHLFNBQVNRLGlCQ3RqQ3RCLFNBQVNJLEdBQWFDLEdBRWxCLEdBQXVCLGlCQUFaQSxHQUNQLEdBQWdCLElBQVpBLEVBQWUsT0FBTyxPQUN2QixHQUFJQSxhQUFtQnpZLElBRXRCeVksRUFBUXRXLFlBQVl1VyxNQUFLLFNBQVV2MkMsR0FDL0IsT0FBYSxJQUFOQSxLQUdYLE9BQU8sRUFHZixPQUFPLENBQ1gsT0NyREMsV0FHRyxJQUFJZ2tCLEVBQUssQ0FDTHd5QixXQUFZLE9BQ1pDLFNBQVUsT0FDVkMsU0FBVSxPQUNWQyxjQUFlLE9BQ2YxL0MsT0FBUSxVQUNSMi9DLFlBQWEsZUFDYkMsS0FBTSxNQUNOQyxTQUFVLE9BQ1ZwOUMsS0FBTSxZQUNOcTlDLE9BQVEsV0FDUkMsWUFBYSwyRkFDYm5sRCxJQUFLLHNCQUNMb2xELFdBQVksd0JBQ1pDLGFBQWMsYUFDZDV5QixLQUFNLFNBR1YsU0FBUzZ5QixFQUFRdGxELEdBRWIsT0FPSixTQUF3QnVsRCxFQUFZQyxHQUNoQyxJQUFpRHJDLEVBQWtCM2pELEVBQUd1RCxFQUFHMGlELEVBQUkxb0IsRUFBSzJvQixFQUFlQyxFQUFZQyxFQUFhbnpCLEVBQXRIb3pCLEVBQVMsRUFBR0MsRUFBY1AsRUFBV3BtRCxPQUFhbTNCLEVBQVMsR0FDL0QsSUFBSzkyQixFQUFJLEVBQUdBLEVBQUlzbUQsRUFBYXRtRCxJQUN6QixHQUE2QixpQkFBbEIrbEQsRUFBVy9sRCxHQUNsQjgyQixHQUFVaXZCLEVBQVcvbEQsUUFFcEIsR0FBNkIsaUJBQWxCK2xELEVBQVcvbEQsR0FBaUIsQ0FFeEMsSUFEQWltRCxFQUFLRixFQUFXL2xELElBQ1QrN0MsS0FFSCxJQURBNEgsRUFBTXFDLEVBQUtLLEdBQ045aUQsRUFBSSxFQUFHQSxFQUFJMGlELEVBQUdsSyxLQUFLcDhDLE9BQVE0RCxJQUFLLENBQ2pDLEdBQVdMLE1BQVB5Z0QsRUFDQSxNQUFNLElBQUlwNkMsTUFBTXU4QyxFQUFRLGdFQUFpRUcsRUFBR2xLLEtBQUt4NEMsR0FBSTBpRCxFQUFHbEssS0FBS3g0QyxFQUFFLEtBRW5Ib2dELEVBQU1BLEVBQUlzQyxFQUFHbEssS0FBS3g0QyxHQUNyQixNQUdEb2dELEVBREtzQyxFQUFHTSxTQUNGUCxFQUFLQyxFQUFHTSxVQUdSUCxFQUFLSyxLQU9mLEdBSkkxekIsRUFBRzB5QixTQUFTLzdDLEtBQUsyOEMsRUFBR3g4QyxPQUFTa3BCLEVBQUcyeUIsY0FBY2g4QyxLQUFLMjhDLEVBQUd4OEMsT0FBU2s2QyxhQUFlNkMsV0FDOUU3QyxFQUFNQSxLQUdOaHhCLEVBQUc0eUIsWUFBWWo4QyxLQUFLMjhDLEVBQUd4OEMsT0FBeUIsaUJBQVJrNkMsR0FBb0JoL0MsTUFBTWcvQyxHQUNsRSxNQUFNLElBQUlqZ0QsVUFBVW9pRCxFQUFRLDBDQUEyQ25DLElBTzNFLE9BSkloeEIsRUFBRy9zQixPQUFPMEQsS0FBSzI4QyxFQUFHeDhDLFFBQ2xCMjhDLEVBQWN6QyxHQUFPLEdBR2pCc0MsRUFBR3g4QyxNQUNQLElBQUssSUFDRGs2QyxFQUFNcGlDLFNBQVNvaUMsRUFBSyxJQUFJdGhDLFNBQVMsR0FDakMsTUFDSixJQUFLLElBQ0RzaEMsRUFBTTl1QixPQUFPc3FCLGFBQWE1OUIsU0FBU29pQyxFQUFLLEtBQ3hDLE1BQ0osSUFBSyxJQUNMLElBQUssSUFDREEsRUFBTXBpQyxTQUFTb2lDLEVBQUssSUFDcEIsTUFDSixJQUFLLElBQ0RBLEVBQU04QyxLQUFLQyxVQUFVL0MsRUFBSyxLQUFNc0MsRUFBRzl5QixNQUFRNVIsU0FBUzBrQyxFQUFHOXlCLE9BQVMsR0FDaEUsTUFDSixJQUFLLElBQ0R3d0IsRUFBTXNDLEVBQUc1eUIsVUFBWWtZLFdBQVdvWSxHQUFLcHhCLGNBQWMwekIsRUFBRzV5QixXQUFha1ksV0FBV29ZLEdBQUtweEIsZ0JBQ25GLE1BQ0osSUFBSyxJQUNEb3hCLEVBQU1zQyxFQUFHNXlCLFVBQVlrWSxXQUFXb1ksR0FBS253QixRQUFReXlCLEVBQUc1eUIsV0FBYWtZLFdBQVdvWSxHQUN4RSxNQUNKLElBQUssSUFDREEsRUFBTXNDLEVBQUc1eUIsVUFBWXdCLE9BQU9SLE9BQU9zdkIsRUFBSWh3QixZQUFZc3lCLEVBQUc1eUIsYUFBZWtZLFdBQVdvWSxHQUNoRixNQUNKLElBQUssSUFDREEsR0FBT3BpQyxTQUFTb2lDLEVBQUssTUFBUSxHQUFHdGhDLFNBQVMsR0FDekMsTUFDSixJQUFLLElBQ0RzaEMsRUFBTTl1QixPQUFPOHVCLEdBQ2JBLEVBQU9zQyxFQUFHNXlCLFVBQVlzd0IsRUFBSXJ2QixVQUFVLEVBQUcyeEIsRUFBRzV5QixXQUFhc3dCLEVBQ3ZELE1BQ0osSUFBSyxJQUNEQSxFQUFNOXVCLFNBQVM4dUIsR0FDZkEsRUFBT3NDLEVBQUc1eUIsVUFBWXN3QixFQUFJcnZCLFVBQVUsRUFBRzJ4QixFQUFHNXlCLFdBQWFzd0IsRUFDdkQsTUFDSixJQUFLLElBQ0RBLEVBQU1oakQsT0FBT29KLFVBQVVzWSxTQUFTNVgsS0FBS2s1QyxHQUFLMzZDLE1BQU0sR0FBSSxHQUFHcVksY0FDdkRzaUMsRUFBT3NDLEVBQUc1eUIsVUFBWXN3QixFQUFJcnZCLFVBQVUsRUFBRzJ4QixFQUFHNXlCLFdBQWFzd0IsRUFDdkQsTUFDSixJQUFLLElBQ0RBLEVBQU1waUMsU0FBU29pQyxFQUFLLE1BQVEsRUFDNUIsTUFDSixJQUFLLElBQ0RBLEVBQU1BLEVBQUlwaUQsVUFDVm9pRCxFQUFPc0MsRUFBRzV5QixVQUFZc3dCLEVBQUlydkIsVUFBVSxFQUFHMnhCLEVBQUc1eUIsV0FBYXN3QixFQUN2RCxNQUNKLElBQUssSUFDREEsR0FBT3BpQyxTQUFTb2lDLEVBQUssTUFBUSxHQUFHdGhDLFNBQVMsSUFDekMsTUFDSixJQUFLLElBQ0RzaEMsR0FBT3BpQyxTQUFTb2lDLEVBQUssTUFBUSxHQUFHdGhDLFNBQVMsSUFBSXdSLGNBR2pEbEIsRUFBRzZ5QixLQUFLbDhDLEtBQUsyOEMsRUFBR3g4QyxNQUNoQnF0QixHQUFVNnNCLElBR05oeEIsRUFBRy9zQixPQUFPMEQsS0FBSzI4QyxFQUFHeDhDLE9BQVcyOEMsSUFBZUgsRUFBR2h6QixLQUsvQ0EsRUFBTyxJQUpQQSxFQUFPbXpCLEVBQWMsSUFBTSxJQUMzQnpDLEVBQU1BLEVBQUl0aEMsV0FBV3FSLFFBQVFmLEVBQUdNLEtBQU0sS0FLMUNpekIsRUFBZ0JELEVBQUdVLFNBQTJCLE1BQWhCVixFQUFHVSxTQUFtQixJQUFNVixFQUFHVSxTQUFTL2hCLE9BQU8sR0FBSyxJQUNsRnVoQixFQUFhRixFQUFHOXlCLE9BQVNGLEVBQU8wd0IsR0FBS2hrRCxPQUNyQzQ5QixFQUFNMG9CLEVBQUc5eUIsT0FBU2d6QixFQUFhLEVBQUlELEVBQWNVLE9BQU9ULEdBQW9CLEdBQzVFcnZCLEdBQVVtdkIsRUFBR2p6QixNQUFRQyxFQUFPMHdCLEVBQU1wbUIsRUFBeUIsTUFBbEIyb0IsRUFBd0JqekIsRUFBT3NLLEVBQU1vbUIsRUFBTXBtQixFQUFNdEssRUFBTzB3QixFQUV4RyxDQUVMLE9BQU83c0IsQ0FDVixDQWxIVSt2QixDQXNIWCxTQUF1QmhPLEdBQ25CLEdBQUlpTyxFQUFjak8sR0FDZCxPQUFPaU8sRUFBY2pPLEdBSXpCLElBREEsSUFBZ0J2a0MsRUFBWnl5QyxFQUFPbE8sRUFBWWtOLEVBQWEsR0FBSWlCLEVBQVksRUFDN0NELEdBQU0sQ0FDVCxHQUFxQyxRQUFoQ3p5QyxFQUFRcWUsRUFBR3RxQixLQUFLaVosS0FBS3lsQyxJQUN0QmhCLEVBQVdqOEMsS0FBS3dLLEVBQU0sU0FFckIsR0FBdUMsUUFBbENBLEVBQVFxZSxFQUFHK3lCLE9BQU9wa0MsS0FBS3lsQyxJQUM3QmhCLEVBQVdqOEMsS0FBSyxTQUVmLElBQTRDLFFBQXZDd0ssRUFBUXFlLEVBQUdnekIsWUFBWXJrQyxLQUFLeWxDLElBNkNsQyxNQUFNLElBQUlFLFlBQVksb0NBNUN0QixHQUFJM3lDLEVBQU0sR0FBSSxDQUNWMHlDLEdBQWEsRUFDYixJQUFJRSxFQUFhLEdBQUlDLEVBQW9CN3lDLEVBQU0sR0FBSTh5QyxFQUFjLEdBQ2pFLEdBQXVELFFBQWxEQSxFQUFjejBCLEVBQUdueUIsSUFBSThnQixLQUFLNmxDLElBZTNCLE1BQU0sSUFBSUYsWUFBWSxnREFidEIsSUFEQUMsRUFBV3A5QyxLQUFLczlDLEVBQVksSUFDd0QsTUFBNUVELEVBQW9CQSxFQUFrQjd5QixVQUFVOHlCLEVBQVksR0FBR3puRCxVQUNuRSxHQUE4RCxRQUF6RHluRCxFQUFjejBCLEVBQUdpekIsV0FBV3RrQyxLQUFLNmxDLElBQ2xDRCxFQUFXcDlDLEtBQUtzOUMsRUFBWSxRQUUzQixJQUFnRSxRQUEzREEsRUFBY3owQixFQUFHa3pCLGFBQWF2a0MsS0FBSzZsQyxJQUl6QyxNQUFNLElBQUlGLFlBQVksZ0RBSHRCQyxFQUFXcDlDLEtBQUtzOUMsRUFBWSxHQUkvQixDQU1UOXlDLEVBQU0sR0FBSzR5QyxDQUNkLE1BRUdGLEdBQWEsRUFFakIsR0FBa0IsSUFBZEEsRUFDQSxNQUFNLElBQUl6OUMsTUFBTSw2RUFHcEJ3OEMsRUFBV2o4QyxLQUNQLENBQ0k2N0MsWUFBYXJ4QyxFQUFNLEdBQ25CaXlDLFNBQWFqeUMsRUFBTSxHQUNuQnluQyxLQUFhem5DLEVBQU0sR0FDbkIyZSxLQUFhM2UsRUFBTSxHQUNuQnF5QyxTQUFhcnlDLEVBQU0sR0FDbkIwZSxNQUFhMWUsRUFBTSxHQUNuQjZlLE1BQWE3ZSxFQUFNLEdBQ25CK2UsVUFBYS9lLEVBQU0sR0FDbkI3SyxLQUFhNkssRUFBTSxJQU05QixDQUNEeXlDLEVBQU9BLEVBQUt6eUIsVUFBVWhnQixFQUFNLEdBQUczVSxPQUNsQyxDQUNELE9BQU9tbkQsRUFBY2pPLEdBQU9rTixDQUMvQixDQXJMeUJzQixDQUFjN21ELEdBQU15RSxVQUM3QyxDQUVELFNBQVNxaUQsRUFBU3pPLEVBQUttTixHQUNuQixPQUFPRixFQUFRbG5ELE1BQU0sS0FBTSxDQUFDaTZDLEdBQUtodkMsT0FBT204QyxHQUFRLElBQ25ELENBK0dELElBQUljLEVBQWdCbm1ELE9BQU9xVCxPQUFPLE1Bd0U5QnV6QyxHQUFpQixRQUFJekIsRUFDckJ5QixHQUFrQixTQUFJRCxFQUVKLG9CQUFYNWdELFNBQ1BBLE9BQWdCLFFBQUlvL0MsRUFDcEJwL0MsT0FBaUIsU0FBSTRnRCxFQVk3QixDQXBPQyxHRDJFRCxNQUFNRSxHQUEyQyxDQUU3Q3BrRCxJQUFLLFNBQVVvc0MsRUFBU0QsR0FFcEIsT0FBT2tZLEVBQU9qWSxFQUFRYixZQUN6QixFQUVEd0osUUFBUyxTQUFVM0ksRUFBU0QsR0FFeEIsSUFBSW5zQyxFQUFNcWtELEVBQU9qWSxFQUFRYixhQUN6QixHQUFJdGEsT0FBT21YLFNBQVNwb0MsR0FBTSxDQUN0QixJQUFJc2tELEVBQWV2aUQsTUFBTVYsS0FBSytxQyxHQUM5QixJQUFLLElBQUltWSxLQUFhRCxFQUFhM2tELFVBQy9CLEdBQXdCLE9BQXBCNGtELEVBQVV2cEQsT0FBa0J1cEQsRUFBVXZwRCxRQUFVZ0YsRUFDaEQsT0FBT3VrRCxFQUFVM2dDLElBRzVCLENBQ0QsTUFBTyxzQkFDVixFQUVEOWtCLElBQUssU0FBVXN0QyxFQUFTRCxHQUVwQixPQUFPcVksRUFBT3BZLEVBQVFiLFlBQ3pCLEVBRUR5SixRQUFTLFNBQVU1SSxFQUFTRCxHQUV4QixJQUFJcnRDLEVBQU0wbEQsRUFBT3BZLEVBQVFiLGFBQ3pCLEdBQUl0YSxPQUFPbVgsU0FBU3RwQyxHQUFNLENBQ3RCLElBQUl3bEQsRUFBZXZpRCxNQUFNVixLQUFLK3FDLEdBQzlCLElBQUssSUFBSW1ZLEtBQWFELEVBQWEza0QsVUFDL0IsR0FBd0IsT0FBcEI0a0QsRUFBVXZwRCxPQUFrQnVwRCxFQUFVdnBELFFBQVU4RCxFQUNoRCxPQUFPeWxELEVBQVUzZ0MsSUFHNUIsQ0FDRCxNQUFPLHNCQUNWLEVBR0Q2bEIsVUFBVyxTQUFVMkMsRUFBU0QsR0FFMUIsR0FBSUMsRUFBUyxDQUNULElBQUkzQyxFQUFZMkMsRUFBUXhCLGVBQ3hCLEdBQUluQixHQUFhQSxFQUFVOE4sVUFDdkIsT0FBTzlOLENBRWQsQ0FDRCxPQUFPMEMsRUFBVzFDLFNBQ3JCLEVBR0RDLFFBQVMsU0FBVTBDLEVBQVNELEdBRXhCLEdBQUlDLEVBQVMsQ0FDVCxJQUFJMUMsRUFBVTBDLEVBQVF2QixhQUN0QixHQUFJbkIsR0FBV0EsRUFBUTZOLFVBQ25CLE9BQU83TixDQUVkLENBQ0QsT0FBT3lDLEVBQVd6QyxPQUNyQixFQUVEMW5DLElBQUssU0FBVW9xQyxFQUFTRCxHQUVwQixPQUFPc1ksRUFBT3JZLEVBQVFiLFlBQ3pCLEVBQ0Qxc0MsTUFBTyxTQUFVdXRDLEVBQVNELEdBQ3RCLE1BQU8sb0NBQ1YsRUFFRG5FLFdBQVksU0FBVW9FLEVBQVNELEdBRTNCLE9BQU9DLEVBQVFqRCxlQUNsQixFQUNEckosS0FBTSxTQUFVc00sRUFBU0QsR0FDckIsTUFBTyxtQ0FDVixFQUNEdVksUUFBUyxTQUFVdFksRUFBU0QsR0FFeEIsT0FBT0MsRUFBUVosV0FDbEIsRUFDRG1aLGtCQUFtQixTQUFVdlksRUFBU0QsR0FFbEMsT0FBT0MsRUFBUVgsa0JBQ2xCLEVBQ0RtWixVQUFXLFNBQVV4WSxFQUFTRCxHQUUxQixJQUFJMFksRUFBUyxFQUNURCxFQUFZLEVBQ2hCLElBQUssSUFBSUwsS0FBYW5ZLEVBQ2RtWSxFQUFVdnBELE1BQ1Y2cEQsSUFFQUEsRUFBUyxFQUVUQSxHQUFVRCxJQUNWQSxFQUFZQyxHQUdwQixPQUFPRCxDQUNWLEVBQ0RFLGVBQWdCLFNBQVUxWSxFQUFTRCxHQUUvQixJQUFJMFksRUFBUyxFQUNURCxFQUFZLEVBQ1pHLEVBQXNCLEtBQ3RCRCxFQUF5QixLQUM3QixHQUFJMVksRUFDQSxJQUFLLElBQUltWSxLQUFhblksRUFDZG1ZLEVBQVV2cEQsT0FDSyxJQUFYNnBELElBQ0FFLEVBQWNSLEVBQVUzZ0MsTUFFNUJpaEMsS0FFQUEsRUFBUyxFQUVUQSxHQUFVRCxJQUNWQSxFQUFZQyxFQUNaQyxFQUFpQkMsR0FJN0IsT0FBT0QsQ0FDVixFQUNERSxhQUFjLFNBQVU1WSxFQUFTRCxHQUU3QixJQUFJMFksRUFBUyxFQUNURCxFQUFZLEVBQ1pLLEVBQW9CLEtBQ3BCRCxFQUF1QixLQUMzQixHQUFJNVksRUFBUyxDQUNULElBQUlrWSxFQUFldmlELE1BQU1WLEtBQUsrcUMsR0FDOUIsSUFBSyxJQUFJdEMsRUFBTSxFQUFHQSxFQUFNd2EsRUFBYS9uRCxPQUFRdXRDLElBQU8sQ0FDaEQsSUFBSWhELEVBQVF3ZCxFQUFheGEsR0FDckJvYixFQUFZLEtBQ1pwYixFQUFNd2EsRUFBYS9uRCxPQUFTLElBQzVCMm9ELEVBQVlaLEVBQWF4YSxFQUFNLElBRS9CaEQsRUFBTTlyQyxPQUNONnBELEtBQ0tLLGFBQUEsRUFBQUEsRUFBV2xxRCxTQUNaaXFELEVBQVluZSxFQUFNbGpCLE9BR3RCaWhDLEVBQVMsRUFFVEEsR0FBVUQsSUFHVkEsRUFBWUMsRUFDWkcsRUFBZUMsRUFFdEIsQ0FDSixDQUNELE9BQU9ELENBQ1YsRUFDREcsVUFBVyxTQUFVL1ksRUFBU0QsR0FFMUIsSUFBSWlaLEVBQVMsRUFDVEQsRUFBWSxFQUNoQixJQUFLLElBQUlaLEtBQWFuWSxFQUNibVksRUFBVXZwRCxNQUdYb3FELEVBQVMsRUFGVEEsSUFJQUEsRUFBU0QsSUFDVEEsRUFBWUMsR0FHcEIsT0FBT0QsQ0FDVixFQUNERSxlQUFnQixTQUFValosRUFBU0QsR0FFL0IsSUFBSWlaLEVBQVMsRUFDVEQsRUFBWSxFQUNaRyxFQUFzQixLQUN0QkQsRUFBeUIsS0FDN0IsR0FBSWpaLEVBQ0EsSUFBSyxJQUFJbVksS0FBYW5ZLEVBQ2JtWSxFQUFVdnBELE1BTVhvcUQsRUFBUyxHQUxNLElBQVhBLElBQ0FFLEVBQWNmLEVBQVUzZ0MsTUFFNUJ3aEMsS0FJQUEsR0FBVUQsSUFDVkEsRUFBWUMsRUFDWkMsRUFBaUJDLEdBSTdCLE9BQU9ELENBQ1YsRUFDREUsYUFBYyxTQUFVblosRUFBU0QsR0FFN0IsSUFBSWlaLEVBQVMsRUFDVEQsRUFBWSxFQUNaSyxFQUFvQixLQUNwQkQsRUFBdUIsS0FDM0IsR0FBSW5aLEVBQVMsQ0FDVCxJQUFJa1ksRUFBZXZpRCxNQUFNVixLQUFLK3FDLEdBQzlCLElBQUssSUFBSXRDLEVBQU0sRUFBR0EsRUFBTXdhLEVBQWEvbkQsT0FBUXV0QyxJQUFPLENBQ2hELElBQUloRCxFQUFRd2QsRUFBYXhhLEdBQ3JCb2IsRUFBWSxLQUNacGIsRUFBTXdhLEVBQWEvbkQsT0FBUyxJQUM1QjJvRCxFQUFZWixFQUFheGEsRUFBTSxJQUU5QmhELEVBQU05ckMsTUFNUG9xRCxFQUFTLEdBTFRBLEtBQ0lGLGFBQVMsRUFBVEEsRUFBV2xxRCxTQUNYd3FELEVBQVkxZSxFQUFNbGpCLE9BS3RCd2hDLEdBQVVELElBQ1ZBLEVBQVlDLEVBQ1pHLEVBQWVDLEVBRXRCLENBQ0osQ0FDRCxPQUFPRCxDQUNWLEVBQ0RFLFdBQVksU0FBVXJaLEVBQVNELEdBQzNCLE1BQU8seUNBQ1YsRUFDRHVaLGNBQWUsU0FBVXRaLEVBQVNELEdBRTlCLElBQUl1WixFQUFnQixFQUNwQixHQUFJdFosRUFBUyxDQUNULElBQUlrWSxFQUFldmlELE1BQU1WLEtBQUsrcUMsR0FDOUIsSUFBSyxJQUFJdEMsRUFBTXdhLEVBQWEvbkQsT0FBUyxFQUFHdXRDLEdBQU8sRUFBR0EsSUFBTyxDQUVyRCxJQURZd2EsRUFBYXhhLEdBQ2Q5dUMsTUFDUCxNQUVBMHFELEdBRVAsQ0FDSixDQUNELE9BQU9BLENBQ1YsRUFDREMsbUJBQW9CLFNBQVV2WixFQUFTRCxHQUduQyxJQUFJd1osRUFBNkIsS0FDakMsR0FBSXZaLEVBQVMsQ0FDVCxJQUFJa1ksRUFBZXZpRCxNQUFNVixLQUFLK3FDLEdBQzlCLElBQUssSUFBSXRDLEVBQU13YSxFQUFhL25ELE9BQVMsRUFBR3V0QyxHQUFPLEVBQUdBLElBQU8sQ0FDckQsSUFBSWhELEVBQVF3ZCxFQUFheGEsR0FJekIsR0FISUEsRUFBTXdhLEVBQWEvbkQsT0FBUyxJQUM1Qm9wRCxFQUFxQnJCLEVBQWF4YSxFQUFNLEdBQUdsbUIsT0FFMUNrakIsRUFBTTlyQyxNQUNQLEtBSVAsQ0FDSixDQUVELE9BQTJCLE9BQXZCMnFELEVBQ08saUJBRUpBLENBQ1YsRUFDREMsaUJBQWtCLFNBQVV4WixFQUFTRCxHQUVqQyxJQUFJdVosRUFBZ0IsRUFDaEJFLEVBQTJCLEtBQy9CLEdBQUl4WixFQUFTLENBQ1QsSUFBSWtZLEVBQWV2aUQsTUFBTVYsS0FBSytxQyxHQUM5QixJQUFLLElBQUl0QyxFQUFNd2EsRUFBYS9uRCxPQUFTLEVBQUd1dEMsR0FBTyxFQUFHQSxJQUFPLENBQ3JELElBQUloRCxFQUFRd2QsRUFBYXhhLEdBQ3pCLElBQUtoRCxFQUFNOXJDLE1BQ1AsTUFFc0IsSUFBbEIwcUQsSUFDQUUsRUFBbUI5ZSxFQUFNbGpCLE1BRTdCOGhDLEdBRVAsQ0FDSixDQUVELE9BQXlCLE9BQXJCRSxFQUNPLGlCQUVKQSxDQUNWLEVBQ0RDLGNBQWUsU0FBVXpaLEVBQVNELEdBRTlCLElBQUkwWixFQUFnQixFQUNwQixHQUFJelosRUFBUyxDQUNULElBQUlrWSxFQUFldmlELE1BQU1WLEtBQUsrcUMsR0FDOUIsSUFBSyxJQUFJdEMsRUFBTXdhLEVBQWEvbkQsT0FBUyxFQUFHdXRDLEdBQU8sRUFBR0EsSUFBTyxDQUVyRCxHQURZd2EsRUFBYXhhLEdBQ2Q5dUMsTUFHUCxNQUZBNnFELEdBSVAsQ0FDSixDQUNELE9BQU9BLENBQ1YsRUFDREMsbUJBQW9CLFNBQVUxWixFQUFTRCxHQUduQyxJQUFJMlosRUFBNkIsS0FDakMsR0FBSTFaLEVBQVMsQ0FDVCxJQUFJa1ksRUFBZXZpRCxNQUFNVixLQUFLK3FDLEdBQzlCLElBQUssSUFBSXRDLEVBQU13YSxFQUFhL25ELE9BQVMsRUFBR3V0QyxHQUFPLEVBQUdBLElBQU8sQ0FDckQsSUFBSWhELEVBQVF3ZCxFQUFheGEsR0FJekIsR0FISUEsRUFBTXdhLEVBQWEvbkQsT0FBUyxJQUM1QnVwRCxFQUFxQnhCLEVBQWF4YSxFQUFNLEdBQUdsbUIsTUFFMUNrakIsRUFBTTlyQyxNQUdQLEtBRVAsQ0FDSixDQUVELE9BQTJCLE9BQXZCOHFELEVBQ08saUJBRUpBLENBQ1YsRUFDREMsaUJBQWtCLFNBQVUzWixFQUFTRCxHQUVqQyxJQUFJMFosRUFBZ0IsRUFDaEJFLEVBQTJCLEtBQy9CLEdBQUkzWixFQUFTLENBQ1QsSUFBSWtZLEVBQWV2aUQsTUFBTVYsS0FBSytxQyxHQUM5QixJQUFLLElBQUl0QyxFQUFNd2EsRUFBYS9uRCxPQUFTLEVBQUd1dEMsR0FBTyxFQUFHQSxJQUFPLENBQ3JELElBQUloRCxFQUFRd2QsRUFBYXhhLEdBQ3pCLEdBQUtoRCxFQUFNOXJDLE1BTVAsTUFMc0IsSUFBbEI2cUQsSUFDQUUsRUFBbUJqZixFQUFNbGpCLE1BRTdCaWlDLEdBSVAsQ0FDSixDQUVELE9BQXlCLE9BQXJCRSxFQUNPLGlCQUVKQSxDQUNWLEVBQ0RDLFFBQVMsU0FBVTVaLEVBQVNELEdBRXhCLElBQUlULEVBQWVVLEVBQVFYLG1CQUMzQixPQUFLbVcsR0FBYWxXLEdBR1IrWSxFQUFPclksRUFBUWIsYUFDWkcsRUFIRixxQ0FJZCxFQUNEeHFDLE9BQVEsU0FBVWtyQyxFQUFTRCxHQUV2QixPQUFPOFosRUFBVTdaLEVBQVFiLFlBQzVCLEVBQ0QyYSxTQUFVLFNBQVU5WixFQUFTRCxHQUV6QixPRXBjTyxTQUFrQnZzQyxFQUFRQyxHQUN2QyxJQUNJM0QsRUFEQTJDLEVBQVEsRUFFUnNuRCxFQUFPLEVBQ1Bua0QsRUFBTSxFQUNWLFFBQWdCbEMsSUFBWkQsRUFDRixJQUFLLElBQUk3RSxLQUFTNEUsRUFDSCxNQUFUNUUsSUFBa0JBLEdBQVNBLElBQVVBLElBQ3ZDa0IsRUFBUWxCLEVBQVFtckQsRUFDaEJBLEdBQVFqcUQsSUFBVTJDLEVBQ2xCbUQsR0FBTzlGLEdBQVNsQixFQUFRbXJELFFBR3ZCLENBQ0wsSUFBSXBtRCxHQUFTLEVBQ2IsSUFBSyxJQUFJL0UsS0FBUzRFLEVBQ2lDLE9BQTVDNUUsRUFBUTZFLEVBQVE3RSxJQUFTK0UsRUFBT0gsTUFBcUI1RSxHQUFTQSxJQUFVQSxJQUMzRWtCLEVBQVFsQixFQUFRbXJELEVBQ2hCQSxHQUFRanFELElBQVUyQyxFQUNsQm1ELEdBQU85RixHQUFTbEIsRUFBUW1yRCxHQUc3QixDQUNELEdBQUl0bkQsRUFBUSxFQUFHLE9BQU9tRCxHQUFPbkQsRUFBUSxFQUN2QyxDRjRhZXVuRCxDQUFZaGEsRUFBUWIsWUFDOUIsR0FHQzhhLEdBQTZCLENBQy9CLElBQUssU0FBVXJ5QixHQUNYLEdBQWlCLGlCQUFOQSxFQUNQLE9BQVEsRUFBSUEsRUFDVCxHQUFJQSxhQUFhb1YsR0FBUyxDQUM3QixJQUFJYSxFQUFhalcsRUFBRWdXLG9CQU9uQixPQU5BQyxFQUFXc0IsWUFBWXFWLFNBQVEsU0FBVTVsRCxFQUFPK0UsRUFBT0csR0FDOUIsT0FBakJBLEVBQU1ILEtBQ05HLEVBQU1ILElBQVUsRUFBSS9FLEVBRTVCLElBQ0FpdkMsRUFBV1Esb0JBQ0pSLENBQ1YsQ0FDRCxNQUFPLGtDQUNWLEVBQ0QsSUFBSyxTQUFValcsR0FDWCxHQUFpQixpQkFBTkEsRUFDUCxPQUFPQSxFQUNKLEdBQUlBLGFBQWFvVixHQUFTLENBRTdCLE9BRGlCcFYsRUFBRWdXLG1CQUV0QixDQUNELE1BQU8sa0NBQ1YsR0FHQ3NjLEdBQStCLENBQ2pDLElBQUssU0FBVXRvQyxFQUFHUSxHQUNkLEdBQWlCLGlCQUFOUixHQUErQixpQkFBTlEsRUFFaEMsT0FBT1IsRUFBSVEsRUFDUixHQUFpQixpQkFBTlIsR0FBa0JRLGFBQWE0cUIsR0FBUyxDQUV0RCxJQUFJYSxFQUFhenJCLEVBQUV3ckIsb0JBU25CLE9BUkFDLEVBQVdzQixZQUFZcVYsU0FBUSxTQUFVNWxELEVBQU8rRSxFQUFPRyxHQUM5QixPQUFqQkEsRUFBTUgsR0FDTkcsRUFBTUgsR0FBU2llLEVBQUloakIsRUFFbkJrRixFQUFNSCxHQUFTLElBRXZCLElBQ0FrcUMsRUFBV1Esb0JBQ0pSLENBQ1YsQ0FBTSxHQUFJanNCLGFBQWFvckIsSUFBd0IsaUJBQU41cUIsRUFBZ0IsQ0FFdEQsSUFBSXlyQixFQUFhanNCLEVBQUVnc0Isb0JBU25CLE9BUkFDLEVBQVdzQixZQUFZcVYsU0FBUSxTQUFVNWxELEVBQU8rRSxFQUFPRyxHQUM5QixPQUFqQkEsRUFBTUgsR0FDTkcsRUFBTUgsR0FBUy9FLEVBQVF3akIsRUFFdkJ0ZSxFQUFNSCxHQUFTLElBRXZCLElBQ0FrcUMsRUFBV1Esb0JBQ0pSLENBQ1YsQ0FBTSxHQUFJanNCLGFBQWFvckIsSUFBVzVxQixhQUFhNHFCLEdBQVMsQ0FFckQsSUFBSWEsRUFBYWpzQixFQUFFZ3NCLG9CQVNuQixPQVJBQyxFQUFXc0IsWUFBWXFWLFNBQVEsU0FBVTVsRCxFQUFPK0UsRUFBT0csR0FDOUIsT0FBakJBLEVBQU1ILEdBQ05HLEVBQU1ILEdBQVMvRSxFQUFRd2pCLEVBQUUrc0IsWUFBWXhyQyxHQUVyQ0csRUFBTUgsR0FBUyxJQUV2QixJQUNBa3FDLEVBQVdRLG9CQUNKUixDQUNWLENBQ0QsTUFBTyxrQ0FDVixFQUNELElBQUssU0FBVWpzQixFQUFHUSxHQUNkLEdBQWlCLGlCQUFOUixHQUErQixpQkFBTlEsRUFFaEMsT0FBT1IsRUFBSVEsRUFDUixHQUFpQixpQkFBTlIsR0FBa0JRLGFBQWE0cUIsR0FBUyxDQUV0RCxJQUFJYSxFQUFhenJCLEVBQUV3ckIsb0JBU25CLE9BUkFDLEVBQVdzQixZQUFZcVYsU0FBUSxTQUFVNWxELEVBQU8rRSxFQUFPRyxHQUM5QixPQUFqQkEsRUFBTUgsR0FDTkcsRUFBTUgsR0FBU2llLEVBQUloakIsRUFFbkJrRixFQUFNSCxHQUFTLElBRXZCLElBQ0FrcUMsRUFBV1Esb0JBQ0pSLENBQ1YsQ0FBTSxHQUFJanNCLGFBQWFvckIsSUFBd0IsaUJBQU41cUIsRUFBZ0IsQ0FFdEQsSUFBSXlyQixFQUFhanNCLEVBQUVnc0Isb0JBUW5CLE9BUEFDLEVBQVdzQixZQUFZcVYsU0FBUSxTQUFVNWxELEVBQU8rRSxFQUFPRyxHQUM5QixPQUFqQkEsRUFBTUgsR0FDTkcsRUFBTUgsR0FBUy9FLEVBQVF3akIsRUFFdkJ0ZSxFQUFNSCxHQUFTLElBRXZCLElBQ09rcUMsQ0FDVixDQUFNLEdBQUlqc0IsYUFBYW9yQixJQUFXNXFCLGFBQWE0cUIsR0FBUyxDQUVyRCxJQUFJYSxFQUFhanNCLEVBQUVnc0Isb0JBU25CLE9BUkFDLEVBQVdzQixZQUFZcVYsU0FBUSxTQUFVNWxELEVBQU8rRSxFQUFPRyxHQUM5QixPQUFqQkEsRUFBTUgsR0FDTkcsRUFBTUgsR0FBUy9FLEVBQVF3akIsRUFBRStzQixZQUFZeHJDLEdBRXJDRyxFQUFNSCxHQUFTLElBRXZCLElBQ0FrcUMsRUFBV1Esb0JBQ0pSLENBQ1YsQ0FDRCxNQUFPLGtDQUNWLEVBQ0QsSUFBSyxTQUFVanNCLEVBQUdRLEdBQ2QsR0FBaUIsaUJBQU5SLEdBQStCLGlCQUFOUSxFQUVoQyxPQUFPUixFQUFJUSxFQUNSLEdBQWlCLGlCQUFOUixHQUFrQlEsYUFBYTRxQixHQUFTLENBRXRELElBQUlhLEVBQWF6ckIsRUFBRXdyQixvQkFTbkIsT0FSQUMsRUFBV3NCLFlBQVlxVixTQUFRLFNBQVU1bEQsRUFBTytFLEVBQU9HLEdBQzlCLE9BQWpCQSxFQUFNSCxHQUNORyxFQUFNSCxHQUFTaWUsRUFBSWhqQixFQUVuQmtGLEVBQU1ILEdBQVMsSUFFdkIsSUFDQWtxQyxFQUFXUSxvQkFDSlIsQ0FDVixDQUFNLEdBQUlqc0IsYUFBYW9yQixJQUF3QixpQkFBTjVxQixFQUFnQixDQUV0RCxJQUFJeXJCLEVBQWFqc0IsRUFBRWdzQixvQkFTbkIsT0FSQUMsRUFBV3NCLFlBQVlxVixTQUFRLFNBQVU1bEQsRUFBTytFLEVBQU9HLEdBQzlCLE9BQWpCQSxFQUFNSCxHQUNORyxFQUFNSCxHQUFTL0UsRUFBUXdqQixFQUV2QnRlLEVBQU1ILEdBQVMsSUFFdkIsSUFDQWtxQyxFQUFXUSxvQkFDSlIsQ0FDVixDQUFNLEdBQUlqc0IsYUFBYW9yQixJQUFXNXFCLGFBQWE0cUIsR0FBUyxDQUVyRCxJQUFJYSxFQUFhanNCLEVBQUVnc0Isb0JBU25CLE9BUkFDLEVBQVdzQixZQUFZcVYsU0FBUSxTQUFVNWxELEVBQU8rRSxFQUFPRyxHQUM5QixPQUFqQkEsRUFBTUgsR0FDTkcsRUFBTUgsR0FBUy9FLEVBQVF3akIsRUFBRStzQixZQUFZeHJDLEdBRXJDRyxFQUFNSCxHQUFTLElBRXZCLElBQ0FrcUMsRUFBV1Esb0JBQ0pSLENBQ1YsQ0FDRCxNQUFPLGtDQUNWLEVBQ0QsSUFBSyxTQUFVanNCLEVBQUdRLEdBQ2QsSUFBS29qQyxHQUFhcGpDLEdBQ2QsTUFBTyxzQ0FFWCxHQUFpQixpQkFBTlIsR0FBK0IsaUJBQU5RLEVBRWhDLE9BQU9SLEVBQUlRLEVBQ1IsR0FBaUIsaUJBQU5SLEdBQWtCUSxhQUFhNHFCLEdBQVMsQ0FFdEQsSUFBSWEsRUFBYXpyQixFQUFFd3JCLG9CQVNuQixPQVJBQyxFQUFXc0IsWUFBWXFWLFNBQVEsU0FBVTVsRCxFQUFPK0UsRUFBT0csR0FDOUIsT0FBakJBLEVBQU1ILEdBQ05HLEVBQU1ILEdBQVNpZSxFQUFJaGpCLEVBRW5Ca0YsRUFBTUgsR0FBUyxJQUV2QixJQUNBa3FDLEVBQVdRLG9CQUNKUixDQUNWLENBQU0sR0FBSWpzQixhQUFhb3JCLElBQXdCLGlCQUFONXFCLEVBQWdCLENBRXRELElBQUl5ckIsRUFBYWpzQixFQUFFZ3NCLG9CQVNuQixPQVJBQyxFQUFXc0IsWUFBWXFWLFNBQVEsU0FBVTVsRCxFQUFPK0UsRUFBT0csR0FDOUIsT0FBakJBLEVBQU1ILEdBQ05HLEVBQU1ILEdBQVMvRSxFQUFRd2pCLEVBRXZCdGUsRUFBTUgsR0FBUyxJQUV2QixJQUNBa3FDLEVBQVdRLG9CQUNKUixDQUNWLENBQU0sR0FBSWpzQixhQUFhb3JCLElBQVc1cUIsYUFBYTRxQixHQUFTLENBRXJELElBQUlhLEVBQWFqc0IsRUFBRWdzQixvQkFTbkIsT0FSQUMsRUFBV3NCLFlBQVlxVixTQUFRLFNBQVU1bEQsRUFBTytFLEVBQU9HLEdBQzlCLE9BQWpCQSxFQUFNSCxHQUNORyxFQUFNSCxHQUFTL0UsRUFBUXdqQixFQUFFK3NCLFlBQVl4ckMsR0FFckNHLEVBQU1ILEdBQVMsSUFFdkIsSUFDQWtxQyxFQUFXUSxvQkFDSlIsQ0FDVixDQUNELE1BQU8sa0NBQ1YsRUFDRCxJQUFLLFNBQVVqc0IsRUFBR1EsR0FDZCxJQUFLb2pDLEdBQWFwakMsR0FDZCxNQUFPLHNDQUVYLEdBQWlCLGlCQUFOUixHQUErQixpQkFBTlEsRUFFaEMsT0FBT1IsRUFBSVEsRUFDUixHQUFpQixpQkFBTlIsR0FBa0JRLGFBQWE0cUIsR0FBUyxDQUV0RCxJQUFJYSxFQUFhenJCLEVBQUV3ckIsb0JBU25CLE9BUkFDLEVBQVdzQixZQUFZcVYsU0FBUSxTQUFVNWxELEVBQU8rRSxFQUFPRyxHQUM5QixPQUFqQkEsRUFBTUgsR0FDTkcsRUFBTUgsR0FBU2llLEVBQUloakIsRUFFbkJrRixFQUFNSCxHQUFTLElBRXZCLElBQ0FrcUMsRUFBV1Esb0JBQ0pSLENBQ1YsQ0FBTSxHQUFJanNCLGFBQWFvckIsSUFBd0IsaUJBQU41cUIsRUFBZ0IsQ0FFdEQsSUFBSXlyQixFQUFhanNCLEVBQUVnc0Isb0JBU25CLE9BUkFDLEVBQVdzQixZQUFZcVYsU0FBUSxTQUFVNWxELEVBQU8rRSxFQUFPRyxHQUM5QixPQUFqQkEsRUFBTUgsR0FDTkcsRUFBTUgsR0FBUy9FLEVBQVF3akIsRUFFdkJ0ZSxFQUFNSCxHQUFTLElBRXZCLElBQ0FrcUMsRUFBV1Esb0JBQ0pSLENBQ1YsQ0FBTSxHQUFJanNCLGFBQWFvckIsSUFBVzVxQixhQUFhNHFCLEdBQVMsQ0FFckQsSUFBSWEsRUFBYWpzQixFQUFFZ3NCLG9CQVNuQixPQVJBQyxFQUFXc0IsWUFBWXFWLFNBQVEsU0FBVTVsRCxFQUFPK0UsRUFBT0csR0FDOUIsT0FBakJBLEVBQU1ILEdBQ05HLEVBQU1ILEdBQVMvRSxFQUFRd2pCLEVBQUUrc0IsWUFBWXhyQyxHQUVyQ0csRUFBTUgsR0FBUyxJQUV2QixJQUNBa3FDLEVBQVdRLG9CQUNKUixDQUNWLENBQ0QsTUFBTyxrQ0FDVixHQUdDc2MsR0FBK0MsQ0FFakR6ekIsVUFBVyxTQUFVc1osRUFBUzdrQyxFQUFNNGtDLEdBR2hDLElBQUk1QyxFQUFPNkMsRUFBUTFCLFVBQ2ZsQixFQUFPNEMsRUFBUXpCLFVBRW5CLEdBQWEsT0FBVHBCLEdBQTBCLE9BQVRDLEdBQWlCQSxFQUFPRCxFQUFNLENBQy9DLElBQUlpZCxFQUFhcGEsRUFBUXBDLG9CQUt6QixPQUpBd2MsRUFBV2piLFlBQVlxVixTQUFRLFNBQVU1bEQsRUFBTytFLEVBQU9HLEdBQ25EQSxFQUFNSCxJQUFVL0UsRUFBUXV1QyxJQUFTQyxFQUFPRCxFQUM1QyxJQUNBaWQsRUFBVy9iLG9CQUNKK2IsQ0FDVixDQUNELE1BQU8sb0RBQ1YsRUFDREMsaUJBQWtCLFNBQVVyYSxFQUFTN2tDLEVBQU00a0MsR0FJdkMsR0FBSTVrQyxHQUFRQSxFQUFLaEwsT0FBUyxFQUFHLENBQ3pCLElBQUltcUQsRUFBZW4vQyxFQUFLLEdBRXBCby9DLEVBQWF2YSxFQUFRcEMsb0JBQ3pCLE9BQUkvWSxPQUFPbVgsU0FBU3NlLEtBQWtCejFCLE9BQU8xdkIsTUFBTW1sRCxJQUMvQ0MsRUFBV3BiLFlBQVlxVixTQUFRLFNBQVU1bEQsRUFBTytFLEVBQU9HLEdBQ3JDLE9BQVZsRixJQUNBa0YsRUFBTUgsR0FBUzJtRCxFQUV2QixJQUNBQyxFQUFXbGMsb0JBQ0prYyxHQUVKLDBEQUNWLENBQ0QsTUFBTyx5REFDVixHQWFMLFNBQVNDLEdBQVNwTCxFQUF1QnJQLEdBR3JDLE9BQVFxUCxFQUFLbjFDLE1BQ1QsSUFBSyxVQUVELE9BRGtCbTFDLEVBQ0N4Z0QsTUFFdkIsSUFBSyxhQUNELElBQ0k2ckQsRUFEaUJyTCxFQUNlbDFDLEtBQ3BDLE9BQUl1Z0QsS0FBa0J6QyxJQUVYeUMsS0FBa0JOLEdBRGxCLHdDQUF3Q00sWUFBeUJBLGVBSXJFLGlDQUFpQ0EsS0FFNUMsSUFBSyxrQkFDRCxJQUFJQyxFQUFZdEwsRUFDWnVMLEVBQWNILEdBQVNFLEVBQVVqSSxTQUFVMVMsR0FDL0MsTUFBMkIsaUJBQWhCNGEsRUFDQUEsRUFFSlYsR0FBYVMsRUFBVXpJLFVBQVUwSSxHQUU1QyxJQUFLLG1CQUNELElBQUlDLEVBQWF4TCxFQUNieUwsRUFBWUwsR0FBU0ksRUFBVzdxRCxLQUFNZ3dDLEdBQ3RDK2EsRUFBYU4sR0FBU0ksRUFBV25xRCxNQUFPc3ZDLEdBQ3hDZ2IsRUExdEJoQixTQUFnQ2hyRCxFQUFXVSxHQUN2QyxNQUFvQixpQkFBVFYsRUFBMEJBLEVBQ2hCLGlCQUFWVSxFQUEyQkEsRUFFbEIsaUJBQVRWLEdBQ05tSCxPQUFPMm9DLE9BQU9tYixTQUFTanJELElBQ3RCQSxhQUFnQml0QyxHQUtELGlCQUFWdnNDLEdBQ055RyxPQUFPMm9DLE9BQU9tYixTQUFTdnFELElBQ3RCQSxhQUFpQnVzQyxHQUloQixHQUZJLCtCQVBBLDZCQVVmLENBd3NCMkJpZSxDQUF1QkosRUFBV0MsR0FDakQsTUFBd0IsaUJBQWJDLEdBQXlCQSxFQUFTclIsV0FBVyxVQUM3Q3FSLEVBRUpiLEdBQWNVLEVBQVczSSxVQUFVNEksRUFBV0MsR0FFekQsSUFBSyxpQkFDRCxJQUFJSSxFQUFXOUwsRUFHWCtMLEVBRG1CRCxFQUFTdkgsT0FDRno1QyxLQUkxQmtoRCxFQWxEaEIsU0FBdUJ4UCxFQUFVN0wsR0FDN0IsT0FBTzZMLEVBQUk5d0MsS0FBSSxTQUFVczBDLEdBQ3JCLE9BQU9vTCxHQUFTcEwsRUFBTXJQLEVBQzFCLEdBQ0osQ0E4Q2dDc2IsQ0FIVEgsRUFBU3psRCxVQUdvQnNxQyxHQUN4QyxHQUE2QixpQkFBbEJxYixFQUE0QixPQUFPQSxFQUc5QyxHQUFlLFlBQVhELEdBQ0EsR0FBNkIsSUFBekJDLEVBQWNqckQsT0FBYyxDQUM1QixJQUFJZ2tELEVBQU1pSCxFQUFjLEdBQ3hCLEdBQW1CLGlCQUFSakgsRUFBa0IsT0FBT0EsRUFDcEMsR0FBbUIsaUJBQVJBLEVBQ1AsTUFBTyxzREFFWCxJQUFJblUsRUFqRXhCLFNBQXdCc2IsRUFBbUJ2YixHQUN2QyxPQUFPQSxFQUFXTixTQUFTVSxlQUFlbWIsRUFDOUMsQ0ErRGtDbmIsQ0FBZWdVLEVBQUtwVSxHQUNsQyxPQUFLQyxHQUNNLG1DQUFtQ21VLElBR2pELE1BR0EsSUFBSWdILEtBQVVuRCxHQUFxQixDQUNwQyxHQUE2QixJQUF6Qm9ELEVBQWNqckQsT0FBYyxDQUU1QixJQUFJNnZDLEVBQVUsS0FDZCxJQUFLLElBQUl1YixLQUFNeGIsRUFBV04sU0FDakJPLEdBQVl1YixFQUFHdmMsV0FBV3JELGlCQUMzQnFFLEVBQVV1YixHQUlsQixPQUFLdmIsRUFHRWdZLEdBQW9CbUQsR0FBUW5iLEVBQVNELEdBRmpDLDJDQUEyQ29iLEdBR3pELENBQ0QsR0FBNkIsSUFBekJDLEVBQWNqckQsT0FBYyxDQUM1QixJQUFJZ2tELEVBQU1pSCxFQUFjLEdBQ3hCLE1BQW1CLGlCQUFSakgsRUFBeUJBLEVBQ2hDQSxhQUFlblgsR0FDUmdiLEdBQW9CbUQsR0FBUWhILEVBQUtwVSxHQUVqQyxvQkFBb0JvYix5QkFFbEMsQ0FDRCxNQUFPLDBDQUEwQ0EsR0FDcEQsQ0FBTSxHQUFJQSxLQUFVaEIsR0FBdUIsQ0FDeEMsR0FBNkIsSUFBekJpQixFQUFjanJELE9BQWMsQ0FDNUIsR0FBZ0MsaUJBQXJCaXJELEVBQWMsR0FDckIsT0FBT0EsRUFBYyxHQUN6QixHQUFJQSxFQUFjLGFBQWNwZSxHQUFTLENBQ3JDLElBQUlnRCxFQUFVb2IsRUFBYyxHQUM1QixPQUFPakIsR0FBc0JnQixHQUN6Qm5iLEVBQ0EsS0FDQUQsRUFFUCxDQUNHLE1BQU8sbUJBQW1Cb2IsdUJBRWpDLENBQU0sR0FBSUMsRUFBY2pyRCxPQUFTLEVBQUcsQ0FDakMsR0FBZ0MsaUJBQXJCaXJELEVBQWMsR0FDckIsT0FBT0EsRUFBYyxHQUV6QixHQUFJQSxFQUFjLGFBQWNwZSxHQUFTLENBQ3JDLElBQUlnRCxFQUFVb2IsRUFBYyxHQUM1QixPQUFPakIsR0FBc0JnQixHQUN6Qm5iLEVBQ0FvYixFQUFjL2hELFFBQU8sU0FDakJ6SyxFQUNBK0UsRUFDQWk0QyxHQUVBLE9BQU9qNEMsRUFBUSxDQUNuQixJQUNBb3NDLEVBRVAsQ0FDRyxNQUFPLG1CQUFtQm9iLHVCQUVqQyxDQUNELE1BQU8sMENBQTBDQSxHQUNwRCxFQUNELE1BQU8saUNBQWlDQSxLQUVoRCxNQUFPLDJCQUNYLENBU0EsU0FBUzFzRCxHQUNMb0ssRUFDQWtuQyxHQUlBLElBTUlqN0IsRUFOQTAyQyxFQUErQixHQUsvQkMsRUFBWSxJQUFJOXpDLE9BRGhCLDhGQUNxQyxNQUV6QyxLQUFRN0MsRUFBUTIyQyxFQUFVM3BDLEtBQUtqWixJQUFRLENBRW5DLElBQUk2aUQsRUFBWTUyQyxFQUFNLEdBQ3RCLElBQUkwMkMsRUFBUTlGLE1BQU0zbUQsR0FBTUEsRUFBRStuQixTQUFXNGtDLFdBRVQsSUFBakI1MkMsRUFBTWQsYUFDb0IsSUFBdEJjLEVBQU1kLE9BQU9vckMsTUFBc0IsQ0FDMUMsSUFBSUEsRUFBT3RxQyxFQUFNZCxPQUFPb3JDLEtBRXBCdU0sRUFBTSxLQUNWLElBQ0lBLEVBQU1qSCxHQUFLdEYsRUFDZCxDQUFDLE1BQU93TSxHQUNMLE1BQU8sU0FBV0EsRUFBSTlMLE9BQ3pCLENBQ0QsSUFBSzZMLEVBQ0QsTUFBTyxvQ0FJWCxNQUFNL3NELEVBQVE0ckQsR0FBU21CLEVBQUs1YixHQUM1QixHQUFxQixpQkFBVm54QyxFQUNQLE9BQU9BLEVBR1gsR0FDcUIsaUJBQVZBLEdBQ1BzSSxPQUFPMm9DLE9BQU9tYixTQUFTcHNELEdBQ3pCLENBQ0UsSUFBSTRJLEVBQVMsVUFDc0IsSUFBeEJzTixFQUFNZCxPQUFPeE0sU0FDcEJBLEVBQVNzTixFQUFNZCxPQUFPeE0sUUFHMUJna0QsRUFBUWxoRCxLQUFLLENBQ1R3YyxPQUFRNGtDLEVBQ1I5c0QsTUFBT0EsRUFDUDRJLE9BQVFBLEdBRWYsQ0FDSixDQUVSLENBRUQsT0FBT2drRCxDQUNYLENBR2dCLFNBQUFLLEdBQ1puVyxFQUNBM0YsR0FFQSxJQUFJK2IsRUFBYXJ0RCxHQUFRaTNDLEVBQVUzRixHQUNuQyxHQUEwQixpQkFBZitiLEVBQ1AsT0FBT0EsRUFFWCxJQUFJTixFQUFVTSxFQUVkLElBQUssSUFBSUMsS0FBZ0JQLEVBQVMsQ0FDOUIsSUFBSTFrQyxFQUFTaWxDLEVBQWFqbEMsT0FDdEJsb0IsRUFBUW10RCxFQUFhbnRELE1BQ3JCNEksRUFBU3VrRCxFQUFhdmtELE9BQ3RCd2tELEVBQVcsR0FDTSxpQkFBVnB0RCxFQUVIb3RELEVBREF4a0QsRUFDVzgrQyxHQUFBQSxRQUFRLElBQU05K0MsRUFBUTVJLEdBRXRCQSxFQUFNbzFCLFFBQVEsR0FFdEI5c0IsT0FBTzJvQyxPQUFPbWIsU0FBU3BzRCxLQUUxQm90RCxFQUFXQyxHQUFpQnJ0RCxFQUQ1QjRJLEdBR21DdW9DLEVBQVdMLGFBSWxEc2MsSUFFQXRXLEVBQVdBLEVBQVM3cUMsTUFBTWljLEdBQVFuVCxLQUFLcTRDLEdBRTlDLENBRUQsT0FBT3RXLENBQ1gsQ0FHZ0IsU0FBQXdXLEdBQ1pyakQsRUFDQWtuQyxHQU1BLEdBSEFsbkMsRUFBT0EsRUFBSytCLE9BR1Isd0NBQXdDZCxLQUFLakIsR0FDN0MsT0FBT2tqQyxXQUFXbGpDLEdBSXRCLElBQUlpakQsRUFBYXJ0RCxHQUFRb0ssRUFBTWtuQyxHQUMvQixHQUEwQixpQkFBZitiLEVBQ1AsT0FBT0EsRUFFWCxJQUFJTixFQUFVTSxFQUVkLE9BQUlOLEVBQVFyckQsT0FBUyxFQUNWcXJELEVBQVEsR0FBRzVzRCxNQUdmLGlDQUNYLENHbm9CQSxTQUFTdXRELEdBQ0xDLEVBQ0FDLEVBQ0F0YyxFQUNBdWMsR0FJQSxJQUFJNVQsRUFBZSxHQUVmNlQsRUFBeUMsR0FBaEN4YyxFQUFXMEIsYUFBYTlkLE1BQ2pDNjRCLEVBQXdCLEdBQVRELEVBQ2ZybUIsRUFBY3NtQixFQUFlRixFQUFRL1csaUJBR3JDL3hDLEVBQXdCLEdBQzVCLElBQUssSUFBSWlwRCxLQUFXSCxFQUFRcGtELEtBQU0sQ0FDOUIsSUFBSXdrRCxFQUFXQyxHQUFrQkYsRUFBUzFjLEdBQzFDLEdBQXdCLGlCQUFiMmMsRUFBdUIsQ0FDOUJoVSxFQUFlZ1UsRUFDZixLQUNILENBQThCLGlCQUFiQSxHQUNkbHBELEVBQU84RyxLQUFLb2lELEVBRW5CLENBQ0QsR0FBcUIsS0FBakJoVSxFQUNBLE9BQU9BLEVBS1gsSUFBSWtVLEVBQXdCLEdBQzVCLElBQUssSUFBSUgsS0FBV0gsRUFBUW5YLE1BQU8sQ0FDL0IsSUFBSTBYLEVBQVdDLEdBQXFCTCxFQUFTMWMsR0FFN0MsR0FBSThjLEVBQVNuVCxXQUFXLFNBQVUsQ0FDOUJoQixFQUFlbVUsRUFDZixLQUNILENBQ0RELEVBQU90aUQsS0FBS3VpRCxFQUNmLENBQ0QsR0FBcUIsS0FBakJuVSxFQUNBLE9BQU9BLEVBS1gsSUFBSXRELEVBQW9Ca1gsRUFBUWxYLGtCQUc1QjJYLEVBQWFILEVBQU85aEQsS0FBSSxTQUFVMUcsR0FDbEMsT0FBTzRvRCxHQUF1QjVvRCxFQUFHLHFCQUNyQyxJQUdJNm9ELEVBQTJCLEdBQy9CLElBQUssSUFBSVIsS0FBV0gsRUFBUWpYLFNBQVUsQ0FDbEMsSUFBSTZYLEVBQWNKLEdBQXFCTCxFQUFTMWMsR0FDaEQsR0FBSW1kLEVBQVl4VCxXQUFXLFNBQVUsQ0FDakNoQixFQUFld1UsRUFDZixLQUNILENBQ0RELEVBQVUzaUQsS0FBSzRpRCxFQUNsQixDQUNELEdBQXFCLEtBQWpCeFUsRUFDQSxPQUFPQSxFQUtYLElBQUl5VSxFQUFnQkYsRUFBVW5pRCxLQUFJLFNBQVUxRyxHQUN4QyxPQUFPNG9ELEdBQXVCNW9ELEVBQUcsb0JBQ3JDLElBR0lreEMsRUFBNEJnWCxFQUFRaFgsMEJBR3BDOFgsRUFBYUMsS0FBa0I3bkQsTUFBTThtRCxFQUFRclgsV0FFN0NxWSxFQUFlakIsRUFBY2tCLFNBQVM5a0QsT0FBTyxLQUNqRDZrRCxFQUFhNWtELEtBQUssYUFBYSxXQVEzQixNQU5JLGFBQ2dDLEdBQWhDcW5DLEVBQVcwQixhQUFhOWQsTUFDeEIsSUFDaUMsR0FBakNvYyxFQUFXMEIsYUFBYXNHLE9BQ3hCLEdBR1IsSUFFQSxJQUFJN0YsRUM3Y08sV0FDYixJQUFJdHpDLEVBQVE2SSxHQUNSK2xELEVBQWEvdEQsR0FDYjJXLEVBQU8sS0FDUGt3QixFQUFhbnhCLEdBQVMsR0FDdEJxeEIsRUFBV3J4QixHQUFTMmEsSUFDcEI0VyxFQUFXdnhCLEdBQVMsR0FFeEIsU0FBUys4QixFQUFJaHFDLEdBQ1gsSUFBSTFILEVBRUFvRSxFQUNBYixFQU1BdXVCLEVBR0FuakIsRUFYQS9LLEdBQUs4RCxFQUFPcEUsR0FBTW9FLElBQU8vSCxPQUd6QnlGLEVBQU0sRUFDTmpDLEVBQVEsSUFBSWdDLE1BQU12QixHQUNsQnFwRCxFQUFPLElBQUk5bkQsTUFBTXZCLEdBQ2pCaXVCLEdBQU1pVSxFQUFXbG5DLE1BQU1pQyxLQUFNb0UsV0FDN0JrdEIsRUFBS3p3QixLQUFLMEIsSUFBSWtzQixHQUFLNXRCLEtBQUtRLEtBQUtvdEIsR0FBSzBXLEVBQVNwbkMsTUFBTWlDLEtBQU1vRSxXQUFhNHNCLElBRXBFdHRCLEVBQUk3QyxLQUFLMEIsSUFBSTFCLEtBQUt3dkIsSUFBSWlCLEdBQU12dUIsRUFBR3NpQyxFQUFTdG5DLE1BQU1pQyxLQUFNb0UsWUFDcERpb0QsRUFBSzNvRCxHQUFLNHRCLEVBQUssR0FBSyxFQUFJLEdBRzVCLElBQUtueUIsRUFBSSxFQUFHQSxFQUFJNEQsSUFBSzVELEdBQ2QyTyxFQUFJcytDLEVBQUs5cEQsRUFBTW5ELEdBQUtBLElBQU01QixFQUFNc0osRUFBSzFILEdBQUlBLEVBQUcwSCxJQUFTLElBQ3hEdEMsR0FBT3VKLEdBU1gsSUFKa0IsTUFBZHErQyxFQUFvQjdwRCxFQUFNeVMsTUFBSyxTQUFTNVYsRUFBR29FLEdBQUssT0FBTzRvRCxFQUFXQyxFQUFLanRELEdBQUlpdEQsRUFBSzdvRCxHQUFJLElBQ3ZFLE1BQVJ3UixHQUFjelMsRUFBTXlTLE1BQUssU0FBUzVWLEVBQUdvRSxHQUFLLE9BQU93UixFQUFLbE8sRUFBSzFILEdBQUkwSCxFQUFLdEQsR0FBSSxJQUc1RXBFLEVBQUksRUFBR3VELEVBQUk2QixHQUFPK3NCLEVBQUt2dUIsRUFBSXNwRCxHQUFNOW5ELEVBQU0sRUFBR3BGLEVBQUk0RCxJQUFLNUQsRUFBRzZ4QixFQUFLQyxFQUM5RDF0QixFQUFJakIsRUFBTW5ELEdBQWlCOHhCLEVBQUtELElBQWxCbGpCLEVBQUlzK0MsRUFBSzdvRCxJQUFtQixFQUFJdUssRUFBSXBMLEVBQUksR0FBSzJwRCxFQUFJRCxFQUFLN29ELEdBQUssQ0FDdkVzRCxLQUFNQSxFQUFLdEQsR0FDWGpCLE1BQU9uRCxFQUNQNUIsTUFBT3VRLEVBQ1BtM0IsV0FBWWpVLEVBQ1ptVSxTQUFVbFUsRUFDVm9VLFNBQVUzaEMsR0FJZCxPQUFPMG9ELENBQ1IsQ0EwQkQsT0F4QkF2YixFQUFJdHpDLE1BQVEsU0FBUzJLLEdBQ25CLE9BQU85RCxVQUFVdEYsUUFBVXZCLEVBQXFCLG1CQUFOMkssRUFBbUJBLEVBQUk0TCxJQUFVNUwsR0FBSTJvQyxHQUFPdHpDLENBQzFGLEVBRUVzekMsRUFBSXNiLFdBQWEsU0FBU2prRCxHQUN4QixPQUFPOUQsVUFBVXRGLFFBQVVxdEQsRUFBYWprRCxFQUFHNk0sRUFBTyxLQUFNODdCLEdBQU9zYixDQUNuRSxFQUVFdGIsRUFBSTk3QixLQUFPLFNBQVM3TSxHQUNsQixPQUFPOUQsVUFBVXRGLFFBQVVpVyxFQUFPN00sRUFBR2lrRCxFQUFhLEtBQU10YixHQUFPOTdCLENBQ25FLEVBRUU4N0IsRUFBSTVMLFdBQWEsU0FBUy84QixHQUN4QixPQUFPOUQsVUFBVXRGLFFBQVVtbUMsRUFBMEIsbUJBQU4vOEIsRUFBbUJBLEVBQUk0TCxJQUFVNUwsR0FBSTJvQyxHQUFPNUwsQ0FDL0YsRUFFRTRMLEVBQUkxTCxTQUFXLFNBQVNqOUIsR0FDdEIsT0FBTzlELFVBQVV0RixRQUFVcW1DLEVBQXdCLG1CQUFOajlCLEVBQW1CQSxFQUFJNEwsSUFBVTVMLEdBQUkyb0MsR0FBTzFMLENBQzdGLEVBRUUwTCxFQUFJeEwsU0FBVyxTQUFTbjlCLEdBQ3RCLE9BQU85RCxVQUFVdEYsUUFBVXVtQyxFQUF3QixtQkFBTm45QixFQUFtQkEsRUFBSTRMLElBQVU1TCxHQUFJMm9DLEdBQU94TCxDQUM3RixFQUVTd0wsQ0FDVCxDRG9ZY3liLEdBQ05DLEVBQVkxYixFQUFJMXVDLEdBRWhCcXFELEVBQVVQLEVBQ1RybEQsVUFBVSxVQUNWQyxLQUFLMGxELEdBQ0xwbEQsUUFDQUMsT0FBTyxLQUNQQyxLQUFLLFFBQVMsVUFFZjBwQixFQUFNMDdCLEtBQVM1bkIsWUFBWUEsR0FBYUUsWUFBWW9tQixHQUV4RCxJQUFJdUIsRUFBWUMsS0FFWDluQixZQUFxQixHQUFUcW1CLEdBQ1pubUIsWUFBcUIsR0FBVG1tQixHQVNqQixTQUFTMEIsRUFBY0MsR0FHbkIsT0FEZ0JBLEVBQU8xbkIsU0FBVzBuQixFQUFPNW5CLGFBQWUsRUFBTXBrQyxLQUFLMGhCLElBQ3BEd3hCLENBSWxCLENBMEJELFNBQVMrWSxFQUFZRCxHQUNqQixPQUFPQSxFQUFPNW5CLFlBQWM0bkIsRUFBTzFuQixTQUFXMG5CLEVBQU81bkIsWUFBYyxDQUN0RSxDQWlDRCxTQUFTOG5CLEVBQTRCRixFQUFhMXRELEdBQzlDLElBQUk2dEQsRUFBYXRCLEVBQVd2c0QsR0FBR216QixNQUMzQjI2QixFQUFnQm5CLEVBQWMzc0QsR0FBR216QixNQUNuQnM2QixFQUFjQyxHQUNoQyxJQUFJSyxFQUFXSixFQUFZRCxHQUV2Qk0sRUFBV3A4QixFQUFJd1gsU0FBU3NrQixHQUN4Qk8sRUFBWVYsRUFBVW5rQixTQUFTc2tCLEdBQy9CUSxFQUFjWCxFQUFVbmtCLFNBQVNza0IsR0FJakNTLEVBQW9CenNELEtBQUtDLEtBQ3pCRCxLQUFBYSxJQUFDMHJELEVBQVUsR0FBS0QsRUFBUyxHQUFPLEdBQzVCdHNELEtBQUFhLElBQUMwckQsRUFBVSxHQUFLRCxFQUFTLEdBQU8sSUE0QnhDLE1BekJrQixLQUFkNUIsRUFBT3BzRCxLQUVQZ3VELEVBQVMsR0FDTEEsRUFBUyxJQUNQQyxFQUFVLEdBQUtELEVBQVMsSUFBTUgsRUFBY00sRUFDbERILEVBQVMsR0FDTEEsRUFBUyxJQUNQQyxFQUFVLEdBQUtELEVBQVMsSUFBTUgsRUFBY00sRUFHbERELEVBQVksSUFDRSxJQUFUbkMsRUFBZ0IrQixFQUFnQixJQUNoQ0MsRUFBV3JzRCxLQUFLMGhCLEdBQUssR0FBSyxJQUduQytxQyxFQUFvQnpzRCxLQUFLQyxLQUNyQkQsS0FBQWEsSUFBQzByRCxFQUFVLEdBQUtELEVBQVMsR0FBTyxHQUM1QnRzRCxLQUFBYSxJQUFDMHJELEVBQVUsR0FBS0QsRUFBUyxHQUFPLElBUXBDRyxFQUxzQnpzRCxLQUFLQyxLQUMzQkQsS0FBQWEsSUFBQzJyRCxFQUFZLEdBQUtGLEVBQVMsR0FBTyxHQUM5QnRzRCxLQUFBYSxJQUFDMnJELEVBQVksR0FBS0YsRUFBUyxHQUFPLElBSy9CLENBQUNBLEVBQVVFLEdBRWYsQ0FBQ0YsRUFBVUMsRUFBV0MsRUFDaEMsQ0ExSGlCYixFQUNicGxELE9BQU8sUUFDUEMsS0FBSyxRQUFRLFNBQVVySSxFQUFRRyxHQUM1QixPQUFPNHNELEVBQVc1c0QsRUFBRXFpQixXQUN4QixJQUNDbmEsS0FBSyxJQUFLMHBCLEdBWUtrN0IsRUFDZnJsRCxVQUFVLFNBQ1ZDLEtBQUtncUMsRUFBSTF1QyxJQUNUZ0YsUUFDQUMsT0FBTyxRQUNQSSxNQUFLLFNBQVVxbEQsRUFBYTF0RCxHQUN6QixPQUFJeXRELEVBQWNDLEdBQ1AsR0FFSnRCLEVBQU9wc0QsRUFDbEIsSUFDQ2tJLEtBQUssYUFBYSxTQUFVckksR0FDekIsTUFDSSxhQUNBK3hCLEVBQUl3WCxTQUFTdnBDLEdBQUcsR0FDaEIsSUFDQSt4QixFQUFJd1gsU0FBU3ZwQyxHQUFHLEdBQ2hCLEdBRVIsSUFDQ2tQLE1BQU0sY0FBZSxVQUNyQjdHLEtBQUssUUFBUyxxQkFPSTRrRCxFQUNsQnJsRCxVQUFVLFlBQ1ZDLEtBQUswbEQsR0FDTHBsRCxRQUNBQyxPQUFPLFFBQ1BJLE1BQUssU0FBVXFsRCxFQUFhMXRELEdBQ3pCLE9BQUk4MEMsRUFDa0IsS0FBZHNYLEVBQU9wc0QsSUFBYXl0RCxFQUFjQyxHQUMzQmpCLEVBQVV6c0QsR0FFZCxHQUVBeXNELEVBQVV6c0QsRUFFekIsSUFDQ2tJLEtBQUssYUFBYSxTQUFVd2xELEVBQWExdEQsR0FDdEMsSUFBSWd1RCxFQUFXVCxFQUFVbmtCLFNBQVNza0IsR0FDOUJLLEVBQVdKLEVBQVlELEdBSzNCLE9BSEFNLEVBQVMsSUFDSyxJQUFUakMsRUFBZ0JZLEVBQWMzc0QsR0FBR216QixRQUNqQzQ2QixFQUFXcnNELEtBQUswaEIsR0FBSyxHQUFLLEdBQ3hCLGFBQWU0cUMsRUFBUyxHQUFLLElBQU1BLEVBQVMsR0FBSyxHQUM1RCxJQUNDai9DLE1BQU0sZUFBZSxTQUFVMitDLEdBRTVCLE9BRGVDLEVBQVlELEdBQ1Roc0QsS0FBSzBoQixHQUFLLFFBQVUsS0FDMUMsSUFDQ2xiLEtBQUssUUFBUyxxQkFvRFA0a0QsRUFDUHJsRCxVQUFVLFFBQ1ZDLEtBQUswbEQsR0FDTHBsRCxRQUNBQyxPQUFPLFlBQ1BDLEtBQUssU0FBVSxTQUNmNkcsTUFBTSxPQUFRLFFBQ2Q3RyxLQUFLLGVBQWdCLEdBQ3JCQSxLQUFLLFVBQVUsU0FBVXdsRCxFQUFhMXRELEdBQ25DLEdBQUk4MEMsR0FDQSxJQUFrQixLQUFkc1gsRUFBT3BzRCxJQUFheXRELEVBQWNDLEtBQ2IsS0FBakJqQixFQUFVenNELEdBQ1YsT0FBTzR0RCxFQUE0QkYsRUFBUTF0RCxRQUluRCxHQUFxQixLQUFqQnlzRCxFQUFVenNELEdBQ1YsT0FBTzR0RCxFQUE0QkYsRUFBUTF0RCxFQUd2RCxJQUNDa0ksS0FBSyxRQUFTLGVBQ3ZCLFVBRWdCa21ELEdBQ1p4QyxFQUNBcmMsRUFDQXVjLEdBSUEsSUFBS3ZjLElBQWV1YyxFQUFTLE9BSTdCLElBQUlELEVBQStCLENBQUEsRUFDbkNBLEVBdGxCSixTQUNJQSxFQUNBRCxFQUNBcmMsRUFDQXVjLEdBR0ExUCxHQUFVd1AsR0FBUXhqRCxPQUFPLFFBQVFRLFNBRWpDLElBREEsSUFBSXlsRCxFQUFRMXRELE9BQU9na0Qsb0JBQW9Ca0gsR0FDOUI3ckQsRUFBSSxFQUFHQSxFQUFJcXVELEVBQU0xdUQsT0FBUUssV0FFdkI2ckQsRUFBY3dDLEVBQU1ydUQsSUFLL0IsSUFBSThLLEVBQU13akQsR0FDRTFDLEdBQ1AzakQsT0FBTyxPQUNQQyxLQUFLLEtBQU0sT0FDWEEsS0FDRyxRQUNBcW5DLEVBQVcwQixhQUFhOWQsTUFDcEJvYyxFQUFXOEIsT0FBTzl4QyxLQUNsQmd3QyxFQUFXOEIsT0FBT3B4QyxPQUV6QmlJLEtBQ0csU0FDQXFuQyxFQUFXMEIsYUFBYXNHLE9BQ3BCaEksRUFBVzhCLE9BQU8vckMsSUFDbEJpcUMsRUFBVzhCLE9BQU85ckMsUUFFOUJzbUQsRUFBbUIsSUFBSS9nRCxFQUd2QixJQUFJeWpELEVBQVl6akQsRUFDWDdDLE9BQU8sS0FDUEMsS0FBSyxLQUFNLGFBQ1hBLEtBQ0csWUFDQSxhQUNJcW5DLEVBQVc4QixPQUFPOXhDLEtBQ2xCLElBQ0Fnd0MsRUFBVzhCLE9BQU8vckMsSUFDbEIsS0FFUDRDLEtBQUssUUFBU3FuQyxFQUFXMEIsYUFBYTlkLE1BQVFvYyxFQUFXOEIsT0FBT3B4QyxPQUNoRWlJLEtBQ0csU0FDQXFuQyxFQUFXMEIsYUFBYXNHLE9BQVNoSSxFQUFXOEIsT0FBTzlyQyxRQUUzRHNtRCxFQUF5QixVQUFJMEMsRUFHN0IsSUFBSXhCLEVBQVd3QixFQUNWdG1ELE9BQU8sS0FDUEMsS0FBSyxLQUFNLFlBQ1hBLEtBQUssUUFBU3FuQyxFQUFXMEIsYUFBYTlkLE9BQ3RDanJCLEtBQUssU0FBVXFuQyxFQUFXMEIsYUFBYXNHLFFBRzVDLE9BRkFzVSxFQUF3QixTQUFJa0IsRUFFckJsQixDQUNYLENBd2hCb0IyQyxDQUFZM0MsRUFBZUQsRUFBUXJjLEdBR25ELElBQUlrZixFQUFtQkMsR0FBa0I1QyxFQUFRclgsVUFBVTkwQyxRQUMzRCxJQUFLLElBQUlLLEVBQUksRUFBR0EsRUFBSThyRCxFQUFRclgsVUFBVTkwQyxPQUFRSyxJQUNiLE9BQXpCOHJELEVBQVFyWCxVQUFVejBDLEtBQ2xCOHJELEVBQVFyWCxVQUFVejBDLEdBQUt5dUQsRUFBaUJ6dUQsS0E1aEJwRCxTQUNJNHJELEVBQ0FDLEVBQ0F0YyxFQUNBdWMsR0FLQSxJQUFLdmMsSUFBZXVjLEVBQVMsT0FFN0IsSUFBS0EsRUFBUTFaLE1BQU8sT0FDcEIsSUFBSXVjLEVBQVluQyxHQUF1QlYsRUFBUTFaLE1BQU8saUJBR2xEQSxFQUFReVosRUFBYzBDLFVBQ3JCdG1ELE9BQU8sUUFDUEksS0FBS3lqRCxFQUFRMVosT0FDYmxxQyxLQUFLLEtBQU0sU0FDWEEsS0FDRyxZQUNBLGFBQ0lxbkMsRUFBVzBCLGFBQWE5ZCxNQUFRLEVBQ2hDLElBQ0F3N0IsRUFBVXBYLE9BQVMsRUFDbkIsS0FFUHJ2QyxLQUFLLFNBQVV5bUQsRUFBVXBYLFFBQ3pCcnZDLEtBQUssUUFBUyxpQkFDbkIyakQsRUFBcUIsTUFBSXpaLEVBR3pCd2MsR0FBa0IvQyxFQUFjL2dELElBQUssRUFBRzZqRCxFQUFVcFgsUUFDbERxWCxHQUFrQi9DLEVBQWMwQyxVQUFXLEVBQUdJLEVBQVVwWCxRQUd4RHNYLEdBQWdCaEQsRUFBY2tCLFNBQVUsRUFBRzRCLEVBQVVwWCxPQUd6RCxDQXlmSXVYLENBQVlsRCxFQUFRQyxFQUFldGMsRUFBWXVjLEdBRS9DSCxHQUFVQyxFQUFRQyxFQUFldGMsRUFBWXVjLEdBRXpDQSxFQUFRNVksWUEzZmhCLFNBQ0kwWSxFQUNBQyxFQUNBdGMsRUFDQXVjLEdBT0EsSUFBSWhoRCxFQUFNK2dELEVBQWMvZ0QsSUFDUitnRCxFQUFjMEMsVUFDOUIsSUFBSXhCLEVBQVdsQixFQUFja0IsU0FDekIzYSxFQUFReVosRUFBY3paLE1BR3RCMmMsRUFBYyxFQUNkM2MsSUFDQTJjLEVBQWN4akIsV0FBVzZHLEVBQU1scUMsS0FBSyxZQUl4QyxJQUFJZ0ksRUFBUTQ3QyxFQUFRcFgsU0FDaEJzYSxFQUFZOStDLEVBQU01RixLQUFJLFNBQVUxRyxHQUNoQyxPQUFPNG9ELEdBQXVCNW9ELEVBQUcsdUJBQ3JDLElBQ0lxckQsRUFBYSxFQUNiQyxFQUFlLEVBQ25CLElBQUssSUFBSWhpQixFQUFNLEVBQUdBLEVBQU1oOUIsRUFBTXZRLE9BQVF1dEMsSUFDOUI4aEIsRUFBVTloQixHQUFLL1osTUFBUSs3QixJQUN2QkEsRUFBZUYsRUFBVTloQixHQUFLL1osTUFDOUI4N0IsRUFBYS9oQixHQUdyQixJQUNJaWlCLEVBQWlCRCxFQURQaC9DLEVBQU0rK0MsR0FDd0J0dkQsT0FDeEN5dkQsRUFBYUosRUFBVUMsR0FBWTFYLE9BQ25DOFgsRUFBV24vQyxFQUFNdlEsT0FFakIydkQsRUFBVyxFQUFJSCxFQUNmSSxFQUFXSCxFQUNYSSxFQUFjLEVBQUlMLEVBR2xCTSxFQUFjLEVBQ2RDLEVBQWUsRUFDZSxhQUE5QjVELEVBQVExWSxtQkFDUnFjLEVBQXlCLEVBQVhILEVBQWVFLEVBQWNOLEVBQzNDUSxHQUFnQkwsRUFBVyxHQUFLRSxHQUNLLGVBQTlCekQsRUFBUTFZLG9CQUNmcWMsR0FDSyxFQUFJSCxFQUFXRSxHQUFlSCxFQUMvQkMsRUFDQXpILEVBQU9tSCxHQUFXLFNBQVVockQsRUFBR2hFLEdBQzNCLE9BQU9nRSxFQUFFbXZCLEtBQ2IsSUFDSnU4QixFQUFlSCxFQUFXSCxHQVM5QixJQUFJTyxFQUFVLEVBQ1ZDLEVBQVUsRUFDZCxHQUErQixRQUEzQjlELEVBQVEzWSxlQUVSd2MsRUFBVXBnQixFQUFXMEIsYUFBYTlkLE1BQVEsRUFBTXM4QixFQUFjLEVBQzlERyxFQUFVYixFQUVWSCxHQUFrQjlqRCxFQUFLLEVBQUc0a0QsRUFBZUgsR0FFekNWLEdBQWdCOUIsRUFBVSxFQUFHMkMsRUFBZUgsUUFDekMsR0FBK0IsV0FBM0J6RCxFQUFRM1ksZUFFZndjLEVBQVVwZ0IsRUFBVzBCLGFBQWE5ZCxNQUFRLEVBQU1zOEIsRUFBYyxFQUM5REcsRUFBVWIsRUFBY3hmLEVBQVcwQixhQUFhc0csT0FBU2dZLEVBRXpEWCxHQUFrQjlqRCxFQUFLLEVBQUc0a0QsRUFBZUgsUUFDdEMsR0FBK0IsU0FBM0J6RCxFQUFRM1ksZUFDZndjLEVBQVUsRUFDVkMsRUFDSWIsRUFDQXhmLEVBQVcwQixhQUFhc0csT0FBUyxFQUNqQ21ZLEVBQWUsRUFFbkJkLEdBQWtCOWpELEVBQUsya0QsRUFBY0gsRUFBVSxHQUUvQ1QsR0FBZ0I5QixFQUFVMEMsRUFBY0gsRUFBVSxPQUMvQyxJQUErQixVQUEzQnhELEVBQVEzWSxlQVNmLE9BUkF3YyxFQUFVcGdCLEVBQVcwQixhQUFhOWQsTUFBUW04QixFQUMxQ00sRUFDSWIsRUFDQXhmLEVBQVcwQixhQUFhc0csT0FBUyxFQUNqQ21ZLEVBQWUsRUFFbkJkLEdBQWtCOWpELEVBQUsya0QsRUFBY0gsRUFBVSxFQUdsRCxDQUdELElBQUlPLEVBQVNoRSxFQUFjMEMsVUFDdEJ0bUQsT0FBTyxLQUNQQyxLQUFLLEtBQU0sVUFDWEEsS0FBSyxZQUFhLGFBQWV5bkQsRUFBVSxJQUFNQyxFQUFVLEtBRzVERSxFQUFXRCxFQUNWNW5ELE9BQU8sUUFDUEMsS0FBSyxRQUFTLGtCQUNkQSxLQUFLLFFBQVN1bkQsR0FDZHZuRCxLQUFLLFNBQVV3bkQsR0FDaEI1RCxFQUFRelksZUFDUnljLEVBQVMvZ0QsTUFBTSxPQUFRKzhDLEVBQVF6WSxlQUUvQnlZLEVBQVF4WSxtQkFDUndjLEVBQVMvZ0QsTUFBTSxTQUFVKzhDLEVBQVF4WSxtQkFHckMsSUFDSXljLEVBQWVULEVBQ2ZVLEVBQWVaLEVBQ2ZhLEVBQWNGLEVBQWVULEVBQVdFLEVBQ3hDVSxFQUFjRixFQUVsQixHQUFrQyxhQUE5QmxFLEVBQVExWSxrQkFFUnljLEVBQ0twb0QsVUFBVSxXQUNWQyxLQUFLd0ksR0FDTGxJLFFBQ0FDLE9BQU8sVUFDUEMsS0FBSyxLQUFNNm5ELEVBQWVQLEVBQWMsR0FDeEN0bkQsS0FBSyxNQUFNLFNBQVV3QixFQUFjMUosR0FDaEMsT0FBT2d3RCxFQUFlaHdELEVBQUl1dkQsQ0FDOUIsSUFDQ3JuRCxLQUFLLEtBQUssU0FBVXdCLEVBQWMxSixHQUMvQixPQWxCTyxDQW1CWCxJQUNDK08sTUFBTSxRQUFRLFNBQVVyRixFQUFjMUosR0FDbkMsT0FBTzhyRCxFQUFRclgsVUFBVXowQyxFQUM3QixJQUdhNnZELEVBQ1pwb0QsVUFBVSxVQUNWQyxLQUFLd0ksR0FDTGxJLFFBQ0FDLE9BQU8sUUFDUEMsS0FBSyxJQUFLK25ELEdBQ1YvbkQsS0FBSyxLQUFLLFNBQVV3QixFQUFjMUosR0FDL0IsT0FBT2t3RCxFQUFjbHdELEVBQUl1dkQsQ0FDN0IsSUFDQ2xuRCxNQUFLLFNBQVVxQixFQUFjMUosR0FDMUIsT0FBTzBKLENBQ1gsSUFDQ3FGLE1BQU0scUJBQXNCLFVBQzVCN0csS0FBSyxRQUFTLHdCQUVSNkcsTUFBTSxRQUFRLFNBQVVyRixFQUFjMUosR0FDN0MsT0FBTzhyRCxFQUFRclgsVUFBVXowQyxFQUM3QixTQUNHLEdBQWtDLGVBQTlCOHJELEVBQVExWSxrQkFBb0MsQ0FDbkQsSUFBSStjLEVBQWlCLEVBSXJCQSxFQUFpQixFQUNqQk4sRUFDS3BvRCxVQUFVLFdBQ1ZDLEtBQUt3SSxHQUNMbEksUUFDQUMsT0FBTyxVQUNQQyxLQUFLLE1BQU0sU0FBVXdCLEVBQWMxSixHQU9oQyxPQU5VLElBQU5BLEVBQ0Ftd0QsRUFBaUJKLEVBQWVQLEVBQWMsRUFFOUNXLEdBQ0luQixFQUFVaHZELEdBQUdtekIsTUFBUW04QixFQUFXRSxFQUFjRixFQUUvQ2EsQ0FDWCxJQUNDam9ELEtBQUssS0FBTThuRCxHQUNYOW5ELEtBQUssS0FBSyxTQUFVd0IsRUFBYzFKLEdBQy9CLE9BakVPLENBa0VYLElBQ0MrTyxNQUFNLFFBQVEsU0FBVXJGLEVBQWMxSixHQUNuQyxPQUFPOHJELEVBQVFyWCxVQUFVejBDLEVBQzdCLElBR0ptd0QsRUFBaUIsRUFDQU4sRUFDWnBvRCxVQUFVLFVBQ1ZDLEtBQUt3SSxHQUNMbEksUUFDQUMsT0FBTyxRQUNQQyxLQUFLLEtBQUssU0FBVXdCLEVBQWMxSixHQU8vQixPQU5VLElBQU5BLEVBQ0Ftd0QsRUFBaUJGLEVBRWpCRSxHQUNJbkIsRUFBVWh2RCxHQUFHbXpCLE1BQVFtOEIsRUFBV0UsRUFBY0YsRUFFL0NhLENBQ1gsSUFDQ2pvRCxLQUFLLElBQUtnb0QsR0FDVjduRCxNQUFLLFNBQVVxQixFQUFjMUosR0FDMUIsT0FBTzBKLENBQ1gsSUFDQ3FGLE1BQU0scUJBQXNCLFVBQzVCN0csS0FBSyxRQUFTLHdCQUVSNkcsTUFBTSxRQUFRLFNBQVVyRixFQUFjMUosR0FDN0MsT0FBTzhyRCxFQUFRclgsVUFBVXowQyxFQUM3QixHQUNILENBQ0wsQ0ErUlFvd0QsQ0FBYXhFLEVBQVFDLEVBQWV0YyxFQUFZdWMsR0Fqb0J4RCxTQUNJdUUsRUFDQXhFLEVBQ0F0YyxHQUVBLElBQUlxYyxFQUFTeFAsR0FBVWlVLEdBQ25CdmxELEVBQU0rZ0QsRUFBYy9nRCxJQUNwQndsRCxFQUFXL2tCLFdBQVd6Z0MsRUFBSTVDLEtBQUssVUFDL0Jxb0QsRUFBWWhsQixXQUFXemdDLEVBQUk1QyxLQUFLLFdBQ3BDNEMsRUFBSTVDLEtBQUssUUFBUyxNQUNiQSxLQUFLLFNBQVUsTUFDZkEsS0FBSyxVQUFXLE9BQU9vb0QsS0FBWUMsS0FDbkNyb0QsS0FBSyxzQkFBdUIsaUJBRTdCcW5DLEVBQVdpQyxjQUNYb2EsRUFBTzc4QyxNQUFNLFFBQVMsU0FFdEI2OEMsRUFBTzc4QyxNQUNILFNBQ0N1aEQsRUFBVy9nQixFQUFXZ0MsWUFBWWx2QixXQUFhLE1BRXBEdXBDLEVBQU83OEMsTUFDSCxVQUNDd2hELEVBQVloaEIsRUFBV2dDLFlBQVlsdkIsV0FBYSxNQUc3RCxDQTBtQkltdUMsQ0FBYzVFLEVBQVFDLEVBQWV0YyxFQUN6QyxVRWhwQmdCa2hCLEdBQ1o3RSxFQUNBcmMsRUFDQW1oQixHQUlBLElBQUtuaEIsSUFBZW1oQixFQUFhLE9BR2pDLElBQUlDLEVBQWdCLEdBQ1VELEVBQVl4YixTQUN0Q3liLEVBQWdCRCxFQUFZeGIsU0FLaEMsSUFBSTBiLEVBQXNCdEUsR0FBcUJxRSxFQUFlcGhCLEdBRTlELEdBQUlxaEIsRUFBb0IxWCxXQUFXLFVBQy9CLE9BQU8wWCxFQUlYLEdBRkFELEVBQWdCQyxFQUVNLEtBQWxCRCxFQUFzQixDQUN0QixJQUFJdFUsRUFBWUQsR0FBVXdQLEdBQVEzakQsT0FBTyxPQUN6QyxHQUFJMG9ELEVBQWM3Z0IsU0FBUyxPQUFTNmdCLEVBQWM3Z0IsU0FBUyxPQUFRLENBQy9ELElBQUkrZ0IsRUFBY0YsRUFBY3RtRCxNQUFNLFlBRXRDLElBQUssSUFBSXltRCxLQUFjRCxFQUNBLE9BQWZDLEdBQXNDLFFBQWZBLEdBQzNCelUsRUFBVXAwQyxPQUFPLE9BQU9JLEtBQUt5b0QsRUFFcEMsTUFDR3pVLEVBQVVoMEMsS0FBS3NvRCxHQUdPLEtBQXRCRCxFQUFZM2hELE9BQ1pzdEMsRUFBVW4wQyxLQUFLLFFBQVN3b0QsRUFBWTNoRCxNQUUzQyxDQUNMLENDakNBLElBQUlnaUQsSUFBZSxFQUNmQyxHQUFrQixJQUNsQkMsR0FBaUIsSUE2Q3JCLFNBQVNDLEdBQWMzaEIsRUFBd0I0aEIsR0FDM0MsSUFBSUMsRUFBYUQsRUFBVTNoQixRQUMzQixHQUEwQixJQUF0QjRoQixFQUFXenhELE9BQWMsT0FBTyxFQUVwQyxJQUFJNnZDLEVBQVUsS0FDZCxHQUFrQyxPQUE5QjJoQixFQUFVemEsZ0JBQTBCLENBQ3BDLElBQUssSUFBSW9VLEtBQWFzRyxFQUVsQixHQURBNWhCLEVBQVVELEVBQVdOLFNBQVNVLGVBQWVtYixHQUN6Q3RiLElBQVlBLEVBQVFoQixXQUFXckQsZUFBZ0IsTUFFdkQsR0FBSXFFLEVBRUEsT0FEQTJoQixFQUFVemEsZ0JBQWtCbEgsRUFBUXpELFNBQzdCLENBRWQsS0FBTSxDQUNILElBQUlzbEIsRUFBZUYsRUFBVXphLGdCQUN6QjRhLEVBQVdGLEVBQVc5VixXQUFXM3ZCLEdBQzFCQSxJQUFPMGxDLElBRWxCLEdBQUlDLEdBQVksRUFBRyxDQUNmLEdBQUlBLElBQWFILEVBQVUzaEIsUUFBUTd2QyxPQUFTLEVBQUcsQ0FFM0MsSUFBSyxJQUFJbXJELEtBQWFzRyxFQUVsQixHQURBNWhCLEVBQVVELEVBQVdOLFNBQVNVLGVBQWVtYixHQUN6Q3RiLElBQVlBLEVBQVFoQixXQUFXckQsZUFBZ0IsTUFFdkQsUUFBSXFFLElBQ0EyaEIsRUFBVXphLGdCQUFrQmxILEVBQVF6RCxTQUM3QixFQUlkLENBQU0sQ0FDSHVsQixJQUNBLElBQUl4RyxFQUFZc0csRUFBV0UsR0FHM0IsR0FGQTloQixFQUFVRCxFQUFXTixTQUFTVSxlQUFlbWIsR0FDN0NxRyxFQUFVemEsZ0JBQWtCb1UsRUFDeEJ0YixJQUFZQSxFQUFRaEIsV0FBV3JELGVBQy9CLE9BQU8sRUFFUCtsQixHQUFjM2hCLEVBQVk0aEIsRUFFakMsQ0FDSixDQUNKLENBRUQsT0FBTyxDQUNYLENBRUEsU0FBUzNDLEdBQ0wzQyxFQUNBRCxFQUNBcmMsRUFDQTRoQixHQUdBL1UsR0FBVXdQLEdBQVF4akQsT0FBTyxRQUFRUSxTQUVqQyxJQURBLElBQUl5bEQsRUFBUTF0RCxPQUFPZ2tELG9CQUFvQmtILEdBQzlCN3JELEVBQUksRUFBR0EsRUFBSXF1RCxFQUFNMXVELE9BQVFLLFdBRXZCNnJELEVBQWN3QyxFQUFNcnVELElBSy9CLElBQUk4SyxFQUFNd2pELEdBQ0UxQyxHQUNQM2pELE9BQU8sT0FDUEMsS0FBSyxLQUFNLE9BQ1hBLEtBQ0csUUFDQXFuQyxFQUFXMEIsYUFBYTlkLE1BQ3BCb2MsRUFBVzhCLE9BQU85eEMsS0FDbEJnd0MsRUFBVzhCLE9BQU9weEMsT0FFekJpSSxLQUNHLFNBQ0FxbkMsRUFBVzBCLGFBQWFzRyxPQUNwQmhJLEVBQVc4QixPQUFPL3JDLElBQ2xCaXFDLEVBQVc4QixPQUFPOXJDLFFBRTlCc21ELEVBQW1CLElBQUkvZ0QsRUFHdkIsSUFBSXlqRCxFQUFZempELEVBQ1g3QyxPQUFPLEtBQ1BDLEtBQUssS0FBTSxhQUNYQSxLQUNHLFlBQ0EsYUFDSXFuQyxFQUFXOEIsT0FBTzl4QyxLQUNsQixJQUNBZ3dDLEVBQVc4QixPQUFPL3JDLElBQ2xCLEtBRVA0QyxLQUFLLFFBQVNxbkMsRUFBVzBCLGFBQWE5ZCxNQUFRb2MsRUFBVzhCLE9BQU9weEMsT0FDaEVpSSxLQUNHLFNBQ0FxbkMsRUFBVzBCLGFBQWFzRyxPQUFTaEksRUFBVzhCLE9BQU85ckMsUUFFM0RzbUQsRUFBeUIsVUFBSTBDLEVBRzdCLElBQUl4QixFQUFXd0IsRUFDVnRtRCxPQUFPLEtBQ1BDLEtBQUssS0FBTSxZQUNYQSxLQUFLLFFBQVNxbkMsRUFBVzBCLGFBQWE5ZCxPQUN0Q2pyQixLQUFLLFNBQVVxbkMsRUFBVzBCLGFBQWFzRyxRQUc1QyxPQUZBc1UsRUFBd0IsU0FBSWtCLEVBRXJCbEIsQ0FDWCxDQUVBLFNBQVMwRixHQUFlMUYsRUFBOEJzRixHQUNsRCxJQUFJSyxFQUFVM0YsRUFBYy9nRCxJQUFJckQsVUFBVSxVQUUxQyxJQUFLLElBQUlncUQsS0FBVUQsRUFBUyxDQUV4QixJQUFJN2xDLEVBQUt5d0IsR0FBVXFWLEdBQVF2cEQsS0FBSyxNQUM1QnlqQixHQUFNQSxFQUFHdXRCLFdBQVcsNkJBQ3BCa0QsR0FBVXFWLEdBQVExaUQsTUFBTSxTQUFVLE9BRXpDLENBRURvaUQsRUFBVTFhLGFBQWUsR0FFekJvVixFQUFjNkYsUUFBUXJwRCxLQUFLLEdBQy9CLENBRUEsU0FBU3NwRCxHQUNML0YsRUFDQUMsRUFDQXRjLEVBQ0E0aEIsRUFDQVMsR0FJQSxJQUFLcmlCLElBQWU0aEIsRUFBVyxPQUUvQixJQUFJRSxFQUFlRixFQUFVemEsZ0JBQzdCLEdBQXFCLE9BQWpCMmEsRUFBdUIsT0FDM0IsSUFBSTdoQixFQUFVRCxFQUFXTixTQUFTVSxlQUFlMGhCLEdBQ2pELElBQUs3aEIsRUFBUyxPQUNkLElBQUlDLEVBQWNELEVBQVFsQyxVQUVYc2tCLEVBQWExMUIsUUFDUDAxQixFQUFhQyxjQUNwQkQsRUFBYTMxQixPQUUzQixJQUFJNjFCLEVBQWlCdEYsR0FBdUIsS0FBTSx1QkFDOUN1RixFQUNBcndELEtBQUtRLElBQUk0dkQsRUFBZTMrQixNQUFPMitCLEVBQWV2YSxRQUFVeVosR0FHeERnQixFQUFpQkosRUFBYTVxRCxPQUFPLFFBQ3JDaXJELEVBQWtCTCxFQUFhNXFELE9BQU8sT0FDdENrckQsRUFBaUIxRixHQUNqQndGLEVBQ0EsNkJBRUFHLEVBQWtCM0YsR0FDbEJ5RixFQUNBLDhCQUdBRyxFQUFlLEVBSWZDLEVBQWN4RyxFQUFjMEMsVUFBVXRtRCxPQUFPLEtBRzdDMnRDLEVBQW1CLEtBQ25CdWIsRUFBVXZiLGlCQUNWQSxFQUFtQnViLEVBQVV2YixpQkFFekJ1YixFQUFVaHdDLFFBQ1Z5MEIsRUFBbUJ1YixFQUFVaHdDLE9BR3JDLElBQUlteEMsRUFBY0QsRUFDYnBxRCxPQUFPLFFBQ1BJLEtBQUs0cEQsR0FDTC9wRCxLQUFLLEtBQU0sY0FDWEEsS0FDRyxZQUNBLGFBQWU2cEQsRUFBVyxFQUFNLElBQU1JLEVBQWdCNWEsT0FBUyxLQUVsRXJ2QyxLQUFLLFFBQVMsOEJBQ2Q2RyxNQUFNLFNBQVUsV0FDaEIvRSxHQUFHLFNBQVMsU0FBVXFJLEdBQ25Cay9DLEdBQWUxRixFQUFlc0YsRUFDbEMsSUFFQXZiLEdBQ0EwYyxFQUFZdmpELE1BQU0sT0FBUTZtQyxHQUU5QndjLEdBQWdCRCxFQUFnQjVhLE9BR2hDLElBQUk1QixFQUFrQixLQUNsQndiLEVBQVV4YixnQkFDVkEsRUFBa0J3YixFQUFVeGIsZ0JBRXhCd2IsRUFBVWh3QyxRQUNWdzBCLEVBQWtCd2IsRUFBVWh3QyxPQUdwQyxJQUFJb3hDLEVBQWFGLEVBQ1pwcUQsT0FBTyxRQUNQSSxLQUFLMnBELEdBQ0w5cEQsS0FBSyxLQUFNLGFBQ1hBLEtBQ0csWUFDQSxhQUNJNnBELEVBQVcsRUFDWCxLQUNDSyxFQUFlRixFQUFlM2EsUUFDL0IsS0FFUHJ2QyxLQUFLLFFBQVMsNkJBQ2Q2RyxNQUFNLFNBQVUsV0FDaEI3RyxLQUFLLGNBQWUsUUFDcEI4QixHQUFHLFNBQVMsU0FBVXFJLEdBQ25Cay9DLEdBQWUxRixFQUFlc0YsRUFDbEMsSUFFQXhiLEdBQ0E0YyxFQUFXeGpELE1BQU0sT0FBUTRtQyxHQUc3QnljLEdBQWdCRixFQUFlM2EsT0FHL0IsSUFBSWliLEVBQWtCaEcsR0FDbEIvYyxFQUNBLCtCQUVKLEdBQ3VCLFdBQW5CMGhCLEVBQVU5YixNQUNVLGVBQW5COGIsRUFBVTliLE9BQ044YixFQUFVM2EsMkJBQ2pCLENBQ0UsSUFBSWljLEVBQWlCSixFQUNoQnBxRCxPQUFPLFFBQ1BJLEtBQUtvbkMsR0FDTHZuQyxLQUNHLFlBQ0EsYUFDSSxJQUFNNnBELEVBQ04sSUFDQVMsRUFBZ0JqYixPQUNoQixLQUVQcnZDLEtBQUssUUFBUywrQkFDZDZHLE1BQU0sU0FBVSxXQUNoQi9FLEdBQUcsU0FBUyxTQUFVcUksR0FFZjYrQyxHQUFjM2hCLEVBQVk0aEIsS0FFMUJJLEdBQWUxRixFQUFlc0YsR0FFOUJ1QixHQUNJOUcsRUFDQUMsRUFDQXRjLEVBQ0E0aEIsRUFDQVMsR0FHWixJQUNKL0YsRUFBdUIsUUFBSTRHLENBQzlCLENBR0QsSUFBSUUsRUFBa0JuRyxHQUNsQixTQUNBLCtCQUVBa0YsRUFBVVcsRUFDVHBxRCxPQUFPLFFBQ1BJLEtBQUssSUFDTEgsS0FBSyxLQUFNLFdBQ1hBLEtBQUssUUFBUywrQkFDZEEsS0FDRyxZQUNBLGFBQ0ksSUFBTTZwRCxFQUNOLEtBQ0NTLEVBQWdCamIsT0FBU29iLEVBQWdCcGIsUUFDMUMsS0FFUHhvQyxNQUFNLFNBQVUsV0FDaEJBLE1BQU0sT0FBUW9pRCxFQUFVOWEsbUJBQzdCd1YsRUFBdUIsUUFBSTZGLEVBRzNCLElBQUlrQixFQUFZcEcsR0FBdUIsSUFBSyw2QkFDNUI2RixFQUNYcHFELE9BQU8sUUFDUEksS0FBSyxLQUNMSCxLQUFLLEtBQU0sYUFDWEEsS0FDRyxZQUNBLGFBQ0ksSUFBTTZwRCxFQUNOLEtBQ0NLLEVBQWUsRUFBSVEsRUFBVXJiLE9BQVMsR0FDdkMsS0FFUHJ2QyxLQUFLLFFBQVMsNkJBQ2Q4QixHQUFHLFNBQVMsU0FBVXFJLEdBRW5Cay9DLEdBQWUxRixFQUFlc0YsR0FDOUJBLEVBQVUxYSxhQUFlLEdBQ3pCLElBQUlvYyxFQUFnQmpCLEVBQWFqZ0QsUUFBUXZCLEtBQUssRUFBRyxTQUNqRHNpRCxHQUNJOUcsRUFDQUMsRUFDQXRjLEVBQ0E0aEIsRUFDQTBCLEVBRVIsSUFDQzlqRCxNQUFNLFNBQVUsV0FHSnNqRCxFQUNacHFELE9BQU8sUUFDUEksS0FBSyxLQUNMSCxLQUFLLEtBQU0sYUFDWEEsS0FDRyxZQUNBLGFBQ0ksSUFBTTZwRCxFQUNOLEtBQ0NLLEVBQWUsRUFBSVEsRUFBVXJiLE9BQVMsR0FDdkMsS0FFUHJ2QyxLQUFLLFFBQVMsNkJBQ2Q4QixHQUFHLFNBQVMsU0FBVXFJLEdBRW5Cay9DLEdBQWUxRixFQUFlc0YsR0FFOUIsSUFBSTJCLEVBQWdCbEIsRUFBYWpnRCxRQUFRdkIsSUFBSSxFQUFHLFNBQ2hEc2lELEdBQ0k5RyxFQUNBQyxFQUNBdGMsRUFDQTRoQixFQUNBMkIsRUFFUixJQUNDL2pELE1BQU0sU0FBVSxXQUdKc2pELEVBQ1pwcUQsT0FBTyxRQUNQSSxLQUFLLEtBQ0xILEtBQUssS0FBTSxjQUNYQSxLQUNHLFlBQ0EsYUFDSSxFQUFJNnBELEVBQ0osS0FDQ0ssRUFBZSxFQUFJUSxFQUFVcmIsT0FBUyxHQUN2QyxLQUVQcnZDLEtBQUssUUFBUyw2QkFDZDhCLEdBQUcsU0FBUyxTQUFVcUksR0FFbkJrL0MsR0FBZTFGLEVBQWVzRixHQUU5QixJQUFJNEIsRUFBWUMsR0FBb0J6akIsRUFBV0wsWUFDL0N3akIsR0FBUTlHLEVBQVFDLEVBQWV0YyxFQUFZNGhCLEVBQVc0QixFQUMxRCxJQUNDaGtELE1BQU0sU0FBVSxXQUVyQnFqRCxHQXBOZSxFQXVOZixJQUFJYSxFQUFlLENBQUMsTUFBTyxNQUFPLE1BQU8sTUFBTyxNQUFPLE1BQU8sT0FDbEIsUUFBeEM5QixFQUFVN2IsWUFBWWowQixlQUN0QjR4QyxFQUFhbnBELEtBQUttcEQsRUFBYS9rQixTQUVuQyxJQUFJZ2xCLEVBQWtCMUcsR0FDbEJ5RyxFQUFhLEdBQ2IseUJBRVdwSCxFQUFjMEMsVUFDeEI5bUQsVUFBVSxZQUNWQyxLQUFLdXJELEdBQ0xqckQsUUFDQUMsT0FBTyxRQUNQSSxNQUFLLFNBQVV6RSxHQUNaLE9BQU9BLENBQ1gsSUFDQ3NFLEtBQUssYUFBYSxTQUFVdEUsRUFBVzVELEdBT3BDLE1BTEksY0FDQ0EsRUFBSSxJQUFPK3hELEVBQ1osS0FDQ0ssRUFBZWMsRUFBZ0IzYixRQUNoQyxHQUVSLElBQ0NydkMsS0FBSyxRQUFTLHlCQUNkQSxLQUFLLGNBQWUsVUFDcEI2RyxNQUFNLFNBQVUsV0FDaEIvRSxHQUFHLFNBQVMsU0FBVXFJLEdBQ25Cay9DLEdBQWUxRixFQUFlc0YsRUFDbEMsSUFDSmlCLEdBQWdCYyxFQUFnQjNiLE9BdFBqQixFQXlQZixJQUNJMUIsRUFBb0IsS0FDcEJzYixFQUFVdGIsa0JBQ1ZBLEVBQW9Cc2IsRUFBVXRiLGtCQUUxQnNiLEVBQVVod0MsUUFDVjAwQixFQUFvQnNiLEVBQVVod0MsT0FHdEMsSUFBSWd5QyxFQUFldEgsRUFBYzBDLFVBQzVCdG1ELE9BQU8sUUFDUEMsS0FBSyxJQUFLLEdBQ1ZBLEtBQUssSUFBS2txRCxHQUNWbHFELEtBQUssUUFBUyxJQUFNNnBELEVBQVdtQixFQUFnQi8vQixPQUMvQ2pyQixLQUFLLFNBZGUsR0FlcEJBLEtBQUssUUFBUywrQkFFZjJ0QyxHQUNBc2QsRUFBYXBrRCxNQUFNLE9BQVE4bUMsR0FFL0J1YyxHQXBCeUIsRUFzQnpCQyxFQUFZbnFELEtBQUssU0FBVWtxRCxHQUMzQnZHLEVBQXNCLE9BQUl3RyxFQUcxQnhELEdBQWdCaEQsRUFBY2tCLFNBQVUsRUFBR3FGLEVBQy9DLENBRUEsU0FBU2dCLEdBQ0x4SCxFQUNBQyxFQUNBdGMsRUFDQTRoQixFQUNBUyxHQUtBLElBQUtyaUIsSUFBZTRoQixFQUFXLE9BRS9CLElBQUk5YixFQUFPOGIsRUFBVTliLEtBQ3JCLEdBQWEsV0FBVEEsR0FBOEIsZUFBVEEsRUFDckIsTUFBTywwQkFHWCxJQUFJZ2MsRUFBZUYsRUFBVXphLGdCQUM3QixHQUFxQixPQUFqQjJhLEVBQXVCLE9BQzNCLElBQUk3aEIsRUFBVUQsRUFBV04sU0FBU1UsZUFBZTBoQixHQUNqRCxJQUFLN2hCLEVBQVMsT0FHZCxJQUFJNmpCLEVBQWtCbEMsRUFBVTNoQixRQUFROEwsV0FBVzN2QixHQUN4Q0EsSUFBTzBsQyxJQUVkQSxFQUFlLElBQUdnQyxFQUFrQixHQUN4QyxJQUFJOWQsRUFBWTRiLEVBQVU1YixVQUFVOGQsR0FFckJ6QixFQUFhMTFCLFFBQ1AwMUIsRUFBYUMsY0FFbEMsSUFBSUMsRUFBaUJ0RixHQUF1QixLQUFNLHVCQUM5Q3VGLEVBQ0Fyd0QsS0FBS1EsSUFBSTR2RCxFQUFlMytCLE1BQU8yK0IsRUFBZXZhLFFBQVV5WixHQUN4RHNDLEVBQWN2QixFQUFXZixHQUFtQkMsR0FBa0IsRUFDOURzQyxHQUFleEIsRUFBdUIsRUFBWnVCLEdBQW1CLEVBSTdDM21CLEVBQU84YSxFQUFPalksRUFBUWIsYUFDYyxPQUFwQ3dpQixFQUFVeGtCLEtBQUswbUIsS0FDZjFtQixFQUFPd2tCLEVBQVV4a0IsS0FBSzBtQixJQUUxQixJQUFJem1CLEVBQU9nYixFQUFPcFksRUFBUWIsYUFDYyxPQUFwQ3dpQixFQUFVdmtCLEtBQUt5bUIsS0FDZnptQixFQUFPdWtCLEVBQVV2a0IsS0FBS3ltQixJQUcxQixJQUFJRyxHQUFtQixHQUNWLE9BQVQ1bUIsR0FBMEIsT0FBVEQsR0FBaUJDLEdBQVFELEtBRTFDNm1CLEdBQW1CLEdBS3ZCLE1BQU1DLEVBQWlCN0IsRUFBYWpnRCxRQUFRNG5DLFFBQVEsU0FDcEQsSUFBSTFNLEVBQVk0bUIsRUFDWDloRCxRQUNBK2hELFNBQVNELEVBQWVyM0IsTUFBTyxRQUNRLFFBQXhDKzBCLEVBQVU3YixZQUFZajBCLGdCQUN0QndyQixFQUFZQSxFQUFVejhCLElBQUksRUFBRyxTQUVqQyxNQUFNdWpELEVBQWUvQixFQUFhamdELFFBQVFpaUQsTUFBTSxTQUNoRCxJQUFJOW1CLEVBQVU2bUIsRUFBYWhpRCxRQUFRdkIsSUFBSSxFQUFJdWpELEVBQWF2M0IsTUFBUSxFQUFHLFFBQ3ZCLFFBQXhDKzBCLEVBQVU3YixZQUFZajBCLGdCQUN0QnlyQixFQUFVQSxFQUFRMThCLElBQUksRUFBRyxTQUU3QixNQUFNeWpELEVBQWdCcmtCLEVBQVF4QixlQUN4QjhsQixFQUFjdGtCLEVBQVF2QixhQUs1QixJQUFJcUksRUFBaUI2YSxFQUFVN2EsZUFDM0J5ZCxFQUFjNUMsRUFBVTVhLFdBQ3hCeWQsRUFBZ0JELEVBQVlWLEdBQzVCN2MsRUFBNkIyYSxFQUFVM2EsMkJBR3ZDeWQsRUFBa0MsR0FDbENDLEVBQVMsRUFDVEMsRUFBUyxFQUNUam5CLEVBQU0sRUFDVixJQUNJLElBQUlrQyxFQUFVdkMsRUFBVWw3QixRQUN4Qnk5QixHQUFXdEMsRUFDWHNDLEVBQVFoL0IsSUFBSSxFQUFHLFFBQ2pCLENBR0VnL0IsRUFBVWdsQixHQUNOM0ksR0FBaUJyYyxFQUFTRyxFQUFXTCxZQUNyQ0ssRUFBV0wsWUFFc0IsZUFBakNFLEVBQVFwb0MsT0FBTyxnQkFDZitwRCxJQUFlLEdBR3lCLFFBQXhDSSxFQUFVN2IsWUFBWWowQixlQUN0QjZ5QyxFQUFTOWtCLEVBQVFoVCxNQUFRLEVBQ3JCODNCLEVBQVMsSUFDVEEsRUFBUyxHQUViQyxFQUFTenlELEtBQUtVLE1BQU04cUMsRUFBTSxLQUUxQmduQixFQUFTOWtCLEVBQVFoVCxNQUNqQiszQixFQUFTenlELEtBQUtVLE1BQU04cUMsRUFBTSxJQUk5QixJQUFJbW5CLEdBQWdCLEdBRWhCamxCLEVBQVF5TSxLQUFLNFgsR0FBa0IsR0FDL0Jya0IsRUFBUXlNLEtBQUs4WCxHQUFnQixLQUU3QlUsR0FBZ0IsR0FHcEIsSUFBSUMsR0FBbUIsRUFFbkJULEdBQ0FDLEdBQ0Exa0IsRUFBUXlNLEtBQUtnWSxJQUFrQixHQUMvQnprQixFQUFReU0sS0FBS2lZLElBQWdCLElBRTdCUSxHQUFtQixHQUd2QixNQUFNQyxFQUFXL2tCLEVBQVEvQixTQUFTMkIsR0FDOUIyaEIsS0FDQXlELFFBQVF6d0QsSUFBSXlyQyxHQUNaZ2xCLFFBQVF6d0QsSUFBSTBuRCxHQUFpQnJjLEVBQVNHLEVBQVdMLGFBQ2pEc2xCLFFBQVF6d0QsSUFBSXd3RCxJQUloQixJQUFJemUsR0FBYSxFQUNacWIsRUFBVWhiLG9CQVFOcWQsR0FDZ0IsT0FBYmUsR0FDSUEsRUFBV2hmLEtBS25CTyxHQUFhLEdBYkEsT0FBYnllLEdBQ0lBLEVBQVdoZixJQUNYTyxHQUFhLEdBZ0J6QixJQUFJMmUsRUFBYyxLQUNkdEQsRUFBVWhiLG9CQUNOcWQsR0FBaUMsT0FBYmUsSUFDcEJFLEdBQWVGLEVBQVc1bkIsSUFBU0MsRUFBT0QsSUFHOUNva0IsS0FDQXlELFFBQVF6d0QsSUFBSTRvQyxHQUNaNm5CLFFBQVF6d0QsSUFBSTZvQyxHQUNaNG5CLFFBQVF6d0QsSUFBSTB3RCxJQUloQixJQUFJQyxFQUFZbGxCLEVBQVEvQixTQUFTMkIsRUFBUyxHQUN0Q3VsQixFQUFZbmxCLEVBQVEvQixTQUFTMkIsR0FBVSxHQUN2Q3dsQixHQUFXLEVBQ0UsT0FBYkwsR0FBcUJBLEVBQVdoZixHQUNkLE9BQWRvZixHQUFzQkEsRUFBWXBmLElBQ2xDcWYsR0FBVyxHQUduQixJQUFJQyxHQUFZLEVBQ0MsT0FBYk4sR0FBcUJBLEVBQVdoZixHQUNkLE9BQWRtZixHQUFzQkEsRUFBWW5mLElBQ2xDc2YsR0FBWSxHQUdoQjlELEtBQ0F5RCxRQUFRendELElBQ0osYUFBYTR3RCxnQkFBd0JKLGlCQUF3QkcsS0FFakVGLFFBQVF6d0QsSUFBSW90RCxFQUFVNWIsV0FDdEJpZixRQUFRendELElBQUksYUFBYTZ3RCxpQkFBd0JDLE1BR3JELElBQUlDLEVBQWlCLEdBQ3JCLEdBQUl4ZSxFQUNBLEdBQUtFLEVBS0QsSUFBSyxJQUFJc1UsS0FBYXFHLEVBQVUzaEIsUUFBUyxDQUNyQyxJQUFJdWxCLEVBQWU1RCxFQUFVM2hCLFFBQVE4TCxXQUFXM3ZCLEdBQ3JDQSxJQUFPbS9CLElBRWxCLEdBQUlpSyxHQUFnQixFQUFHLENBQ25CLElBQUlwbUQsRUFBSTRnQyxFQUFXTixTQUNkVSxlQUFlbWIsR0FDZnJkLFNBQVMyQixHQUNWanJDLEVBQUlndEQsRUFBVTViLFVBQVV3ZixHQUNsQixPQUFOcG1ELEdBQWNBLEVBQUl4SyxJQUNsQjJ3RCxHQUFrQmYsRUFBWWdCLEdBRXJDLENBQ0osTUFqQkdSLEVBQVdoZixJQUNYdWYsRUFBaUJkLEdBb0I3QkMsRUFBZ0JucUQsS0FBSyxDQUNqQmtkLEtBQU15a0MsR0FBaUJyYyxFQUFTRyxFQUFXTCxZQUMzQzl3QyxNQUFPbTJELEVBQ1BFLFlBQWFBLEVBQ2JPLFdBQVk1bEIsRUFBUXBvQixPQUNwQnF0QyxjQUFlQSxFQUNmQyxpQkFBa0JBLEVBQ2xCVyxJQUFLZCxFQUNMZSxJQUFLaEIsRUFDTHBlLFdBQVlBLEVBQ1o4ZSxTQUFVQSxFQUNWQyxVQUFXQSxFQUNYdGUsV0FBWXVlLElBR2hCNW5CLElBR0k2akIsS0FDQUEsSUFBZSxFQUV0QixDQVVELElBQUlvRSxHQUFzQmpCLEVBQVMsR0FBS25DLEVBRXBDbHNELEVBQVF1dkQsS0FFUHJ1RCxPQUFPLEVBQUUsR0FBSyxNQUNkL0IsTUFBTSxDQUFDLEVBQUdtd0QsSUFHZixHQUFhLFdBQVQ5ZixHQUFxQjhiLEVBQVVyYixZQUFjcWIsRUFBVXBiLFdBQVksQ0FDbkUsSUFBSXNmLEVBQWMsVUFDZGxFLEVBQVVqYixZQUNWbWYsRUFBY2xFLEVBQVVqYixZQUNqQmliLEVBQVVod0MsUUFDakJrMEMsRUFBY2xFLEVBQVVod0MsT0FJNUIwcUMsRUFBY2tCLFNBQ1R0bEQsVUFBVSxZQUNWQyxLQUNHdXNELEVBQWdCcHJELFFBQU8sU0FBVWhKLEdBQzdCLE9BQU9BLEVBQUUrMEQsUUFDYixLQUVINXNELFFBQ0FDLE9BQU8sUUFJUEMsS0FBSyxLQUFLLFNBQVVySSxHQUVqQixPQURRZ0csRUFBTWhHLEVBQUVxMUQsS0FBTzVCLEVBQVlDLENBRXZDLElBQ0NyckQsS0FBSyxLQUFLLFNBQVVySSxHQUNqQixPQUFPZ0csRUFBTWhHLEVBQUVvMUQsS0FBT0ssR0FDMUIsSUFDQ3B0RCxLQUFLLFFBQVNxckQsR0FDZHJyRCxLQUFLLFNBelBLLEdBMFBWNkcsTUFBTSxRQUFRLFNBQVVsUCxHQUNyQixPQUFJQSxFQUFFaTJDLFdBQ0dxYixFQUFVaGIsbUJBR08sT0FBbEJ0MkMsRUFBRTQwRCxZQUNLYyxHQUNILFFBQ0FGLEVBRkdFLENBR1csR0FBaEIxMUQsRUFBRTQwRCxZQUFvQixJQUVqQixPQVJBWSxFQVdSLE1BQ1gsSUFDQ3RtRCxNQUFNLFdBQVcsU0FBVWxQLEdBQ3hCLE9BQ0lBLEVBQUV5MEQsa0JBQ0RuRCxFQUFVM2IsZ0JBQWtCMzFDLEVBQUV3MEQsY0FFeEIsR0FFSixDQUNYLElBRUp4SSxFQUFja0IsU0FDVHRsRCxVQUFVLGFBQ1ZDLEtBQ0d1c0QsRUFBZ0JwckQsUUFBTyxTQUFVaEosR0FDN0IsT0FBT0EsRUFBRWcxRCxTQUNiLEtBRUg3c0QsUUFDQUMsT0FBTyxRQUlQQyxLQUFLLEtBQUssU0FBVXJJLEdBRWpCLE9BRFFnRyxFQUFNaEcsRUFBRXExRCxLQUFPNUIsQ0FFM0IsSUFDQ3ByRCxLQUFLLEtBQUssU0FBVXJJLEdBQ2pCLE9BQU9nRyxFQUFNaEcsRUFBRW8xRCxLQUFPSyxHQUMxQixJQUNDcHRELEtBQUssUUFBU3FyRCxHQUNkcnJELEtBQUssU0F4U0ssR0F5U1Y2RyxNQUFNLFFBQVEsU0FBVWxQLEdBQ3JCLE9BQUlBLEVBQUVpMkMsV0FDR3FiLEVBQVVoYixtQkFHTyxPQUFsQnQyQyxFQUFFNDBELFlBQ0tjLEdBQ0gsUUFDQUYsRUFGR0UsQ0FHVyxHQUFoQjExRCxFQUFFNDBELFlBQW9CLElBRWpCLE9BUkFZLEVBV1IsTUFDWCxJQUNDdG1ELE1BQU0sV0FBVyxTQUFVbFAsR0FDeEIsT0FDSUEsRUFBRXkwRCxrQkFDRG5ELEVBQVUzYixnQkFBa0IzMUMsRUFBRXcwRCxjQUV4QixHQUVKLENBQ1gsR0FDUCxDQUdELElBQUluZSxFQUFjLFVBQ2RpYixFQUFVamIsWUFDVkEsRUFBY2liLEVBQVVqYixZQUNqQmliLEVBQVVod0MsUUFDakIrMEIsRUFBY2liLEVBQVVod0MsT0FFZixXQUFUazBCLEdBQXFCOGIsRUFBVXJiLFlBQ3BCK1YsRUFBY2tCLFNBQ3BCdGxELFVBQVUsT0FDVkMsS0FBS3VzRCxHQUNManNELFFBQ0FDLE9BQU8sVUFDUEMsS0FBSyxJQUFLb3JELEdBQ1ZwckQsS0FBSyxNQUFNLFNBQVVySSxHQUNsQixPQUFPZ0csRUFBTWhHLEVBQUVxMUQsSUFDbkIsSUFDQ2h0RCxLQUFLLE1BQU0sU0FBVXJJLEdBQ2xCLE9BQU9nRyxFQUFNaEcsRUFBRW8xRCxJQUNuQixJQUNDbG1ELE1BQU0sUUFBUSxTQUFVbFAsR0FDckIsR0FBSUEsRUFBRWkyQyxXQUFZLENBQ2QsSUFBS3FiLEVBQVVoYixtQkFDWCxPQUFPRCxFQUVYLEdBQXNCLE9BQWxCcjJDLEVBQUU0MEQsWUFBc0IsQ0FPeEIsT0FOa0JjLEdBQ2QsUUFDQXJmLEVBRmNxZixDQUdBLEdBQWhCMTFELEVBQUU0MEQsWUFBb0IsR0FJM0IsQ0FDRyxNQUFPLE1BRWQsQ0FDRCxNQUFPLE1BQ1gsSUFDQzFsRCxNQUFNLFdBQVcsU0FBVWxQLEdBQ3hCLE9BQ0lBLEVBQUV5MEQsa0JBQ0RuRCxFQUFVM2IsZ0JBQWtCMzFDLEVBQUV3MEQsY0FFeEIsR0FFSixDQUNYLElBQ0N0bEQsTUFBTSxTQUFVLFdBSXpCLElBQUl5bUQsRUFBUS9KLEdBQWlCL2tELE9BQU8yb0MsU0FBVUUsRUFBV0wsWUFDekQsR0FBYSxXQUFUbUcsR0FBcUI4YixFQUFVbmIsY0FBZSxDQUM5QyxJQUFJeWYsRUFBYTVKLEVBQWNrQixTQUMxQnRsRCxVQUFVLGFBQ1ZDLEtBQ0d1c0QsRUFBZ0JwckQsUUFBTyxTQUFVaEosR0FDN0IsT0FBT0EsRUFBRW1uQixPQUFTd3VDLENBQ3RCLEtBRUh4dEQsUUFDQUMsT0FBTyxVQUNQQyxLQUFLLElBQWlCLEdBQVpvckQsR0FDVnByRCxLQUFLLE1BQU0sU0FBVXJJLEdBQ2xCLE9BQU9nRyxFQUFNaEcsRUFBRXExRCxJQUNuQixJQUNDaHRELEtBQUssTUFBTSxTQUFVckksR0FDbEIsT0FBT2dHLEVBQU1oRyxFQUFFbzFELElBQ25CLElBQ0Mvc0QsS0FBSyxRQUFTLDhCQUNkNkcsTUFBTSxTQUFVLFdBRVksS0FBN0JvaUQsRUFBVS9hLGVBQ1ZxZixFQUFXMW1ELE1BQU0sU0FBVW9pRCxFQUFVL2EsZ0JBRXJDcWYsRUFBVzFtRCxNQUFNLFNBQVUsUUFFbEMsQ0FHWSxXQUFUc21DLEdBQXFCOGIsRUFBVWxiLGtCQUNYNFYsRUFBY2tCLFNBQzdCdGxELFVBQVUsZ0JBQ1ZDLEtBQUt1c0QsR0FDTGpzRCxRQUNBQyxPQUFPLFVBQ1BDLEtBQUssSUFBS29yRCxHQUNWcHJELEtBQUssTUFBTSxTQUFVckksR0FDbEIsT0FBT2dHLEVBQU1oRyxFQUFFcTFELElBQ25CLElBQ0NodEQsS0FBSyxNQUFNLFNBQVVySSxHQUNsQixPQUFPZ0csRUFBTWhHLEVBQUVvMUQsSUFDbkIsSUFDQy9zRCxLQUFLLE1BQU0sU0FBVXJJLEdBQ2xCLE1BQU8sMkJBQTZCQSxFQUFFbW5CLElBQzFDLElBQ0M5ZSxLQUFLLFFBQVMsaUNBQ2Q2RyxNQUFNLFNBQVUsV0FDaEJBLE1BQU0sU0FBVSxRQUlUODhDLEVBQWNrQixTQUN6QnRsRCxVQUFVLFlBQ1ZDLEtBQUt1c0QsR0FDTGpzRCxRQUNBQyxPQUFPLFFBQ1BJLE1BQUssU0FBVXhJLEdBQ1osT0FBT0EsRUFBRW0xRCxXQUFXM3lDLFVBQ3hCLElBQ0NuYSxLQUFLLGFBQWEsU0FBVXJJLEdBS3pCLE1BRm1CLGFBRk5nRyxFQUFNaEcsRUFBRXExRCxLQUVzQixLQUQ5QnJ2RCxFQUFNaEcsRUFBRW8xRCxLQUFPbkQsRUFBZXZhLE9BQVMsR0FDTSxHQUc5RCxJQUNDeG9DLE1BQU0sZ0JBQWdCLFNBQVVsUCxHQUM3QixPQUNJQSxFQUFFeTBELGtCQUNEbkQsRUFBVTNiLGdCQUFrQjMxQyxFQUFFdzBELGNBRXhCLEdBRUosQ0FDWCxJQUNDbnNELEtBQUssUUFBUSxTQUFVckksR0FDcEIsT0FBT0EsRUFBRW1uQixJQUNiLElBQ0M5ZSxLQUFLLFNBQVMsU0FBVXJJLEdBQ3JCLE9BQU9BLEVBQUV6QixLQUNiLElBQ0M4SixLQUFLLGFBQWEsU0FBVXJJLEdBQ3pCLE9BQU84cEMsR0FBVTZGLEVBQVF0RSxVQUM3QixJQUNDaGpDLEtBQUssUUFBUyx1QkFDZDhCLEdBQUcsU0FBUyxTQUFVcUksR0FFbkJrL0MsR0FBZTFGLEVBQWVzRixHQUU5QixJQUFJbnFDLEVBQU9vMUIsR0FBVXY3QyxNQUFNcUgsS0FBSyxRQVFoQyxHQVBBaXBELEVBQVUxYSxhQUFlenZCLEVBQ3JCbXFDLEVBQVVsYixrQkFDVjRWLEVBQWNrQixTQUNUM2tELE9BQU8sNEJBQThCNGUsR0FDckNqWSxNQUFNLFNBQVVvaUQsRUFBVTlhLG1CQUcvQjhhLEVBQVV6YixrQkFBbUIsQ0FDN0IsSUFBSThWLEVBQVdwUCxHQUFVdjdDLE1BQU1xSCxLQUFLLFNBRWhDd3RELEVBQVksR0FDaEIsR0FBa0IsU0FGRnRaLEdBQVV2N0MsTUFBTXFILEtBQUssYUFFWCxDQU10Qnd0RCxFQUxlaHZELE9BQU8yb0MsT0FBTyxRQUFTLFNBQVMsR0FDdkJqL0IsSUFDcEJtN0IsV0FBV2lnQixHQUNYLFdBRWlCeGtELE9BQU8sUUFDL0IsTUFDRzB1RCxFQUFZbEssRUFFaEJLLEVBQWM2RixRQUFRcnBELEtBQUtxdEQsRUFDOUIsQ0FDTCxJQUNDM21ELE1BQU0sU0FBVSxXQUdSLGVBQVRzbUMsR0FBeUJpQixHQUNMdVYsRUFBY2tCLFNBQzdCdGxELFVBQVUsaUJBQ1ZDLEtBQUt1c0QsR0FDTGpzRCxRQUNBQyxPQUFPLFFBQ1BJLE1BQUssU0FBVXhJLEdBQ1osT0FBT0EsRUFBRTAyQyxVQUNiLElBQ0NydUMsS0FBSyxhQUFhLFNBQVVySSxHQUN6QixJQUFJODFELEVBQVM5dkQsRUFBTWhHLEVBQUVxMUQsS0FDakJVLEVBQVMvdkQsRUFBTWhHLEVBQUVvMUQsS0FBT25ELEVBQWV2YSxPQUFTLEVBTXBELE9BTEkxM0MsRUFBRTAyQyxhQUNGcWYsR0FBVXRDLEdBRUssYUFBZXFDLEVBQVMsSUFBTUMsRUFBUyxHQUc5RCxJQUNDMXRELEtBQUssUUFBUyw0QkFJdkIsSUFBSW9vRCxFQUFXL2tCLFdBQVdzZ0IsRUFBYy9nRCxJQUFJNUMsS0FBSyxVQUM3Q3FvRCxFQUFZaGxCLFdBQVdzZ0IsRUFBYy9nRCxJQUFJNUMsS0FBSyxXQUM5QzJ0RCxFQUFpQnRxQixXQUFXc2dCLEVBQWMwQyxVQUFVcm1ELEtBQUssVUFDekQ0dEQsRUFBa0J2cUIsV0FBV3NnQixFQUFjMEMsVUFBVXJtRCxLQUFLLFdBQzFENnRELEVBQ0EsRUFBSWhFLEVBQVd4bUIsV0FBV3NnQixFQUFjbUssT0FBTzl0RCxLQUFLLFdBQ3BEK3RELEVBQWEsRUFBSWxFLEVBQ2pCZ0UsRUFBY3hGLEdBQ2QzQixHQUFrQi9DLEVBQWMvZ0QsSUFBSyxFQUFHaXJELEVBQWN4RixHQUV0RDBGLEVBQWEzRixHQUNiMUIsR0FBa0IvQyxFQUFjL2dELElBQUttckQsRUFBYTNGLEVBQVUsR0FFNUR5RixFQUFjRCxHQUNkbEgsR0FDSS9DLEVBQWMwQyxVQUNkLEVBQ0F3SCxFQUFjRCxHQUdsQkcsRUFBYUosR0FDYmpILEdBQWtCL0MsRUFBYy9nRCxJQUFLbXJELEVBQWFKLEVBQWdCLEVBRTFFLENBRUEsU0FBU25ELEdBQ0w5RyxFQUNBQyxFQUNBdGMsRUFDQTRoQixFQUNBUyxHQUlLcmlCLEdBQWUybUIsS0FLcEJ2RSxHQUNJL0YsRUFKSkMsRUFBZ0IyQyxHQUFZM0MsRUFBZUQsRUFBUXJjLEdBTS9DQSxFQUNBNGhCLEVBQ0FTLEdBR0p3QixHQUFnQnhILEVBQVFDLEVBQWV0YyxFQUFZNGhCLEVBQVdTLEdBQ2xFLFVBRWdCc0UsR0FDWnRLLEVBQ0FyYyxFQUNBNGhCLEdBS0EsSUFBSzVoQixJQUFlMm1CLEdBQWEsT0FHaEIvRSxFQUFVM2hCLFFBQzNCLElBQUkybUIsRUFBc0IsRUFDMUIsSUFBSyxJQUFJM21CLEtBQVdELEVBQVdOLFNBQ3RCTyxFQUFRaEIsV0FBV3JELGdCQUNwQmdyQixJQUdSLEdBQTRCLElBQXhCQSxFQUNBLE1BQU8sNkJBR1gsR0FEQWpGLEdBQWMzaEIsRUFBWTRoQixHQUNRLE9BQTlCQSxFQUFVemEsZ0JBQ1YsTUFBTyw2QkFHWCxJQUFJbVYsRUFBK0IsQ0FBQSxFQUNuQ0EsRUFBZ0IyQyxHQUFZM0MsRUFBZUQsRUFBUXJjLEdBRW5ELElBQUk2bUIsRUFBb0IsS0FDeEIsR0FBSWpGLEVBQVUxYixXQUtWLEdBSkEyZ0IsRUFBWUMsR0FDUmxGLEVBQVUxYixVQUNWbEcsRUFBV0wsYUFFVmtuQixFQUFXLENBQ1osSUFBSTNnQixFQUFZL3VDLE9BQU8yb0MsT0FBTzhoQixFQUFVMWIsVUFBVyxXQUFXLEdBRTlELElBQUlBLEVBQVVrRixVQUdWLE1BQU8sb0JBRlB5YixFQUFZM2dCLENBSW5CLE9BRUQyZ0IsRUFBWTdtQixFQUFXTixTQUFTOUIsV0FBV29PLE9BRTFDNmEsSUFFTHpFLEdBQWtCL0YsRUFBUUMsRUFBZXRjLEVBQVk0aEIsRUFBV2lGLEdBRWhFaEQsR0FBZ0J4SCxFQUFRQyxFQUFldGMsRUFBWTRoQixFQUFXaUYsR0F2bUNsRSxTQUNJL0YsRUFDQXhFLEVBQ0F0YyxHQUVBLElBQUlxYyxFQUFTeFAsR0FBVWlVLEdBQ25CdmxELEVBQU0rZ0QsRUFBYy9nRCxJQUNwQndsRCxFQUFXL2tCLFdBQVd6Z0MsRUFBSTVDLEtBQUssVUFDL0Jxb0QsRUFBWWhsQixXQUFXemdDLEVBQUk1QyxLQUFLLFdBQ3BDNEMsRUFBSTVDLEtBQUssUUFBUyxNQUNiQSxLQUFLLFNBQVUsTUFDZkEsS0FBSyxVQUFXLE9BQU9vb0QsS0FBWUMsS0FDbkNyb0QsS0FBSyxzQkFBdUIsaUJBRTdCcW5DLEVBQVdpQyxjQUNYb2EsRUFBTzc4QyxNQUFNLFFBQVMsU0FFdEI2OEMsRUFBTzc4QyxNQUNILFNBQ0N1aEQsRUFBVy9nQixFQUFXZ0MsWUFBWWx2QixXQUFhLE1BRXBEdXBDLEVBQU83OEMsTUFDSCxVQUNDd2hELEVBQVloaEIsRUFBV2dDLFlBQVlsdkIsV0FBYSxNQUc3RCxDQStrQ0ltdUMsQ0FBYzVFLEVBQVFDLEVBQWV0YyxHQUN6QyxVQzE1QmdCK21CLEdBQ1oxSyxFQUNBcmMsRUFDQWduQixHQUlBLEdBQUtobkIsR0FBZSttQixHQUVwQixNQUFPLG9CQTBCWCxVQzhQZ0JFLEdBQ1o1SyxFQUNBcmMsRUFDQWtuQixHQUlBLElBQUtsbkIsSUFBZWtuQixFQUFZLE9BRWhDLElBQUkzTCxFQUFZdmYsV0FBV2tyQixFQUFXam5CLFNBQ3hCRCxFQUFXTixTQUFTVSxlQUFlbWIsR0FHbEIsZUFBM0IyTCxFQUFXNWYsWUFDWHRILEVBQVcwQixhQUFlLENBQUU5ZCxNQUFPLElBQUtva0IsT0FBUSxJQUNkLGFBQTNCa2YsRUFBVzVmLGNBQ2xCdEgsRUFBVzBCLGFBQWUsQ0FBRTlkLE1BQU8sR0FBSW9rQixPQUFRLE1BR25ELElBQUlzVSxFQXZoQlIsU0FDSUQsRUFDQXJjLEVBQ0FrbkIsR0FFQSxJQUFJNUssRUFBK0IsQ0FBQSxFQUduQyxJQUFLdGMsSUFBZWtuQixFQUFZLE9BRWhDLElBQUkzckQsRUFBTXdqRCxHQUNFMUMsR0FDUDNqRCxPQUFPLE9BQ1BDLEtBQUssS0FBTSxPQUNYQSxLQUNHLFFBQ0FxbkMsRUFBVzBCLGFBQWE5ZCxNQUNwQm9jLEVBQVc4QixPQUFPOXhDLEtBQ2xCZ3dDLEVBQVc4QixPQUFPcHhDLE9BRXpCaUksS0FDRyxTQUNBcW5DLEVBQVcwQixhQUFhc0csT0FDcEJoSSxFQUFXOEIsT0FBTy9yQyxJQUNsQmlxQyxFQUFXOEIsT0FBTzlyQyxRQUU5QnNtRCxFQUFtQixJQUFJL2dELEVBR3ZCLElBQUl5akQsRUFBWXpqRCxFQUNYN0MsT0FBTyxLQUNQQyxLQUFLLEtBQU0sYUFDWEEsS0FDRyxZQUNBLGFBQ0lxbkMsRUFBVzhCLE9BQU85eEMsS0FDbEIsSUFDQWd3QyxFQUFXOEIsT0FBTy9yQyxJQUNsQixLQUVQNEMsS0FBSyxRQUFTcW5DLEVBQVcwQixhQUFhOWQsTUFBUW9jLEVBQVc4QixPQUFPcHhDLE9BQ2hFaUksS0FDRyxTQUNBcW5DLEVBQVcwQixhQUFhc0csT0FBU2hJLEVBQVc4QixPQUFPOXJDLFFBRTNEc21ELEVBQXlCLFVBQUkwQyxFQUc3QixJQUFJeEIsRUFBV3dCLEVBQ1Z0bUQsT0FBTyxLQUNQQyxLQUFLLEtBQU0sWUFDWEEsS0FBSyxRQUFTcW5DLEVBQVcwQixhQUFhOWQsT0FDdENqckIsS0FBSyxTQUFVcW5DLEVBQVcwQixhQUFhc0csUUFHNUMsT0FGQXNVLEVBQXdCLFNBQUlrQixFQUVyQmxCLENBQ1gsQ0ErZHdCMkMsQ0FBWTVDLEVBQVFyYyxFQUFZa25CLEdBRWhEQyxFQWxUUixTQUNJN0ssRUFDQXRjLEVBQ0FrbkIsRUFDQWpuQixHQU1BLElBQUtELElBQWVrbkIsRUFBWSxPQUVoQyxJQUFJenhELEVBQVF5eEQsRUFBV3p4RCxNQUNuQjJ4RCxFQUFZM3hELEVBQU1BLEVBQU1yRixPQUFTLEdBQ2pDb0gsRUFBUyxDQUFDLEVBQUc0dkQsR0FHYjNmLEVBQVl5ZixFQUFXemYsVUFDdkI0ZixFQUFvQixTQUFVeDRELEdBQzlCLE9BQUk0NEMsR0FBYUEsRUFBVXFDLFNBQVMsS0FDekJ3ZCxHQUFjLEVBQUdGLEVBQVcsRUFBNUJFLENBQStCejRELEdBQVMsS0FFNUN5NEQsR0FBYyxFQUFHRixFQUFXLEVBQTVCRSxDQUErQno0RCxFQUMxQyxFQUVJMDRELEVBQW1CdEssR0FESm9LLEVBQWFELEdBRzVCLHNCQUdKLEdBQStCLGVBQTNCRixFQUFXNWYsWUFBOEIsQ0FDekMsSUFBSWh4QyxFQUFRa3hELEtBQ1pseEQsRUFBTWtCLE9BQU9BLEdBQVEvQixNQUFNLENBQUMsRUFBR3VxQyxFQUFXMEIsYUFBYTlkLFFBQ3ZEMDRCLEVBQXFCLE1BQUlobUQsRUFFekIsSUFBSW14RCxFQUFVQyxFQUFjcHhELEdBQzVCbXhELEVBQVExd0QsV0FBV3N3RCxHQUNuQixJQUFJMXdELEVBQU8ybEQsRUFBY2tCLFNBQ3BCOWtELE9BQU8sS0FDUEMsS0FBSyxLQUFNLFFBQ1hBLEtBQ0csWUFDQSxlQUFpQnFuQyxFQUFXMEIsYUFBYXNHLE9BQVMsS0FFckQ5c0MsS0FBS3VzRCxHQUNMOXVELEtBQUssUUFBUyxnQkFDbkIyakQsRUFBb0IsS0FBSTNsRCxFQUVUQSxFQUFLdUIsVUFBVSxRQUFRc0gsTUFBTSxTQUFVLFFBRXRDN0ksRUFBS3VCLFVBQVUsUUFFVnZCLEVBQ2hCdUIsVUFBVSxRQUNWUyxLQUFLLFFBQVMsc0JBRW5CaEMsRUFBS2dDLEtBQ0QsUUFDQXFuQyxFQUFXMEIsYUFBYTlkLE1BQVEyakMsRUFBaUIzakMsT0FFckRqdEIsRUFBS2dDLEtBQUssU0E1Q0csRUE0Q29CNHVELEVBQWlCdmYsUUFHbERxWCxHQUNJL0MsRUFBYy9nRCxLQUNiZ3NELEVBQWlCM2pDLE1BakRULEVBa0RJMmpDLEVBQWlCdmYsUUFFbENxWCxHQUNJL0MsRUFBYzBDLFdBQ2J1SSxFQUFpQjNqQyxNQXREVCxFQXVESTJqQyxFQUFpQnZmLE9BRXJDLE1BQU0sR0FBK0IsYUFBM0JrZixFQUFXNWYsWUFBNEIsQ0FDOUMsSUFBSWh4QyxFQUFRa3hELEtBQ1pseEQsRUFBTWtCLE9BQU9BLEdBQVEvQixNQUFNLENBQUN1cUMsRUFBVzBCLGFBQWFzRyxPQUFRLElBQzVEc1UsRUFBcUIsTUFBSWhtRCxFQUV6QixJQUFJbXhELEVBQVVFLEVBQVlyeEQsR0FDMUJteEQsRUFBUTF3RCxXQUFXc3dELEdBQ25CLElBQUkxd0QsRUFBTzJsRCxFQUFja0IsU0FDcEI5a0QsT0FBTyxLQUNQQyxLQUFLLEtBQU0sUUFDWEEsS0FBSyxJQUFLLEdBQ1ZBLEtBQUssSUFBSyxHQUNWdUMsS0FBS3VzRCxHQUNMOXVELEtBQUssUUFBUyxnQkFDbkIyakQsRUFBb0IsS0FBSTNsRCxFQUVUQSxFQUFLdUIsVUFBVSxRQUFRc0gsTUFBTSxTQUFVLFFBRXRDN0ksRUFBS3VCLFVBQVUsUUFFVnZCLEVBQ2hCdUIsVUFBVSxRQUNWUyxLQUFLLFFBQVMsc0JBRW5CaEMsRUFBS2dDLEtBQUssUUFqRkcsRUFpRm1CNHVELEVBQWlCM2pDLE9BQ2pEanRCLEVBQUtnQyxLQUFLLFNBQVVxbkMsRUFBVzBCLGFBQWE5ZCxPQUc1Q3k3QixHQUNJL0MsRUFBYy9nRCxJQXRGTCxFQXVGSWdzRCxFQUFpQjNqQyxNQUM5QixHQUVKeTdCLEdBQ0kvQyxFQUFjMEMsVUEzRkwsRUE0Rkl1SSxFQUFpQjNqQyxNQUM5QixHQUdKMDdCLEdBQ0loRCxFQUFja0IsU0FqR0wsRUFrR0krSixFQUFpQjNqQyxNQUM5QixFQUVQLENBQ0wsQ0E0THdCZ2tDLENBQ2hCdEwsRUFDQXRjLEVBQ0FrbkIsR0FHSixHQUE2QixpQkFBbEJDLEVBQ1AsT0FBT0EsR0ExY2YsU0FDSTdLLEVBQ0F0YyxFQUNBa25CLEdBS0EsSUFBS2xuQixJQUFla25CLEVBQVksT0FJaEMsR0FBSUEsRUFBV3JrQixNQUFPLENBQ2xCLElBQUl1YyxFQUFZbkMsR0FDWmlLLEVBQVdya0IsTUFDWCx1QkFHSixHQUErQixlQUEzQnFrQixFQUFXNWYsWUFBOEIsQ0FDekMsSUFBSXpFLEVBQVF5WixFQUFjMEMsVUFDckJ0bUQsT0FBTyxRQUNQSSxLQUFLb3VELEVBQVdya0IsT0FDaEJscUMsS0FBSyxLQUFNLFNBQ1hBLEtBQUssSUFBS3ltRCxFQUFVeDdCLE1BQVEsR0FDNUJqckIsS0FBSyxJQUFLcW5DLEVBQVcwQixhQUFhc0csT0FBUyxHQUMzQ3J2QyxLQUFLLFNBQVV5bUQsRUFBVXBYLFFBQ3pCcnZDLEtBQUssUUFBUyx1QkFDbkIyakQsRUFBcUIsTUFBSXpaLEVBR3pCd2MsR0FBa0IvQyxFQUFjL2dELElBQUs2akQsRUFBVXg3QixNQXBCdkMsRUFvQndELEdBQ2hFeTdCLEdBQ0kvQyxFQUFjMEMsVUFDZEksRUFBVXg3QixNQXZCTixFQXdCSixHQUlKMDdCLEdBQ0loRCxFQUFja0IsU0FDZDRCLEVBQVV4N0IsTUE5Qk4sRUErQkosRUFFUCxNQUFNLEdBQStCLGFBQTNCc2pDLEVBQVc1ZixZQUE0QixDQUU5QyxJQUFJdWdCLEVBQVU3bkIsRUFBVzBCLGFBQWE5ZCxNQUFRLEVBQzFDdzdCLEVBQVV4N0IsTUFBUW9jLEVBQVcwQixhQUFhOWQsUUFFMUN5N0IsR0FDSS9DLEVBQWMvZ0QsSUFDZDZqRCxFQUFVeDdCLE1BQVFvYyxFQUFXMEIsYUFBYTlkLE1BQzFDLEdBRUp5N0IsR0FDSS9DLEVBQWMwQyxVQUNkSSxFQUFVeDdCLE1BQVFvYyxFQUFXMEIsYUFBYTlkLE1BQzFDLEdBR0owN0IsR0FDSWhELEVBQWNrQixTQUNkNEIsRUFBVXg3QixNQUFRLEVBQU1vYyxFQUFXMEIsYUFBYTlkLE1BQVEsRUFDeEQsR0FFSmlrQyxFQUFVekksRUFBVXg3QixNQUFRLEdBR2hDLElBQUlra0MsRUFBWTlyQixXQUFXc2dCLEVBQWMzbEQsS0FBS2dDLEtBQUssVUFFL0NrcUMsRUFBUXlaLEVBQWMwQyxVQUNyQnRtRCxPQUFPLFFBQ1BJLEtBQUtvdUQsRUFBV3JrQixPQUNoQmxxQyxLQUFLLEtBQU0sU0FDWEEsS0FBSyxJQUFLa3ZELEVBQVVDLEdBQ3BCbnZELEtBQUssSUFBS3ltRCxFQUFVcFgsT0FBUyxHQUM3QnJ2QyxLQUFLLFNBQVV5bUQsRUFBVXBYLFFBQ3pCcnZDLEtBQUssUUFBUyx1QkFDbkIyakQsRUFBcUIsTUFBSXpaLEVBR3pCd2MsR0FBa0IvQyxFQUFjL2dELElBQUssRUFBRzZqRCxFQUFVcFgsT0F0RTFDLEdBdUVScVgsR0FDSS9DLEVBQWMwQyxVQUNkLEVBQ0FJLEVBQVVwWCxPQTFFTixHQThFUnNYLEdBQ0loRCxFQUFja0IsU0FDZCxFQUNBNEIsRUFBVXBYLE9BakZOLEVBbUZYLENBQ0osQ0FFRCxHQUFJa2YsRUFBV3pmLFVBQVcsQ0FDdEIsSUFBSXNnQixFQUFXOUssR0FDWGlLLEVBQVd6ZixVQUNYLHNCQUdKLEdBQStCLGVBQTNCeWYsRUFBVzVmLFlBQThCLENBQ3pDLElBQUk1Z0IsRUFBTzQxQixFQUFja0IsU0FDcEI5a0QsT0FBTyxRQUNQSSxLQUFLb3VELEVBQVd6ZixXQUNoQjl1QyxLQUFLLEtBQU0sUUFDWEEsS0FBSyxLQUFNLEdBQUtvdkQsRUFBU25rQyxNQWpHdEIsSUFrR0hqckIsS0FBSyxJQUFLcW5DLEVBQVcwQixhQUFhc0csT0FsRy9CLEdBbUdIcnZDLEtBQUssU0FBVW92RCxFQUFTL2YsUUFDeEJydkMsS0FBSyxRQUFTLHNCQUNuQjJqRCxFQUFvQixLQUFJNTFCLENBQzNCLE1BQU0sR0FBK0IsYUFBM0J3Z0MsRUFBVzVmLFlBQTRCLENBQzlDLElBQUk1Z0IsRUFBTzQxQixFQUFja0IsU0FDcEI5a0QsT0FBTyxRQUNQSSxLQUFLb3VELEVBQVd6ZixXQUNoQjl1QyxLQUFLLEtBQU0sUUFDWEEsS0FDRyxJQUNBcW5DLEVBQVcwQixhQUFhOWQsTUFBUSxFQUFJbWtDLEVBQVNua0MsTUFBUSxHQUV4RGpyQixLQUFLLE1BQU9vdkQsRUFBUy9mLE9BQVMsRUEvRzNCLElBZ0hIcnZDLEtBQUssU0FBVW92RCxFQUFTL2YsUUFDeEJydkMsS0FBSyxRQUFTLHNCQUNuQjJqRCxFQUFvQixLQUFJNTFCLEVBR3hCMjRCLEdBQWtCL0MsRUFBYy9nRCxJQUFLLEVBQUd3c0QsRUFBUy9mLE9Bckh6QyxHQXNIUnFYLEdBQ0kvQyxFQUFjMEMsVUFDZCxFQUNBK0ksRUFBUy9mLE9BekhMLEdBNkhSc1gsR0FDSWhELEVBQWNrQixTQUNkLEVBQ0F1SyxFQUFTL2YsT0FoSUwsRUFrSVgsQ0FDSixDQUNMLENBK1RJdVgsQ0FBWWpELEVBQWV0YyxFQUFZa25CLEdBbk0zQyxTQUNJNUssRUFDQXRjLEVBQ0FrbkIsRUFDQWpuQixHQUtBLElBQUtELElBQWVrbkIsRUFBWSxPQUVoQyxJQUFJNXdELEVBQVFnbUQsRUFBY2htRCxNQUd0QmIsRUFBUXl4RCxFQUFXenhELE1BQ25Ca3lDLEVBQWF1ZixFQUFXdmYsV0FDeEJ4dkMsRUFBTyxHQUNQNnZELEVBQVksRUFDaEIsSUFBSyxJQUFJcnFCLEVBQU0sRUFBR0EsRUFBTWxvQyxFQUFNckYsT0FBUXV0QyxJQUNsQ3hsQyxFQUFLb0MsS0FBSyxDQUNOL0gsTUFBT3cxRCxFQUNQdHlDLElBQUtqZ0IsRUFBTWtvQyxHQUNYL3JCLE1BQU8rMUIsRUFBV2hLLEtBRXRCcXFCLEVBQVl2eUQsRUFBTWtvQyxHQUdTLGVBQTNCdXBCLEVBQVc1ZixZQUNDZ1YsRUFBY2tCLFNBQ3JCdGxELFVBQVUsYUFDVkMsS0FBS0EsR0FDTE0sUUFDQUMsT0FBTyxRQUNQQyxLQUFLLEtBQUssU0FBVXJJLEVBQVFHLEdBQ3pCLE9BQU8wQixLQUFLVSxNQUFNeUQsRUFBTWhHLEVBQUVrQyxPQUM5QixJQUNDbUcsS0FBSyxLQUFLLFNBQVVySSxHQUNqQixPQUFPLENBQ1gsSUFDQ3FJLEtBQUssU0FBUyxTQUFVckksRUFBUUcsR0FDN0IsT0FBTzBCLEtBQUt3RCxLQUFLVyxFQUFNaEcsRUFBRW9sQixJQUFNcGxCLEVBQUVrQyxPQUNyQyxJQUNDbUcsS0FBSyxTQUFVcW5DLEVBQVcwQixhQUFhc0csUUFDdkN4b0MsTUFBTSxRQUFRLFNBQVVsUCxHQUNyQixPQUFPQSxFQUFFc2hCLEtBQ2IsSUFDOEIsYUFBM0JzMUMsRUFBVzVmLGFBQ05nVixFQUFja0IsU0FDckJ0bEQsVUFBVSxhQUNWQyxLQUFLQSxHQUNMTSxRQUNBQyxPQUFPLFFBQ1BDLEtBQUssS0FBSyxTQUFVckksRUFBUUcsR0FDekIsT0FBTyxDQUNYLElBQ0NrSSxLQUFLLEtBQUssU0FBVXJJLEdBQ2pCLE9BQU82QixLQUFLVSxNQUFNeUQsRUFBTWhHLEVBQUVvbEIsS0FDOUIsSUFDQy9jLEtBQUssUUFBU3FuQyxFQUFXMEIsYUFBYTlkLE9BQ3RDanJCLEtBQUssVUFBVSxTQUFVckksR0FDdEIsT0FDSTB2QyxFQUFXMEIsYUFBYXNHLE9BQ3hCNzFDLEtBQUtVLE1BQU15RCxFQUFNaEcsRUFBRW9sQixJQUFNcGxCLEVBQUVrQyxPQUVuQyxJQUNDZ04sTUFBTSxRQUFRLFNBQVVsUCxHQUNyQixPQUFPQSxFQUFFc2hCLEtBQ2IsR0FFWixDQWdJSXEyQyxDQUFnQjNMLEVBQWV0YyxFQUFZa25CLEdBRTNDLElBQUlnQixFQS9IUixTQUNJNUwsRUFDQXRjLEVBQ0FrbkIsRUFDQWpuQixHQUlBLElBQUkwSSxFQUFlLEdBRW5CLElBQUszSSxJQUFla25CLEVBQVksT0FFaEMsSUFBSWlCLEVBQWlCdkwsR0FBa0JzSyxFQUFXcjRELE1BQU9teEMsR0FFekQsR0FBOEIsaUJBQW5CbW9CLEVBQ1AsT0FBT0EsRUFFWCxJQUFJQyxFQUFjRCxFQUNsQixHQUFJcmpDLE9BQU8xdkIsTUFBTWd6RCxHQUViLE9BREF6ZixFQUFlLHdCQUEwQndmLEVBQ2xDeGYsRUFFWCxJQUFJakIsRUFBYXdmLEVBQVd4ZixXQUV4QnB4QyxFQUFRZ21ELEVBQWNobUQsTUFFMUIsR0FBK0IsZUFBM0I0d0QsRUFBVzVmLFlBQThCLENBQ3pDLElBQUkrZ0IsRUFBV3JvQixFQUFXMEIsYUFBYXNHLE9BQVMsRUFDdENzVSxFQUFja0IsU0FDbkI5a0QsT0FBTyxRQUNQQyxLQUFLLElBQUtyQyxFQUFNLElBQ2hCcUMsS0FBSyxJQUFLMHZELEdBQ1YxdkQsS0FBSyxRQUFTeEcsS0FBS1UsTUFBTXlELEVBQU04eEQsS0FDL0J6dkQsS0FBSyxTQUFVMHZELEdBQ2Y3b0QsTUFBTSxPQUFRa29DLEVBQ3RCLE1BQU0sR0FBK0IsYUFBM0J3ZixFQUFXNWYsWUFBNEIsQ0FDOUMsSUFBSStnQixFQUFXcm9CLEVBQVcwQixhQUFhOWQsTUFBUSxFQUNyQzA0QixFQUFja0IsU0FDbkI5a0QsT0FBTyxRQUNQQyxLQUFLLElBQUswdkQsR0FDVjF2RCxLQUFLLElBQUt4RyxLQUFLVSxNQUFNeUQsRUFBTTh4RCxLQUMzQnp2RCxLQUFLLFFBQVMwdkQsR0FDZDF2RCxLQUNHLFNBQ0FxbkMsRUFBVzBCLGFBQWFzRyxPQUFTNzFDLEtBQUtVLE1BQU15RCxFQUFNOHhELEtBRXJENW9ELE1BQU0sT0FBUWtvQyxFQUN0QixDQUNMLENBK0V1QjRnQixDQUNmaE0sRUFDQXRjLEVBQ0FrbkIsR0FHSixHQUE0QixpQkFBakJnQixFQUNQLE9BQU9BLEdBbkZmLFNBQ0k1TCxFQUNBdGMsRUFDQWtuQixFQUNBam5CLEdBS0EsSUFBS0QsSUFBZWtuQixFQUFZLE9BR2hDLElBRGlCQSxFQUFXdGYsV0FDWCxPQUVqQixJQUFJQyxFQUFjcWYsRUFBV3JmLFlBQ3pCQyxFQUFjb2YsRUFBV3BmLFlBRXpCeHhDLEVBQVFnbUQsRUFBY2htRCxNQUUxQixHQUErQixlQUEzQjR3RCxFQUFXNWYsWUFBOEIsQ0FDekMsSUFBSWloQixFQUFpRCxFQUFqQ3ZvQixFQUFXMEIsYUFBYXNHLE9BQWMsRUFDN0NzVSxFQUFja0IsU0FDdEI5a0QsT0FBTyxRQUNQQyxLQUFLLElBQUtyQyxFQUFNdXhDLEdBQWUsS0FDL0JsdkMsS0FBSyxJQUFLNHZELEVBQWUsR0FDekI1dkQsS0FBSyxRQUFTLEdBQ2RBLEtBQUssU0FBVTR2RCxHQUNmL29ELE1BQU0sT0FBUXNvQyxFQUN0QixNQUFNLEdBQStCLGFBQTNCb2YsRUFBVzVmLFlBQTRCLENBQzlDLElBQUlpaEIsRUFBZ0QsRUFBaEN2b0IsRUFBVzBCLGFBQWE5ZCxNQUFhLEVBQzVDMDRCLEVBQWNrQixTQUN0QjlrRCxPQUFPLFFBQ1BDLEtBQUssSUFBSzR2RCxFQUFlLEdBQ3pCNXZELEtBQUssSUFBS3JDLEVBQU11eEMsR0FBZSxLQUMvQmx2QyxLQUFLLFFBQVM0dkQsR0FDZDV2RCxLQUFLLFNBQVUsR0FDZjZHLE1BQU0sT0FBUXNvQyxFQUN0QixDQUNMLENBZ0RJMGdCLENBQVdsTSxFQUFldGMsRUFBWWtuQixHQXZmMUMsU0FDSXBHLEVBQ0F4RSxFQUNBdGMsR0FFQSxJQUFJcWMsRUFBU3hQLEdBQVVpVSxHQUNuQnZsRCxFQUFNK2dELEVBQWMvZ0QsSUFDcEJ3bEQsRUFBVy9rQixXQUFXemdDLEVBQUk1QyxLQUFLLFVBQy9CcW9ELEVBQVlobEIsV0FBV3pnQyxFQUFJNUMsS0FBSyxXQUNwQzRDLEVBQUk1QyxLQUFLLFFBQVMsTUFDYkEsS0FBSyxTQUFVLE1BQ2ZBLEtBQUssVUFBVyxPQUFPb29ELEtBQVlDLEtBQ25Dcm9ELEtBQUssc0JBQXVCLGlCQUU3QnFuQyxFQUFXaUMsY0FDWG9hLEVBQU83OEMsTUFBTSxRQUFTLFNBRXRCNjhDLEVBQU83OEMsTUFDSCxTQUNDdWhELEVBQVcvZ0IsRUFBV2dDLFlBQVlsdkIsV0FBYSxNQUVwRHVwQyxFQUFPNzhDLE1BQ0gsVUFDQ3doRCxFQUFZaGhCLEVBQVdnQyxZQUFZbHZCLFdBQWEsTUFHN0QsQ0ErZEltdUMsQ0FBYzVFLEVBQVFDLEVBQWV0YyxFQUN6QyxDQ3RTQSxTQUFTeW9CLEdBQ0xuTSxFQUNBdGMsRUFDQTBvQixHQUlBLElBQUsxb0IsSUFBZTBvQixFQUFXLE9BRS9CLElBQUlocEIsRUFBV00sRUFBV04sU0FDdEJpcEIsRUN4U08sU0FBZ0JsMUQsRUFBUUMsR0FDckMsSUFBSUcsRUFDQWxCLEVBQ0osUUFBZ0JnQixJQUFaRCxFQUNGLElBQUssTUFBTTdFLEtBQVM0RSxFQUNMLE1BQVQ1RSxTQUNVOEUsSUFBUkUsRUFDRWhGLEdBQVNBLElBQU9nRixFQUFNbEIsRUFBTTlELElBRTVCZ0YsRUFBTWhGLElBQU9nRixFQUFNaEYsR0FDbkI4RCxFQUFNOUQsSUFBTzhELEVBQU05RCxTQUl4QixDQUNMLElBQUkrRSxHQUFTLEVBQ2IsSUFBSyxJQUFJL0UsS0FBUzRFLEVBQ2lDLE9BQTVDNUUsRUFBUTZFLEVBQVE3RSxJQUFTK0UsRUFBT0gsV0FDdkJFLElBQVJFLEVBQ0VoRixHQUFTQSxJQUFPZ0YsRUFBTWxCLEVBQU05RCxJQUU1QmdGLEVBQU1oRixJQUFPZ0YsRUFBTWhGLEdBQ25COEQsRUFBTTlELElBQU84RCxFQUFNOUQsSUFJOUIsQ0FDRCxNQUFPLENBQUNnRixFQUFLbEIsRUFDZixDRDRRa0JpMkQsQ0FBVWxwQixFQUFTOUIsWUFDN0JpckIsRUFBU0MsS0FFUnR4RCxPQUFPbXhELEdBQ1BsekQsTUFBTSxDQUFDLEVBQUd1cUMsRUFBVzBCLGFBQWE5ZCxRQUN2QzA0QixFQUFzQixPQUFJdU0sRUFFMUIsSUFBSUUsRUFBeUJDLEdBQ3pCTixFQUFVcmxCLG9CQUdUdnNDLEVBQVltMkIsR0F0UnJCLFNBQ0l3UyxFQUNBM2xCLEdBT0EsSUFBSWhqQixFQUEwQixHQUMxQm0yQixFQUFlLEtBR25CLEdBQUluVCxFQUFVLENBQ1YsSUFBSW12QyxFQUFZeHBCLEVBQU0sR0FDbEJ5cEIsRUFBV3pwQixFQUFNQSxFQUFNcnZDLE9BQVMsR0FDcEMwRyxFQUFhcXlELEdBQVcxekQsTUFDcEJ3ekQsRUFBVUcsU0FDVkYsRUFBU0UsU0FDVHR2QyxFQUFTdXZDLFNBRWhCLEtBQU0sQ0FDSCxJQUFJMTFCLEVBQU84TCxFQUFNcnZDLE9BR2I2OEIsRUFGQTBHLEdBQVEsR0FFT3cxQixHQUNSeDFCLEdBQVEsR0FFQXcxQixHQUFXcnFDLE1BQU0sR0FDekI2VSxHQUFRLElBRUEyMUIsR0FDUjMxQixHQUFRLElBRUE0MUIsR0FDUjUxQixHQUFRLElBRUE0MUIsR0FBYXpxQyxNQUFNLEdBRW5CMHFDLEVBRXRCLENBRUQsTUFBTyxDQUFDMXlELEVBQVltMkIsRUFDeEIsQ0EwT3FDdzhCLENBQzdCL3BCLEVBQVM5QixXQUNUbXJCLEdBRUFoeUQsRUE1T1IsU0FBNkIwb0MsRUFBaUJpcUIsR0FDMUMsR0FBSUEsRUFBbUIsQ0FDbkIsU0FBU0MsRUFBa0JseUMsR0FDdkIsT0FBT3lrQyxHQUFpQi9rRCxPQUFPMm9DLE9BQU9yb0IsR0FBT2l5QyxFQUNoRCxDQUNELE9BQU9DLENBQ1YsQ0FBTSxDQUNILElBQUlDLEVBQWtCLEtBQ2xCajJCLEVBQU84TCxFQUFNcnZDLE9BcUJqQixPQWpCSXc1RCxFQUFrQkMsR0FGbEJsMkIsR0FBUSxJQUdEQSxHQUFRLElBR1JBLEdBQVEsSUFKaUIsV0FPekJBLEdBQVEsS0FHUkEsR0FBUSxJQURpQixRQUtBLE1BRzdCaTJCLENBQ1YsQ0FDTCxDQTZNcUJFLENBQ2JwcUIsRUFBUzlCLFdBQ1Q4cUIsRUFBVW5sQixzQkFHVndtQixFQUFXckMsRUFBY21CLEdBRXpCL3hELEdBQW9DLElBQXRCQSxFQUFXMUcsT0FDekIyNUQsRUFBU2p6RCxXQUFXQSxHQUNibTJCLEdBQ1A4OEIsRUFBU3h5RCxNQUFNMDFCLEdBRWZsMkIsR0FDQWd6RCxFQUFTaHpELFdBQVdBLEdBR3hCLElBQUlpekQsRUFBUTFOLEVBQWNrQixTQUNyQjlrRCxPQUFPLEtBQ1BDLEtBQUssS0FBTSxTQUNYQSxLQUNHLFlBQ0EsZUFBaUJxbkMsRUFBVzBCLGFBQWFzRyxPQUFTLEtBRXJEOXNDLEtBQUs2dUQsR0FDTHB4RCxLQUFLLFFBQVMsZ0JBQ2YrdkQsRUFBVTNsQixZQUNWaW5CLEVBQU14cUQsTUFBTSxTQUFVa3BELEVBQVUzbEIsWUFFcEN1WixFQUFxQixNQUFJME4sRUFFekIsSUFBSUMsRUFBV2hOLEdBQXVCLFlBRWxDaU4sRUFBa0JGLEVBQ2pCOXhELFVBQVUsUUFDVlMsS0FBSyxLQUFNLEVBQUlzeEQsRUFBU2ppQixPQUFTNzFDLEtBQUs0aUIsSUFBSyxHQUFLLElBQU81aUIsS0FBSzBoQixLQUM1RGxiLEtBQUssSUFBSyxHQUNWQSxLQUFLLFlBQWEsZUFDbEI2RyxNQUFNLGNBQWUsT0FDckI3RyxLQUFLLFFBQVMsc0JBQ2YrdkQsRUFBVTNsQixZQUNWbW5CLEVBQWdCMXFELE1BQU0sT0FBUWtwRCxFQUFVM2xCLFlBRzVDLElBQ0lvbkIsRUFBa0JGLEVBQVNybUMsTUFBUXp4QixLQUFLNmlCLElBQUssR0FBSyxJQUFPN2lCLEtBQUswaEIsSUFDOURpdkIsRUFBYWtuQixFQUNadHhELE9BQU8sUUFDUEksS0FBSzR2RCxFQUFVNWxCLFlBQ2ZucUMsS0FDRyxZQUNBLGFBQ0lxbkMsRUFBVzBCLGFBQWE5ZCxNQUFRLEVBQ2hDLEtBVEssRUFVU3VtQyxHQUNkLEtBRVB4eEQsS0FBSyxRQUFTLHNCQUNmK3ZELEVBQVUxbEIsaUJBQ1ZGLEVBQVd0akMsTUFBTSxPQUFRa3BELEVBQVUxbEIsaUJBSXZDZ25CLEVBQU1yeEQsS0FBSyxTQW5CTSxFQW1CaUJ3eEQsR0FHbEM5SyxHQUFrQi9DLEVBQWMvZ0QsSUFBSyxFQXRCcEIsRUFzQm9DNHVELEdBQ3JEOUssR0FBa0IvQyxFQUFjMEMsVUFBVyxFQXZCMUIsRUF1QjBDbUwsRUFDL0QsQ0FFQSxTQUFTQyxHQUNMOU4sRUFDQXRjLEVBQ0Ewb0IsRUFDQTlqQixFQUNBaWQsR0FPQSxJQUFLN2hCLElBQWUwb0IsRUFBVyxPQUUvQixJQUFJaHBCLEVBQVdNLEVBQVdOLFNBQzFCLEdBQTBCLElBQXRCbWlCLEVBQVd6eEQsT0FDWCxPQUdKLEdBQXNCLFNBQWxCdzBDLEdBQThDLFVBQWxCQSxFQUEyQixPQUUzRCxJQUFJeWxCLEVBQWlCLEtBQ2pCQyxFQUFpQixLQUNqQkMsRUFBaUIsS0FDakJDLEdBQWMsRUFDbEIsSUFBSyxJQUFJalAsS0FBYXNHLEVBQVksQ0FDOUIsSUFBSTVoQixFQUFVUCxFQUFTVSxlQUFlbWIsR0FDdEMsSUFBSXRiLEVBQVFoQixXQUFXckQsZUFXdkIsSUFUdUIsT0FBbkJ5dUIsR0FBMkJwcUIsRUFBUTFCLFVBQVk4ckIsS0FDL0NBLEVBQWlCcHFCLEVBQVExQixZQUVOLE9BQW5CK3JCLEdBQTJCcnFCLEVBQVF6QixVQUFZOHJCLEtBQy9DQSxFQUFpQnJxQixFQUFRekIsV0FJN0Jnc0IsRUFBY3ZxQixFQUFRdEUsWUFBY3ZCLEdBQVVtUyxLQUN2QixPQUFuQmdlLEVBQ0FBLEVBQWlCQyxPQUVqQixHQUFJQSxJQUFnQkQsRUFDaEIsTUFBTywrQkFHbEIsQ0FJRCxJQUFJbnRCLEVBQU8sS0FDVyxTQUFsQndILEVBQ0F4SCxFQUFPc3JCLEVBQVV0ckIsS0FBSyxHQUNHLFVBQWxCd0gsSUFDUHhILEVBQU9zckIsRUFBVXRyQixLQUFLLElBRTFCLElBQUlxdEIsR0FBZSxFQUNDLGlCQUFUcnRCLEVBQ1BBLEVBQU9pdEIsRUFFUEksR0FBZSxFQUduQixJQUFJcHRCLEVBQU8sS0FDVyxTQUFsQnVILEVBQ0F2SCxFQUFPcXJCLEVBQVVyckIsS0FBSyxHQUNHLFVBQWxCdUgsSUFDUHZILEVBQU9xckIsRUFBVXJyQixLQUFLLElBRTFCLElBQUlxdEIsR0FBZSxFQU1uQixHQUxvQixpQkFBVHJ0QixFQUNQQSxFQUFPaXRCLEVBRVBJLEdBQWUsRUFFZnJ0QixFQUFPRCxFQUFNLENBQ2IsSUFBSXV0QixFQUFPdnRCLEVBQ1hBLEVBQU9DLEVBQ1BBLEVBQU9zdEIsRUFDUCxJQUFJQyxFQUFlSCxFQUNuQkEsRUFBZUMsRUFDZkEsRUFBZUUsQ0FDbEIsQ0FFRCxJQUdJQyxFQUFRQyxFQUhSQyxFQUFVMXRCLEVBQU9ELEVBRWpCNHRCLEVBQVN4RCxLQUdUcUQsRUFEQUosRUFDU3J0QixFQUVBQSxFQUFpQixHQUFWMnRCLEVBR2hCRCxFQURBSixFQUNTcnRCLEVBRUFBLEVBQWlCLEdBQVYwdEIsRUFHaEJyQyxFQUFVMWtCLGlCQUFtQjdKLEdBQVU2SyxNQUNuQzhsQixFQUFTLElBQ1RBLEVBQVMsR0FFVEQsRUFBUyxJQUNUQSxFQUFTLElBR2pCLElBQUlyekQsRUFBUyxDQUFDcXpELEVBQVFDLElBRUMsU0FBbEJsbUIsR0FBNEI4akIsRUFBVWpsQixhQUFhLElBQ2pDLFVBQWxCbUIsR0FBNkI4akIsRUFBVWpsQixhQUFhLE1BRXJEanNDLEVBQVMsQ0FBQ3N6RCxFQUFRRCxJQUV0QkcsRUFBT3h6RCxPQUFPQSxHQUFRL0IsTUFBTSxDQUFDdXFDLEVBQVcwQixhQUFhc0csT0FBUSxJQUV2QyxTQUFsQnBELEVBQ0EwWCxFQUEwQixXQUFJME8sRUFDTCxVQUFsQnBtQixJQUNQMFgsRUFBMkIsWUFBSTBPLEdBR25DLElBQUk5bkIsRUFBYSxHQUNLLFNBQWxCMEIsRUFDQTFCLEVBQWF3bEIsRUFBVXhsQixXQUFXLEdBQ1QsVUFBbEIwQixJQUNQMUIsRUFBYXdsQixFQUFVeGxCLFdBQVcsSUFHdEMsSUFBSUMsRUFBa0IsR0FDQSxTQUFsQnlCLEVBQ0F6QixFQUFrQnVsQixFQUFVdmxCLGdCQUFnQixHQUNuQixVQUFsQnlCLElBQ1B6QixFQUFrQnVsQixFQUFVdmxCLGdCQUFnQixJQUdoRCxJQUFJOG5CLEVBQWlCLEdBQ0MsU0FBbEJybUIsRUFDQXFtQixFQUFpQnZDLEVBQVV6bEIsV0FBVyxHQUNiLFVBQWxCMkIsSUFDUHFtQixFQUFpQnZDLEVBQVV6bEIsV0FBVyxJQUcxQyxJQUFJaW9CLEVBQWdCLEdBQ2hCNW5CLEVBQW9CLEtBQ3BCRSxFQUF1QixLQUNMLFNBQWxCb0IsR0FDQXNtQixFQUFnQnhDLEVBQVV0bEIsVUFBVSxHQUNwQ0UsRUFBb0JvbEIsRUFBVXBsQixrQkFBa0IsR0FDaERFLEVBQXVCa2xCLEVBQVVsbEIscUJBQXFCLElBQzdCLFVBQWxCb0IsSUFDUHNtQixFQUFnQnhDLEVBQVV0bEIsVUFBVSxHQUNwQ0UsRUFBb0JvbEIsRUFBVXBsQixrQkFBa0IsR0FDaERFLEVBQXVCa2xCLEVBQVVsbEIscUJBQXFCLElBRzFELElBVUkybkIsRUFWQWwrQixFQUFlLEtBZ0JuQixHQWZJdTlCLEVBQ0F2OUIsRUFBZSs3QixHQUEyQjFsQixJQUUxQ3JXLEVBQWUrTyxXQUFXc0gsR0FDckJ4ZSxPQUFPbVgsU0FBU2hQLEtBQWlCbkksT0FBTzF2QixNQUFNNjNCLEtBQy9DQSxFQUFlLE9BS0QsU0FBbEIyWCxFQUNBdW1CLEVBQVd4RCxFQUFZcUQsR0FDRSxVQUFsQnBtQixJQUNQdW1CLEVqS2pZQ3gwRCxFQUFLakcsRWlLaVlrQnM2RCxJQUV4QkcsRUFBVSxDQUNWLElBQUl2QixFQTNZWixTQUNJaUIsRUFDQUMsRUFDQXBCLEVBQ0EwQixHQUFjLEdBSWQsR0FBS0EsRUFVRSxDQUVILEdBQUkxQixFQUFtQixDQUNuQixTQUFTQyxFQUFrQjk2RCxHQVF2QixPQVBlc0ksT0FBTzJvQyxPQUFPLFFBQVMsU0FBUyxHQUN2QmovQixJQUFJaFMsRUFBTyxXQUNiNEksT0FBT2l5RCxFQU1oQyxDQUNELE9BQU9DLENBQ1YsQ0FBTSxDQUNILFNBQVNBLEVBQWtCOTZELEdBQ3ZCLE1BQU13OEQsRUFBWWw1RCxLQUFLd3ZCLElBQUltcEMsRUFBU0QsR0FDcEMsSUFFSXB6RCxFQUZXTixPQUFPMm9DLE9BQU8sUUFBUyxTQUFTLEdBQ3ZCai9CLElBQUloUyxFQUFPLFdBQ2I0SSxPQUFPLFNBYTdCLE9BUkk0ekQsRUFBWSxRQUdSeDhELEVBQVFnOEQsR0FBVWg4RCxFQUFRaThELElBRmZqOEQsRUFBUWc4RCxHQUFVLEtBQ04sRUFDMEIsS0FDakRwekQsRUFBUyxJQUlWQSxDQUNWLENBRUQsT0FBT2t5RCxDQUNWLENBQ0osQ0E5Q0csR0FBSUQsRUFBbUIsQ0FDbkIsU0FBUzN5RCxFQUFXbEksR0FFaEIsT0FEZTBuRCxHQUFPQSxRQUFDLElBQU1tVCxFQUFtQjc2RCxFQUVuRCxDQUVELE9BQU9rSSxDQUNWLENBQ0QsT0FBT3V3RCxHQUFjdUQsRUFBUUMsRUFBUSxHQXlDN0MsQ0FpVjhCUSxDQUNsQlQsRUFDQUMsRUFDQXRuQixFQUNBZ25CLEdBRUFaLEdBQ0F1QixFQUFTcDBELFdBQVc2eUQsR0FFeEIsSUFBSTl5RCxFQXJjWixTQUNJK3pELEVBQ0FDLEVBQ0FoeEMsRUFDQXN4QyxHQUFjLEdBUWQsTUFBTUMsRUFBWWw1RCxLQUFLd3ZCLElBQUltcEMsRUFBU0QsR0FDcEMsSUFBSS96RCxFQUE0QixHQUUzQnMwRCxFQVVHdDBELEVBRkFnakIsR0FBWTNpQixPQUFPMm9DLE9BQU9vTCxXQUFXcHhCLEdBRXhCeXhDLEVBQVNWLEVBQVFDLEVBRE4zNEQsS0FBS3d2QixJQUFJN0gsRUFBUzB4QyxjQUl0Q0gsRUFBWSxLQU1DRSxFQUhiVixFQUFxQyxLQUE1QjE0RCxLQUFLVSxNQUFNZzRELEVBQVMsTUFDN0JDLEVBQW9DLEtBQTNCMzRELEtBQUt3RCxLQUFLbTFELEVBQVMsTUFFVSxNQU16QlMsRUFIYlYsRUFBcUMsS0FBNUIxNEQsS0FBS1UsTUFBTWc0RCxFQUFTLE1BQzdCQyxFQUFvQyxLQUEzQjM0RCxLQUFLd0QsS0FBS20xRCxFQUFTLE1BRVUsTUF2QjFDaHhDLEdBQWdDLGlCQUFiQSxJQUVuQmhqQixFQUFheTBELEVBQVNWLEVBQVFDLEVBQVFoeEMsSUEwQjlDLE9BQTBCLElBQXRCaGpCLEVBQVcxRyxPQUFxQixLQUM3QjBHLENBQ1gsQ0FzWnlCMjBELENBQ2JaLEVBQ0FDLEVBQ0E3OUIsRUFDQXU5QixHQUVBMXpELEdBQ0FxMEQsRUFBU3IwRCxXQUFXQSxFQUUzQixDQUVELElBQUk0MEQsRUFBUXBQLEVBQWNrQixTQUNyQjlrRCxPQUFPLEtBQ1BDLEtBQUssS0FBTSxTQUNYdUMsS0FBS2l3RCxHQUNMeHlELEtBQUssUUFBUyxnQkFDRSxTQUFqQmlzQyxHQUNBOG1CLEVBQU0veUQsS0FDRixZQUNBLGFBQWVxbkMsRUFBVzBCLGFBQWE5ZCxNQUFRLFFBR2pDLFNBQWxCZ2hCLEVBQ0EwWCxFQUF5QixVQUFJb1AsRUFDSixVQUFsQjltQixJQUNQMFgsRUFBMEIsV0FBSW9QLEdBR2xDLElBQUlDLEVBQVlELEVBQU14ekQsVUFBVSxRQUM1QmdyQyxHQUNBeW9CLEVBQVVuc0QsTUFBTSxTQUFVMGpDLEdBRzlCLElBQUkwb0IsRUFBYUYsRUFBTXh6RCxVQUFVLFFBQzdCZ3JDLEdBQ0Ewb0IsRUFBV3BzRCxNQUFNLFNBQVUwakMsR0FHL0IsSUFBSTJvQixFQUFrQkgsRUFDakJ4ekQsVUFBVSxRQUNWUyxLQUFLLFFBQVMsc0JBQ2Z1cUMsR0FDQTJvQixFQUFnQnJzRCxNQUFNLE9BQVEwakMsR0FJbEMsSUFBSTRvQixFQUFvQixFQUN4QixJQUFLLElBQUkxbUIsS0FBU3ltQixFQUVkLEdBQUl6bUIsRUFBTWprQyxZQUFhLENBQ25CLElBQUk0cUQsRUFBWTlPLEdBQ1o3WCxFQUFNamtDLFlBQ04sc0JBRUE0cUQsRUFBVW5vQyxNQUFRa29DLElBQ2xCQSxFQUFvQkMsRUFBVW5vQyxNQUVyQyxDQUlpQixLQUFsQnNuQyxJQUNBRCxHQUFrQixLQUFPQyxFQUFnQixLQUU3QyxJQUNJYyxFQUFpQi9PLEdBQXVCZ08sR0FDeENob0IsRUFBYXlvQixFQUNaaHpELE9BQU8sUUFDUEksS0FBS215RCxHQUNMdHlELEtBQUssWUFBYSxlQUNsQkEsS0FBSyxLQUFPLEVBQUlxbkMsRUFBVzBCLGFBQWFzRyxPQUFVLEdBQ2xEcnZDLEtBQUssUUFBUyxzQkFDRyxTQUFsQmlzQyxFQUNBM0IsRUFBV3RxQyxLQUNQLEtBVlUsRUFXS216RCxFQUFvQkUsRUFBZWhrQixPQUFTLEdBRy9EL0UsRUFBV3RxQyxLQUNQLElBQ0EsRUFBZW16RCxFQUFvQkUsRUFBZWhrQixRQUd0RDdFLEdBQ0FGLEVBQVd6akMsTUFBTSxPQUFRMmpDLEdBRzdCLElBQUk4b0IsRUFBYUQsRUFBZWhrQixPQUFTOGpCLEVBdkJ2QixFQXdCbEJKLEVBQU0veUQsS0FBSyxRQUFTc3pELEdBR3BCNU0sR0FBa0IvQyxFQUFjL2dELElBQUswd0QsRUFBWSxHQUNqRDVNLEdBQWtCL0MsRUFBYzBDLFVBQVdpTixFQUFZLEdBR2pDLFNBQWxCcm5CLElBRUEwYSxHQUFnQmhELEVBQWNrQixTQUFVeU8sRUFBWSxHQUdoRDNQLEVBQWN6WixPQUNkeWMsR0FBZ0JoRCxFQUFjelosTUFBT29wQixFQUFZLEdBRzdELENBRUEsU0FBU0MsR0FDTDVQLEVBQ0F0YyxFQUNBeEMsRUFDQXlDLEVBQ0EyRSxHQUtBLElBQUs1RSxJQUFleEMsRUFBVSxPQUU5QixJQUFJd3RCLEVBQWMsS0FPbEIsR0FOc0IsU0FBbEJwbUIsRUFDQW9tQixFQUFTMU8sRUFBYzZQLFdBQ0UsVUFBbEJ2bkIsSUFDUG9tQixFQUFTMU8sRUFBYzhQLGFBR3ZCNXVCLEVBQVM2RyxTQUFTcEUsRUFBUXpELFNBQVUsQ0FDcEMsSUFBSTZ2QixFRXpxQkcsU0FBU3A4RCxFQUFHbUcsR0FDekIsSUFBSWsyRCxFQUFVbG5ELElBQVMsR0FDbkI5TixFQUFVLEtBQ1ZpMUQsRUFBUXZ5QixHQUNSelMsRUFBUyxLQUNUdHZCLEVBQU84OUIsR0FBU245QixHQUtwQixTQUFTQSxFQUFLVCxHQUNaLElBQUkxSCxFQUVBSCxFQUVBOG5DLEVBSEEvakMsR0FBSzhELEVBQU9wRSxHQUFNb0UsSUFBTy9ILE9BRXpCbzhELEdBQVcsRUFLZixJQUZlLE1BQVhsMUQsSUFBaUJpd0IsRUFBU2dsQyxFQUFNbjBCLEVBQVNuZ0MsTUFFeEN4SCxFQUFJLEVBQUdBLEdBQUs0RCxJQUFLNUQsSUFDZEEsRUFBSTRELEdBQUtpNEQsRUFBUWg4RCxFQUFJNkgsRUFBSzFILEdBQUlBLEVBQUcwSCxNQUFXcTBELEtBQzVDQSxHQUFZQSxHQUFVamxDLEVBQU9pVCxZQUM1QmpULEVBQU9tVCxXQUVWOHhCLEdBQVVqbEMsRUFBT29ULE9BQU8xcUMsRUFBRUssRUFBR0csRUFBRzBILElBQVEvQixFQUFFOUYsRUFBR0csRUFBRzBILElBR3RELEdBQUlpZ0MsRUFBUSxPQUFPN1EsRUFBUyxLQUFNNlEsRUFBUyxJQUFNLElBQ2xELENBc0JELE9BM0NBbm9DLEVBQWlCLG1CQUFOQSxFQUFtQkEsT0FBVzBELElBQU4xRCxFQUFtQnc4RCxHQUFTcm5ELEdBQVNuVixHQUN4RW1HLEVBQWlCLG1CQUFOQSxFQUFtQkEsT0FBV3pDLElBQU55QyxFQUFtQnMyRCxHQUFTdG5ELEdBQVNoUCxHQXNCeEV3QyxFQUFLM0ksRUFBSSxTQUFTdUosR0FDaEIsT0FBTzlELFVBQVV0RixRQUFVSCxFQUFpQixtQkFBTnVKLEVBQW1CQSxFQUFJNEwsSUFBVTVMLEdBQUlaLEdBQVEzSSxDQUN2RixFQUVFMkksRUFBS3hDLEVBQUksU0FBU29ELEdBQ2hCLE9BQU85RCxVQUFVdEYsUUFBVWdHLEVBQWlCLG1CQUFOb0QsRUFBbUJBLEVBQUk0TCxJQUFVNUwsR0FBSVosR0FBUXhDLENBQ3ZGLEVBRUV3QyxFQUFLMHpELFFBQVUsU0FBUzl5RCxHQUN0QixPQUFPOUQsVUFBVXRGLFFBQVVrOEQsRUFBdUIsbUJBQU45eUQsRUFBbUJBLEVBQUk0TCxLQUFXNUwsR0FBSVosR0FBUTB6RCxDQUM5RixFQUVFMXpELEVBQUsyekQsTUFBUSxTQUFTL3lELEdBQ3BCLE9BQU85RCxVQUFVdEYsUUFBVW04RCxFQUFRL3lELEVBQWMsTUFBWGxDLElBQW9CaXdCLEVBQVNnbEMsRUFBTWoxRCxJQUFXc0IsR0FBUTJ6RCxDQUNoRyxFQUVFM3pELEVBQUt0QixRQUFVLFNBQVNrQyxHQUN0QixPQUFPOUQsVUFBVXRGLFFBQWUsTUFBTG9KLEVBQVlsQyxFQUFVaXdCLEVBQVMsS0FBT0EsRUFBU2dsQyxFQUFNajFELEVBQVVrQyxHQUFJWixHQUFRdEIsQ0FDMUcsRUFFU3NCLENBQ1QsQ0ZzbkJzQit6RCxHQUVUTCxTQUFRLFNBQVV0M0QsR0FDZixPQUFtQixPQUFaQSxFQUFFbkcsS0FDYixJQUNDb0IsR0FBRSxTQUFVK0UsR0FDVCxPQUFPc25ELEVBQWN1TSxPQUFPN3pELEVBQUV5aUIsS0FDbEMsSUFDQ3JoQixHQUFFLFNBQVVwQixHQUNULE9BQU9nMkQsRUFBT2gyRCxFQUFFbkcsTUFDcEIsSUFFQStKLEVBQU8wakQsRUFBY2tCLFNBQ3BCOWtELE9BQU8sUUFDUEMsS0FBSyxRQUFTLGdCQUNkNkcsTUFBTSxlQUFnQmcrQixFQUFTNEcsVUFBVW5FLEVBQVF6RCxVQUVsRGdCLEVBQVNtSCxRQUFRMUUsRUFBUXpELFNBQ3pCNWpDLEVBQUtrRixNQUNEbEksTUFBTVYsS0FBSytxQyxHQUFTM21DLFFBQU8sU0FBVXRFLEdBQ2pDLE9BQW1CLE9BQVpBLEVBQUVuRyxLQUNaLEtBQ0g4SixLQUFLLElBQUswekQsR0FFWnp6RCxFQUFLa0YsTUFBTW1pQyxHQUFTdG5DLEtBQUssSUFBSzB6RCxHQUc5Qjd1QixFQUFTMkcsVUFBVWxFLEVBQVF6RCxVQUMzQjVqQyxFQUFLNEcsTUFBTSxTQUFVZytCLEVBQVMyRyxVQUFVbEUsRUFBUXpELFNBRXZELENBQ0wsQ0FFQSxTQUFTb3dCLEdBQ0x0USxFQUNBdGMsRUFDQXhDLEVBQ0F5QyxFQUNBMkUsR0FLQSxJQUFLNUUsSUFBZXhDLEVBQVUsT0FFOUIsSUFBSXd0QixFQUFjLEtBT2xCLEdBTnNCLFNBQWxCcG1CLEVBQ0FvbUIsRUFBUzFPLEVBQWM2UCxXQUNFLFVBQWxCdm5CLElBQ1BvbUIsRUFBUzFPLEVBQWM4UCxhQUd2QjV1QixFQUFTOEcsVUFBVXJFLEVBQVF6RCxTQUFVLENBQ3JDLElBQUlxd0IsRUFBT3ZRLEVBQWNrQixTQUNwQnRsRCxVQUFVLE9BQ1ZDLEtBQ0d2QyxNQUFNVixLQUFLK3FDLEdBQVMzbUMsUUFBTyxTQUFVdEUsR0FDakMsT0FBbUIsT0FBWkEsRUFBRW5HLEtBQ2IsS0FFSDRKLFFBQ0FDLE9BQU8sVUFDUEMsS0FBSyxJQUFLNmtDLEVBQVNrSCxVQUFVekUsRUFBUXpELFVBQ3JDN2pDLEtBQUssTUFBTSxTQUFVM0QsR0FDbEIsT0FBT3NuRCxFQUFjdU0sT0FBTzd6RCxFQUFFeWlCLEtBQ2xDLElBQ0M5ZSxLQUFLLE1BQU0sU0FBVTNELEdBQ2xCLE9BQU9nMkQsRUFBT2gyRCxFQUFFbkcsTUFDcEIsSUFDQzhKLEtBQUssUUFBUSxTQUFVM0QsR0FDcEIsT0FBTzYwRCxHQUFjLFdBQWRBLENBQTBCNzBELEVBQUV5aUIsS0FDdkMsSUFDQzllLEtBQUssU0FBUyxTQUFVM0QsR0FDckIsR0FBZ0IsT0FBWkEsRUFBRW5HLE1BQ0YsT0FBSWkyQixPQUFPZ29DLFVBQVU5M0QsRUFBRW5HLE9BQ1ptRyxFQUFFbkcsTUFBTW8xQixRQUFRLEdBRXBCanZCLEVBQUVuRyxNQUFNbzFCLFFBQVEsRUFFL0IsSUFDQ3RyQixLQUFLLFlBQWF5aEMsR0FBVTZGLEVBQVF0RSxZQUNwQ2hqQyxLQUFLLFFBQVMsZUFDZjZrQyxFQUFTK0csV0FBV3RFLEVBQVF6RCxXQUM1QnF3QixFQUFLcnRELE1BQU0sT0FBUWcrQixFQUFTK0csV0FBV3RFLEVBQVF6RCxVQUczQ2dCLEVBQVNnSCxpQkFBaUJ2RSxFQUFRekQsVUFDbENnQixFQUFTaUgsaUJBQWlCeEUsRUFBUXpELFNBQVcsSUFFN0Nxd0IsRUFBS3J0RCxNQUNELFNBQ0FnK0IsRUFBU2dILGlCQUFpQnZFLEVBQVF6RCxVQUV0Q3F3QixFQUFLcnRELE1BQ0QsZUFDQWcrQixFQUFTaUgsaUJBQWlCeEUsRUFBUXpELFlBSzFDZ0IsRUFBU2tHLGtCQU1yQixTQUNJcXBCLEVBQ0F6USxFQUNBdGMsR0FFQSxJQUFJZ3RCLEVBQVUxUSxFQUFja0IsU0FBUzlrRCxPQUFPLE9BQU84RyxNQUFNLFVBQVcsR0FDaEV5dEQsRUFBWUQsRUFBUXQwRCxPQUFPLFFBQVFDLEtBQUssSUFBSyxHQUFHQSxLQUFLLElBQUssR0FDMUR1MEQsRUFBZUYsRUFBUXQwRCxPQUFPLFFBQzlCeTBELEVBQW1CRCxFQUNsQngwRCxPQUFPLFNBQ1BDLEtBQUssUUFBUyx5QkFDZnkwRCxFQUFvQkYsRUFDbkJ4MEQsT0FBTyxTQUNQQyxLQUFLLFFBQVMseUJBRWZvbkQsRUFBVyxFQUNYQyxFQUFXLEVBRWYrTSxFQUNLdHlELEdBQUcsY0FBYyxTQUFVcUksR0FDeEIsTUFBTzdTLEVBQUdtRyxHRzN5QlAsU0FBUzBNLEVBQU96RixHQUc3QixHQUZBeUYsRUNIYSxTQUFTQSxHQUN0QixJQUFJdXFELEVBQ0osS0FBT0EsRUFBY3ZxRCxFQUFNdXFELGFBQWF2cUQsRUFBUXVxRCxFQUNoRCxPQUFPdnFELENBQ1QsQ0REVXVxRCxDQUFZdnFELFFBQ1BuUCxJQUFUMEosSUFBb0JBLEVBQU95RixFQUFNd3FELGVBQ2pDandELEVBQU0sQ0FDUixJQUFJOUIsRUFBTThCLEVBQUtrd0QsaUJBQW1CbHdELEVBQ2xDLEdBQUk5QixFQUFJaXlELGVBQWdCLENBQ3RCLElBQUk3eUIsRUFBUXAvQixFQUFJaXlELGlCQUdoQixPQUZBN3lCLEVBQU0xcUMsRUFBSTZTLEVBQU0ycUQsUUFBUzl5QixFQUFNdmtDLEVBQUkwTSxFQUFNNHFELFFBRWxDLEVBRFAveUIsRUFBUUEsRUFBTWd6QixnQkFBZ0J0d0QsRUFBS3V3RCxlQUFlQyxZQUNwQzU5RCxFQUFHMHFDLEVBQU12a0MsRUFDeEIsQ0FDRCxHQUFJaUgsRUFBS3l3RCxzQkFBdUIsQ0FDOUIsSUFBSWpyQyxFQUFPeGxCLEVBQUt5d0Qsd0JBQ2hCLE1BQU8sQ0FBQ2hyRCxFQUFNMnFELFFBQVU1cUMsRUFBSzd5QixLQUFPcU4sRUFBSzB3RCxXQUFZanJELEVBQU00cUQsUUFBVTdxQyxFQUFLOXNCLElBQU1zSCxFQUFLMndELFVBQ3RGLENBQ0YsQ0FDRCxNQUFPLENBQUNsckQsRUFBTW1yRCxNQUFPbnJELEVBQU1vckQsTUFDN0IsQ0gweEIyQkMsQ0FBV3JyRCxHQUMxQixJQUFJc3JELEVBQWlCLEVBQ2pCQyxFQUFrQixFQUVsQkMsRUFBZ0IsU0FBV3poQixHQUFVdjdDLE1BQU1xSCxLQUFLLFFBRWhENDFELEVBQWdCdFIsR0FDaEJxUixFQUNBLHlCQUVKbkIsRUFBaUJyMEQsS0FBS3cxRCxHQUNsQkMsRUFBYzNxQyxNQUFRd3FDLElBQ3RCQSxFQUFpQkcsRUFBYzNxQyxPQUVuQ3lxQyxHQUFtQkUsRUFBY3ZtQixPQUNqQ21sQixFQUFpQngwRCxLQUFLLElBQUtvbkQsR0FBVXBuRCxLQUFLLElBQUswMUQsR0FHL0MsSUFBSUcsRUFBaUIsVUFDakI3eUIsRUFBWWtSLEdBQVV2N0MsTUFBTXFILEtBQUssYUFDakNzakQsRUFBV3BQLEdBQVV2N0MsTUFBTXFILEtBQUssU0FFcEMsR0FBa0IsU0FBZGdqQyxFQUFzQixDQUl0QjZ5QixHQUhlcjNELE9BQU8yb0MsT0FBTyxRQUFTLFNBQVMsR0FDdkJqL0IsSUFBSW03QixXQUFXaWdCLEdBQVcsV0FDekJ4a0QsT0FBTyxTQUVoQzIxRCxFQUFrQnQwRCxLQUFLMDFELEVBQzFCLE1BQ0dBLEdBQWtCdlMsRUFDbEJtUixFQUFrQnQwRCxLQUFLMDFELEdBRTNCLElBQUlDLEVBQWlCeFIsR0FDakJ1UixFQUNBLHlCQUVBQyxFQUFlN3FDLE1BQVF3cUMsSUFDdkJBLEVBQWlCSyxFQUFlN3FDLE9BRXBDeXFDLEdBQW1Cck8sRUFBV3lPLEVBQWV6bUIsT0FDN0NvbEIsRUFBa0J6MEQsS0FBSyxJQUFLb25ELEdBQVVwbkQsS0FBSyxJQUFLMDFELEdBRWhERCxHQUFrQixFQUFJck8sRUFDdEJzTyxHQUFtQixFQUFJck8sRUFDdkJrTixFQUNLdjBELEtBQUssUUFBU3kxRCxHQUNkejFELEtBQUssU0FBVTAxRCxHQUVwQnBCLEVBQ0t0MEQsS0FBSyxRQUFTeTFELEdBQ2R6MUQsS0FBSyxTQUFVMDFELEdBQ2YxMUQsS0FBSyxRQUFTLG1CQUVuQixJQUFJKzFELEVBQWN6K0QsRUFDZDArRCxFQUFjdjRELEVBQ2R3NEQsRUFBaUIsR0FDakJDLEVBQWlCLEdBTWpCSCxFQUpBeitELEVBQUkyK0QsRUFBaUJSLEVBQ3JCcHVCLEVBQVcwQixhQUFhOWQsTUFHVjN6QixFQUFJbStELEVBQWlCUSxFQUdyQjMrRCxFQUFJMitELEVBSWxCRCxFQUZBdjRELEVBQUl5NEQsRUFBaUJSLEVBQWtCLEVBRXpCajRELEVBQUl5NEQsRUFHSno0RCxFQUFJeTRELEVBQWlCUixFQUV2Q3JCLEVBQVFyMEQsS0FBSyxJQUFLKzFELEdBQWEvMUQsS0FBSyxJQUFLZzJELEdBQ3pDM0IsRUFBUS96RCxhQUFhMGpCLFNBQVMsS0FBS25kLE1BQU0sVUFBVyxFQUN4RCxJQUNDL0UsR0FBRyxjQUFjLFdBQ2R1eUQsRUFBUS96RCxhQUFhMGpCLFNBQVMsS0FBS25kLE1BQU0sVUFBVyxFQUN4RCxHQUNSLENBekdZc3ZELENBQWNqQyxFQUFNdlEsRUFBZXRjLEVBRTFDLENBQ0wsQ0F3R0EsU0FBU3NvQixHQUNMaE0sRUFDQXRjLEVBQ0F2QyxFQUNBd0MsRUFDQTJFLEVBQ0FtcUIsRUFDQUMsR0FNQSxJQUFLaHZCLElBQWV2QyxFQUFTLE9BRTdCLElBQ0l3eEIsRUFBY2p2QixFQUFXMEIsYUFBYTlkLE1BQVFxYyxFQUFRWixZQUN0RGdwQixFQUFXNEcsRUFDWEEsRUFIUyxFQUdjLElBQ3ZCNUcsRUFBVzRHLEVBSkYsR0FNYjVHLEdBQXNCMkcsRUFJdEIsSUFBSWhFLEVBQWMsS0FDSSxTQUFsQnBtQixFQUNBb21CLEVBQVMxTyxFQUFjNlAsV0FDRSxVQUFsQnZuQixJQUNQb21CLEVBQVMxTyxFQUFjOFAsYUFHM0IsSUFBSThDLEVBQU81UyxFQUFja0IsU0FDcEJ0bEQsVUFBVSxPQUNWQyxLQUNHdkMsTUFBTVYsS0FBSytxQyxHQUFTM21DLFFBQU8sU0FBVXRFLEdBQ2pDLE9BQW1CLE9BQVpBLEVBQUVuRyxLQUNiLEtBRUg0SixRQUNBQyxPQUFPLFFBQ1BDLEtBQUssS0FBSyxTQUFVM0QsRUFBY3ZFLEdBQy9CLEdBQVUsSUFBTkEsRUFBUyxDQUNULElBQUkwK0QsRUFBaUJKLEVBQWEsRUFBSUMsRUFBb0IsRUFDMUQsR0FBSUcsRUFBaUIsRUFDakIsT0FDSTdTLEVBQWN1TSxPQUFPN3pELEVBQUV5aUIsTUFDdkJ3M0MsRUFBYyxFQUNkRixFQUFhMUcsRUFDYjhHLEVBQWlCOUcsQ0FHNUIsQ0FDRCxPQUNJL0wsRUFBY3VNLE9BQU83ekQsRUFBRXlpQixNQUN2QnczQyxFQUFjLEVBQ2RGLEVBQWExRyxDQUVyQixJQUNDMXZELEtBQUssS0FBSyxTQUFVM0QsR0FDakIsT0FBT2cyRCxFQUFPNzRELEtBQUtRLElBQUlxQyxFQUFFbkcsTUFBTyxHQUNwQyxJQUNDOEosS0FBSyxTQUFTLFNBQVUzRCxFQUFjdkUsR0FDbkMsR0FBVSxJQUFOQSxFQUFTLENBQ1QsSUFBSTArRCxFQUFpQkosRUFBYSxFQUFJQyxFQUFvQixFQUMxRCxPQUFJRyxFQUFpQixFQUNWLEVBQ0FBLEVBQWlCLEVBQ2pCOUcsRUFBVzhHLEVBRWY5RyxDQUNWLENBQU0sR0FBSTUzRCxJQUFNd3ZDLEVBQVFaLFlBQWMsRUFBRyxDQUN0QyxJQUFJOHZCLEVBQ0EsR0FBT0osRUFBYSxFQUFJQyxFQUFvQixHQUNoRCxPQUFJRyxFQUFpQixFQUNWLEVBQ0FBLEVBQWlCLEVBQ2pCOUcsRUFBVzhHLEVBRWY5RyxDQUNWLENBQ0QsT0FBT0EsQ0FDWCxJQUNDMXZELEtBQUssVUFBVSxTQUFVM0QsR0FDdEIsR0FBZ0IsT0FBWkEsRUFBRW5HLE1BQ0YsT0FBT3NELEtBQUt3dkIsSUFBSXFwQyxFQUFPaDJELEVBQUVuRyxPQUFTbThELEVBQU8sR0FFakQsSUFDQ3J5RCxLQUFLLFFBQVMsZUFFZjhrQyxFQUFRc0gsU0FBUzlFLEVBQVF6RCxVQUN6QjB5QixFQUFLMXZELE1BQU0sT0FBUWkrQixFQUFRc0gsU0FBUzlFLEVBQVF6RCxTQUVwRCxDQUVBLFNBQVNxa0IsR0FDTHZFLEVBQ0F0YyxFQUNBMG9CLEdBTUEsSUFBSW50RCxFQUFNK2dELEVBQWMvZ0QsSUFDUitnRCxFQUFjMEMsVUFDOUIsSUFBSXhCLEVBQVdsQixFQUFja0IsU0FDekIzYSxFQUFReVosRUFBY3paLE1BQ3RCbW5CLEVBQVExTixFQUFjME4sTUFDdEJvRixFQUFZOVMsRUFBYzhTLFVBQzFCQyxFQUFhL1MsRUFBYytTLFdBRzNCN1AsRUFBYyxFQUNkM2MsSUFDQTJjLEVBQWN4akIsV0FBVzZHLEVBQU1scUMsS0FBSyxZQUV4QyxJQUFJMjJELEVBQWN0ekIsV0FBV2d1QixFQUFNcnhELEtBQUssV0FDcEM0MkQsRUFBaUIsRUFDakJILElBQ0FHLEVBQWlCdnpCLFdBQVdvekIsRUFBVXoyRCxLQUFLLFdBRS9DLElBQUk2MkQsRUFBa0IsRUFDbEJILElBQ0FHLEVBQWtCeHpCLFdBQVdxekIsRUFBVzEyRCxLQUFLLFdBR2pELElBQUkrbUMsRUFBV00sRUFBV04sU0FDdEIrdkIsRUFBYy92QixFQUFTVyxpQkFJdkIxL0IsRUFBUSsrQixFQUFTYyxXQUNqQmlmLEVBQVk5K0MsRUFBTTVGLEtBQUksU0FBVTFHLEdBQ2hDLE9BQU80b0QsR0FBdUI1b0QsRUFBRyx1QkFDckMsSUFDSXFyRCxFQUFhLEVBQ2JDLEVBQWUsRUFDbkIsSUFBSyxJQUFJaGlCLEVBQU0sRUFBR0EsRUFBTWg5QixFQUFNdlEsT0FBUXV0QyxJQUM5Qjh4QixFQUFZbHZCLFNBQVM1QyxJQUNyQjhoQixFQUFVOWhCLEdBQUsvWixNQUFRKzdCLElBQ3ZCQSxFQUFlRixFQUFVOWhCLEdBQUsvWixNQUM5Qjg3QixFQUFhL2hCLEdBR3JCLElBQ0lpaUIsRUFBaUJELEVBRFBoL0MsRUFBTSsrQyxHQUN3QnR2RCxPQUN4Q3l2RCxFQUFhSixFQUFVQyxHQUFZMVgsT0FDbkM4WCxFQUFXbi9DLEVBQU12USxPQUFTcS9ELEVBQVlyL0QsT0FFdEMydkQsRUFBVyxFQUFJSCxFQUNmSSxFQUFXSCxFQUNYSSxFQUFjLEVBQUlMLEVBR2xCTSxFQUFjLEVBQ2RDLEVBQWUsRUFDaUIsYUFBaEN1SSxFQUFVN2tCLG1CQUNWcWMsRUFBeUIsRUFBWEgsRUFBZUUsRUFBY04sRUFDM0NRLEdBQWdCTCxFQUFXLEdBQUtFLEdBQ08sZUFBaEMwSSxFQUFVN2tCLG9CQUNqQnFjLEdBQ0ssRUFBSUgsRUFBV0UsR0FBZUgsRUFDL0JDLEVBQ0F6SCxFQUFPbUgsR0FBVyxTQUFVaHJELEVBQUdoRSxHQUMzQixPQUFJZy9ELEVBQVlsdkIsU0FBUzl2QyxHQUFXLEVBQzdCZ0UsRUFBRW12QixLQUNiLElBQ0p1OEIsRUFBZUgsRUFBV0gsR0FTOUIsSUFBSU8sRUFBVSxFQUNWQyxFQUFVLEVBQ2QsR0FBaUMsUUFBN0JxSSxFQUFVOWtCLGVBRVZ3YyxFQUNJbVAsRUFDQXZ2QixFQUFXMEIsYUFBYTlkLE1BQVEsRUFDaENzOEIsRUFBYyxFQUNsQkcsRUFBVWIsRUFFVkgsR0FBa0I5akQsRUFBSyxFQUFHNGtELEVBQWVILEdBRXpDVixHQUFnQjlCLEVBQVUsRUFBRzJDLEVBQWVILFFBQ3pDLEdBQWlDLFdBQTdCMEksRUFBVTlrQixlQUVqQndjLEVBQ0ltUCxFQUNBdnZCLEVBQVcwQixhQUFhOWQsTUFBUSxFQUNoQ3M4QixFQUFjLEVBQ2xCRyxFQUNJYixFQUNBeGYsRUFBVzBCLGFBQWFzRyxPQUN4QnNuQixFQUNBdFAsRUFFSlgsR0FBa0I5akQsRUFBSyxFQUFHNGtELEVBQWVILFFBQ3RDLEdBQWlDLFNBQTdCMEksRUFBVTlrQixlQUNqQndjLEVBQVUsRUFDVkMsRUFDSWIsRUFDQXhmLEVBQVcwQixhQUFhc0csT0FBUyxFQUNqQ21ZLEVBQWUsRUFFbkJkLEdBQWtCOWpELEVBQUsya0QsRUFBY0gsRUFBVSxHQUUvQ1QsR0FBZ0I5QixFQUFVMEMsRUFBY0gsRUFBVSxPQUMvQyxJQUFpQyxVQUE3QjJJLEVBQVU5a0IsZUFhakIsT0FaQXdjLEVBQ0lwZ0IsRUFBVzBCLGFBQWE5ZCxNQUN4QjJyQyxFQUNBQyxFQUNBelAsRUFDSk0sRUFDSWIsRUFDQXhmLEVBQVcwQixhQUFhc0csT0FBUyxFQUNqQ21ZLEVBQWUsRUFFbkJkLEdBQWtCOWpELEVBQUsya0QsRUFBY0gsRUFBVSxFQUdsRCxDQUdELElBQUlPLEVBQVNoRSxFQUFjMEMsVUFDdEJ0bUQsT0FBTyxLQUNQQyxLQUFLLEtBQU0sVUFDWEEsS0FBSyxZQUFhLGFBQWV5bkQsRUFBVSxJQUFNQyxFQUFVLEtBRzVERSxFQUFXRCxFQUNWNW5ELE9BQU8sUUFDUEMsS0FBSyxRQUFTLGtCQUNkQSxLQUFLLFFBQVN1bkQsR0FDZHZuRCxLQUFLLFNBQVV3bkQsR0FDaEJ1SSxFQUFVNWtCLGVBQ1Z5YyxFQUFTL2dELE1BQU0sT0FBUWtwRCxFQUFVNWtCLGVBRWpDNGtCLEVBQVUza0IsbUJBQ1Z3YyxFQUFTL2dELE1BQU0sU0FBVWtwRCxFQUFVM2tCLG1CQUd2QyxJQUFJeWMsRUFBZVQsRUFDZlUsRUFBZVosRUFDZmEsRUFBY0YsRUFBZVQsRUFBV0UsRUFDeENVLEVBQWNGLEVBRWxCLEdBQW9DLGFBQWhDaUksRUFBVTdrQixrQkFBa0MsQ0FDeEM2a0IsRUFBVTFrQixpQkFBbUI3SixHQUFVMEssTUFFdkN5YixFQUNLcG9ELFVBQVUsV0FDVkMsS0FBS3dJLEdBQ0xsSSxRQUNBQyxPQUFPLFFBQ1BDLEtBQUssS0FBTTZuRCxHQUNYN25ELEtBQUssS0FBTTZuRCxFQUFlUCxHQUMxQnRuRCxLQUFLLE1BQU0sU0FBVXdCLEVBQWMxSixHQUNoQyxJQUFJaS9ELEVBQW1CRCxFQUFZbjJELFFBQVE4aUIsR0FDaENBLEVBQUszckIsSUFDYkwsT0FFSCxPQUFPcXdELEdBRFBod0QsR0FBUWkvRCxHQUNrQjFQLENBQzlCLElBQ0NybkQsS0FBSyxNQUFNLFNBQVV3QixFQUFjMUosR0FDaEMsSUFBSWkvRCxFQUFtQkQsRUFBWW4yRCxRQUFROGlCLEdBQ2hDQSxFQUFLM3JCLElBQ2JMLE9BRUgsT0FBT3F3RCxHQURQaHdELEdBQVFpL0QsR0FDa0IxUCxDQUM5QixJQUNDeGdELE1BQU0sVUFBVSxTQUFVckYsRUFBYzFKLEdBQ3JDLElBQUlnL0QsRUFBWWx2QixTQUFTOXZDLEdBQ3pCLE9BQVFpNEQsRUFBdUJ2a0IsVUFBVTF6QyxFQUM3QyxJQUdKNnZELEVBQ0twb0QsVUFBVSxXQUNWQyxLQUFLd0ksR0FDTGxJLFFBQ0FDLE9BQU8sVUFDUEMsS0FBSyxLQUFNNm5ELEVBQWVQLEVBQWMsR0FDeEN0bkQsS0FBSyxNQUFNLFNBQVV3QixFQUFjMUosR0FDaEMsSUFBSWkvRCxFQUFtQkQsRUFBWW4yRCxRQUFROGlCLEdBQ2hDQSxFQUFLM3JCLElBQ2JMLE9BRUgsT0FBT3F3RCxHQURQaHdELEdBQVFpL0QsR0FDa0IxUCxDQUM5QixJQUNDcm5ELEtBQUssS0FBSyxTQUFVd0IsRUFBYzFKLEdBQy9CLElBQUlnL0QsRUFBWWx2QixTQUFTOXZDLEdBQ3pCLE9BQUtpNEQsRUFBdUJwa0IsVUFBVTd6QyxHQUMxQmk0RCxFQUF1QmhrQixVQUFVajBDLEdBRXRDLENBQ1gsSUFDQytPLE1BQU0sUUFBUSxTQUFVckYsRUFBYzFKLEdBQ25DLElBQUlnL0QsRUFBWWx2QixTQUFTOXZDLEdBQ3pCLE9BQVFpNEQsRUFBdUJua0IsV0FBVzl6QyxFQUM5QyxLQUNHaTRELEVBQVUxa0IsaUJBQW1CN0osR0FBVTZLLEtBRTlDc2IsRUFDS3BvRCxVQUFVLFdBQ1ZDLEtBQUt3SSxHQUNMbEksUUFDQUMsT0FBTyxRQUNQQyxLQUFLLElBQUs2bkQsR0FDVjduRCxLQUFLLEtBQUssU0FBVXdCLEVBQWMxSixHQUMvQixJQUFJaS9ELEVBQW1CRCxFQUFZbjJELFFBQVE4aUIsR0FDaENBLEVBQUszckIsSUFDYkwsT0FFSCxPQUFPcXdELEdBRFBod0QsR0FBUWkvRCxHQUNrQjFQLEVBQVdILEVBQWEsQ0FDdEQsSUFDQ2xuRCxLQUFLLFFBQVNzbkQsR0FDZHRuRCxLQUFLLFNBQVVrbkQsR0FDZnJnRCxNQUFNLFFBQVEsU0FBVXJGLEVBQWMxSixHQUNuQyxJQUFJZy9ELEVBQVlsdkIsU0FBUzl2QyxHQUN6QixPQUFRaTRELEVBQXNCM2pCLFNBQVN0MEMsRUFDM0MsSUFJUixJQUFJay9ELEVBQWFyUCxFQUNacG9ELFVBQVUsVUFDVkMsS0FBS3dJLEdBQ0xsSSxRQUNBQyxPQUFPLFFBQ1BDLEtBQUssSUFBSytuRCxHQUNWL25ELEtBQUssS0FBSyxTQUFVd0IsRUFBYzFKLEdBQy9CLElBQUlpL0QsRUFBbUJELEVBQVluMkQsUUFBUThpQixHQUNoQ0EsRUFBSzNyQixJQUNiTCxPQUVILE9BQU91d0QsR0FEUGx3RCxHQUFRaS9ELEdBQ2lCMVAsQ0FDN0IsSUFDQ2xuRCxNQUFLLFNBQVVxQixFQUFjMUosR0FDMUIsT0FBSWcvRCxFQUFZbHZCLFNBQVM5dkMsR0FBVyxHQUM3QjBKLENBQ1gsSUFDQ3FGLE1BQU0scUJBQXNCLFVBQzVCN0csS0FBSyxRQUFTLHdCQUVmK3ZELEVBQVUxa0IsaUJBQW1CN0osR0FBVTBLLEtBQ3ZDOHFCLEVBQVdud0QsTUFBTSxRQUFRLFNBQVVyRixFQUFjMUosR0FDN0MsSUFBSWcvRCxFQUFZbHZCLFNBQVM5dkMsR0FDekIsT0FBUWk0RCxFQUF1QnZrQixVQUFVMXpDLEVBQzdDLElBQ09pNEQsRUFBVTFrQixpQkFBbUI3SixHQUFVNkssS0FDOUMycUIsRUFBV253RCxNQUFNLFFBQVEsU0FBVXJGLEVBQWMxSixHQUM3QyxJQUFJZy9ELEVBQVlsdkIsU0FBUzl2QyxHQUN6QixPQUFRaTRELEVBQXNCM2pCLFNBQVN0MEMsRUFDM0MsR0FFUCxNQUFNLEdBQW9DLGVBQWhDaTRELEVBQVU3a0Isa0JBQW9DLENBQ2pENmtCLEVBQVUxa0IsaUJBQW1CN0osR0FBVTBLLE1BRXZDeWIsRUFDS3BvRCxVQUFVLFdBQ1ZDLEtBQUt3SSxHQUNMbEksUUFDQUMsT0FBTyxRQUNQQyxLQUFLLE1BQU0sU0FBVXdCLEVBQWMxSixHQUNoQyxJQUFJbS9ELEVBQU83UCxFQUNYLElBQUssSUFBS3BpQixFQUFLajNCLEtBQVMrNEMsRUFBVXp1RCxVQUM5QixJQUFJeStELEVBQVlsdkIsU0FBUzVDLEdBQXpCLENBQ0EsS0FBSUEsRUFBTWx0QyxHQUlOLE1BSEFtL0QsR0FDSTNQLEVBQWNGLEVBQVdyNUMsRUFBS2tkLE1BQVFtOEIsQ0FITixDQVE1QyxPQUFPNlAsQ0FDWCxJQUNDajNELEtBQUssTUFBTSxTQUFVd0IsRUFBYzFKLEdBQ2hDLElBQUltL0QsRUFBTzdQLEVBQVdFLEVBQ3RCLElBQUssSUFBS3RpQixFQUFLajNCLEtBQVMrNEMsRUFBVXp1RCxVQUM5QixJQUFJeStELEVBQVlsdkIsU0FBUzVDLEdBQXpCLENBQ0EsS0FBSUEsRUFBTWx0QyxHQUlOLE1BSEFtL0QsR0FDSTdQLEVBQVdyNUMsRUFBS2tkLE1BQVFtOEIsRUFBV0UsQ0FISCxDQVE1QyxPQUFPMlAsQ0FDWCxJQUNDajNELEtBQUssS0FBTThuRCxHQUNYOW5ELEtBQUssS0FBTThuRCxHQUNYamhELE1BQU0sVUFBVSxTQUFVckYsRUFBYzFKLEdBQ3JDLElBQUlnL0QsRUFBWWx2QixTQUFTOXZDLEdBQ3pCLE9BQVFpNEQsRUFBdUJ2a0IsVUFBVTF6QyxFQUM3QyxJQUdKNnZELEVBQ0twb0QsVUFBVSxXQUNWQyxLQUFLd0ksR0FDTGxJLFFBQ0FDLE9BQU8sVUFDUEMsS0FBSyxNQUFNLFNBQVV3QixFQUFjMUosR0FDaEMsSUFBSW0vRCxFQUFPN1AsRUFBV0UsRUFBYyxFQUNwQyxJQUFLLElBQUt0aUIsRUFBS2ozQixLQUFTKzRDLEVBQVV6dUQsVUFDOUIsSUFBSXkrRCxFQUFZbHZCLFNBQVM1QyxHQUF6QixDQUNBLEtBQUlBLEVBQU1sdEMsR0FRTixNQVBBbS9ELEdBQ0kzUCxFQUFjLEVBQ2RGLEVBQ0FyNUMsRUFBS2tkLE1BQ0xtOEIsRUFDQUUsRUFBYyxDQVBrQixDQVk1QyxPQUFPMlAsQ0FDWCxJQUNDajNELEtBQUssS0FBTThuRCxHQUNYOW5ELEtBQUssS0FBSyxTQUFVd0IsRUFBYzFKLEdBQy9CLElBQUlnL0QsRUFBWWx2QixTQUFTOXZDLEdBQ3pCLE9BQUtpNEQsRUFBdUJwa0IsVUFBVTd6QyxHQUMxQmk0RCxFQUF1QmhrQixVQUFVajBDLEdBRXRDLENBQ1gsSUFDQytPLE1BQU0sUUFBUSxTQUFVckYsRUFBYzFKLEdBQ25DLElBQUlnL0QsRUFBWWx2QixTQUFTOXZDLEdBQ3pCLE9BQVFpNEQsRUFBdUJua0IsV0FBVzl6QyxFQUM5QyxLQUNHaTRELEVBQVUxa0IsaUJBQW1CN0osR0FBVTZLLEtBRTlDc2IsRUFDS3BvRCxVQUFVLFdBQ1ZDLEtBQ0d3SSxFQUFNckgsUUFBTyxDQUFDakYsRUFBRzVELEtBQ0xnL0QsRUFBWWx2QixTQUFTOXZDLE1BR3BDZ0ksUUFDQUMsT0FBTyxRQUNQQyxLQUFLLEtBQUssU0FBVXdCLEVBQWMxSixHQUMvQixJQUFJbS9ELEVBQU83UCxFQUNYLElBQUssSUFBS3BpQixFQUFLajNCLEtBQVMrNEMsRUFBVXp1RCxVQUM5QixJQUFJeStELEVBQVlsdkIsU0FBUzVDLEdBQXpCLENBQ0EsS0FBSUEsRUFBTWx0QyxHQUlOLE1BSEFtL0QsR0FDSTNQLEVBQWNGLEVBQVdyNUMsRUFBS2tkLE1BQVFtOEIsQ0FITixDQVE1QyxPQUFPNlAsQ0FDWCxJQUNDajNELEtBQUssSUFBSzhuRCxFQUFlWixFQUFhLEdBQ3RDbG5ELEtBQUssUUFBU3NuRCxHQUNkdG5ELEtBQUssU0FBVWtuRCxHQUNmcmdELE1BQU0sUUFBUSxTQUFVckYsRUFBYzFKLEdBQ25DLElBQUlnL0QsRUFBWWx2QixTQUFTOXZDLEdBQ3pCLE9BQVFpNEQsRUFBc0IzakIsU0FBU3QwQyxFQUMzQyxJQUlSLElBQUlrL0QsRUFBYXJQLEVBQ1pwb0QsVUFBVSxVQUNWQyxLQUFLd0ksR0FDTGxJLFFBQ0FDLE9BQU8sUUFDUEMsS0FBSyxLQUFLLFNBQVV3QixFQUFjMUosR0FDL0IsSUFBSW0vRCxFQUFPN1AsRUFBV0UsRUFBY0YsRUFDcEMsSUFBSyxJQUFLcGlCLEVBQUtqM0IsS0FBUys0QyxFQUFVenVELFVBQzlCLElBQUl5K0QsRUFBWWx2QixTQUFTNUMsR0FBekIsQ0FDQSxLQUFJQSxFQUFNbHRDLEdBR04sTUFGQW0vRCxHQUFRbHBELEVBQUtrZCxNQUFRbThCLEVBQVdFLEVBQWNGLENBRlYsQ0FPNUMsT0FBTzZQLENBQ1gsSUFDQ2ozRCxLQUFLLElBQUtnb0QsR0FDVjduRCxNQUFLLFNBQVVxQixFQUFjMUosR0FDMUIsT0FBSWcvRCxFQUFZbHZCLFNBQVM5dkMsR0FBVyxHQUM3QjBKLENBQ1gsSUFDQ3FGLE1BQU0scUJBQXNCLFVBQzVCN0csS0FBSyxRQUFTLHdCQUVmK3ZELEVBQVUxa0IsaUJBQW1CN0osR0FBVTBLLEtBQ3ZDOHFCLEVBQVdud0QsTUFBTSxRQUFRLFNBQVVyRixFQUFjMUosR0FDN0MsSUFBSWcvRCxFQUFZbHZCLFNBQVM5dkMsR0FDekIsT0FBUWk0RCxFQUF1QnZrQixVQUFVMXpDLEVBQzdDLElBQ09pNEQsRUFBVTFrQixpQkFBbUI3SixHQUFVNkssS0FDOUMycUIsRUFBV253RCxNQUFNLFFBQVEsU0FBVXJGLEVBQWMxSixHQUM3QyxJQUFJZy9ELEVBQVlsdkIsU0FBUzl2QyxHQUN6QixPQUFRaTRELEVBQXNCM2pCLFNBQVN0MEMsRUFDM0MsR0FFUCxDQUNMLENBRUEsU0FBUzh1RCxHQUNMakQsRUFDQXRjLEVBQ0Ewb0IsR0FLQSxJQUFLMW9CLElBQWUwb0IsRUFBVyxPQUUvQixJQUFLQSxFQUFVN2xCLE1BQU8sT0FDdEIsSUFBSXVjLEVBQVluQyxHQUF1QnlMLEVBQVU3bEIsTUFBTyxpQkFHcERBLEVBQVF5WixFQUFjMEMsVUFDckJ0bUQsT0FBTyxRQUNQSSxLQUFLNHZELEVBQVU3bEIsT0FDZmxxQyxLQUFLLEtBQU0sU0FDWEEsS0FDRyxZQUNBLGFBQ0lxbkMsRUFBVzBCLGFBQWE5ZCxNQUFRLEVBQ2hDLElBQ0F3N0IsRUFBVXBYLE9BQVMsRUFDbkIsS0FFUHJ2QyxLQUFLLFNBQVV5bUQsRUFBVXBYLFFBQ3pCcnZDLEtBQUssUUFBUyxpQkFDbkIyakQsRUFBcUIsTUFBSXpaLEVBR3pCd2MsR0FBa0IvQyxFQUFjL2dELElBQUssRUFBRzZqRCxFQUFVcFgsUUFDbERxWCxHQUFrQi9DLEVBQWMwQyxVQUFXLEVBQUdJLEVBQVVwWCxRQUd4RHNYLEdBQWdCaEQsRUFBY2tCLFNBQVUsRUFBRzRCLEVBQVVwWCxPQUd6RCxDQUVBLFNBQVNpWixHQUNMSCxFQUNBeEUsRUFDQXRjLEdBRUEsSUFBSXFjLEVBQVN4UCxHQUFVaVUsR0FDbkJ2bEQsRUFBTStnRCxFQUFjL2dELElBQ3BCd2xELEVBQVcva0IsV0FBV3pnQyxFQUFJNUMsS0FBSyxVQUMvQnFvRCxFQUFZaGxCLFdBQVd6Z0MsRUFBSTVDLEtBQUssV0FDcEM0QyxFQUFJNUMsS0FBSyxRQUFTLE1BQ2JBLEtBQUssU0FBVSxNQUNmQSxLQUFLLFVBQVcsT0FBT29vRCxLQUFZQyxLQUNuQ3JvRCxLQUFLLHNCQUF1QixpQkFFN0JxbkMsRUFBV2lDLGNBQ1hvYSxFQUFPNzhDLE1BQU0sUUFBUyxTQUV0QjY4QyxFQUFPNzhDLE1BQ0gsU0FDQ3VoRCxFQUFXL2dCLEVBQVdnQyxZQUFZbHZCLFdBQWEsTUFFcER1cEMsRUFBTzc4QyxNQUNILFVBQ0N3aEQsRUFBWWhoQixFQUFXZ0MsWUFBWWx2QixXQUFhLE1BRzdELENBRUEsU0FBU21zQyxHQUNMNUMsRUFDQXJjLEdBRUEsSUFBSXNjLEVBQStCLENBQUEsRUFFL0IvZ0QsRUFBTXdqRCxHQUNFMUMsR0FDUDNqRCxPQUFPLE9BQ1BDLEtBQUssS0FBTSxPQUNYQSxLQUNHLFFBQ0FxbkMsRUFBVzBCLGFBQWE5ZCxNQUNwQm9jLEVBQVc4QixPQUFPOXhDLEtBQ2xCZ3dDLEVBQVc4QixPQUFPcHhDLE9BRXpCaUksS0FDRyxTQUNBcW5DLEVBQVcwQixhQUFhc0csT0FDcEJoSSxFQUFXOEIsT0FBTy9yQyxJQUNsQmlxQyxFQUFXOEIsT0FBTzlyQyxRQUU5QnNtRCxFQUFtQixJQUFJL2dELEVBR3ZCLElBQUl5akQsRUFBWXpqRCxFQUNYN0MsT0FBTyxLQUNQQyxLQUFLLEtBQU0sYUFDWEEsS0FDRyxZQUNBLGFBQ0lxbkMsRUFBVzhCLE9BQU85eEMsS0FDbEIsSUFDQWd3QyxFQUFXOEIsT0FBTy9yQyxJQUNsQixLQUVQNEMsS0FBSyxRQUFTcW5DLEVBQVcwQixhQUFhOWQsTUFBUW9jLEVBQVc4QixPQUFPcHhDLE9BQ2hFaUksS0FDRyxTQUNBcW5DLEVBQVcwQixhQUFhc0csT0FBU2hJLEVBQVc4QixPQUFPOXJDLFFBRTNEc21ELEVBQXlCLFVBQUkwQyxFQUc3QixJQUFJeEIsRUFBV3dCLEVBQ1Z0bUQsT0FBTyxLQUNQQyxLQUFLLEtBQU0sWUFDWEEsS0FBSyxRQUFTcW5DLEVBQVcwQixhQUFhOWQsT0FDdENqckIsS0FBSyxTQUFVcW5DLEVBQVcwQixhQUFhc0csUUFHNUMsT0FGQXNVLEVBQXdCLFNBQUlrQixFQUVyQmxCLENBQ1gsQ0FFQSxTQUFTdVQsR0FDTHhULEVBQ0FyYyxFQUNBeEMsR0FLQSxJQUFLd0MsSUFBZXhDLEVBQVUsT0FFOUIsSUFBSThlLEVBQWdCMkMsR0FBWTVDLEVBQVFyYyxHQUV4Q3VmLEdBQVlqRCxFQUFldGMsRUFBWXhDLEdBRXZDaXJCLEdBQVluTSxFQUFldGMsRUFBWXhDLEdBSXZDLElBQUlzeUIsRUFBcUIsR0FDckJDLEVBQXNCLEdBQ3RCTixFQUFjenZCLEVBQVdOLFNBQVNXLGlCQUN0QyxJQUFLLElBQUkxQyxFQUFNLEVBQUdBLEVBQU1ILEVBQVNvSCxjQUFjeDBDLE9BQVF1dEMsSUFBTyxDQUMxRCxHQUFJOHhCLEVBQVlsdkIsU0FBUzVDLEdBQU0sU0FDL0IsSUFBSWlILEVBQWdCcEgsRUFBU29ILGNBQWNqSCxHQUNQLFNBQWhDaUgsRUFBYzl5QixjQUNkZytDLEVBQW1CdjFELEtBQUtvakMsR0FDcUIsVUFBdENpSCxFQUFjb3JCLHFCQUNyQkQsRUFBb0J4MUQsS0FBS29qQyxFQUVoQyxDQUVELElBQUlzeUIsRUFBcUI3RixHQUNyQjlOLEVBQ0F0YyxFQUNBeEMsRUFDQSxPQUNBc3lCLEdBRUosR0FBa0MsaUJBQXZCRyxFQUNQLE9BQU9BLEVBR1gsR0FBSTNULEVBQWM4UyxXQUFhOVMsRUFBYzZQLFdBQ3pDLElBQUssSUFBSTVRLEtBQWF1VSxFQUFvQixDQUN0QyxJQUFJN3ZCLEVBQVVELEVBQVdOLFNBQVNVLGVBQWVtYixHQUM3Q3RiLEVBQVFoQixXQUFXckQsaUJBRXZCc3dCLEdBQVc1UCxFQUFldGMsRUFBWXhDLEVBQVV5QyxFQUFTLFFBRXpEMnNCLEdBQWF0USxFQUFldGMsRUFBWXhDLEVBQVV5QyxFQUFTLFFBQzlELENBR0wsSUFBSWl3QixFQUFzQjlGLEdBQ3RCOU4sRUFDQXRjLEVBQ0F4QyxFQUNBLFFBQ0F1eUIsR0FFSixHQUFtQyxpQkFBeEJHLEVBQ1AsT0FBT0EsRUFHWCxHQUFJNVQsRUFBYytTLFlBQWMvUyxFQUFjOFAsWUFDMUMsSUFBSyxJQUFJN1EsS0FBYXdVLEVBQXFCLENBQ3ZDLElBQUk5dkIsRUFBVUQsRUFBV04sU0FBU1UsZUFBZW1iLEdBQzdDdGIsRUFBUWhCLFdBQVdyRCxpQkFFdkJzd0IsR0FBVzVQLEVBQWV0YyxFQUFZeEMsRUFBVXlDLEVBQVMsU0FFekQyc0IsR0FBYXRRLEVBQWV0YyxFQUFZeEMsRUFBVXlDLEVBQVMsU0FDOUQsQ0FHRHpDLEVBQVNtRyxZQUNUa2QsR0FBYXZFLEVBQWV0YyxFQUFZeEMsR0FHNUN5akIsR0FBYzVFLEVBQVFDLEVBQWV0YyxFQUN6QyxDQUVBLFNBQVNtd0IsR0FDTDlULEVBQ0FyYyxFQUNBdkMsR0FJQSxJQUFLdUMsSUFBZXZDLEVBQVMsT0FFN0IsSUFBSTZlLEVBQWdCMkMsR0FBWTVDLEVBQVFyYyxHQUV4Q3VmLEdBQVlqRCxFQUFldGMsRUFBWXZDLEdBRXZDZ3JCLEdBQVluTSxFQUFldGMsRUFBWXZDLEdBRXZDLElBQUlxeUIsRUFBcUIsR0FDckJDLEVBQXNCLEdBQ3RCTixFQUFjenZCLEVBQVdOLFNBQVNXLGlCQUN0QyxJQUFLLElBQUkxQyxFQUFNLEVBQUdBLEVBQU1GLEVBQVFtSCxjQUFjeDBDLE9BQVF1dEMsSUFBTyxDQUN6RCxHQUFJOHhCLEVBQVlsdkIsU0FBUzVDLEdBQU0sU0FDL0IsSUFBSWlILEVBQWdCbkgsRUFBUW1ILGNBQWNqSCxHQUNOLFNBQWhDaUgsRUFBYzl5QixjQUNkZytDLEVBQW1CdjFELEtBQUtvakMsR0FDcUIsVUFBdENpSCxFQUFjb3JCLHFCQUVyQkQsRUFBb0J4MUQsS0FBS29qQyxFQUVoQyxDQUVELElBQUlzeUIsRUFBcUI3RixHQUNyQjlOLEVBQ0F0YyxFQUNBdkMsRUFDQSxPQUNBcXlCLEdBRUosR0FBa0MsaUJBQXZCRyxFQUNQLE9BQU9BLEVBR1gsSUFBSWpCLEVBQ0FjLEVBQW1CMS9ELE9BQVMyL0QsRUFBb0IzL0QsT0FDaEQyK0QsRUFBYSxFQUVqQixHQUFJelMsRUFBYzhTLFdBQWE5UyxFQUFjNlAsV0FDekMsSUFBSyxJQUFJNVEsS0FBYXVVLEVBQW9CLENBQ3RDLElBQUk3dkIsRUFBVUQsRUFBV04sU0FBU1UsZUFBZW1iLEdBQzdDdGIsRUFBUWhCLFdBQVdyRCxpQkFFdkIwc0IsR0FDSWhNLEVBQ0F0YyxFQUNBdkMsRUFDQXdDLEVBQ0EsT0FDQTh1QixFQUNBQyxHQUdKRCxJQUNILENBR0wsSUFBSW1CLEVBQXNCOUYsR0FDdEI5TixFQUNBdGMsRUFDQXZDLEVBQ0EsUUFDQXN5QixHQUVKLEdBQW1DLGlCQUF4QkcsRUFDUCxPQUFPQSxFQUdYLEdBQUk1VCxFQUFjK1MsWUFBYy9TLEVBQWM4UCxZQUMxQyxJQUFLLElBQUk3USxLQUFhd1UsRUFBcUIsQ0FDdkMsSUFBSTl2QixFQUFVRCxFQUFXTixTQUFTVSxlQUFlbWIsR0FDN0N0YixFQUFRaEIsV0FBV3JELGlCQUV2QjBzQixHQUNJaE0sRUFDQXRjLEVBQ0F2QyxFQUNBd0MsRUFDQSxRQUNBOHVCLEVBQ0FDLEdBR0pELElBQ0gsQ0FHRHR4QixFQUFRa0csWUFDUmtkLEdBQWF2RSxFQUFldGMsRUFBWXZDLEdBRzVDd2pCLEdBQWM1RSxFQUFRQyxFQUFldGMsRUFDekMsQ0tycERBLFNBQVNvd0IsR0FBVTFrQixHQUVmLE9BREFBLEVBQU1BLEVBQUk3d0MsT0FBT2lYLGVBRWIsSUFBSyxPQUNMLElBQUssSUFDTCxJQUFLLEtBQ0wsSUFBSyxNQUNELE9BQU8sRUFDWCxJQUFLLFFBQ0wsSUFBSyxJQUNMLElBQUssTUFDTCxJQUFLLEtBQ0QsT0FBTyxFQUVmLE9BQU8sSUFDWCxDQUVBLFNBQVN1K0MsR0FBbUJoMUIsR0FDeEIsTUFDaUMsUUFBN0JBLEVBQVd2cEIsZUFDa0IsU0FBN0J1cEIsRUFBV3ZwQixlQUNrQixnQkFBN0J1cEIsRUFBV3ZwQixlQUNrQixTQUE3QnVwQixFQUFXdnBCLGVBQ2tCLGNBQTdCdXBCLEVBQVd2cEIsZUFDa0IsaUJBQTdCdXBCLEVBQVd2cEIsZUFDa0IsWUFBN0J1cEIsRUFBV3ZwQixlQUNrQixVQUE3QnVwQixFQUFXdnBCLGVBQ2tCLGFBQTdCdXBCLEVBQVd2cEIsZUFDa0IsU0FBN0J1cEIsRUFBV3ZwQixlQUNrQixhQUE3QnVwQixFQUFXdnBCLGVBQ2tCLGNBQTdCdXBCLEVBQVd2cEIsZUFDa0IsaUJBQTdCdXBCLEVBQVd2cEIsYUFLbkIsQ0FFQSxTQUFTdytDLEdBQXNCeDFCLEdBQzNCLE1BQWlCLFNBQWJBLEdBQW9DLFVBQWJBLEdBQXFDLFNBQWJBLENBSXZELENBRUEsU0FBU3kxQixHQUFjMytDLEdBQ25CLE9BQU8sQ0FDWCxDQUVBLFNBQVM0K0MsR0FBa0JocEMsR0FHdkIsTUFBTWlwQyxFQUFRLHNCQUNkLElBQ0lDLEVBRE9scEMsRUFBTTFzQixNQUFNLE9BQU84SSxLQUFLNnNELEdBQ2YzMUQsTUFBTSxLQUMxQixJQUFLLElBQUk2aUMsRUFBTSxFQUFHQSxFQUFNK3lCLEVBQVN0Z0UsT0FBUXV0QyxJQUNyQyt5QixFQUFTL3lCLEdBQU8reUIsRUFBUy95QixHQUFLN2lDLE1BQU0yMUQsR0FBTzdzRCxLQUFLLEtBRXBELE9BQU84c0QsQ0FDWCxDQUVBLFNBQVNDLEdBQ0x4MkQsRUFDQXF0QixFQUNBb3BDLEVBQ0FDLEVBQ0FDLEdBRUEsSUFBSS84RCxFQUF3QixHQUN4QjQwQyxFQUFlLEdBQ2Zvb0IsRUFBZ0IsRUFFcEIsS0FBT0gsRUFBYTc4RCxFQUFNM0QsUUFDdEIyRCxFQUFNd0csS0FBS3MyRCxHQUdmLEdBQUksTUFBT3JwQyxRQUVKLEdBQXFCLGlCQUFWQSxHQUFnQyxPQUFWQSxHQUNwQyxHQUFJNXhCLE1BQU1xSCxRQUFRdXFCLEdBQVEsQ0FDdEIsR0FBSUEsRUFBTXAzQixPQUFTd2dFLEVBRWYsT0FEQWpvQixFQUFlLGtDQUFvQ3h1QyxFQUFPLElBQ25Ed3VDLEVBRVgsR0FBcUIsSUFBakJuaEIsRUFBTXAzQixPQUVOLE9BREF1NEMsRUFBZSw4QkFBZ0N4dUMsRUFDeEN3dUMsRUFFWCxJQUFLLElBQUloTCxFQUFNLEVBQUdBLEVBQU01cEMsRUFBTTNELE9BQVF1dEMsSUFDbEMsR0FBSUEsRUFBTW5XLEVBQU1wM0IsT0FBUSxDQUNwQixJQUFJNGdFLEVBQU94cEMsRUFBTW1XLEdBQ2JxVSxFQUFPLEtBSVgsR0FISXJVLEVBQU0sSUFDTnFVLEVBQU94cUIsRUFBTW1XLEVBQU0sR0FBRzlpQyxRQUVOLGlCQUFUbTJELEVBQW1CLENBRTFCLEdBREFBLEVBQU9BLEVBQUtuMkQsT0FDQyxLQUFUbTJELEVBTUcsQ0FDSHJvQixFQUFlLHNCQUF3Qnh1QyxFQUN2QyxLQUNILENBUE9wRyxFQUFNNHBDLEdBREcsT0FBVHFVLEVBQ2FBLEVBRUE2ZSxDQU14QixLQUFNLElBQW9CLGtCQUFURyxFQUdYLENBQ0hyb0IsRUFBZSxzQkFBd0J4dUMsRUFDdkMsS0FDSCxDQUxHcEcsRUFBTTRwQyxHQUFPcXpCLEVBQ2JELEdBSUgsQ0FDSixLQUFNLENBRUgsSUFBSS9rQixFQUFPeGtCLEVBQU1BLEVBQU1wM0IsT0FBUyxHQUU1QjJELEVBQU00cEMsR0FETm96QixFQUFnQixFQUNIL2tCLEVBRUE2a0IsQ0FFcEIsQ0FFUixPQUNFLEdBQXFCLGlCQUFWcnBDLEVBQW9CLENBQ2xDLElBQUlrcEMsRUFBV0YsR0FBa0JocEMsR0FDakMsR0FBSWtwQyxFQUFTdGdFLE9BQVMsRUFBRyxDQUNyQixHQUFJc2dFLEVBQVN0Z0UsT0FBU3dnRSxFQUVsQixPQURBam9CLEVBQWUsa0NBQW9DeHVDLEVBQU8sSUFDbkR3dUMsRUFFWCxJQUFLLElBQUloTCxFQUFNLEVBQUdBLEVBQU01cEMsRUFBTTNELE9BQVF1dEMsSUFDbEMsR0FBSUEsRUFBTSt5QixFQUFTdGdFLE9BQVEsQ0FDdkIsSUFBSTRnRSxFQUFPTixFQUFTL3lCLEdBQUs5aUMsT0FDckJtM0MsRUFBTyxLQUlYLEdBSElyVSxFQUFNLElBQ05xVSxFQUFPb2UsR0FBVU0sRUFBUy95QixFQUFNLEdBQUc5aUMsU0FFMUIsS0FBVG0yRCxFQUVJajlELEVBQU00cEMsR0FERyxPQUFUcVUsRUFDYUEsRUFFQTZlLE1BRWQsQ0FDSCxJQUFJSSxFQUFXYixHQUFVWSxHQUN6QixHQUFpQixPQUFiQyxFQUdHLENBQ0h0b0IsRUFBZSxzQkFBd0J4dUMsRUFDdkMsS0FDSCxDQUxHcEcsRUFBTTRwQyxHQUFPc3pCLEVBQ2JGLEdBS1AsQ0FDSixLQUFNLENBRUgsSUFBSS9rQixFQUFPb2tCLEdBQVVNLEVBQVNBLEVBQVN0Z0UsT0FBUyxHQUFHeUssUUFFL0M5RyxFQUFNNHBDLEdBRE5vekIsRUFBZ0IsR0FBYyxPQUFUL2tCLEVBQ1JBLEVBRUE2a0IsQ0FFcEIsQ0FFUixNQUNHLEdBQWMsS0FBVnJwQyxPQUVHLENBQ0gsSUFBSTBwQyxFQUFZZCxHQUFVNW9DLEdBQzFCLEdBQWtCLE9BQWQwcEMsRUFBb0IsQ0FDcEJuOUQsRUFBTSxHQUFLbTlELEVBQ1hILElBQ0EsSUFBSyxJQUFJcHpCLEVBQU0sRUFBR0EsRUFBTTVwQyxFQUFNM0QsT0FBUXV0QyxJQUNsQzVwQyxFQUFNNHBDLEdBQU91ekIsQ0FFcEIsTUFDR3ZvQixFQUFlLHNCQUF3Qnh1QyxDQUU5QyxDQUVSLE1BQU0sR0FBcUIsa0JBQVZxdEIsRUFBcUIsQ0FDbkN6ekIsRUFBTSxHQUFLeXpCLEVBQ1h1cEMsSUFDQSxJQUFLLElBQUlwekIsRUFBTSxFQUFHQSxFQUFNNXBDLEVBQU0zRCxPQUFRdXRDLElBQ2xDNXBDLEVBQU00cEMsR0FBT25XLENBRXBCLE1BQ0dtaEIsRUFBZSxzQkFBd0J4dUMsRUFPM0MsT0FKSzIyRCxHQUF1QyxJQUFsQkMsSUFDdEJwb0IsRUFBZSxzQkFBd0J4dUMsR0FHdEIsS0FBakJ3dUMsRUFDT0EsRUFHSjUwQyxDQUNYLENBRUEsU0FBU285RCxHQUNMaDNELEVBQ0FxdEIsRUFDQW9wQyxFQUNBQyxFQUNBQyxHQUlBLElBQUkvOEQsRUFBdUIsR0FDdkI0MEMsRUFBZSxHQUNmb29CLEVBQWdCLEVBRXBCLEtBQU9ILEVBQWE3OEQsRUFBTTNELFFBQ3RCMkQsRUFBTXdHLEtBQUtzMkQsR0FHZixHQUFJLE1BQU9ycEMsUUFFSixHQUFxQixpQkFBVkEsR0FBZ0MsT0FBVkEsR0FDcEMsR0FBSTV4QixNQUFNcUgsUUFBUXVxQixHQUFRLENBQ3RCLEdBQUlBLEVBQU1wM0IsT0FBU3dnRSxFQUVmLE9BREFqb0IsRUFBZSxrQ0FBb0N4dUMsRUFBTyxJQUNuRHd1QyxFQUVYLEdBQXFCLElBQWpCbmhCLEVBQU1wM0IsT0FFTixPQURBdTRDLEVBQWUsOEJBQWdDeHVDLEVBQ3hDd3VDLEVBRVgsSUFBSyxJQUFJaEwsRUFBTSxFQUFHQSxFQUFNNXBDLEVBQU0zRCxPQUFRdXRDLElBQ2xDLEdBQUlBLEVBQU1uVyxFQUFNcDNCLE9BQVEsQ0FDcEIsSUFBSTRnRSxFQUFPeHBDLEVBQU1tVyxHQUNicVUsRUFBTyxLQUlYLEdBSElyVSxFQUFNLElBQ05xVSxFQUFPeHFCLEVBQU1tVyxFQUFNLEdBQUc5aUMsUUFFTixpQkFBVG0yRCxFQUFtQixDQUUxQixHQURBQSxFQUFPQSxFQUFLbjJELE9BQ0MsS0FBVG0yRCxFQU1HLENBQ0hyb0IsRUFBZSxzQkFBd0J4dUMsRUFDdkMsS0FDSCxDQVBPcEcsRUFBTTRwQyxHQURHLE9BQVRxVSxFQUNhQSxFQUVBNmUsQ0FNeEIsS0FBTSxJQUFvQixpQkFBVEcsRUFHWCxDQUNIcm9CLEVBQWUsc0JBQXdCeHVDLEVBQ3ZDLEtBQ0gsQ0FMR3BHLEVBQU00cEMsR0FBT3F6QixFQUNiRCxHQUlILENBQ0osS0FBTSxDQUVILElBQUkva0IsRUFBT3hrQixFQUFNQSxFQUFNcDNCLE9BQVMsR0FFNUIyRCxFQUFNNHBDLEdBRE5vekIsRUFBZ0IsRUFDSC9rQixFQUVBNmtCLENBRXBCLENBRVIsT0FDRSxHQUFxQixpQkFBVnJwQyxFQUFvQixDQUNsQyxJQUFJa3BDLEVBQVdGLEdBQWtCaHBDLEdBQ2pDLEdBQUlrcEMsRUFBU3RnRSxPQUFTLEVBQUcsQ0FDckIsR0FBSXNnRSxFQUFTdGdFLE9BQVN3Z0UsRUFFbEIsT0FEQWpvQixFQUFlLGtDQUFvQ3h1QyxFQUFPLElBQ25Ed3VDLEVBRVgsSUFBSyxJQUFJaEwsRUFBTSxFQUFHQSxFQUFNNXBDLEVBQU0zRCxPQUFRdXRDLElBQ2xDLEdBQUlBLEVBQU0reUIsRUFBU3RnRSxPQUFRLENBQ3ZCLElBQUk0Z0UsRUFBT04sRUFBUy95QixHQUFLOWlDLE9BQ3JCbTNDLEVBQU8sS0FNWCxHQUxJclUsRUFBTSxJQUNOcVUsRUFBT29mLEdBQ0hWLEVBQVMveUIsRUFBTSxHQUFHOWlDLFFBQ3BCaE0sT0FFTyxLQUFUbWlFLEVBQ2EsT0FBVGhmLEdBQWlCbHRCLE9BQU9tWCxTQUFTK1YsR0FDakNqK0MsRUFBTTRwQyxHQUFPcVUsRUFFYmorQyxFQUFNNHBDLEdBQU9rekIsTUFFZCxDQUNILElBQUlRLEVBQVVELEdBQXlCSixHQUFNbmlFLE1BQzdDLEdBQWdCLE9BQVp3aUUsRUFHRyxDQUNIMW9CLEVBQWUsc0JBQXdCeHVDLEVBQ3ZDLEtBQ0gsQ0FMR3BHLEVBQU00cEMsR0FBTzB6QixFQUNiTixHQUtQLENBQ0osS0FBTSxDQUVILElBQUkva0IsRUFBT29sQixHQUNQVixFQUFTbHBDLEVBQU1wM0IsT0FBUyxHQUFHeUssUUFDN0JoTSxNQUVFa0YsRUFBTTRwQyxHQUROb3pCLEVBQWdCLEdBQWMsT0FBVC9rQixFQUNSQSxFQUVBNmtCLENBRXBCLENBRVIsTUFDRyxHQUFjLEtBQVZycEMsT0FFRyxDQUNILElBQUk4cEMsRUFBV0YsR0FBeUI1cEMsR0FBTzM0QixNQUMvQyxHQUFpQixPQUFieWlFLEVBQW1CLENBQ25CdjlELEVBQU0sR0FBS3U5RCxFQUNYUCxJQUNBLElBQUssSUFBSXB6QixFQUFNLEVBQUdBLEVBQU01cEMsRUFBTTNELE9BQVF1dEMsSUFDbEM1cEMsRUFBTTRwQyxHQUFPMnpCLENBRXBCLE1BQ0czb0IsRUFBZSxzQkFBd0J4dUMsQ0FFOUMsQ0FFUixNQUFNLEdBQXFCLGlCQUFWcXRCLEVBQ2QsR0FBSTFDLE9BQU9tWCxTQUFTelUsR0FBUSxDQUN4Qnp6QixFQUFNLEdBQUt5ekIsRUFDWHVwQyxJQUNBLElBQUssSUFBSXB6QixFQUFNLEVBQUdBLEVBQU01cEMsRUFBTTNELE9BQVF1dEMsSUFDbEM1cEMsRUFBTTRwQyxHQUFPblcsQ0FFcEIsTUFDR21oQixFQUFlLHNCQUF3Qnh1QyxPQUczQ3d1QyxFQUFlLHNCQUF3Qnh1QyxFQU8zQyxPQUpLMjJELEdBQXVDLElBQWxCQyxJQUN0QnBvQixFQUFlLHNCQUF3Qnh1QyxHQUd0QixLQUFqQnd1QyxFQUNPQSxFQUdKNTBDLENBQ1gsQ0FFQSxTQUFTdzlELEdBQW1CL3BDLEVBQVlxcEMsR0FDcEMsTUFBcUIsaUJBQVZycEMsRUFDQWdxQyxHQUEwQmhxQyxHQUNULGlCQUFWQSxFQUNQQSxFQUFNMVUsV0FFVis5QyxDQUNYLENBRUEsU0FBU1ksR0FDTHQzRCxFQUNBcXRCLEVBQ0FvcEMsRUFDQUMsRUFDQWEsRUFDQVosR0FFQSxJQUFJLzhELEVBQXVCLEdBQ3ZCNDBDLEVBQWUsR0FDZm9vQixFQUFnQixFQUVwQixLQUFPSCxFQUFhNzhELEVBQU0zRCxRQUN0QjJELEVBQU13RyxLQUFLczJELEdBR2YsR0FBSSxNQUFPcnBDLFFBRUosR0FBcUIsaUJBQVZBLEdBQWdDLE9BQVZBLEdBQ3BDLEdBQUk1eEIsTUFBTXFILFFBQVF1cUIsR0FBUSxDQUN0QixHQUFJQSxFQUFNcDNCLE9BQVN3Z0UsRUFFZixPQURBam9CLEVBQWUsa0NBQW9DeHVDLEVBQU8sSUFDbkR3dUMsRUFFWCxHQUFxQixJQUFqQm5oQixFQUFNcDNCLE9BRU4sT0FEQXU0QyxFQUFlLDhCQUFnQ3h1QyxFQUN4Q3d1QyxFQUVYLElBQUssSUFBSWhMLEVBQU0sRUFBR0EsRUFBTTVwQyxFQUFNM0QsT0FBUXV0QyxJQUNsQyxHQUFJQSxFQUFNblcsRUFBTXAzQixPQUFRLENBQ3BCLElBQUk0Z0UsRUFBT3hwQyxFQUFNbVcsR0FDYnFVLEVBQU8sS0FJWCxHQUhJclUsRUFBTSxJQUNOcVUsRUFBT3hxQixFQUFNbVcsRUFBTSxHQUFHOWlDLFFBRU4saUJBQVRtMkQsRUFzQkosQ0FDSHJvQixFQUFlLHNCQUF3Qnh1QyxFQUN2QyxLQUNILENBdkJHLEdBREE2MkQsRUFBT0EsRUFBS24yRCxPQUNDLEtBQVRtMkQsRUFFSWo5RCxFQUFNNHBDLEdBREcsT0FBVHFVLEVBQ2FBLEVBRUE2ZSxPQUdqQixHQUFJYSxFQUFXLENBQ1gsSUFBSUEsRUFBVVYsR0FHUCxDQUNIcm9CLEVBQWUsc0JBQXdCeHVDLEVBQ3ZDLEtBQ0gsQ0FMR3BHLEVBQU00cEMsR0FBT3F6QixFQUNiRCxHQUtQLE1BQ0doOUQsRUFBTTRwQyxHQUFPcXpCLEVBQ2JELEdBT2YsS0FBTSxDQUVILElBQUkva0IsRUFBT3hrQixFQUFNQSxFQUFNcDNCLE9BQVMsR0FBR3lLLE9BRS9COUcsRUFBTTRwQyxHQUROb3pCLEVBQWdCLEVBQ0gva0IsRUFFQTZrQixDQUVwQixDQUVSLE9BQ0UsR0FBcUIsaUJBQVZycEMsRUFBb0IsQ0FDbEMsSUFBSWtwQyxFQUFXRixHQUFrQmhwQyxHQUNqQyxHQUFJa3BDLEVBQVN0Z0UsT0FBUyxFQUFHLENBQ3JCLEdBQUlzZ0UsRUFBU3RnRSxPQUFTd2dFLEVBRWxCLE9BREFqb0IsRUFBZSxrQ0FBb0N4dUMsRUFBTyxJQUNuRHd1QyxFQUVYLElBQUssSUFBSWhMLEVBQU0sRUFBR0EsRUFBTTVwQyxFQUFNM0QsT0FBUXV0QyxJQUNsQyxHQUFJQSxFQUFNK3lCLEVBQVN0Z0UsT0FBUSxDQUN2QixJQUFJNGdFLEVBQU9OLEVBQVMveUIsR0FBSzlpQyxPQUNyQm0zQyxFQUFPLEtBSVgsR0FISXJVLEVBQU0sSUFDTnFVLEVBQU8wZSxFQUFTL3lCLEVBQU0sR0FBRzlpQyxRQUVoQixLQUFUbTJELEVBRUlqOUQsRUFBTTRwQyxHQURHLE9BQVRxVSxFQUNhQSxFQUVBNmUsT0FHakIsR0FBSWEsRUFBVyxDQUNYLElBQUlBLEVBQVVWLEdBR1AsQ0FDSHJvQixFQUFlLHNCQUF3Qnh1QyxFQUN2QyxLQUNILENBTEdwRyxFQUFNNHBDLEdBQU9xekIsRUFDYkQsR0FLUCxNQUNHaDlELEVBQU00cEMsR0FBT3F6QixFQUNiRCxHQUdYLEtBQU0sQ0FFSCxJQUFJL2tCLEVBQU8wa0IsRUFBU0EsRUFBU3RnRSxPQUFTLEdBQUd5SyxPQUVyQzlHLEVBQU00cEMsR0FETm96QixFQUFnQixFQUNIL2tCLEVBRUE2a0IsQ0FFcEIsQ0FFUixNQUNHLEdBQWMsS0FBVnJwQyxRQUdBLEdBQUlrcUMsRUFDQSxHQUFJQSxFQUFVbHFDLEdBQVEsQ0FDbEJ6ekIsRUFBTSxHQUFLeXpCLEVBQ1h1cEMsSUFDQSxJQUFLLElBQUlwekIsRUFBTSxFQUFHQSxFQUFNNXBDLEVBQU0zRCxPQUFRdXRDLElBQ2xDNXBDLEVBQU00cEMsR0FBT25XLENBRXBCLE1BQ0dtaEIsRUFBZSxzQkFBd0J4dUMsTUFFeEMsQ0FDSHBHLEVBQU0sR0FBS3l6QixFQUNYdXBDLElBQ0EsSUFBSyxJQUFJcHpCLEVBQU0sRUFBR0EsRUFBTTVwQyxFQUFNM0QsT0FBUXV0QyxJQUNsQzVwQyxFQUFNNHBDLEdBQU9uVyxDQUVwQixDQUdaLE1BQU0sR0FBcUIsaUJBQVZBLEVBQW9CLENBQ2xDLElBQUltcUMsRUFBWW5xQyxFQUFNMVUsV0FDdEIsR0FBSTQrQyxFQUNBLEdBQUlBLEVBQVVDLEdBQVksQ0FDdEI1OUQsRUFBTSxHQUFLNDlELEVBQ1haLElBQ0EsSUFBSyxJQUFJcHpCLEVBQU0sRUFBR0EsRUFBTTVwQyxFQUFNM0QsT0FBUXV0QyxJQUNsQzVwQyxFQUFNNHBDLEdBQU9nMEIsQ0FFcEIsTUFDR2hwQixFQUFlLHNCQUF3Qnh1QyxNQUV4QyxDQUNIcEcsRUFBTSxHQUFLNDlELEVBQ1haLElBQ0EsSUFBSyxJQUFJcHpCLEVBQU0sRUFBR0EsRUFBTTVwQyxFQUFNM0QsT0FBUXV0QyxJQUNsQzVwQyxFQUFNNHBDLEdBQU9nMEIsQ0FFcEIsQ0FDSixNQUNHaHBCLEVBQWUsc0JBQXdCeHVDLEVBTzNDLEdBSksyMkQsR0FBdUMsSUFBbEJDLElBQ3RCcG9CLEVBQWUsc0JBQXdCeHVDLEdBR3RCLEtBQWpCd3VDLEVBQ0EsT0FBT0EsRUFHWCxJQUFLLElBQUloTCxFQUFNLEVBQUdBLEVBQU01cEMsRUFBTTNELE9BQVF1dEMsSUFDbEM1cEMsRUFBTTRwQyxHQUFPNnpCLEdBQTBCejlELEVBQU00cEMsSUFHakQsT0FBTzVwQyxDQUNYLENBRUEsU0FBUzY5RCxHQUFlejNELEVBQWNxdEIsR0FDbEMsSUFBSXFxQyxFQUEwQixHQUU5QixHQUFJLE1BQU9ycUMsRUFBeUMsT0FBT3FxQyxFQUUzRCxHQUFxQixpQkFBVnJxQyxHQUNQLEdBQUk1eEIsTUFBTXFILFFBQVF1cUIsR0FDZCxJQUFLLElBQUlzcUMsS0FBUXRxQyxFQUNiLEdBQW9CLGlCQUFUc3FDLEVBQW1CLENBQzFCLElBQUkxeUQsRUFBSTQ4QixXQUFXODFCLEdBQ25CLElBQUlodEMsT0FBT21YLFNBQVM3OEIsR0FFYixDQUVILE1BRG1CLGNBQWNqRix5QkFFcEMsQ0FKRzAzRCxFQUFTdDNELEtBQUs2RSxFQUtyQixPQUdOLEdBQXFCLGlCQUFWb29CLEVBQW9CLENBQ2xDLElBQUlrcEMsRUFBV0YsR0FBa0JocEMsR0FDakMsR0FBSWtwQyxFQUFTdGdFLE9BQVMsRUFDbEIsSUFBSyxJQUFJMmhFLEtBQVNyQixFQUFVLENBQ3hCLElBQUl0eEQsRUFBSTQ4QixXQUFXKzFCLEVBQU1sM0QsUUFDekIsR0FBS2lxQixPQUFPMXZCLE1BQU1nSyxHQUdYLENBRUgsTUFEbUIsY0FBY2pGLHlCQUVwQyxDQUpHMDNELEVBQVN0M0QsS0FBSzZFLEVBS3JCLEtBQ0UsSUFBYyxLQUFWb29CLEVBQWMsQ0FFckIsTUFEbUIsU0FBU3J0QixtQkFFL0IsQ0FBTSxDQUNILElBQUlpRixFQUFJNDhCLFdBQVd4VSxHQUNuQixJQUFJMUMsT0FBT21YLFNBQVM3OEIsR0FFYixDQUVILE1BRG1CLGNBQWNqRix5QkFFcEMsQ0FKRzAzRCxFQUFTdDNELEtBQUs2RSxFQUtyQixFQUNKLEtBQU0sSUFBcUIsaUJBQVZvb0IsRUFFWCxDQUVILE1BRG1CLFdBQVdydEIsR0FFakMsQ0FKRzAzRCxFQUFTdDNELEtBQUtpdEIsRUFJakIsQ0FFRCxPQUFPcXFDLENBQ1gsQ0FFQSxTQUFTRyxHQUFlNzNELEVBQWNxdEIsR0FDbEMsSUFBSXlxQyxFQUEwQixHQUU5QixHQUFJLE1BQU96cUMsRUFBeUMsT0FBT3lxQyxFQUUzRCxHQUFxQixpQkFBVnpxQyxHQUNQLEdBQUk1eEIsTUFBTXFILFFBQVF1cUIsR0FDZCxJQUFLLElBQUlzcUMsS0FBUXRxQyxFQUNPLGlCQUFUc3FDLEdBQ1BHLEVBQVMxM0QsS0FBS3UzRCxFQUFLajNELFlBSTVCLElBQXFCLGlCQUFWMnNCLEVBYVgsQ0FFSCxNQURtQixXQUFXcnRCLEdBRWpDLENBaEJxQyxDQUNsQyxJQUFJdTJELEVBQVdGLEdBQWtCaHBDLEdBRWpDLEdBQUlrcEMsRUFBU3RnRSxPQUFTLEVBQ2xCLElBQUssSUFBSTJoRSxLQUFTckIsRUFDZHVCLEVBQVMxM0QsS0FBS3czRCxFQUFNbDNELFlBRXJCLElBQWMsS0FBVjJzQixFQUFjLENBRXJCLE1BRG1CLFNBQVNydEIsbUJBRS9CLENBQ0c4M0QsRUFBUzEzRCxLQUFLaXRCLEVBQ2pCLENBQ0osQ0FHQSxDQUVELElBQUssSUFBSW1XLEVBQU0sRUFBR0EsRUFBTXMwQixFQUFTN2hFLE9BQVF1dEMsSUFDckNzMEIsRUFBU3QwQixHQUFPNnpCLEdBQTBCUyxFQUFTdDBCLElBR3ZELE9BQU9zMEIsQ0FDWCxDQUVBLFNBQVNDLEdBQXFCQyxFQUFXbnlCLEdBSWpDbXlCLElBRUFueUIsRUFBVzZDLE1BQVEwdUIsR0FBbUJZLGFBQUEsRUFBQUEsRUFBTXR2QixNQUFPN0MsRUFBVzZDLE9BRzlEN0MsRUFBVzhDLFdBQWF5dUIsR0FDcEJZLGFBQUEsRUFBQUEsRUFBTXJ2QixXQUNOOUMsRUFBVzhDLFlBSWY5QyxFQUFXK0MsV0FBYXd1QixHQUNwQlksYUFBQSxFQUFBQSxFQUFNcHZCLFdBQ04vQyxFQUFXK0MsWUFJZi9DLEVBQVdnRCxnQkFBa0J1dUIsR0FDekJZLGFBQUEsRUFBQUEsRUFBTW52QixnQkFDTmhELEVBQVdnRCxpQkFJc0Isa0JBQTFCbXZCLEVBQUt6dUIsbUJBQ1oxRCxFQUFXMEQsaUJBQW1CeXVCLEVBQUt6dUIsa0JBSVIsa0JBQXBCeXVCLEVBQUt4dUIsYUFDWjNELEVBQVcyRCxXQUFhd3VCLEVBQUt4dUIsWUFJRSxpQkFBeEJ3dUIsRUFBS3Z1QixlQUNaNUQsRUFBVzRELGVBQWlCdXVCLEVBQUt2dUIsZUFFakM1RCxFQUFXNEQsZUFBaUIsU0FJTSxpQkFBM0J1dUIsRUFBS3R1QixrQkFDWjdELEVBQVc2RCxrQkFBb0JzdUIsRUFBS3R1QixrQkFHRixRQUE5QjdELEVBQVc0RCxnQkFDbUIsV0FBOUI1RCxFQUFXNEQsZUFFWDVELEVBQVc2RCxrQkFBb0IsYUFFRCxTQUE5QjdELEVBQVc0RCxnQkFDbUIsVUFBOUI1RCxFQUFXNEQsZUFFWDVELEVBQVc2RCxrQkFBb0IsV0FFL0I3RCxFQUFXNkQsa0JBQW9CLGFBT3ZDN0QsRUFBVzhELGNBQWdCeXRCLEdBQ3ZCWSxhQUFBLEVBQUFBLEVBQU1ydUIsY0FDTjlELEVBQVc4RCxlQUlmOUQsRUFBVytELGtCQUFvQnd0QixHQUMzQlksYUFBQSxFQUFBQSxFQUFNcHVCLGtCQUNOL0QsRUFBVytELG9CQUtuQixJQUFJcXVCLEVBQWdCWCxHQUNoQixhQUNBVSxhQUFBLEVBQUFBLEVBQU1sdkIsV0FDTixFQUNBLFFBQ0EsTUFDQSxHQUVKLEdBQTZCLGlCQUFsQm12QixFQUNQLE9BQU9BLEVBRVgsR0FBSUEsRUFBY2hpRSxPQUFTLEVBQ3ZCLE1BQU8sd0VBRVg0dkMsRUFBV2lELFdBQWFtdkIsRUFJeEIsSUFBSUMsRUFBZ0JaLEdBQ2hCLGFBQ0FVLGFBQUEsRUFBQUEsRUFBTWp2QixXQUNOLEVBQ0EsR0FDQXF0QixJQUNBLEdBRUosR0FBNkIsaUJBQWxCOEIsRUFDUCxPQUFPQSxFQUVYLEdBQUlBLEVBQWNqaUUsT0FBUyxFQUN2QixNQUFPLHdFQUVYNHZDLEVBQVdrRCxXQUFhbXZCLEVBSXhCLElBQUlDLEVBQXFCYixHQUNyQixrQkFDQVUsYUFBQSxFQUFBQSxFQUFNaHZCLGdCQUNOLEVBQ0EsR0FDQW90QixJQUNBLEdBRUosR0FBa0MsaUJBQXZCK0IsRUFDUCxPQUFPQSxFQUVYLEdBQUlBLEVBQW1CbGlFLE9BQVMsRUFDNUIsTUFBTyw2RUFFWDR2QyxFQUFXbUQsZ0JBQWtCbXZCLEVBSTdCLElBQUlDLEVBQWVkLEdBQ2YsWUFDQVUsYUFBQSxFQUFBQSxFQUFNL3VCLFVBQ04sRUFDQSxHQUNBLE1BQ0EsR0FFSixHQUE0QixpQkFBakJtdkIsRUFDUCxPQUFPQSxFQUVYLEdBQUlBLEVBQWFuaUUsT0FBUyxFQUN0QixNQUFPLHVFQUVYNHZDLEVBQVdvRCxVQUFZbXZCLEVBSXZCdnlCLEVBQVdxRCxrQkFBb0JrdUIsR0FDM0JZLGFBQUEsRUFBQUEsRUFBTTl1QixrQkFDTnJELEVBQVdxRCxtQkFLZixJQUFJbXZCLEVBQXVCZixHQUN2QixvQkFDQVUsYUFBQSxFQUFBQSxFQUFNN3VCLGtCQUNOLEVBQ0EsS0FDQSxNQUNBLEdBRUosR0FBb0MsaUJBQXpCa3ZCLEVBQ1AsT0FBT0EsRUFFWCxHQUFJQSxFQUFxQnBpRSxPQUFTLEVBQzlCLE1BQU8sK0VBRVg0dkMsRUFBV3NELGtCQUFvQmt2QixFQUkvQnh5QixFQUFXdUQscUJBQXVCZ3VCLEdBQzlCWSxhQUFBLEVBQUFBLEVBQU01dUIscUJBQ052RCxFQUFXdUQsc0JBS2YsSUFBSWt2QixFQUEwQmhCLEdBQzFCLHVCQUNBVSxhQUFBLEVBQUFBLEVBQU0zdUIscUJBQ04sRUFDQSxLQUNBLE1BQ0EsR0FFSixHQUF1QyxpQkFBNUJpdkIsRUFDUCxPQUFPQSxFQUVYLEdBQUlBLEVBQXdCcmlFLE9BQVMsRUFDakMsTUFBTyxrRkFFWDR2QyxFQUFXd0QscUJBQXVCaXZCLEVBSWxDLElBQUlDLEVBQVV2QixHQUF3QixPQUFRZ0IsYUFBSSxFQUFKQSxFQUFNLzBCLEtBQU0sRUFBRyxNQUFNLEdBQ25FLEdBQXVCLGlCQUFaczFCLEVBQ1AsT0FBT0EsRUFFWCxHQUFJQSxFQUFRdGlFLE9BQVMsRUFDakIsTUFBTyxrRUFFWDR2QyxFQUFXNUMsS0FBT3MxQixFQUlsQixJQUFJQyxFQUFVeEIsR0FBd0IsT0FBUWdCLGFBQUksRUFBSkEsRUFBTTkwQixLQUFNLEVBQUcsTUFBTSxHQUNuRSxHQUF1QixpQkFBWnMxQixFQUNQLE9BQU9BLEVBRVgsR0FBSUEsRUFBUXZpRSxPQUFTLEVBQ2pCLE1BQU8sa0VBRVg0dkMsRUFBVzNDLEtBQU9zMUIsRUFJbEIsSUFBSUMsRUFBa0JqQyxHQUNsQixlQUNBd0IsYUFBSSxFQUFKQSxFQUFNMXVCLGFBQ04sR0FDQSxHQUNBLEdBRUosTUFBK0IsaUJBQXBCbXZCLEVBQ0FBLEVBRVBBLEVBQWdCeGlFLE9BQVMsRUFDbEIsK0VBRVg0dkMsRUFBV3lELGFBQWVtdkIsRUFFOUIsQ0FFQSxTQUFTQyxHQUF3QnBuQixHQUM3QixJQUFJZSxFQUFpQixHQUNyQixHQUFZLE9BQVJmLEVBQWMsQ0FDZCxNQUFNcW5CLEVBQWExaEUsT0FBT283QyxLQUFLZixHQUMvQixJQUFLLElBQUl4NkMsS0FBTzZoRSxFQUNadG1CLEVBQUtqeUMsS0FBS3RKLEVBQUk2aEIsV0FFckIsQ0FDRCxPQUFPMDVCLENBQ1gsQ0MxMkJnQixTQUFBdW1CLEdBQ1pseUIsRUFDQWIsR0FpQkEsT0FIZTZrQixHQVBFbU8sR0FGRW55QixFQUFLb3lCLFNBSXBCanpCLEVBQVdpQixpQkFDWGpCLEVBQVdrQixrQkFJNkJsQixFQUFXTCxXQUkzRCxVQUlnQnV6QixHQUNaQyxFQUNBajJCLEVBQ0E4QyxHQUtBLElBQUl2b0IsRUFBT3RnQixPQUFPMm9DLE9BQU8sSUFFckJzekIsRUFBY0QsRUFBVUUsWUFDNUIsR0FBSUQsR0FDSUUsR0FBaUJGLEVBQWFsMkIsRUFBTVosYUFBYyxDQUNsRCxJQUFJdU4sRUFBVXlwQixHQUFpQkYsRUFBYWwyQixFQUFNWixhQUczQixpQkFBWnVOLElBQ1BBLEVBQVVtcEIsR0FDTm5wQixFQUNBN0osRUFBV2lCLGlCQUNYakIsRUFBV2tCLGtCQUdmenBCLEVBQU9vdEMsR0FBaUJoYixFQUFTN0osRUFBV0wsWUFHbkQsQ0FHTCxPQUFPbG9CLENBQ1gsQ0FLQSxTQUFTODdDLEdBQ0x6NkQsRUFDQXV4QyxFQUNBckssR0FFQSxJQUdJajdCLEVBSEEwUyxFQUFPdGdCLE9BQU8yb0MsT0FBTyxJQUVyQi9ELEVBQVEsSUFBSW4wQixPQUFPeWlDLEVBQVUsTUFFakMsS0FBUXRsQyxFQUFRZzNCLEVBQU1ocUIsS0FBS2paLElBRXZCLFFBQzRCLElBQWpCaU0sRUFBTWQsYUFDaUIsSUFBdkJjLEVBQU1kLE9BQU9wVixNQUN0QixDQUVFLElBQUlnN0MsRUFBVTlrQyxFQUFNZCxPQUFPcFYsTUFBTWdNLE9BVWpDLEdBUEFndkMsRUFBVW1wQixHQUNObnBCLEVBQ0E3SixFQUFXaUIsaUJBQ1hqQixFQUFXa0Isa0JBR2Z6cEIsRUFBT290QyxHQUFpQmhiLEVBQVM3SixFQUFXTCxZQUN4Q2xvQixFQUFLMnpCLFVBQ0wsT0FBTzN6QixDQUVkLENBR0wsT0FBT0EsQ0FDWCxVQUlnQis3QyxHQUNaQyxFQUNBdjJCLEVBQ0E4QyxHQU1XN29DLE9BQU8yb0MsT0FBTyxJQUV6QixJQUFJNHpCLEVBQVV4MkIsRUFBTVosWUFZcEIsT0FYSVksRUFBTVgsb0JBQ05tM0IsRUFBVXgyQixFQUFNWCxtQkFVYmczQixHQUErQkUsRUFMbEMsV0FDQUMsRUFDQSw0RUFHcUQxekIsRUFDN0QsVUFJZ0IyekIsR0FDWkYsRUFDQXYyQixFQUNBOEMsR0FVQSxPQUxXN29DLE9BQU8yb0MsT0FBTyxJQUtsQnl6QixHQUErQkUsRUFIdkJ2MkIsRUFBTVosWUFHb0MwRCxFQUM3RCxVQUlnQjR6QixHQUNaSCxFQUNBdjJCLEVBQ0E4QyxHQUtXN29DLE9BQU8yb0MsT0FBTyxJQUV6QixJQUFJK3pCLEVBQVczMkIsRUFBTVosWUFpQnJCLE9BaEJJWSxFQUFNWCxvQkFDTnMzQixFQUFXMzJCLEVBQU1YLG1CQUlyQnMzQixFQUFXQSxFQUFTMXZDLFFBQVEsSUFBSyxZQVcxQm92QyxHQUErQkUsRUFMbEMsb0JBQ0FJLEVBQ0EsNEVBR3FEN3pCLEVBQzdELFVBdURnQjh6QixHQUNaanpCLEVBQ0EzRCxFQUNBOEMsR0FLQSxJQUFJdm9CLEVBQU90Z0IsT0FBTzJvQyxPQUFPLElBRXpCLEdBQUllLEdBQVFBLGFBQWdCa3pCLFFBQU8sQ0FHL0IsSUFBSTVzQyxFQUFTK1YsRUFBTVosWUFDbkIsR0FBZSxVQUFYblYsRUFBb0IsQ0FFcEIxUCxFQUFPdThDLEdBREtuekIsRUFBS296QixLQUFLQyxNQUNtQmwwQixFQUFXTCxXQUN2RCxNQUFNLEdBQWUsVUFBWHhZLEVBQW9CLENBRTNCMVAsRUFBT3U4QyxHQURLbnpCLEVBQUtvekIsS0FBS0UsTUFDbUJuMEIsRUFBV0wsV0FDdkQsS0FBcUIsU0FBWHhZLElBQ1AxUCxFQUFPczdDLEdBQW9CbHlCLEVBQU1iLEdBRXhDLENBR0QsT0FBT3ZvQixDQUNYLFVBSWdCMjhDLEdBQ1pYLEVBQ0F2MkIsRUFDQThDLEdBS1c3b0MsT0FBTzJvQyxPQUFPLElBQ3pCLElBQUl6RSxFQUFhNkIsRUFBTWIsVUFHbkJnTyxFQUFXbk4sRUFBTVosWUFZckIsT0FWSStOLEVBREFoUCxJQUFlbkIsR0FBV202QixLQUNmLGtCQUFvQmhxQixFQUN4QmhQLElBQWVuQixHQUFXbzZCLFNBQ3RCLGFBQWVqcUIsRUFDbkJoUCxJQUFlbkIsR0FBV3E2QixZQUN0QixlQUFpQmxxQixFQUVqQixrQkFBb0JBLEVBSTVCa3BCLEdBQStCRSxFQUFTcHBCLEVBQVVySyxFQUM3RCxDQUVNLFNBQVV3MEIsR0FDWkMsRUFDQWg5QyxFQUNBeWxCLEVBQ0FydUMsR0FFQSxHQUFLNGxFLEVBQVE3aUUsSUFBSTZsQixHQUlWLENBQ29CZzlDLEVBQVEvaUUsSUFBSStsQixHQUNsQmxkLEtBQUssQ0FBRTJpQyxNQUFPQSxFQUFPcnVDLE1BQU9BLEdBQ2hELEtBUHVCLENBQ3BCLElBQUk2bEUsRUFBa0IsSUFBSTkrRCxNQUMxQjgrRCxFQUFnQm42RCxLQUFLLENBQUUyaUMsTUFBT0EsRUFBT3J1QyxNQUFPQSxJQUM1QzRsRSxFQUFRaGpFLElBQUlnbUIsRUFBTWk5QyxFQUNyQixDQUlMLENBTUEsU0FBU0MsR0FDTDc3RCxFQUNBdXhDLEVBQ0FuTixFQUNBdTNCLEVBQ0FHLEVBQ0E1MEIsR0FJQSxJQUNJajdCLEVBREFnM0IsRUFBUSxJQUFJbjBCLE9BQU95aUMsRUFBVSxPQUU3QndxQixFQUFVLEVBQ1ZDLEdBQVksRUFDaEIsS0FBUS92RCxFQUFRZzNCLEVBQU1ocUIsS0FBS2paLElBRXZCLEdBQUtrbkMsRUFBV29CLG9CQUFvQmxFLEVBQU1WLFNBc0V0Q3E0QixHQUFXNzBCLEVBQVdtQixXQUFXakUsRUFBTVYsU0FDdkNzNEIsR0FBWSxFQUNaNTNCLEVBQU1KLHFCQXZFTixRQUM0QixJQUFqQi8zQixFQUFNZCxhQUNpQixJQUF2QmMsRUFBTWQsT0FBT3BWLE1BQ3RCLENBQ0UsSUFHSTZoRSxFQUhTM3JELEVBQU1kLE9BQU9wVixNQUFNZ00sT0FHVkMsTUFBTW9pQyxFQUFNTixnQkFFbEMsSUFBSzh6QixFQUFVLFNBQ2YsR0FBd0IsSUFBcEJBLEVBQVN0Z0UsT0FBYyxDQUV2QixJQUVJMmtFLEVBQVczRCxHQUZEVixFQUFTLEdBQUc3MUQsT0FJdEJtbEMsRUFBV3lCLGNBRVEsT0FBbkJzekIsRUFBU2xtRSxRQUNMa21FLEVBQVM3NkQsT0FBU2tnQyxHQUFVbVMsTUFDNUJzb0IsRUFBVUUsRUFBU2xtRSxNQUNuQmltRSxHQUFZLEVBQ1o1M0IsRUFBTXZCLFVBQVl2QixHQUFVbVMsS0FDNUJyUCxFQUFNSixpQkFHRGtELEVBQVdxQixnQkFBZ0JuRSxFQUFNVixVQUNmLElBQW5CdTRCLEVBQVNsbUUsUUFFVGdtRSxHQUFXRSxFQUFTbG1FLE1BQ3BCaW1FLEdBQVksRUFDWjUzQixFQUFNSixpQkFJckIsTUFBTSxHQUNINHpCLEVBQVN0Z0UsT0FBUzhzQyxFQUFNVCxlQUN4QlMsRUFBTVQsZUFBaUIsRUFDekIsQ0FFRSxJQUNJczRCLEVBQVczRCxHQUREVixFQUFTeHpCLEVBQU1ULGVBQWU1aEMsT0FHeENtbEMsRUFBV3lCLGNBR1EsT0FBbkJzekIsRUFBU2xtRSxRQUNMa21FLEVBQVM3NkQsT0FBU2tnQyxHQUFVbVMsTUFDNUJzb0IsRUFBVUUsRUFBU2xtRSxNQUNuQmltRSxHQUFZLEVBQ1o1M0IsRUFBTXZCLFVBQVl2QixHQUFVbVMsS0FDNUJyUCxFQUFNSixrQkFFTiszQixHQUFXRSxFQUFTbG1FLE1BQ3BCaW1FLEdBQVksRUFDWjUzQixFQUFNSixpQkFHakIsQ0FDSixNQUdHKzNCLEdBQVc3MEIsRUFBV21CLFdBQVdqRSxFQUFNVixTQUN2Q3M0QixHQUFZLEVBQ1o1M0IsRUFBTUosZ0JBV2xCLEdBQUlnNEIsRUFBVyxDQUdYLE9BREFOLEdBQWFDLEVBREFHLEVBQVVsakUsSUFBSXN1QyxFQUFXVyxTQUFTekQsRUFBTVYsVUFDdkJVLEVBQU8yM0IsSUFDOUIsQ0FDVixDQUVELE9BQU8sQ0FDWCxDQWdSZ0IsU0FBQUcsR0FDWm4wQixFQUNBNHlCLEVBQ0F2MkIsRUFDQThDLEVBQ0F5MEIsRUFDQUcsR0FJQSxHQUFJL3pCLEdBQVFBLGFBQWdCa3pCLFFBQU8sQ0FHL0IsSUFBSTVzQyxFQUFTK1YsRUFBTVosWUFDZjI0QixFQUFTTCxFQUFVbGpFLElBQUlzdUMsRUFBV1csU0FBU3pELEVBQU1WLFVBRXJELEdBQWUsVUFBWHJWLEVBQW9CLENBQ3BCLElBQUkrc0MsRUFBUXJ6QixFQUFLb3pCLEtBQUtDLE1BSXRCLE9BSEFoM0IsRUFBTXZCLFVBQVl2QixHQUFVM2pCLEtBQzVCeW1CLEVBQU1KLGdCQUNOMDNCLEdBQWFDLEVBQVNRLEVBQVEvM0IsRUFBT2czQixJQUM5QixDQUNWLENBQU0sR0FBZSxVQUFYL3NDLEVBQW9CLENBQzNCLElBQUlndEMsRUFBUXR6QixFQUFLb3pCLEtBQUtFLE1BSXRCLE9BSEFqM0IsRUFBTXZCLFVBQVl2QixHQUFVM2pCLEtBQzVCeW1CLEVBQU1KLGdCQUNOMDNCLEdBQWFDLEVBQVNRLEVBQVEvM0IsRUFBT2kzQixJQUM5QixDQUNWLENBQU0sR0FBZSxTQUFYaHRDLEVBQW1CLENBQzFCLElBQUl6Z0IsRUFBT202QixFQUFLb3pCLEtBQUt2dEQsS0FHckIsT0FGQXcyQixFQUFNSixnQkFDTjAzQixHQUFhQyxFQUFTUSxFQUFRLzNCLEVBQU94MkIsSUFDOUIsQ0FDVixDQUFNLEdBQWUsYUFBWHlnQixFQUF1QixDQUc5QixPQURBcXRDLEdBQWFDLEVBQVNRLEVBQVEvM0IsRWpCblFwQyxTQUF1QnBrQyxHQUN6QkEsRUFBTzQwQyxHQUFVNTBDLEdBR2pCLElBTUlvOEQsRUFBVSxJQUFJdHRELE9BQ2QsQ0FDSSxxQ0FQSixpbUlBQ0ttUCxPQU00RCxNQUpqRSx5RUFDS0EsUUFLSG5ULEtBQUssS0FDUCxLQUVKLE9BQVE5SyxFQUFLaU0sTUFBTW13RCxJQUFZLElBQUk5a0UsTUFDdkMsQ2lCZ1AyQitrRSxDQUFvQjFCLEtBRTVCLENBQ1YsQ0FBTSxHQUFlLGFBQVh0c0MsRUFBdUIsQ0FDOUIsSUFBSWl1QyxFQUFvQzNCLEVqQmpQcENyakUsT2lCb1BKLE9BRkE4c0MsRUFBTUosZ0JBQ04wM0IsR0FBYUMsRUFBU1EsRUFBUS8zQixFQUFPazRCLElBQzlCLENBQ1YsQ0FBTSxHQUFlLGlCQUFYanVDLEVBQTJCLENBQ2xDLElBQUlrdUMsRWpCblBWLFNBQTJCdjhELEdBVTdCLFNBVEFBLEVBQU80MEMsR0FBVTUwQyxLQUtKLElBQUlpTSxNQUNULGdHQUNDLElBQ3VCM1UsTUFFcEMsQ2lCd08rQmtsRSxDQUF3QjdCLEdBRzNDLE9BRkF2MkIsRUFBTUosZ0JBQ04wM0IsR0FBYUMsRUFBU1EsRUFBUS8zQixFQUFPbTRCLElBQzlCLENBQ1YsQ0FBTSxHQUFlLFNBQVhsdUMsRUFBbUIsQ0FDMUIsSUFBSW91QyxFQUFnQixFQUNoQkMsR0FBYyxFQUNkVCxFQUFXM0QsR0FDWHZ3QixFQUFLb3lCLFNBQ0xqekIsRUFBV3lCLGNBRVEsT0FBbkJzekIsRUFBU2xtRSxRQUNMa21FLEVBQVM3NkQsT0FBU2tnQyxHQUFVbVMsTUFDNUJncEIsRUFBZ0JSLEVBQVNsbUUsTUFDekIybUUsR0FBYyxFQUNkdDRCLEVBQU12QixVQUFZdkIsR0FBVW1TLEtBQzVCclAsRUFBTUosaUJBR0RrRCxFQUFXcUIsZ0JBQWdCbkUsRUFBTVYsVUFDZixJQUFuQnU0QixFQUFTbG1FLFFBRVQwbUUsR0FBaUJSLEVBQVNsbUUsTUFDMUIybUUsR0FBYyxFQUNkdDRCLEVBQU1KLGtCQUtsQixJQUFJanVDLEVBQVEsS0FJWixHQUhJMm1FLElBQ0EzbUUsRUFBUTBtRSxHQUVFLE9BQVYxbUUsRUFFQSxPQURBMmxFLEdBQWFDLEVBQVNRLEVBQVEvM0IsRUFBT3J1QyxJQUM5QixDQUVkLENBQ0osQ0FFRCxPQUFPLENBQ1gsQ0Mxd0JPLE1BQU00bUUsR0FBb0MsQ0FDN0M3MEIsT0FBUSxJQUNSakIsV0FBWSxjQUdWLE1BQU8rMUIsV0FBMEJDLEVBQUFBLGlCQUduQyxXQUFBNWtFLENBQVk2a0UsRUFBVTlnQixHQUNsQjNqRCxNQUFNeWtFLEVBQUs5Z0IsR0FDWHhqRCxLQUFLd2pELE9BQVNBLENBQ2pCLENBRUQsT0FBQStnQixHQUNJLElBQUlDLFlBQUVBLEdBQWdCeGtFLEtBRXRCd2tFLEVBQVlqNUQsUUFFWixJQUFJazVELEVBQUFBLFFBQVFELEdBQ1A5M0IsUUFBUSwyQkFDUmc0QixRQUNHLGlLQUVIQyxTQUFTbjlELEdBQ05BLEVBQ0tvOUQsZUFBZSxlQUNmNzNCLFNBQVMvc0MsS0FBS3dqRCxPQUFPcWhCLFNBQVN2MUIsUUFDOUJ3MUIsVUFBZ0J2bkUsR0FBU1QsRUFBQWtELFVBQUEsT0FBQSxHQUFBLFlBQ3RCQSxLQUFLd2pELE9BQU9xaEIsU0FBU3YxQixPQUFTL3hDLFFBQ3hCeUMsS0FBS3dqRCxPQUFPdWhCLGNBQ3JCLFFBR2IsSUFBSU4sRUFBQUEsUUFBUUQsR0FDUDkzQixRQUFRLHVCQUNSZzRCLFFBQ0csOElBRUhDLFNBQVNuOUQsR0FDTkEsRUFDS285RCxlQUFlLGNBQ2Y3M0IsU0FBUy9zQyxLQUFLd2pELE9BQU9xaEIsU0FBU3gyQixZQUM5QnkyQixVQUFnQnZuRSxHQUFTVCxFQUFBa0QsVUFBQSxPQUFBLEdBQUEsWUFDdEJBLEtBQUt3akQsT0FBT3FoQixTQUFTeDJCLFdBQWE5d0MsUUFDNUJ5QyxLQUFLd2pELE9BQU91aEIsY0FDckIsT0FFaEIsRUNiZ0IsTUFBQUMsV0FBZ0JDLEVBQUFBLE9BRzNCLE1BQUFDLDRDQUNGdlIsUUFBUXp3RCxJQUFJLHlDQUVObEQsS0FBS21sRSxlQUVYbmxFLEtBQUtvbEUsY0FBYyxJQUFJaEIsR0FBa0Jwa0UsS0FBS3NrRSxJQUFLdGtFLE9BRW5EQSxLQUFLcWxFLG1DQUNELFVBQ0FybEUsS0FBS3NsRSxjQUFjenhELEtBQUs3VCxPQUc1QkEsS0FBS3VsRSxXQUFXLENBQ1p6NkMsR0FBSSx5QkFDSmppQixLQUFNLHlCQUNORSxTQUFVLElBQU0vSSxLQUFLd2xFLGFBQWEzOEIsR0FBVTBLLFFBR2hEdnpDLEtBQUt1bEUsV0FBVyxDQUNaejZDLEdBQUksd0JBQ0pqaUIsS0FBTSx3QkFDTkUsU0FBVSxJQUFNL0ksS0FBS3dsRSxhQUFhMzhCLEdBQVU2SyxPQUdoRDF6QyxLQUFLdWxFLFdBQVcsQ0FDWno2QyxHQUFJLHNCQUNKamlCLEtBQU0sc0JBQ05FLFNBQVUsSUFBTS9JLEtBQUt3bEUsYUFBYTM4QixHQUFVeUwsYUFFbkQsQ0FFSyxZQUFBNndCLDRDQUNGbmxFLEtBQUs2a0UsU0FBVy9rRSxPQUFPbWlCLE9BQ25CLENBQUEsRUFDQWtpRCxTQUNNbmtFLEtBQUt5bEUsY0FFbEIsQ0FFSyxZQUFBVixrREFDSS9rRSxLQUFLMGxFLFNBQVMxbEUsS0FBSzZrRSxZQUM1QixDQUVELGtCQUFBYyxDQUFtQmxuQixFQUFpQnNNLEVBQXFCNmEsSVJzbEQ3QyxTQUFtQjdhLEVBQXFCMVQsR0FFeENrRSxHQUFVd1AsR0FBUXhqRCxPQUFPLFFBQVFRLFNBRW5DMGxELEdBQ0UxQyxHQUNQM2pELE9BQU8sT0FDUEksS0FBSzZ2QyxHQUNMbnBDLE1BQU0sbUJBQW9CLFNBQzFCQSxNQUFNLGdCQUFpQixRQUN2QkEsTUFBTSxVQUFXLFFBQ2pCQSxNQUFNLFFBQVMsTUFDeEIsQ1FqbURRMjNELENBQTZCOWEsRUFBUXRNLEdBQ3JDbW5CLEVBQUd0MUQsWUFBWXk2QyxFQUVsQixDQUVELFFBQUErYSxHQUNJblMsUUFBUXp3RCxJQUFJLG9DQUNmLENBRUQsZ0JBQUE2aUUsQ0FDSXoyQixFQUNBMDJCLEdBQTZCLEdBRTdCLElBQUlDLEVBQWlCLEdBRXJCLElBQUssSUFBSUMsS0FBUTUyQixFQUFPbmpDLFNBQ2hCKzVELGFBQWdCekQsRUFBQUEsTUFDTyxPQUFuQnlELEVBQUtDLFdBQ0xGLEVBQU1oOUQsS0FBS2k5RCxHQUdYQSxhQUFnQkUsRUFBT0EsU0FBSUosSUFDM0JDLEVBQVFBLEVBQU1qOUQsT0FBT2hKLEtBQUsrbEUsaUJBQWlCRyxLQUt2RCxPQUFPRCxDQUNWLENBRUssUUFBQUksQ0FBUUMsRUFBQUMsR0FDVixPQUFBenBFLEVBQUFrRCxLQUFBb0UsZUFBQSxHQUFBLFVBQUE2aEUsRUFDQXYzQixFQUNBczNCLEdBQTZCLEdBRTdCLElBQUtDLEVBQU8sT0FFWixJQUFJTyxFQUFpQjkzQixFQUFXWSxPQUM1Qm0zQixFQUF3Qi8zQixFQUFXYyxtQkFDbkNrM0IsRUFBaUJoNEIsRUFBV2EsS0FDNUJvM0IsRUFBMkJqNEIsRUFBV2Usd0JBQ3RDQyxFQUEwQmhCLEVBQVdnQix3QkFJekMsSUFBSysyQixFQUF1QixDQUN4QixJQUFJbjNCLEVBQVN0dkMsS0FBS3NrRSxJQUFJc0MsTUFBTUMsc0JBQ3hCQyxFQUFhQSxjQUFDTixJQUVsQixHQUFJbDNCLEdBQVVBLGFBQWtCODJCLFVBQVMsQ0FDckMsSUFBSVcsRUFBYy9tRSxLQUFLK2xFLGlCQUFpQnoyQixHQUN4QyxJQUFLLElBQUlDLEtBQVF3M0IsRUFDYmQsRUFBTWg5RCxLQUFLc21DLEVBRWxCLENBQ0osQ0FJRCxJQUFLLElBQUlzSCxLQUFZNnZCLEVBQWdCLENBQ2pDLElBQUkvL0QsRUFBT2t3QyxFQUNObHdDLEVBQUs2eEMsU0FBUyxTQUNmN3hDLEdBQVEsT0FFWkEsRUFBT21nRSxFQUFBQSxjQUFjbmdFLEdBR3JCLElBQUk0b0MsRUFBT3Z2QyxLQUFLc2tFLElBQUlzQyxNQUFNQyxzQkFBc0JsZ0UsR0FFNUM0b0MsR0FBUUEsYUFBZ0JrekIsU0FDeEJ3RCxFQUFNaDlELEtBQUtzbUMsRUFFbEIsQ0FNRCxJQUFJeTNCLEVBQXVCLEVBQ3ZCQyxHQUFnQyxFQUNKLEtBQTVCdjNCLEVBQ0F1M0IsR0FBZ0MsRUFDekIsV0FBV3grRCxLQUFLaW5DLElBRXZCczNCLEVBQXVCdDhCLFdBQVdnRixHQUNsQ3UzQixHQUFnQyxHQUN4QixZQUFZeCtELEtBQUtpbkMsS0FFekJ1M0IsR0FBZ0MsR0FFcEMsSUFBSyxJQUFJcHdCLEtBQVk4dkIsRUFBMEIsQ0FDdEM5dkIsRUFBUzJCLFNBQVMsU0FDbkIzQixHQUFZLE9BRWhCLElBQUl0SCxFQUFPdnZDLEtBQUtza0UsSUFBSXNDLE1BQU1DLHNCQUN0QkMsRUFBYUEsY0FBQ2p3QixJQUVsQixHQUFJdEgsR0FBUUEsYUFBZ0JrekIsUUFBTyxDQUUvQixJQUFJWixFQUFZN2hFLEtBQUtza0UsSUFBSTRDLGNBQWNDLGFBQWE1M0IsR0FFaEQ2M0IsU0FEb0JwbkUsS0FBS3NrRSxJQUFJc0MsTUFBTVMsUUFBUUMsS0FBSy8zQixFQUFLNW9DLE9BQ2pDNkMsTUFDcEIsbUNBSUosS0FBS3E0RCxhQUFBLEVBQUFBLEVBQVcwRixPQUFPLFNBRXZCLElBQUssSUFBSUMsS0FBUTNGLEVBQVUwRixNQUFPLENBQzlCLElBQUtDLEVBQU0sU0FDWCxJQUFJQyxFQUNBem5FLEtBQUtza0UsSUFBSTRDLGNBQWNRLHFCQUNuQkYsRUFBS0EsS0FDTDN3QixHQUVSLEdBQUk0d0IsR0FBY0EsYUFBc0JoRixRQUFPLENBQzNDLEdBQUl3RSxFQUErQixDQUUvQixJQUFJVSxFQUFhSCxFQUFLaGhFLFNBQVM0ZCxJQUFJOWMsS0FFbkMsR0FBSXFnRSxHQUFjLEdBQUtBLEVBQWFQLEVBQU10b0UsT0FBUSxDQUM5QyxJQUtJc2dFLEVBTE9nSSxFQUFNTyxHQUtHbitELE1BQU1nK0QsRUFBS0ksVUFFL0IsR0FBd0IsSUFBcEJ4SSxFQUFTdGdFLE9BQWMsQ0FDdkIsSUFHSTJVLEVBSEFxbkMsRUFBVXNrQixFQUFTLEdBQUc3MUQsT0FFdEJraEMsRUFBUSxJQUFJbjBCLE9BRERvNUIsRUFDa0IsTUFFakMsS0FBUWo4QixFQUFRZzNCLEVBQU1ocUIsS0FBS3E2QixJQUV2QixRQUVRLElBREdybkMsRUFBTWQsYUFHVCxJQURHYyxFQUFNZCxPQUFPcFYsTUFFdEIsQ0FFRSxJQUFJa21FLEVBQ0EzRCxHQUNJcnNELEVBQU1kLE9BQU9wVixNQUFNZ00sT0FDbkJtbEMsRUFBV3lCLGNBRW5CLEdBQXVCLE9BQW5Cc3pCLEVBQVNsbUUsTUFBZ0IsQ0FDekJ5cEUsRUFDSXZELEVBQVNsbUUsTUFDYixLQUNILENBQ0osQ0FFUixDQUNKLENBQ0osQ0FFRCxJQUFLLElBQUk0QixFQUFJLEVBQUdBLEVBQUk2bkUsRUFBc0I3bkUsSUFDdEM4bUUsRUFBTWg5RCxLQUFLdytELEVBRWxCLENBQ0osQ0FDSixDQUNKLElBR0osQ0FFSyxhQUFBbkMsQ0FDRjcvQyxFQUNBbWdELEVBQ0FpQyw0Q0FHQSxNQUFNOWMsRUFBU3JnRCxTQUFTSyxjQUFjLE9BRXRDLElBQUkrOEQsRUFBV3JpRCxFQUFPbGMsT0FHbEJ3K0QsRUFBVS9uRSxLQUFLc2tFLElBQUlzQyxNQUFNb0IsVUFBVSxXQUNuQ0MsRUFBUzNqRSxNQUFNeWpFLEdBQVM3MUMsS0FBSyxLQUFLNWYsS0FBSyxJQUMzQ3cxRCxFQUFXQSxFQUFTajFDLFFBQVEsT0FBUW8xQyxHQUdwQyxJQUFJQyxFSHNuQkksU0FDWkosRUFDQXRrQixHQUVBLElBQUlxZCxFQUNKLElBRUlBLEVBQU9zSCxFQUFBQSxVQUFVTCxFQUNwQixDQUFDLE1BQU92ZCxHQUNMLElBQUlsVCxFQUFlLHFCQUVuQixPQURBc2MsUUFBUXp3RCxJQUFJcW5ELEdBQ0xsVCxDQUNWLENBQ0QsSUFBS3dwQixFQUVELE1BRG1CLHFCQUl2QixJQUFJdUgsRUFBa0I3RyxHQUF3QlYsR0FHMUN4cEIsRUFBZSxHQUduQixJQUFLK3dCLEVBQWdCbjVCLFNBQVMsZ0JBRTFCLE1BRG1CLDZDQUd2QixJQUFJakYsRUFBOEIsR0FDbEMsR0FBaUMsaUJBQXRCNjJCLEVBQUs3MkIsY0FBbUQsT0FBdEI2MkIsRUFBSzcyQixjQUM5QyxHQUFJMWxDLE1BQU1xSCxRQUFRazFELEVBQUs3MkIsY0FDbkIsSUFBSyxJQUFJblUsS0FBVWdyQyxFQUFLNzJCLGFBQ3BCLEdBQXNCLGlCQUFYblUsRUFBcUIsQ0FDNUIsR0FBZSxLQUFYQSxFQUVHLENBQ0h3aEIsRUFBZSxzQ0FDZixLQUNILENBSkdyTixFQUFhL2dDLEtBQUs0c0IsRUFLekIsT0FHTixHQUFpQyxpQkFBdEJnckMsRUFBSzcyQixhQUEyQixDQUM5QyxJQUFJbzFCLEVBQVdGLEdBQWtCMkIsRUFBSzcyQixjQUV0QyxHQUFJbzFCLEVBQVN0Z0UsT0FBUyxFQUNsQixJQUFLLElBQUkyaEUsS0FBU3JCLEVBQVUsQ0FFeEIsR0FEQXFCLEVBQVFBLEVBQU1sM0QsT0FDQSxLQUFWazNELEVBRUcsQ0FDSHBwQixFQUFlLHNDQUNmLEtBQ0gsQ0FKR3JOLEVBQWEvZ0MsS0FBS3czRCxFQUt6QixLQUM0QixLQUF0QkksRUFBSzcyQixhQUNacU4sRUFBZSxzQ0FFZnJOLEVBQWEvZ0MsS0FBSzQzRCxFQUFLNzJCLGFBRTlCLE1BQ0dxTixFQUFlLHVDQUVuQixJQUFLLElBQUloTCxFQUFNLEVBQUdBLEVBQU1yQyxFQUFhbHJDLE9BQVF1dEMsSUFDekNyQyxFQUFhcUMsR0FBTzZ6QixHQUEwQmwyQixFQUFhcUMsSUFJL0QsR0FBcUIsS0FBakJnTCxFQUNBLE9BQU9BLEVBR1gsSUFBSWd4QixFQUFjcitCLEVBQWFsckMsT0FHL0IsSUFBS3NwRSxFQUFnQm41QixTQUFTLGNBRTFCLE1BRG1CLDJDQUd2QixJQUFJbEYsRUFBZ0MsR0FDaEN1K0IsRUFBZ0JuSSxHQUNoQixhQUNBVSxFQUFLOTJCLFdBQ0xzK0IsRUFDQSxHQUNBdEosSUFDQSxHQUVKLEdBQTZCLGlCQUFsQnVKLEVBQ1AsT0FBT0EsRUFFWCxJQUFLLElBQUlDLEtBQVdELEVBQ2hCLE9BQVFDLEVBQVEvbkQsZUFDWixJQUFLLE1BQ0R1cEIsRUFBVzlnQyxLQUFLMi9CLEdBQVc0L0IsS0FDM0IsTUFDSixJQUFLLGNBQ0R6K0IsRUFBVzlnQyxLQUFLMi9CLEdBQVc2L0IsYUFDM0IsTUFDSixJQUFLLE9BQ0QxK0IsRUFBVzlnQyxLQUFLMi9CLEdBQVc4L0IsTUFDM0IsTUFDSixJQUFLLFlBQ0QzK0IsRUFBVzlnQyxLQUFLMi9CLEdBQVcrL0IsVUFDM0IsTUFDSixJQUFLLGVBQ0Q1K0IsRUFBVzlnQyxLQUFLMi9CLEdBQVdnZ0MsYUFDM0IsTUFDSixJQUFLLE9BQ0Q3K0IsRUFBVzlnQyxLQUFLMi9CLEdBQVdpZ0MsTUFDM0IsTUFDSixJQUFLLFVBQ0Q5K0IsRUFBVzlnQyxLQUFLMi9CLEdBQVdrZ0MsU0FDM0IsTUFDSixJQUFLLFFBQ0QvK0IsRUFBVzlnQyxLQUFLMi9CLEdBQVc0QixPQUMzQixNQUNKLElBQUssV0FDRFQsRUFBVzlnQyxLQUFLMi9CLEdBQVdtZ0MsVUFDM0IsTUFDSixJQUFLLE9BR0wsSUFBSyxXQUNEaC9CLEVBQVc5Z0MsS0FBSzIvQixHQUFXbTZCLE1BQzNCLE1BQ0osSUFBSyxZQUNEaDVCLEVBQVc5Z0MsS0FBSzIvQixHQUFXbzZCLFVBQzNCLE1BQ0osSUFBSyxlQUNEajVCLEVBQVc5Z0MsS0FBSzIvQixHQUFXcTZCLGFBS3ZDLEdBQ0lsNUIsRUFBV2tGLFNBQVNyRyxHQUFXNEIsUUFDL0JULEVBQVcvaEMsUUFBUTFFLEdBQU1BLElBQU1zbEMsR0FBVzRCLFFBQU8xckMsT0FBUyxFQUkxRCxNQURJLDREQU1SLElBQUlrcUUsRUFBdUMsR0FDdkNDLEVBQTJCOUksR0FDM0IsWUFDQVUsRUFBSzUyQixVQUNMbytCLEVBQ0EsR0FDQSxNQUNBLEdBRUosR0FBd0MsaUJBQTdCWSxFQUNQLE9BQU9BLEVBRVhELEVBQXdCQyxFQUF5QngvRCxLQUFLNGhDLEdBQ3RDLFVBQVJBLEdBQTJCLFFBQVJBLEVBQ1osSUFFSkEsSUFLWCxJQUFJNjlCLEVBQWNySixHQUNkLFdBQ0FnQixFQUFLeHhCLFNBQ0xnNUIsR0FDQyxHQUNELEdBRUosR0FBMkIsaUJBQWhCYSxFQUNQLE9BQU9BLEVBRVgsSUFBSTc1QixFQUFXNjVCLEVBQVl6L0QsS0FBS3pLLEdBQ3hCQSxFQUFJLEdBQUtBLEdBQUtxcEUsR0FDTixFQUVMcnBFLElBS1Bvd0MsRUFBd0IsR0FDNUIsSUFBSyxJQUFJL0MsRUFBTSxFQUFHQSxFQUFNckMsRUFBYWxyQyxPQUFRdXRDLElBQU8sQ0FDaEQsSUFBSVQsRUFBUSxJQUFJOUIsR0FDWnNGLEVBQVF0d0MsT0FDUmlyQyxFQUFXc0MsR0FDWHJDLEVBQWFxQyxJQUVqQlQsRUFBTVIsYUFBYTQ5QixFQUFzQjM4QixJQUNyQ2dELEVBQVNKLFNBQVM1QyxLQUFNVCxFQUFNdEIsZ0JBQWlCLEdBQ25EOEUsRUFBUW5tQyxLQUFLMmlDLEVBQ2hCLENBSUQsSUFBSThDLEVBQWEsSUFBSVMsR0FBV0MsR0FDNUIrNUIsRUFBbUI1SCxHQUF3Qjd5QixHQUMzQzA2QixFQUF3QixDQUFDLGFBQWMsZUFBZ0IsYUFFdkRDLEVBQWUsR0FDZkMsRUFBYyxHQUNkQyxFQUFjLEdBQ2RDLEVBQWtCLEdBQ2xCQyxFQUFnQixHQUNoQkMsRUFBa0IsR0FDbEJDLEVBQWlCLEdBQ3JCLElBQUssSUFBSWhxRSxLQUFPeW9FLEVBQ1IsZUFBZTMvRCxLQUFLOUksS0FDcEIwcEUsRUFBYXBnRSxLQUFLdEosR0FDbEJ5cEUsRUFBc0JuZ0UsS0FBS3RKLElBRTNCLGNBQWM4SSxLQUFLOUksS0FDbkIycEUsRUFBWXJnRSxLQUFLdEosR0FDakJ5cEUsRUFBc0JuZ0UsS0FBS3RKLElBRTNCLGNBQWM4SSxLQUFLOUksS0FDbkI0cEUsRUFBWXRnRSxLQUFLdEosR0FDakJ5cEUsRUFBc0JuZ0UsS0FBS3RKLElBRTNCLGtCQUFrQjhJLEtBQUs5SSxLQUN2QjZwRSxFQUFnQnZnRSxLQUFLdEosR0FDckJ5cEUsRUFBc0JuZ0UsS0FBS3RKLElBRTNCLGlCQUFpQjhJLEtBQUs5SSxLQUN0QmdxRSxFQUFlMWdFLEtBQUt0SixHQUNwQnlwRSxFQUFzQm5nRSxLQUFLdEosSUFFM0IsZ0JBQWdCOEksS0FBSzlJLEtBQ3JCOHBFLEVBQWN4Z0UsS0FBS3RKLEdBQ25CeXBFLEVBQXNCbmdFLEtBQUt0SixJQUUzQixrQkFBa0I4SSxLQUFLOUksS0FDdkIrcEUsRUFBZ0J6Z0UsS0FBS3RKLEdBQ3JCeXBFLEVBQXNCbmdFLEtBQUt0SixJQUluQyxJQUFJaXFFLEVBQXdCLEdBQzVCLElBQUssSUFBSWpxRSxLQUFPeW9FLEVBQ1osR0FBSSxrQkFBa0IzL0QsS0FBSzlJLEdBQU0sQ0FFN0IsSUFBSWtxRSxHQUFtQixFQUNuQkMsRUFBcUJucUUsRUFBSWt6QixRQUFRLFVBQVcsSUFPaEQsR0FMSWczQyxFQUR1QixLQUF2QkMsRUFDa0IsRUFFQXAvQixXQUFXby9CLEdBSTdCMTZCLEVBQVFpVixNQUFNcitCLEdBQ0hBLEVBQUVrbEIsVUFBWTIrQixJQUl6QixPQURBeHlCLEVBQWUsa0NBQW9DMTNDLEVBQU0sSUFDbEQwM0MsRUFHWHV5QixFQUFzQjNnRSxLQUFLdEosR0FDM0J5cEUsRUFBc0JuZ0UsS0FBS3RKLEVBQzlCLENBR0wsSUFBSyxJQUFJQSxLQUFPeW9FLEVBQ1osSUFDS2UsRUFBaUJsNkIsU0FBU3R2QyxLQUMxQnlwRSxFQUFzQm42QixTQUFTdHZDLEdBR2hDLE9BREEwM0MsRUFBZSxJQUFNMTNDLEVBQU0sNEJBQ3BCMDNDLEVBWWYsR0FBd0IsSUFQcEJneUIsRUFBYXZxRSxPQUNid3FFLEVBQVl4cUUsT0FDWnlxRSxFQUFZenFFLE9BQ1owcUUsRUFBZ0IxcUUsT0FDaEI2cUUsRUFBZTdxRSxPQUNmMnFFLEVBQWMzcUUsT0FDZDRxRSxFQUFnQjVxRSxPQUVoQixNQUFPLHdGQUlYNHZDLEVBQVdZLE9BQVMyd0IsR0FDaEJZLGFBQUksRUFBSkEsRUFBTXZ4QixPQUNOa1UsRUFBT3FoQixTQUFTdjFCLFFBRWEsS0FBN0JaLEVBQVdZLE9BQU8vbEMsU0FDbEJtbEMsRUFBV1ksT0FBU2tVLEVBQU9xaEIsU0FBU3YxQixRQUl4QyxJQUFJeTZCLEVBQWlCdm1CLEVBQU84Z0IsSUFBSXNDLE1BQU1DLHNCQUNsQ0MsZ0JBQWNwNEIsRUFBV1ksU0FFN0IsS0FBS3k2QixHQUFvQkEsYUFBMEIzRCxFQUFPQSxTQUV0RCxNQURtQixXQUFhMTNCLEVBQVdZLE9BQVMsa0JBS3hELEdBQXlCLGlCQUFkdXhCLEVBQUt0eEIsS0FBbUIsQ0FDL0IsSUFBSXk2QixFQUFXdEosR0FBZSxPQUFRRyxFQUFLdHhCLE1BQzNDLEdBQXdCLGlCQUFieTZCLEVBQ1AsT0FBT0EsRUFFWHQ3QixFQUFXYSxLQUFPeTZCLENBQ3JCLENBVUQsR0FOdUMsa0JBQTVCbkosRUFBS3J4QixxQkFDWmQsRUFBV2MsbUJBQXFCcXhCLEVBQUtyeEIsb0JBS0csaUJBQWpDcXhCLEVBQUtweEIsd0JBQXNDLENBQ2xELElBQUl1NkIsRUFBV3RKLEdBQ1gsMEJBQ0FHLEVBQUtweEIseUJBRVQsR0FBd0IsaUJBQWJ1NkIsRUFDUCxPQUFPQSxFQUVYdDdCLEVBQVdlLHdCQUEwQnU2QixDQUN4QyxDQUlEdDdCLEVBQVdnQix3QkFBMEJ1d0IsR0FDakNZLGFBQUEsRUFBQUEsRUFBTW54Qix3QkFDTmhCLEVBQVdnQix5QkFLZixNQUFNckIsRUFBYXd5QixFQUFLeHlCLFdBNEJ4QixHQXpCK0IsaUJBQXBCd3lCLEVBQUt4eUIsV0FDWSxLQUFwQnd5QixFQUFLeHlCLFdBQ0xLLEVBQVdMLFdBQWFtVixFQUFPcWhCLFNBQVN4MkIsV0FFeENLLEVBQVdMLFdBQWFBLEVBRzVCSyxFQUFXTCxXQUFhbVYsRUFBT3FoQixTQUFTeDJCLFdBSzVDSyxFQUFXaUIsaUJBQW1Cc3dCLEdBQzFCWSxhQUFBLEVBQUFBLEVBQU1seEIsaUJBQ05qQixFQUFXaUIsa0JBSWZqQixFQUFXa0IsaUJBQW1CcXdCLEdBQzFCWSxhQUFBLEVBQUFBLEVBQU1qeEIsaUJBQ05sQixFQUFXa0Isa0JBS2UsaUJBQW5CaXhCLEVBQUs3MEIsVUFBd0IsQ0FDcEMsR0FBSSx5Q0FBeUN2akMsS0FBS280RCxFQUFLNzBCLFdBR25ELE1BREksbUdBR1IsSUFBSWkrQixFQUFldkksR0FDZmIsRUFBSzcwQixVQUNMMEMsRUFBV2lCLGlCQUNYakIsRUFBV2tCLGtCQUtYNUQsRUFBWSxLQUNaaytCLEdBQW1CLEVBaUJ2QixHQWhCQWwrQixFQUFZd3BCLEdBQ1J5VSxFQUNBdjdCLEVBQVdMLFlBSVhyQyxFQUNBaytCLEdBQW1CLEdBRW5CbCtCLEVBQVl1bkIsR0FBaUIwVyxFQUFjdjdCLEVBQVdMLFlBQ2xEckMsRUFBVThOLFlBQ1Zvd0IsR0FBbUIsS0FLdEJBLEdBQWtDLE9BQWRsK0IsRUFJckIsTUFGSSw0RUFDQTBDLEVBQVdMLFdBR25CSyxFQUFXMUMsVUFBWUEsQ0FDMUIsQ0FHRCxHQUE0QixpQkFBakI2MEIsRUFBSzUwQixRQUFzQixDQUNsQyxHQUFJLHlDQUF5Q3hqQyxLQUFLbzRELEVBQUs1MEIsU0FHbkQsTUFESSxpR0FHUixJQUFJaytCLEVBQWF6SSxHQUNiYixFQUFLNTBCLFFBQ0x5QyxFQUFXaUIsaUJBQ1hqQixFQUFXa0Isa0JBR1gzRCxFQUFVLEtBQ1ZtK0IsR0FBaUIsRUFlckIsR0FkQW4rQixFQUFVdXBCLEdBQ04yVSxFQUNBejdCLEVBQVdMLFlBRVhwQyxFQUNBbStCLEdBQWlCLEdBRWpCbitCLEVBQVVzbkIsR0FBaUI0VyxFQUFZejdCLEVBQVdMLFlBQzlDcEMsRUFBUTZOLFlBQ1Jzd0IsR0FBaUIsS0FLcEJBLEdBQThCLE9BQVpuK0IsRUFJbkIsTUFGSSx3RUFDQXlDLEVBQVdMLFdBR25CSyxFQUFXekMsUUFBVUEsQ0FDeEIsQ0FDRCxHQUM2QixPQUF6QnlDLEVBQVcxQyxXQUNYMEMsRUFBVzFDLFVBQVU4TixXQUNFLE9BQXZCcEwsRUFBV3pDLFNBQ1h5QyxFQUFXekMsUUFBUTZOLFdBR2ZwTCxFQUFXekMsUUFBVXlDLEVBQVcxQyxVQUdoQyxNQURJLHFEQVFaMEMsRUFBV1csU0FBV0EsRUFJdEIsSUFBSWc3QixFQUFpQmxLLEdBQ2pCLGNBQ0FVLEVBQUtqeUIsWUFDTHk1QixFQUNBLFdBQ0EsTUFDQSxHQUVKLEdBQThCLGlCQUFuQmdDLEVBQ1AsT0FBT0EsRUFHWCxJQUFJQyxFQUFjLEVBQ2xCLElBQUssSUFBSWorQixFQUFNLEVBQUdBLEVBQU1nK0IsRUFBZXZyRSxPQUFRdXRDLElBQ3ZDcUMsRUFBV1csU0FBU0osU0FBUzVDLElBQ0wsYUFBeEJnK0IsRUFBZWgrQixLQUNmZytCLEVBQWVoK0IsR0FBTyxXQUFhaStCLEVBQVk5b0QsV0FDL0M4b0QsS0FJUixHQUFJLElBQUk1bUIsSUFBSTJtQixHQUFnQmoxRCxPQUFTaTFELEVBQWV2ckUsT0FJaEQsTUFEbUIsK0NBRm5CNHZDLEVBQVdFLFlBQWN5N0IsRUFRN0IsSUFBSUUsRUFBZ0IxSyxHQUNoQixhQUNBZ0IsRUFBS2h4QixXQUNMdzRCLEVBQ0EsR0FDQSxHQUVKLEdBQTZCLGlCQUFsQmtDLEVBQ1AsT0FBT0EsRUFFWDc3QixFQUFXbUIsV0FBYTA2QixFQUl4QixJQUFJQyxFQUF5Qm5MLEdBQ3pCLHNCQUNBd0IsRUFBSy93QixvQkFDTHU0QixHQUNBLEdBQ0EsR0FFSixHQUFzQyxpQkFBM0JtQyxFQUNQLE9BQU9BLEVBRVg5N0IsRUFBV29CLG9CQUFzQjA2QixFQUlqQyxJQUFJQyxFQUFxQnBMLEdBQ3JCLGtCQUNBd0IsRUFBSzl3QixnQkFDTHM0QixHQUNBLEdBQ0EsR0FFSixHQUFrQyxpQkFBdkJvQyxFQUNQLE9BQU9BLEVBRVgvN0IsRUFBV3FCLGdCQUFrQjA2QixFQUk3QixJQUFJQyxFQUFXckwsR0FDWCxRQUNBd0IsRUFBSzd3QixNQUNMcTRCLEdBQ0EsR0FDQSxHQUVKLEdBQXdCLGlCQUFicUMsRUFDUCxPQUFPQSxFQUVYaDhCLEVBQVdzQixNQUFRMDZCLEVBSW5CLElBQUlDLEVBQWE5SyxHQUNiLFVBQ0FnQixFQUFLbnpCLFFBQ0wyNkIsRUFDQSxNQUNBLEdBRUosR0FBMEIsaUJBQWZzQyxFQUNQLE9BQU9BLEVBRVhqOEIsRUFBV2hCLFFBQVVpOUIsRUFJckIsSUFBSUMsRUFBZ0IvSyxHQUNoQixhQUNBZ0IsRUFBSzV3QixXQUNMbzRCLEVBQ0EsR0FDQSxHQUVKLEdBQTZCLGlCQUFsQnVDLEVBQ1AsT0FBT0EsRUFFWGw4QixFQUFXdUIsV0FBYTI2QixFQUl4QixJQUFJQyxFQUE4QmhMLEdBQzlCLDJCQUNBZ0IsRUFBSzN3Qix5QkFDTG00QixFQUNBLE1BQ0EsR0FFSixHQUEyQyxpQkFBaEN3QyxFQUNQLE9BQU9BLEVBTVgsR0FKQW44QixFQUFXd0IseUJBQTJCMjZCLE9BSUwsSUFBdEJoSyxFQUFLMXdCLGFBQThCLENBQzFDLElBQUkrSyxFQUFPcW1CLEdBQXdCVixFQUFLMXdCLGNBRXhDLElBQUssSUFBSXh3QyxLQUFPdTdDLEVBQU0sQ0FDbEIsSUFBSTF6QyxFQUFPN0gsRUFBSTRKLE9BQ2ZtbEMsRUFBV3lCLGFBQWEzb0MsR0FBUXE1RCxFQUFLMXdCLGFBQWEzb0MsRUFDckQsQ0FDSixDQWNELEdBVitCLGlCQUFwQnE1RCxFQUFLbndCLGFBQ1poQyxFQUFXZ0MsV0FBYW13QixFQUFLbndCLFlBSUMsa0JBQXZCbXdCLEVBQUtsd0IsZ0JBQ1pqQyxFQUFXaUMsY0FBZ0Jrd0IsRUFBS2x3QixlQUlKLGlCQUFyQmt3QixFQUFLdndCLFlBQTBCLENBRXRDLElBQUl3NkIsRUFBYSxvQkFDYkMsRUFBUWxLLEVBQUt2d0IsWUFBWTc4QixNQUFNcTNELEdBQ25DQyxFQUFNMTlCLFFBQ04wOUIsRUFBUUEsRUFBTXRoRSxLQUFLdEssR0FBWXVoQixTQUFTdmhCLEVBQUUsTUFDeEIsR0FBZDRyRSxFQUFNanNFLFNBQ040dkMsRUFBVzRCLFlBQWMsSUFBSUMsR0FBWXc2QixFQUFNLEdBQUlBLEVBQU0sSUFDekRyOEIsRUFBVzBCLGFBQWUxQixFQUFXNEIsWUFBWXFHLGdCQUFnQmpJLEVBQVcwQixjQUVuRixDQUdELElBQUk0NkIsRUFBWW5MLEdBQXdCLFNBQVVnQixFQUFLcndCLE9BQVEsRUFBRyxJQUFJLEdBQ3RFLEdBQXlCLGlCQUFkdzZCLEVBQ1AsT0FBT0EsRUFFWCxHQUFJQSxFQUFVbHNFLE9BQVMsRUFDbkIsTUFBTyxxRkFFWDR2QyxFQUFXOEIsT0FBUyxJQUFJQyxHQUNwQnU2QixFQUFVLEdBQ1ZBLEVBQVUsR0FDVkEsRUFBVSxHQUNWQSxFQUFVLElBS2QsSUFBSyxJQUFJQyxLQUFjckIsRUFBdUIsQ0FDMUMsSUFBSTM0QixFQUFnQixJQUFJRSxHQUNwQis1QixFQUFvQnJLLEVBQUtvSyxHQUV6QkUsRUFBMEI1SixHQUF3QnR3QixHQUNsRG0zQixFQUFrQjdHLEdBQXdCMkosR0FHOUMsSUFBSyxJQUFJdnJFLEtBQU95b0UsRUFDWixJQUFLK0MsRUFBd0JsOEIsU0FBU3R2QyxHQUVsQyxPQURBMDNDLEVBQWUsSUFBTTEzQyxFQUFNLDRCQUNwQjAzQyxFQUtmLElBQUl3eUIsR0FBbUIsRUFDbkJDLEVBQXFCbUIsRUFBV3A0QyxRQUFRLFVBQVcsSUFFbkRnM0MsRUFEdUIsS0FBdkJDLEVBQ2tCLEVBRUFwL0IsV0FBV28vQixHQUVqQzc0QixFQUFjbm1CLEdBQUsrK0MsRUFHbkI1NEIsRUFBY3BvQyxLQUFPbzNELEdBQ2pCaUwsYUFBQSxFQUFBQSxFQUFtQnJpRSxLQUNuQm9vQyxFQUFjcG9DLE1BSWxCLElBQUl1aUUsRUFBVzFLLEdBQWUsUUFBU3dLLGFBQUEsRUFBQUEsRUFBbUI5NUIsT0FDMUQsR0FBd0IsaUJBQWJnNkIsRUFDUCxPQUFPQSxFQUVYbjZCLEVBQWNHLE1BQVFnNkIsRUFFdEIsSUFBSUMsRUFBV3A2QixFQUFjRyxNQUFNdHlDLE9BRy9Cd3NFLEVBQVc1SyxHQUFlLFFBQVN3SyxhQUFBLEVBQUFBLEVBQW1CNzVCLE9BQzFELEdBQXdCLGlCQUFiaTZCLEVBQ1AsT0FBT0EsRUFJWCxHQUZBcjZCLEVBQWNJLE1BQVFpNkIsRUFFbEJyNkIsRUFBY0ksTUFBTXZ5QyxTQUFXdXNFLEVBRy9CLE1BREksb0RBSVIzOEIsRUFBV3VDLGNBQWNob0MsS0FBS2dvQyxFQUNqQyxDQUlELElBQUssSUFBSXM2QixLQUFXbEMsRUFBYyxDQUM5QixJQUFJL2hFLEVBQU8sSUFBSXNyQyxHQUNYNDRCLEVBQVczSyxFQUFLMEssR0FFaEJFLEVBQWlCbEssR0FBd0JqNkQsR0FDekM4Z0UsRUFBa0I3RyxHQUF3QmlLLEdBRzlDLElBQUssSUFBSTdyRSxLQUFPeW9FLEVBQ1osSUFBS3FELEVBQWV4OEIsU0FBU3R2QyxHQUV6QixPQURBMDNDLEVBQWUsSUFBTTEzQyxFQUFNLDRCQUNwQjAzQyxFQUlmLElBQUlxMEIsRUFBMEI5SyxHQUFxQjRLLEVBQVVsa0UsR0FDN0QsR0FBdUMsaUJBQTVCb2tFLEVBQ1AsT0FBT0EsRUFJWCxJQUFJQyxFQUFleEwsR0FDZixZQUNBcUwsYUFBQSxFQUFBQSxFQUFVMzRCLFVBQ1Z3MUIsRUFDQSxHQUNBcEosSUFDQSxHQUVKLEdBQTRCLGlCQUFqQjBNLEVBQ1AsT0FBT0EsRUFFWHJrRSxFQUFLdXJDLFVBQVk4NEIsRUFJakIsSUFBSUMsRUFBZS9MLEdBQ2YsWUFDQTJMLGFBQVEsRUFBUkEsRUFBVTE0QixVQUNWdTFCLEVBQ0EsS0FDQSxHQUVKLEdBQTRCLGlCQUFqQnVELEVBQ1AsT0FBT0EsRUFFWHRrRSxFQUFLd3JDLFVBQVk4NEIsRUFJakIsSUFBSUMsRUFBY3hNLEdBQ2QsV0FDQW1NLGFBQVEsRUFBUkEsRUFBVXo0QixTQUNWczFCLEdBQ0EsR0FDQSxHQUVKLEdBQTJCLGlCQUFoQndELEVBQ1AsT0FBT0EsRUFFWHZrRSxFQUFLeXJDLFNBQVc4NEIsRUFJaEIsSUFBSUMsRUFBZXpNLEdBQ2YsWUFDQW1NLGFBQVEsRUFBUkEsRUFBVXg0QixVQUNWcTFCLEdBQ0EsR0FDQSxHQUVKLEdBQTRCLGlCQUFqQnlELEVBQ1AsT0FBT0EsRUFFWHhrRSxFQUFLMHJDLFVBQVk4NEIsRUFJakIsSUFBSUMsRUFBZ0I1TCxHQUNoQixhQUNBcUwsYUFBQSxFQUFBQSxFQUFVdjRCLFdBQ1ZvMUIsRUFDQSxVQUNBcEosSUFDQSxHQUVKLEdBQTZCLGlCQUFsQjhNLEVBQ1AsT0FBT0EsRUFFWHprRSxFQUFLMnJDLFdBQWE4NEIsRUFJbEIsSUFBSUMsRUFBc0I3TCxHQUN0QixtQkFDQXFMLGFBQUEsRUFBQUEsRUFBVXQ0QixpQkFDVm0xQixFQUNBLFVBQ0FwSixJQUNBLEdBRUosR0FBbUMsaUJBQXhCK00sRUFDUCxPQUFPQSxFQUVYMWtFLEVBQUs0ckMsaUJBQW1CODRCLEVBSXhCLElBQUlDLEVBQXNCcE0sR0FDdEIsbUJBQ0EyTCxhQUFRLEVBQVJBLEVBQVVyNEIsaUJBQ1ZrMUIsRUFDQSxHQUNBLEdBRUosR0FBbUMsaUJBQXhCNEQsRUFDUCxPQUFPQSxFQUVYM2tFLEVBQUs2ckMsaUJBQW1CODRCLEVBSXhCLElBQUlDLEVBQWVyTSxHQUNmLFlBQ0EyTCxhQUFRLEVBQVJBLEVBQVVwNEIsVUFDVmkxQixFQUNBLEdBQ0EsR0FFSixHQUE0QixpQkFBakI2RCxFQUNQLE9BQU9BLEVBRVg1a0UsRUFBSzhyQyxVQUFZODRCLEVBSWpCLElBQUlDLEVBQWE5TSxHQUNiLFVBQ0FtTSxhQUFRLEVBQVJBLEVBQVVuNEIsUUFDVmcxQixHQUNBLEdBQ0EsR0FFSixHQUEwQixpQkFBZjhELEVBQ1AsT0FBT0EsRUFFWDdrRSxFQUFLK3JDLFFBQVU4NEIsRUFJZixJQUFJQyxFQUFtQmpNLEdBQ25CLGdCQUNBcUwsYUFBQSxFQUFBQSxFQUFVbDRCLGNBQ1YrMEIsRUFDQSxPQUNBckosSUFDQSxHQUVKLEdBQWdDLGlCQUFyQm9OLEVBQ1AsT0FBT0EsRUFFWDlrRSxFQUFLZ3NDLGNBQWdCODRCLEVBR3JCMTlCLEVBQVdwbkMsS0FBSzJCLEtBQUszQixFQUN4QixDQUlELElBQUssSUFBSStrRSxLQUFVL0MsRUFBYSxDQUM1QixJQUFJMTRCLEVBQU0sSUFBSTRDLEdBQ1Y4NEIsRUFBVXpMLEVBQUt3TCxHQUVmRSxFQUFnQmhMLEdBQXdCM3dCLEdBQ3hDdzNCLEVBQWtCN0csR0FBd0IrSyxHQUc5QyxJQUFLLElBQUkzc0UsS0FBT3lvRSxFQUNaLElBQUttRSxFQUFjdDlCLFNBQVN0dkMsR0FFeEIsT0FEQTAzQyxFQUFlLElBQU0xM0MsRUFBTSw0QkFDcEIwM0MsRUFJZixJQUFJcTBCLEVBQTBCOUssR0FBcUIwTCxFQUFTMTdCLEdBQzVELEdBQXVDLGlCQUE1Qjg2QixFQUNQLE9BQU9BLEVBSVgsSUFBSWMsRUFBY3JNLEdBQ2QsV0FDQW1NLGFBQUEsRUFBQUEsRUFBUzc0QixTQUNUNDBCLEVBQ0EsR0FDQXBKLElBQ0EsR0FFSixHQUEyQixpQkFBaEJ1TixFQUNQLE9BQU9BLEVBRVg1N0IsRUFBSTZDLFNBQVcrNEIsRUFJZixJQUFJSixFQUFtQmpNLEdBQ25CLGdCQUNBbU0sYUFBQSxFQUFBQSxFQUFTaDVCLGNBQ1QrMEIsRUFDQSxPQUNBckosSUFDQSxHQUVKLEdBQWdDLGlCQUFyQm9OLEVBQ1AsT0FBT0EsRUFFWHg3QixFQUFJMEMsY0FBZ0I4NEIsRUFHcEIxOUIsRUFBV2tDLElBQUkzbkMsS0FBSzJuQyxFQUN2QixDQUlELElBQUssSUFBSTY3QixLQUFVbEQsRUFBYSxDQUM1QixJQUFJMTRCLEVBQU0sSUFBSThDLEdBQ1YrNEIsRUFBVTdMLEVBQUs0TCxHQUVmRSxFQUFnQnBMLEdBQXdCMXdCLEdBQ3hDdTNCLEVBQWtCN0csR0FBd0JtTCxHQUc5QyxJQUFLLElBQUkvc0UsS0FBT3lvRSxFQUNaLElBQUt1RSxFQUFjMTlCLFNBQVN0dkMsR0FFeEIsT0FEQTAzQyxFQUFlLElBQU0xM0MsRUFBTSw0QkFDcEIwM0MsRUFLZnhHLEVBQUlVLE1BQVEwdUIsR0FBbUJ5TSxhQUFBLEVBQUFBLEVBQVNuN0IsTUFBT1YsRUFBSVUsT0FJbkQsSUFBSXE3QixFQUFVbE0sR0FBZSxPQUFRZ00sYUFBQSxFQUFBQSxFQUFTN2xFLE1BQzlDLEdBQXVCLGlCQUFaK2xFLEVBQ1AsT0FBT0EsRUFFWC83QixFQUFJaHFDLEtBQU8rbEUsRUFFWCxJQUFJQyxFQUFVaDhCLEVBQUlocUMsS0FBSy9ILE9BR25CZ3VFLEVBQWUzTSxHQUNmLFlBQ0F1TSxhQUFBLEVBQUFBLEVBQVM5NEIsVUFDVGk1QixFQUNBLEtBQ0E1TixJQUNBLEdBRUosR0FBNEIsaUJBQWpCNk4sRUFDUCxPQUFPQSxFQUVYajhCLEVBQUkrQyxVQUFZazVCLEVBSWhCLElBQUlDLEVBQWM1TSxHQUNkLFdBQ0F1TSxhQUFBLEVBQUFBLEVBQVM3NEIsU0FDVGc1QixFQUNBLEdBQ0EsTUFDQSxHQUVKLEdBQTJCLGlCQUFoQkUsRUFDUCxPQUFPQSxFQUVYbDhCLEVBQUlnRCxTQUFXazVCLEVBSWYsSUFBSXZoQixFQUFXMlUsR0FDWCxRQUNBdU0sYUFBQSxFQUFBQSxFQUFTNTRCLE1BQ1QrNEIsRUFDQSxHQUNBLE1BQ0EsR0FFSixHQUF3QixpQkFBYnJoQixFQUNQLE9BQU9BLEVBRVgzYSxFQUFJaUQsTUFBUTBYLEVBSThCLGlCQUEvQmtoQixhQUFPLEVBQVBBLEVBQVMzNEIscUJBQ2hCbEQsRUFBSWtELGtCQUFvQjI0QixFQUFRMzRCLG1CQUtwQyxJQUFJOFgsRUFBY3NVLEdBQ2QsV0FDQXVNLGFBQUEsRUFBQUEsRUFBUzE0QixTQUNUNjRCLEVBQ0EsR0FDQSxNQUNBLEdBRUosR0FBMkIsaUJBQWhCaGhCLEVBQ1AsT0FBT0EsRUFFWGhiLEVBQUltRCxTQUFXNlgsRUFJbUMsa0JBQXZDNmdCLGFBQU8sRUFBUEEsRUFBU3o0Qiw2QkFDaEJwRCxFQUFJb0QsMEJBQTRCeTRCLEVBQVF6NEIsMkJBS0gsaUJBQTlCeTRCLGFBQU8sRUFBUEEsRUFBU3g0QixvQkFDaEJyRCxFQUFJcUQsaUJBQW1CdzRCLEVBQVF4NEIsa0JBS0Esa0JBQXhCdzRCLGFBQU8sRUFBUEEsRUFBU3I2QixjQUNoQnhCLEVBQUl3QixXQUFhcTZCLEVBQVFyNkIsWUFJN0J4QixFQUFJeUIsZUFBaUIydEIsR0FDakJ5TSxhQUFPLEVBQVBBLEVBQVNwNkIsZUFDVCxTQUlKLElBQUkwNkIsRUFBMkIsYUFFM0JBLEVBRHVCLFFBQXZCbjhCLEVBQUl5QixnQkFBbUQsV0FBdkJ6QixFQUFJeUIsZUFDVCxhQUVKLFNBQXZCekIsRUFBSXlCLGdCQUNtQixVQUF2QnpCLEVBQUl5QixlQUV1QixXQUVBLGFBRS9CekIsRUFBSTBCLGtCQUFvQjB0QixHQUNwQnlNLGFBQU8sRUFBUEEsRUFBU242QixrQkFDVHk2QixHQU1KbjhCLEVBQUkyQixjQUFnQnl0QixHQUNoQnlNLGFBQUEsRUFBQUEsRUFBU2w2QixjQUNUM0IsRUFBSTJCLGVBSVIzQixFQUFJNEIsa0JBQW9Cd3RCLEdBQ3BCeU0sYUFBQSxFQUFBQSxFQUFTajZCLGtCQUNUNUIsRUFBSTRCLG1CQUdSL0QsRUFBV21DLElBQUk1bkMsS0FBSzRuQyxFQUN2QixDQUlELElBQUssSUFBSW84QixLQUFjekQsRUFBaUIsQ0FDcEMsSUFBSTE0QixFQUFVLElBQUlzRCxHQUNkODRCLEVBQWNyTSxFQUFLb00sR0FFbkJFLEVBQW9CNUwsR0FBd0J6d0IsR0FDNUNzM0IsRUFBa0I3RyxHQUF3QjJMLEdBRzlDLElBQUssSUFBSXZ0RSxLQUFPeW9FLEVBQ1osSUFBSytFLEVBQWtCbCtCLFNBQVN0dkMsR0FFNUIsT0FEQTAzQyxFQUFlLElBQU0xM0MsRUFBTSw0QkFDcEIwM0MsRUFLZnZHLEVBQVF1RCxTQUFXNHJCLEdBQ2ZpTixhQUFBLEVBQUFBLEVBQWE3NEIsU0FDYnZELEVBQVF1RCxVQUladkQsRUFBUTVpQyxNQUFRK3hELEdBQW1CaU4sYUFBQSxFQUFBQSxFQUFhaC9ELE1BQU80aUMsRUFBUTVpQyxPQUUvRHdnQyxFQUFXb0MsUUFBUTduQyxLQUFLNm5DLEVBQzNCLENBR0QsSUFBSyxJQUFJczhCLEtBQVkzRCxFQUFlLENBQ2hDLElBQUlwdUMsRUFBUSxJQUFJa1osR0FDWjg0QixFQUFZeE0sRUFBS3VNLEdBRWpCRSxFQUFrQi9MLEdBQXdCbG1DLEdBQzFDK3NDLEVBQWtCN0csR0FBd0I4TCxHQUc5QyxJQUFLLElBQUkxdEUsS0FBT3lvRSxFQUNaLElBQUtrRixFQUFnQnIrQixTQUFTdHZDLEdBRTFCLE9BREEwM0MsRUFBZSxJQUFNMTNDLEVBQU0sNEJBQ3BCMDNDLEVBS2ZoYyxFQUFNbVosS0FBT3lyQixHQUFtQm9OLGFBQUEsRUFBQUEsRUFBVzc0QixLQUFNblosRUFBTW1aLE1BSXZELElBQUkrNEIsRUFBYWpOLEdBQWUsVUFBVytNLGFBQUEsRUFBQUEsRUFBVzErQixTQUN0RCxHQUEwQixpQkFBZjQrQixFQUNQLE9BQU9BLEVBRVgsR0FBMEIsSUFBdEJBLEVBQVd6dUUsT0FFWCxJQUFLLElBQUlrbkIsS0FBS29wQixFQUNWbStCLEVBQVd0a0UsS0FBSytjLEVBQUVrbEIsU0FHMUI3UCxFQUFNc1QsUUFBVTQrQixFQUVoQixJQUFJak8sRUFBYWprQyxFQUFNc1QsUUFBUTd2QyxPQUcvQnU4QixFQUFNb1osWUFBY3dyQixHQUNoQm9OLGFBQUEsRUFBQUEsRUFBVzU0QixZQUNYcFosRUFBTW9aLGFBSzJCLGtCQUExQjQ0QixhQUFTLEVBQVRBLEVBQVdwNEIsY0FDbEI1WixFQUFNNFosV0FBYW80QixFQUFVcDRCLFlBS2pDLElBQUl1NEIsRUFBZWxOLEdBQWUsWUFBYStNLGFBQUEsRUFBQUEsRUFBVzM0QixXQUMxRCxHQUE0QixpQkFBakI4NEIsRUFDUCxPQUFPQSxFQUdYLEdBREFueUMsRUFBTXFaLFVBQVk4NEIsRUFDYSxJQUEzQm55QyxFQUFNcVosVUFBVTUxQyxPQUNoQixJQUFLLElBQUkydUUsRUFBYSxFQUFHQSxFQUFhbk8sRUFBWW1PLElBQzlDcHlDLEVBQU1xWixVQUFVenJDLEtBQUssR0FHN0IsR0FBSW95QixFQUFNcVosVUFBVTUxQyxTQUFXdThCLEVBQU1zVCxRQUFRN3ZDLE9BS3pDLE1BREksNERBTVIsSUFBSXNpRSxFQUFVZCxHQUFlLE9BQVErTSxhQUFBLEVBQUFBLEVBQVd2aEMsTUFDaEQsR0FBdUIsaUJBQVpzMUIsRUFDUCxPQUFPQSxFQUdYLEdBREEvbEMsRUFBTXlRLEtBQU9zMUIsRUFDYSxJQUF0Qi9sQyxFQUFNeVEsS0FBS2h0QyxPQUNYLElBQUssSUFBSTJ1RSxFQUFhLEVBQUdBLEVBQWFuTyxFQUFZbU8sSUFDOUNweUMsRUFBTXlRLEtBQUs3aUMsS0FBSyxNQUd4QixHQUFJb3lCLEVBQU15USxLQUFLaHRDLFNBQVd1OEIsRUFBTXNULFFBQVE3dkMsT0FHcEMsTUFESSx1REFNUixJQUFJdWlFLEVBQVVmLEdBQWUsT0FBUStNLGFBQUEsRUFBQUEsRUFBV3RoQyxNQUNoRCxHQUF1QixpQkFBWnMxQixFQUNQLE9BQU9BLEVBR1gsR0FEQWhtQyxFQUFNMFEsS0FBT3MxQixFQUNhLElBQXRCaG1DLEVBQU0wUSxLQUFLanRDLE9BQ1gsSUFBSyxJQUFJMnVFLEVBQWEsRUFBR0EsRUFBYW5PLEVBQVltTyxJQUM5Q3B5QyxFQUFNMFEsS0FBSzlpQyxLQUFLLE1BR3hCLEdBQUlveUIsRUFBTTBRLEtBQUtqdEMsU0FBV3U4QixFQUFNc1QsUUFBUTd2QyxPQUdwQyxNQURJLHVEQU1SdThCLEVBQU0vYSxNQUFRMi9DLEdBQW1Cb04sYUFBQSxFQUFBQSxFQUFXL3NELE1BQU8rYSxFQUFNL2EsT0FJakIsa0JBQTdCK3NELGFBQVMsRUFBVEEsRUFBVzE0QixpQkFDbEJ0WixFQUFNc1osY0FBZ0IwNEIsRUFBVTE0QixlQUtDLGtCQUExQjA0QixhQUFTLEVBQVRBLEVBQVduNEIsY0FDbEI3WixFQUFNNlosV0FBYW00QixFQUFVbjRCLFlBS08sa0JBQTdCbTRCLGFBQVMsRUFBVEEsRUFBV2w0QixpQkFDbEI5WixFQUFNOFosY0FBZ0JrNEIsRUFBVWw0QixlQUtRLGtCQUFqQ2s0QixhQUFTLEVBQVRBLEVBQVd4NEIscUJBQ2xCeFosRUFBTXdaLGtCQUFvQnc0QixFQUFVeDRCLG1CQUtHLGtCQUFoQ3c0QixhQUFTLEVBQVRBLEVBQVdqNEIsb0JBQ2xCL1osRUFBTStaLGlCQUFtQmk0QixFQUFVajRCLGtCQUt2Qy9aLEVBQU1nYSxZQUFjNHFCLEdBQ2hCb04sYUFBQSxFQUFBQSxFQUFXaDRCLFlBQ1hoYSxFQUFNZ2EsYUFLbUMsa0JBQWxDZzRCLGFBQVMsRUFBVEEsRUFBVy8zQixzQkFDbEJqYSxFQUFNaWEsbUJBQXFCKzNCLEVBQVUvM0Isb0JBS3pDamEsRUFBTXlaLGdCQUFrQm1yQixHQUNwQm9OLGFBQUEsRUFBQUEsRUFBV3Y0QixnQkFDWHpaLEVBQU15WixpQkFLVnpaLEVBQU0wWixpQkFBbUJrckIsR0FDckJvTixhQUFBLEVBQUFBLEVBQVd0NEIsaUJBQ1gxWixFQUFNMFosa0JBS1YxWixFQUFNMlosa0JBQW9CaXJCLEdBQ3RCb04sYUFBQSxFQUFBQSxFQUFXcjRCLGtCQUNYM1osRUFBTTJaLG1CQUtWM1osRUFBTWthLGVBQWlCMHFCLEdBQ25Cb04sYUFBQSxFQUFBQSxFQUFXOTNCLGVBQ1hsYSxFQUFNa2EsZ0JBS1ZsYSxFQUFNbWEsa0JBQW9CeXFCLEdBQ3RCb04sYUFBQSxFQUFBQSxFQUFXNzNCLGtCQUNYbmEsRUFBTW1hLG1CQUtWbmEsRUFBTXVaLFVBQVlxckIsR0FDZG9OLGFBQUEsRUFBQUEsRUFBV3o0QixVQUNYdlosRUFBTXVaLFdBSytCLGtCQUE5Qnk0QixhQUFTLEVBQVRBLEVBQVc1M0Isa0JBQ2xCcGEsRUFBTW9hLGVBQWlCNDNCLEVBQVU1M0IsZ0JBS3JDLElBQUlpNEIsRUFBZ0JoTixHQUFlLGFBQWMyTSxhQUFBLEVBQUFBLEVBQVczM0IsWUFDNUQsR0FBNkIsaUJBQWxCZzRCLEVBQ1AsT0FBT0EsRUFHWCxHQURBcnlDLEVBQU1xYSxXQUFhZzRCLEVBQ2EsSUFBNUJyeUMsRUFBTXFhLFdBQVc1MkMsT0FDakIsSUFBSyxJQUFJMnVFLEVBQWEsRUFBR0EsRUFBYW5PLEVBQVltTyxJQUM5Q3B5QyxFQUFNcWEsV0FBV3pzQyxLQUFLLE1BRzlCLEdBQUlveUIsRUFBTXFhLFdBQVc1MkMsU0FBV3U4QixFQUFNc1QsUUFBUTd2QyxPQUcxQyxNQURJLDZEQU02QyxrQkFBMUN1dUUsYUFBUyxFQUFUQSxFQUFXMTNCLDhCQUNsQnRhLEVBQU1zYSwyQkFDRjAzQixFQUFVMTNCLDRCQUlsQmpILEVBQVdyVCxNQUFNcHlCLEtBQUtveUIsRUFDekIsQ0FJRCxJQUFLLElBQUlzeUMsS0FBY2pFLEVBQWlCLENBQ3BDLElBQUkzNEIsRUFBVSxJQUFJZ0YsR0FDZDYzQixFQUFjL00sRUFBSzhNLEdBRW5CRSxFQUFvQnRNLEdBQXdCeHdCLEdBQzVDcTNCLEVBQWtCN0csR0FBd0JxTSxHQUc5QyxJQUFLLElBQUlqdUUsS0FBT3lvRSxFQUNaLElBQUt5RixFQUFrQjUrQixTQUFTdHZDLEdBRTVCLE9BREEwM0MsRUFBZSxJQUFNMTNDLEVBQU0sNEJBQ3BCMDNDLEVBSWYzSSxFQUFXcUMsUUFBUTluQyxLQUFLOG5DLEVBQzNCLENBSUQsSUFBSyxJQUFJKzhCLEtBQWFuRSxFQUFnQixDQUNsQyxJQUFJMzRCLEVBQVMsSUFBSWtGLEdBQ2I2M0IsRUFBYWxOLEVBQUtpTixHQUVsQkUsRUFBbUJ6TSxHQUF3QnZ3QixHQUMzQ28zQixFQUFrQjdHLEdBQXdCd00sR0FHOUMsSUFBSyxJQUFJcHVFLEtBQU95b0UsRUFDWixJQUFLNEYsRUFBaUIvK0IsU0FBU3R2QyxHQUUzQixPQURBMDNDLEVBQWUsSUFBTTEzQyxFQUFNLDRCQUNwQjAzQyxFQUtmckcsRUFBT08sTUFBUTB1QixHQUFtQjhOLGFBQUEsRUFBQUEsRUFBWXg4QixNQUFPUCxFQUFPTyxPQUk1RFAsRUFBT3JDLFFBQVVzeEIsR0FDYjhOLGFBQUEsRUFBQUEsRUFBWXAvQixRQUNacUMsRUFBT3JDLFNBS1hxQyxFQUFPZ0YsWUFBY2lxQixHQUNqQjhOLGFBQUEsRUFBQUEsRUFBWS8zQixZQUNaaEYsRUFBT2dGLGFBS1gsSUFBSWk0QixFQUFXM04sR0FBZSxRQUFTeU4sYUFBQSxFQUFBQSxFQUFZNXBFLE9BQ25ELEdBQXdCLGlCQUFiOHBFLEVBQ1AsT0FBT0EsRUFFWCxJQUFJOXBFLEVBQVE4cEUsRUFHWixHQUFxQixJQUFqQjlwRSxFQUFNckYsUUFDTixHQUFJcUYsRUFBTSxHQUFLLEVBRVgsT0FEQWt6QyxFQUFlLHNDQUNSQSxNQUVSLE1BQUlsekMsRUFBTXJGLE9BQVMsR0FnQnRCLE9BREF1NEMsRUFBZSw2QkFDUkEsRUFoQmtCLENBQ3pCLElBQUlxZixFQUFZdnlELEVBQU0sR0FDdEIsR0FBSXV5RCxFQUFZLEVBRVosT0FEQXJmLEVBQWUsc0NBQ1JBLEVBRVAsSUFBSyxJQUFJaEwsRUFBTSxFQUFHQSxFQUFNbG9DLEVBQU1yRixPQUFRdXRDLElBQ2xDLEdBQUlsb0MsRUFBTWtvQyxJQUFRcXFCLEVBR2QsT0FGQXJmLEVBQ0ksaUVBQ0dBLENBSXRCLENBR0EsQ0FDRHJHLEVBQU83c0MsTUFBUUEsRUFDZixJQUFJK3BFLEVBQVcvcEUsRUFBTXJGLE9BSWpCcXZFLEVBQWdCaE8sR0FDaEIsYUFDQTROLGFBQUEsRUFBQUEsRUFBWTEzQixXQUNaNjNCLEVBQ0EsR0FDQWpQLElBQ0EsR0FFSixHQUE2QixpQkFBbEJrUCxFQUNQLE9BQU9BLEVBRVhuOUIsRUFBT3FGLFdBQWE4M0IsRUFJcEJuOUIsRUFBT3p6QyxNQUFRMGlFLEdBQW1COE4sYUFBQSxFQUFBQSxFQUFZeHdFLE1BQU95ekMsRUFBT3p6QyxPQUk1RHl6QyxFQUFPbUYsVUFBWThwQixHQUNmOE4sYUFBQSxFQUFBQSxFQUFZNTNCLFVBQ1puRixFQUFPbUYsV0FLWG5GLEVBQU9vRixXQUFhNnBCLEdBQ2hCOE4sYUFBQSxFQUFBQSxFQUFZMzNCLFdBQ1pwRixFQUFPb0YsWUFLMkIsa0JBQTNCMjNCLGFBQVUsRUFBVkEsRUFBWXozQixjQUNuQnRGLEVBQU9zRixXQUFheTNCLEVBQVd6M0IsWUFLSSxpQkFBNUJ5M0IsYUFBVSxFQUFWQSxFQUFZeDNCLGVBQ25CdkYsRUFBT3VGLFlBQWN3M0IsRUFBV3gzQixhQUtwQ3ZGLEVBQU93RixZQUFjeXBCLEdBQ2pCOE4sYUFBQSxFQUFBQSxFQUFZdjNCLFlBQ1p4RixFQUFPd0YsYUFJWDlILEVBQVdzQyxPQUFPL25DLEtBQUsrbkMsRUFDMUIsQ0FHRCxPQUFPdEMsQ0FDWCxDR3BrRTRCMC9CLENBQXNCdEcsRUFBVTluRSxNQUNwRCxHQUE2QixpQkFBbEJrb0UsRUFDUCxPQUFPbG9FLEtBQUsybEUsbUJBQW1CdUMsRUFBZW5kLEVBQVE2YSxHQUUxRCxJQUFJbDNCLEVBQWF3NUIsRUFJYmpDLEVBQWlCLEdBQ3JCLFVBQ1VqbUUsS0FBS3FtRSxTQUFTSixFQUFPdjNCLEVBQzlCLENBQUMsTUFBT2h4QyxHQUNMLE9BQU9zQyxLQUFLMmxFLG1CQUFtQmpvRSxFQUFFK2dELFFBQVNzTSxFQUFRNmEsRUFDckQsQ0FDRCxHQUFxQixJQUFqQkssRUFBTW5uRSxPQUNOLE9BQU9rQixLQUFLMmxFLG1CQUNSLG9DQUNBNWEsRUFDQTZhLEdBV1IsSUFBSXpDLEVBQW1CLElBQUkzakUsSUFDdkI2dUUsRUFBYyxJQUFJcjNCLEdBQ3RCcTNCLEVBQVlwM0IsVUFBWWd2QixFQUFNbm5FLE9BRzlCLE1BQU13dkUsRUFBbUJySSxFQUFNeDhELEtBQVc4bEMsR0FBUXp5QyxFQUFBa0QsVUFBQSxPQUFBLEdBQUEsWUFHOUMsSUFBSTZoRSxFQUE0QixLQUNabnpCLEVBQVdVLFFBQVFpVixNQUFNcitCLElBQ3pDLElBQUlwZCxFQUFPb2QsRUFBRStrQixVQUViLE9BRGEva0IsRUFBRWdsQixZQUVYcGlDLElBQVNnZ0MsR0FBVzYvQixhQUNwQjcvRCxJQUFTZ2dDLEdBQVc0L0IsS0FDcEI1L0QsSUFBU2dnQyxHQUFXOC9CLE1BQ3BCOS9ELElBQVNnZ0MsR0FBVysvQixVQUNwQi8vRCxJQUFTZ2dDLEdBQVdnZ0MsV0FJWixNQUdaL0csRUFBWTdoRSxLQUFLc2tFLElBQUk0QyxjQUFjQyxhQUFhNTNCLElBR3BELElBQUk0eUIsRUFBa0IsS0FDSnp6QixFQUFXVSxRQUFRaVYsTUFBTXIrQixJQUN2QyxJQUFJcGQsRUFBT29kLEVBQUUra0IsVUFDVGxWLEVBQVM3UCxFQUFFZ2xCLFlBQ2YsT0FDSXBpQyxJQUFTZ2dDLEdBQVc0L0IsS0FDcEI1L0QsSUFBU2dnQyxHQUFXaWdDLE1BQ3BCamdFLElBQVNnZ0MsR0FBV2tnQyxTQUNwQmxnRSxJQUFTZ2dDLEdBQVdtNkIsTUFDcEJuNkQsSUFBU2dnQyxHQUFXbzZCLFVBQ3BCcDZELElBQVNnZ0MsR0FBV3E2QixhQUdicjZELElBQVNnZ0MsR0FBV21nQyxXQUVaLGFBQVhsekMsR0FDVyxhQUFYQSxHQUNXLGlCQUFYQSxFQUtJLE1BR1pzc0MsUUFBZ0JuaUUsS0FBS3NrRSxJQUFJc0MsTUFBTVMsUUFBUUMsS0FBSy8zQixFQUFLNW9DLE9BSXJELElBQUkyOEQsRUFBdUIsSUFBSTlqRSxJQUMzQit1RSxHQUFlLEVBRW5CLElBQUssSUFBSUMsS0FBYzkvQixFQUFXVyxTQUU5QixJQUFLaTBCLEVBQVVoakUsSUFBSWt1RSxHQUFhLENBQzVCLElBQUlDLEVBQVE1b0UsT0FBTzJvQyxPQUFPLElBQzFCLElBQW9CLElBQWhCZ2dDLEVBRUFDLEVBQVFDLEdBQ0puL0IsRUFDQWIsT0FHRCxDQUNILElBQUlpZ0MsRUFBZ0JqZ0MsRUFBV1UsUUFBUW8vQixHQUV2QyxPQUFRRyxFQUFjNWpDLFdBQ2xCLEtBQUtuQyxHQUFXNi9CLFlBQ1pnRyxFQUFRRyxHQUNKL00sRUFDQThNLEVBQ0FqZ0MsR0FFSixNQUNKLEtBQUs5RixHQUFXNC9CLElBQ1ppRyxFQUFRSSxHQUNKMU0sRUFDQXdNLEVBQ0FqZ0MsR0FFSixNQUNKLEtBQUs5RixHQUFXaWdDLEtBQ1o0RixFQUFRSyxHQUNKM00sRUFDQXdNLEVBQ0FqZ0MsR0FFSixNQUNKLEtBQUs5RixHQUFXa2dDLFFBQ1oyRixFQUFRTSxHQUNKNU0sRUFDQXdNLEVBQ0FqZ0MsR0FFSixNQUNKLEtBQUs5RixHQUFXbWdDLFNBQ1owRixFQUFRTyxHQUNKei9CLEVBQ0FvL0IsRUFDQWpnQyxHQUVKLE1BQ0osS0FBSzlGLEdBQVdtNkIsS0FDaEIsS0FBS242QixHQUFXbzZCLFNBQ2hCLEtBQUtwNkIsR0FBV3E2QixZQUNad0wsRUFBUVEsR0FDSjlNLEVBQ0F3TSxFQUNBamdDLEdBSWYsQ0FFSSsvQixFQUFNMzBCLFdBTXNCLE9BQXpCcEwsRUFBVzFDLFdBQ1B5aUMsRUFBUS8vQixFQUFXMUMsWUFDbkJ1aUMsR0FBZSxFQUNmRixFQUFZbDNCLHNCQUdPLE9BQXZCekksRUFBV3pDLFNBQ1B3aUMsRUFBUS8vQixFQUFXekMsVUFDbkJzaUMsR0FBZSxFQUNmRixFQUFZbDNCLHdCQWJwQm8zQixHQUFlLEVBQ2ZGLEVBQVlqM0IsbUJBaUJYbTNCLElBQ0RGLEVBQVk3MkIsb0JBQVo2MkIsRUFBWTcyQixtQkFBc0IsR0FDbEM4ckIsRUFBVW5qRSxJQUNOcXVFLEVBQ0E1akIsR0FBaUI2akIsRUFBTy8vQixFQUFXTCxhQUV2Q2dnQyxFQUFZbjNCLGdCQUdxQixHQUE3Qm0zQixFQUFZbjNCLGVBQ1ptM0IsRUFBWS8yQixRQUFVbTNCLEVBQU0zOUQsUUFDNUJ1OUQsRUFBWTkyQixRQUFVazNCLEVBQU0zOUQsVUFFeEIyOUQsRUFBUUosRUFBWS8yQixVQUNwQisyQixFQUFZLzJCLFFBQVVtM0IsRUFBTTM5RCxTQUU1QjI5RCxFQUFRSixFQUFZOTJCLFVBQ3BCODJCLEVBQVk5MkIsUUFBVWszQixFQUFNMzlELFVBSTNDLENBRUwsR0FBSXk5RCxFQUFjLE9BV2xCLE1BQU1XLEVBTGdCeGdDLEVBQVdVLFFBQVFwbkMsUUFBUWdlLEdBQ3RDQSxFQUFFK2tCLFlBQWNuQyxHQUFXNEIsUUFBVXhrQixFQUFFc2tCLGlCQUlSN2dDLEtBQVdtaUMsR0FBUzl1QyxFQUFBa0QsVUFBQSxPQUFBLEdBQUEsWUFPMUQsR0FBSTZoRSxHQUFhajJCLEVBQU1iLFlBQWNuQyxHQUFXNC9CLElBQUssQ0FFakQsSUFBSTJHLEVGdERsQixTQUNGdE4sRUFDQWoyQixFQUNBOEMsRUFDQXkwQixFQUNBRyxHQU9BLElBQUl4QixFQUFjRCxFQUFVRSxZQUN4QnFOLEVBQTRCLEdBQ2hDLEdBQUl0TixHQUFlQSxFQUFZdU4sS0FBTSxDQUVqQyxJQUFJQyxFQUFhLEVBQ2JDLEdBQVcsRUFDZixHQUFJanJFLE1BQU1xSCxRQUFRbTJELEVBQVl1TixNQUMxQkQsRUFBa0JBLEVBQWdCcG1FLE9BQU84NEQsRUFBWXVOLFdBQ2xELEdBQWdDLGlCQUFyQnZOLEVBQVl1TixLQUFtQixDQUM3QyxJQUFJalEsRUFBVzBDLEVBQVl1TixLQUFLN2xFLE1BQU1vaUMsRUFBTU4sY0FBYSxJQUN6RCxJQUFLLElBQUlra0MsS0FBZ0JwUSxFQUFVLENBQy9CLElBQUlxUSxFQUFPRCxFQUFham1FLE9BQ1gsS0FBVGttRSxHQUNBTCxFQUFnQm5tRSxLQUFLd21FLEVBRTVCLENBQ0osQ0FJRCxJQUFLLElBQUlDLEtBQU9OLEVBQWlCLENBQzdCLEdBQUlNLElBQVE5akMsRUFBTVosWUFFZHNrQyxHQUEwQjVnQyxFQUFXbUIsV0FBV2pFLEVBQU1WLFNBQ3REcWtDLEdBQVcsRUFDWDNqQyxFQUFNSixvQkFDSCxLQUFJa2tDLEVBQUlyM0IsV0FBV3pNLEVBQU1aLFlBQWMsS0FNMUMsU0FKQXNrQyxHQUEwQjVnQyxFQUFXbUIsV0FBV2pFLEVBQU1WLFNBQ3REcWtDLEdBQVcsRUFDWDNqQyxFQUFNSixlQUdULENBS0QsSUFBSWp1QyxFQUFRLEtBTVosT0FMSWd5RSxJQUNBaHlFLEVBQVEreEUsR0FHWnBNLEdBQWFDLEVBREFHLEVBQVVsakUsSUFBSXN1QyxFQUFXVyxTQUFTekQsRUFBTVYsVUFDdkJVLEVBQU9ydUMsSUFDOUIsQ0FDVixDQUNKLENBRUQsT0FBTyxDQUNYLENFUHNDb3lFLENBQ2Q5TixFQUNBajJCLEVBQ0E4QyxFQUNBeTBCLEVBQ0FHLEdBRUorSyxFQUFZNTJCLG9CQUFaNDJCLEVBQVk1MkIsa0JBQXNCMDNCLEVBQ3JDLENBR0QsR0FDSXROLEdBQ0FqMkIsRUFBTWIsWUFBY25DLEdBQVc2L0IsYUFDVCxTQUF0Qjc4QixFQUFNWixZQUNSLENBQ0UsSUFBSW1rQyxFRk5sQixTQUNGdE4sRUFDQWoyQixFQUNBOEMsRUFDQXkwQixFQUNBRyxHQUlBLElBQUl4QixFQUFjRCxFQUFVRSxZQUM1QixHQUFJRCxFQUFhLENBR2IsSUFBSTVuQixFQUFZOG5CLEdBQWlCRixFQUFhbDJCLEVBQU1aLGFBRXBELEdBQUlrUCxFQUFXLENBQ1gsSUFBSXVwQixFQUFXM0QsR0FDWDVsQixFQUNBeEwsRUFBV3lCLGNBVWYsR0FQdUIsT0FBbkJzekIsRUFBU2xtRSxRQUVTLFNBQWQyOEMsR0FBc0MsVUFBZEEsSUFDeEJ1cEIsRUFBUzc2RCxLQUFPa2dDLEdBQVV0VixPQUMxQml3QyxFQUFTbG1FLE1BQXNCLFNBQWQyOEMsRUFBdUIsRUFBSSxJQUc3QixPQUFuQnVwQixFQUFTbG1FLE1BT1QsT0FOSWttRSxFQUFTNzZELE9BQVNrZ0MsR0FBVW1TLE9BQzVCclAsRUFBTXZCLFVBQVl2QixHQUFVbVMsTUFFaENyUCxFQUFNSixnQkFFTjAzQixHQUFhQyxFQURBRyxFQUFVbGpFLElBQUlzdUMsRUFBV1csU0FBU3pELEVBQU1WLFVBQ3ZCVSxFQUFPNjNCLEVBQVNsbUUsUUFDdkMsQ0FFZCxNQUFNLEdBQ0hxdUMsRUFBTVgsbUJBQ04rMkIsR0FBaUJGLEVBQWFsMkIsRUFBTVgsbUJBQ3RDLENBUUUsSUFBSTZQLEVBQVVrbkIsR0FDVkYsRUFDQWwyQixFQUFNWCxtQkFFTm0wQixFQUFXLEtBU2YsR0FSSTk2RCxNQUFNcUgsUUFBUW12QyxHQUNkc2tCLEVBQVd0a0IsRUFBUXJ4QyxLQUFLL0YsR0FDYkEsRUFBRThkLGFBRWEsaUJBQVpzNUIsSUFDZHNrQixFQUFXdGtCLEVBQVF0eEMsTUFBTW9pQyxFQUFNTixpQkFJL0I4ekIsR0FDQUEsRUFBU3RnRSxPQUFTOHNDLEVBQU1ULGVBQ3hCUyxFQUFNVCxlQUFpQixFQUN6QixDQUVFLElBQ0lzNEIsRUFBVzNELEdBRElWLEVBQVN4ekIsRUFBTVQsZUFBZTVoQyxPQUc3Q21sQyxFQUFXeUIsY0FFZixHQUF1QixPQUFuQnN6QixFQUFTbG1FLE1BU1QsT0FSSWttRSxFQUFTNzZELE9BQVNrZ0MsR0FBVW1TLE9BQzVCclAsRUFBTXZCLFVBQVl2QixHQUFVbVMsTUFFaENyUCxFQUFNSixnQkFJTjAzQixHQUFhQyxFQUhBRyxFQUFVbGpFLElBQ25Cc3VDLEVBQVdXLFNBQVN6RCxFQUFNVixVQUVBVSxFQUFPNjNCLEVBQVNsbUUsUUFDdkMsQ0FFZCxDQUNKLENBQ0osQ0FFRCxPQUFPLENBQ1gsQ0VsRnNDcXlFLENBQ2QvTixFQUNBajJCLEVBQ0E4QyxFQUNBeTBCLEVBQ0FHLEdBRUorSyxFQUFZNTJCLG9CQUFaNDJCLEVBQVk1MkIsa0JBQXNCMDNCLEVBQ3JDLENBR0QsR0FDSXROLElBQ0NqMkIsRUFBTWIsWUFBY25DLEdBQVc4L0IsTUFDNUI5OEIsRUFBTWIsWUFBY25DLEdBQVcrL0IsVUFDL0IvOEIsRUFBTWIsWUFBY25DLEdBQVdnZ0MsYUFDckMsQ0FDRSxJQUFJdUcsRUZvRWxCLFNBQ0Z0TixFQUNBajJCLEVBQ0E4QyxFQUNBeTBCLEVBQ0FHLEdBRUEsSUFBSWlFLEVBQVExRixFQUFVMEYsTUFDdEIsSUFBS0EsRUFBTyxPQUFPLEVBRW5CLElBQUl2OUIsRUFBZTRCLEVBQU1aLFlBQ3JCakIsRUFBYTZCLEVBQU1iLFVBRW5COGtDLEVBQWUsR0FDZjkyQixFQUFXL08sRUFHZixJQUFLLElBQUl3OUIsS0FBUUQsRUFBTyxDQUNwQixJQUFLQyxFQUFNLFNBRVgsSUFBSXNJLEVBQVcsR0FDWC9sQyxJQUFlbkIsR0FBVzgvQixLQUV0Qm9ILEVBREF0SSxFQUFLdUksWUFDTXZJLEVBQUt1SSxZQUVMdkksRUFBS0EsS0FFYno5QixJQUFlbkIsR0FBVysvQixTQUdqQ21ILEVBQVd0SSxFQUFLQSxLQUNUejlCLElBQWVuQixHQUFXZ2dDLFlBQzdCcEIsRUFBS3VJLGNBQ0xELEVBQVd0SSxFQUFLdUksYUFJaEJELEVBREF0SSxFQUFLdUksWUFDTXZJLEVBQUt1SSxZQUVMdkksRUFBS0EsS0FHeEJzSSxFQUFXQSxFQUFTdm1FLE9BRXBCc21FLEdBQWdCQyxFQUFXLElBQzlCLENBRUQsT0FBT3pNLEdBQ0h3TSxFQUNBOTJCLEVBQ0FuTixFQUNBdTNCLEVBQ0FHLEVBQ0E1MEIsRUFFUixDRTNIc0NzaEMsQ0FDZG5PLEVBQ0FqMkIsRUFDQThDLEVBQ0F5MEIsRUFDQUcsR0FFSitLLEVBQVk1MkIsb0JBQVo0MkIsRUFBWTUyQixrQkFBc0IwM0IsRUFDckMsQ0FHRCxHQUFJaE4sR0FBV3YyQixFQUFNYixZQUFjbkMsR0FBVzQvQixJQUFLLENBQy9DLElBQUkyRyxFRmtIbEIsU0FDRmhOLEVBQ0F2MkIsRUFDQThDLEVBQ0F5MEIsRUFDQUcsR0FLQSxJQUFJbEIsRUFBVXgyQixFQUFNWixZQWFwQixPQVpJWSxFQUFNWCxvQkFDTm0zQixFQUFVeDJCLEVBQU1YLG1CQUVoQm0zQixFQUFRdGpFLE9BQVMsR0FBS3NqRSxFQUFRL3BCLFdBQVcsT0FDekMrcEIsRUFBVUEsRUFBUTN1QyxVQUFVLElBUXpCNHZDLEdBQ0hsQixFQU5BLFdBQ0FDLEVBQ0EsNEVBTUF4MkIsRUFDQXUzQixFQUNBRyxFQUNBNTBCLEVBRVIsQ0VqSnNDdWhDLENBQ2Q5TixFQUNBdjJCLEVBQ0E4QyxFQUNBeTBCLEVBQ0FHLEdBRUorSyxFQUFZNTJCLG9CQUFaNDJCLEVBQVk1MkIsa0JBQXNCMDNCLEVBQ3JDLENBR0QsR0FBSWhOLEdBQVd2MkIsRUFBTWIsWUFBY25DLEdBQVdpZ0MsS0FBTSxDQUNoRCxJQUFJc0csRUZ3SWxCLFNBQ0ZoTixFQUNBdjJCLEVBQ0E4QyxFQUNBeTBCLEVBQ0FHLEdBT0EsT0FBT0QsR0FDSGxCLEVBSld2MkIsRUFBTVosWUFNakJZLEVBQ0F1M0IsRUFDQUcsRUFDQTUwQixFQUVSLENFNUpzQ3doQyxDQUNkL04sRUFDQXYyQixFQUNBOEMsRUFDQXkwQixFQUNBRyxHQUVKK0ssRUFBWTUyQixvQkFBWjQyQixFQUFZNTJCLGtCQUFzQjAzQixFQUNyQyxDQUdELEdBQUl2akMsRUFBTWIsWUFBY25DLEdBQVdtZ0MsU0FBVSxDQUN6QyxJQUFJb0csRUFBY2dCLEdBQ2Q1Z0MsRUFDQTR5QixFQUNBdjJCLEVBQ0E4QyxFQUNBeTBCLEVBQ0FHLEdBRUorSyxFQUFZNTJCLG9CQUFaNDJCLEVBQVk1MkIsa0JBQXNCMDNCLEVBQ3JDLENBR0QsR0FBSWhOLEdBQVd2MkIsRUFBTWIsWUFBY25DLEdBQVdrZ0MsUUFBUyxDQUNuRCxJQUFJcUcsRUY0TmxCLFNBQ0ZoTixFQUNBdjJCLEVBQ0E4QyxFQUNBeTBCLEVBQ0FHLEdBRUEsSUFBSWYsRUFBVzMyQixFQUFNWixZQW1CckIsT0FsQklZLEVBQU1YLG9CQUNOczNCLEVBQVczMkIsRUFBTVgsbUJBSXJCczNCLEVBQVdBLEVBQVMxdkMsUUFBUSxJQUFLLFlBYTFCd3dDLEdBQ0hsQixFQVJBbnVDLE9BQU93dEIsR0FBRyw2QkFDVitnQixFQUNBdnVDLE9BQU93dEIsR0FBRywwREFyeEJkLHVDQXV4Qkl4dEIsT0FBT3d0QixHQUFHLGVBTVY1VixFQUNBdTNCLEVBQ0FHLEVBQ0E1MEIsRUFFUixDRTlQc0MwaEMsQ0FDZGpPLEVBQ0F2MkIsRUFDQThDLEVBQ0F5MEIsRUFDQUcsR0FFSitLLEVBQVk1MkIsb0JBQVo0MkIsRUFBWTUyQixrQkFBc0IwM0IsRUFDckMsQ0FHRCxHQUNJaE4sSUFDQ3YyQixFQUFNYixZQUFjbkMsR0FBV202QixNQUM1Qm4zQixFQUFNYixZQUFjbkMsR0FBV282QixVQUMvQnAzQixFQUFNYixZQUFjbkMsR0FBV3E2QixhQUNyQyxDQUNFLElBQUlrTSxFRmdQbEIsU0FDRmhOLEVBQ0F2MkIsRUFDQThDLEVBQ0F5MEIsRUFDQUcsR0FHQSxJQUFJdjVCLEVBQWE2QixFQUFNYixVQUduQmdPLEVBQVduTixFQUFNWixZQWFyQixPQVhJK04sRUFEQWhQLElBQWVuQixHQUFXbTZCLEtBQ2Ysa0JBQW9CaHFCLEVBQ3hCaFAsSUFBZW5CLEdBQVdvNkIsU0FDdEIsYUFBZWpxQixFQUNuQmhQLElBQWVuQixHQUFXcTZCLFlBQ3RCLGVBQWlCbHFCLEVBR2pCLGtCQUFvQkEsRUFJNUJzcUIsR0FDSGxCLEVBQ0FwcEIsRUFDQW5OLEVBQ0F1M0IsRUFDQUcsRUFDQTUwQixFQUVSLENFaFJzQzJoQyxDQUNkbE8sRUFDQXYyQixFQUNBOEMsRUFDQXkwQixFQUNBRyxHQUVKK0ssRUFBWTUyQixvQkFBWjQyQixFQUFZNTJCLGtCQUFzQjAzQixFQUNyQyxDQUNKLFlBQ0toeUUsUUFBUW16RSxJQUFJcEIsRUFDckIsTUFNRCxTQUxNL3hFLFFBQVFtekUsSUFBSWhDLFNBSVp0dUUsS0FBS3V3RSxxQkFBcUJwTixFQUFTejBCLEVBQVkyL0IsR0FDakRBLEVBQVloM0IsYUFDWixPQUFPcjNDLEtBQUsybEUsbUJBQ1IwSSxFQUFZaDNCLGFBQ1owVCxFQUNBNmEsR0FhUixJQUFJNEssRUFBbUIsR0FnRHZCLEdBOUNLbkMsRUFBWS8yQixRQUFRd0MsV0FDcEJ1MEIsRUFBWTkyQixRQUFRdUMsV0FDUyxJQUE5QnUwQixFQUFZbjNCLGVBQ1htM0IsRUFBWTcyQixvQkFFYmc1QixFQUFtQiwwQ0FDZm5DLEVBQVlsM0IsbUJBQXFCLElBQ2pDcTVCLEdBQW9CLEtBQUtuQyxFQUFZbDNCLHVEQUVyQ2szQixFQUFZajNCLGtCQUNabzVCLEdBQW9CLEtBQUtuQyxFQUFZajNCLHVEQUdoQixPQUF6QjFJLEVBQVcxQyxXQUE2QyxPQUF2QjBDLEVBQVd6QyxTQUU1Q3lDLEVBQVcxQyxVQUFZcWlDLEVBQVkvMkIsUUFBUXhtQyxRQUMzQzQ5QixFQUFXekMsUUFBVW9pQyxFQUFZOTJCLFFBQVF6bUMsU0FFaEIsT0FBekI0OUIsRUFBVzFDLFdBQ1ksT0FBdkIwQyxFQUFXekMsUUFFUHlDLEVBQVcxQyxVQUFZcWlDLEVBQVk5MkIsUUFDbkM3SSxFQUFXekMsUUFBVW9pQyxFQUFZOTJCLFFBQVF6bUMsUUFFekMwL0QsRUFBbUIscUJBR0EsT0FBdkI5aEMsRUFBV3pDLFNBQ2MsT0FBekJ5QyxFQUFXMUMsVUFFUDBDLEVBQVd6QyxRQUFVb2lDLEVBQVkvMkIsUUFDakM1SSxFQUFXMUMsVUFBWXFpQyxFQUFZLzJCLFFBQVF4bUMsUUFFM0MwL0QsRUFBbUIsc0JBS2xCOWhDLEVBQVcxQyxVQUFZcWlDLEVBQVkvMkIsU0FDaEM1SSxFQUFXekMsUUFBVW9pQyxFQUFZLzJCLFNBQ3BDNUksRUFBVzFDLFVBQVlxaUMsRUFBWTkyQixTQUNoQzdJLEVBQVd6QyxRQUFVb2lDLEVBQVk5MkIsV0FFckNpNUIsRUFBbUIsc0JBR3ZCQSxFQUNBLE9BQU94d0UsS0FBSzJsRSxtQkFBbUI2SyxFQUFrQnpsQixFQUFRNmEsR0FLN0QsSUFBS3lJLEVBQVk1MkIsa0JBQ2IsT0FBT3ozQyxLQUFLMmxFLG1CQUNSLGtDQUNBNWEsRUFDQTZhLEdBS1IsSUFBSXgzQixFQUFXLElBQUlGLEdBQVNRLEVBQVcxQyxVQUFXMEMsRUFBV3pDLFNBQzdELElBQUssSUFBSUwsS0FBUzhDLEVBQVdVLFFBQVMsQ0FHbEMsSUFBSVQsRUFBVVAsRUFBU0ssY0FBYzdDLEVBQU84QyxHQUc1Q0MsRUFBUW5ELGNBQWNJLEVBQU1GLGlCQUM1QixJQUNJLElBQUk2QyxFQUFVRyxFQUFXMUMsVUFBVWw3QixRQUNuQ3k5QixHQUFXRyxFQUFXekMsUUFDdEJzQyxFQUFRaC9CLElBQUksRUFBRyxRQUtmLEdBQ0k0ekQsRUFBUTdpRSxJQUNKc3FELEdBQWlCcmMsRUFBU0csRUFBV0wsYUFFM0MsQ0FDRSxJQUFJKzBCLEVBQWtCRCxFQUNqQi9pRSxJQUFJd3FELEdBQWlCcmMsRUFBU0csRUFBV0wsYUFDekNybUMsUUFBTyxTQUFVeW9FLEdBQ2QsT0FBT0EsRUFBSzdrQyxNQUFNZixRQUFRZSxFQUM5QixJQUNKLEdBQUl3M0IsRUFBZ0J0a0UsT0FBUyxFQUFHLENBRTVCLElBQUl2QixFQUFRLEtBQ1osSUFDSSxJQUFJbXpFLEVBQVUsRUFDZEEsRUFBVXROLEVBQWdCdGtFLE9BQzFCNHhFLElBQ0YsQ0FDRSxJQUFJQyxFQUFZdk4sRUFBZ0JzTixHQUFTbnpFLE1BRXJDaTJCLE9BQU9tWCxTQUFTZ21DLEtBQ2ZuOUMsT0FBTzF2QixNQUFNNnNFLEtBRUEsT0FBVnB6RSxFQUNBQSxFQUFRb3pFLEVBRVJwekUsR0FBU296RSxFQUdwQixDQUdhLE9BQVZwekUsR0FDQW94QyxFQUFRNUIsU0FBU3dCLEVBQVNoeEMsRUFFakMsQ0FDSixDQUVSLENBQ0RteEMsRUFBV04sU0FBV0EsRUFHdEIsSUFBSXdpQyxFUjVnQkksU0FBTzdsQixFQUFxQnJjLEdBS3hDLElBQUssSUFBSUMsS0FBV0QsRUFBV04sU0FBVSxDQUNyQyxHQUFJTyxFQUFRaEIsV0FBV3JELGVBQWdCLFNBRXZDLElBQUlnRCxFQUFjb0IsRUFBV3VCLFdBQVd0QixFQUFRekQsU0FDNUIsT0FBaEJvQyxHQUF3QyxJQUFoQkEsR0FDeEJxQixFQUFRdEIsTUFDSkMsRUFDQW9CLEVBQVd3Qix5QkFBeUJ2QixFQUFRekQsVUFJUixPQUF4Q3dELEVBQVdoQixRQUFRaUIsRUFBUXpELFVBQzNCeUQsRUFBUWxCLFdBQVdpQixFQUFXaEIsUUFBUWlCLEVBQVF6RCxVQUc5Q3dELEVBQVdzQixNQUFNckIsRUFBUXpELFVBQ3pCeUQsRUFBUWYsa0JBRWYsQ0FFRCxJQUFLLElBQUkxQixLQUFZd0MsRUFBV3BuQyxLQUFNLENBQ2xDLElBQUl1cEUsRUFBTXRTLEdBQWdCeFQsRUFBUXJjLEVBQVl4QyxHQUM5QyxHQUFtQixpQkFBUjJrQyxFQUNQLE9BQU9BLENBRWQsQ0FDRCxJQUFLLElBQUkxa0MsS0FBV3VDLEVBQVdrQyxJQUFLLENBQ2hDLElBQUlpZ0MsRUFBTWhTLEdBQWU5VCxFQUFRcmMsRUFBWXZDLEdBQzdDLEdBQW1CLGlCQUFSMGtDLEVBQ1AsT0FBT0EsQ0FFZCxDQUNELElBQUssSUFBSTVsQixLQUFXdmMsRUFBV21DLElBQUssQ0FDaEMsSUFBSWdnQyxFQUFNQyxHQUFtQi9sQixFQUFRcmMsRUFBWXVjLEdBQ2pELEdBQW1CLGlCQUFSNGxCLEVBQ1AsT0FBT0EsQ0FFZCxDQUNELElBQUssSUFBSWhoQixLQUFlbmhCLEVBQVdvQyxRQUFTLENBQ3hDLElBQUkrL0IsRUFBTUUsR0FBc0JobUIsRUFBUXJjLEVBQVltaEIsR0FDcEQsR0FBbUIsaUJBQVJnaEIsRUFDUCxPQUFPQSxDQUVkLENBQ0QsSUFBSyxJQUFJamIsS0FBY2xuQixFQUFXc0MsT0FBUSxDQUN0QyxJQUFJNi9CLEVBQU1HLEdBQW9Cam1CLEVBQVFyYyxFQUFZa25CLEdBQ2xELEdBQW1CLGlCQUFSaWIsRUFDUCxPQUFPQSxDQUVkLENBQ0QsSUFBSyxJQUFJdmdCLEtBQWE1aEIsRUFBV3JULE1BQU8sQ0FDcEMsSUFBSXcxQyxFQUFNSSxHQUFrQmxtQixFQUFRcmMsRUFBWTRoQixHQUNoRCxHQUFtQixpQkFBUnVnQixFQUNQLE9BQU9BLENBRWQsQ0FDRCxJQUFLLElBQUluYixLQUFlaG5CLEVBQVdxQyxRQUFTLENBQ3hDLElBQUk4L0IsRUFBTUssR0FBc0JubUIsRUFBUXJjLEdBQ3hDLEdBQW1CLGlCQUFSbWlDLEVBQ1AsT0FBT0EsQ0FFZCxDQUNMLENReWN3Qk0sQ0FBaUJwbUIsRUFBUXJjLEdBQ3pDLEdBQXlCLGlCQUFka2lDLEVBQ1AsT0FBTzV3RSxLQUFLMmxFLG1CQUFtQmlMLEVBQVc3bEIsRUFBUTZhLEdBR3REQSxFQUFHdDFELFlBQVl5NkMsS0FDbEIsQ0FHSyxvQkFBQXdsQixDQUNGcE4sRUFDQXowQixFQUNBMi9CLDRDQUlBLElBQUkrQyxFQUFlMWlDLEVBQVdVLFFBQVFwbkMsUUFDakNnZSxHQUFNQSxFQUFFK2tCLFlBQWNuQyxHQUFXNEIsUUFJbEM2bUMsRUFBMkIsR0FDM0JDLEdBQW9CLEVBQ3hCLElBQUssSUFBSTFsQyxLQUFTd2xDLEVBQWMsQ0FDNUIsSUFBSXY2QixFQUFXakwsRUFBTVgsa0JBQ2pCc0UsRUFBT3Z2QyxLQUFLc2tFLElBQUlzQyxNQUFNQyxzQkFDdEJDLGdCQUFjandCLEVBQVcsUUFFN0IsS0FBS3RILEdBQVVBLGFBQWdCa3pCLEVBQUtBLE9BQUcsQ0FDbkM2TyxHQUFvQixFQUNwQixLQUNILENBRUQsSUFBSXg2QixFQUFhbEwsRUFBTVQsY0FDbkJvbUMsRUFBTTNsQyxFQUFNdEIsZUFFWmtuQyxFQUFRSCxFQUFPcmxFLE1BQ2QxSSxHQUFNQSxFQUFFdXpDLFdBQWFBLEdBQVl2ekMsRUFBRXd6QyxhQUFlQSxJQUV2RCxHQUFJMDZCLEVBQ0lELEVBQ0FDLEVBQU1uaUMsU0FBV3pELEVBRWpCNGxDLEVBQU16NkIsVUFBVTl0QyxLQUFLMmlDLE9BRXRCLENBQ0gsSUFBSTZsQyxFQUFZLElBQUk3NkIsR0FBVUMsRUFBVUMsR0FDcEN5NkIsRUFDQUUsRUFBVXBpQyxTQUFXekQsRUFFckI2bEMsRUFBVTE2QixVQUFVOXRDLEtBQUsyaUMsR0FFN0J5bEMsRUFBT3BvRSxLQUFLd29FLEVBQ2YsQ0FDSixDQUdELEdBQUlILEVBQ0FqRCxFQUFZaDNCLGFBQWUsd0NBSS9CLElBQUssSUFBSW82QixLQUFhSixFQUFRLENBRTFCLElBQUkxQyxFQUFnQjhDLEVBQVVwaUMsU0FDOUIsSUFBS3MvQixFQUVELFNBRUosSUFBSStDLEVBQWtCRCxFQUFVMTZCLFVBQzVCRixFQUFXODNCLEVBQWMxakMsa0JBQ3pCNkwsRUFBYTYzQixFQUFjeGpDLGNBRzNCd21DLEVBQVksR0FDaEI5NkIsR0FBc0IsTUFDdEIsSUFBSXRILEVBQU92dkMsS0FBS3NrRSxJQUFJc0MsTUFBTUMsc0JBQ3RCQyxFQUFhQSxjQUFDandCLElBRWxCLEtBQUl0SCxHQUFRQSxhQUFnQmt6QixTQXlCeEIsU0F6QitCLENBQy9CNEwsRUFBWW4zQixnQkFDWixJQVVJempDLEVBVkEwdUQsUUFBZ0JuaUUsS0FBS3NrRSxJQUFJc0MsTUFBTVMsUUFBUUMsS0FBSy8zQixFQUFLNW9DLE1BU2pEaXJFLEVBQWUsSUFBSXQ3RCxPQUZuQix5RUFFMkMsTUFFM0N1N0QsRUFBVyxFQUVmLEtBQVFwK0QsRUFBUW0rRCxFQUFhbnhELEtBQUswaEQsSUFBVyxDQUV6QyxHQUFJMFAsSUFBYS82QixFQUFZLENBQ3pCNjZCLEVBQVlsK0QsRUFBTSxHQUNsQixLQUNILENBQ0RvK0QsR0FDSCxDQUNKLENBTUQsSUFBSUMsRUFBYUgsRUFBVW5vRSxNQUFNLFNBQ2pDc29FLEVBQWFBLEVBQVc5cEUsUUFBUVYsR0FDWixLQUFUQSxJQUVYLElBQUl5cUUsRUFBYSxFQUNiQyxFQUFjLEVBSWxCLEdBQUlGLEVBQVdoekUsUUFBVSxFQUFHLENBRXhCLElBQUltekUsRUFBYUgsRUFBV3prQyxRQUFROWpDLE9BQ3BDMG9FLEVBQWFDLEdBQWtCRCxFQUFZLEtBRTNDRixFQURxQkUsRUFBV3pvRSxNQUFNLEtBQ1YxSyxPQUU1QixJQUFJcXpFLEVBQVVMLEVBQVd6a0MsUUFBUTlqQyxPQUNqQzRvRSxFQUFVRCxHQUFrQkMsRUFBUyxLQUNyQyxJQUFJQyxFQUFtQkQsRUFBUTNvRSxNQUFNLEtBQ3JDLElBQUssSUFBSTZxRCxLQUFPK2QsRUFDWixJQUFLL2QsRUFBSXBsQixTQUFTLEtBQ2QsTUFJUitpQyxFQUFjRixFQUFXaHpFLE1BQzVCLENBRUQsR0FBbUIsR0FBZmt6RSxFQUFrQixTQUd0QixJQUFJSyxFQUFpQjFELEVBQWN4akMsWUFBWSxHQUMvQyxHQUFJa25DLEdBQWtCTixFQUFZLFNBQ2xDLElBQUlPLEVBQVUsR0FHZCxJQUFLLElBQUlDLEtBQWFULEVBQVksQ0FDOUIsSUFDSVUsRUFEVU4sR0FBa0JLLEVBQVVocEUsT0FBUSxLQUNwQkMsTUFBTSxLQUNwQyxHQUFJNm9FLEVBQWlCRyxFQUFnQjF6RSxPQUFRLENBQ3pDLElBQ0lxbkIsRUFBT290QyxHQURBaWYsRUFBZ0JILEdBQWdCOW9FLE9BQ1RtbEMsRUFBV0wsWUFFekNsb0IsRUFBSzJ6QixXQUNMdzRCLEVBQVFycEUsS0FBS2tkLEdBR1Jrb0QsRUFBWS8yQixRQUFRd0MsV0FDcEJ1MEIsRUFBWTkyQixRQUFRdUMsV0FLakIzekIsRUFBT2tvRCxFQUFZLzJCLFVBQ25CKzJCLEVBQVkvMkIsUUFBVW54QixFQUFLclYsU0FFM0JxVixFQUFPa29ELEVBQVk5MkIsVUFDbkI4MkIsRUFBWTkyQixRQUFVcHhCLEVBQUtyVixXQVAvQnU5RCxFQUFZLzJCLFFBQVVueEIsRUFBS3JWLFFBQzNCdTlELEVBQVk5MkIsUUFBVXB4QixFQUFLclYsVUFVL0J3aEUsRUFBUXJwRSxLQUFLLEtBRXBCLE1BQ0dxcEUsRUFBUXJwRSxLQUFLLEtBR3BCLENBR0QsR0FDSXFwRSxFQUFROWtELE9BQU8xZixHQUNFLE9BQU5BLElBS1gsWUFGQXVnRSxFQUFZaDNCLGFBQ1IsMkNBR0pnM0IsRUFBWTcyQixvQkFBWjYyQixFQUFZNzJCLG1CQUFzQixHQUl0QyxJQUFLLElBQUlpN0IsS0FBaUJmLEVBQWlCLENBQ3ZDLElBQUlnQixFQUFtQkQsRUFBY3RuQyxZQUFZLEdBRWpELEdBQUl1bkMsR0FBb0JYLEVBQVksU0FFcEMsSUFBSVksRUFBVSxFQUNkLElBQUssSUFBSUosS0FBYVQsRUFBWSxDQUM5QixJQUNJVSxFQURVTixHQUFrQkssRUFBVWhwRSxPQUFRLEtBQ3BCQyxNQUFNLEtBQ3BDLEdBQUlrcEUsRUFBbUJGLEVBQWdCMXpFLE9BQVEsQ0FDM0MsSUFDSXNnRSxFQURPb1QsRUFBZ0JFLEdBQWtCbnBFLE9BQ3pCQyxNQUFNaXBFLEVBQWNubkMsZ0JBRXhDLElBQUs4ekIsRUFBVSxTQUNmLEdBQXdCLElBQXBCQSxFQUFTdGdFLE9BQWMsQ0FDdkIsSUFBSTJrRSxFQUFXM0QsR0FDWFYsRUFBUyxHQUNUMXdCLEVBQVd5QixjQUdmLEdBQXVCLE9BQW5Cc3pCLEVBQVNsbUUsTUFBZ0IsQ0FDckJrbUUsRUFBUzc2RCxPQUFTa2dDLEdBQVVtUyxPQUM1QnczQixFQUFjcG9DLFVBQVl2QixHQUFVbVMsTUFFeEMsSUFBSTE5QyxFQUFRa21FLEVBQVNsbUUsTUFFakJvMUUsRUFBVUwsRUFBUXh6RSxRQUNsQnd6RSxFQUFRSyxLQUVSdEUsRUFBWTUyQixvQkFBWjQyQixFQUFZNTJCLG1CQUFzQixHQUNsQ203QixHQUNJelAsRUFDQXZZLEdBQ0kwbkIsRUFBUUssR0FDUmprQyxFQUFXTCxZQUVmb2tDLEVBQ0FsMUUsR0FHWCxDQUNKLE1BQU0sR0FDSDZoRSxFQUFTdGdFLE9BQVMyekUsRUFBY3RuQyxZQUFZLElBQzVDc25DLEVBQWN0bkMsWUFBWSxJQUFNLEVBQ2xDLENBQ0UsSUFBSTV0QyxFQUFRLEtBSVJrbUUsRUFBVzNELEdBRlhWLEVBQVNxVCxFQUFjdG5DLFlBQVksSUFBSTVoQyxPQUl2Q21sQyxFQUFXeUIsY0FHUSxPQUFuQnN6QixFQUFTbG1FLFFBQ0xrbUUsRUFBUzc2RCxPQUFTa2dDLEdBQVVtUyxPQUM1QnczQixFQUFjcG9DLFVBQVl2QixHQUFVbVMsTUFFeEMxOUMsRUFBUWttRSxFQUFTbG1FLE1BRWJvMUUsRUFBVUwsRUFBUXh6RSxRQUNsQnd6RSxFQUFRSyxLQUVSdEUsRUFBWTUyQixvQkFBWjQyQixFQUFZNTJCLG1CQUFzQixHQUNsQ203QixHQUNJelAsRUFDQXZZLEdBQ0kwbkIsRUFBUUssR0FDUmprQyxFQUFXTCxZQUVmb2tDLEVBQ0FsMUUsSUFJZixDQUNKLENBRURvMUUsR0FDSCxDQUNKLENBQ0osSUFDSixDQUVELFNBQUFFLEdBQ0ksT0FBTzd5RSxLQUFLc2tFLElBQUl3TyxVQUFVQyxvQkFBb0JDLEVBQUFBLGNBQWNDLE1BQy9ELENBRUQsWUFBQXpOLENBQWEwTixHQUdULEtBRm9CbHpFLEtBQUtza0UsSUFBSXdPLFVBQVVLLFdBQVdDLGdCQUVyQkosRUFBQUEsY0FDekIsT0FHSixJQUFJSyxFQUFvQixHQUN4QixPQUFRSCxHQUNKLEtBQUtycUMsR0FBVTBLLEtBQ1g4L0IsRUFBb0IseUtBV3BCLE1BQ0osS0FBS3hxQyxHQUFVNkssSUFDWDIvQixFQUFvQix1S0FXcEIsTUFDSixLQUFLeHFDLEdBQVV5TCxRQUNYKytCLEVBQW9CLDRMQWVGLEtBQXRCQSxHQUNtQnJ6RSxLQUFLc3pFLGlCQUFpQkQsRUFJaEQsQ0FFRCxnQkFBQUMsQ0FBaUI5ckUsR0FDYixJQUFJeXJFLEVBQVNqekUsS0FBSzZ5RSxZQUVsQixHQUFJSSxFQUFRLENBQ1IsSUFBSXp0QixFQUFTeXRCLEVBQU9NLFlBQ2hCNUwsRUFBYW5pQixFQUFPbCtDLEtBQ3BCQSxFQUFPMnJFLEVBQU9PLFFBQVE3TCxHQU0xQixPQUpBbmlCLEVBQU90SCxHQUFLNTJDLEVBQUt4SSxPQUNqQm0wRSxFQUFPUSxhQUFhanVCLEdBQ3BCeXRCLEVBQU9TLGlCQUFpQixLQUFPbHNFLElBRXhCLENBQ1YsQ0FFRCxPQUFPLENBQ1YiLCJ4X2dvb2dsZV9pZ25vcmVMaXN0IjpbMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMSwyMiwyMywyNCwyNSwyNiwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw1OCw1OSw2MCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Miw4Myw4NCw4NSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5NSw5Niw5Nyw5OCw5OSwxMDAsMTAxLDEwMiwxMDMsMTA0LDEwNSwxMDYsMTA3LDEwOCwxMDksMTEwLDExMSwxMTIsMTEzLDExNCwxMTUsMTE2LDExNywxMTgsMTE5LDEyMCwxMjEsMTIyLDEyMywxMjQsMTI1LDEyNiwxMjcsMTI4LDEyOSwxMzAsMTMxLDEzMiwxMzMsMTM0LDEzNSwxMzYsMTM3LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsMTYxLDE2MiwxNjMsMTY0LDE2NSwxNjgsMTcwLDE3MSwxNzMsMTc5LDE4MCwxODEsMTgyXX0=