@digitransit-component/digitransit-component-favourite-editing-modal 2.0.3 → 2.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/index.development.js +6 -6
- package/lib/index.js +5 -5
- package/lib/index.js.map +1 -1
- package/package.json +6 -6
package/lib/index.development.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("prop-types"),require("react"),require("react-sortablejs"),require("i18next"),require("@hsl-fi/container-spinner"),require("@hsl-fi/modal"),require("@digitransit-component/digitransit-component-icon"),require("@digitransit-component/digitransit-component-dialog-modal")):"function"==typeof define&&define.amd?define(["exports","prop-types","react","react-sortablejs","i18next","@hsl-fi/container-spinner","@hsl-fi/modal","@digitransit-component/digitransit-component-icon","@digitransit-component/digitransit-component-dialog-modal"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self)["@digitransit-component/digitransit-component-favourite-editing-modal"]={},e.PropTypes,e.React,e.reactSortablejs,e.i18next,e.ContainerSpinner,e.Modal,e.Icon,e.DialogModal)}(this,(function(e,t,r,i,n,a,o,s,l){"use strict";function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var c=u(t),d=u(r),f=u(n),v=u(a),_=u(o),p=u(s),h=u(l);function y(e){return y="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},y(e)}function m(e){var t=function(e,t){if("object"!=y(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var i=r.call(e,t||"default");if("object"!=y(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==y(t)?t:
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("prop-types"),require("react"),require("react-sortablejs"),require("i18next"),require("@hsl-fi/container-spinner"),require("@hsl-fi/modal"),require("@digitransit-component/digitransit-component-icon"),require("@digitransit-component/digitransit-component-dialog-modal")):"function"==typeof define&&define.amd?define(["exports","prop-types","react","react-sortablejs","i18next","@hsl-fi/container-spinner","@hsl-fi/modal","@digitransit-component/digitransit-component-icon","@digitransit-component/digitransit-component-dialog-modal"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self)["@digitransit-component/digitransit-component-favourite-editing-modal"]={},e.PropTypes,e.React,e.reactSortablejs,e.i18next,e.ContainerSpinner,e.Modal,e.Icon,e.DialogModal)}(this,(function(e,t,r,i,n,a,o,s,l){"use strict";function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var c=u(t),d=u(r),f=u(n),v=u(a),_=u(o),p=u(s),h=u(l);function y(e){return y="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},y(e)}function m(e){var t=function(e,t){if("object"!=y(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var i=r.call(e,t||"default");if("object"!=y(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==y(t)?t:t+""}function b(e,t,r){return(t=m(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function g(e,t){return e(t={exports:{}},t.exports),t.exports}var j=g((function(e){
|
|
2
2
|
/*!
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
Copyright (c) 2018 Jed Watson.
|
|
4
|
+
Licensed under the MIT License (MIT), see
|
|
5
|
+
http://jedwatson.github.io/classnames
|
|
6
6
|
*/
|
|
7
|
-
!function(){var t={}.hasOwnProperty;function r(){for(var e=[],i=0;i<arguments.length;i++){var n=arguments[i];if(n){var a=typeof n;if("string"===a||"number"===a)e.push(n);else if(Array.isArray(n)&&n.length){var o=r.apply(null,n);o&&e.push(o)}else if("object"===a)for(var s in n)t.call(n,s)&&n[s]&&e.push(s)}}return e.join(" ")}e.exports?(r.default=r,e.exports=r):window.classNames=r}()})),w="object"==typeof global&&global&&global.Object===Object&&global,x="object"==typeof self&&self&&self.Object===Object&&self,S=w||x||Function("return this")(),M=S.Symbol,O=Object.prototype,E=O.hasOwnProperty,F=O.toString,N=M?M.toStringTag:void 0;var A=function(e){var t=E.call(e,N),r=e[N];try{e[N]=void 0;var i=!0}catch(e){}var n=F.call(e);return i&&(t?e[N]=r:delete e[N]),n},P=Object.prototype.toString;var V=function(e){return P.call(e)},I=M?M.toStringTag:void 0;var k=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":I&&I in Object(e)?A(e):V(e)};var C=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)};var z,D=function(e){if(!C(e))return!1;var t=k(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t},Z=S["__core-js_shared__"],L=(z=/[^.]+$/.exec(Z&&Z.keys&&Z.keys.IE_PROTO||""))?"Symbol(src)_1."+z:"";var T=function(e){return!!L&&L in e},R=Function.prototype.toString;var H=function(e){if(null!=e){try{return R.call(e)}catch(e){}try{return e+""}catch(e){}}return""},J=/^\[object .+?Constructor\]$/,B=Function.prototype,q=Object.prototype,U=B.toString,$=q.hasOwnProperty,Q=RegExp("^"+U.call($).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");var G=function(e){return!(!C(e)||T(e))&&(D(e)?Q:J).test(H(e))};var W=function(e,t){return null==e?void 0:e[t]};var K=function(e,t){var r=W(e,t);return G(r)?r:void 0},Y=K(Object,"create");var X=function(){this.__data__=Y?Y(null):{},this.size=0};var ee=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t},te=Object.prototype.hasOwnProperty;var re=function(e){var t=this.__data__;if(Y){var r=t[e];return"__lodash_hash_undefined__"===r?void 0:r}return te.call(t,e)?t[e]:void 0},ie=Object.prototype.hasOwnProperty;var ne=function(e){var t=this.__data__;return Y?void 0!==t[e]:ie.call(t,e)};var ae=function(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=Y&&void 0===t?"__lodash_hash_undefined__":t,this};function oe(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t<r;){var i=e[t];this.set(i[0],i[1])}}oe.prototype.clear=X,oe.prototype.delete=ee,oe.prototype.get=re,oe.prototype.has=ne,oe.prototype.set=ae;var se=oe;var le=function(){this.__data__=[],this.size=0};var ue=function(e,t){return e===t||e!=e&&t!=t};var ce=function(e,t){for(var r=e.length;r--;)if(ue(e[r][0],t))return r;return-1},de=Array.prototype.splice;var fe=function(e){var t=this.__data__,r=ce(t,e);return!(r<0)&&(r==t.length-1?t.pop():de.call(t,r,1),--this.size,!0)};var ve=function(e){var t=this.__data__,r=ce(t,e);return r<0?void 0:t[r][1]};var _e=function(e){return ce(this.__data__,e)>-1};var pe=function(e,t){var r=this.__data__,i=ce(r,e);return i<0?(++this.size,r.push([e,t])):r[i][1]=t,this};function he(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t<r;){var i=e[t];this.set(i[0],i[1])}}he.prototype.clear=le,he.prototype.delete=fe,he.prototype.get=ve,he.prototype.has=_e,he.prototype.set=pe;var ye=he,me=K(S,"Map");var be=function(){this.size=0,this.__data__={hash:new se,map:new(me||ye),string:new se}};var ge=function(e){var t=typeof e;return"string"==t||"number"==t||"symbol"==t||"boolean"==t?"__proto__"!==e:null===e};var je=function(e,t){var r=e.__data__;return ge(t)?r["string"==typeof t?"string":"hash"]:r.map};var we=function(e){var t=je(this,e).delete(e);return this.size-=t?1:0,t};var xe=function(e){return je(this,e).get(e)};var Se=function(e){return je(this,e).has(e)};var Me=function(e,t){var r=je(this,e),i=r.size;return r.set(e,t),this.size+=r.size==i?0:1,this};function Oe(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t<r;){var i=e[t];this.set(i[0],i[1])}}Oe.prototype.clear=be,Oe.prototype.delete=we,Oe.prototype.get=xe,Oe.prototype.has=Se,Oe.prototype.set=Me;var Ee=Oe;var Fe=function(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this};var Ne=function(e){return this.__data__.has(e)};function Ae(e){var t=-1,r=null==e?0:e.length;for(this.__data__=new Ee;++t<r;)this.add(e[t])}Ae.prototype.add=Ae.prototype.push=Fe,Ae.prototype.has=Ne;var Pe=Ae;var Ve=function(e,t,r,i){for(var n=e.length,a=r+(i?1:-1);i?a--:++a<n;)if(t(e[a],a,e))return a;return-1};var Ie=function(e){return e!=e};var ke=function(e,t,r){for(var i=r-1,n=e.length;++i<n;)if(e[i]===t)return i;return-1};var Ce=function(e,t,r){return t==t?ke(e,t,r):Ve(e,Ie,r)};var ze=function(e,t){return!!(null==e?0:e.length)&&Ce(e,t,0)>-1};var De=function(e,t,r){for(var i=-1,n=null==e?0:e.length;++i<n;)if(r(t,e[i]))return!0;return!1};var Ze=function(e,t){for(var r=-1,i=null==e?0:e.length,n=Array(i);++r<i;)n[r]=t(e[r],r,e);return n};var Le=function(e){return function(t){return e(t)}};var Te=function(e,t){return e.has(t)};var Re=function(e,t,r,i){var n=-1,a=ze,o=!0,s=e.length,l=[],u=t.length;if(!s)return l;r&&(t=Ze(t,Le(r))),i?(a=De,o=!1):t.length>=200&&(a=Te,o=!1,t=new Pe(t));e:for(;++n<s;){var c=e[n],d=null==r?c:r(c);if(c=i||0!==c?c:0,o&&d==d){for(var f=u;f--;)if(t[f]===d)continue e;l.push(c)}else a(t,d,i)||l.push(c)}return l};var He=function(e,t){for(var r=-1,i=t.length,n=e.length;++r<i;)e[n+r]=t[r];return e};var Je=function(e){return null!=e&&"object"==typeof e};var Be=function(e){return Je(e)&&"[object Arguments]"==k(e)},qe=Object.prototype,Ue=qe.hasOwnProperty,$e=qe.propertyIsEnumerable,Qe=Be(function(){return arguments}())?Be:function(e){return Je(e)&&Ue.call(e,"callee")&&!$e.call(e,"callee")},Ge=Qe,We=Array.isArray,Ke=M?M.isConcatSpreadable:void 0;var Ye=function(e){return We(e)||Ge(e)||!!(Ke&&e&&e[Ke])};var Xe=function e(t,r,i,n,a){var o=-1,s=t.length;for(i||(i=Ye),a||(a=[]);++o<s;){var l=t[o];r>0&&i(l)?r>1?e(l,r-1,i,n,a):He(a,l):n||(a[a.length]=l)}return a};var et=function(e){return e};var tt=function(e,t,r){switch(r.length){case 0:return e.call(t);case 1:return e.call(t,r[0]);case 2:return e.call(t,r[0],r[1]);case 3:return e.call(t,r[0],r[1],r[2])}return e.apply(t,r)},rt=Math.max;var it=function(e,t,r){return t=rt(void 0===t?e.length-1:t,0),function(){for(var i=arguments,n=-1,a=rt(i.length-t,0),o=Array(a);++n<a;)o[n]=i[t+n];n=-1;for(var s=Array(t+1);++n<t;)s[n]=i[n];return s[t]=r(o),tt(e,this,s)}};var nt=function(e){return function(){return e}},at=function(){try{var e=K(Object,"defineProperty");return e({},"",{}),e}catch(e){}}(),ot=at?function(e,t){return at(e,"toString",{configurable:!0,enumerable:!1,value:nt(t),writable:!0})}:et,st=Date.now;var lt=function(e){var t=0,r=0;return function(){var i=st(),n=16-(i-r);if(r=i,n>0){if(++t>=800)return arguments[0]}else t=0;return e.apply(void 0,arguments)}},ut=lt(ot);var ct=function(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991};var dt=function(e){return null!=e&&ct(e.length)&&!D(e)};var ft=function(e){return Je(e)&&dt(e)};var vt=function(e){var t=null==e?0:e.length;return t?e[t-1]:void 0},_t=function(e,t){return ut(it(e,t,et),e+"")}((function(e,t){var r=vt(t);return ft(r)&&(r=void 0),ft(e)?Re(e,Xe(t,1,ft,!0),void 0,r):[]}));var pt=function(){this.__data__=new ye,this.size=0};var ht=function(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r};var yt=function(e){return this.__data__.get(e)};var mt=function(e){return this.__data__.has(e)};var bt=function(e,t){var r=this.__data__;if(r instanceof ye){var i=r.__data__;if(!me||i.length<199)return i.push([e,t]),this.size=++r.size,this;r=this.__data__=new Ee(i)}return r.set(e,t),this.size=r.size,this};function gt(e){var t=this.__data__=new ye(e);this.size=t.size}gt.prototype.clear=pt,gt.prototype.delete=ht,gt.prototype.get=yt,gt.prototype.has=mt,gt.prototype.set=bt;var jt=gt;var wt=function(e,t){for(var r=-1,i=null==e?0:e.length;++r<i;)if(t(e[r],r,e))return!0;return!1};var xt=function(e,t,r,i,n,a){var o=1&r,s=e.length,l=t.length;if(s!=l&&!(o&&l>s))return!1;var u=a.get(e),c=a.get(t);if(u&&c)return u==t&&c==e;var d=-1,f=!0,v=2&r?new Pe:void 0;for(a.set(e,t),a.set(t,e);++d<s;){var _=e[d],p=t[d];if(i)var h=o?i(p,_,d,t,e,a):i(_,p,d,e,t,a);if(void 0!==h){if(h)continue;f=!1;break}if(v){if(!wt(t,(function(e,t){if(!Te(v,t)&&(_===e||n(_,e,r,i,a)))return v.push(t)}))){f=!1;break}}else if(_!==p&&!n(_,p,r,i,a)){f=!1;break}}return a.delete(e),a.delete(t),f},St=S.Uint8Array;var Mt=function(e){var t=-1,r=Array(e.size);return e.forEach((function(e,i){r[++t]=[i,e]})),r};var Ot=function(e){var t=-1,r=Array(e.size);return e.forEach((function(e){r[++t]=e})),r},Et=M?M.prototype:void 0,Ft=Et?Et.valueOf:void 0;var Nt=function(e,t,r,i,n,a,o){switch(r){case"[object DataView]":if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case"[object ArrayBuffer]":return!(e.byteLength!=t.byteLength||!a(new St(e),new St(t)));case"[object Boolean]":case"[object Date]":case"[object Number]":return ue(+e,+t);case"[object Error]":return e.name==t.name&&e.message==t.message;case"[object RegExp]":case"[object String]":return e==t+"";case"[object Map]":var s=Mt;case"[object Set]":var l=1&i;if(s||(s=Ot),e.size!=t.size&&!l)return!1;var u=o.get(e);if(u)return u==t;i|=2,o.set(e,t);var c=xt(s(e),s(t),i,n,a,o);return o.delete(e),c;case"[object Symbol]":if(Ft)return Ft.call(e)==Ft.call(t)}return!1};var At=function(e,t,r){var i=t(e);return We(e)?i:He(i,r(e))};var Pt=function(e,t){for(var r=-1,i=null==e?0:e.length,n=0,a=[];++r<i;){var o=e[r];t(o,r,e)&&(a[n++]=o)}return a};var Vt=function(){return[]},It=Object.prototype.propertyIsEnumerable,kt=Object.getOwnPropertySymbols,Ct=kt?function(e){return null==e?[]:(e=Object(e),Pt(kt(e),(function(t){return It.call(e,t)})))}:Vt;var zt=function(e,t){for(var r=-1,i=Array(e);++r<e;)i[r]=t(r);return i};var Dt=function(){return!1},Zt=g((function(e,t){var r=t&&!t.nodeType&&t,i=r&&e&&!e.nodeType&&e,n=i&&i.exports===r?S.Buffer:void 0,a=(n?n.isBuffer:void 0)||Dt;e.exports=a})),Lt=/^(?:0|[1-9]\d*)$/;var Tt=function(e,t){var r=typeof e;return!!(t=null==t?9007199254740991:t)&&("number"==r||"symbol"!=r&&Lt.test(e))&&e>-1&&e%1==0&&e<t},Rt={};Rt["[object Float32Array]"]=Rt["[object Float64Array]"]=Rt["[object Int8Array]"]=Rt["[object Int16Array]"]=Rt["[object Int32Array]"]=Rt["[object Uint8Array]"]=Rt["[object Uint8ClampedArray]"]=Rt["[object Uint16Array]"]=Rt["[object Uint32Array]"]=!0,Rt["[object Arguments]"]=Rt["[object Array]"]=Rt["[object ArrayBuffer]"]=Rt["[object Boolean]"]=Rt["[object DataView]"]=Rt["[object Date]"]=Rt["[object Error]"]=Rt["[object Function]"]=Rt["[object Map]"]=Rt["[object Number]"]=Rt["[object Object]"]=Rt["[object RegExp]"]=Rt["[object Set]"]=Rt["[object String]"]=Rt["[object WeakMap]"]=!1;var Ht=function(e){return Je(e)&&ct(e.length)&&!!Rt[k(e)]},Jt=g((function(e,t){var r=t&&!t.nodeType&&t,i=r&&e&&!e.nodeType&&e,n=i&&i.exports===r&&w.process,a=function(){try{var e=i&&i.require&&i.require("util").types;return e||n&&n.binding&&n.binding("util")}catch(e){}}();e.exports=a})),Bt=Jt&&Jt.isTypedArray,qt=Bt?Le(Bt):Ht,Ut=Object.prototype.hasOwnProperty;var $t=function(e,t){var r=We(e),i=!r&&Ge(e),n=!r&&!i&&Zt(e),a=!r&&!i&&!n&&qt(e),o=r||i||n||a,s=o?zt(e.length,String):[],l=s.length;for(var u in e)!t&&!Ut.call(e,u)||o&&("length"==u||n&&("offset"==u||"parent"==u)||a&&("buffer"==u||"byteLength"==u||"byteOffset"==u)||Tt(u,l))||s.push(u);return s},Qt=Object.prototype;var Gt=function(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||Qt)};var Wt=function(e,t){return function(r){return e(t(r))}},Kt=Wt(Object.keys,Object),Yt=Object.prototype.hasOwnProperty;var Xt=function(e){if(!Gt(e))return Kt(e);var t=[];for(var r in Object(e))Yt.call(e,r)&&"constructor"!=r&&t.push(r);return t};var er=function(e){return dt(e)?$t(e):Xt(e)};var tr=function(e){return At(e,er,Ct)},rr=Object.prototype.hasOwnProperty;var ir=function(e,t,r,i,n,a){var o=1&r,s=tr(e),l=s.length;if(l!=tr(t).length&&!o)return!1;for(var u=l;u--;){var c=s[u];if(!(o?c in t:rr.call(t,c)))return!1}var d=a.get(e),f=a.get(t);if(d&&f)return d==t&&f==e;var v=!0;a.set(e,t),a.set(t,e);for(var _=o;++u<l;){var p=e[c=s[u]],h=t[c];if(i)var y=o?i(h,p,c,t,e,a):i(p,h,c,e,t,a);if(!(void 0===y?p===h||n(p,h,r,i,a):y)){v=!1;break}_||(_="constructor"==c)}if(v&&!_){var m=e.constructor,b=t.constructor;m==b||!("constructor"in e)||!("constructor"in t)||"function"==typeof m&&m instanceof m&&"function"==typeof b&&b instanceof b||(v=!1)}return a.delete(e),a.delete(t),v},nr=K(S,"DataView"),ar=K(S,"Promise"),or=K(S,"Set"),sr=K(S,"WeakMap"),lr="[object Map]",ur="[object Promise]",cr="[object Set]",dr="[object WeakMap]",fr="[object DataView]",vr=H(nr),_r=H(me),pr=H(ar),hr=H(or),yr=H(sr),mr=k;(nr&&mr(new nr(new ArrayBuffer(1)))!=fr||me&&mr(new me)!=lr||ar&&mr(ar.resolve())!=ur||or&&mr(new or)!=cr||sr&&mr(new sr)!=dr)&&(mr=function(e){var t=k(e),r="[object Object]"==t?e.constructor:void 0,i=r?H(r):"";if(i)switch(i){case vr:return fr;case _r:return lr;case pr:return ur;case hr:return cr;case yr:return dr}return t});var br=mr,gr="[object Arguments]",jr="[object Array]",wr="[object Object]",xr=Object.prototype.hasOwnProperty;var Sr=function(e,t,r,i,n,a){var o=We(e),s=We(t),l=o?jr:br(e),u=s?jr:br(t),c=(l=l==gr?wr:l)==wr,d=(u=u==gr?wr:u)==wr,f=l==u;if(f&&Zt(e)){if(!Zt(t))return!1;o=!0,c=!1}if(f&&!c)return a||(a=new jt),o||qt(e)?xt(e,t,r,i,n,a):Nt(e,t,l,r,i,n,a);if(!(1&r)){var v=c&&xr.call(e,"__wrapped__"),_=d&&xr.call(t,"__wrapped__");if(v||_){var p=v?e.value():e,h=_?t.value():t;return a||(a=new jt),n(p,h,r,i,a)}}return!!f&&(a||(a=new jt),ir(e,t,r,i,n,a))};var Mr=function e(t,r,i,n,a){return t===r||(null==t||null==r||!Je(t)&&!Je(r)?t!=t&&r!=r:Sr(t,r,i,n,e,a))};var Or=function(e,t){return Mr(e,t)},Er=Object.prototype.hasOwnProperty;var Fr=function(e){if(null==e)return!0;if(dt(e)&&(We(e)||"string"==typeof e||"function"==typeof e.splice||Zt(e)||qt(e)||Ge(e)))return!e.length;var t=br(e);if("[object Map]"==t||"[object Set]"==t)return!e.size;if(Gt(e))return!Xt(e).length;for(var r in e)if(Er.call(e,r))return!1;return!0};var Nr=function(e,t){for(var r=-1,i=null==e?0:e.length;++r<i&&!1!==t(e[r],r,e););return e};var Ar=function(e,t,r){"__proto__"==t&&at?at(e,t,{configurable:!0,enumerable:!0,value:r,writable:!0}):e[t]=r},Pr=Object.prototype.hasOwnProperty;var Vr=function(e,t,r){var i=e[t];Pr.call(e,t)&&ue(i,r)&&(void 0!==r||t in e)||Ar(e,t,r)};var Ir=function(e,t,r,i){var n=!r;r||(r={});for(var a=-1,o=t.length;++a<o;){var s=t[a],l=i?i(r[s],e[s],s,r,e):void 0;void 0===l&&(l=e[s]),n?Ar(r,s,l):Vr(r,s,l)}return r};var kr=function(e,t){return e&&Ir(t,er(t),e)};var Cr=function(e){var t=[];if(null!=e)for(var r in Object(e))t.push(r);return t},zr=Object.prototype.hasOwnProperty;var Dr=function(e){if(!C(e))return Cr(e);var t=Gt(e),r=[];for(var i in e)("constructor"!=i||!t&&zr.call(e,i))&&r.push(i);return r};var Zr=function(e){return dt(e)?$t(e,!0):Dr(e)};var Lr=function(e,t){return e&&Ir(t,Zr(t),e)},Tr=g((function(e,t){var r=t&&!t.nodeType&&t,i=r&&e&&!e.nodeType&&e,n=i&&i.exports===r?S.Buffer:void 0,a=n?n.allocUnsafe:void 0;e.exports=function(e,t){if(t)return e.slice();var r=e.length,i=a?a(r):new e.constructor(r);return e.copy(i),i}}));var Rr=function(e,t){var r=-1,i=e.length;for(t||(t=Array(i));++r<i;)t[r]=e[r];return t};var Hr=function(e,t){return Ir(e,Ct(e),t)},Jr=Wt(Object.getPrototypeOf,Object),Br=Object.getOwnPropertySymbols?function(e){for(var t=[];e;)He(t,Ct(e)),e=Jr(e);return t}:Vt;var qr=function(e,t){return Ir(e,Br(e),t)};var Ur=function(e){return At(e,Zr,Br)},$r=Object.prototype.hasOwnProperty;var Qr=function(e){var t=e.length,r=new e.constructor(t);return t&&"string"==typeof e[0]&&$r.call(e,"index")&&(r.index=e.index,r.input=e.input),r};var Gr=function(e){var t=new e.constructor(e.byteLength);return new St(t).set(new St(e)),t};var Wr=function(e,t){var r=t?Gr(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.byteLength)},Kr=/\w*$/;var Yr=function(e){var t=new e.constructor(e.source,Kr.exec(e));return t.lastIndex=e.lastIndex,t},Xr=M?M.prototype:void 0,ei=Xr?Xr.valueOf:void 0;var ti=function(e){return ei?Object(ei.call(e)):{}};var ri=function(e,t){var r=t?Gr(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.length)};var ii=function(e,t,r){var i=e.constructor;switch(t){case"[object ArrayBuffer]":return Gr(e);case"[object Boolean]":case"[object Date]":return new i(+e);case"[object DataView]":return Wr(e,r);case"[object Float32Array]":case"[object Float64Array]":case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":case"[object Uint16Array]":case"[object Uint32Array]":return ri(e,r);case"[object Map]":case"[object Set]":return new i;case"[object Number]":case"[object String]":return new i(e);case"[object RegExp]":return Yr(e);case"[object Symbol]":return ti(e)}},ni=Object.create,ai=function(){function e(){}return function(t){if(!C(t))return{};if(ni)return ni(t);e.prototype=t;var r=new e;return e.prototype=void 0,r}}();var oi=function(e){return"function"!=typeof e.constructor||Gt(e)?{}:ai(Jr(e))};var si=function(e){return Je(e)&&"[object Map]"==br(e)},li=Jt&&Jt.isMap,ui=li?Le(li):si;var ci=function(e){return Je(e)&&"[object Set]"==br(e)},di=Jt&&Jt.isSet,fi=di?Le(di):ci,vi="[object Arguments]",_i="[object Function]",pi="[object Object]",hi={};hi[vi]=hi["[object Array]"]=hi["[object ArrayBuffer]"]=hi["[object DataView]"]=hi["[object Boolean]"]=hi["[object Date]"]=hi["[object Float32Array]"]=hi["[object Float64Array]"]=hi["[object Int8Array]"]=hi["[object Int16Array]"]=hi["[object Int32Array]"]=hi["[object Map]"]=hi["[object Number]"]=hi[pi]=hi["[object RegExp]"]=hi["[object Set]"]=hi["[object String]"]=hi["[object Symbol]"]=hi["[object Uint8Array]"]=hi["[object Uint8ClampedArray]"]=hi["[object Uint16Array]"]=hi["[object Uint32Array]"]=!0,hi["[object Error]"]=hi[_i]=hi["[object WeakMap]"]=!1;var yi=function e(t,r,i,n,a,o){var s,l=1&r,u=2&r,c=4&r;if(i&&(s=a?i(t,n,a,o):i(t)),void 0!==s)return s;if(!C(t))return t;var d=We(t);if(d){if(s=Qr(t),!l)return Rr(t,s)}else{var f=br(t),v=f==_i||"[object GeneratorFunction]"==f;if(Zt(t))return Tr(t,l);if(f==pi||f==vi||v&&!a){if(s=u||v?{}:oi(t),!l)return u?qr(t,Lr(s,t)):Hr(t,kr(s,t))}else{if(!hi[f])return a?t:{};s=ii(t,f,l)}}o||(o=new jt);var _=o.get(t);if(_)return _;o.set(t,s),fi(t)?t.forEach((function(n){s.add(e(n,r,i,n,t,o))})):ui(t)&&t.forEach((function(n,a){s.set(a,e(n,r,i,a,t,o))}));var p=d?void 0:(c?u?Ur:tr:u?Zr:er)(t);return Nr(p||t,(function(n,a){p&&(n=t[a=n]),Vr(s,a,e(n,r,i,a,t,o))})),s};var mi=function(e){return"symbol"==typeof e||Je(e)&&"[object Symbol]"==k(e)},bi=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,gi=/^\w*$/;var ji=function(e,t){if(We(e))return!1;var r=typeof e;return!("number"!=r&&"symbol"!=r&&"boolean"!=r&&null!=e&&!mi(e))||(gi.test(e)||!bi.test(e)||null!=t&&e in Object(t))};function wi(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new TypeError("Expected a function");var r=function(){var i=arguments,n=t?t.apply(this,i):i[0],a=r.cache;if(a.has(n))return a.get(n);var o=e.apply(this,i);return r.cache=a.set(n,o)||a,o};return r.cache=new(wi.Cache||Ee),r}wi.Cache=Ee;var xi=wi;var Si=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Mi=/\\(\\)?/g,Oi=function(e){var t=xi(e,(function(e){return 500===r.size&&r.clear(),e})),r=t.cache;return t}((function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(""),e.replace(Si,(function(e,r,i,n){t.push(i?n.replace(Mi,"$1"):r||e)})),t})),Ei=M?M.prototype:void 0,Fi=Ei?Ei.toString:void 0;var Ni=function e(t){if("string"==typeof t)return t;if(We(t))return Ze(t,e)+"";if(mi(t))return Fi?Fi.call(t):"";var r=t+"";return"0"==r&&1/t==-Infinity?"-0":r};var Ai=function(e){return null==e?"":Ni(e)};var Pi=function(e,t){return We(e)?e:ji(e,t)?[e]:Oi(Ai(e))};var Vi=function(e){if("string"==typeof e||mi(e))return e;var t=e+"";return"0"==t&&1/e==-Infinity?"-0":t};var Ii=function(e,t){for(var r=0,i=(t=Pi(t,e)).length;null!=e&&r<i;)e=e[Vi(t[r++])];return r&&r==i?e:void 0};var ki=function(e,t,r){var i=-1,n=e.length;t<0&&(t=-t>n?0:n+t),(r=r>n?n:r)<0&&(r+=n),n=t>r?0:r-t>>>0,t>>>=0;for(var a=Array(n);++i<n;)a[i]=e[i+t];return a};var Ci=function(e,t){return t.length<2?e:Ii(e,ki(t,0,-1))};var zi=function(e,t){return t=Pi(t,e),null==(e=Ci(e,t))||delete e[Vi(vt(t))]},Di=Function.prototype,Zi=Object.prototype,Li=Di.toString,Ti=Zi.hasOwnProperty,Ri=Li.call(Object);var Hi=function(e){if(!Je(e)||"[object Object]"!=k(e))return!1;var t=Jr(e);if(null===t)return!0;var r=Ti.call(t,"constructor")&&t.constructor;return"function"==typeof r&&r instanceof r&&Li.call(r)==Ri};var Ji=function(e){return Hi(e)?void 0:e};var Bi=function(e){return(null==e?0:e.length)?Xe(e,1):[]};var qi=function(e){return ut(it(e,void 0,Bi),e+"")}((function(e,t){var r={};if(null==e)return r;var i=!1;t=Ze(t,(function(t){return t=Pi(t,e),i||(i=t.length>1),t})),Ir(e,Ur(e),r),i&&(r=yi(r,7,Ji));for(var n=t.length;n--;)zi(r,t[n]);return r}));or&&Ot(new or([,-0]))[1];var Ui=/[\\^$.*+?()[\]{}|]/g,$i=RegExp(Ui.source);var Qi=function(e){return(e=Ai(e))&&$i.test(e)?e.replace(Ui,"\\$&"):e};var Gi=function(e){return yi(e,5)};const Wi=e=>e.localadmin||e.localadmin||e.address&&e.address.lastIndexOf(",")<e.address.length-2&&e.address.substring(e.address.lastIndexOf(",")+2)||"",Ki=({id:e,code:t})=>t||(void 0!==e&&void 0!==e.indexOf&&-1!==e.indexOf("#")?e.substring(e.indexOf("#")+1):void 0),Yi=(e,t)=>[e||t&&t.split(",")[0],"string"==typeof t?t.replace(new RegExp(`${Qi(e)}([ ,]|$)+`),""):""];function Xi(e,t){void 0===t&&(t={});var r=t.insertAt;if(e&&"undefined"!=typeof document){var i=document.head||document.getElementsByTagName("head")[0],n=document.createElement("style");n.type="text/css","top"===r&&i.firstChild?i.insertBefore(n,i.firstChild):i.appendChild(n),n.styleSheet?n.styleSheet.cssText=e:n.appendChild(document.createTextNode(e))}}xi(((e,t=!1)=>{switch(e.layer){case"currentPosition":return[e.labelId,e.address];case"selectFromMap":case"ownLocations":case"back":return[e.labelId];case"favouritePlace":return Yi(e.name,e.address);case"favouriteVehicleRentalStation":case"bikestation":return[e.name];case"favouriteRoute":case"route-BUS":case"route-TRAM":case"route-RAIL":case"route-SUBWAY":case"route-FERRY":case"route-FUNICULAR":case"route-AIRPLANE":return!t&&e.shortName?[e.gtfsId,e.mode.toLowerCase(),e.longName]:[e.shortName,e.longName,e.agency?e.agency.name:void 0];case"venue":case"address":case"street":return[e.name,e.label.replace(new RegExp(`${Qi(e.name)}(,)?( )?`),"")];case"favouriteStop":case"stop":return t?[e.name||e.label||e.address&&e.address.split(",")[0],Wi(e)]:[e.name,e.id,Ki(e),Wi(e)];default:return[e.name||e.label||e.address&&e.address.split(",")[0],Wi(e)]}}),((e,t)=>{const r=Gi(e);return r.plain=t,r}));var en="modal-content_favourite-edit-modal-content-container__dGK6D",tn="modal-content_favourite-edit-modal-content-top__Luuv-",rn="modal-content_favourite-edit-modal-content-header__2oSv9";Xi(".modal-content_favourite-edit-modal-content-container__dGK6D {\n display: flex;\n flex-direction: column; }\n .modal-content_favourite-edit-modal-content-container__dGK6D .modal-content_favourite-edit-modal-content-top__Luuv- {\n display: flex;\n flex-direction: row;\n width: 100%;\n border-bottom: 1px solid #ddd;\n margin-bottom: 31px; }\n @media screen and (min-width: 768px) {\n .modal-content_favourite-edit-modal-content-container__dGK6D .modal-content_favourite-edit-modal-content-top__Luuv- {\n border-bottom: none;\n margin-bottom: 0; } }\n .modal-content_favourite-edit-modal-content-container__dGK6D .modal-content_favourite-edit-modal-content-top__Luuv- .modal-content_favourite-edit-modal-content-header__2oSv9 {\n display: flex;\n justify-content: center;\n align-items: center;\n width: 100%;\n height: inherit;\n font-size: 18px;\n font-weight: var(--font-weight-medium);\n line-height: normal;\n letter-spacing: -0.6px;\n color: #333;\n margin-bottom: 34px; }\n @media screen and (min-width: 768px) {\n .modal-content_favourite-edit-modal-content-container__dGK6D .modal-content_favourite-edit-modal-content-top__Luuv- .modal-content_favourite-edit-modal-content-header__2oSv9 {\n justify-content: start;\n align-items: center;\n margin-bottom: 26px;\n line-height: 1.33; } }\n");const nn=({headerText:e,renderList:t})=>d.default.createElement("div",{className:en},d.default.createElement("div",{className:tn},d.default.createElement("div",{className:rn},e)),t());"production"!==process.env.NODE_ENV&&(nn.propTypes={headerText:c.default.string.isRequired,renderList:c.default.func.isRequired});var an={"favourite-edit-list-container":"styles_favourite-edit-list-container__SM5ZN","favourite-edit-list":"styles_favourite-edit-list__VJIsM","favourite-edit-list-item":"styles_favourite-edit-list-item__VHc3F","favourite-edit-list-item-left":"styles_favourite-edit-list-item-left__iPstx","favourite-edit-list-arrow-hidden":"styles_favourite-edit-list-arrow-hidden__Of1nE","favourite-edit-list-item-drag":"styles_favourite-edit-list-item-drag__puT4i","favourite-edit-list-item-ellipsis":"styles_favourite-edit-list-item-ellipsis__ChHu0","favourite-edit-list-item-icon":"styles_favourite-edit-list-item-icon__QN7uQ",place:"styles_place__bY4jg",home:"styles_home__P1rvA",school:"styles_school__exJZw",sport:"styles_sport__rEyiE",shopping:"styles_shopping__hGZRe",work:"styles_work__PM6aB","favourite-edit-list-item-content":"styles_favourite-edit-list-item-content__qcbys","favourite-edit-list-item-name":"styles_favourite-edit-list-item-name__8HtQs","favourite-edit-list-item-address":"styles_favourite-edit-list-item-address__VxW9P","favourite-edit-list-item-right":"styles_favourite-edit-list-item-right__5dGkh","favourite-edit-list-item-edit":"styles_favourite-edit-list-item-edit__D-KxF","favourite-edit-list-item-remove":"styles_favourite-edit-list-item-remove__Ifpcz"};Xi(".styles_favourite-edit-list-container__SM5ZN {\n display: flex;\n position: relative;\n width: 100%; }\n @media screen and (min-width: 768px) {\n .styles_favourite-edit-list-container__SM5ZN {\n min-height: 286px; } }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM {\n display: flex;\n flex-direction: column;\n width: 100%;\n margin: 0;\n padding: 0;\n box-sizing: border-box; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F:not(:first-child) {\n margin-top: 9px; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F {\n display: flex;\n flex-direction: row;\n align-items: center;\n background: white;\n margin: 0;\n padding: 0;\n width: 100%;\n min-height: 50px;\n border-radius: 5px;\n border: solid 1px #d9d9d9;\n list-style: none;\n box-sizing: border-box; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-left__iPstx {\n display: flex;\n min-width: 69px;\n height: 100%;\n align-items: center; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-left__iPstx .styles_favourite-edit-list-arrow-hidden__Of1nE {\n z-index: -999;\n opacity: 0;\n width: 0;\n padding: 0;\n border: 0; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-left__iPstx .styles_favourite-edit-list-arrow-hidden__Of1nE:focus {\n font-weight: bold;\n z-index: 10;\n opacity: 1; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-left__iPstx .styles_favourite-edit-list-item-drag__puT4i {\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: 37px;\n height: 100%;\n cursor: move; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-left__iPstx .styles_favourite-edit-list-item-drag__puT4i .styles_favourite-edit-list-item-ellipsis__ChHu0 {\n height: 20px; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-left__iPstx .styles_favourite-edit-list-item-drag__puT4i .styles_favourite-edit-list-item-ellipsis__ChHu0 svg {\n fill: #888;\n height: 20px;\n transform: rotate(90deg); }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-left__iPstx .styles_favourite-edit-list-item-icon__QN7uQ {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n min-width: 24px; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-left__iPstx .styles_favourite-edit-list-item-icon__QN7uQ svg {\n position: relative;\n left: -3px;\n top: -1px;\n fill: var(--color);\n width: 22px;\n height: 22px; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-left__iPstx .styles_favourite-edit-list-item-icon__QN7uQ.styles_place__bY4jg svg {\n fill: var(--color);\n width: 24px;\n height: 24px; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-left__iPstx .styles_favourite-edit-list-item-icon__QN7uQ.styles_home__P1rvA svg, .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-left__iPstx .styles_favourite-edit-list-item-icon__QN7uQ.styles_school__exJZw svg, .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-left__iPstx .styles_favourite-edit-list-item-icon__QN7uQ.styles_sport__rEyiE svg, .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-left__iPstx .styles_favourite-edit-list-item-icon__QN7uQ.styles_shopping__hGZRe svg {\n fill: var(--color);\n width: 18px;\n height: 18px; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-left__iPstx .styles_favourite-edit-list-item-icon__QN7uQ.styles_work__PM6aB svg {\n fill: var(--color);\n width: 20px;\n height: 20px; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-content__qcbys {\n display: flex;\n flex-direction: column;\n width: calc(100% - 69px - 86px); }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-content__qcbys .styles_favourite-edit-list-item-name__8HtQs {\n margin: 0;\n font-weight: var(--font-weight-medium);\n color: #333;\n font-size: 15px;\n line-height: 1;\n letter-spacing: -0.6px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-content__qcbys .styles_favourite-edit-list-item-address__VxW9P {\n margin: 3px 0 0;\n color: #666;\n font-size: 12px;\n font-weight: 400;\n line-height: 1;\n letter-spacing: -0.48px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-content__qcbys .styles_favourite-edit-list-item-address__VxW9P:empty {\n margin-top: 0; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-right__5dGkh {\n display: flex;\n min-width: 86px;\n align-items: center;\n justify-content: space-evenly; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-right__5dGkh .styles_favourite-edit-list-item-edit__D-KxF {\n display: flex;\n justify-content: center;\n align-items: center;\n width: 22px;\n height: 48px;\n cursor: pointer; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-right__5dGkh .styles_favourite-edit-list-item-edit__D-KxF svg {\n fill: #888;\n width: 22px;\n height: 22px; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-right__5dGkh .styles_favourite-edit-list-item-remove__Ifpcz {\n display: flex;\n justify-content: center;\n align-items: center;\n cursor: pointer;\n width: 18px;\n height: 48px; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-right__5dGkh .styles_favourite-edit-list-item-remove__Ifpcz svg {\n fill: #888;\n width: 18px;\n height: 20px; }\n .styles_favourite-edit-list-container__SM5ZN > div {\n width: 100%; }\n");const on={de:{cancel:"Abbrechen",delete:"Löschen","delete-place-header":"Wollen Sie den Favoriten löschen?","delete-place-name":"Lösche Favorit: {{favourite.name}}","edit-places":"Bearbeite Favoriten","edit-place-name":"Bearbeite Favorit: {{favourite.name}}","edit-modal-on-open":"Favoriten bearbeiten.","choose-icon":"Wähle das Symbol für diesen Ort","close-modal":"Schließe den Dialog","input-placeholder":"Wählen Sie einen Name für diesen Ort (optional)",save:"Speichern","save-place":"Favorit speichern"},en:{cancel:"Cancel",delete:"Delete","delete-place-header":"Do you want to delete the place?","delete-place-name":"Delete place: {{favourite.name}}","edit-places":"Edit places","edit-place-name":"Edit place: {{favourite.name}}","edit-modal-on-open":"Favourite editing modal.","choose-icon":"Select the place's icon","close-modal":"Close the modal","input-placeholder":"Give the name a place (optional)",save:"Save","save-place":"Save place",up:"Move favourite up",down:"Move favourite down"},fi:{cancel:"Peruuta",delete:"Poista","delete-place-header":"Haluatko poistaa paikan?","delete-place-name":"Poista paikka: {{favourite.name}}","edit-places":"Muokkaa paikkoja","edit-place-name":"Muokkaa paikkaa: {{favourite.name}}","edit-modal-on-open":"Suosikkien muokkaus modaali.","choose-icon":"Valitse paikan kuvake","close-modal":"Sulje modaali","input-placeholder":"Anna paikalle nimi (vapaaehtoinen)",save:"Tallenna","save-place":"Tallenna paikka",up:"Siirrä suosikkisijaintia ylöpäin",down:"Siirrä suosikkisijaintia alaspäin"},pl:{cancel:"Anuluj",delete:"Usuń","delete-place-header":"Czy na pewno chcesz usunąć to miejsce?","delete-place-name":"Usuń miejsce: {{favourite.name}}","edit-places":"Edytuj miejsca","edit-place-name":"Edytuj miejsce: {{favourite.name}}","edit-modal-on-open":"Modal edycji ulubionych.","choose-icon":"Wybierz ikonę miejsca","close-modal":"Zamknij modal","input-placeholder":"Nadaj nazwę miejscu (opcjonalne)",save:"Zapisz","save-place":"Zapisz miejsce",up:"Przenieś ulubione wyżej",down:"Przenieś ulubione niżej"},sv:{cancel:"Avbryt",delete:"Ta bort","delete-place-header":"Vill du ta bort platsen?","delete-place-name":"Ta bort platsen: {{favourite.name}}","edit-places":"Redigera platser","edit-place-name":"Edit place: {{favourite.name}}","edit-modal-on-open":"Favourite editing modal.","choose-icon":"Välj platsens ikon","close-modal":"Stäng modalen","input-placeholder":"Ange platsens namn (frivilligt)",save:"Spara","save-place":"Spara plats",up:"Flytta favoriten uppåt",down:"Flytta favoriten nedåt"}};f.default.init({lng:"fi",fallbackLng:"fi",defaultNS:"translation",interpolation:{escapeValue:!1}});const sn=e=>{const t=e&&(e.key||e.which||e.keyCode)||"";return!(!t||![13," ","Spacebar"].concat([32,"Enter"]).includes(t))&&(e.preventDefault(),!0)};class ln extends d.default.Component{constructor(e){super(e),b(this,"moveFavourite",((e,t)=>{const{favourites:r}=this.state,i=[...r],n=i[e+t];i[e+t]=i[e],i[e]=n,this.setState({favourites:i})})),b(this,"renderFavouriteListItem",((e,t)=>{const r=e.selectedIconId?e.selectedIconId.replace("icon-icon_",""):"place",[i,n]=Yi(e.name,e.address);return d.default.createElement("li",{className:j(an["favourite-edit-list-item"]),key:e.favouriteId},d.default.createElement("div",{className:an["favourite-edit-list-item-left"]},t>0&&d.default.createElement("button",{className:an["favourite-edit-list-arrow-hidden"],type:"button","aria-label":f.default.t("up"),onClick:()=>{this.moveFavourite(t,-1)}},"↑"),t<this.state.favourites.length-1&&d.default.createElement("button",{className:an["favourite-edit-list-arrow-hidden"],type:"button","aria-label":f.default.t("down"),onClick:()=>{this.moveFavourite(t,1)}},"↓"),d.default.createElement("div",{className:an["favourite-edit-list-item-drag"]},d.default.createElement("div",{className:an["favourite-edit-list-item-ellipsis"]},d.default.createElement(p.default,{img:"ellipsis"}))),d.default.createElement("div",{className:j(an["favourite-edit-list-item-icon"],an[r])},d.default.createElement(p.default,{img:r,color:this.props.color}))),d.default.createElement("div",{className:an["favourite-edit-list-item-content"]},d.default.createElement("p",{className:an["favourite-edit-list-item-name"]},i),d.default.createElement("p",{className:an["favourite-edit-list-item-address"]},n)),d.default.createElement("div",{className:an["favourite-edit-list-item-right"]},d.default.createElement("div",{role:"button",tabIndex:"0","aria-label":f.default.t("edit-place-name",{favourite:e}),className:an["favourite-edit-list-item-edit"],onClick:()=>this.props.onEditSelected(e),onKeyDown:t=>{sn(t)&&this.props.onEditSelected(e)}},d.default.createElement(p.default,{img:"edit"})),d.default.createElement("div",{role:"button",tabIndex:"0","aria-label":f.default.t("delete-place-name",{favourite:e}),className:an["favourite-edit-list-item-remove"],onClick:()=>this.setState({selectedFavourite:e,showDeletePlaceModal:!0}),onKeyDown:t=>{sn(t)&&this.setState({selectedFavourite:e,showDeletePlaceModal:!0})}},d.default.createElement(p.default,{img:"trash"}))))})),b(this,"renderFavouriteList",(()=>{const{isLoading:e}=this.props,{favourites:t}=this.state;return d.default.createElement("div",{className:an["favourite-edit-list-container"]},d.default.createElement(v.default,{visible:e},d.default.createElement(i.ReactSortable,{className:an["favourite-edit-list"],tag:"ul",list:t,setList:e=>this.setState({favourites:e}),animation:200,handle:`.${an["favourite-edit-list-item-left"]}`},t.map(((e,t)=>this.renderFavouriteListItem(e,t))))))})),b(this,"renderDeleteFavouriteModal",(e=>d.default.createElement(h.default,{appElement:this.props.appElement,headerText:f.default.t("delete-place-header"),handleClose:()=>this.setState({selectedFavourite:null,showDeletePlaceModal:!1},(()=>this.props.handleClose())),isModalOpen:this.state.showDeletePlaceModal,dialogContent:e?`${e.name}: ${e.address}`:"",primaryButtonText:f.default.t("delete"),primaryButtonOnClick:()=>{this.props.deleteFavourite(e),this.setState({selectedFavourite:null,showDeletePlaceModal:!1})},secondaryButtonText:f.default.t("cancel"),secondaryButtonOnClick:()=>this.setState({selectedFavourite:null,showDeletePlaceModal:!1}),color:this.props.color,hoverColor:this.props.hoverColor,fontWeights:this.props.fontWeights,lang:this.props.lang}))),b(this,"closeModal",(()=>{this.props.handleClose();const e=this.state.favourites.map((e=>qi(e,["chosen","selected"])));Or(e,this.props.favourites)||this.props.updateFavourites(e)})),b(this,"renderModalContent",(()=>{const{color:e,hoverColor:t,fontWeights:r}=this.props,i={headerText:f.default.t("edit-places"),renderList:()=>this.renderFavouriteList()};return d.default.createElement("div",{style:{"--color":`${e}`,"--hover-color":`${t}`,"--font-weight-medium":r.medium}},d.default.createElement(nn,i))})),f.default.changeLanguage(e.lang),this.state={favourites:e.favourites,showDeletePlaceModal:!1,selectedFavourite:null},Object.keys(on).forEach((e=>{f.default.addResourceBundle(e,"translation",on[e])}))}static getDerivedStateFromProps(e,t){const r=e.favourites,i=t.favourites;return Fr(_t(r,i,Or))&&Fr(_t(i,r,Or))?null:(Fr(r)&&e.handleClose(),{favourites:r})}componentDidUpdate(){f.default.language!==this.props.lang&&f.default.changeLanguage(this.props.lang)}render(){const{isMobile:e}=this.props,{showDeletePlaceModal:t,selectedFavourite:r}=this.state;return d.default.createElement("div",null,e&&d.default.createElement(_.default,{appElement:this.props.appElement,contentLabel:f.default.t("edit-modal-on-open"),closeButtonLabel:f.default.t("close-modal"),variant:"large",isOpen:this.props.isModalOpen,onCrossClick:this.closeModal},this.renderDeleteFavouriteModal(r),this.renderModalContent()),!e&&d.default.createElement(_.default,{appElement:this.props.appElement,contentLabel:f.default.t("edit-modal-on-open"),closeButtonLabel:f.default.t("close-modal"),variant:"small",isOpen:this.props.isModalOpen,onCrossClick:this.closeModal},this.renderDeleteFavouriteModal(r),!t&&this.renderModalContent()))}}b(ln,"defaultProps",{lang:"fi",isMobile:!1,color:"#007ac9",hoverColor:"#0062a1",fontWeights:{medium:500}}),"production"!==process.env.NODE_ENV&&(ln.propTypes={handleClose:c.default.func.isRequired,updateFavourites:c.default.func.isRequired,deleteFavourite:c.default.func.isRequired,onEditSelected:c.default.func.isRequired,favourites:c.default.arrayOf(c.default.shape({type:c.default.string,address:c.default.string,gtfsId:c.default.string,gid:c.default.string,lat:c.default.number,lon:c.default.number,name:c.default.string,selectedIconId:c.default.string,favouriteId:c.default.string,layer:c.default.string})).isRequired,lang:c.default.string,appElement:c.default.string.isRequired,isModalOpen:c.default.bool.isRequired,isMobile:c.default.bool,isLoading:c.default.bool.isRequired,color:c.default.string,hoverColor:c.default.string,fontWeights:c.default.shape({medium:c.default.number})}),e.default=ln,Object.defineProperty(e,"__esModule",{value:!0})}));
|
|
8
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZGV2ZWxvcG1lbnQuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Qcm9wZXJ0eUtleS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b1ByaW1pdGl2ZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZnJlZUdsb2JhbC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3Jvb3QuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19TeW1ib2wuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRSYXdUYWcuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19vYmplY3RUb1N0cmluZy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VHZXRUYWcuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzT2JqZWN0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0Z1bmN0aW9uLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNNYXNrZWQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3JlSnNEYXRhLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fdG9Tb3VyY2UuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNOYXRpdmUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRWYWx1ZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldE5hdGl2ZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25hdGl2ZUNyZWF0ZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hDbGVhci5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hEZWxldGUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoR2V0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaEhhcy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hTZXQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19IYXNoLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlQ2xlYXIuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2VxLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNzb2NJbmRleE9mLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlRGVsZXRlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlR2V0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlSGFzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlU2V0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fTGlzdENhY2hlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fTWFwLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVDbGVhci5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzS2V5YWJsZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldE1hcERhdGEuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZURlbGV0ZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlR2V0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVIYXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZVNldC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX01hcENhY2hlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0Q2FjaGVBZGQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRDYWNoZUhhcy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1NldENhY2hlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUZpbmRJbmRleC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc05hTi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0cmljdEluZGV4T2YuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSW5kZXhPZi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5SW5jbHVkZXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheUluY2x1ZGVzV2l0aC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5TWFwLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVVuYXJ5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2FjaGVIYXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlRGlmZmVyZW5jZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5UHVzaC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNPYmplY3RMaWtlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzQXJndW1lbnRzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FyZ3VtZW50cy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcnJheS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzRmxhdHRlbmFibGUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlRmxhdHRlbi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaWRlbnRpdHkuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcHBseS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX292ZXJSZXN0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9jb25zdGFudC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2RlZmluZVByb3BlcnR5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVNldFRvU3RyaW5nLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2hvcnRPdXQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRUb1N0cmluZy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNMZW5ndGguanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJyYXlMaWtlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5TGlrZU9iamVjdC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvbGFzdC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZGlmZmVyZW5jZVdpdGguanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlUmVzdC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrQ2xlYXIuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0RlbGV0ZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrR2V0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tIYXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja1NldC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1N0YWNrLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlTb21lLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZXF1YWxBcnJheXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19VaW50OEFycmF5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwVG9BcnJheS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3NldFRvQXJyYXkuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19lcXVhbEJ5VGFnLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUdldEFsbEtleXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheUZpbHRlci5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvc3R1YkFycmF5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0U3ltYm9scy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VUaW1lcy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvc3R1YkZhbHNlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0J1ZmZlci5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzSW5kZXguanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNUeXBlZEFycmF5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbm9kZVV0aWwuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzVHlwZWRBcnJheS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5TGlrZUtleXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc1Byb3RvdHlwZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX292ZXJBcmcuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19uYXRpdmVLZXlzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUtleXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2tleXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRBbGxLZXlzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZXF1YWxPYmplY3RzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fRGF0YVZpZXcuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19Qcm9taXNlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU2V0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fV2Vha01hcC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFRhZy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc0VxdWFsRGVlcC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc0VxdWFsLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0VxdWFsLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0VtcHR5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlFYWNoLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUFzc2lnblZhbHVlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNzaWduVmFsdWUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5T2JqZWN0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUFzc2lnbi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25hdGl2ZUtleXNJbi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VLZXlzSW4uanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2tleXNJbi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VBc3NpZ25Jbi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nsb25lQnVmZmVyLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29weUFycmF5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29weVN5bWJvbHMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRQcm90b3R5cGUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRTeW1ib2xzSW4uanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5U3ltYm9sc0luLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0QWxsS2V5c0luLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faW5pdENsb25lQXJyYXkuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jbG9uZUFycmF5QnVmZmVyLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVEYXRhVmlldy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nsb25lUmVnRXhwLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVTeW1ib2wuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jbG9uZVR5cGVkQXJyYXkuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pbml0Q2xvbmVCeVRhZy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VDcmVhdGUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pbml0Q2xvbmVPYmplY3QuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNNYXAuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzTWFwLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzU2V0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1NldC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VDbG9uZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNTeW1ib2wuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0tleS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvbWVtb2l6ZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21lbW9pemVDYXBwZWQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdHJpbmdUb1BhdGguanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVG9TdHJpbmcuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL3RvU3RyaW5nLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2FzdFBhdGguanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL190b0tleS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VHZXQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlU2xpY2UuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19wYXJlbnQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVW5zZXQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzUGxhaW5PYmplY3QuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jdXN0b21PbWl0Q2xvbmUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2ZsYXR0ZW4uanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19mbGF0UmVzdC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvb21pdC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NyZWF0ZVNldC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZXNjYXBlUmVnRXhwLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9jbG9uZURlZXAuanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC11bmlxLWJ5LWxhYmVsL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWluamVjdC9kaXN0L3N0eWxlLWluamVjdC5lcy5qcyIsIi4uL3NyYy9oZWxwZXJzL01vZGFsQ29udGVudC5qcyIsIi4uL3NyYy9oZWxwZXJzL3RyYW5zbGF0aW9ucy5qcyIsIi4uL3NyYy9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdHlwZW9mKG8pIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gdHlwZW9mIG87XG4gIH0gOiBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvO1xuICB9LCBfdHlwZW9mKG8pO1xufSIsImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuaW1wb3J0IHRvUHJpbWl0aXZlIGZyb20gXCIuL3RvUHJpbWl0aXZlLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0b1Byb3BlcnR5S2V5KHQpIHtcbiAgdmFyIGkgPSB0b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTtcbiAgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBTdHJpbmcoaSk7XG59IiwiaW1wb3J0IF90eXBlb2YgZnJvbSBcIi4vdHlwZW9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0b1ByaW1pdGl2ZSh0LCByKSB7XG4gIGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0O1xuICB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTtcbiAgaWYgKHZvaWQgMCAhPT0gZSkge1xuICAgIHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpO1xuICAgIGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTtcbiAgfVxuICByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpO1xufSIsImltcG9ydCB0b1Byb3BlcnR5S2V5IGZyb20gXCIuL3RvUHJvcGVydHlLZXkuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHtcbiAga2V5ID0gdG9Qcm9wZXJ0eUtleShrZXkpO1xuICBpZiAoa2V5IGluIG9iaikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgfVxuICByZXR1cm4gb2JqO1xufSIsIi8qIVxuICBDb3B5cmlnaHQgKGMpIDIwMTcgSmVkIFdhdHNvbi5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlIChNSVQpLCBzZWVcbiAgaHR0cDovL2plZHdhdHNvbi5naXRodWIuaW8vY2xhc3NuYW1lc1xuKi9cbi8qIGdsb2JhbCBkZWZpbmUgKi9cblxuKGZ1bmN0aW9uICgpIHtcblx0J3VzZSBzdHJpY3QnO1xuXG5cdHZhciBoYXNPd24gPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxuXHRmdW5jdGlvbiBjbGFzc05hbWVzICgpIHtcblx0XHR2YXIgY2xhc3NlcyA9IFtdO1xuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBhcmcgPSBhcmd1bWVudHNbaV07XG5cdFx0XHRpZiAoIWFyZykgY29udGludWU7XG5cblx0XHRcdHZhciBhcmdUeXBlID0gdHlwZW9mIGFyZztcblxuXHRcdFx0aWYgKGFyZ1R5cGUgPT09ICdzdHJpbmcnIHx8IGFyZ1R5cGUgPT09ICdudW1iZXInKSB7XG5cdFx0XHRcdGNsYXNzZXMucHVzaChhcmcpO1xuXHRcdFx0fSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGFyZykgJiYgYXJnLmxlbmd0aCkge1xuXHRcdFx0XHR2YXIgaW5uZXIgPSBjbGFzc05hbWVzLmFwcGx5KG51bGwsIGFyZyk7XG5cdFx0XHRcdGlmIChpbm5lcikge1xuXHRcdFx0XHRcdGNsYXNzZXMucHVzaChpbm5lcik7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoYXJnVHlwZSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0Zm9yICh2YXIga2V5IGluIGFyZykge1xuXHRcdFx0XHRcdGlmIChoYXNPd24uY2FsbChhcmcsIGtleSkgJiYgYXJnW2tleV0pIHtcblx0XHRcdFx0XHRcdGNsYXNzZXMucHVzaChrZXkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBjbGFzc2VzLmpvaW4oJyAnKTtcblx0fVxuXG5cdGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuXHRcdGNsYXNzTmFtZXMuZGVmYXVsdCA9IGNsYXNzTmFtZXM7XG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBjbGFzc05hbWVzO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGRlZmluZS5hbWQgPT09ICdvYmplY3QnICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyByZWdpc3RlciBhcyAnY2xhc3NuYW1lcycsIGNvbnNpc3RlbnQgd2l0aCBucG0gcGFja2FnZSBuYW1lXG5cdFx0ZGVmaW5lKCdjbGFzc25hbWVzJywgW10sIGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiBjbGFzc05hbWVzO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHdpbmRvdy5jbGFzc05hbWVzID0gY2xhc3NOYW1lcztcblx0fVxufSgpKTtcbiIsIi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZ2xvYmFsYCBmcm9tIE5vZGUuanMuICovXG52YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsICYmIGdsb2JhbC5PYmplY3QgPT09IE9iamVjdCAmJiBnbG9iYWw7XG5cbm1vZHVsZS5leHBvcnRzID0gZnJlZUdsb2JhbDtcbiIsInZhciBmcmVlR2xvYmFsID0gcmVxdWlyZSgnLi9fZnJlZUdsb2JhbCcpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHNlbGZgLiAqL1xudmFyIGZyZWVTZWxmID0gdHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZiAmJiBzZWxmLk9iamVjdCA9PT0gT2JqZWN0ICYmIHNlbGY7XG5cbi8qKiBVc2VkIGFzIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgb2JqZWN0LiAqL1xudmFyIHJvb3QgPSBmcmVlR2xvYmFsIHx8IGZyZWVTZWxmIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gcm9vdDtcbiIsInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBTeW1ib2wgPSByb290LlN5bWJvbDtcblxubW9kdWxlLmV4cG9ydHMgPSBTeW1ib2w7XG4iLCJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVXNlZCB0byByZXNvbHZlIHRoZVxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gKiBvZiB2YWx1ZXMuXG4gKi9cbnZhciBuYXRpdmVPYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1Ub1N0cmluZ1RhZyA9IFN5bWJvbCA/IFN5bWJvbC50b1N0cmluZ1RhZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VHZXRUYWdgIHdoaWNoIGlnbm9yZXMgYFN5bWJvbC50b1N0cmluZ1RhZ2AgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHJhdyBgdG9TdHJpbmdUYWdgLlxuICovXG5mdW5jdGlvbiBnZXRSYXdUYWcodmFsdWUpIHtcbiAgdmFyIGlzT3duID0gaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgc3ltVG9TdHJpbmdUYWcpLFxuICAgICAgdGFnID0gdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuXG4gIHRyeSB7XG4gICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdW5kZWZpbmVkO1xuICAgIHZhciB1bm1hc2tlZCA9IHRydWU7XG4gIH0gY2F0Y2ggKGUpIHt9XG5cbiAgdmFyIHJlc3VsdCA9IG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xuICBpZiAodW5tYXNrZWQpIHtcbiAgICBpZiAoaXNPd24pIHtcbiAgICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHRhZztcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRSYXdUYWc7XG4iLCIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIHVzaW5nIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIG9iamVjdFRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvYmplY3RUb1N0cmluZztcbiIsInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKSxcbiAgICBnZXRSYXdUYWcgPSByZXF1aXJlKCcuL19nZXRSYXdUYWcnKSxcbiAgICBvYmplY3RUb1N0cmluZyA9IHJlcXVpcmUoJy4vX29iamVjdFRvU3RyaW5nJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBudWxsVGFnID0gJ1tvYmplY3QgTnVsbF0nLFxuICAgIHVuZGVmaW5lZFRhZyA9ICdbb2JqZWN0IFVuZGVmaW5lZF0nO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1Ub1N0cmluZ1RhZyA9IFN5bWJvbCA/IFN5bWJvbC50b1N0cmluZ1RhZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2V0VGFnYCB3aXRob3V0IGZhbGxiYWNrcyBmb3IgYnVnZ3kgZW52aXJvbm1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGJhc2VHZXRUYWcodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZFRhZyA6IG51bGxUYWc7XG4gIH1cbiAgcmV0dXJuIChzeW1Ub1N0cmluZ1RhZyAmJiBzeW1Ub1N0cmluZ1RhZyBpbiBPYmplY3QodmFsdWUpKVxuICAgID8gZ2V0UmF3VGFnKHZhbHVlKVxuICAgIDogb2JqZWN0VG9TdHJpbmcodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VHZXRUYWc7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHRoZVxuICogW2xhbmd1YWdlIHR5cGVdKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1lY21hc2NyaXB0LWxhbmd1YWdlLXR5cGVzKVxuICogb2YgYE9iamVjdGAuIChlLmcuIGFycmF5cywgZnVuY3Rpb25zLCBvYmplY3RzLCByZWdleGVzLCBgbmV3IE51bWJlcigwKWAsIGFuZCBgbmV3IFN0cmluZygnJylgKVxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0KHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChfLm5vb3ApO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgKHR5cGUgPT0gJ29iamVjdCcgfHwgdHlwZSA9PSAnZnVuY3Rpb24nKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc09iamVjdDtcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXN5bmNUYWcgPSAnW29iamVjdCBBc3luY0Z1bmN0aW9uXScsXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgZ2VuVGFnID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJyxcbiAgICBwcm94eVRhZyA9ICdbb2JqZWN0IFByb3h5XSc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBGdW5jdGlvbmAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgZnVuY3Rpb24sIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0Z1bmN0aW9uKF8pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNGdW5jdGlvbigvYWJjLyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3QodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIFRoZSB1c2Ugb2YgYE9iamVjdCN0b1N0cmluZ2AgYXZvaWRzIGlzc3VlcyB3aXRoIHRoZSBgdHlwZW9mYCBvcGVyYXRvclxuICAvLyBpbiBTYWZhcmkgOSB3aGljaCByZXR1cm5zICdvYmplY3QnIGZvciB0eXBlZCBhcnJheXMgYW5kIG90aGVyIGNvbnN0cnVjdG9ycy5cbiAgdmFyIHRhZyA9IGJhc2VHZXRUYWcodmFsdWUpO1xuICByZXR1cm4gdGFnID09IGZ1bmNUYWcgfHwgdGFnID09IGdlblRhZyB8fCB0YWcgPT0gYXN5bmNUYWcgfHwgdGFnID09IHByb3h5VGFnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRnVuY3Rpb247XG4iLCJ2YXIgY29yZUpzRGF0YSA9IHJlcXVpcmUoJy4vX2NvcmVKc0RhdGEnKTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1ldGhvZHMgbWFzcXVlcmFkaW5nIGFzIG5hdGl2ZS4gKi9cbnZhciBtYXNrU3JjS2V5ID0gKGZ1bmN0aW9uKCkge1xuICB2YXIgdWlkID0gL1teLl0rJC8uZXhlYyhjb3JlSnNEYXRhICYmIGNvcmVKc0RhdGEua2V5cyAmJiBjb3JlSnNEYXRhLmtleXMuSUVfUFJPVE8gfHwgJycpO1xuICByZXR1cm4gdWlkID8gKCdTeW1ib2woc3JjKV8xLicgKyB1aWQpIDogJyc7XG59KCkpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgZnVuY2AgaGFzIGl0cyBzb3VyY2UgbWFza2VkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgZnVuY2AgaXMgbWFza2VkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzTWFza2VkKGZ1bmMpIHtcbiAgcmV0dXJuICEhbWFza1NyY0tleSAmJiAobWFza1NyY0tleSBpbiBmdW5jKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc01hc2tlZDtcbiIsInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogVXNlZCB0byBkZXRlY3Qgb3ZlcnJlYWNoaW5nIGNvcmUtanMgc2hpbXMuICovXG52YXIgY29yZUpzRGF0YSA9IHJvb3RbJ19fY29yZS1qc19zaGFyZWRfXyddO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcmVKc0RhdGE7XG4iLCIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKipcbiAqIENvbnZlcnRzIGBmdW5jYCB0byBpdHMgc291cmNlIGNvZGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBzb3VyY2UgY29kZS5cbiAqL1xuZnVuY3Rpb24gdG9Tb3VyY2UoZnVuYykge1xuICBpZiAoZnVuYyAhPSBudWxsKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBmdW5jVG9TdHJpbmcuY2FsbChmdW5jKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gKGZ1bmMgKyAnJyk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgfVxuICByZXR1cm4gJyc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9Tb3VyY2U7XG4iLCJ2YXIgaXNGdW5jdGlvbiA9IHJlcXVpcmUoJy4vaXNGdW5jdGlvbicpLFxuICAgIGlzTWFza2VkID0gcmVxdWlyZSgnLi9faXNNYXNrZWQnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKSxcbiAgICB0b1NvdXJjZSA9IHJlcXVpcmUoJy4vX3RvU291cmNlJyk7XG5cbi8qKlxuICogVXNlZCB0byBtYXRjaCBgUmVnRXhwYFxuICogW3N5bnRheCBjaGFyYWN0ZXJzXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wYXR0ZXJucykuXG4gKi9cbnZhciByZVJlZ0V4cENoYXIgPSAvW1xcXFxeJC4qKz8oKVtcXF17fXxdL2c7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBob3N0IGNvbnN0cnVjdG9ycyAoU2FmYXJpKS4gKi9cbnZhciByZUlzSG9zdEN0b3IgPSAvXlxcW29iamVjdCAuKz9Db25zdHJ1Y3RvclxcXSQvO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxuICAgIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGlmIGEgbWV0aG9kIGlzIG5hdGl2ZS4gKi9cbnZhciByZUlzTmF0aXZlID0gUmVnRXhwKCdeJyArXG4gIGZ1bmNUb1N0cmluZy5jYWxsKGhhc093blByb3BlcnR5KS5yZXBsYWNlKHJlUmVnRXhwQ2hhciwgJ1xcXFwkJicpXG4gIC5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcXFxcKCl8IGZvciAuKz8oPz1cXFxcXFxdKS9nLCAnJDEuKj8nKSArICckJ1xuKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc05hdGl2ZWAgd2l0aG91dCBiYWQgc2hpbSBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBuYXRpdmUgZnVuY3Rpb24sXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNOYXRpdmUodmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkgfHwgaXNNYXNrZWQodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBwYXR0ZXJuID0gaXNGdW5jdGlvbih2YWx1ZSkgPyByZUlzTmF0aXZlIDogcmVJc0hvc3RDdG9yO1xuICByZXR1cm4gcGF0dGVybi50ZXN0KHRvU291cmNlKHZhbHVlKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzTmF0aXZlO1xuIiwiLyoqXG4gKiBHZXRzIHRoZSB2YWx1ZSBhdCBga2V5YCBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBwcm9wZXJ0eSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gZ2V0VmFsdWUob2JqZWN0LCBrZXkpIHtcbiAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W2tleV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0VmFsdWU7XG4iLCJ2YXIgYmFzZUlzTmF0aXZlID0gcmVxdWlyZSgnLi9fYmFzZUlzTmF0aXZlJyksXG4gICAgZ2V0VmFsdWUgPSByZXF1aXJlKCcuL19nZXRWYWx1ZScpO1xuXG4vKipcbiAqIEdldHMgdGhlIG5hdGl2ZSBmdW5jdGlvbiBhdCBga2V5YCBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBtZXRob2QgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGZ1bmN0aW9uIGlmIGl0J3MgbmF0aXZlLCBlbHNlIGB1bmRlZmluZWRgLlxuICovXG5mdW5jdGlvbiBnZXROYXRpdmUob2JqZWN0LCBrZXkpIHtcbiAgdmFyIHZhbHVlID0gZ2V0VmFsdWUob2JqZWN0LCBrZXkpO1xuICByZXR1cm4gYmFzZUlzTmF0aXZlKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldE5hdGl2ZTtcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIG5hdGl2ZUNyZWF0ZSA9IGdldE5hdGl2ZShPYmplY3QsICdjcmVhdGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBuYXRpdmVDcmVhdGU7XG4iLCJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgaGFzaC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKi9cbmZ1bmN0aW9uIGhhc2hDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IG5hdGl2ZUNyZWF0ZSA/IG5hdGl2ZUNyZWF0ZShudWxsKSA6IHt9O1xuICB0aGlzLnNpemUgPSAwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hDbGVhcjtcbiIsIi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGhhc2guXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7T2JqZWN0fSBoYXNoIFRoZSBoYXNoIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBoYXNoRGVsZXRlKGtleSkge1xuICB2YXIgcmVzdWx0ID0gdGhpcy5oYXMoa2V5KSAmJiBkZWxldGUgdGhpcy5fX2RhdGFfX1trZXldO1xuICB0aGlzLnNpemUgLT0gcmVzdWx0ID8gMSA6IDA7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaERlbGV0ZTtcbiIsInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEdldHMgdGhlIGhhc2ggdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gaGFzaEdldChrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICBpZiAobmF0aXZlQ3JlYXRlKSB7XG4gICAgdmFyIHJlc3VsdCA9IGRhdGFba2V5XTtcbiAgICByZXR1cm4gcmVzdWx0ID09PSBIQVNIX1VOREVGSU5FRCA/IHVuZGVmaW5lZCA6IHJlc3VsdDtcbiAgfVxuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpID8gZGF0YVtrZXldIDogdW5kZWZpbmVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hHZXQ7XG4iLCJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgaGFzaCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzaEhhcyhrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICByZXR1cm4gbmF0aXZlQ3JlYXRlID8gKGRhdGFba2V5XSAhPT0gdW5kZWZpbmVkKSA6IGhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoSGFzO1xuIiwidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKlxuICogU2V0cyB0aGUgaGFzaCBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGhhc2ggaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIGhhc2hTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIHRoaXMuc2l6ZSArPSB0aGlzLmhhcyhrZXkpID8gMCA6IDE7XG4gIGRhdGFba2V5XSA9IChuYXRpdmVDcmVhdGUgJiYgdmFsdWUgPT09IHVuZGVmaW5lZCkgPyBIQVNIX1VOREVGSU5FRCA6IHZhbHVlO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoU2V0O1xuIiwidmFyIGhhc2hDbGVhciA9IHJlcXVpcmUoJy4vX2hhc2hDbGVhcicpLFxuICAgIGhhc2hEZWxldGUgPSByZXF1aXJlKCcuL19oYXNoRGVsZXRlJyksXG4gICAgaGFzaEdldCA9IHJlcXVpcmUoJy4vX2hhc2hHZXQnKSxcbiAgICBoYXNoSGFzID0gcmVxdWlyZSgnLi9faGFzaEhhcycpLFxuICAgIGhhc2hTZXQgPSByZXF1aXJlKCcuL19oYXNoU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGhhc2ggb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBIYXNoKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYEhhc2hgLlxuSGFzaC5wcm90b3R5cGUuY2xlYXIgPSBoYXNoQ2xlYXI7XG5IYXNoLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBoYXNoRGVsZXRlO1xuSGFzaC5wcm90b3R5cGUuZ2V0ID0gaGFzaEdldDtcbkhhc2gucHJvdG90eXBlLmhhcyA9IGhhc2hIYXM7XG5IYXNoLnByb3RvdHlwZS5zZXQgPSBoYXNoU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEhhc2g7XG4iLCIvKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGxpc3QgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUNsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gW107XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlQ2xlYXI7XG4iLCIvKipcbiAqIFBlcmZvcm1zIGFcbiAqIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBjb21wYXJpc29uIGJldHdlZW4gdHdvIHZhbHVlcyB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmUgZXF1aXZhbGVudC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcbiAqIHZhciBvdGhlciA9IHsgJ2EnOiAxIH07XG4gKlxuICogXy5lcShvYmplY3QsIG9iamVjdCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5lcShvYmplY3QsIG90aGVyKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5lcSgnYScsICdhJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5lcSgnYScsIE9iamVjdCgnYScpKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5lcShOYU4sIE5hTik7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGVxKHZhbHVlLCBvdGhlcikge1xuICByZXR1cm4gdmFsdWUgPT09IG90aGVyIHx8ICh2YWx1ZSAhPT0gdmFsdWUgJiYgb3RoZXIgIT09IG90aGVyKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlcTtcbiIsInZhciBlcSA9IHJlcXVpcmUoJy4vZXEnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBpbmRleCBhdCB3aGljaCB0aGUgYGtleWAgaXMgZm91bmQgaW4gYGFycmF5YCBvZiBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSBrZXkgVGhlIGtleSB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gYXNzb2NJbmRleE9mKGFycmF5LCBrZXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgaWYgKGVxKGFycmF5W2xlbmd0aF1bMF0sIGtleSkpIHtcbiAgICAgIHJldHVybiBsZW5ndGg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhc3NvY0luZGV4T2Y7XG4iLCJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBhcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzcGxpY2UgPSBhcnJheVByb3RvLnNwbGljZTtcblxuLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgbGlzdCBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlRGVsZXRlKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIGlmIChpbmRleCA8IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIGxhc3RJbmRleCA9IGRhdGEubGVuZ3RoIC0gMTtcbiAgaWYgKGluZGV4ID09IGxhc3RJbmRleCkge1xuICAgIGRhdGEucG9wKCk7XG4gIH0gZWxzZSB7XG4gICAgc3BsaWNlLmNhbGwoZGF0YSwgaW5kZXgsIDEpO1xuICB9XG4gIC0tdGhpcy5zaXplO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVEZWxldGU7XG4iLCJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUdldChrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICByZXR1cm4gaW5kZXggPCAwID8gdW5kZWZpbmVkIDogZGF0YVtpbmRleF1bMV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlR2V0O1xuIiwidmFyIGFzc29jSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Fzc29jSW5kZXhPZicpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIGxpc3QgY2FjaGUgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlSGFzKGtleSkge1xuICByZXR1cm4gYXNzb2NJbmRleE9mKHRoaXMuX19kYXRhX18sIGtleSkgPiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVIYXM7XG4iLCJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKlxuICogU2V0cyB0aGUgbGlzdCBjYWNoZSBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbGlzdCBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgKyt0aGlzLnNpemU7XG4gICAgZGF0YS5wdXNoKFtrZXksIHZhbHVlXSk7XG4gIH0gZWxzZSB7XG4gICAgZGF0YVtpbmRleF1bMV0gPSB2YWx1ZTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVTZXQ7XG4iLCJ2YXIgbGlzdENhY2hlQ2xlYXIgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVDbGVhcicpLFxuICAgIGxpc3RDYWNoZURlbGV0ZSA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZURlbGV0ZScpLFxuICAgIGxpc3RDYWNoZUdldCA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZUdldCcpLFxuICAgIGxpc3RDYWNoZUhhcyA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZUhhcycpLFxuICAgIGxpc3RDYWNoZVNldCA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZVNldCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gbGlzdCBjYWNoZSBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIExpc3RDYWNoZShlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBMaXN0Q2FjaGVgLlxuTGlzdENhY2hlLnByb3RvdHlwZS5jbGVhciA9IGxpc3RDYWNoZUNsZWFyO1xuTGlzdENhY2hlLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBsaXN0Q2FjaGVEZWxldGU7XG5MaXN0Q2FjaGUucHJvdG90eXBlLmdldCA9IGxpc3RDYWNoZUdldDtcbkxpc3RDYWNoZS5wcm90b3R5cGUuaGFzID0gbGlzdENhY2hlSGFzO1xuTGlzdENhY2hlLnByb3RvdHlwZS5zZXQgPSBsaXN0Q2FjaGVTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gTGlzdENhY2hlO1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBNYXAgPSBnZXROYXRpdmUocm9vdCwgJ01hcCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1hcDtcbiIsInZhciBIYXNoID0gcmVxdWlyZSgnLi9fSGFzaCcpLFxuICAgIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpLFxuICAgIE1hcCA9IHJlcXVpcmUoJy4vX01hcCcpO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIG1hcC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUNsZWFyKCkge1xuICB0aGlzLnNpemUgPSAwO1xuICB0aGlzLl9fZGF0YV9fID0ge1xuICAgICdoYXNoJzogbmV3IEhhc2gsXG4gICAgJ21hcCc6IG5ldyAoTWFwIHx8IExpc3RDYWNoZSksXG4gICAgJ3N0cmluZyc6IG5ldyBIYXNoXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVDbGVhcjtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUgZm9yIHVzZSBhcyB1bmlxdWUgb2JqZWN0IGtleS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0tleWFibGUodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiAodHlwZSA9PSAnc3RyaW5nJyB8fCB0eXBlID09ICdudW1iZXInIHx8IHR5cGUgPT0gJ3N5bWJvbCcgfHwgdHlwZSA9PSAnYm9vbGVhbicpXG4gICAgPyAodmFsdWUgIT09ICdfX3Byb3RvX18nKVxuICAgIDogKHZhbHVlID09PSBudWxsKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0tleWFibGU7XG4iLCJ2YXIgaXNLZXlhYmxlID0gcmVxdWlyZSgnLi9faXNLZXlhYmxlJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgZGF0YSBmb3IgYG1hcGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXAgVGhlIG1hcCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIHJlZmVyZW5jZSBrZXkuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbWFwIGRhdGEuXG4gKi9cbmZ1bmN0aW9uIGdldE1hcERhdGEobWFwLCBrZXkpIHtcbiAgdmFyIGRhdGEgPSBtYXAuX19kYXRhX187XG4gIHJldHVybiBpc0tleWFibGUoa2V5KVxuICAgID8gZGF0YVt0eXBlb2Yga2V5ID09ICdzdHJpbmcnID8gJ3N0cmluZycgOiAnaGFzaCddXG4gICAgOiBkYXRhLm1hcDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRNYXBEYXRhO1xuIiwidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIG1hcC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZURlbGV0ZShrZXkpIHtcbiAgdmFyIHJlc3VsdCA9IGdldE1hcERhdGEodGhpcywga2V5KVsnZGVsZXRlJ10oa2V5KTtcbiAgdGhpcy5zaXplIC09IHJlc3VsdCA/IDEgOiAwO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlRGVsZXRlO1xuIiwidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgbWFwIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUdldChrZXkpIHtcbiAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5KS5nZXQoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZUdldDtcbiIsInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIG1hcCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlSGFzKGtleSkge1xuICByZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLmhhcyhrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlSGFzO1xuIiwidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogU2V0cyB0aGUgbWFwIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG1hcCBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IGdldE1hcERhdGEodGhpcywga2V5KSxcbiAgICAgIHNpemUgPSBkYXRhLnNpemU7XG5cbiAgZGF0YS5zZXQoa2V5LCB2YWx1ZSk7XG4gIHRoaXMuc2l6ZSArPSBkYXRhLnNpemUgPT0gc2l6ZSA/IDAgOiAxO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZVNldDtcbiIsInZhciBtYXBDYWNoZUNsZWFyID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVDbGVhcicpLFxuICAgIG1hcENhY2hlRGVsZXRlID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVEZWxldGUnKSxcbiAgICBtYXBDYWNoZUdldCA9IHJlcXVpcmUoJy4vX21hcENhY2hlR2V0JyksXG4gICAgbWFwQ2FjaGVIYXMgPSByZXF1aXJlKCcuL19tYXBDYWNoZUhhcycpLFxuICAgIG1hcENhY2hlU2V0ID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbWFwIGNhY2hlIG9iamVjdCB0byBzdG9yZSBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIE1hcENhY2hlKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYE1hcENhY2hlYC5cbk1hcENhY2hlLnByb3RvdHlwZS5jbGVhciA9IG1hcENhY2hlQ2xlYXI7XG5NYXBDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gbWFwQ2FjaGVEZWxldGU7XG5NYXBDYWNoZS5wcm90b3R5cGUuZ2V0ID0gbWFwQ2FjaGVHZXQ7XG5NYXBDYWNoZS5wcm90b3R5cGUuaGFzID0gbWFwQ2FjaGVIYXM7XG5NYXBDYWNoZS5wcm90b3R5cGUuc2V0ID0gbWFwQ2FjaGVTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gTWFwQ2FjaGU7XG4iLCIvKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKlxuICogQWRkcyBgdmFsdWVgIHRvIHRoZSBhcnJheSBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgYWRkXG4gKiBAbWVtYmVyT2YgU2V0Q2FjaGVcbiAqIEBhbGlhcyBwdXNoXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjYWNoZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBzZXRDYWNoZUFkZCh2YWx1ZSkge1xuICB0aGlzLl9fZGF0YV9fLnNldCh2YWx1ZSwgSEFTSF9VTkRFRklORUQpO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXRDYWNoZUFkZDtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgaW4gdGhlIGFycmF5IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBTZXRDYWNoZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgZm91bmQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gc2V0Q2FjaGVIYXModmFsdWUpIHtcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXRDYWNoZUhhcztcbiIsInZhciBNYXBDYWNoZSA9IHJlcXVpcmUoJy4vX01hcENhY2hlJyksXG4gICAgc2V0Q2FjaGVBZGQgPSByZXF1aXJlKCcuL19zZXRDYWNoZUFkZCcpLFxuICAgIHNldENhY2hlSGFzID0gcmVxdWlyZSgnLi9fc2V0Q2FjaGVIYXMnKTtcblxuLyoqXG4gKlxuICogQ3JlYXRlcyBhbiBhcnJheSBjYWNoZSBvYmplY3QgdG8gc3RvcmUgdW5pcXVlIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbdmFsdWVzXSBUaGUgdmFsdWVzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBTZXRDYWNoZSh2YWx1ZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSB2YWx1ZXMgPT0gbnVsbCA/IDAgOiB2YWx1ZXMubGVuZ3RoO1xuXG4gIHRoaXMuX19kYXRhX18gPSBuZXcgTWFwQ2FjaGU7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdGhpcy5hZGQodmFsdWVzW2luZGV4XSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYFNldENhY2hlYC5cblNldENhY2hlLnByb3RvdHlwZS5hZGQgPSBTZXRDYWNoZS5wcm90b3R5cGUucHVzaCA9IHNldENhY2hlQWRkO1xuU2V0Q2FjaGUucHJvdG90eXBlLmhhcyA9IHNldENhY2hlSGFzO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNldENhY2hlO1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5maW5kSW5kZXhgIGFuZCBgXy5maW5kTGFzdEluZGV4YCB3aXRob3V0XG4gKiBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IGZyb21JbmRleCBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNwZWNpZnkgaXRlcmF0aW5nIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VGaW5kSW5kZXgoYXJyYXksIHByZWRpY2F0ZSwgZnJvbUluZGV4LCBmcm9tUmlnaHQpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIGluZGV4ID0gZnJvbUluZGV4ICsgKGZyb21SaWdodCA/IDEgOiAtMSk7XG5cbiAgd2hpbGUgKChmcm9tUmlnaHQgPyBpbmRleC0tIDogKytpbmRleCA8IGxlbmd0aCkpIHtcbiAgICBpZiAocHJlZGljYXRlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSkge1xuICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cbiAgfVxuICByZXR1cm4gLTE7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUZpbmRJbmRleDtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNOYU5gIHdpdGhvdXQgc3VwcG9ydCBmb3IgbnVtYmVyIG9iamVjdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYE5hTmAsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzTmFOKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPT0gdmFsdWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzTmFOO1xuIiwiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uaW5kZXhPZmAgd2hpY2ggcGVyZm9ybXMgc3RyaWN0IGVxdWFsaXR5XG4gKiBjb21wYXJpc29ucyBvZiB2YWx1ZXMsIGkuZS4gYD09PWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXggVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gc3RyaWN0SW5kZXhPZihhcnJheSwgdmFsdWUsIGZyb21JbmRleCkge1xuICB2YXIgaW5kZXggPSBmcm9tSW5kZXggLSAxLFxuICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKGFycmF5W2luZGV4XSA9PT0gdmFsdWUpIHtcbiAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0cmljdEluZGV4T2Y7XG4iLCJ2YXIgYmFzZUZpbmRJbmRleCA9IHJlcXVpcmUoJy4vX2Jhc2VGaW5kSW5kZXgnKSxcbiAgICBiYXNlSXNOYU4gPSByZXF1aXJlKCcuL19iYXNlSXNOYU4nKSxcbiAgICBzdHJpY3RJbmRleE9mID0gcmVxdWlyZSgnLi9fc3RyaWN0SW5kZXhPZicpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmluZGV4T2ZgIHdpdGhvdXQgYGZyb21JbmRleGAgYm91bmRzIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHBhcmFtIHtudW1iZXJ9IGZyb21JbmRleCBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICovXG5mdW5jdGlvbiBiYXNlSW5kZXhPZihhcnJheSwgdmFsdWUsIGZyb21JbmRleCkge1xuICByZXR1cm4gdmFsdWUgPT09IHZhbHVlXG4gICAgPyBzdHJpY3RJbmRleE9mKGFycmF5LCB2YWx1ZSwgZnJvbUluZGV4KVxuICAgIDogYmFzZUZpbmRJbmRleChhcnJheSwgYmFzZUlzTmFOLCBmcm9tSW5kZXgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJbmRleE9mO1xuIiwidmFyIGJhc2VJbmRleE9mID0gcmVxdWlyZSgnLi9fYmFzZUluZGV4T2YnKTtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uaW5jbHVkZXNgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvclxuICogc3BlY2lmeWluZyBhbiBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gdGFyZ2V0IFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB0YXJnZXRgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5SW5jbHVkZXMoYXJyYXksIHZhbHVlKSB7XG4gIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgcmV0dXJuICEhbGVuZ3RoICYmIGJhc2VJbmRleE9mKGFycmF5LCB2YWx1ZSwgMCkgPiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheUluY2x1ZGVzO1xuIiwiLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2UgYGFycmF5SW5jbHVkZXNgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYSBjb21wYXJhdG9yLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSB0YXJnZXQgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjb21wYXJhdG9yIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHRhcmdldGAgaXMgZm91bmQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlJbmNsdWRlc1dpdGgoYXJyYXksIHZhbHVlLCBjb21wYXJhdG9yKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBpZiAoY29tcGFyYXRvcih2YWx1ZSwgYXJyYXlbaW5kZXhdKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheUluY2x1ZGVzV2l0aDtcbiIsIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLm1hcGAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlXG4gKiBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgbWFwcGVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBhcnJheU1hcChhcnJheSwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlNYXA7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnVuYXJ5YCB3aXRob3V0IHN1cHBvcnQgZm9yIHN0b3JpbmcgbWV0YWRhdGEuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNhcCBhcmd1bWVudHMgZm9yLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY2FwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlVW5hcnkoZnVuYykge1xuICByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gZnVuYyh2YWx1ZSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVVuYXJ5O1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYSBgY2FjaGVgIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBjYWNoZSBUaGUgY2FjaGUgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gY2FjaGVIYXMoY2FjaGUsIGtleSkge1xuICByZXR1cm4gY2FjaGUuaGFzKGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2FjaGVIYXM7XG4iLCJ2YXIgU2V0Q2FjaGUgPSByZXF1aXJlKCcuL19TZXRDYWNoZScpLFxuICAgIGFycmF5SW5jbHVkZXMgPSByZXF1aXJlKCcuL19hcnJheUluY2x1ZGVzJyksXG4gICAgYXJyYXlJbmNsdWRlc1dpdGggPSByZXF1aXJlKCcuL19hcnJheUluY2x1ZGVzV2l0aCcpLFxuICAgIGFycmF5TWFwID0gcmVxdWlyZSgnLi9fYXJyYXlNYXAnKSxcbiAgICBiYXNlVW5hcnkgPSByZXF1aXJlKCcuL19iYXNlVW5hcnknKSxcbiAgICBjYWNoZUhhcyA9IHJlcXVpcmUoJy4vX2NhY2hlSGFzJyk7XG5cbi8qKiBVc2VkIGFzIHRoZSBzaXplIHRvIGVuYWJsZSBsYXJnZSBhcnJheSBvcHRpbWl6YXRpb25zLiAqL1xudmFyIExBUkdFX0FSUkFZX1NJWkUgPSAyMDA7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgbWV0aG9kcyBsaWtlIGBfLmRpZmZlcmVuY2VgIHdpdGhvdXQgc3VwcG9ydFxuICogZm9yIGV4Y2x1ZGluZyBtdWx0aXBsZSBhcnJheXMgb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIHZhbHVlcyB0byBleGNsdWRlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlXSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjb21wYXJhdG9yXSBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgZmlsdGVyZWQgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBiYXNlRGlmZmVyZW5jZShhcnJheSwgdmFsdWVzLCBpdGVyYXRlZSwgY29tcGFyYXRvcikge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGluY2x1ZGVzID0gYXJyYXlJbmNsdWRlcyxcbiAgICAgIGlzQ29tbW9uID0gdHJ1ZSxcbiAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IFtdLFxuICAgICAgdmFsdWVzTGVuZ3RoID0gdmFsdWVzLmxlbmd0aDtcblxuICBpZiAoIWxlbmd0aCkge1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgaWYgKGl0ZXJhdGVlKSB7XG4gICAgdmFsdWVzID0gYXJyYXlNYXAodmFsdWVzLCBiYXNlVW5hcnkoaXRlcmF0ZWUpKTtcbiAgfVxuICBpZiAoY29tcGFyYXRvcikge1xuICAgIGluY2x1ZGVzID0gYXJyYXlJbmNsdWRlc1dpdGg7XG4gICAgaXNDb21tb24gPSBmYWxzZTtcbiAgfVxuICBlbHNlIGlmICh2YWx1ZXMubGVuZ3RoID49IExBUkdFX0FSUkFZX1NJWkUpIHtcbiAgICBpbmNsdWRlcyA9IGNhY2hlSGFzO1xuICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gICAgdmFsdWVzID0gbmV3IFNldENhY2hlKHZhbHVlcyk7XG4gIH1cbiAgb3V0ZXI6XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdLFxuICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlID09IG51bGwgPyB2YWx1ZSA6IGl0ZXJhdGVlKHZhbHVlKTtcblxuICAgIHZhbHVlID0gKGNvbXBhcmF0b3IgfHwgdmFsdWUgIT09IDApID8gdmFsdWUgOiAwO1xuICAgIGlmIChpc0NvbW1vbiAmJiBjb21wdXRlZCA9PT0gY29tcHV0ZWQpIHtcbiAgICAgIHZhciB2YWx1ZXNJbmRleCA9IHZhbHVlc0xlbmd0aDtcbiAgICAgIHdoaWxlICh2YWx1ZXNJbmRleC0tKSB7XG4gICAgICAgIGlmICh2YWx1ZXNbdmFsdWVzSW5kZXhdID09PSBjb21wdXRlZCkge1xuICAgICAgICAgIGNvbnRpbnVlIG91dGVyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKCFpbmNsdWRlcyh2YWx1ZXMsIGNvbXB1dGVkLCBjb21wYXJhdG9yKSkge1xuICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VEaWZmZXJlbmNlO1xuIiwiLyoqXG4gKiBBcHBlbmRzIHRoZSBlbGVtZW50cyBvZiBgdmFsdWVzYCB0byBgYXJyYXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gYXBwZW5kLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5UHVzaChhcnJheSwgdmFsdWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gdmFsdWVzLmxlbmd0aCxcbiAgICAgIG9mZnNldCA9IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGFycmF5W29mZnNldCArIGluZGV4XSA9IHZhbHVlc1tpbmRleF07XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5UHVzaDtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UuIEEgdmFsdWUgaXMgb2JqZWN0LWxpa2UgaWYgaXQncyBub3QgYG51bGxgXG4gKiBhbmQgaGFzIGEgYHR5cGVvZmAgcmVzdWx0IG9mIFwib2JqZWN0XCIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdExpa2Uoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc09iamVjdExpa2UobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzT2JqZWN0TGlrZTtcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXSc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNBcmd1bWVudHNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcbiAqL1xuZnVuY3Rpb24gYmFzZUlzQXJndW1lbnRzKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IGFyZ3NUYWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzQXJndW1lbnRzO1xuIiwidmFyIGJhc2VJc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vX2Jhc2VJc0FyZ3VtZW50cycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGFuIGBhcmd1bWVudHNgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FyZ3VtZW50cyA9IGJhc2VJc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA/IGJhc2VJc0FyZ3VtZW50cyA6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdjYWxsZWUnKSAmJlxuICAgICFwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHZhbHVlLCAnY2FsbGVlJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJndW1lbnRzO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGFuIGBBcnJheWAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcnJheTtcbiIsInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKSxcbiAgICBpc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5Jyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHNwcmVhZGFibGVTeW1ib2wgPSBTeW1ib2wgPyBTeW1ib2wuaXNDb25jYXRTcHJlYWRhYmxlIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgZmxhdHRlbmFibGUgYGFyZ3VtZW50c2Agb2JqZWN0IG9yIGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGZsYXR0ZW5hYmxlLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzRmxhdHRlbmFibGUodmFsdWUpIHtcbiAgcmV0dXJuIGlzQXJyYXkodmFsdWUpIHx8IGlzQXJndW1lbnRzKHZhbHVlKSB8fFxuICAgICEhKHNwcmVhZGFibGVTeW1ib2wgJiYgdmFsdWUgJiYgdmFsdWVbc3ByZWFkYWJsZVN5bWJvbF0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRmxhdHRlbmFibGU7XG4iLCJ2YXIgYXJyYXlQdXNoID0gcmVxdWlyZSgnLi9fYXJyYXlQdXNoJyksXG4gICAgaXNGbGF0dGVuYWJsZSA9IHJlcXVpcmUoJy4vX2lzRmxhdHRlbmFibGUnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mbGF0dGVuYCB3aXRoIHN1cHBvcnQgZm9yIHJlc3RyaWN0aW5nIGZsYXR0ZW5pbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBmbGF0dGVuLlxuICogQHBhcmFtIHtudW1iZXJ9IGRlcHRoIFRoZSBtYXhpbXVtIHJlY3Vyc2lvbiBkZXB0aC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3ByZWRpY2F0ZT1pc0ZsYXR0ZW5hYmxlXSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNTdHJpY3RdIFJlc3RyaWN0IHRvIHZhbHVlcyB0aGF0IHBhc3MgYHByZWRpY2F0ZWAgY2hlY2tzLlxuICogQHBhcmFtIHtBcnJheX0gW3Jlc3VsdD1bXV0gVGhlIGluaXRpYWwgcmVzdWx0IHZhbHVlLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmxhdHRlbmVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBiYXNlRmxhdHRlbihhcnJheSwgZGVwdGgsIHByZWRpY2F0ZSwgaXNTdHJpY3QsIHJlc3VsdCkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBwcmVkaWNhdGUgfHwgKHByZWRpY2F0ZSA9IGlzRmxhdHRlbmFibGUpO1xuICByZXN1bHQgfHwgKHJlc3VsdCA9IFtdKTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTtcbiAgICBpZiAoZGVwdGggPiAwICYmIHByZWRpY2F0ZSh2YWx1ZSkpIHtcbiAgICAgIGlmIChkZXB0aCA+IDEpIHtcbiAgICAgICAgLy8gUmVjdXJzaXZlbHkgZmxhdHRlbiBhcnJheXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICAgICAgYmFzZUZsYXR0ZW4odmFsdWUsIGRlcHRoIC0gMSwgcHJlZGljYXRlLCBpc1N0cmljdCwgcmVzdWx0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFycmF5UHVzaChyZXN1bHQsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFpc1N0cmljdCkge1xuICAgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGhdID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUZsYXR0ZW47XG4iLCIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGZpcnN0IGFyZ3VtZW50IGl0IHJlY2VpdmVzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0geyp9IHZhbHVlIEFueSB2YWx1ZS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIGB2YWx1ZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICpcbiAqIGNvbnNvbGUubG9nKF8uaWRlbnRpdHkob2JqZWN0KSA9PT0gb2JqZWN0KTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gaWRlbnRpdHkodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlkZW50aXR5O1xuIiwiLyoqXG4gKiBBIGZhc3RlciBhbHRlcm5hdGl2ZSB0byBgRnVuY3Rpb24jYXBwbHlgLCB0aGlzIGZ1bmN0aW9uIGludm9rZXMgYGZ1bmNgXG4gKiB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiBgdGhpc0FyZ2AgYW5kIHRoZSBhcmd1bWVudHMgb2YgYGFyZ3NgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBpbnZva2UuXG4gKiBAcGFyYW0geyp9IHRoaXNBcmcgVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgYGZ1bmNgIHdpdGguXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzdWx0IG9mIGBmdW5jYC5cbiAqL1xuZnVuY3Rpb24gYXBwbHkoZnVuYywgdGhpc0FyZywgYXJncykge1xuICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgY2FzZSAwOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcpO1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdKTtcbiAgICBjYXNlIDI6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgY2FzZSAzOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICB9XG4gIHJldHVybiBmdW5jLmFwcGx5KHRoaXNBcmcsIGFyZ3MpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFwcGx5O1xuIiwidmFyIGFwcGx5ID0gcmVxdWlyZSgnLi9fYXBwbHknKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU1heCA9IE1hdGgubWF4O1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZVJlc3RgIHdoaWNoIHRyYW5zZm9ybXMgdGhlIHJlc3QgYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PWZ1bmMubGVuZ3RoLTFdIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgcmVzdCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2Zvcm0gVGhlIHJlc3QgYXJyYXkgdHJhbnNmb3JtLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG92ZXJSZXN0KGZ1bmMsIHN0YXJ0LCB0cmFuc2Zvcm0pIHtcbiAgc3RhcnQgPSBuYXRpdmVNYXgoc3RhcnQgPT09IHVuZGVmaW5lZCA/IChmdW5jLmxlbmd0aCAtIDEpIDogc3RhcnQsIDApO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IG5hdGl2ZU1heChhcmdzLmxlbmd0aCAtIHN0YXJ0LCAwKSxcbiAgICAgICAgYXJyYXkgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGFycmF5W2luZGV4XSA9IGFyZ3Nbc3RhcnQgKyBpbmRleF07XG4gICAgfVxuICAgIGluZGV4ID0gLTE7XG4gICAgdmFyIG90aGVyQXJncyA9IEFycmF5KHN0YXJ0ICsgMSk7XG4gICAgd2hpbGUgKCsraW5kZXggPCBzdGFydCkge1xuICAgICAgb3RoZXJBcmdzW2luZGV4XSA9IGFyZ3NbaW5kZXhdO1xuICAgIH1cbiAgICBvdGhlckFyZ3Nbc3RhcnRdID0gdHJhbnNmb3JtKGFycmF5KTtcbiAgICByZXR1cm4gYXBwbHkoZnVuYywgdGhpcywgb3RoZXJBcmdzKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvdmVyUmVzdDtcbiIsIi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBgdmFsdWVgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi40LjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byByZXR1cm4gZnJvbSB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY29uc3RhbnQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3RzID0gXy50aW1lcygyLCBfLmNvbnN0YW50KHsgJ2EnOiAxIH0pKTtcbiAqXG4gKiBjb25zb2xlLmxvZyhvYmplY3RzKTtcbiAqIC8vID0+IFt7ICdhJzogMSB9LCB7ICdhJzogMSB9XVxuICpcbiAqIGNvbnNvbGUubG9nKG9iamVjdHNbMF0gPT09IG9iamVjdHNbMV0pO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBjb25zdGFudCh2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbnN0YW50O1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpO1xuXG52YXIgZGVmaW5lUHJvcGVydHkgPSAoZnVuY3Rpb24oKSB7XG4gIHRyeSB7XG4gICAgdmFyIGZ1bmMgPSBnZXROYXRpdmUoT2JqZWN0LCAnZGVmaW5lUHJvcGVydHknKTtcbiAgICBmdW5jKHt9LCAnJywge30pO1xuICAgIHJldHVybiBmdW5jO1xuICB9IGNhdGNoIChlKSB7fVxufSgpKTtcblxubW9kdWxlLmV4cG9ydHMgPSBkZWZpbmVQcm9wZXJ0eTtcbiIsInZhciBjb25zdGFudCA9IHJlcXVpcmUoJy4vY29uc3RhbnQnKSxcbiAgICBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2RlZmluZVByb3BlcnR5JyksXG4gICAgaWRlbnRpdHkgPSByZXF1aXJlKCcuL2lkZW50aXR5Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYHNldFRvU3RyaW5nYCB3aXRob3V0IHN1cHBvcnQgZm9yIGhvdCBsb29wIHNob3J0aW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdHJpbmcgVGhlIGB0b1N0cmluZ2AgcmVzdWx0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC5cbiAqL1xudmFyIGJhc2VTZXRUb1N0cmluZyA9ICFkZWZpbmVQcm9wZXJ0eSA/IGlkZW50aXR5IDogZnVuY3Rpb24oZnVuYywgc3RyaW5nKSB7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eShmdW5jLCAndG9TdHJpbmcnLCB7XG4gICAgJ2NvbmZpZ3VyYWJsZSc6IHRydWUsXG4gICAgJ2VudW1lcmFibGUnOiBmYWxzZSxcbiAgICAndmFsdWUnOiBjb25zdGFudChzdHJpbmcpLFxuICAgICd3cml0YWJsZSc6IHRydWVcbiAgfSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VTZXRUb1N0cmluZztcbiIsIi8qKiBVc2VkIHRvIGRldGVjdCBob3QgZnVuY3Rpb25zIGJ5IG51bWJlciBvZiBjYWxscyB3aXRoaW4gYSBzcGFuIG9mIG1pbGxpc2Vjb25kcy4gKi9cbnZhciBIT1RfQ09VTlQgPSA4MDAsXG4gICAgSE9UX1NQQU4gPSAxNjtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU5vdyA9IERhdGUubm93O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0J2xsIHNob3J0IG91dCBhbmQgaW52b2tlIGBpZGVudGl0eWAgaW5zdGVhZFxuICogb2YgYGZ1bmNgIHdoZW4gaXQncyBjYWxsZWQgYEhPVF9DT1VOVGAgb3IgbW9yZSB0aW1lcyBpbiBgSE9UX1NQQU5gXG4gKiBtaWxsaXNlY29uZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHJlc3RyaWN0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc2hvcnRhYmxlIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBzaG9ydE91dChmdW5jKSB7XG4gIHZhciBjb3VudCA9IDAsXG4gICAgICBsYXN0Q2FsbGVkID0gMDtcblxuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0YW1wID0gbmF0aXZlTm93KCksXG4gICAgICAgIHJlbWFpbmluZyA9IEhPVF9TUEFOIC0gKHN0YW1wIC0gbGFzdENhbGxlZCk7XG5cbiAgICBsYXN0Q2FsbGVkID0gc3RhbXA7XG4gICAgaWYgKHJlbWFpbmluZyA+IDApIHtcbiAgICAgIGlmICgrK2NvdW50ID49IEhPVF9DT1VOVCkge1xuICAgICAgICByZXR1cm4gYXJndW1lbnRzWzBdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb3VudCA9IDA7XG4gICAgfVxuICAgIHJldHVybiBmdW5jLmFwcGx5KHVuZGVmaW5lZCwgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzaG9ydE91dDtcbiIsInZhciBiYXNlU2V0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19iYXNlU2V0VG9TdHJpbmcnKSxcbiAgICBzaG9ydE91dCA9IHJlcXVpcmUoJy4vX3Nob3J0T3V0Jyk7XG5cbi8qKlxuICogU2V0cyB0aGUgYHRvU3RyaW5nYCBtZXRob2Qgb2YgYGZ1bmNgIHRvIHJldHVybiBgc3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3RyaW5nIFRoZSBgdG9TdHJpbmdgIHJlc3VsdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gKi9cbnZhciBzZXRUb1N0cmluZyA9IHNob3J0T3V0KGJhc2VTZXRUb1N0cmluZyk7XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0VG9TdHJpbmc7XG4iLCIvKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgbGVuZ3RoLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBsb29zZWx5IGJhc2VkIG9uXG4gKiBbYFRvTGVuZ3RoYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtdG9sZW5ndGgpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgbGVuZ3RoLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNMZW5ndGgoMyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0xlbmd0aChOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0xlbmd0aChJbmZpbml0eSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNMZW5ndGgoJzMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzTGVuZ3RoKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgJiZcbiAgICB2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDw9IE1BWF9TQUZFX0lOVEVHRVI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNMZW5ndGg7XG4iLCJ2YXIgaXNGdW5jdGlvbiA9IHJlcXVpcmUoJy4vaXNGdW5jdGlvbicpLFxuICAgIGlzTGVuZ3RoID0gcmVxdWlyZSgnLi9pc0xlbmd0aCcpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UuIEEgdmFsdWUgaXMgY29uc2lkZXJlZCBhcnJheS1saWtlIGlmIGl0J3NcbiAqIG5vdCBhIGZ1bmN0aW9uIGFuZCBoYXMgYSBgdmFsdWUubGVuZ3RoYCB0aGF0J3MgYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gb3JcbiAqIGVxdWFsIHRvIGAwYCBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUmAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKCdhYmMnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5TGlrZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiBpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpICYmICFpc0Z1bmN0aW9uKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0FycmF5TGlrZTtcbiIsInZhciBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uaXNBcnJheUxpa2VgIGV4Y2VwdCB0aGF0IGl0IGFsc28gY2hlY2tzIGlmIGB2YWx1ZWBcbiAqIGlzIGFuIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheS1saWtlIG9iamVjdCxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlT2JqZWN0KGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXlMaWtlT2JqZWN0KF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5TGlrZU9iamVjdCh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBpc0FycmF5TGlrZSh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcnJheUxpa2VPYmplY3Q7XG4iLCIvKipcbiAqIEdldHMgdGhlIGxhc3QgZWxlbWVudCBvZiBgYXJyYXlgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGxhc3QgZWxlbWVudCBvZiBgYXJyYXlgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmxhc3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IDNcbiAqL1xuZnVuY3Rpb24gbGFzdChhcnJheSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gIHJldHVybiBsZW5ndGggPyBhcnJheVtsZW5ndGggLSAxXSA6IHVuZGVmaW5lZDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsYXN0O1xuIiwidmFyIGJhc2VEaWZmZXJlbmNlID0gcmVxdWlyZSgnLi9fYmFzZURpZmZlcmVuY2UnKSxcbiAgICBiYXNlRmxhdHRlbiA9IHJlcXVpcmUoJy4vX2Jhc2VGbGF0dGVuJyksXG4gICAgYmFzZVJlc3QgPSByZXF1aXJlKCcuL19iYXNlUmVzdCcpLFxuICAgIGlzQXJyYXlMaWtlT2JqZWN0ID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZU9iamVjdCcpLFxuICAgIGxhc3QgPSByZXF1aXJlKCcuL2xhc3QnKTtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmRpZmZlcmVuY2VgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGNvbXBhcmF0b3JgXG4gKiB3aGljaCBpcyBpbnZva2VkIHRvIGNvbXBhcmUgZWxlbWVudHMgb2YgYGFycmF5YCB0byBgdmFsdWVzYC4gVGhlIG9yZGVyIGFuZFxuICogcmVmZXJlbmNlcyBvZiByZXN1bHQgdmFsdWVzIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSBmaXJzdCBhcnJheS4gVGhlIGNvbXBhcmF0b3JcbiAqIGlzIGludm9rZWQgd2l0aCB0d28gYXJndW1lbnRzOiAoYXJyVmFsLCBvdGhWYWwpLlxuICpcbiAqICoqTm90ZToqKiBVbmxpa2UgYF8ucHVsbEFsbFdpdGhgLCB0aGlzIG1ldGhvZCByZXR1cm5zIGEgbmV3IGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0gey4uLkFycmF5fSBbdmFsdWVzXSBUaGUgdmFsdWVzIHRvIGV4Y2x1ZGUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY29tcGFyYXRvcl0gVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGZpbHRlcmVkIHZhbHVlcy5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdHMgPSBbeyAneCc6IDEsICd5JzogMiB9LCB7ICd4JzogMiwgJ3knOiAxIH1dO1xuICpcbiAqIF8uZGlmZmVyZW5jZVdpdGgob2JqZWN0cywgW3sgJ3gnOiAxLCAneSc6IDIgfV0sIF8uaXNFcXVhbCk7XG4gKiAvLyA9PiBbeyAneCc6IDIsICd5JzogMSB9XVxuICovXG52YXIgZGlmZmVyZW5jZVdpdGggPSBiYXNlUmVzdChmdW5jdGlvbihhcnJheSwgdmFsdWVzKSB7XG4gIHZhciBjb21wYXJhdG9yID0gbGFzdCh2YWx1ZXMpO1xuICBpZiAoaXNBcnJheUxpa2VPYmplY3QoY29tcGFyYXRvcikpIHtcbiAgICBjb21wYXJhdG9yID0gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiBpc0FycmF5TGlrZU9iamVjdChhcnJheSlcbiAgICA/IGJhc2VEaWZmZXJlbmNlKGFycmF5LCBiYXNlRmxhdHRlbih2YWx1ZXMsIDEsIGlzQXJyYXlMaWtlT2JqZWN0LCB0cnVlKSwgdW5kZWZpbmVkLCBjb21wYXJhdG9yKVxuICAgIDogW107XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBkaWZmZXJlbmNlV2l0aDtcbiIsInZhciBpZGVudGl0eSA9IHJlcXVpcmUoJy4vaWRlbnRpdHknKSxcbiAgICBvdmVyUmVzdCA9IHJlcXVpcmUoJy4vX292ZXJSZXN0JyksXG4gICAgc2V0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19zZXRUb1N0cmluZycpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnJlc3RgIHdoaWNoIGRvZXNuJ3QgdmFsaWRhdGUgb3IgY29lcmNlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9ZnVuYy5sZW5ndGgtMV0gVGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSByZXN0IHBhcmFtZXRlci5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlUmVzdChmdW5jLCBzdGFydCkge1xuICByZXR1cm4gc2V0VG9TdHJpbmcob3ZlclJlc3QoZnVuYywgc3RhcnQsIGlkZW50aXR5KSwgZnVuYyArICcnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlUmVzdDtcbiIsInZhciBMaXN0Q2FjaGUgPSByZXF1aXJlKCcuL19MaXN0Q2FjaGUnKTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBzdGFjay5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBTdGFja1xuICovXG5mdW5jdGlvbiBzdGFja0NsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gbmV3IExpc3RDYWNoZTtcbiAgdGhpcy5zaXplID0gMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja0NsZWFyO1xuIiwiLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgc3RhY2suXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gc3RhY2tEZWxldGUoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIHJlc3VsdCA9IGRhdGFbJ2RlbGV0ZSddKGtleSk7XG5cbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrRGVsZXRlO1xuIiwiLyoqXG4gKiBHZXRzIHRoZSBzdGFjayB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gc3RhY2tHZXQoa2V5KSB7XG4gIHJldHVybiB0aGlzLl9fZGF0YV9fLmdldChrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrR2V0O1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYSBzdGFjayB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrSGFzKGtleSkge1xuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja0hhcztcbiIsInZhciBMaXN0Q2FjaGUgPSByZXF1aXJlKCcuL19MaXN0Q2FjaGUnKSxcbiAgICBNYXAgPSByZXF1aXJlKCcuL19NYXAnKSxcbiAgICBNYXBDYWNoZSA9IHJlcXVpcmUoJy4vX01hcENhY2hlJyk7XG5cbi8qKiBVc2VkIGFzIHRoZSBzaXplIHRvIGVuYWJsZSBsYXJnZSBhcnJheSBvcHRpbWl6YXRpb25zLiAqL1xudmFyIExBUkdFX0FSUkFZX1NJWkUgPSAyMDA7XG5cbi8qKlxuICogU2V0cyB0aGUgc3RhY2sgYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgc3RhY2sgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICBpZiAoZGF0YSBpbnN0YW5jZW9mIExpc3RDYWNoZSkge1xuICAgIHZhciBwYWlycyA9IGRhdGEuX19kYXRhX187XG4gICAgaWYgKCFNYXAgfHwgKHBhaXJzLmxlbmd0aCA8IExBUkdFX0FSUkFZX1NJWkUgLSAxKSkge1xuICAgICAgcGFpcnMucHVzaChba2V5LCB2YWx1ZV0pO1xuICAgICAgdGhpcy5zaXplID0gKytkYXRhLnNpemU7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZGF0YSA9IHRoaXMuX19kYXRhX18gPSBuZXcgTWFwQ2FjaGUocGFpcnMpO1xuICB9XG4gIGRhdGEuc2V0KGtleSwgdmFsdWUpO1xuICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrU2V0O1xuIiwidmFyIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpLFxuICAgIHN0YWNrQ2xlYXIgPSByZXF1aXJlKCcuL19zdGFja0NsZWFyJyksXG4gICAgc3RhY2tEZWxldGUgPSByZXF1aXJlKCcuL19zdGFja0RlbGV0ZScpLFxuICAgIHN0YWNrR2V0ID0gcmVxdWlyZSgnLi9fc3RhY2tHZXQnKSxcbiAgICBzdGFja0hhcyA9IHJlcXVpcmUoJy4vX3N0YWNrSGFzJyksXG4gICAgc3RhY2tTZXQgPSByZXF1aXJlKCcuL19zdGFja1NldCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzdGFjayBjYWNoZSBvYmplY3QgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBTdGFjayhlbnRyaWVzKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyA9IG5ldyBMaXN0Q2FjaGUoZW50cmllcyk7XG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYFN0YWNrYC5cblN0YWNrLnByb3RvdHlwZS5jbGVhciA9IHN0YWNrQ2xlYXI7XG5TdGFjay5wcm90b3R5cGVbJ2RlbGV0ZSddID0gc3RhY2tEZWxldGU7XG5TdGFjay5wcm90b3R5cGUuZ2V0ID0gc3RhY2tHZXQ7XG5TdGFjay5wcm90b3R5cGUuaGFzID0gc3RhY2tIYXM7XG5TdGFjay5wcm90b3R5cGUuc2V0ID0gc3RhY2tTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gU3RhY2s7XG4iLCIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5zb21lYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWVcbiAqIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFueSBlbGVtZW50IHBhc3NlcyB0aGUgcHJlZGljYXRlIGNoZWNrLFxuICogIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlTb21lKGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGlmIChwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5U29tZTtcbiIsInZhciBTZXRDYWNoZSA9IHJlcXVpcmUoJy4vX1NldENhY2hlJyksXG4gICAgYXJyYXlTb21lID0gcmVxdWlyZSgnLi9fYXJyYXlTb21lJyksXG4gICAgY2FjaGVIYXMgPSByZXF1aXJlKCcuL19jYWNoZUhhcycpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDEsXG4gICAgQ09NUEFSRV9VTk9SREVSRURfRkxBRyA9IDI7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbERlZXBgIGZvciBhcnJheXMgd2l0aCBzdXBwb3J0IGZvclxuICogcGFydGlhbCBkZWVwIGNvbXBhcmlzb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7QXJyYXl9IG90aGVyIFRoZSBvdGhlciBhcnJheSB0byBjb21wYXJlLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgYXJyYXlgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGFycmF5cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBlcXVhbEFycmF5cyhhcnJheSwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spIHtcbiAgdmFyIGlzUGFydGlhbCA9IGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRyxcbiAgICAgIGFyckxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIG90aExlbmd0aCA9IG90aGVyLmxlbmd0aDtcblxuICBpZiAoYXJyTGVuZ3RoICE9IG90aExlbmd0aCAmJiAhKGlzUGFydGlhbCAmJiBvdGhMZW5ndGggPiBhcnJMZW5ndGgpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIENoZWNrIHRoYXQgY3ljbGljIHZhbHVlcyBhcmUgZXF1YWwuXG4gIHZhciBhcnJTdGFja2VkID0gc3RhY2suZ2V0KGFycmF5KTtcbiAgdmFyIG90aFN0YWNrZWQgPSBzdGFjay5nZXQob3RoZXIpO1xuICBpZiAoYXJyU3RhY2tlZCAmJiBvdGhTdGFja2VkKSB7XG4gICAgcmV0dXJuIGFyclN0YWNrZWQgPT0gb3RoZXIgJiYgb3RoU3RhY2tlZCA9PSBhcnJheTtcbiAgfVxuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IHRydWUsXG4gICAgICBzZWVuID0gKGJpdG1hc2sgJiBDT01QQVJFX1VOT1JERVJFRF9GTEFHKSA/IG5ldyBTZXRDYWNoZSA6IHVuZGVmaW5lZDtcblxuICBzdGFjay5zZXQoYXJyYXksIG90aGVyKTtcbiAgc3RhY2suc2V0KG90aGVyLCBhcnJheSk7XG5cbiAgLy8gSWdub3JlIG5vbi1pbmRleCBwcm9wZXJ0aWVzLlxuICB3aGlsZSAoKytpbmRleCA8IGFyckxlbmd0aCkge1xuICAgIHZhciBhcnJWYWx1ZSA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgb3RoVmFsdWUgPSBvdGhlcltpbmRleF07XG5cbiAgICBpZiAoY3VzdG9taXplcikge1xuICAgICAgdmFyIGNvbXBhcmVkID0gaXNQYXJ0aWFsXG4gICAgICAgID8gY3VzdG9taXplcihvdGhWYWx1ZSwgYXJyVmFsdWUsIGluZGV4LCBvdGhlciwgYXJyYXksIHN0YWNrKVxuICAgICAgICA6IGN1c3RvbWl6ZXIoYXJyVmFsdWUsIG90aFZhbHVlLCBpbmRleCwgYXJyYXksIG90aGVyLCBzdGFjayk7XG4gICAgfVxuICAgIGlmIChjb21wYXJlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoY29tcGFyZWQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIGFycmF5cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgIGlmIChzZWVuKSB7XG4gICAgICBpZiAoIWFycmF5U29tZShvdGhlciwgZnVuY3Rpb24ob3RoVmFsdWUsIG90aEluZGV4KSB7XG4gICAgICAgICAgICBpZiAoIWNhY2hlSGFzKHNlZW4sIG90aEluZGV4KSAmJlxuICAgICAgICAgICAgICAgIChhcnJWYWx1ZSA9PT0gb3RoVmFsdWUgfHwgZXF1YWxGdW5jKGFyclZhbHVlLCBvdGhWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spKSkge1xuICAgICAgICAgICAgICByZXR1cm4gc2Vlbi5wdXNoKG90aEluZGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSkge1xuICAgICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghKFxuICAgICAgICAgIGFyclZhbHVlID09PSBvdGhWYWx1ZSB8fFxuICAgICAgICAgICAgZXF1YWxGdW5jKGFyclZhbHVlLCBvdGhWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spXG4gICAgICAgICkpIHtcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHN0YWNrWydkZWxldGUnXShhcnJheSk7XG4gIHN0YWNrWydkZWxldGUnXShvdGhlcik7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXF1YWxBcnJheXM7XG4iLCJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgVWludDhBcnJheSA9IHJvb3QuVWludDhBcnJheTtcblxubW9kdWxlLmV4cG9ydHMgPSBVaW50OEFycmF5O1xuIiwiLyoqXG4gKiBDb252ZXJ0cyBgbWFwYCB0byBpdHMga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUga2V5LXZhbHVlIHBhaXJzLlxuICovXG5mdW5jdGlvbiBtYXBUb0FycmF5KG1hcCkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KG1hcC5zaXplKTtcblxuICBtYXAuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgcmVzdWx0WysraW5kZXhdID0gW2tleSwgdmFsdWVdO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBUb0FycmF5O1xuIiwiLyoqXG4gKiBDb252ZXJ0cyBgc2V0YCB0byBhbiBhcnJheSBvZiBpdHMgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc2V0IFRoZSBzZXQgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBzZXRUb0FycmF5KHNldCkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KHNldC5zaXplKTtcblxuICBzZXQuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJlc3VsdFsrK2luZGV4XSA9IHZhbHVlO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXRUb0FycmF5O1xuIiwidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpLFxuICAgIFVpbnQ4QXJyYXkgPSByZXF1aXJlKCcuL19VaW50OEFycmF5JyksXG4gICAgZXEgPSByZXF1aXJlKCcuL2VxJyksXG4gICAgZXF1YWxBcnJheXMgPSByZXF1aXJlKCcuL19lcXVhbEFycmF5cycpLFxuICAgIG1hcFRvQXJyYXkgPSByZXF1aXJlKCcuL19tYXBUb0FycmF5JyksXG4gICAgc2V0VG9BcnJheSA9IHJlcXVpcmUoJy4vX3NldFRvQXJyYXknKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcbiAgICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxuICAgIGVycm9yVGFnID0gJ1tvYmplY3QgRXJyb3JdJyxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJyxcbiAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJyxcbiAgICBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XSc7XG5cbi8qKiBVc2VkIHRvIGNvbnZlcnQgc3ltYm9scyB0byBwcmltaXRpdmVzIGFuZCBzdHJpbmdzLiAqL1xudmFyIHN5bWJvbFByb3RvID0gU3ltYm9sID8gU3ltYm9sLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcbiAgICBzeW1ib2xWYWx1ZU9mID0gc3ltYm9sUHJvdG8gPyBzeW1ib2xQcm90by52YWx1ZU9mIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3IgY29tcGFyaW5nIG9iamVjdHMgb2ZcbiAqIHRoZSBzYW1lIGB0b1N0cmluZ1RhZ2AuXG4gKlxuICogKipOb3RlOioqIFRoaXMgZnVuY3Rpb24gb25seSBzdXBwb3J0cyBjb21wYXJpbmcgdmFsdWVzIHdpdGggdGFncyBvZlxuICogYEJvb2xlYW5gLCBgRGF0ZWAsIGBFcnJvcmAsIGBOdW1iZXJgLCBgUmVnRXhwYCwgb3IgYFN0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSB0YWcgVGhlIGB0b1N0cmluZ1RhZ2Agb2YgdGhlIG9iamVjdHMgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYG9iamVjdGAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBlcXVhbEJ5VGFnKG9iamVjdCwgb3RoZXIsIHRhZywgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgZGF0YVZpZXdUYWc6XG4gICAgICBpZiAoKG9iamVjdC5ieXRlTGVuZ3RoICE9IG90aGVyLmJ5dGVMZW5ndGgpIHx8XG4gICAgICAgICAgKG9iamVjdC5ieXRlT2Zmc2V0ICE9IG90aGVyLmJ5dGVPZmZzZXQpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIG9iamVjdCA9IG9iamVjdC5idWZmZXI7XG4gICAgICBvdGhlciA9IG90aGVyLmJ1ZmZlcjtcblxuICAgIGNhc2UgYXJyYXlCdWZmZXJUYWc6XG4gICAgICBpZiAoKG9iamVjdC5ieXRlTGVuZ3RoICE9IG90aGVyLmJ5dGVMZW5ndGgpIHx8XG4gICAgICAgICAgIWVxdWFsRnVuYyhuZXcgVWludDhBcnJheShvYmplY3QpLCBuZXcgVWludDhBcnJheShvdGhlcikpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgY2FzZSBib29sVGFnOlxuICAgIGNhc2UgZGF0ZVRhZzpcbiAgICBjYXNlIG51bWJlclRhZzpcbiAgICAgIC8vIENvZXJjZSBib29sZWFucyB0byBgMWAgb3IgYDBgIGFuZCBkYXRlcyB0byBtaWxsaXNlY29uZHMuXG4gICAgICAvLyBJbnZhbGlkIGRhdGVzIGFyZSBjb2VyY2VkIHRvIGBOYU5gLlxuICAgICAgcmV0dXJuIGVxKCtvYmplY3QsICtvdGhlcik7XG5cbiAgICBjYXNlIGVycm9yVGFnOlxuICAgICAgcmV0dXJuIG9iamVjdC5uYW1lID09IG90aGVyLm5hbWUgJiYgb2JqZWN0Lm1lc3NhZ2UgPT0gb3RoZXIubWVzc2FnZTtcblxuICAgIGNhc2UgcmVnZXhwVGFnOlxuICAgIGNhc2Ugc3RyaW5nVGFnOlxuICAgICAgLy8gQ29lcmNlIHJlZ2V4ZXMgdG8gc3RyaW5ncyBhbmQgdHJlYXQgc3RyaW5ncywgcHJpbWl0aXZlcyBhbmQgb2JqZWN0cyxcbiAgICAgIC8vIGFzIGVxdWFsLiBTZWUgaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXJlZ2V4cC5wcm90b3R5cGUudG9zdHJpbmdcbiAgICAgIC8vIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICByZXR1cm4gb2JqZWN0ID09IChvdGhlciArICcnKTtcblxuICAgIGNhc2UgbWFwVGFnOlxuICAgICAgdmFyIGNvbnZlcnQgPSBtYXBUb0FycmF5O1xuXG4gICAgY2FzZSBzZXRUYWc6XG4gICAgICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHO1xuICAgICAgY29udmVydCB8fCAoY29udmVydCA9IHNldFRvQXJyYXkpO1xuXG4gICAgICBpZiAob2JqZWN0LnNpemUgIT0gb3RoZXIuc2l6ZSAmJiAhaXNQYXJ0aWFsKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIC8vIEFzc3VtZSBjeWNsaWMgdmFsdWVzIGFyZSBlcXVhbC5cbiAgICAgIHZhciBzdGFja2VkID0gc3RhY2suZ2V0KG9iamVjdCk7XG4gICAgICBpZiAoc3RhY2tlZCkge1xuICAgICAgICByZXR1cm4gc3RhY2tlZCA9PSBvdGhlcjtcbiAgICAgIH1cbiAgICAgIGJpdG1hc2sgfD0gQ09NUEFSRV9VTk9SREVSRURfRkxBRztcblxuICAgICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgICBzdGFjay5zZXQob2JqZWN0LCBvdGhlcik7XG4gICAgICB2YXIgcmVzdWx0ID0gZXF1YWxBcnJheXMoY29udmVydChvYmplY3QpLCBjb252ZXJ0KG90aGVyKSwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjayk7XG4gICAgICBzdGFja1snZGVsZXRlJ10ob2JqZWN0KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG5cbiAgICBjYXNlIHN5bWJvbFRhZzpcbiAgICAgIGlmIChzeW1ib2xWYWx1ZU9mKSB7XG4gICAgICAgIHJldHVybiBzeW1ib2xWYWx1ZU9mLmNhbGwob2JqZWN0KSA9PSBzeW1ib2xWYWx1ZU9mLmNhbGwob3RoZXIpO1xuICAgICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlcXVhbEJ5VGFnO1xuIiwidmFyIGFycmF5UHVzaCA9IHJlcXVpcmUoJy4vX2FycmF5UHVzaCcpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2V0QWxsS2V5c2AgYW5kIGBnZXRBbGxLZXlzSW5gIHdoaWNoIHVzZXNcbiAqIGBrZXlzRnVuY2AgYW5kIGBzeW1ib2xzRnVuY2AgdG8gZ2V0IHRoZSBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIGFuZFxuICogc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0ga2V5c0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUga2V5cyBvZiBgb2JqZWN0YC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN5bWJvbHNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0QWxsS2V5cyhvYmplY3QsIGtleXNGdW5jLCBzeW1ib2xzRnVuYykge1xuICB2YXIgcmVzdWx0ID0ga2V5c0Z1bmMob2JqZWN0KTtcbiAgcmV0dXJuIGlzQXJyYXkob2JqZWN0KSA/IHJlc3VsdCA6IGFycmF5UHVzaChyZXN1bHQsIHN5bWJvbHNGdW5jKG9iamVjdCkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VHZXRBbGxLZXlzO1xuIiwiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uZmlsdGVyYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmlsdGVyZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5RmlsdGVyKGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc0luZGV4ID0gMCxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuICAgIGlmIChwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBhcnJheSkpIHtcbiAgICAgIHJlc3VsdFtyZXNJbmRleCsrXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5RmlsdGVyO1xuIiwiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgbmV3IGVtcHR5IGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4xMy4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZW1wdHkgYXJyYXkuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBhcnJheXMgPSBfLnRpbWVzKDIsIF8uc3R1YkFycmF5KTtcbiAqXG4gKiBjb25zb2xlLmxvZyhhcnJheXMpO1xuICogLy8gPT4gW1tdLCBbXV1cbiAqXG4gKiBjb25zb2xlLmxvZyhhcnJheXNbMF0gPT09IGFycmF5c1sxXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBzdHViQXJyYXkoKSB7XG4gIHJldHVybiBbXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHViQXJyYXk7XG4iLCJ2YXIgYXJyYXlGaWx0ZXIgPSByZXF1aXJlKCcuL19hcnJheUZpbHRlcicpLFxuICAgIHN0dWJBcnJheSA9IHJlcXVpcmUoJy4vc3R1YkFycmF5Jyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVHZXRTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gZW51bWVyYWJsZSBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHN5bWJvbHMuXG4gKi9cbnZhciBnZXRTeW1ib2xzID0gIW5hdGl2ZUdldFN5bWJvbHMgPyBzdHViQXJyYXkgOiBmdW5jdGlvbihvYmplY3QpIHtcbiAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIG9iamVjdCA9IE9iamVjdChvYmplY3QpO1xuICByZXR1cm4gYXJyYXlGaWx0ZXIobmF0aXZlR2V0U3ltYm9scyhvYmplY3QpLCBmdW5jdGlvbihzeW1ib2wpIHtcbiAgICByZXR1cm4gcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmplY3QsIHN5bWJvbCk7XG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRTeW1ib2xzO1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50aW1lc2Agd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzXG4gKiBvciBtYXggYXJyYXkgbGVuZ3RoIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiB0aW1lcyB0byBpbnZva2UgYGl0ZXJhdGVlYC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHJlc3VsdHMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VUaW1lcyhuLCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KG4pO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbikge1xuICAgIHJlc3VsdFtpbmRleF0gPSBpdGVyYXRlZShpbmRleCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVGltZXM7XG4iLCIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgYGZhbHNlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMTMuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udGltZXMoMiwgXy5zdHViRmFsc2UpO1xuICogLy8gPT4gW2ZhbHNlLCBmYWxzZV1cbiAqL1xuZnVuY3Rpb24gc3R1YkZhbHNlKCkge1xuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3R1YkZhbHNlO1xuIiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290JyksXG4gICAgc3R1YkZhbHNlID0gcmVxdWlyZSgnLi9zdHViRmFsc2UnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cbnZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xudmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcblxuLyoqIERldGVjdCB0aGUgcG9wdWxhciBDb21tb25KUyBleHRlbnNpb24gYG1vZHVsZS5leHBvcnRzYC4gKi9cbnZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBCdWZmZXIgPSBtb2R1bGVFeHBvcnRzID8gcm9vdC5CdWZmZXIgOiB1bmRlZmluZWQ7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVJc0J1ZmZlciA9IEJ1ZmZlciA/IEJ1ZmZlci5pc0J1ZmZlciA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIGJ1ZmZlci5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMy4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGJ1ZmZlciwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQnVmZmVyKG5ldyBCdWZmZXIoMikpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNCdWZmZXIobmV3IFVpbnQ4QXJyYXkoMikpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQnVmZmVyID0gbmF0aXZlSXNCdWZmZXIgfHwgc3R1YkZhbHNlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQnVmZmVyO1xuIiwiLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlcy4gKi9cbnZhciByZUlzVWludCA9IC9eKD86MHxbMS05XVxcZCopJC87XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGluZGV4LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoPU1BWF9TQUZFX0lOVEVHRVJdIFRoZSB1cHBlciBib3VuZHMgb2YgYSB2YWxpZCBpbmRleC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgaW5kZXgsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNJbmRleCh2YWx1ZSwgbGVuZ3RoKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICBsZW5ndGggPSBsZW5ndGggPT0gbnVsbCA/IE1BWF9TQUZFX0lOVEVHRVIgOiBsZW5ndGg7XG5cbiAgcmV0dXJuICEhbGVuZ3RoICYmXG4gICAgKHR5cGUgPT0gJ251bWJlcicgfHxcbiAgICAgICh0eXBlICE9ICdzeW1ib2wnICYmIHJlSXNVaW50LnRlc3QodmFsdWUpKSkgJiZcbiAgICAgICAgKHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPCBsZW5ndGgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzSW5kZXg7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc0xlbmd0aCA9IHJlcXVpcmUoJy4vaXNMZW5ndGgnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nLFxuICAgIGFycmF5VGFnID0gJ1tvYmplY3QgQXJyYXldJyxcbiAgICBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgIGRhdGVUYWcgPSAnW29iamVjdCBEYXRlXScsXG4gICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG51bWJlclRhZyA9ICdbb2JqZWN0IE51bWJlcl0nLFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nLFxuICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxuICAgIHdlYWtNYXBUYWcgPSAnW29iamVjdCBXZWFrTWFwXSc7XG5cbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXG4gICAgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nLFxuICAgIGZsb2F0MzJUYWcgPSAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICBmbG9hdDY0VGFnID0gJ1tvYmplY3QgRmxvYXQ2NEFycmF5XScsXG4gICAgaW50OFRhZyA9ICdbb2JqZWN0IEludDhBcnJheV0nLFxuICAgIGludDE2VGFnID0gJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgIGludDMyVGFnID0gJ1tvYmplY3QgSW50MzJBcnJheV0nLFxuICAgIHVpbnQ4VGFnID0gJ1tvYmplY3QgVWludDhBcnJheV0nLFxuICAgIHVpbnQ4Q2xhbXBlZFRhZyA9ICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXG4gICAgdWludDE2VGFnID0gJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICB1aW50MzJUYWcgPSAnW29iamVjdCBVaW50MzJBcnJheV0nO1xuXG4vKiogVXNlZCB0byBpZGVudGlmeSBgdG9TdHJpbmdUYWdgIHZhbHVlcyBvZiB0eXBlZCBhcnJheXMuICovXG52YXIgdHlwZWRBcnJheVRhZ3MgPSB7fTtcbnR5cGVkQXJyYXlUYWdzW2Zsb2F0MzJUYWddID0gdHlwZWRBcnJheVRhZ3NbZmxvYXQ2NFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbaW50OFRhZ10gPSB0eXBlZEFycmF5VGFnc1tpbnQxNlRhZ10gPVxudHlwZWRBcnJheVRhZ3NbaW50MzJUYWddID0gdHlwZWRBcnJheVRhZ3NbdWludDhUYWddID1cbnR5cGVkQXJyYXlUYWdzW3VpbnQ4Q2xhbXBlZFRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50MTZUYWddID1cbnR5cGVkQXJyYXlUYWdzW3VpbnQzMlRhZ10gPSB0cnVlO1xudHlwZWRBcnJheVRhZ3NbYXJnc1RhZ10gPSB0eXBlZEFycmF5VGFnc1thcnJheVRhZ10gPVxudHlwZWRBcnJheVRhZ3NbYXJyYXlCdWZmZXJUYWddID0gdHlwZWRBcnJheVRhZ3NbYm9vbFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbZGF0YVZpZXdUYWddID0gdHlwZWRBcnJheVRhZ3NbZGF0ZVRhZ10gPVxudHlwZWRBcnJheVRhZ3NbZXJyb3JUYWddID0gdHlwZWRBcnJheVRhZ3NbZnVuY1RhZ10gPVxudHlwZWRBcnJheVRhZ3NbbWFwVGFnXSA9IHR5cGVkQXJyYXlUYWdzW251bWJlclRhZ10gPVxudHlwZWRBcnJheVRhZ3Nbb2JqZWN0VGFnXSA9IHR5cGVkQXJyYXlUYWdzW3JlZ2V4cFRhZ10gPVxudHlwZWRBcnJheVRhZ3Nbc2V0VGFnXSA9IHR5cGVkQXJyYXlUYWdzW3N0cmluZ1RhZ10gPVxudHlwZWRBcnJheVRhZ3Nbd2Vha01hcFRhZ10gPSBmYWxzZTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc1R5cGVkQXJyYXlgIHdpdGhvdXQgTm9kZS5qcyBvcHRpbWl6YXRpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzVHlwZWRBcnJheSh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJlxuICAgIGlzTGVuZ3RoKHZhbHVlLmxlbmd0aCkgJiYgISF0eXBlZEFycmF5VGFnc1tiYXNlR2V0VGFnKHZhbHVlKV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzVHlwZWRBcnJheTtcbiIsInZhciBmcmVlR2xvYmFsID0gcmVxdWlyZSgnLi9fZnJlZUdsb2JhbCcpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgcHJvY2Vzc2AgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVQcm9jZXNzID0gbW9kdWxlRXhwb3J0cyAmJiBmcmVlR2xvYmFsLnByb2Nlc3M7XG5cbi8qKiBVc2VkIHRvIGFjY2VzcyBmYXN0ZXIgTm9kZS5qcyBoZWxwZXJzLiAqL1xudmFyIG5vZGVVdGlsID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIC8vIFVzZSBgdXRpbC50eXBlc2AgZm9yIE5vZGUuanMgMTArLlxuICAgIHZhciB0eXBlcyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlICYmIGZyZWVNb2R1bGUucmVxdWlyZSgndXRpbCcpLnR5cGVzO1xuXG4gICAgaWYgKHR5cGVzKSB7XG4gICAgICByZXR1cm4gdHlwZXM7XG4gICAgfVxuXG4gICAgLy8gTGVnYWN5IGBwcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKWAgZm9yIE5vZGUuanMgPCAxMC5cbiAgICByZXR1cm4gZnJlZVByb2Nlc3MgJiYgZnJlZVByb2Nlc3MuYmluZGluZyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nKCd1dGlsJyk7XG4gIH0gY2F0Y2ggKGUpIHt9XG59KCkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5vZGVVdGlsO1xuIiwidmFyIGJhc2VJc1R5cGVkQXJyYXkgPSByZXF1aXJlKCcuL19iYXNlSXNUeXBlZEFycmF5JyksXG4gICAgYmFzZVVuYXJ5ID0gcmVxdWlyZSgnLi9fYmFzZVVuYXJ5JyksXG4gICAgbm9kZVV0aWwgPSByZXF1aXJlKCcuL19ub2RlVXRpbCcpO1xuXG4vKiBOb2RlLmpzIGhlbHBlciByZWZlcmVuY2VzLiAqL1xudmFyIG5vZGVJc1R5cGVkQXJyYXkgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc1R5cGVkQXJyYXk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIHR5cGVkIGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1R5cGVkQXJyYXkobmV3IFVpbnQ4QXJyYXkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNUeXBlZEFycmF5KFtdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc1R5cGVkQXJyYXkgPSBub2RlSXNUeXBlZEFycmF5ID8gYmFzZVVuYXJ5KG5vZGVJc1R5cGVkQXJyYXkpIDogYmFzZUlzVHlwZWRBcnJheTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc1R5cGVkQXJyYXk7XG4iLCJ2YXIgYmFzZVRpbWVzID0gcmVxdWlyZSgnLi9fYmFzZVRpbWVzJyksXG4gICAgaXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzQnVmZmVyID0gcmVxdWlyZSgnLi9pc0J1ZmZlcicpLFxuICAgIGlzSW5kZXggPSByZXF1aXJlKCcuL19pc0luZGV4JyksXG4gICAgaXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9pc1R5cGVkQXJyYXknKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIHRoZSBhcnJheS1saWtlIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtib29sZWFufSBpbmhlcml0ZWQgU3BlY2lmeSByZXR1cm5pbmcgaW5oZXJpdGVkIHByb3BlcnR5IG5hbWVzLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYXJyYXlMaWtlS2V5cyh2YWx1ZSwgaW5oZXJpdGVkKSB7XG4gIHZhciBpc0FyciA9IGlzQXJyYXkodmFsdWUpLFxuICAgICAgaXNBcmcgPSAhaXNBcnIgJiYgaXNBcmd1bWVudHModmFsdWUpLFxuICAgICAgaXNCdWZmID0gIWlzQXJyICYmICFpc0FyZyAmJiBpc0J1ZmZlcih2YWx1ZSksXG4gICAgICBpc1R5cGUgPSAhaXNBcnIgJiYgIWlzQXJnICYmICFpc0J1ZmYgJiYgaXNUeXBlZEFycmF5KHZhbHVlKSxcbiAgICAgIHNraXBJbmRleGVzID0gaXNBcnIgfHwgaXNBcmcgfHwgaXNCdWZmIHx8IGlzVHlwZSxcbiAgICAgIHJlc3VsdCA9IHNraXBJbmRleGVzID8gYmFzZVRpbWVzKHZhbHVlLmxlbmd0aCwgU3RyaW5nKSA6IFtdLFxuICAgICAgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcblxuICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICBpZiAoKGluaGVyaXRlZCB8fCBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrZXkpKSAmJlxuICAgICAgICAhKHNraXBJbmRleGVzICYmIChcbiAgICAgICAgICAgLy8gU2FmYXJpIDkgaGFzIGVudW1lcmFibGUgYGFyZ3VtZW50cy5sZW5ndGhgIGluIHN0cmljdCBtb2RlLlxuICAgICAgICAgICBrZXkgPT0gJ2xlbmd0aCcgfHxcbiAgICAgICAgICAgLy8gTm9kZS5qcyAwLjEwIGhhcyBlbnVtZXJhYmxlIG5vbi1pbmRleCBwcm9wZXJ0aWVzIG9uIGJ1ZmZlcnMuXG4gICAgICAgICAgIChpc0J1ZmYgJiYgKGtleSA9PSAnb2Zmc2V0JyB8fCBrZXkgPT0gJ3BhcmVudCcpKSB8fFxuICAgICAgICAgICAvLyBQaGFudG9tSlMgMiBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiB0eXBlZCBhcnJheXMuXG4gICAgICAgICAgIChpc1R5cGUgJiYgKGtleSA9PSAnYnVmZmVyJyB8fCBrZXkgPT0gJ2J5dGVMZW5ndGgnIHx8IGtleSA9PSAnYnl0ZU9mZnNldCcpKSB8fFxuICAgICAgICAgICAvLyBTa2lwIGluZGV4IHByb3BlcnRpZXMuXG4gICAgICAgICAgIGlzSW5kZXgoa2V5LCBsZW5ndGgpXG4gICAgICAgICkpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5TGlrZUtleXM7XG4iLCIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhIHByb3RvdHlwZSBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwcm90b3R5cGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNQcm90b3R5cGUodmFsdWUpIHtcbiAgdmFyIEN0b3IgPSB2YWx1ZSAmJiB2YWx1ZS5jb25zdHJ1Y3RvcixcbiAgICAgIHByb3RvID0gKHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3Rvci5wcm90b3R5cGUpIHx8IG9iamVjdFByb3RvO1xuXG4gIHJldHVybiB2YWx1ZSA9PT0gcHJvdG87XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNQcm90b3R5cGU7XG4iLCIvKipcbiAqIENyZWF0ZXMgYSB1bmFyeSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggaXRzIGFyZ3VtZW50IHRyYW5zZm9ybWVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNmb3JtIFRoZSBhcmd1bWVudCB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlckFyZyhmdW5jLCB0cmFuc2Zvcm0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiBmdW5jKHRyYW5zZm9ybShhcmcpKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvdmVyQXJnO1xuIiwidmFyIG92ZXJBcmcgPSByZXF1aXJlKCcuL19vdmVyQXJnJyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVLZXlzID0gb3ZlckFyZyhPYmplY3Qua2V5cywgT2JqZWN0KTtcblxubW9kdWxlLmV4cG9ydHMgPSBuYXRpdmVLZXlzO1xuIiwidmFyIGlzUHJvdG90eXBlID0gcmVxdWlyZSgnLi9faXNQcm90b3R5cGUnKSxcbiAgICBuYXRpdmVLZXlzID0gcmVxdWlyZSgnLi9fbmF0aXZlS2V5cycpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmtleXNgIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYmFzZUtleXMob2JqZWN0KSB7XG4gIGlmICghaXNQcm90b3R5cGUob2JqZWN0KSkge1xuICAgIHJldHVybiBuYXRpdmVLZXlzKG9iamVjdCk7XG4gIH1cbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gT2JqZWN0KG9iamVjdCkpIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYga2V5ICE9ICdjb25zdHJ1Y3RvcicpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUtleXM7XG4iLCJ2YXIgYXJyYXlMaWtlS2V5cyA9IHJlcXVpcmUoJy4vX2FycmF5TGlrZUtleXMnKSxcbiAgICBiYXNlS2V5cyA9IHJlcXVpcmUoJy4vX2Jhc2VLZXlzJyksXG4gICAgaXNBcnJheUxpa2UgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgYG9iamVjdGAuXG4gKlxuICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuIFNlZSB0aGVcbiAqIFtFUyBzcGVjXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3Qua2V5cylcbiAqIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy5rZXlzKG5ldyBGb28pO1xuICogLy8gPT4gWydhJywgJ2InXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICpcbiAqIF8ua2V5cygnaGknKTtcbiAqIC8vID0+IFsnMCcsICcxJ11cbiAqL1xuZnVuY3Rpb24ga2V5cyhvYmplY3QpIHtcbiAgcmV0dXJuIGlzQXJyYXlMaWtlKG9iamVjdCkgPyBhcnJheUxpa2VLZXlzKG9iamVjdCkgOiBiYXNlS2V5cyhvYmplY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGtleXM7XG4iLCJ2YXIgYmFzZUdldEFsbEtleXMgPSByZXF1aXJlKCcuL19iYXNlR2V0QWxsS2V5cycpLFxuICAgIGdldFN5bWJvbHMgPSByZXF1aXJlKCcuL19nZXRTeW1ib2xzJyksXG4gICAga2V5cyA9IHJlcXVpcmUoJy4va2V5cycpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2Ygb3duIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMgYW5kIHN5bWJvbHMuXG4gKi9cbmZ1bmN0aW9uIGdldEFsbEtleXMob2JqZWN0KSB7XG4gIHJldHVybiBiYXNlR2V0QWxsS2V5cyhvYmplY3QsIGtleXMsIGdldFN5bWJvbHMpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEFsbEtleXM7XG4iLCJ2YXIgZ2V0QWxsS2V5cyA9IHJlcXVpcmUoJy4vX2dldEFsbEtleXMnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3Igb2JqZWN0cyB3aXRoIHN1cHBvcnQgZm9yXG4gKiBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYG9iamVjdGAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBlcXVhbE9iamVjdHMob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHLFxuICAgICAgb2JqUHJvcHMgPSBnZXRBbGxLZXlzKG9iamVjdCksXG4gICAgICBvYmpMZW5ndGggPSBvYmpQcm9wcy5sZW5ndGgsXG4gICAgICBvdGhQcm9wcyA9IGdldEFsbEtleXMob3RoZXIpLFxuICAgICAgb3RoTGVuZ3RoID0gb3RoUHJvcHMubGVuZ3RoO1xuXG4gIGlmIChvYmpMZW5ndGggIT0gb3RoTGVuZ3RoICYmICFpc1BhcnRpYWwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIGluZGV4ID0gb2JqTGVuZ3RoO1xuICB3aGlsZSAoaW5kZXgtLSkge1xuICAgIHZhciBrZXkgPSBvYmpQcm9wc1tpbmRleF07XG4gICAgaWYgKCEoaXNQYXJ0aWFsID8ga2V5IGluIG90aGVyIDogaGFzT3duUHJvcGVydHkuY2FsbChvdGhlciwga2V5KSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgLy8gQ2hlY2sgdGhhdCBjeWNsaWMgdmFsdWVzIGFyZSBlcXVhbC5cbiAgdmFyIG9ialN0YWNrZWQgPSBzdGFjay5nZXQob2JqZWN0KTtcbiAgdmFyIG90aFN0YWNrZWQgPSBzdGFjay5nZXQob3RoZXIpO1xuICBpZiAob2JqU3RhY2tlZCAmJiBvdGhTdGFja2VkKSB7XG4gICAgcmV0dXJuIG9ialN0YWNrZWQgPT0gb3RoZXIgJiYgb3RoU3RhY2tlZCA9PSBvYmplY3Q7XG4gIH1cbiAgdmFyIHJlc3VsdCA9IHRydWU7XG4gIHN0YWNrLnNldChvYmplY3QsIG90aGVyKTtcbiAgc3RhY2suc2V0KG90aGVyLCBvYmplY3QpO1xuXG4gIHZhciBza2lwQ3RvciA9IGlzUGFydGlhbDtcbiAgd2hpbGUgKCsraW5kZXggPCBvYmpMZW5ndGgpIHtcbiAgICBrZXkgPSBvYmpQcm9wc1tpbmRleF07XG4gICAgdmFyIG9ialZhbHVlID0gb2JqZWN0W2tleV0sXG4gICAgICAgIG90aFZhbHVlID0gb3RoZXJba2V5XTtcblxuICAgIGlmIChjdXN0b21pemVyKSB7XG4gICAgICB2YXIgY29tcGFyZWQgPSBpc1BhcnRpYWxcbiAgICAgICAgPyBjdXN0b21pemVyKG90aFZhbHVlLCBvYmpWYWx1ZSwga2V5LCBvdGhlciwgb2JqZWN0LCBzdGFjaylcbiAgICAgICAgOiBjdXN0b21pemVyKG9ialZhbHVlLCBvdGhWYWx1ZSwga2V5LCBvYmplY3QsIG90aGVyLCBzdGFjayk7XG4gICAgfVxuICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgb2JqZWN0cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgIGlmICghKGNvbXBhcmVkID09PSB1bmRlZmluZWRcbiAgICAgICAgICA/IChvYmpWYWx1ZSA9PT0gb3RoVmFsdWUgfHwgZXF1YWxGdW5jKG9ialZhbHVlLCBvdGhWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spKVxuICAgICAgICAgIDogY29tcGFyZWRcbiAgICAgICAgKSkge1xuICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgc2tpcEN0b3IgfHwgKHNraXBDdG9yID0ga2V5ID09ICdjb25zdHJ1Y3RvcicpO1xuICB9XG4gIGlmIChyZXN1bHQgJiYgIXNraXBDdG9yKSB7XG4gICAgdmFyIG9iakN0b3IgPSBvYmplY3QuY29uc3RydWN0b3IsXG4gICAgICAgIG90aEN0b3IgPSBvdGhlci5jb25zdHJ1Y3RvcjtcblxuICAgIC8vIE5vbiBgT2JqZWN0YCBvYmplY3QgaW5zdGFuY2VzIHdpdGggZGlmZmVyZW50IGNvbnN0cnVjdG9ycyBhcmUgbm90IGVxdWFsLlxuICAgIGlmIChvYmpDdG9yICE9IG90aEN0b3IgJiZcbiAgICAgICAgKCdjb25zdHJ1Y3RvcicgaW4gb2JqZWN0ICYmICdjb25zdHJ1Y3RvcicgaW4gb3RoZXIpICYmXG4gICAgICAgICEodHlwZW9mIG9iakN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBvYmpDdG9yIGluc3RhbmNlb2Ygb2JqQ3RvciAmJlxuICAgICAgICAgIHR5cGVvZiBvdGhDdG9yID09ICdmdW5jdGlvbicgJiYgb3RoQ3RvciBpbnN0YW5jZW9mIG90aEN0b3IpKSB7XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgc3RhY2tbJ2RlbGV0ZSddKG9iamVjdCk7XG4gIHN0YWNrWydkZWxldGUnXShvdGhlcik7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXF1YWxPYmplY3RzO1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBEYXRhVmlldyA9IGdldE5hdGl2ZShyb290LCAnRGF0YVZpZXcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBEYXRhVmlldztcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgUHJvbWlzZSA9IGdldE5hdGl2ZShyb290LCAnUHJvbWlzZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFByb21pc2U7XG4iLCJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIFNldCA9IGdldE5hdGl2ZShyb290LCAnU2V0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gU2V0O1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBXZWFrTWFwID0gZ2V0TmF0aXZlKHJvb3QsICdXZWFrTWFwJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gV2Vha01hcDtcbiIsInZhciBEYXRhVmlldyA9IHJlcXVpcmUoJy4vX0RhdGFWaWV3JyksXG4gICAgTWFwID0gcmVxdWlyZSgnLi9fTWFwJyksXG4gICAgUHJvbWlzZSA9IHJlcXVpcmUoJy4vX1Byb21pc2UnKSxcbiAgICBTZXQgPSByZXF1aXJlKCcuL19TZXQnKSxcbiAgICBXZWFrTWFwID0gcmVxdWlyZSgnLi9fV2Vha01hcCcpLFxuICAgIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgdG9Tb3VyY2UgPSByZXF1aXJlKCcuL190b1NvdXJjZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXG4gICAgcHJvbWlzZVRhZyA9ICdbb2JqZWN0IFByb21pc2VdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICB3ZWFrTWFwVGFnID0gJ1tvYmplY3QgV2Vha01hcF0nO1xuXG52YXIgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgbWFwcywgc2V0cywgYW5kIHdlYWttYXBzLiAqL1xudmFyIGRhdGFWaWV3Q3RvclN0cmluZyA9IHRvU291cmNlKERhdGFWaWV3KSxcbiAgICBtYXBDdG9yU3RyaW5nID0gdG9Tb3VyY2UoTWFwKSxcbiAgICBwcm9taXNlQ3RvclN0cmluZyA9IHRvU291cmNlKFByb21pc2UpLFxuICAgIHNldEN0b3JTdHJpbmcgPSB0b1NvdXJjZShTZXQpLFxuICAgIHdlYWtNYXBDdG9yU3RyaW5nID0gdG9Tb3VyY2UoV2Vha01hcCk7XG5cbi8qKlxuICogR2V0cyB0aGUgYHRvU3RyaW5nVGFnYCBvZiBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGB0b1N0cmluZ1RhZ2AuXG4gKi9cbnZhciBnZXRUYWcgPSBiYXNlR2V0VGFnO1xuXG4vLyBGYWxsYmFjayBmb3IgZGF0YSB2aWV3cywgbWFwcywgc2V0cywgYW5kIHdlYWsgbWFwcyBpbiBJRSAxMSBhbmQgcHJvbWlzZXMgaW4gTm9kZS5qcyA8IDYuXG5pZiAoKERhdGFWaWV3ICYmIGdldFRhZyhuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKDEpKSkgIT0gZGF0YVZpZXdUYWcpIHx8XG4gICAgKE1hcCAmJiBnZXRUYWcobmV3IE1hcCkgIT0gbWFwVGFnKSB8fFxuICAgIChQcm9taXNlICYmIGdldFRhZyhQcm9taXNlLnJlc29sdmUoKSkgIT0gcHJvbWlzZVRhZykgfHxcbiAgICAoU2V0ICYmIGdldFRhZyhuZXcgU2V0KSAhPSBzZXRUYWcpIHx8XG4gICAgKFdlYWtNYXAgJiYgZ2V0VGFnKG5ldyBXZWFrTWFwKSAhPSB3ZWFrTWFwVGFnKSkge1xuICBnZXRUYWcgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHZhciByZXN1bHQgPSBiYXNlR2V0VGFnKHZhbHVlKSxcbiAgICAgICAgQ3RvciA9IHJlc3VsdCA9PSBvYmplY3RUYWcgPyB2YWx1ZS5jb25zdHJ1Y3RvciA6IHVuZGVmaW5lZCxcbiAgICAgICAgY3RvclN0cmluZyA9IEN0b3IgPyB0b1NvdXJjZShDdG9yKSA6ICcnO1xuXG4gICAgaWYgKGN0b3JTdHJpbmcpIHtcbiAgICAgIHN3aXRjaCAoY3RvclN0cmluZykge1xuICAgICAgICBjYXNlIGRhdGFWaWV3Q3RvclN0cmluZzogcmV0dXJuIGRhdGFWaWV3VGFnO1xuICAgICAgICBjYXNlIG1hcEN0b3JTdHJpbmc6IHJldHVybiBtYXBUYWc7XG4gICAgICAgIGNhc2UgcHJvbWlzZUN0b3JTdHJpbmc6IHJldHVybiBwcm9taXNlVGFnO1xuICAgICAgICBjYXNlIHNldEN0b3JTdHJpbmc6IHJldHVybiBzZXRUYWc7XG4gICAgICAgIGNhc2Ugd2Vha01hcEN0b3JTdHJpbmc6IHJldHVybiB3ZWFrTWFwVGFnO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFRhZztcbiIsInZhciBTdGFjayA9IHJlcXVpcmUoJy4vX1N0YWNrJyksXG4gICAgZXF1YWxBcnJheXMgPSByZXF1aXJlKCcuL19lcXVhbEFycmF5cycpLFxuICAgIGVxdWFsQnlUYWcgPSByZXF1aXJlKCcuL19lcXVhbEJ5VGFnJyksXG4gICAgZXF1YWxPYmplY3RzID0gcmVxdWlyZSgnLi9fZXF1YWxPYmplY3RzJyksXG4gICAgZ2V0VGFnID0gcmVxdWlyZSgnLi9fZ2V0VGFnJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzQnVmZmVyID0gcmVxdWlyZSgnLi9pc0J1ZmZlcicpLFxuICAgIGlzVHlwZWRBcnJheSA9IHJlcXVpcmUoJy4vaXNUeXBlZEFycmF5Jyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJyxcbiAgICBhcnJheVRhZyA9ICdbb2JqZWN0IEFycmF5XScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XSc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbGAgZm9yIGFycmF5cyBhbmQgb2JqZWN0cyB3aGljaCBwZXJmb3Jtc1xuICogZGVlcCBjb21wYXJpc29ucyBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzIGVuYWJsaW5nIG9iamVjdHMgd2l0aCBjaXJjdWxhclxuICogcmVmZXJlbmNlcyB0byBiZSBjb21wYXJlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIGBvYmplY3RgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdHMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzRXF1YWxEZWVwKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spIHtcbiAgdmFyIG9iaklzQXJyID0gaXNBcnJheShvYmplY3QpLFxuICAgICAgb3RoSXNBcnIgPSBpc0FycmF5KG90aGVyKSxcbiAgICAgIG9ialRhZyA9IG9iaklzQXJyID8gYXJyYXlUYWcgOiBnZXRUYWcob2JqZWN0KSxcbiAgICAgIG90aFRhZyA9IG90aElzQXJyID8gYXJyYXlUYWcgOiBnZXRUYWcob3RoZXIpO1xuXG4gIG9ialRhZyA9IG9ialRhZyA9PSBhcmdzVGFnID8gb2JqZWN0VGFnIDogb2JqVGFnO1xuICBvdGhUYWcgPSBvdGhUYWcgPT0gYXJnc1RhZyA/IG9iamVjdFRhZyA6IG90aFRhZztcblxuICB2YXIgb2JqSXNPYmogPSBvYmpUYWcgPT0gb2JqZWN0VGFnLFxuICAgICAgb3RoSXNPYmogPSBvdGhUYWcgPT0gb2JqZWN0VGFnLFxuICAgICAgaXNTYW1lVGFnID0gb2JqVGFnID09IG90aFRhZztcblxuICBpZiAoaXNTYW1lVGFnICYmIGlzQnVmZmVyKG9iamVjdCkpIHtcbiAgICBpZiAoIWlzQnVmZmVyKG90aGVyKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBvYmpJc0FyciA9IHRydWU7XG4gICAgb2JqSXNPYmogPSBmYWxzZTtcbiAgfVxuICBpZiAoaXNTYW1lVGFnICYmICFvYmpJc09iaikge1xuICAgIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gICAgcmV0dXJuIChvYmpJc0FyciB8fCBpc1R5cGVkQXJyYXkob2JqZWN0KSlcbiAgICAgID8gZXF1YWxBcnJheXMob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaylcbiAgICAgIDogZXF1YWxCeVRhZyhvYmplY3QsIG90aGVyLCBvYmpUYWcsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spO1xuICB9XG4gIGlmICghKGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRykpIHtcbiAgICB2YXIgb2JqSXNXcmFwcGVkID0gb2JqSXNPYmogJiYgaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsICdfX3dyYXBwZWRfXycpLFxuICAgICAgICBvdGhJc1dyYXBwZWQgPSBvdGhJc09iaiAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG90aGVyLCAnX193cmFwcGVkX18nKTtcblxuICAgIGlmIChvYmpJc1dyYXBwZWQgfHwgb3RoSXNXcmFwcGVkKSB7XG4gICAgICB2YXIgb2JqVW53cmFwcGVkID0gb2JqSXNXcmFwcGVkID8gb2JqZWN0LnZhbHVlKCkgOiBvYmplY3QsXG4gICAgICAgICAgb3RoVW53cmFwcGVkID0gb3RoSXNXcmFwcGVkID8gb3RoZXIudmFsdWUoKSA6IG90aGVyO1xuXG4gICAgICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgU3RhY2spO1xuICAgICAgcmV0dXJuIGVxdWFsRnVuYyhvYmpVbndyYXBwZWQsIG90aFVud3JhcHBlZCwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spO1xuICAgIH1cbiAgfVxuICBpZiAoIWlzU2FtZVRhZykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgU3RhY2spO1xuICByZXR1cm4gZXF1YWxPYmplY3RzKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc0VxdWFsRGVlcDtcbiIsInZhciBiYXNlSXNFcXVhbERlZXAgPSByZXF1aXJlKCcuL19iYXNlSXNFcXVhbERlZXAnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzRXF1YWxgIHdoaWNoIHN1cHBvcnRzIHBhcnRpYWwgY29tcGFyaXNvbnNcbiAqIGFuZCB0cmFja3MgdHJhdmVyc2VkIG9iamVjdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHtib29sZWFufSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLlxuICogIDEgLSBVbm9yZGVyZWQgY29tcGFyaXNvblxuICogIDIgLSBQYXJ0aWFsIGNvbXBhcmlzb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBgdmFsdWVgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNFcXVhbCh2YWx1ZSwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKSB7XG4gIGlmICh2YWx1ZSA9PT0gb3RoZXIpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAodmFsdWUgPT0gbnVsbCB8fCBvdGhlciA9PSBudWxsIHx8ICghaXNPYmplY3RMaWtlKHZhbHVlKSAmJiAhaXNPYmplY3RMaWtlKG90aGVyKSkpIHtcbiAgICByZXR1cm4gdmFsdWUgIT09IHZhbHVlICYmIG90aGVyICE9PSBvdGhlcjtcbiAgfVxuICByZXR1cm4gYmFzZUlzRXF1YWxEZWVwKHZhbHVlLCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgYmFzZUlzRXF1YWwsIHN0YWNrKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNFcXVhbDtcbiIsInZhciBiYXNlSXNFcXVhbCA9IHJlcXVpcmUoJy4vX2Jhc2VJc0VxdWFsJyk7XG5cbi8qKlxuICogUGVyZm9ybXMgYSBkZWVwIGNvbXBhcmlzb24gYmV0d2VlbiB0d28gdmFsdWVzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZVxuICogZXF1aXZhbGVudC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2Qgc3VwcG9ydHMgY29tcGFyaW5nIGFycmF5cywgYXJyYXkgYnVmZmVycywgYm9vbGVhbnMsXG4gKiBkYXRlIG9iamVjdHMsIGVycm9yIG9iamVjdHMsIG1hcHMsIG51bWJlcnMsIGBPYmplY3RgIG9iamVjdHMsIHJlZ2V4ZXMsXG4gKiBzZXRzLCBzdHJpbmdzLCBzeW1ib2xzLCBhbmQgdHlwZWQgYXJyYXlzLiBgT2JqZWN0YCBvYmplY3RzIGFyZSBjb21wYXJlZFxuICogYnkgdGhlaXIgb3duLCBub3QgaW5oZXJpdGVkLCBlbnVtZXJhYmxlIHByb3BlcnRpZXMuIEZ1bmN0aW9ucyBhbmQgRE9NXG4gKiBub2RlcyBhcmUgY29tcGFyZWQgYnkgc3RyaWN0IGVxdWFsaXR5LCBpLmUuIGA9PT1gLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICogdmFyIG90aGVyID0geyAnYSc6IDEgfTtcbiAqXG4gKiBfLmlzRXF1YWwob2JqZWN0LCBvdGhlcik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogb2JqZWN0ID09PSBvdGhlcjtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRXF1YWwodmFsdWUsIG90aGVyKSB7XG4gIHJldHVybiBiYXNlSXNFcXVhbCh2YWx1ZSwgb3RoZXIpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRXF1YWw7XG4iLCJ2YXIgYmFzZUtleXMgPSByZXF1aXJlKCcuL19iYXNlS2V5cycpLFxuICAgIGdldFRhZyA9IHJlcXVpcmUoJy4vX2dldFRhZycpLFxuICAgIGlzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9pc0FyZ3VtZW50cycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKSxcbiAgICBpc0J1ZmZlciA9IHJlcXVpcmUoJy4vaXNCdWZmZXInKSxcbiAgICBpc1Byb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2lzUHJvdG90eXBlJyksXG4gICAgaXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9pc1R5cGVkQXJyYXknKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGFuIGVtcHR5IG9iamVjdCwgY29sbGVjdGlvbiwgbWFwLCBvciBzZXQuXG4gKlxuICogT2JqZWN0cyBhcmUgY29uc2lkZXJlZCBlbXB0eSBpZiB0aGV5IGhhdmUgbm8gb3duIGVudW1lcmFibGUgc3RyaW5nIGtleWVkXG4gKiBwcm9wZXJ0aWVzLlxuICpcbiAqIEFycmF5LWxpa2UgdmFsdWVzIHN1Y2ggYXMgYGFyZ3VtZW50c2Agb2JqZWN0cywgYXJyYXlzLCBidWZmZXJzLCBzdHJpbmdzLCBvclxuICogalF1ZXJ5LWxpa2UgY29sbGVjdGlvbnMgYXJlIGNvbnNpZGVyZWQgZW1wdHkgaWYgdGhleSBoYXZlIGEgYGxlbmd0aGAgb2YgYDBgLlxuICogU2ltaWxhcmx5LCBtYXBzIGFuZCBzZXRzIGFyZSBjb25zaWRlcmVkIGVtcHR5IGlmIHRoZXkgaGF2ZSBhIGBzaXplYCBvZiBgMGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgZW1wdHksIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0VtcHR5KG51bGwpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNFbXB0eSh0cnVlKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRW1wdHkoMSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0VtcHR5KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNFbXB0eSh7ICdhJzogMSB9KTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRW1wdHkodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoaXNBcnJheUxpa2UodmFsdWUpICYmXG4gICAgICAoaXNBcnJheSh2YWx1ZSkgfHwgdHlwZW9mIHZhbHVlID09ICdzdHJpbmcnIHx8IHR5cGVvZiB2YWx1ZS5zcGxpY2UgPT0gJ2Z1bmN0aW9uJyB8fFxuICAgICAgICBpc0J1ZmZlcih2YWx1ZSkgfHwgaXNUeXBlZEFycmF5KHZhbHVlKSB8fCBpc0FyZ3VtZW50cyh2YWx1ZSkpKSB7XG4gICAgcmV0dXJuICF2YWx1ZS5sZW5ndGg7XG4gIH1cbiAgdmFyIHRhZyA9IGdldFRhZyh2YWx1ZSk7XG4gIGlmICh0YWcgPT0gbWFwVGFnIHx8IHRhZyA9PSBzZXRUYWcpIHtcbiAgICByZXR1cm4gIXZhbHVlLnNpemU7XG4gIH1cbiAgaWYgKGlzUHJvdG90eXBlKHZhbHVlKSkge1xuICAgIHJldHVybiAhYmFzZUtleXModmFsdWUpLmxlbmd0aDtcbiAgfVxuICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwga2V5KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0VtcHR5O1xuIiwiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uZm9yRWFjaGAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5RWFjaChhcnJheSwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGlmIChpdGVyYXRlZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkgPT09IGZhbHNlKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5RWFjaDtcbiIsInZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2RlZmluZVByb3BlcnR5Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGFzc2lnblZhbHVlYCBhbmQgYGFzc2lnbk1lcmdlVmFsdWVgIHdpdGhvdXRcbiAqIHZhbHVlIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduLlxuICovXG5mdW5jdGlvbiBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgPT0gJ19fcHJvdG9fXycgJiYgZGVmaW5lUHJvcGVydHkpIHtcbiAgICBkZWZpbmVQcm9wZXJ0eShvYmplY3QsIGtleSwge1xuICAgICAgJ2NvbmZpZ3VyYWJsZSc6IHRydWUsXG4gICAgICAnZW51bWVyYWJsZSc6IHRydWUsXG4gICAgICAndmFsdWUnOiB2YWx1ZSxcbiAgICAgICd3cml0YWJsZSc6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUFzc2lnblZhbHVlO1xuIiwidmFyIGJhc2VBc3NpZ25WYWx1ZSA9IHJlcXVpcmUoJy4vX2Jhc2VBc3NpZ25WYWx1ZScpLFxuICAgIGVxID0gcmVxdWlyZSgnLi9lcScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEFzc2lnbnMgYHZhbHVlYCB0byBga2V5YCBvZiBgb2JqZWN0YCBpZiB0aGUgZXhpc3RpbmcgdmFsdWUgaXMgbm90IGVxdWl2YWxlbnRcbiAqIHVzaW5nIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gYXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHZhciBvYmpWYWx1ZSA9IG9iamVjdFtrZXldO1xuICBpZiAoIShoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSAmJiBlcShvYmpWYWx1ZSwgdmFsdWUpKSB8fFxuICAgICAgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkpIHtcbiAgICBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFzc2lnblZhbHVlO1xuIiwidmFyIGFzc2lnblZhbHVlID0gcmVxdWlyZSgnLi9fYXNzaWduVmFsdWUnKSxcbiAgICBiYXNlQXNzaWduVmFsdWUgPSByZXF1aXJlKCcuL19iYXNlQXNzaWduVmFsdWUnKTtcblxuLyoqXG4gKiBDb3BpZXMgcHJvcGVydGllcyBvZiBgc291cmNlYCB0byBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tLlxuICogQHBhcmFtIHtBcnJheX0gcHJvcHMgVGhlIHByb3BlcnR5IGlkZW50aWZpZXJzIHRvIGNvcHkuXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdD17fV0gVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgdG8uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb3BpZWQgdmFsdWVzLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gY29weU9iamVjdChzb3VyY2UsIHByb3BzLCBvYmplY3QsIGN1c3RvbWl6ZXIpIHtcbiAgdmFyIGlzTmV3ID0gIW9iamVjdDtcbiAgb2JqZWN0IHx8IChvYmplY3QgPSB7fSk7XG5cbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIga2V5ID0gcHJvcHNbaW5kZXhdO1xuXG4gICAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxuICAgICAgPyBjdXN0b21pemVyKG9iamVjdFtrZXldLCBzb3VyY2Vba2V5XSwga2V5LCBvYmplY3QsIHNvdXJjZSlcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKG5ld1ZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG5ld1ZhbHVlID0gc291cmNlW2tleV07XG4gICAgfVxuICAgIGlmIChpc05ldykge1xuICAgICAgYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBvYmplY3Q7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29weU9iamVjdDtcbiIsInZhciBjb3B5T2JqZWN0ID0gcmVxdWlyZSgnLi9fY29weU9iamVjdCcpLFxuICAgIGtleXMgPSByZXF1aXJlKCcuL2tleXMnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5hc3NpZ25gIHdpdGhvdXQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgc291cmNlc1xuICogb3IgYGN1c3RvbWl6ZXJgIGZ1bmN0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgc291cmNlIG9iamVjdC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VBc3NpZ24ob2JqZWN0LCBzb3VyY2UpIHtcbiAgcmV0dXJuIG9iamVjdCAmJiBjb3B5T2JqZWN0KHNvdXJjZSwga2V5cyhzb3VyY2UpLCBvYmplY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VBc3NpZ247XG4iLCIvKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgbGlrZVxuICogW2BPYmplY3Qua2V5c2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5rZXlzKVxuICogZXhjZXB0IHRoYXQgaXQgaW5jbHVkZXMgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydGllcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gbmF0aXZlS2V5c0luKG9iamVjdCkge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGlmIChvYmplY3QgIT0gbnVsbCkge1xuICAgIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBuYXRpdmVLZXlzSW47XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0JyksXG4gICAgaXNQcm90b3R5cGUgPSByZXF1aXJlKCcuL19pc1Byb3RvdHlwZScpLFxuICAgIG5hdGl2ZUtleXNJbiA9IHJlcXVpcmUoJy4vX25hdGl2ZUtleXNJbicpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmtleXNJbmAgd2hpY2ggZG9lc24ndCB0cmVhdCBzcGFyc2UgYXJyYXlzIGFzIGRlbnNlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBiYXNlS2V5c0luKG9iamVjdCkge1xuICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICByZXR1cm4gbmF0aXZlS2V5c0luKG9iamVjdCk7XG4gIH1cbiAgdmFyIGlzUHJvdG8gPSBpc1Byb3RvdHlwZShvYmplY3QpLFxuICAgICAgcmVzdWx0ID0gW107XG5cbiAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgIGlmICghKGtleSA9PSAnY29uc3RydWN0b3InICYmIChpc1Byb3RvIHx8ICFoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VLZXlzSW47XG4iLCJ2YXIgYXJyYXlMaWtlS2V5cyA9IHJlcXVpcmUoJy4vX2FycmF5TGlrZUtleXMnKSxcbiAgICBiYXNlS2V5c0luID0gcmVxdWlyZSgnLi9fYmFzZUtleXNJbicpLFxuICAgIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgYG9iamVjdGAuXG4gKlxuICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy5rZXlzSW4obmV3IEZvbyk7XG4gKiAvLyA9PiBbJ2EnLCAnYicsICdjJ10gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqL1xuZnVuY3Rpb24ga2V5c0luKG9iamVjdCkge1xuICByZXR1cm4gaXNBcnJheUxpa2Uob2JqZWN0KSA/IGFycmF5TGlrZUtleXMob2JqZWN0LCB0cnVlKSA6IGJhc2VLZXlzSW4ob2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBrZXlzSW47XG4iLCJ2YXIgY29weU9iamVjdCA9IHJlcXVpcmUoJy4vX2NvcHlPYmplY3QnKSxcbiAgICBrZXlzSW4gPSByZXF1aXJlKCcuL2tleXNJbicpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmFzc2lnbkluYCB3aXRob3V0IHN1cHBvcnQgZm9yIG11bHRpcGxlIHNvdXJjZXNcbiAqIG9yIGBjdXN0b21pemVyYCBmdW5jdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBiYXNlQXNzaWduSW4ob2JqZWN0LCBzb3VyY2UpIHtcbiAgcmV0dXJuIG9iamVjdCAmJiBjb3B5T2JqZWN0KHNvdXJjZSwga2V5c0luKHNvdXJjZSksIG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUFzc2lnbkluO1xuIiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgQnVmZmVyID0gbW9kdWxlRXhwb3J0cyA/IHJvb3QuQnVmZmVyIDogdW5kZWZpbmVkLFxuICAgIGFsbG9jVW5zYWZlID0gQnVmZmVyID8gQnVmZmVyLmFsbG9jVW5zYWZlIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiAgYGJ1ZmZlcmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QnVmZmVyfSBidWZmZXIgVGhlIGJ1ZmZlciB0byBjbG9uZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXG4gKiBAcmV0dXJucyB7QnVmZmVyfSBSZXR1cm5zIHRoZSBjbG9uZWQgYnVmZmVyLlxuICovXG5mdW5jdGlvbiBjbG9uZUJ1ZmZlcihidWZmZXIsIGlzRGVlcCkge1xuICBpZiAoaXNEZWVwKSB7XG4gICAgcmV0dXJuIGJ1ZmZlci5zbGljZSgpO1xuICB9XG4gIHZhciBsZW5ndGggPSBidWZmZXIubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0gYWxsb2NVbnNhZmUgPyBhbGxvY1Vuc2FmZShsZW5ndGgpIDogbmV3IGJ1ZmZlci5jb25zdHJ1Y3RvcihsZW5ndGgpO1xuXG4gIGJ1ZmZlci5jb3B5KHJlc3VsdCk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVCdWZmZXI7XG4iLCIvKipcbiAqIENvcGllcyB0aGUgdmFsdWVzIG9mIGBzb3VyY2VgIHRvIGBhcnJheWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IHNvdXJjZSBUaGUgYXJyYXkgdG8gY29weSB2YWx1ZXMgZnJvbS5cbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheT1bXV0gVGhlIGFycmF5IHRvIGNvcHkgdmFsdWVzIHRvLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIGNvcHlBcnJheShzb3VyY2UsIGFycmF5KSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gc291cmNlLmxlbmd0aDtcblxuICBhcnJheSB8fCAoYXJyYXkgPSBBcnJheShsZW5ndGgpKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBhcnJheVtpbmRleF0gPSBzb3VyY2VbaW5kZXhdO1xuICB9XG4gIHJldHVybiBhcnJheTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb3B5QXJyYXk7XG4iLCJ2YXIgY29weU9iamVjdCA9IHJlcXVpcmUoJy4vX2NvcHlPYmplY3QnKSxcbiAgICBnZXRTeW1ib2xzID0gcmVxdWlyZSgnLi9fZ2V0U3ltYm9scycpO1xuXG4vKipcbiAqIENvcGllcyBvd24gc3ltYm9scyBvZiBgc291cmNlYCB0byBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IHRvIGNvcHkgc3ltYm9scyBmcm9tLlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3Q9e31dIFRoZSBvYmplY3QgdG8gY29weSBzeW1ib2xzIHRvLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gY29weVN5bWJvbHMoc291cmNlLCBvYmplY3QpIHtcbiAgcmV0dXJuIGNvcHlPYmplY3Qoc291cmNlLCBnZXRTeW1ib2xzKHNvdXJjZSksIG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29weVN5bWJvbHM7XG4iLCJ2YXIgb3ZlckFyZyA9IHJlcXVpcmUoJy4vX292ZXJBcmcnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgZ2V0UHJvdG90eXBlID0gb3ZlckFyZyhPYmplY3QuZ2V0UHJvdG90eXBlT2YsIE9iamVjdCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0UHJvdG90eXBlO1xuIiwidmFyIGFycmF5UHVzaCA9IHJlcXVpcmUoJy4vX2FycmF5UHVzaCcpLFxuICAgIGdldFByb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2dldFByb3RvdHlwZScpLFxuICAgIGdldFN5bWJvbHMgPSByZXF1aXJlKCcuL19nZXRTeW1ib2xzJyksXG4gICAgc3R1YkFycmF5ID0gcmVxdWlyZSgnLi9zdHViQXJyYXknKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUdldFN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBzeW1ib2xzLlxuICovXG52YXIgZ2V0U3ltYm9sc0luID0gIW5hdGl2ZUdldFN5bWJvbHMgPyBzdHViQXJyYXkgOiBmdW5jdGlvbihvYmplY3QpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB3aGlsZSAob2JqZWN0KSB7XG4gICAgYXJyYXlQdXNoKHJlc3VsdCwgZ2V0U3ltYm9scyhvYmplY3QpKTtcbiAgICBvYmplY3QgPSBnZXRQcm90b3R5cGUob2JqZWN0KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRTeW1ib2xzSW47XG4iLCJ2YXIgY29weU9iamVjdCA9IHJlcXVpcmUoJy4vX2NvcHlPYmplY3QnKSxcbiAgICBnZXRTeW1ib2xzSW4gPSByZXF1aXJlKCcuL19nZXRTeW1ib2xzSW4nKTtcblxuLyoqXG4gKiBDb3BpZXMgb3duIGFuZCBpbmhlcml0ZWQgc3ltYm9scyBvZiBgc291cmNlYCB0byBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IHRvIGNvcHkgc3ltYm9scyBmcm9tLlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3Q9e31dIFRoZSBvYmplY3QgdG8gY29weSBzeW1ib2xzIHRvLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gY29weVN5bWJvbHNJbihzb3VyY2UsIG9iamVjdCkge1xuICByZXR1cm4gY29weU9iamVjdChzb3VyY2UsIGdldFN5bWJvbHNJbihzb3VyY2UpLCBvYmplY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcHlTeW1ib2xzSW47XG4iLCJ2YXIgYmFzZUdldEFsbEtleXMgPSByZXF1aXJlKCcuL19iYXNlR2V0QWxsS2V5cycpLFxuICAgIGdldFN5bWJvbHNJbiA9IHJlcXVpcmUoJy4vX2dldFN5bWJvbHNJbicpLFxuICAgIGtleXNJbiA9IHJlcXVpcmUoJy4va2V5c0luJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIGFuZFxuICogc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scy5cbiAqL1xuZnVuY3Rpb24gZ2V0QWxsS2V5c0luKG9iamVjdCkge1xuICByZXR1cm4gYmFzZUdldEFsbEtleXMob2JqZWN0LCBrZXlzSW4sIGdldFN5bWJvbHNJbik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QWxsS2V5c0luO1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBJbml0aWFsaXplcyBhbiBhcnJheSBjbG9uZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGNsb25lLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBpbml0aWFsaXplZCBjbG9uZS5cbiAqL1xuZnVuY3Rpb24gaW5pdENsb25lQXJyYXkoYXJyYXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IG5ldyBhcnJheS5jb25zdHJ1Y3RvcihsZW5ndGgpO1xuXG4gIC8vIEFkZCBwcm9wZXJ0aWVzIGFzc2lnbmVkIGJ5IGBSZWdFeHAjZXhlY2AuXG4gIGlmIChsZW5ndGggJiYgdHlwZW9mIGFycmF5WzBdID09ICdzdHJpbmcnICYmIGhhc093blByb3BlcnR5LmNhbGwoYXJyYXksICdpbmRleCcpKSB7XG4gICAgcmVzdWx0LmluZGV4ID0gYXJyYXkuaW5kZXg7XG4gICAgcmVzdWx0LmlucHV0ID0gYXJyYXkuaW5wdXQ7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbml0Q2xvbmVBcnJheTtcbiIsInZhciBVaW50OEFycmF5ID0gcmVxdWlyZSgnLi9fVWludDhBcnJheScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgYXJyYXlCdWZmZXJgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5QnVmZmVyfSBhcnJheUJ1ZmZlciBUaGUgYXJyYXkgYnVmZmVyIHRvIGNsb25lLlxuICogQHJldHVybnMge0FycmF5QnVmZmVyfSBSZXR1cm5zIHRoZSBjbG9uZWQgYXJyYXkgYnVmZmVyLlxuICovXG5mdW5jdGlvbiBjbG9uZUFycmF5QnVmZmVyKGFycmF5QnVmZmVyKSB7XG4gIHZhciByZXN1bHQgPSBuZXcgYXJyYXlCdWZmZXIuY29uc3RydWN0b3IoYXJyYXlCdWZmZXIuYnl0ZUxlbmd0aCk7XG4gIG5ldyBVaW50OEFycmF5KHJlc3VsdCkuc2V0KG5ldyBVaW50OEFycmF5KGFycmF5QnVmZmVyKSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVBcnJheUJ1ZmZlcjtcbiIsInZhciBjbG9uZUFycmF5QnVmZmVyID0gcmVxdWlyZSgnLi9fY2xvbmVBcnJheUJ1ZmZlcicpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgZGF0YVZpZXdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gZGF0YVZpZXcgVGhlIGRhdGEgdmlldyB0byBjbG9uZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgZGF0YSB2aWV3LlxuICovXG5mdW5jdGlvbiBjbG9uZURhdGFWaWV3KGRhdGFWaWV3LCBpc0RlZXApIHtcbiAgdmFyIGJ1ZmZlciA9IGlzRGVlcCA/IGNsb25lQXJyYXlCdWZmZXIoZGF0YVZpZXcuYnVmZmVyKSA6IGRhdGFWaWV3LmJ1ZmZlcjtcbiAgcmV0dXJuIG5ldyBkYXRhVmlldy5jb25zdHJ1Y3RvcihidWZmZXIsIGRhdGFWaWV3LmJ5dGVPZmZzZXQsIGRhdGFWaWV3LmJ5dGVMZW5ndGgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb25lRGF0YVZpZXc7XG4iLCIvKiogVXNlZCB0byBtYXRjaCBgUmVnRXhwYCBmbGFncyBmcm9tIHRoZWlyIGNvZXJjZWQgc3RyaW5nIHZhbHVlcy4gKi9cbnZhciByZUZsYWdzID0gL1xcdyokLztcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYHJlZ2V4cGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSByZWdleHAgVGhlIHJlZ2V4cCB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCByZWdleHAuXG4gKi9cbmZ1bmN0aW9uIGNsb25lUmVnRXhwKHJlZ2V4cCkge1xuICB2YXIgcmVzdWx0ID0gbmV3IHJlZ2V4cC5jb25zdHJ1Y3RvcihyZWdleHAuc291cmNlLCByZUZsYWdzLmV4ZWMocmVnZXhwKSk7XG4gIHJlc3VsdC5sYXN0SW5kZXggPSByZWdleHAubGFzdEluZGV4O1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb25lUmVnRXhwO1xuIiwidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpO1xuXG4vKiogVXNlZCB0byBjb252ZXJ0IHN5bWJvbHMgdG8gcHJpbWl0aXZlcyBhbmQgc3RyaW5ncy4gKi9cbnZhciBzeW1ib2xQcm90byA9IFN5bWJvbCA/IFN5bWJvbC5wcm90b3R5cGUgOiB1bmRlZmluZWQsXG4gICAgc3ltYm9sVmFsdWVPZiA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udmFsdWVPZiA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhlIGBzeW1ib2xgIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHN5bWJvbCBUaGUgc3ltYm9sIG9iamVjdCB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCBzeW1ib2wgb2JqZWN0LlxuICovXG5mdW5jdGlvbiBjbG9uZVN5bWJvbChzeW1ib2wpIHtcbiAgcmV0dXJuIHN5bWJvbFZhbHVlT2YgPyBPYmplY3Qoc3ltYm9sVmFsdWVPZi5jYWxsKHN5bWJvbCkpIDoge307XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVTeW1ib2w7XG4iLCJ2YXIgY2xvbmVBcnJheUJ1ZmZlciA9IHJlcXVpcmUoJy4vX2Nsb25lQXJyYXlCdWZmZXInKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYHR5cGVkQXJyYXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gdHlwZWRBcnJheSBUaGUgdHlwZWQgYXJyYXkgdG8gY2xvbmUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0RlZXBdIFNwZWNpZnkgYSBkZWVwIGNsb25lLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2xvbmVkIHR5cGVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBjbG9uZVR5cGVkQXJyYXkodHlwZWRBcnJheSwgaXNEZWVwKSB7XG4gIHZhciBidWZmZXIgPSBpc0RlZXAgPyBjbG9uZUFycmF5QnVmZmVyKHR5cGVkQXJyYXkuYnVmZmVyKSA6IHR5cGVkQXJyYXkuYnVmZmVyO1xuICByZXR1cm4gbmV3IHR5cGVkQXJyYXkuY29uc3RydWN0b3IoYnVmZmVyLCB0eXBlZEFycmF5LmJ5dGVPZmZzZXQsIHR5cGVkQXJyYXkubGVuZ3RoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZVR5cGVkQXJyYXk7XG4iLCJ2YXIgY2xvbmVBcnJheUJ1ZmZlciA9IHJlcXVpcmUoJy4vX2Nsb25lQXJyYXlCdWZmZXInKSxcbiAgICBjbG9uZURhdGFWaWV3ID0gcmVxdWlyZSgnLi9fY2xvbmVEYXRhVmlldycpLFxuICAgIGNsb25lUmVnRXhwID0gcmVxdWlyZSgnLi9fY2xvbmVSZWdFeHAnKSxcbiAgICBjbG9uZVN5bWJvbCA9IHJlcXVpcmUoJy4vX2Nsb25lU3ltYm9sJyksXG4gICAgY2xvbmVUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9fY2xvbmVUeXBlZEFycmF5Jyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgIGRhdGVUYWcgPSAnW29iamVjdCBEYXRlXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXSc7XG5cbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXG4gICAgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nLFxuICAgIGZsb2F0MzJUYWcgPSAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICBmbG9hdDY0VGFnID0gJ1tvYmplY3QgRmxvYXQ2NEFycmF5XScsXG4gICAgaW50OFRhZyA9ICdbb2JqZWN0IEludDhBcnJheV0nLFxuICAgIGludDE2VGFnID0gJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgIGludDMyVGFnID0gJ1tvYmplY3QgSW50MzJBcnJheV0nLFxuICAgIHVpbnQ4VGFnID0gJ1tvYmplY3QgVWludDhBcnJheV0nLFxuICAgIHVpbnQ4Q2xhbXBlZFRhZyA9ICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXG4gICAgdWludDE2VGFnID0gJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICB1aW50MzJUYWcgPSAnW29iamVjdCBVaW50MzJBcnJheV0nO1xuXG4vKipcbiAqIEluaXRpYWxpemVzIGFuIG9iamVjdCBjbG9uZSBiYXNlZCBvbiBpdHMgYHRvU3RyaW5nVGFnYC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBmdW5jdGlvbiBvbmx5IHN1cHBvcnRzIGNsb25pbmcgdmFsdWVzIHdpdGggdGFncyBvZlxuICogYEJvb2xlYW5gLCBgRGF0ZWAsIGBFcnJvcmAsIGBNYXBgLCBgTnVtYmVyYCwgYFJlZ0V4cGAsIGBTZXRgLCBvciBgU3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNsb25lLlxuICogQHBhcmFtIHtzdHJpbmd9IHRhZyBUaGUgYHRvU3RyaW5nVGFnYCBvZiB0aGUgb2JqZWN0IHRvIGNsb25lLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGluaXRpYWxpemVkIGNsb25lLlxuICovXG5mdW5jdGlvbiBpbml0Q2xvbmVCeVRhZyhvYmplY3QsIHRhZywgaXNEZWVwKSB7XG4gIHZhciBDdG9yID0gb2JqZWN0LmNvbnN0cnVjdG9yO1xuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgYXJyYXlCdWZmZXJUYWc6XG4gICAgICByZXR1cm4gY2xvbmVBcnJheUJ1ZmZlcihvYmplY3QpO1xuXG4gICAgY2FzZSBib29sVGFnOlxuICAgIGNhc2UgZGF0ZVRhZzpcbiAgICAgIHJldHVybiBuZXcgQ3Rvcigrb2JqZWN0KTtcblxuICAgIGNhc2UgZGF0YVZpZXdUYWc6XG4gICAgICByZXR1cm4gY2xvbmVEYXRhVmlldyhvYmplY3QsIGlzRGVlcCk7XG5cbiAgICBjYXNlIGZsb2F0MzJUYWc6IGNhc2UgZmxvYXQ2NFRhZzpcbiAgICBjYXNlIGludDhUYWc6IGNhc2UgaW50MTZUYWc6IGNhc2UgaW50MzJUYWc6XG4gICAgY2FzZSB1aW50OFRhZzogY2FzZSB1aW50OENsYW1wZWRUYWc6IGNhc2UgdWludDE2VGFnOiBjYXNlIHVpbnQzMlRhZzpcbiAgICAgIHJldHVybiBjbG9uZVR5cGVkQXJyYXkob2JqZWN0LCBpc0RlZXApO1xuXG4gICAgY2FzZSBtYXBUYWc6XG4gICAgICByZXR1cm4gbmV3IEN0b3I7XG5cbiAgICBjYXNlIG51bWJlclRhZzpcbiAgICBjYXNlIHN0cmluZ1RhZzpcbiAgICAgIHJldHVybiBuZXcgQ3RvcihvYmplY3QpO1xuXG4gICAgY2FzZSByZWdleHBUYWc6XG4gICAgICByZXR1cm4gY2xvbmVSZWdFeHAob2JqZWN0KTtcblxuICAgIGNhc2Ugc2V0VGFnOlxuICAgICAgcmV0dXJuIG5ldyBDdG9yO1xuXG4gICAgY2FzZSBzeW1ib2xUYWc6XG4gICAgICByZXR1cm4gY2xvbmVTeW1ib2wob2JqZWN0KTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGluaXRDbG9uZUJ5VGFnO1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RDcmVhdGUgPSBPYmplY3QuY3JlYXRlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmNyZWF0ZWAgd2l0aG91dCBzdXBwb3J0IGZvciBhc3NpZ25pbmdcbiAqIHByb3BlcnRpZXMgdG8gdGhlIGNyZWF0ZWQgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvdG8gVGhlIG9iamVjdCB0byBpbmhlcml0IGZyb20uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICovXG52YXIgYmFzZUNyZWF0ZSA9IChmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gb2JqZWN0KCkge31cbiAgcmV0dXJuIGZ1bmN0aW9uKHByb3RvKSB7XG4gICAgaWYgKCFpc09iamVjdChwcm90bykpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgaWYgKG9iamVjdENyZWF0ZSkge1xuICAgICAgcmV0dXJuIG9iamVjdENyZWF0ZShwcm90byk7XG4gICAgfVxuICAgIG9iamVjdC5wcm90b3R5cGUgPSBwcm90bztcbiAgICB2YXIgcmVzdWx0ID0gbmV3IG9iamVjdDtcbiAgICBvYmplY3QucHJvdG90eXBlID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59KCkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VDcmVhdGU7XG4iLCJ2YXIgYmFzZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX2Jhc2VDcmVhdGUnKSxcbiAgICBnZXRQcm90b3R5cGUgPSByZXF1aXJlKCcuL19nZXRQcm90b3R5cGUnKSxcbiAgICBpc1Byb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2lzUHJvdG90eXBlJyk7XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgYW4gb2JqZWN0IGNsb25lLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBpbml0aWFsaXplZCBjbG9uZS5cbiAqL1xuZnVuY3Rpb24gaW5pdENsb25lT2JqZWN0KG9iamVjdCkge1xuICByZXR1cm4gKHR5cGVvZiBvYmplY3QuY29uc3RydWN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNQcm90b3R5cGUob2JqZWN0KSlcbiAgICA/IGJhc2VDcmVhdGUoZ2V0UHJvdG90eXBlKG9iamVjdCkpXG4gICAgOiB7fTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbml0Q2xvbmVPYmplY3Q7XG4iLCJ2YXIgZ2V0VGFnID0gcmVxdWlyZSgnLi9fZ2V0VGFnJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTWFwYCB3aXRob3V0IE5vZGUuanMgb3B0aW1pemF0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG1hcCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNNYXAodmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgZ2V0VGFnKHZhbHVlKSA9PSBtYXBUYWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzTWFwO1xuIiwidmFyIGJhc2VJc01hcCA9IHJlcXVpcmUoJy4vX2Jhc2VJc01hcCcpLFxuICAgIGJhc2VVbmFyeSA9IHJlcXVpcmUoJy4vX2Jhc2VVbmFyeScpLFxuICAgIG5vZGVVdGlsID0gcmVxdWlyZSgnLi9fbm9kZVV0aWwnKTtcblxuLyogTm9kZS5qcyBoZWxwZXIgcmVmZXJlbmNlcy4gKi9cbnZhciBub2RlSXNNYXAgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc01hcDtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYE1hcGAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4zLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbWFwLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNNYXAobmV3IE1hcCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc01hcChuZXcgV2Vha01hcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNNYXAgPSBub2RlSXNNYXAgPyBiYXNlVW5hcnkobm9kZUlzTWFwKSA6IGJhc2VJc01hcDtcblxubW9kdWxlLmV4cG9ydHMgPSBpc01hcDtcbiIsInZhciBnZXRUYWcgPSByZXF1aXJlKCcuL19nZXRUYWcnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgc2V0VGFnID0gJ1tvYmplY3QgU2V0XSc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNTZXRgIHdpdGhvdXQgTm9kZS5qcyBvcHRpbWl6YXRpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc2V0LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc1NldCh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBnZXRUYWcodmFsdWUpID09IHNldFRhZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNTZXQ7XG4iLCJ2YXIgYmFzZUlzU2V0ID0gcmVxdWlyZSgnLi9fYmFzZUlzU2V0JyksXG4gICAgYmFzZVVuYXJ5ID0gcmVxdWlyZSgnLi9fYmFzZVVuYXJ5JyksXG4gICAgbm9kZVV0aWwgPSByZXF1aXJlKCcuL19ub2RlVXRpbCcpO1xuXG4vKiBOb2RlLmpzIGhlbHBlciByZWZlcmVuY2VzLiAqL1xudmFyIG5vZGVJc1NldCA9IG5vZGVVdGlsICYmIG5vZGVVdGlsLmlzU2V0O1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgU2V0YCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjMuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzZXQsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1NldChuZXcgU2V0KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzU2V0KG5ldyBXZWFrU2V0KTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc1NldCA9IG5vZGVJc1NldCA/IGJhc2VVbmFyeShub2RlSXNTZXQpIDogYmFzZUlzU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzU2V0O1xuIiwidmFyIFN0YWNrID0gcmVxdWlyZSgnLi9fU3RhY2snKSxcbiAgICBhcnJheUVhY2ggPSByZXF1aXJlKCcuL19hcnJheUVhY2gnKSxcbiAgICBhc3NpZ25WYWx1ZSA9IHJlcXVpcmUoJy4vX2Fzc2lnblZhbHVlJyksXG4gICAgYmFzZUFzc2lnbiA9IHJlcXVpcmUoJy4vX2Jhc2VBc3NpZ24nKSxcbiAgICBiYXNlQXNzaWduSW4gPSByZXF1aXJlKCcuL19iYXNlQXNzaWduSW4nKSxcbiAgICBjbG9uZUJ1ZmZlciA9IHJlcXVpcmUoJy4vX2Nsb25lQnVmZmVyJyksXG4gICAgY29weUFycmF5ID0gcmVxdWlyZSgnLi9fY29weUFycmF5JyksXG4gICAgY29weVN5bWJvbHMgPSByZXF1aXJlKCcuL19jb3B5U3ltYm9scycpLFxuICAgIGNvcHlTeW1ib2xzSW4gPSByZXF1aXJlKCcuL19jb3B5U3ltYm9sc0luJyksXG4gICAgZ2V0QWxsS2V5cyA9IHJlcXVpcmUoJy4vX2dldEFsbEtleXMnKSxcbiAgICBnZXRBbGxLZXlzSW4gPSByZXF1aXJlKCcuL19nZXRBbGxLZXlzSW4nKSxcbiAgICBnZXRUYWcgPSByZXF1aXJlKCcuL19nZXRUYWcnKSxcbiAgICBpbml0Q2xvbmVBcnJheSA9IHJlcXVpcmUoJy4vX2luaXRDbG9uZUFycmF5JyksXG4gICAgaW5pdENsb25lQnlUYWcgPSByZXF1aXJlKCcuL19pbml0Q2xvbmVCeVRhZycpLFxuICAgIGluaXRDbG9uZU9iamVjdCA9IHJlcXVpcmUoJy4vX2luaXRDbG9uZU9iamVjdCcpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0J1ZmZlciA9IHJlcXVpcmUoJy4vaXNCdWZmZXInKSxcbiAgICBpc01hcCA9IHJlcXVpcmUoJy4vaXNNYXAnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKSxcbiAgICBpc1NldCA9IHJlcXVpcmUoJy4vaXNTZXQnKSxcbiAgICBrZXlzID0gcmVxdWlyZSgnLi9rZXlzJyksXG4gICAga2V5c0luID0gcmVxdWlyZSgnLi9rZXlzSW4nKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgY2xvbmluZy4gKi9cbnZhciBDTE9ORV9ERUVQX0ZMQUcgPSAxLFxuICAgIENMT05FX0ZMQVRfRkxBRyA9IDIsXG4gICAgQ0xPTkVfU1lNQk9MU19GTEFHID0gNDtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJyxcbiAgICBhcnJheVRhZyA9ICdbb2JqZWN0IEFycmF5XScsXG4gICAgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcbiAgICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxuICAgIGVycm9yVGFnID0gJ1tvYmplY3QgRXJyb3JdJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBnZW5UYWcgPSAnW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0nLFxuICAgIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG51bWJlclRhZyA9ICdbb2JqZWN0IE51bWJlcl0nLFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nLFxuICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxuICAgIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nLFxuICAgIHdlYWtNYXBUYWcgPSAnW29iamVjdCBXZWFrTWFwXSc7XG5cbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXG4gICAgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nLFxuICAgIGZsb2F0MzJUYWcgPSAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICBmbG9hdDY0VGFnID0gJ1tvYmplY3QgRmxvYXQ2NEFycmF5XScsXG4gICAgaW50OFRhZyA9ICdbb2JqZWN0IEludDhBcnJheV0nLFxuICAgIGludDE2VGFnID0gJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgIGludDMyVGFnID0gJ1tvYmplY3QgSW50MzJBcnJheV0nLFxuICAgIHVpbnQ4VGFnID0gJ1tvYmplY3QgVWludDhBcnJheV0nLFxuICAgIHVpbnQ4Q2xhbXBlZFRhZyA9ICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXG4gICAgdWludDE2VGFnID0gJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICB1aW50MzJUYWcgPSAnW29iamVjdCBVaW50MzJBcnJheV0nO1xuXG4vKiogVXNlZCB0byBpZGVudGlmeSBgdG9TdHJpbmdUYWdgIHZhbHVlcyBzdXBwb3J0ZWQgYnkgYF8uY2xvbmVgLiAqL1xudmFyIGNsb25lYWJsZVRhZ3MgPSB7fTtcbmNsb25lYWJsZVRhZ3NbYXJnc1RhZ10gPSBjbG9uZWFibGVUYWdzW2FycmF5VGFnXSA9XG5jbG9uZWFibGVUYWdzW2FycmF5QnVmZmVyVGFnXSA9IGNsb25lYWJsZVRhZ3NbZGF0YVZpZXdUYWddID1cbmNsb25lYWJsZVRhZ3NbYm9vbFRhZ10gPSBjbG9uZWFibGVUYWdzW2RhdGVUYWddID1cbmNsb25lYWJsZVRhZ3NbZmxvYXQzMlRhZ10gPSBjbG9uZWFibGVUYWdzW2Zsb2F0NjRUYWddID1cbmNsb25lYWJsZVRhZ3NbaW50OFRhZ10gPSBjbG9uZWFibGVUYWdzW2ludDE2VGFnXSA9XG5jbG9uZWFibGVUYWdzW2ludDMyVGFnXSA9IGNsb25lYWJsZVRhZ3NbbWFwVGFnXSA9XG5jbG9uZWFibGVUYWdzW251bWJlclRhZ10gPSBjbG9uZWFibGVUYWdzW29iamVjdFRhZ10gPVxuY2xvbmVhYmxlVGFnc1tyZWdleHBUYWddID0gY2xvbmVhYmxlVGFnc1tzZXRUYWddID1cbmNsb25lYWJsZVRhZ3Nbc3RyaW5nVGFnXSA9IGNsb25lYWJsZVRhZ3Nbc3ltYm9sVGFnXSA9XG5jbG9uZWFibGVUYWdzW3VpbnQ4VGFnXSA9IGNsb25lYWJsZVRhZ3NbdWludDhDbGFtcGVkVGFnXSA9XG5jbG9uZWFibGVUYWdzW3VpbnQxNlRhZ10gPSBjbG9uZWFibGVUYWdzW3VpbnQzMlRhZ10gPSB0cnVlO1xuY2xvbmVhYmxlVGFnc1tlcnJvclRhZ10gPSBjbG9uZWFibGVUYWdzW2Z1bmNUYWddID1cbmNsb25lYWJsZVRhZ3Nbd2Vha01hcFRhZ10gPSBmYWxzZTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5jbG9uZWAgYW5kIGBfLmNsb25lRGVlcGAgd2hpY2ggdHJhY2tzXG4gKiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2xvbmUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuXG4gKiAgMSAtIERlZXAgY2xvbmVcbiAqICAyIC0gRmxhdHRlbiBpbmhlcml0ZWQgcHJvcGVydGllc1xuICogIDQgLSBDbG9uZSBzeW1ib2xzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjbG9uaW5nLlxuICogQHBhcmFtIHtzdHJpbmd9IFtrZXldIFRoZSBrZXkgb2YgYHZhbHVlYC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgcGFyZW50IG9iamVjdCBvZiBgdmFsdWVgLlxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzIGFuZCB0aGVpciBjbG9uZSBjb3VudGVycGFydHMuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgY2xvbmVkIHZhbHVlLlxuICovXG5mdW5jdGlvbiBiYXNlQ2xvbmUodmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGtleSwgb2JqZWN0LCBzdGFjaykge1xuICB2YXIgcmVzdWx0LFxuICAgICAgaXNEZWVwID0gYml0bWFzayAmIENMT05FX0RFRVBfRkxBRyxcbiAgICAgIGlzRmxhdCA9IGJpdG1hc2sgJiBDTE9ORV9GTEFUX0ZMQUcsXG4gICAgICBpc0Z1bGwgPSBiaXRtYXNrICYgQ0xPTkVfU1lNQk9MU19GTEFHO1xuXG4gIGlmIChjdXN0b21pemVyKSB7XG4gICAgcmVzdWx0ID0gb2JqZWN0ID8gY3VzdG9taXplcih2YWx1ZSwga2V5LCBvYmplY3QsIHN0YWNrKSA6IGN1c3RvbWl6ZXIodmFsdWUpO1xuICB9XG4gIGlmIChyZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgdmFyIGlzQXJyID0gaXNBcnJheSh2YWx1ZSk7XG4gIGlmIChpc0Fycikge1xuICAgIHJlc3VsdCA9IGluaXRDbG9uZUFycmF5KHZhbHVlKTtcbiAgICBpZiAoIWlzRGVlcCkge1xuICAgICAgcmV0dXJuIGNvcHlBcnJheSh2YWx1ZSwgcmVzdWx0KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIHRhZyA9IGdldFRhZyh2YWx1ZSksXG4gICAgICAgIGlzRnVuYyA9IHRhZyA9PSBmdW5jVGFnIHx8IHRhZyA9PSBnZW5UYWc7XG5cbiAgICBpZiAoaXNCdWZmZXIodmFsdWUpKSB7XG4gICAgICByZXR1cm4gY2xvbmVCdWZmZXIodmFsdWUsIGlzRGVlcCk7XG4gICAgfVxuICAgIGlmICh0YWcgPT0gb2JqZWN0VGFnIHx8IHRhZyA9PSBhcmdzVGFnIHx8IChpc0Z1bmMgJiYgIW9iamVjdCkpIHtcbiAgICAgIHJlc3VsdCA9IChpc0ZsYXQgfHwgaXNGdW5jKSA/IHt9IDogaW5pdENsb25lT2JqZWN0KHZhbHVlKTtcbiAgICAgIGlmICghaXNEZWVwKSB7XG4gICAgICAgIHJldHVybiBpc0ZsYXRcbiAgICAgICAgICA/IGNvcHlTeW1ib2xzSW4odmFsdWUsIGJhc2VBc3NpZ25JbihyZXN1bHQsIHZhbHVlKSlcbiAgICAgICAgICA6IGNvcHlTeW1ib2xzKHZhbHVlLCBiYXNlQXNzaWduKHJlc3VsdCwgdmFsdWUpKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFjbG9uZWFibGVUYWdzW3RhZ10pIHtcbiAgICAgICAgcmV0dXJuIG9iamVjdCA/IHZhbHVlIDoge307XG4gICAgICB9XG4gICAgICByZXN1bHQgPSBpbml0Q2xvbmVCeVRhZyh2YWx1ZSwgdGFnLCBpc0RlZXApO1xuICAgIH1cbiAgfVxuICAvLyBDaGVjayBmb3IgY2lyY3VsYXIgcmVmZXJlbmNlcyBhbmQgcmV0dXJuIGl0cyBjb3JyZXNwb25kaW5nIGNsb25lLlxuICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgU3RhY2spO1xuICB2YXIgc3RhY2tlZCA9IHN0YWNrLmdldCh2YWx1ZSk7XG4gIGlmIChzdGFja2VkKSB7XG4gICAgcmV0dXJuIHN0YWNrZWQ7XG4gIH1cbiAgc3RhY2suc2V0KHZhbHVlLCByZXN1bHQpO1xuXG4gIGlmIChpc1NldCh2YWx1ZSkpIHtcbiAgICB2YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uKHN1YlZhbHVlKSB7XG4gICAgICByZXN1bHQuYWRkKGJhc2VDbG9uZShzdWJWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3ViVmFsdWUsIHZhbHVlLCBzdGFjaykpO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKGlzTWFwKHZhbHVlKSkge1xuICAgIHZhbHVlLmZvckVhY2goZnVuY3Rpb24oc3ViVmFsdWUsIGtleSkge1xuICAgICAgcmVzdWx0LnNldChrZXksIGJhc2VDbG9uZShzdWJWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwga2V5LCB2YWx1ZSwgc3RhY2spKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhciBrZXlzRnVuYyA9IGlzRnVsbFxuICAgID8gKGlzRmxhdCA/IGdldEFsbEtleXNJbiA6IGdldEFsbEtleXMpXG4gICAgOiAoaXNGbGF0ID8ga2V5c0luIDoga2V5cyk7XG5cbiAgdmFyIHByb3BzID0gaXNBcnIgPyB1bmRlZmluZWQgOiBrZXlzRnVuYyh2YWx1ZSk7XG4gIGFycmF5RWFjaChwcm9wcyB8fCB2YWx1ZSwgZnVuY3Rpb24oc3ViVmFsdWUsIGtleSkge1xuICAgIGlmIChwcm9wcykge1xuICAgICAga2V5ID0gc3ViVmFsdWU7XG4gICAgICBzdWJWYWx1ZSA9IHZhbHVlW2tleV07XG4gICAgfVxuICAgIC8vIFJlY3Vyc2l2ZWx5IHBvcHVsYXRlIGNsb25lIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgYXNzaWduVmFsdWUocmVzdWx0LCBrZXksIGJhc2VDbG9uZShzdWJWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwga2V5LCB2YWx1ZSwgc3RhY2spKTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUNsb25lO1xuIiwidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgU3ltYm9sYCBwcmltaXRpdmUgb3Igb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc3ltYm9sLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNTeW1ib2woU3ltYm9sLml0ZXJhdG9yKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzU3ltYm9sKCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3ltYm9sKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ3N5bWJvbCcgfHxcbiAgICAoaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBzeW1ib2xUYWcpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzU3ltYm9sO1xuIiwidmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc1N5bWJvbCA9IHJlcXVpcmUoJy4vaXNTeW1ib2wnKTtcblxuLyoqIFVzZWQgdG8gbWF0Y2ggcHJvcGVydHkgbmFtZXMgd2l0aGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlSXNEZWVwUHJvcCA9IC9cXC58XFxbKD86W15bXFxdXSp8KFtcIiddKSg/Oig/IVxcMSlbXlxcXFxdfFxcXFwuKSo/XFwxKVxcXS8sXG4gICAgcmVJc1BsYWluUHJvcCA9IC9eXFx3KiQvO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcHJvcGVydHkgbmFtZSBhbmQgbm90IGEgcHJvcGVydHkgcGF0aC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeSBrZXlzIG9uLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwcm9wZXJ0eSBuYW1lLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzS2V5KHZhbHVlLCBvYmplY3QpIHtcbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICBpZiAodHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nIHx8XG4gICAgICB2YWx1ZSA9PSBudWxsIHx8IGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiByZUlzUGxhaW5Qcm9wLnRlc3QodmFsdWUpIHx8ICFyZUlzRGVlcFByb3AudGVzdCh2YWx1ZSkgfHxcbiAgICAob2JqZWN0ICE9IG51bGwgJiYgdmFsdWUgaW4gT2JqZWN0KG9iamVjdCkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzS2V5O1xuIiwidmFyIE1hcENhY2hlID0gcmVxdWlyZSgnLi9fTWFwQ2FjaGUnKTtcblxuLyoqIEVycm9yIG1lc3NhZ2UgY29uc3RhbnRzLiAqL1xudmFyIEZVTkNfRVJST1JfVEVYVCA9ICdFeHBlY3RlZCBhIGZ1bmN0aW9uJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBtZW1vaXplcyB0aGUgcmVzdWx0IG9mIGBmdW5jYC4gSWYgYHJlc29sdmVyYCBpc1xuICogcHJvdmlkZWQsIGl0IGRldGVybWluZXMgdGhlIGNhY2hlIGtleSBmb3Igc3RvcmluZyB0aGUgcmVzdWx0IGJhc2VkIG9uIHRoZVxuICogYXJndW1lbnRzIHByb3ZpZGVkIHRvIHRoZSBtZW1vaXplZCBmdW5jdGlvbi4gQnkgZGVmYXVsdCwgdGhlIGZpcnN0IGFyZ3VtZW50XG4gKiBwcm92aWRlZCB0byB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24gaXMgdXNlZCBhcyB0aGUgbWFwIGNhY2hlIGtleS4gVGhlIGBmdW5jYFxuICogaXMgaW52b2tlZCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gKlxuICogKipOb3RlOioqIFRoZSBjYWNoZSBpcyBleHBvc2VkIGFzIHRoZSBgY2FjaGVgIHByb3BlcnR5IG9uIHRoZSBtZW1vaXplZFxuICogZnVuY3Rpb24uIEl0cyBjcmVhdGlvbiBtYXkgYmUgY3VzdG9taXplZCBieSByZXBsYWNpbmcgdGhlIGBfLm1lbW9pemUuQ2FjaGVgXG4gKiBjb25zdHJ1Y3RvciB3aXRoIG9uZSB3aG9zZSBpbnN0YW5jZXMgaW1wbGVtZW50IHRoZVxuICogW2BNYXBgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wcm9wZXJ0aWVzLW9mLXRoZS1tYXAtcHJvdG90eXBlLW9iamVjdClcbiAqIG1ldGhvZCBpbnRlcmZhY2Ugb2YgYGNsZWFyYCwgYGRlbGV0ZWAsIGBnZXRgLCBgaGFzYCwgYW5kIGBzZXRgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaGF2ZSBpdHMgb3V0cHV0IG1lbW9pemVkLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3Jlc29sdmVyXSBUaGUgZnVuY3Rpb24gdG8gcmVzb2x2ZSB0aGUgY2FjaGUga2V5LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAyIH07XG4gKiB2YXIgb3RoZXIgPSB7ICdjJzogMywgJ2QnOiA0IH07XG4gKlxuICogdmFyIHZhbHVlcyA9IF8ubWVtb2l6ZShfLnZhbHVlcyk7XG4gKiB2YWx1ZXMob2JqZWN0KTtcbiAqIC8vID0+IFsxLCAyXVxuICpcbiAqIHZhbHVlcyhvdGhlcik7XG4gKiAvLyA9PiBbMywgNF1cbiAqXG4gKiBvYmplY3QuYSA9IDI7XG4gKiB2YWx1ZXMob2JqZWN0KTtcbiAqIC8vID0+IFsxLCAyXVxuICpcbiAqIC8vIE1vZGlmeSB0aGUgcmVzdWx0IGNhY2hlLlxuICogdmFsdWVzLmNhY2hlLnNldChvYmplY3QsIFsnYScsICdiJ10pO1xuICogdmFsdWVzKG9iamVjdCk7XG4gKiAvLyA9PiBbJ2EnLCAnYiddXG4gKlxuICogLy8gUmVwbGFjZSBgXy5tZW1vaXplLkNhY2hlYC5cbiAqIF8ubWVtb2l6ZS5DYWNoZSA9IFdlYWtNYXA7XG4gKi9cbmZ1bmN0aW9uIG1lbW9pemUoZnVuYywgcmVzb2x2ZXIpIHtcbiAgaWYgKHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicgfHwgKHJlc29sdmVyICE9IG51bGwgJiYgdHlwZW9mIHJlc29sdmVyICE9ICdmdW5jdGlvbicpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICB9XG4gIHZhciBtZW1vaXplZCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBhcmdzID0gYXJndW1lbnRzLFxuICAgICAgICBrZXkgPSByZXNvbHZlciA/IHJlc29sdmVyLmFwcGx5KHRoaXMsIGFyZ3MpIDogYXJnc1swXSxcbiAgICAgICAgY2FjaGUgPSBtZW1vaXplZC5jYWNoZTtcblxuICAgIGlmIChjYWNoZS5oYXMoa2V5KSkge1xuICAgICAgcmV0dXJuIGNhY2hlLmdldChrZXkpO1xuICAgIH1cbiAgICB2YXIgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICBtZW1vaXplZC5jYWNoZSA9IGNhY2hlLnNldChrZXksIHJlc3VsdCkgfHwgY2FjaGU7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbiAgbWVtb2l6ZWQuY2FjaGUgPSBuZXcgKG1lbW9pemUuQ2FjaGUgfHwgTWFwQ2FjaGUpO1xuICByZXR1cm4gbWVtb2l6ZWQ7XG59XG5cbi8vIEV4cG9zZSBgTWFwQ2FjaGVgLlxubWVtb2l6ZS5DYWNoZSA9IE1hcENhY2hlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG1lbW9pemU7XG4iLCJ2YXIgbWVtb2l6ZSA9IHJlcXVpcmUoJy4vbWVtb2l6ZScpO1xuXG4vKiogVXNlZCBhcyB0aGUgbWF4aW11bSBtZW1vaXplIGNhY2hlIHNpemUuICovXG52YXIgTUFYX01FTU9JWkVfU0laRSA9IDUwMDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ubWVtb2l6ZWAgd2hpY2ggY2xlYXJzIHRoZSBtZW1vaXplZCBmdW5jdGlvbidzXG4gKiBjYWNoZSB3aGVuIGl0IGV4Y2VlZHMgYE1BWF9NRU1PSVpFX1NJWkVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBoYXZlIGl0cyBvdXRwdXQgbWVtb2l6ZWQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBtZW1vaXplZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gbWVtb2l6ZUNhcHBlZChmdW5jKSB7XG4gIHZhciByZXN1bHQgPSBtZW1vaXplKGZ1bmMsIGZ1bmN0aW9uKGtleSkge1xuICAgIGlmIChjYWNoZS5zaXplID09PSBNQVhfTUVNT0laRV9TSVpFKSB7XG4gICAgICBjYWNoZS5jbGVhcigpO1xuICAgIH1cbiAgICByZXR1cm4ga2V5O1xuICB9KTtcblxuICB2YXIgY2FjaGUgPSByZXN1bHQuY2FjaGU7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWVtb2l6ZUNhcHBlZDtcbiIsInZhciBtZW1vaXplQ2FwcGVkID0gcmVxdWlyZSgnLi9fbWVtb2l6ZUNhcHBlZCcpO1xuXG4vKiogVXNlZCB0byBtYXRjaCBwcm9wZXJ0eSBuYW1lcyB3aXRoaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgcmVQcm9wTmFtZSA9IC9bXi5bXFxdXSt8XFxbKD86KC0/XFxkKyg/OlxcLlxcZCspPyl8KFtcIiddKSgoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqPylcXDIpXFxdfCg/PSg/OlxcLnxcXFtcXF0pKD86XFwufFxcW1xcXXwkKSkvZztcblxuLyoqIFVzZWQgdG8gbWF0Y2ggYmFja3NsYXNoZXMgaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgcmVFc2NhcGVDaGFyID0gL1xcXFwoXFxcXCk/L2c7XG5cbi8qKlxuICogQ29udmVydHMgYHN0cmluZ2AgdG8gYSBwcm9wZXJ0eSBwYXRoIGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAqL1xudmFyIHN0cmluZ1RvUGF0aCA9IG1lbW9pemVDYXBwZWQoZnVuY3Rpb24oc3RyaW5nKSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgaWYgKHN0cmluZy5jaGFyQ29kZUF0KDApID09PSA0NiAvKiAuICovKSB7XG4gICAgcmVzdWx0LnB1c2goJycpO1xuICB9XG4gIHN0cmluZy5yZXBsYWNlKHJlUHJvcE5hbWUsIGZ1bmN0aW9uKG1hdGNoLCBudW1iZXIsIHF1b3RlLCBzdWJTdHJpbmcpIHtcbiAgICByZXN1bHQucHVzaChxdW90ZSA/IHN1YlN0cmluZy5yZXBsYWNlKHJlRXNjYXBlQ2hhciwgJyQxJykgOiAobnVtYmVyIHx8IG1hdGNoKSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gc3RyaW5nVG9QYXRoO1xuIiwidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpLFxuICAgIGFycmF5TWFwID0gcmVxdWlyZSgnLi9fYXJyYXlNYXAnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNTeW1ib2wgPSByZXF1aXJlKCcuL2lzU3ltYm9sJyk7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIElORklOSVRZID0gMSAvIDA7XG5cbi8qKiBVc2VkIHRvIGNvbnZlcnQgc3ltYm9scyB0byBwcmltaXRpdmVzIGFuZCBzdHJpbmdzLiAqL1xudmFyIHN5bWJvbFByb3RvID0gU3ltYm9sID8gU3ltYm9sLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcbiAgICBzeW1ib2xUb1N0cmluZyA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udG9TdHJpbmcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udG9TdHJpbmdgIHdoaWNoIGRvZXNuJ3QgY29udmVydCBudWxsaXNoXG4gKiB2YWx1ZXMgdG8gZW1wdHkgc3RyaW5ncy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvY2Vzcy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gYmFzZVRvU3RyaW5nKHZhbHVlKSB7XG4gIC8vIEV4aXQgZWFybHkgZm9yIHN0cmluZ3MgdG8gYXZvaWQgYSBwZXJmb3JtYW5jZSBoaXQgaW4gc29tZSBlbnZpcm9ubWVudHMuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgLy8gUmVjdXJzaXZlbHkgY29udmVydCB2YWx1ZXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICByZXR1cm4gYXJyYXlNYXAodmFsdWUsIGJhc2VUb1N0cmluZykgKyAnJztcbiAgfVxuICBpZiAoaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIHN5bWJvbFRvU3RyaW5nID8gc3ltYm9sVG9TdHJpbmcuY2FsbCh2YWx1ZSkgOiAnJztcbiAgfVxuICB2YXIgcmVzdWx0ID0gKHZhbHVlICsgJycpO1xuICByZXR1cm4gKHJlc3VsdCA9PSAnMCcgJiYgKDEgLyB2YWx1ZSkgPT0gLUlORklOSVRZKSA/ICctMCcgOiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVRvU3RyaW5nO1xuIiwidmFyIGJhc2VUb1N0cmluZyA9IHJlcXVpcmUoJy4vX2Jhc2VUb1N0cmluZycpO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcuIEFuIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZCBmb3IgYG51bGxgXG4gKiBhbmQgYHVuZGVmaW5lZGAgdmFsdWVzLiBUaGUgc2lnbiBvZiBgLTBgIGlzIHByZXNlcnZlZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBzdHJpbmcuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udG9TdHJpbmcobnVsbCk7XG4gKiAvLyA9PiAnJ1xuICpcbiAqIF8udG9TdHJpbmcoLTApO1xuICogLy8gPT4gJy0wJ1xuICpcbiAqIF8udG9TdHJpbmcoWzEsIDIsIDNdKTtcbiAqIC8vID0+ICcxLDIsMydcbiAqL1xuZnVuY3Rpb24gdG9TdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09IG51bGwgPyAnJyA6IGJhc2VUb1N0cmluZyh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9TdHJpbmc7XG4iLCJ2YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzS2V5ID0gcmVxdWlyZSgnLi9faXNLZXknKSxcbiAgICBzdHJpbmdUb1BhdGggPSByZXF1aXJlKCcuL19zdHJpbmdUb1BhdGgnKSxcbiAgICB0b1N0cmluZyA9IHJlcXVpcmUoJy4vdG9TdHJpbmcnKTtcblxuLyoqXG4gKiBDYXN0cyBgdmFsdWVgIHRvIGEgcGF0aCBhcnJheSBpZiBpdCdzIG5vdCBvbmUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeSBrZXlzIG9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjYXN0IHByb3BlcnR5IHBhdGggYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGNhc3RQYXRoKHZhbHVlLCBvYmplY3QpIHtcbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiBpc0tleSh2YWx1ZSwgb2JqZWN0KSA/IFt2YWx1ZV0gOiBzdHJpbmdUb1BhdGgodG9TdHJpbmcodmFsdWUpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjYXN0UGF0aDtcbiIsInZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4vaXNTeW1ib2wnKTtcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgSU5GSU5JVFkgPSAxIC8gMDtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIGtleSBpZiBpdCdzIG5vdCBhIHN0cmluZyBvciBzeW1ib2wuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7c3RyaW5nfHN5bWJvbH0gUmV0dXJucyB0aGUga2V5LlxuICovXG5mdW5jdGlvbiB0b0tleSh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnIHx8IGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICB2YXIgcmVzdWx0ID0gKHZhbHVlICsgJycpO1xuICByZXR1cm4gKHJlc3VsdCA9PSAnMCcgJiYgKDEgLyB2YWx1ZSkgPT0gLUlORklOSVRZKSA/ICctMCcgOiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9LZXk7XG4iLCJ2YXIgY2FzdFBhdGggPSByZXF1aXJlKCcuL19jYXN0UGF0aCcpLFxuICAgIHRvS2V5ID0gcmVxdWlyZSgnLi9fdG9LZXknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5nZXRgIHdpdGhvdXQgc3VwcG9ydCBmb3IgZGVmYXVsdCB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2ZWQgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGJhc2VHZXQob2JqZWN0LCBwYXRoKSB7XG4gIHBhdGggPSBjYXN0UGF0aChwYXRoLCBvYmplY3QpO1xuXG4gIHZhciBpbmRleCA9IDAsXG4gICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aDtcblxuICB3aGlsZSAob2JqZWN0ICE9IG51bGwgJiYgaW5kZXggPCBsZW5ndGgpIHtcbiAgICBvYmplY3QgPSBvYmplY3RbdG9LZXkocGF0aFtpbmRleCsrXSldO1xuICB9XG4gIHJldHVybiAoaW5kZXggJiYgaW5kZXggPT0gbGVuZ3RoKSA/IG9iamVjdCA6IHVuZGVmaW5lZDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlR2V0O1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zbGljZWAgd2l0aG91dCBhbiBpdGVyYXRlZSBjYWxsIGd1YXJkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gc2xpY2UuXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PTBdIFRoZSBzdGFydCBwb3NpdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbZW5kPWFycmF5Lmxlbmd0aF0gVGhlIGVuZCBwb3NpdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gYmFzZVNsaWNlKGFycmF5LCBzdGFydCwgZW5kKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGlmIChzdGFydCA8IDApIHtcbiAgICBzdGFydCA9IC1zdGFydCA+IGxlbmd0aCA/IDAgOiAobGVuZ3RoICsgc3RhcnQpO1xuICB9XG4gIGVuZCA9IGVuZCA+IGxlbmd0aCA/IGxlbmd0aCA6IGVuZDtcbiAgaWYgKGVuZCA8IDApIHtcbiAgICBlbmQgKz0gbGVuZ3RoO1xuICB9XG4gIGxlbmd0aCA9IHN0YXJ0ID4gZW5kID8gMCA6ICgoZW5kIC0gc3RhcnQpID4+PiAwKTtcbiAgc3RhcnQgPj4+PSAwO1xuXG4gIHZhciByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHJlc3VsdFtpbmRleF0gPSBhcnJheVtpbmRleCArIHN0YXJ0XTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VTbGljZTtcbiIsInZhciBiYXNlR2V0ID0gcmVxdWlyZSgnLi9fYmFzZUdldCcpLFxuICAgIGJhc2VTbGljZSA9IHJlcXVpcmUoJy4vX2Jhc2VTbGljZScpO1xuXG4vKipcbiAqIEdldHMgdGhlIHBhcmVudCB2YWx1ZSBhdCBgcGF0aGAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl9IHBhdGggVGhlIHBhdGggdG8gZ2V0IHRoZSBwYXJlbnQgdmFsdWUgb2YuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcGFyZW50IHZhbHVlLlxuICovXG5mdW5jdGlvbiBwYXJlbnQob2JqZWN0LCBwYXRoKSB7XG4gIHJldHVybiBwYXRoLmxlbmd0aCA8IDIgPyBvYmplY3QgOiBiYXNlR2V0KG9iamVjdCwgYmFzZVNsaWNlKHBhdGgsIDAsIC0xKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwidmFyIGNhc3RQYXRoID0gcmVxdWlyZSgnLi9fY2FzdFBhdGgnKSxcbiAgICBsYXN0ID0gcmVxdWlyZSgnLi9sYXN0JyksXG4gICAgcGFyZW50ID0gcmVxdWlyZSgnLi9fcGFyZW50JyksXG4gICAgdG9LZXkgPSByZXF1aXJlKCcuL190b0tleScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnVuc2V0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwcm9wZXJ0eSBwYXRoIHRvIHVuc2V0LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBwcm9wZXJ0eSBpcyBkZWxldGVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VVbnNldChvYmplY3QsIHBhdGgpIHtcbiAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG4gIG9iamVjdCA9IHBhcmVudChvYmplY3QsIHBhdGgpO1xuICByZXR1cm4gb2JqZWN0ID09IG51bGwgfHwgZGVsZXRlIG9iamVjdFt0b0tleShsYXN0KHBhdGgpKV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVVuc2V0O1xuIiwidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgZ2V0UHJvdG90eXBlID0gcmVxdWlyZSgnLi9fZ2V0UHJvdG90eXBlJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxuICAgIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIFVzZWQgdG8gaW5mZXIgdGhlIGBPYmplY3RgIGNvbnN0cnVjdG9yLiAqL1xudmFyIG9iamVjdEN0b3JTdHJpbmcgPSBmdW5jVG9TdHJpbmcuY2FsbChPYmplY3QpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcGxhaW4gb2JqZWN0LCB0aGF0IGlzLCBhbiBvYmplY3QgY3JlYXRlZCBieSB0aGVcbiAqIGBPYmplY3RgIGNvbnN0cnVjdG9yIG9yIG9uZSB3aXRoIGEgYFtbUHJvdG90eXBlXV1gIG9mIGBudWxsYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuOC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHBsYWluIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiB9XG4gKlxuICogXy5pc1BsYWluT2JqZWN0KG5ldyBGb28pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KHsgJ3gnOiAwLCAneSc6IDAgfSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KE9iamVjdC5jcmVhdGUobnVsbCkpO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3RMaWtlKHZhbHVlKSB8fCBiYXNlR2V0VGFnKHZhbHVlKSAhPSBvYmplY3RUYWcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHByb3RvID0gZ2V0UHJvdG90eXBlKHZhbHVlKTtcbiAgaWYgKHByb3RvID09PSBudWxsKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgdmFyIEN0b3IgPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3RvLCAnY29uc3RydWN0b3InKSAmJiBwcm90by5jb25zdHJ1Y3RvcjtcbiAgcmV0dXJuIHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3RvciBpbnN0YW5jZW9mIEN0b3IgJiZcbiAgICBmdW5jVG9TdHJpbmcuY2FsbChDdG9yKSA9PSBvYmplY3RDdG9yU3RyaW5nO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzUGxhaW5PYmplY3Q7XG4iLCJ2YXIgaXNQbGFpbk9iamVjdCA9IHJlcXVpcmUoJy4vaXNQbGFpbk9iamVjdCcpO1xuXG4vKipcbiAqIFVzZWQgYnkgYF8ub21pdGAgdG8gY3VzdG9taXplIGl0cyBgXy5jbG9uZURlZXBgIHVzZSB0byBvbmx5IGNsb25lIHBsYWluXG4gKiBvYmplY3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBpbnNwZWN0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHVuY2xvbmVkIHZhbHVlIG9yIGB1bmRlZmluZWRgIHRvIGRlZmVyIGNsb25pbmcgdG8gYF8uY2xvbmVEZWVwYC5cbiAqL1xuZnVuY3Rpb24gY3VzdG9tT21pdENsb25lKHZhbHVlKSB7XG4gIHJldHVybiBpc1BsYWluT2JqZWN0KHZhbHVlKSA/IHVuZGVmaW5lZCA6IHZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGN1c3RvbU9taXRDbG9uZTtcbiIsInZhciBiYXNlRmxhdHRlbiA9IHJlcXVpcmUoJy4vX2Jhc2VGbGF0dGVuJyk7XG5cbi8qKlxuICogRmxhdHRlbnMgYGFycmF5YCBhIHNpbmdsZSBsZXZlbCBkZWVwLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGZsYXR0ZW4uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmbGF0dGVuZWQgYXJyYXkuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uZmxhdHRlbihbMSwgWzIsIFszLCBbNF1dLCA1XV0pO1xuICogLy8gPT4gWzEsIDIsIFszLCBbNF1dLCA1XVxuICovXG5mdW5jdGlvbiBmbGF0dGVuKGFycmF5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgcmV0dXJuIGxlbmd0aCA/IGJhc2VGbGF0dGVuKGFycmF5LCAxKSA6IFtdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZsYXR0ZW47XG4iLCJ2YXIgZmxhdHRlbiA9IHJlcXVpcmUoJy4vZmxhdHRlbicpLFxuICAgIG92ZXJSZXN0ID0gcmVxdWlyZSgnLi9fb3ZlclJlc3QnKSxcbiAgICBzZXRUb1N0cmluZyA9IHJlcXVpcmUoJy4vX3NldFRvU3RyaW5nJyk7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUmVzdGAgd2hpY2ggZmxhdHRlbnMgdGhlIHJlc3QgYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gZmxhdFJlc3QoZnVuYykge1xuICByZXR1cm4gc2V0VG9TdHJpbmcob3ZlclJlc3QoZnVuYywgdW5kZWZpbmVkLCBmbGF0dGVuKSwgZnVuYyArICcnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmbGF0UmVzdDtcbiIsInZhciBhcnJheU1hcCA9IHJlcXVpcmUoJy4vX2FycmF5TWFwJyksXG4gICAgYmFzZUNsb25lID0gcmVxdWlyZSgnLi9fYmFzZUNsb25lJyksXG4gICAgYmFzZVVuc2V0ID0gcmVxdWlyZSgnLi9fYmFzZVVuc2V0JyksXG4gICAgY2FzdFBhdGggPSByZXF1aXJlKCcuL19jYXN0UGF0aCcpLFxuICAgIGNvcHlPYmplY3QgPSByZXF1aXJlKCcuL19jb3B5T2JqZWN0JyksXG4gICAgY3VzdG9tT21pdENsb25lID0gcmVxdWlyZSgnLi9fY3VzdG9tT21pdENsb25lJyksXG4gICAgZmxhdFJlc3QgPSByZXF1aXJlKCcuL19mbGF0UmVzdCcpLFxuICAgIGdldEFsbEtleXNJbiA9IHJlcXVpcmUoJy4vX2dldEFsbEtleXNJbicpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBjbG9uaW5nLiAqL1xudmFyIENMT05FX0RFRVBfRkxBRyA9IDEsXG4gICAgQ0xPTkVfRkxBVF9GTEFHID0gMixcbiAgICBDTE9ORV9TWU1CT0xTX0ZMQUcgPSA0O1xuXG4vKipcbiAqIFRoZSBvcHBvc2l0ZSBvZiBgXy5waWNrYDsgdGhpcyBtZXRob2QgY3JlYXRlcyBhbiBvYmplY3QgY29tcG9zZWQgb2YgdGhlXG4gKiBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnR5IHBhdGhzIG9mIGBvYmplY3RgIHRoYXQgYXJlIG5vdCBvbWl0dGVkLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBjb25zaWRlcmFibHkgc2xvd2VyIHRoYW4gYF8ucGlja2AuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgc291cmNlIG9iamVjdC5cbiAqIEBwYXJhbSB7Li4uKHN0cmluZ3xzdHJpbmdbXSl9IFtwYXRoc10gVGhlIHByb3BlcnR5IHBhdGhzIHRvIG9taXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEsICdiJzogJzInLCAnYyc6IDMgfTtcbiAqXG4gKiBfLm9taXQob2JqZWN0LCBbJ2EnLCAnYyddKTtcbiAqIC8vID0+IHsgJ2InOiAnMicgfVxuICovXG52YXIgb21pdCA9IGZsYXRSZXN0KGZ1bmN0aW9uKG9iamVjdCwgcGF0aHMpIHtcbiAgdmFyIHJlc3VsdCA9IHt9O1xuICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHZhciBpc0RlZXAgPSBmYWxzZTtcbiAgcGF0aHMgPSBhcnJheU1hcChwYXRocywgZnVuY3Rpb24ocGF0aCkge1xuICAgIHBhdGggPSBjYXN0UGF0aChwYXRoLCBvYmplY3QpO1xuICAgIGlzRGVlcCB8fCAoaXNEZWVwID0gcGF0aC5sZW5ndGggPiAxKTtcbiAgICByZXR1cm4gcGF0aDtcbiAgfSk7XG4gIGNvcHlPYmplY3Qob2JqZWN0LCBnZXRBbGxLZXlzSW4ob2JqZWN0KSwgcmVzdWx0KTtcbiAgaWYgKGlzRGVlcCkge1xuICAgIHJlc3VsdCA9IGJhc2VDbG9uZShyZXN1bHQsIENMT05FX0RFRVBfRkxBRyB8IENMT05FX0ZMQVRfRkxBRyB8IENMT05FX1NZTUJPTFNfRkxBRywgY3VzdG9tT21pdENsb25lKTtcbiAgfVxuICB2YXIgbGVuZ3RoID0gcGF0aHMubGVuZ3RoO1xuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICBiYXNlVW5zZXQocmVzdWx0LCBwYXRoc1tsZW5ndGhdKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gb21pdDtcbiIsInZhciBTZXQgPSByZXF1aXJlKCcuL19TZXQnKSxcbiAgICBub29wID0gcmVxdWlyZSgnLi9ub29wJyksXG4gICAgc2V0VG9BcnJheSA9IHJlcXVpcmUoJy4vX3NldFRvQXJyYXknKTtcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgSU5GSU5JVFkgPSAxIC8gMDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgc2V0IG9iamVjdCBvZiBgdmFsdWVzYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gYWRkIHRvIHRoZSBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgc2V0LlxuICovXG52YXIgY3JlYXRlU2V0ID0gIShTZXQgJiYgKDEgLyBzZXRUb0FycmF5KG5ldyBTZXQoWywtMF0pKVsxXSkgPT0gSU5GSU5JVFkpID8gbm9vcCA6IGZ1bmN0aW9uKHZhbHVlcykge1xuICByZXR1cm4gbmV3IFNldCh2YWx1ZXMpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVTZXQ7XG4iLCJ2YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuL3RvU3RyaW5nJyk7XG5cbi8qKlxuICogVXNlZCB0byBtYXRjaCBgUmVnRXhwYFxuICogW3N5bnRheCBjaGFyYWN0ZXJzXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wYXR0ZXJucykuXG4gKi9cbnZhciByZVJlZ0V4cENoYXIgPSAvW1xcXFxeJC4qKz8oKVtcXF17fXxdL2csXG4gICAgcmVIYXNSZWdFeHBDaGFyID0gUmVnRXhwKHJlUmVnRXhwQ2hhci5zb3VyY2UpO1xuXG4vKipcbiAqIEVzY2FwZXMgdGhlIGBSZWdFeHBgIHNwZWNpYWwgY2hhcmFjdGVycyBcIl5cIiwgXCIkXCIsIFwiXFxcIiwgXCIuXCIsIFwiKlwiLCBcIitcIixcbiAqIFwiP1wiLCBcIihcIiwgXCIpXCIsIFwiW1wiLCBcIl1cIiwgXCJ7XCIsIFwifVwiLCBhbmQgXCJ8XCIgaW4gYHN0cmluZ2AuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IFN0cmluZ1xuICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gZXNjYXBlLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgZXNjYXBlZCBzdHJpbmcuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uZXNjYXBlUmVnRXhwKCdbbG9kYXNoXShodHRwczovL2xvZGFzaC5jb20vKScpO1xuICogLy8gPT4gJ1xcW2xvZGFzaFxcXVxcKGh0dHBzOi8vbG9kYXNoXFwuY29tL1xcKSdcbiAqL1xuZnVuY3Rpb24gZXNjYXBlUmVnRXhwKHN0cmluZykge1xuICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICByZXR1cm4gKHN0cmluZyAmJiByZUhhc1JlZ0V4cENoYXIudGVzdChzdHJpbmcpKVxuICAgID8gc3RyaW5nLnJlcGxhY2UocmVSZWdFeHBDaGFyLCAnXFxcXCQmJylcbiAgICA6IHN0cmluZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlc2NhcGVSZWdFeHA7XG4iLCJ2YXIgYmFzZUNsb25lID0gcmVxdWlyZSgnLi9fYmFzZUNsb25lJyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGNsb25pbmcuICovXG52YXIgQ0xPTkVfREVFUF9GTEFHID0gMSxcbiAgICBDTE9ORV9TWU1CT0xTX0ZMQUcgPSA0O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uY2xvbmVgIGV4Y2VwdCB0aGF0IGl0IHJlY3Vyc2l2ZWx5IGNsb25lcyBgdmFsdWVgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byByZWN1cnNpdmVseSBjbG9uZS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBkZWVwIGNsb25lZCB2YWx1ZS5cbiAqIEBzZWUgXy5jbG9uZVxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0cyA9IFt7ICdhJzogMSB9LCB7ICdiJzogMiB9XTtcbiAqXG4gKiB2YXIgZGVlcCA9IF8uY2xvbmVEZWVwKG9iamVjdHMpO1xuICogY29uc29sZS5sb2coZGVlcFswXSA9PT0gb2JqZWN0c1swXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBjbG9uZURlZXAodmFsdWUpIHtcbiAgcmV0dXJuIGJhc2VDbG9uZSh2YWx1ZSwgQ0xPTkVfREVFUF9GTEFHIHwgQ0xPTkVfU1lNQk9MU19GTEFHKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZURlZXA7XG4iLCJpbXBvcnQgdW5pcVdpdGggZnJvbSAnbG9kYXNoL3VuaXFXaXRoJztcbmltcG9ydCBpc0VxdWFsIGZyb20gJ2xvZGFzaC9pc0VxdWFsJztcbmltcG9ydCBtZW1vaXplIGZyb20gJ2xvZGFzaC9tZW1vaXplJztcbmltcG9ydCBlc2NhcGVSZWdFeHAgZnJvbSAnbG9kYXNoL2VzY2FwZVJlZ0V4cCc7XG5pbXBvcnQgY2xvbmVEZWVwIGZyb20gJ2xvZGFzaC9jbG9uZURlZXAnO1xuXG4vKipcbiAqIExvY2F0aW9uIHByb3BlcnRpZXMuXG4gKiBAdHlwZWRlZiB7TG9jYXRpb25Qcm9wZXJ0aWVzfVxuICogQHByb3BlcnR5IHtzdHJpbmd9IGxheWVyIFN1Z2dlc3Rpb24gbGF5ZXIuXG4gKiBAcHJvcGVydHkge2xhdH0gW251bWJlcl1cbiAqIEBwcm9wZXJ0eSB7bG9ufSBbbnVtYmVyXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IGFkZHJlc3MgQWRkcmVzcy5cbiAqL1xuXG4vKipcbiAqIFJldHVybnMgbG9jYWxhZG1pbiAoY2l0eSBuYW1lKSBmb3Igc3VnZ2VzdGlvbnNcbiAqXG4gKiBAbmFtZSBnZXRMb2NhbGFkbWluXG4gKiBAcGFyYW0ge09iamVjdH0gc3VnZ2VzdGlvbiBzdWdnZXN0aW9uJ3MgcHJvcGVydGllcyBmcm9tIGdlb2NvZGluZyBvciBhIGZhdm91cml0ZSBzdG9wL3N0YXRpb24uXG4gKiBFeHBlY3RzIGxhc3QgcGFydCBvZiBhbiBhZGRyZXNzIChhZnRlciAnLCcpIHRvIGNvbnRhaW4gdGhlIGNpdHkgbmFtZSBvZiB0aGUgc3VnZ2VzdGlvbiBsb2NhdGlvbi5cbiAqIEByZXR1cm5zIHtTdHJpbmd9ICBDaXR5IG5hbWUgb3IgZW1wdHkgc3RyaW5nXG4gKi9cbmNvbnN0IGdldExvY2FsYWRtaW4gPSBzdWdnZXN0aW9uID0+XG4gIHN1Z2dlc3Rpb24ubG9jYWxhZG1pbiB8fFxuICBzdWdnZXN0aW9uLmxvY2FsYWRtaW4gfHxcbiAgKHN1Z2dlc3Rpb24uYWRkcmVzcyAmJlxuICAgIHN1Z2dlc3Rpb24uYWRkcmVzcy5sYXN0SW5kZXhPZignLCcpIDwgc3VnZ2VzdGlvbi5hZGRyZXNzLmxlbmd0aCAtIDIgJiZcbiAgICBzdWdnZXN0aW9uLmFkZHJlc3Muc3Vic3RyaW5nKHN1Z2dlc3Rpb24uYWRkcmVzcy5sYXN0SW5kZXhPZignLCcpICsgMikpIHx8XG4gICcnO1xuXG5leHBvcnQgY29uc3QgZ2V0U3RvcENvZGUgPSAoeyBpZCwgY29kZSB9KSA9PiB7XG4gIGlmIChjb2RlKSB7XG4gICAgcmV0dXJuIGNvZGU7XG4gIH1cbiAgaWYgKFxuICAgIGlkID09PSB1bmRlZmluZWQgfHxcbiAgICB0eXBlb2YgaWQuaW5kZXhPZiA9PT0gJ3VuZGVmaW5lZCcgfHxcbiAgICBpZC5pbmRleE9mKCcjJykgPT09IC0xXG4gICkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gaWQgZnJvbSBwZWxpYXNcbiAgcmV0dXJuIGlkLnN1YnN0cmluZyhpZC5pbmRleE9mKCcjJykgKyAxKTtcbn07XG5cbmV4cG9ydCBjb25zdCBmb3JtYXRGYXZvdXJpdGVQbGFjZUxhYmVsID0gKG5hbWUsIGFkZHJlc3MpID0+IFtcbiAgbmFtZSB8fCAoYWRkcmVzcyAmJiBhZGRyZXNzLnNwbGl0KCcsJylbMF0pLFxuICB0eXBlb2YgYWRkcmVzcyA9PT0gJ3N0cmluZydcbiAgICA/IGFkZHJlc3MucmVwbGFjZShuZXcgUmVnRXhwKGAke2VzY2FwZVJlZ0V4cChuYW1lKX0oWyAsXXwkKStgKSwgJycpXG4gICAgOiAnJyxcbl07XG5cbi8qKlxuICogRm9ybWF0IHN1Z2dlc3Rpb24tcGFpciBbbmFtZSwgYWRkcmVzc10gYnkgYHN1Z2dlc3Rpb24ubGF5ZXJgLlxuICpcbiAqIEBuYW1lIGdldE5hbWVMYWJlbFxuICogQHBhcmFtIHtMb2NhdGlvblByb3BlcnRpZXN9IHN1Z2dlc3Rpb25cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3BsYWluXVxuICpcbiAqIEByZXR1cm5zIHtBcnJheS48c3RyaW5nPn0gRm9ybWF0dGVkIGxhYmVsLlxuICovXG5leHBvcnQgY29uc3QgZ2V0TmFtZUxhYmVsID0gbWVtb2l6ZShcbiAgKHN1Z2dlc3Rpb24sIHBsYWluID0gZmFsc2UpID0+IHtcbiAgICBzd2l0Y2ggKHN1Z2dlc3Rpb24ubGF5ZXIpIHtcbiAgICAgIGNhc2UgJ2N1cnJlbnRQb3NpdGlvbic6XG4gICAgICAgIHJldHVybiBbc3VnZ2VzdGlvbi5sYWJlbElkLCBzdWdnZXN0aW9uLmFkZHJlc3NdO1xuICAgICAgY2FzZSAnc2VsZWN0RnJvbU1hcCc6XG4gICAgICBjYXNlICdvd25Mb2NhdGlvbnMnOlxuICAgICAgY2FzZSAnYmFjayc6XG4gICAgICAgIHJldHVybiBbc3VnZ2VzdGlvbi5sYWJlbElkXTtcbiAgICAgIGNhc2UgJ2Zhdm91cml0ZVBsYWNlJzpcbiAgICAgICAgcmV0dXJuIGZvcm1hdEZhdm91cml0ZVBsYWNlTGFiZWwoc3VnZ2VzdGlvbi5uYW1lLCBzdWdnZXN0aW9uLmFkZHJlc3MpO1xuICAgICAgY2FzZSAnZmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb24nOlxuICAgICAgY2FzZSAnYmlrZXN0YXRpb24nOlxuICAgICAgICByZXR1cm4gW3N1Z2dlc3Rpb24ubmFtZV07XG4gICAgICBjYXNlICdmYXZvdXJpdGVSb3V0ZSc6XG4gICAgICBjYXNlICdyb3V0ZS1CVVMnOlxuICAgICAgY2FzZSAncm91dGUtVFJBTSc6XG4gICAgICBjYXNlICdyb3V0ZS1SQUlMJzpcbiAgICAgIGNhc2UgJ3JvdXRlLVNVQldBWSc6XG4gICAgICBjYXNlICdyb3V0ZS1GRVJSWSc6XG4gICAgICBjYXNlICdyb3V0ZS1GVU5JQ1VMQVInOlxuICAgICAgY2FzZSAncm91dGUtQUlSUExBTkUnOlxuICAgICAgICByZXR1cm4gIXBsYWluICYmIHN1Z2dlc3Rpb24uc2hvcnROYW1lXG4gICAgICAgICAgPyBbXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24uZ3Rmc0lkLFxuICAgICAgICAgICAgICBzdWdnZXN0aW9uLm1vZGUudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5sb25nTmFtZSxcbiAgICAgICAgICAgIF1cbiAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5zaG9ydE5hbWUsXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24ubG9uZ05hbWUsXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24uYWdlbmN5ID8gc3VnZ2VzdGlvbi5hZ2VuY3kubmFtZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIF07XG4gICAgICBjYXNlICd2ZW51ZSc6XG4gICAgICBjYXNlICdhZGRyZXNzJzpcbiAgICAgIGNhc2UgJ3N0cmVldCc6XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgc3VnZ2VzdGlvbi5uYW1lLFxuICAgICAgICAgIHN1Z2dlc3Rpb24ubGFiZWwucmVwbGFjZShcbiAgICAgICAgICAgIG5ldyBSZWdFeHAoYCR7ZXNjYXBlUmVnRXhwKHN1Z2dlc3Rpb24ubmFtZSl9KCwpPyggKT9gKSxcbiAgICAgICAgICAgICcnLFxuICAgICAgICAgICksXG4gICAgICAgIF07XG4gICAgICBjYXNlICdmYXZvdXJpdGVTdG9wJzpcbiAgICAgIGNhc2UgJ3N0b3AnOlxuICAgICAgICByZXR1cm4gcGxhaW5cbiAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5uYW1lIHx8XG4gICAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5sYWJlbCB8fFxuICAgICAgICAgICAgICAgIChzdWdnZXN0aW9uLmFkZHJlc3MgJiYgc3VnZ2VzdGlvbi5hZGRyZXNzLnNwbGl0KCcsJylbMF0pLFxuICAgICAgICAgICAgICBnZXRMb2NhbGFkbWluKHN1Z2dlc3Rpb24pLFxuICAgICAgICAgICAgXVxuICAgICAgICAgIDogW1xuICAgICAgICAgICAgICBzdWdnZXN0aW9uLm5hbWUsXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24uaWQsXG4gICAgICAgICAgICAgIGdldFN0b3BDb2RlKHN1Z2dlc3Rpb24pLFxuICAgICAgICAgICAgICBnZXRMb2NhbGFkbWluKHN1Z2dlc3Rpb24pLFxuICAgICAgICAgICAgXTtcbiAgICAgIGNhc2UgJ2Zhdm91cml0ZVN0YXRpb24nOlxuICAgICAgY2FzZSAnc3RhdGlvbic6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIHN1Z2dlc3Rpb24ubmFtZSB8fFxuICAgICAgICAgICAgc3VnZ2VzdGlvbi5sYWJlbCB8fFxuICAgICAgICAgICAgKHN1Z2dlc3Rpb24uYWRkcmVzcyAmJiBzdWdnZXN0aW9uLmFkZHJlc3Muc3BsaXQoJywnKVswXSksXG4gICAgICAgICAgZ2V0TG9jYWxhZG1pbihzdWdnZXN0aW9uKSxcbiAgICAgICAgXTtcbiAgICB9XG4gIH0sXG4gIChpdGVtLCBwbGFpbikgPT4ge1xuICAgIGNvbnN0IGkgPSBjbG9uZURlZXAoaXRlbSk7XG4gICAgaS5wbGFpbiA9IHBsYWluO1xuICAgIHJldHVybiBpO1xuICB9LFxuKTtcblxuLyoqXG4gKiBDaGVja3MgdGhhdCBmZWF0dXJlcyBhcmUgdW5pcXVlIGJ5IGxhYmVsXG4gKlxuICogQG5hbWUgdW5pcUJ5TGFiZWxcbiAqIEBwYXJhbSB7QXJyYXl9IGZlYXR1cmVzIEFycmF5IG9mIGZlYXR1cmVzXG4gKiBAcmV0dXJucyB7QXJyYXl9ICBBcnJheSBvZiB1bmlxdWUgZmVhdHVyZXNcbiAqIEBleGFtcGxlXG4gKiBkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC51bmlxQnlMYWJlbChmZWF0dXJlcyk7XG4gKiAvLz0gQXJyYXkoMilcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdW5pcUJ5TGFiZWwoZmVhdHVyZXMpIHtcbiAgcmV0dXJuIHVuaXFXaXRoKGZlYXR1cmVzLCAoZmVhdDEsIGZlYXQyKSA9PiB7XG4gICAgaWYgKGZlYXQxLnR5cGUgPT09ICdGdXR1cmVSb3V0ZScgfHwgZmVhdDIudHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgaXNFcXVhbChnZXROYW1lTGFiZWwoZmVhdDEucHJvcGVydGllcyksIGdldE5hbWVMYWJlbChmZWF0Mi5wcm9wZXJ0aWVzKSkgJiZcbiAgICAgIGZlYXQxLnByb3BlcnRpZXMubGF5ZXIgPT09IGZlYXQyLnByb3BlcnRpZXMubGF5ZXJcbiAgICApO1xuICB9KTtcbn1cbiIsImZ1bmN0aW9uIHN0eWxlSW5qZWN0KGNzcywgcmVmKSB7XG4gIGlmICggcmVmID09PSB2b2lkIDAgKSByZWYgPSB7fTtcbiAgdmFyIGluc2VydEF0ID0gcmVmLmluc2VydEF0O1xuXG4gIGlmICghY3NzIHx8IHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuOyB9XG5cbiAgdmFyIGhlYWQgPSBkb2N1bWVudC5oZWFkIHx8IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07XG4gIHZhciBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gIHN0eWxlLnR5cGUgPSAndGV4dC9jc3MnO1xuXG4gIGlmIChpbnNlcnRBdCA9PT0gJ3RvcCcpIHtcbiAgICBpZiAoaGVhZC5maXJzdENoaWxkKSB7XG4gICAgICBoZWFkLmluc2VydEJlZm9yZShzdHlsZSwgaGVhZC5maXJzdENoaWxkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuICB9XG5cbiAgaWYgKHN0eWxlLnN0eWxlU2hlZXQpIHtcbiAgICBzdHlsZS5zdHlsZVNoZWV0LmNzc1RleHQgPSBjc3M7XG4gIH0gZWxzZSB7XG4gICAgc3R5bGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgc3R5bGVJbmplY3Q7XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9jbGljay1ldmVudHMtaGF2ZS1rZXktZXZlbnRzICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9tb2RhbC1jb250ZW50LnNjc3MnO1xuXG5jb25zdCBNb2RhbENvbnRlbnQgPSAoeyBoZWFkZXJUZXh0LCByZW5kZXJMaXN0IH0pID0+IHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzWydmYXZvdXJpdGUtZWRpdC1tb2RhbC1jb250ZW50LWNvbnRhaW5lciddfT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXNbJ2Zhdm91cml0ZS1lZGl0LW1vZGFsLWNvbnRlbnQtdG9wJ119PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzWydmYXZvdXJpdGUtZWRpdC1tb2RhbC1jb250ZW50LWhlYWRlciddfT5cbiAgICAgICAgICB7aGVhZGVyVGV4dH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIHtyZW5kZXJMaXN0KCl9XG4gICAgPC9kaXY+XG4gICk7XG59O1xuXG5Nb2RhbENvbnRlbnQucHJvcFR5cGVzID0ge1xuICBoZWFkZXJUZXh0OiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIHJlbmRlckxpc3Q6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBNb2RhbENvbnRlbnQ7XG4iLCJjb25zdCB0cmFuc2xhdGlvbnMgPSB7XG4gIGRlOiB7XG4gICAgY2FuY2VsOiAnQWJicmVjaGVuJyxcbiAgICBkZWxldGU6ICdMw7ZzY2hlbicsXG4gICAgJ2RlbGV0ZS1wbGFjZS1oZWFkZXInOiAnV29sbGVuIFNpZSBkZW4gRmF2b3JpdGVuIGzDtnNjaGVuPycsXG4gICAgJ2RlbGV0ZS1wbGFjZS1uYW1lJzogJ0zDtnNjaGUgRmF2b3JpdDoge3tmYXZvdXJpdGUubmFtZX19JyxcbiAgICAnZWRpdC1wbGFjZXMnOiAnQmVhcmJlaXRlIEZhdm9yaXRlbicsXG4gICAgJ2VkaXQtcGxhY2UtbmFtZSc6ICdCZWFyYmVpdGUgRmF2b3JpdDoge3tmYXZvdXJpdGUubmFtZX19JyxcbiAgICAnZWRpdC1tb2RhbC1vbi1vcGVuJzogJ0Zhdm9yaXRlbiBiZWFyYmVpdGVuLicsXG4gICAgJ2Nob29zZS1pY29uJzogJ1fDpGhsZSBkYXMgU3ltYm9sIGbDvHIgZGllc2VuIE9ydCcsXG4gICAgJ2Nsb3NlLW1vZGFsJzogJ1NjaGxpZcOfZSBkZW4gRGlhbG9nJyxcbiAgICAnaW5wdXQtcGxhY2Vob2xkZXInOiAnV8OkaGxlbiBTaWUgZWluZW4gTmFtZSBmw7xyIGRpZXNlbiBPcnQgKG9wdGlvbmFsKScsXG4gICAgc2F2ZTogJ1NwZWljaGVybicsXG4gICAgJ3NhdmUtcGxhY2UnOiAnRmF2b3JpdCBzcGVpY2hlcm4nLFxuICB9LFxuICBlbjoge1xuICAgIGNhbmNlbDogJ0NhbmNlbCcsXG4gICAgZGVsZXRlOiAnRGVsZXRlJyxcbiAgICAnZGVsZXRlLXBsYWNlLWhlYWRlcic6ICdEbyB5b3Ugd2FudCB0byBkZWxldGUgdGhlIHBsYWNlPycsXG4gICAgJ2RlbGV0ZS1wbGFjZS1uYW1lJzogJ0RlbGV0ZSBwbGFjZToge3tmYXZvdXJpdGUubmFtZX19JyxcbiAgICAnZWRpdC1wbGFjZXMnOiAnRWRpdCBwbGFjZXMnLFxuICAgICdlZGl0LXBsYWNlLW5hbWUnOiAnRWRpdCBwbGFjZToge3tmYXZvdXJpdGUubmFtZX19JyxcbiAgICAnZWRpdC1tb2RhbC1vbi1vcGVuJzogJ0Zhdm91cml0ZSBlZGl0aW5nIG1vZGFsLicsXG4gICAgJ2Nob29zZS1pY29uJzogXCJTZWxlY3QgdGhlIHBsYWNlJ3MgaWNvblwiLFxuICAgICdjbG9zZS1tb2RhbCc6ICdDbG9zZSB0aGUgbW9kYWwnLFxuICAgICdpbnB1dC1wbGFjZWhvbGRlcic6ICdHaXZlIHRoZSBuYW1lIGEgcGxhY2UgKG9wdGlvbmFsKScsXG4gICAgc2F2ZTogJ1NhdmUnLFxuICAgICdzYXZlLXBsYWNlJzogJ1NhdmUgcGxhY2UnLFxuICAgIHVwOiAnTW92ZSBmYXZvdXJpdGUgdXAnLFxuICAgIGRvd246ICdNb3ZlIGZhdm91cml0ZSBkb3duJyxcbiAgfSxcbiAgZmk6IHtcbiAgICBjYW5jZWw6ICdQZXJ1dXRhJyxcbiAgICBkZWxldGU6ICdQb2lzdGEnLFxuICAgICdkZWxldGUtcGxhY2UtaGVhZGVyJzogJ0hhbHVhdGtvIHBvaXN0YWEgcGFpa2FuPycsXG4gICAgJ2RlbGV0ZS1wbGFjZS1uYW1lJzogJ1BvaXN0YSBwYWlra2E6IHt7ZmF2b3VyaXRlLm5hbWV9fScsXG4gICAgJ2VkaXQtcGxhY2VzJzogJ011b2trYWEgcGFpa2tvamEnLFxuICAgICdlZGl0LXBsYWNlLW5hbWUnOiAnTXVva2thYSBwYWlra2FhOiB7e2Zhdm91cml0ZS5uYW1lfX0nLFxuICAgICdlZGl0LW1vZGFsLW9uLW9wZW4nOiAnU3Vvc2lra2llbiBtdW9ra2F1cyBtb2RhYWxpLicsXG4gICAgJ2Nob29zZS1pY29uJzogJ1ZhbGl0c2UgcGFpa2FuIGt1dmFrZScsXG4gICAgJ2Nsb3NlLW1vZGFsJzogJ1N1bGplIG1vZGFhbGknLFxuICAgICdpbnB1dC1wbGFjZWhvbGRlcic6ICdBbm5hIHBhaWthbGxlIG5pbWkgKHZhcGFhZWh0b2luZW4pJyxcbiAgICBzYXZlOiAnVGFsbGVubmEnLFxuICAgICdzYXZlLXBsYWNlJzogJ1RhbGxlbm5hIHBhaWtrYScsXG4gICAgdXA6ICdTaWlycsOkIHN1b3Npa2tpc2lqYWludGlhIHlsw7Zww6RpbicsXG4gICAgZG93bjogJ1NpaXJyw6Qgc3Vvc2lra2lzaWphaW50aWEgYWxhc3DDpGluJyxcbiAgfSxcbiAgcGw6IHtcbiAgICBjYW5jZWw6ICdBbnVsdWonLFxuICAgIGRlbGV0ZTogJ1VzdcWEJyxcbiAgICAnZGVsZXRlLXBsYWNlLWhlYWRlcic6ICdDenkgbmEgcGV3bm8gY2hjZXN6IHVzdW7EhcSHIHRvIG1pZWpzY2U/JyxcbiAgICAnZGVsZXRlLXBsYWNlLW5hbWUnOiAnVXN1xYQgbWllanNjZToge3tmYXZvdXJpdGUubmFtZX19JyxcbiAgICAnZWRpdC1wbGFjZXMnOiAnRWR5dHVqIG1pZWpzY2EnLFxuICAgICdlZGl0LXBsYWNlLW5hbWUnOiAnRWR5dHVqIG1pZWpzY2U6IHt7ZmF2b3VyaXRlLm5hbWV9fScsXG4gICAgJ2VkaXQtbW9kYWwtb24tb3Blbic6ICdNb2RhbCBlZHljamkgdWx1YmlvbnljaC4nLFxuICAgICdjaG9vc2UtaWNvbic6ICdXeWJpZXJ6IGlrb27EmSBtaWVqc2NhJyxcbiAgICAnY2xvc2UtbW9kYWwnOiAnWmFta25paiBtb2RhbCcsXG4gICAgJ2lucHV0LXBsYWNlaG9sZGVyJzogJ05hZGFqIG5henfEmSBtaWVqc2N1IChvcGNqb25hbG5lKScsXG4gICAgc2F2ZTogJ1phcGlzeicsXG4gICAgJ3NhdmUtcGxhY2UnOiAnWmFwaXN6IG1pZWpzY2UnLFxuICAgIHVwOiAnUHJ6ZW5pZcWbIHVsdWJpb25lIHd5xbxlaicsXG4gICAgZG93bjogJ1ByemVuaWXFmyB1bHViaW9uZSBuacW8ZWonLFxuICB9LFxuICBzdjoge1xuICAgIGNhbmNlbDogJ0F2YnJ5dCcsXG4gICAgZGVsZXRlOiAnVGEgYm9ydCcsXG4gICAgJ2RlbGV0ZS1wbGFjZS1oZWFkZXInOiAnVmlsbCBkdSB0YSBib3J0IHBsYXRzZW4/JyxcbiAgICAnZGVsZXRlLXBsYWNlLW5hbWUnOiAnVGEgYm9ydCBwbGF0c2VuOiB7e2Zhdm91cml0ZS5uYW1lfX0nLFxuICAgICdlZGl0LXBsYWNlcyc6ICdSZWRpZ2VyYSBwbGF0c2VyJyxcbiAgICAnZWRpdC1wbGFjZS1uYW1lJzogJ0VkaXQgcGxhY2U6IHt7ZmF2b3VyaXRlLm5hbWV9fScsXG4gICAgJ2VkaXQtbW9kYWwtb24tb3Blbic6ICdGYXZvdXJpdGUgZWRpdGluZyBtb2RhbC4nLFxuICAgICdjaG9vc2UtaWNvbic6ICdWw6RsaiBwbGF0c2VucyBpa29uJyxcbiAgICAnY2xvc2UtbW9kYWwnOiAnU3TDpG5nIG1vZGFsZW4nLFxuICAgICdpbnB1dC1wbGFjZWhvbGRlcic6ICdBbmdlIHBsYXRzZW5zIG5hbW4gKGZyaXZpbGxpZ3QpJyxcbiAgICBzYXZlOiAnU3BhcmEnLFxuICAgICdzYXZlLXBsYWNlJzogJ1NwYXJhIHBsYXRzJyxcbiAgICB1cDogJ0ZseXR0YSBmYXZvcml0ZW4gdXBww6V0JyxcbiAgICBkb3duOiAnRmx5dHRhIGZhdm9yaXRlbiBuZWTDpXQnLFxuICB9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgdHJhbnNsYXRpb25zO1xuIiwiLyogZXNsaW50IHJlYWN0L2ZvcmJpZC1wcm9wLXR5cGVzOiAwICovXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFJlYWN0U29ydGFibGUgfSBmcm9tICdyZWFjdC1zb3J0YWJsZWpzJztcbmltcG9ydCBjeCBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBpMThuZXh0IGZyb20gJ2kxOG5leHQnO1xuaW1wb3J0IGRpZmZlcmVuY2VXaXRoIGZyb20gJ2xvZGFzaC9kaWZmZXJlbmNlV2l0aCc7XG5pbXBvcnQgaXNFcXVhbCBmcm9tICdsb2Rhc2gvaXNFcXVhbCc7XG5pbXBvcnQgaXNFbXB0eSBmcm9tICdsb2Rhc2gvaXNFbXB0eSc7XG5pbXBvcnQgb21pdCBmcm9tICdsb2Rhc2gvb21pdCc7XG5pbXBvcnQgQ29udGFpbmVyU3Bpbm5lciBmcm9tICdAaHNsLWZpL2NvbnRhaW5lci1zcGlubmVyJztcbmltcG9ydCBNb2RhbCBmcm9tICdAaHNsLWZpL21vZGFsJztcbmltcG9ydCBJY29uIGZyb20gJ0BkaWdpdHJhbnNpdC1jb21wb25lbnQvZGlnaXRyYW5zaXQtY29tcG9uZW50LWljb24nO1xuaW1wb3J0IERpYWxvZ01vZGFsIGZyb20gJ0BkaWdpdHJhbnNpdC1jb21wb25lbnQvZGlnaXRyYW5zaXQtY29tcG9uZW50LWRpYWxvZy1tb2RhbCc7XG5pbXBvcnQgeyBmb3JtYXRGYXZvdXJpdGVQbGFjZUxhYmVsIH0gZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXVuaXEtYnktbGFiZWwnO1xuaW1wb3J0IE1vZGFsQ29udGVudCBmcm9tICcuL2hlbHBlcnMvTW9kYWxDb250ZW50JztcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9oZWxwZXJzL3N0eWxlcy5zY3NzJztcbmltcG9ydCB0cmFuc2xhdGlvbnMgZnJvbSAnLi9oZWxwZXJzL3RyYW5zbGF0aW9ucyc7XG5cbmkxOG5leHQuaW5pdCh7XG4gIGxuZzogJ2ZpJyxcbiAgZmFsbGJhY2tMbmc6ICdmaScsXG4gIGRlZmF1bHROUzogJ3RyYW5zbGF0aW9uJyxcbiAgaW50ZXJwb2xhdGlvbjoge1xuICAgIGVzY2FwZVZhbHVlOiBmYWxzZSwgLy8gbm90IG5lZWRlZCBmb3IgcmVhY3QgYXMgaXQgZXNjYXBlcyBieSBkZWZhdWx0XG4gIH0sXG59KTtcblxuY29uc3QgaXNLZXlib2FyZFNlbGVjdGlvbkV2ZW50ID0gZXZlbnQgPT4ge1xuICBjb25zdCBzcGFjZSA9IFsxMywgJyAnLCAnU3BhY2ViYXInXTtcbiAgY29uc3QgZW50ZXIgPSBbMzIsICdFbnRlciddO1xuICBjb25zdCBrZXkgPSAoZXZlbnQgJiYgKGV2ZW50LmtleSB8fCBldmVudC53aGljaCB8fCBldmVudC5rZXlDb2RlKSkgfHwgJyc7XG5cbiAgaWYgKCFrZXkgfHwgIXNwYWNlLmNvbmNhdChlbnRlcikuaW5jbHVkZXMoa2V5KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmNsYXNzIEZhdm91cml0ZUVkaXRpbmdNb2RhbCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgLyoqIFJlcXVpcmVkLiBDbG9zZSBtb2RhbC5cbiAgICAgKiBAdHlwZSB7ZnVuY3Rpb259ICovXG4gICAgaGFuZGxlQ2xvc2U6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgLyoqIFJlcXVpcmVkLlxuICAgICAqIEB0eXBlIHtmdW5jdGlvbn0gKi9cbiAgICB1cGRhdGVGYXZvdXJpdGVzOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIC8qKiBSZXF1aXJlZC5cbiAgICAgKiBAdHlwZSB7ZnVuY3Rpb259ICovXG4gICAgZGVsZXRlRmF2b3VyaXRlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIC8qKiBSZXF1aXJlZC4gRnVuY3Rpb24gdGhhdCB0YWtlcyBzZWxlY3RlZCBmYXZvdXJpdGUgb2JqZWN0IGFzIHBhcmFtZXRlci5cbiAgICAgKiBAdHlwZSB7ZnVuY3Rpb259ICovXG4gICAgb25FZGl0U2VsZWN0ZWQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgLyoqIFJlcXVpcmVkLlxuICAgICAqIEB0eXBlIHthcnJheTxvYmplY3Q+fVxuICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0eXBlXG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IGFkZHJlc3NcbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gZ3Rmc0lkXG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IGdpZFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsYXRcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gbG9uXG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IG5hbWVcbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gc2VsZWN0ZWRJY29uSWRcbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gZmF2b3VyaXRlSWRcbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gbGF5ZXJcbiAgICAgKi9cbiAgICBmYXZvdXJpdGVzOiBQcm9wVHlwZXMuYXJyYXlPZihcbiAgICAgIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICAgIHR5cGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICAgIGFkZHJlc3M6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICAgIGd0ZnNJZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgICAgZ2lkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgICBsYXQ6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgICAgIGxvbjogUHJvcFR5cGVzLm51bWJlcixcbiAgICAgICAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgICAgc2VsZWN0ZWRJY29uSWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICAgIGZhdm91cml0ZUlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgICBsYXllcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIH0pLFxuICAgICkuaXNSZXF1aXJlZCxcbiAgICBsYW5nOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGFwcEVsZW1lbnQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBpc01vZGFsT3BlbjogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgICBpc01vYmlsZTogUHJvcFR5cGVzLmJvb2wsXG4gICAgaXNMb2FkaW5nOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAgIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGhvdmVyQ29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgLyoqIE9wdGlvbmFsLiAqL1xuICAgIGZvbnRXZWlnaHRzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgLyoqIERlZmF1bHQgdmFsdWUgaXMgNTAwLiAqL1xuICAgICAgbWVkaXVtOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIH0pLFxuICB9O1xuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgbGFuZzogJ2ZpJyxcbiAgICBpc01vYmlsZTogZmFsc2UsXG4gICAgY29sb3I6ICcjMDA3YWM5JyxcbiAgICBob3ZlckNvbG9yOiAnIzAwNjJhMScsXG4gICAgZm9udFdlaWdodHM6IHtcbiAgICAgIG1lZGl1bTogNTAwLFxuICAgIH0sXG4gIH07XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgaTE4bmV4dC5jaGFuZ2VMYW5ndWFnZShwcm9wcy5sYW5nKTtcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgZmF2b3VyaXRlczogcHJvcHMuZmF2b3VyaXRlcyxcbiAgICAgIHNob3dEZWxldGVQbGFjZU1vZGFsOiBmYWxzZSxcbiAgICAgIHNlbGVjdGVkRmF2b3VyaXRlOiBudWxsLFxuICAgIH07XG4gICAgT2JqZWN0LmtleXModHJhbnNsYXRpb25zKS5mb3JFYWNoKGxhbmcgPT4ge1xuICAgICAgaTE4bmV4dC5hZGRSZXNvdXJjZUJ1bmRsZShsYW5nLCAndHJhbnNsYXRpb24nLCB0cmFuc2xhdGlvbnNbbGFuZ10pO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhuZXh0UHJvcHMsIHByZXZTdGF0ZSkge1xuICAgIGNvbnN0IG5leHRGYXZvdXJpdGVzID0gbmV4dFByb3BzLmZhdm91cml0ZXM7XG4gICAgY29uc3QgcHJldkZhdm91cml0ZXMgPSBwcmV2U3RhdGUuZmF2b3VyaXRlcztcbiAgICBpZiAoXG4gICAgICAhaXNFbXB0eShkaWZmZXJlbmNlV2l0aChuZXh0RmF2b3VyaXRlcywgcHJldkZhdm91cml0ZXMsIGlzRXF1YWwpKSB8fFxuICAgICAgIWlzRW1wdHkoZGlmZmVyZW5jZVdpdGgocHJldkZhdm91cml0ZXMsIG5leHRGYXZvdXJpdGVzLCBpc0VxdWFsKSlcbiAgICApIHtcbiAgICAgIGlmIChpc0VtcHR5KG5leHRGYXZvdXJpdGVzKSkge1xuICAgICAgICBuZXh0UHJvcHMuaGFuZGxlQ2xvc2UoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZhdm91cml0ZXM6IG5leHRGYXZvdXJpdGVzLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb21wb25lbnREaWRVcGRhdGUoKSB7XG4gICAgaWYgKGkxOG5leHQubGFuZ3VhZ2UgIT09IHRoaXMucHJvcHMubGFuZykge1xuICAgICAgaTE4bmV4dC5jaGFuZ2VMYW5ndWFnZSh0aGlzLnByb3BzLmxhbmcpO1xuICAgIH1cbiAgfVxuXG4gIG1vdmVGYXZvdXJpdGUgPSAoaSwgZGlyZWN0aW9uKSA9PiB7XG4gICAgY29uc3QgeyBmYXZvdXJpdGVzIH0gPSB0aGlzLnN0YXRlO1xuICAgIC8vIEVkaXQgY29weSBvZiB0aGUgZmF2b3VyaXRlcyB0byBhdm9pZCBjaGFuZ2luZyB0aGUgcHJvcHMuZmF2b3VyaXRlcyB1c2VkIGZvciBzdGF0ZSBpbml0aWFsaXphdGlvblxuICAgIGNvbnN0IGZhdm91cml0ZXNDb3B5ID0gWy4uLmZhdm91cml0ZXNdO1xuXG4gICAgY29uc3QgdG1wID0gZmF2b3VyaXRlc0NvcHlbaSArIGRpcmVjdGlvbl07XG4gICAgZmF2b3VyaXRlc0NvcHlbaSArIGRpcmVjdGlvbl0gPSBmYXZvdXJpdGVzQ29weVtpXTtcbiAgICBmYXZvdXJpdGVzQ29weVtpXSA9IHRtcDtcblxuICAgIHRoaXMuc2V0U3RhdGUoeyBmYXZvdXJpdGVzOiBmYXZvdXJpdGVzQ29weSB9KTtcbiAgfTtcblxuICByZW5kZXJGYXZvdXJpdGVMaXN0SXRlbSA9IChmYXZvdXJpdGUsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgaWNvbklkID0gZmF2b3VyaXRlLnNlbGVjdGVkSWNvbklkXG4gICAgICA/IGZhdm91cml0ZS5zZWxlY3RlZEljb25JZC5yZXBsYWNlKCdpY29uLWljb25fJywgJycpXG4gICAgICA6ICdwbGFjZSc7XG4gICAgY29uc3QgW25hbWUsIGFkZHJlc3NdID0gZm9ybWF0RmF2b3VyaXRlUGxhY2VMYWJlbChcbiAgICAgIGZhdm91cml0ZS5uYW1lLFxuICAgICAgZmF2b3VyaXRlLmFkZHJlc3MsXG4gICAgKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8bGlcbiAgICAgICAgY2xhc3NOYW1lPXtjeChzdHlsZXNbJ2Zhdm91cml0ZS1lZGl0LWxpc3QtaXRlbSddKX1cbiAgICAgICAga2V5PXtmYXZvdXJpdGUuZmF2b3VyaXRlSWR9XG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXNbJ2Zhdm91cml0ZS1lZGl0LWxpc3QtaXRlbS1sZWZ0J119PlxuICAgICAgICAgIHtpbmRleCA+IDAgJiYgKFxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlc1snZmF2b3VyaXRlLWVkaXQtbGlzdC1hcnJvdy1oaWRkZW4nXX1cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9e2kxOG5leHQudCgndXAnKX1cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubW92ZUZhdm91cml0ZShpbmRleCwgLTEpO1xuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAmdWFycjtcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICl9XG4gICAgICAgICAge2luZGV4IDwgdGhpcy5zdGF0ZS5mYXZvdXJpdGVzLmxlbmd0aCAtIDEgJiYgKFxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlc1snZmF2b3VyaXRlLWVkaXQtbGlzdC1hcnJvdy1oaWRkZW4nXX1cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9e2kxOG5leHQudCgnZG93bicpfVxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5tb3ZlRmF2b3VyaXRlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgJmRhcnI7XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICApfVxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXNbJ2Zhdm91cml0ZS1lZGl0LWxpc3QtaXRlbS1kcmFnJ119PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlc1snZmF2b3VyaXRlLWVkaXQtbGlzdC1pdGVtLWVsbGlwc2lzJ119PlxuICAgICAgICAgICAgICA8SWNvbiBpbWc9XCJlbGxpcHNpc1wiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9e2N4KFxuICAgICAgICAgICAgICBzdHlsZXNbJ2Zhdm91cml0ZS1lZGl0LWxpc3QtaXRlbS1pY29uJ10sXG4gICAgICAgICAgICAgIHN0eWxlc1tpY29uSWRdLFxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8SWNvbiBpbWc9e2ljb25JZH0gY29sb3I9e3RoaXMucHJvcHMuY29sb3J9IC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzWydmYXZvdXJpdGUtZWRpdC1saXN0LWl0ZW0tY29udGVudCddfT5cbiAgICAgICAgICA8cCBjbGFzc05hbWU9e3N0eWxlc1snZmF2b3VyaXRlLWVkaXQtbGlzdC1pdGVtLW5hbWUnXX0+e25hbWV9PC9wPlxuICAgICAgICAgIDxwIGNsYXNzTmFtZT17c3R5bGVzWydmYXZvdXJpdGUtZWRpdC1saXN0LWl0ZW0tYWRkcmVzcyddfT5cbiAgICAgICAgICAgIHthZGRyZXNzfVxuICAgICAgICAgIDwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXNbJ2Zhdm91cml0ZS1lZGl0LWxpc3QtaXRlbS1yaWdodCddfT5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIHRhYkluZGV4PVwiMFwiXG4gICAgICAgICAgICBhcmlhLWxhYmVsPXtpMThuZXh0LnQoJ2VkaXQtcGxhY2UtbmFtZScsIHtcbiAgICAgICAgICAgICAgZmF2b3VyaXRlLFxuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlc1snZmF2b3VyaXRlLWVkaXQtbGlzdC1pdGVtLWVkaXQnXX1cbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHRoaXMucHJvcHMub25FZGl0U2VsZWN0ZWQoZmF2b3VyaXRlKX1cbiAgICAgICAgICAgIG9uS2V5RG93bj17ZSA9PiB7XG4gICAgICAgICAgICAgIGlmIChpc0tleWJvYXJkU2VsZWN0aW9uRXZlbnQoZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLm9uRWRpdFNlbGVjdGVkKGZhdm91cml0ZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEljb24gaW1nPVwiZWRpdFwiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICB0YWJJbmRleD1cIjBcIlxuICAgICAgICAgICAgYXJpYS1sYWJlbD17aTE4bmV4dC50KCdkZWxldGUtcGxhY2UtbmFtZScsIHtcbiAgICAgICAgICAgICAgZmF2b3VyaXRlLFxuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlc1snZmF2b3VyaXRlLWVkaXQtbGlzdC1pdGVtLXJlbW92ZSddfVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT5cbiAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRGYXZvdXJpdGU6IGZhdm91cml0ZSxcbiAgICAgICAgICAgICAgICBzaG93RGVsZXRlUGxhY2VNb2RhbDogdHJ1ZSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9uS2V5RG93bj17ZSA9PiB7XG4gICAgICAgICAgICAgIGlmIChpc0tleWJvYXJkU2VsZWN0aW9uRXZlbnQoZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkRmF2b3VyaXRlOiBmYXZvdXJpdGUsXG4gICAgICAgICAgICAgICAgICBzaG93RGVsZXRlUGxhY2VNb2RhbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8SWNvbiBpbWc9XCJ0cmFzaFwiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9saT5cbiAgICApO1xuICB9O1xuXG4gIHJlbmRlckZhdm91cml0ZUxpc3QgPSAoKSA9PiB7XG4gICAgY29uc3QgeyBpc0xvYWRpbmcgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyBmYXZvdXJpdGVzIH0gPSB0aGlzLnN0YXRlO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzWydmYXZvdXJpdGUtZWRpdC1saXN0LWNvbnRhaW5lciddfT5cbiAgICAgICAgPENvbnRhaW5lclNwaW5uZXIgdmlzaWJsZT17aXNMb2FkaW5nfT5cbiAgICAgICAgICA8UmVhY3RTb3J0YWJsZVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXNbJ2Zhdm91cml0ZS1lZGl0LWxpc3QnXX1cbiAgICAgICAgICAgIHRhZz1cInVsXCJcbiAgICAgICAgICAgIGxpc3Q9e2Zhdm91cml0ZXN9XG4gICAgICAgICAgICBzZXRMaXN0PXtpdGVtcyA9PiB0aGlzLnNldFN0YXRlKHsgZmF2b3VyaXRlczogaXRlbXMgfSl9XG4gICAgICAgICAgICBhbmltYXRpb249ezIwMH1cbiAgICAgICAgICAgIGhhbmRsZT17YC4ke3N0eWxlc1snZmF2b3VyaXRlLWVkaXQtbGlzdC1pdGVtLWxlZnQnXX1gfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtmYXZvdXJpdGVzLm1hcCgoZmF2b3VyaXRlLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJGYXZvdXJpdGVMaXN0SXRlbShmYXZvdXJpdGUsIGluZGV4KTtcbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgIDwvUmVhY3RTb3J0YWJsZT5cbiAgICAgICAgPC9Db250YWluZXJTcGlubmVyPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfTtcblxuICByZW5kZXJEZWxldGVGYXZvdXJpdGVNb2RhbCA9IGZhdm91cml0ZSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxEaWFsb2dNb2RhbFxuICAgICAgICBhcHBFbGVtZW50PXt0aGlzLnByb3BzLmFwcEVsZW1lbnR9XG4gICAgICAgIGhlYWRlclRleHQ9e2kxOG5leHQudCgnZGVsZXRlLXBsYWNlLWhlYWRlcicpfVxuICAgICAgICBoYW5kbGVDbG9zZT17KCkgPT5cbiAgICAgICAgICB0aGlzLnNldFN0YXRlKFxuICAgICAgICAgICAgeyBzZWxlY3RlZEZhdm91cml0ZTogbnVsbCwgc2hvd0RlbGV0ZVBsYWNlTW9kYWw6IGZhbHNlIH0sXG4gICAgICAgICAgICAoKSA9PiB0aGlzLnByb3BzLmhhbmRsZUNsb3NlKCksXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICAgIGlzTW9kYWxPcGVuPXt0aGlzLnN0YXRlLnNob3dEZWxldGVQbGFjZU1vZGFsfVxuICAgICAgICBkaWFsb2dDb250ZW50PXtcbiAgICAgICAgICBmYXZvdXJpdGUgPyBgJHtmYXZvdXJpdGUubmFtZX06ICR7ZmF2b3VyaXRlLmFkZHJlc3N9YCA6ICcnXG4gICAgICAgIH1cbiAgICAgICAgcHJpbWFyeUJ1dHRvblRleHQ9e2kxOG5leHQudCgnZGVsZXRlJyl9XG4gICAgICAgIHByaW1hcnlCdXR0b25PbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgdGhpcy5wcm9wcy5kZWxldGVGYXZvdXJpdGUoZmF2b3VyaXRlKTtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIHNlbGVjdGVkRmF2b3VyaXRlOiBudWxsLFxuICAgICAgICAgICAgc2hvd0RlbGV0ZVBsYWNlTW9kYWw6IGZhbHNlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9fVxuICAgICAgICBzZWNvbmRhcnlCdXR0b25UZXh0PXtpMThuZXh0LnQoJ2NhbmNlbCcpfVxuICAgICAgICBzZWNvbmRhcnlCdXR0b25PbkNsaWNrPXsoKSA9PlxuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgc2VsZWN0ZWRGYXZvdXJpdGU6IG51bGwsXG4gICAgICAgICAgICBzaG93RGVsZXRlUGxhY2VNb2RhbDogZmFsc2UsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgICBjb2xvcj17dGhpcy5wcm9wcy5jb2xvcn1cbiAgICAgICAgaG92ZXJDb2xvcj17dGhpcy5wcm9wcy5ob3ZlckNvbG9yfVxuICAgICAgICBmb250V2VpZ2h0cz17dGhpcy5wcm9wcy5mb250V2VpZ2h0c31cbiAgICAgICAgbGFuZz17dGhpcy5wcm9wcy5sYW5nfVxuICAgICAgLz5cbiAgICApO1xuICB9O1xuXG4gIGNsb3NlTW9kYWwgPSAoKSA9PiB7XG4gICAgdGhpcy5wcm9wcy5oYW5kbGVDbG9zZSgpO1xuICAgIGNvbnN0IG9taXR0ZWRGYXZvdXJpdGVzID0gdGhpcy5zdGF0ZS5mYXZvdXJpdGVzLm1hcChpdGVtID0+XG4gICAgICBvbWl0KGl0ZW0sIFsnY2hvc2VuJywgJ3NlbGVjdGVkJ10pLFxuICAgICk7XG4gICAgaWYgKCFpc0VxdWFsKG9taXR0ZWRGYXZvdXJpdGVzLCB0aGlzLnByb3BzLmZhdm91cml0ZXMpKSB7XG4gICAgICB0aGlzLnByb3BzLnVwZGF0ZUZhdm91cml0ZXMob21pdHRlZEZhdm91cml0ZXMpO1xuICAgIH1cbiAgfTtcblxuICByZW5kZXJNb2RhbENvbnRlbnQgPSAoKSA9PiB7XG4gICAgY29uc3QgeyBjb2xvciwgaG92ZXJDb2xvciwgZm9udFdlaWdodHMgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgbW9kYWxQcm9wcyA9IHtcbiAgICAgIGhlYWRlclRleHQ6IGkxOG5leHQudCgnZWRpdC1wbGFjZXMnKSxcbiAgICAgIHJlbmRlckxpc3Q6ICgpID0+IHRoaXMucmVuZGVyRmF2b3VyaXRlTGlzdCgpLFxuICAgIH07XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAnLS1jb2xvcic6IGAke2NvbG9yfWAsXG4gICAgICAgICAgJy0taG92ZXItY29sb3InOiBgJHtob3ZlckNvbG9yfWAsXG4gICAgICAgICAgJy0tZm9udC13ZWlnaHQtbWVkaXVtJzogZm9udFdlaWdodHMubWVkaXVtLFxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICA8TW9kYWxDb250ZW50IHsuLi5tb2RhbFByb3BzfSAvPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfTtcblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyBpc01vYmlsZSB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IHNob3dEZWxldGVQbGFjZU1vZGFsLCBzZWxlY3RlZEZhdm91cml0ZSB9ID0gdGhpcy5zdGF0ZTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdj5cbiAgICAgICAge2lzTW9iaWxlICYmIChcbiAgICAgICAgICA8TW9kYWxcbiAgICAgICAgICAgIGFwcEVsZW1lbnQ9e3RoaXMucHJvcHMuYXBwRWxlbWVudH1cbiAgICAgICAgICAgIGNvbnRlbnRMYWJlbD17aTE4bmV4dC50KCdlZGl0LW1vZGFsLW9uLW9wZW4nKX1cbiAgICAgICAgICAgIGNsb3NlQnV0dG9uTGFiZWw9e2kxOG5leHQudCgnY2xvc2UtbW9kYWwnKX1cbiAgICAgICAgICAgIHZhcmlhbnQ9XCJsYXJnZVwiXG4gICAgICAgICAgICBpc09wZW49e3RoaXMucHJvcHMuaXNNb2RhbE9wZW59XG4gICAgICAgICAgICBvbkNyb3NzQ2xpY2s9e3RoaXMuY2xvc2VNb2RhbH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7dGhpcy5yZW5kZXJEZWxldGVGYXZvdXJpdGVNb2RhbChzZWxlY3RlZEZhdm91cml0ZSl9XG4gICAgICAgICAgICB7dGhpcy5yZW5kZXJNb2RhbENvbnRlbnQoKX1cbiAgICAgICAgICA8L01vZGFsPlxuICAgICAgICApfVxuICAgICAgICB7IWlzTW9iaWxlICYmIChcbiAgICAgICAgICA8TW9kYWxcbiAgICAgICAgICAgIGFwcEVsZW1lbnQ9e3RoaXMucHJvcHMuYXBwRWxlbWVudH1cbiAgICAgICAgICAgIGNvbnRlbnRMYWJlbD17aTE4bmV4dC50KCdlZGl0LW1vZGFsLW9uLW9wZW4nKX1cbiAgICAgICAgICAgIGNsb3NlQnV0dG9uTGFiZWw9e2kxOG5leHQudCgnY2xvc2UtbW9kYWwnKX1cbiAgICAgICAgICAgIHZhcmlhbnQ9XCJzbWFsbFwiXG4gICAgICAgICAgICBpc09wZW49e3RoaXMucHJvcHMuaXNNb2RhbE9wZW59XG4gICAgICAgICAgICBvbkNyb3NzQ2xpY2s9e3RoaXMuY2xvc2VNb2RhbH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7dGhpcy5yZW5kZXJEZWxldGVGYXZvdXJpdGVNb2RhbChzZWxlY3RlZEZhdm91cml0ZSl9XG4gICAgICAgICAgICB7IXNob3dEZWxldGVQbGFjZU1vZGFsICYmIHRoaXMucmVuZGVyTW9kYWxDb250ZW50KCl9XG4gICAgICAgICAgPC9Nb2RhbD5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRmF2b3VyaXRlRWRpdGluZ01vZGFsO1xuIl0sIm5hbWVzIjpbIl90eXBlb2YiLCJvIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJjb25zdHJ1Y3RvciIsInByb3RvdHlwZSIsInRvUHJvcGVydHlLZXkiLCJ0IiwiaSIsInIiLCJlIiwidG9QcmltaXRpdmUiLCJjYWxsIiwiVHlwZUVycm9yIiwiU3RyaW5nIiwiTnVtYmVyIiwiX2RlZmluZVByb3BlcnR5Iiwib2JqIiwia2V5IiwidmFsdWUiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsImhhc093biIsImhhc093blByb3BlcnR5IiwiY2xhc3NOYW1lcyIsImNsYXNzZXMiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJhcmciLCJhcmdUeXBlIiwicHVzaCIsIkFycmF5IiwiaXNBcnJheSIsImlubmVyIiwiYXBwbHkiLCJqb2luIiwibW9kdWxlIiwiZXhwb3J0cyIsImRlZmF1bHQiLCJ3aW5kb3ciLCJfZnJlZUdsb2JhbCIsImdsb2JhbCIsImZyZWVTZWxmIiwic2VsZiIsIl9yb290IiwiZnJlZUdsb2JhbCIsIkZ1bmN0aW9uIiwiX1N5bWJvbCIsInJvb3QiLCJvYmplY3RQcm90byIsIm5hdGl2ZU9iamVjdFRvU3RyaW5nIiwidG9TdHJpbmciLCJzeW1Ub1N0cmluZ1RhZyIsInRvU3RyaW5nVGFnIiwidW5kZWZpbmVkIiwiX2dldFJhd1RhZyIsImlzT3duIiwidGFnIiwidW5tYXNrZWQiLCJyZXN1bHQiLCJfb2JqZWN0VG9TdHJpbmciLCJfYmFzZUdldFRhZyIsImdldFJhd1RhZyIsIm9iamVjdFRvU3RyaW5nIiwiaXNPYmplY3RfMSIsInR5cGUiLCJ1aWQiLCJpc0Z1bmN0aW9uXzEiLCJpc09iamVjdCIsImJhc2VHZXRUYWciLCJfY29yZUpzRGF0YSIsIm1hc2tTcmNLZXkiLCJleGVjIiwiY29yZUpzRGF0YSIsImtleXMiLCJJRV9QUk9UTyIsIl9pc01hc2tlZCIsImZ1bmMiLCJmdW5jVG9TdHJpbmciLCJfdG9Tb3VyY2UiLCJyZUlzSG9zdEN0b3IiLCJmdW5jUHJvdG8iLCJyZUlzTmF0aXZlIiwiUmVnRXhwIiwicmVwbGFjZSIsIl9iYXNlSXNOYXRpdmUiLCJpc01hc2tlZCIsImlzRnVuY3Rpb24iLCJ0ZXN0IiwidG9Tb3VyY2UiLCJfZ2V0VmFsdWUiLCJvYmplY3QiLCJfZ2V0TmF0aXZlIiwiZ2V0VmFsdWUiLCJiYXNlSXNOYXRpdmUiLCJfbmF0aXZlQ3JlYXRlIiwiZ2V0TmF0aXZlIiwiX2hhc2hDbGVhciIsInRoaXMiLCJfX2RhdGFfXyIsIm5hdGl2ZUNyZWF0ZSIsInNpemUiLCJfaGFzaERlbGV0ZSIsImhhcyIsIl9oYXNoR2V0IiwiZGF0YSIsIl9oYXNoSGFzIiwiX2hhc2hTZXQiLCJIYXNoIiwiZW50cmllcyIsImluZGV4IiwiY2xlYXIiLCJlbnRyeSIsInNldCIsImhhc2hDbGVhciIsImhhc2hEZWxldGUiLCJnZXQiLCJoYXNoR2V0IiwiaGFzaEhhcyIsImhhc2hTZXQiLCJfSGFzaCIsIl9saXN0Q2FjaGVDbGVhciIsImVxXzEiLCJvdGhlciIsIl9hc3NvY0luZGV4T2YiLCJhcnJheSIsImVxIiwic3BsaWNlIiwiX2xpc3RDYWNoZURlbGV0ZSIsImFzc29jSW5kZXhPZiIsInBvcCIsIl9saXN0Q2FjaGVHZXQiLCJfbGlzdENhY2hlSGFzIiwiX2xpc3RDYWNoZVNldCIsIkxpc3RDYWNoZSIsImxpc3RDYWNoZUNsZWFyIiwibGlzdENhY2hlRGVsZXRlIiwibGlzdENhY2hlR2V0IiwibGlzdENhY2hlSGFzIiwibGlzdENhY2hlU2V0IiwiX0xpc3RDYWNoZSIsIl9NYXAiLCJfbWFwQ2FjaGVDbGVhciIsImhhc2giLCJtYXAiLCJNYXAiLCJzdHJpbmciLCJfaXNLZXlhYmxlIiwiX2dldE1hcERhdGEiLCJpc0tleWFibGUiLCJfbWFwQ2FjaGVEZWxldGUiLCJnZXRNYXBEYXRhIiwiX21hcENhY2hlR2V0IiwiX21hcENhY2hlSGFzIiwiX21hcENhY2hlU2V0IiwiTWFwQ2FjaGUiLCJtYXBDYWNoZUNsZWFyIiwibWFwQ2FjaGVEZWxldGUiLCJtYXBDYWNoZUdldCIsIm1hcENhY2hlSGFzIiwibWFwQ2FjaGVTZXQiLCJfTWFwQ2FjaGUiLCJfc2V0Q2FjaGVBZGQiLCJfc2V0Q2FjaGVIYXMiLCJTZXRDYWNoZSIsInZhbHVlcyIsImFkZCIsInNldENhY2hlQWRkIiwic2V0Q2FjaGVIYXMiLCJfU2V0Q2FjaGUiLCJfYmFzZUZpbmRJbmRleCIsInByZWRpY2F0ZSIsImZyb21JbmRleCIsImZyb21SaWdodCIsIl9iYXNlSXNOYU4iLCJfc3RyaWN0SW5kZXhPZiIsIl9iYXNlSW5kZXhPZiIsInN0cmljdEluZGV4T2YiLCJiYXNlRmluZEluZGV4IiwiYmFzZUlzTmFOIiwiX2FycmF5SW5jbHVkZXMiLCJiYXNlSW5kZXhPZiIsIl9hcnJheUluY2x1ZGVzV2l0aCIsImNvbXBhcmF0b3IiLCJfYXJyYXlNYXAiLCJpdGVyYXRlZSIsIl9iYXNlVW5hcnkiLCJfY2FjaGVIYXMiLCJjYWNoZSIsIl9iYXNlRGlmZmVyZW5jZSIsImluY2x1ZGVzIiwiYXJyYXlJbmNsdWRlcyIsImlzQ29tbW9uIiwidmFsdWVzTGVuZ3RoIiwiYXJyYXlNYXAiLCJiYXNlVW5hcnkiLCJhcnJheUluY2x1ZGVzV2l0aCIsImNhY2hlSGFzIiwib3V0ZXIiLCJjb21wdXRlZCIsInZhbHVlc0luZGV4IiwiX2FycmF5UHVzaCIsIm9mZnNldCIsImlzT2JqZWN0TGlrZV8xIiwiX2Jhc2VJc0FyZ3VtZW50cyIsImlzT2JqZWN0TGlrZSIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwiaXNBcmd1bWVudHMiLCJiYXNlSXNBcmd1bWVudHMiLCJpc0FyZ3VtZW50c18xIiwiaXNBcnJheV8xIiwic3ByZWFkYWJsZVN5bWJvbCIsImlzQ29uY2F0U3ByZWFkYWJsZSIsIl9pc0ZsYXR0ZW5hYmxlIiwiX2Jhc2VGbGF0dGVuIiwiYmFzZUZsYXR0ZW4iLCJkZXB0aCIsImlzU3RyaWN0IiwiaXNGbGF0dGVuYWJsZSIsImFycmF5UHVzaCIsImlkZW50aXR5XzEiLCJfYXBwbHkiLCJ0aGlzQXJnIiwiYXJncyIsIm5hdGl2ZU1heCIsIk1hdGgiLCJtYXgiLCJfb3ZlclJlc3QiLCJzdGFydCIsInRyYW5zZm9ybSIsIm90aGVyQXJncyIsImNvbnN0YW50XzEiLCJfYmFzZVNldFRvU3RyaW5nIiwiY29uc3RhbnQiLCJpZGVudGl0eSIsIm5hdGl2ZU5vdyIsIkRhdGUiLCJub3ciLCJfc2hvcnRPdXQiLCJjb3VudCIsImxhc3RDYWxsZWQiLCJzdGFtcCIsInJlbWFpbmluZyIsIl9zZXRUb1N0cmluZyIsInNob3J0T3V0IiwiYmFzZVNldFRvU3RyaW5nIiwiaXNMZW5ndGhfMSIsImlzQXJyYXlMaWtlXzEiLCJpc0xlbmd0aCIsImlzQXJyYXlMaWtlT2JqZWN0XzEiLCJpc0FycmF5TGlrZSIsImxhc3RfMSIsImRpZmZlcmVuY2VXaXRoXzEiLCJzZXRUb1N0cmluZyIsIm92ZXJSZXN0IiwiYmFzZVJlc3QiLCJsYXN0IiwiaXNBcnJheUxpa2VPYmplY3QiLCJiYXNlRGlmZmVyZW5jZSIsIl9zdGFja0NsZWFyIiwiX3N0YWNrRGVsZXRlIiwiX3N0YWNrR2V0IiwiX3N0YWNrSGFzIiwiX3N0YWNrU2V0IiwicGFpcnMiLCJMQVJHRV9BUlJBWV9TSVpFIiwiU3RhY2siLCJzdGFja0NsZWFyIiwic3RhY2tEZWxldGUiLCJzdGFja0dldCIsInN0YWNrSGFzIiwic3RhY2tTZXQiLCJfU3RhY2siLCJfYXJyYXlTb21lIiwiX2VxdWFsQXJyYXlzIiwiYml0bWFzayIsImN1c3RvbWl6ZXIiLCJlcXVhbEZ1bmMiLCJzdGFjayIsImlzUGFydGlhbCIsImFyckxlbmd0aCIsIm90aExlbmd0aCIsImFyclN0YWNrZWQiLCJvdGhTdGFja2VkIiwic2VlbiIsImFyclZhbHVlIiwib3RoVmFsdWUiLCJjb21wYXJlZCIsImFycmF5U29tZSIsIm90aEluZGV4IiwiX1VpbnQ4QXJyYXkiLCJVaW50OEFycmF5IiwiX21hcFRvQXJyYXkiLCJmb3JFYWNoIiwiX3NldFRvQXJyYXkiLCJzeW1ib2xQcm90byIsInN5bWJvbFZhbHVlT2YiLCJ2YWx1ZU9mIiwiX2VxdWFsQnlUYWciLCJieXRlTGVuZ3RoIiwiYnl0ZU9mZnNldCIsImJ1ZmZlciIsIm5hbWUiLCJtZXNzYWdlIiwiY29udmVydCIsIm1hcFRvQXJyYXkiLCJzZXRUb0FycmF5Iiwic3RhY2tlZCIsImVxdWFsQXJyYXlzIiwiX2Jhc2VHZXRBbGxLZXlzIiwia2V5c0Z1bmMiLCJzeW1ib2xzRnVuYyIsIl9hcnJheUZpbHRlciIsInJlc0luZGV4Iiwic3R1YkFycmF5XzEiLCJuYXRpdmVHZXRTeW1ib2xzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiX2dldFN5bWJvbHMiLCJhcnJheUZpbHRlciIsInN5bWJvbCIsInN0dWJBcnJheSIsIl9iYXNlVGltZXMiLCJuIiwic3R1YkZhbHNlXzEiLCJmcmVlRXhwb3J0cyIsIm5vZGVUeXBlIiwiZnJlZU1vZHVsZSIsIkJ1ZmZlciIsImlzQnVmZmVyIiwic3R1YkZhbHNlIiwicmVJc1VpbnQiLCJfaXNJbmRleCIsInR5cGVkQXJyYXlUYWdzIiwiX2Jhc2VJc1R5cGVkQXJyYXkiLCJmcmVlUHJvY2VzcyIsInByb2Nlc3MiLCJub2RlVXRpbCIsInR5cGVzIiwicmVxdWlyZSIsImJpbmRpbmciLCJub2RlSXNUeXBlZEFycmF5IiwiaXNUeXBlZEFycmF5IiwiaXNUeXBlZEFycmF5XzEiLCJiYXNlSXNUeXBlZEFycmF5IiwiX2FycmF5TGlrZUtleXMiLCJpbmhlcml0ZWQiLCJpc0FyciIsImlzQXJnIiwiaXNCdWZmIiwiaXNUeXBlIiwic2tpcEluZGV4ZXMiLCJiYXNlVGltZXMiLCJpc0luZGV4IiwiX2lzUHJvdG90eXBlIiwiQ3RvciIsIl9vdmVyQXJnIiwiX25hdGl2ZUtleXMiLCJvdmVyQXJnIiwiX2Jhc2VLZXlzIiwiaXNQcm90b3R5cGUiLCJuYXRpdmVLZXlzIiwia2V5c18xIiwiYXJyYXlMaWtlS2V5cyIsImJhc2VLZXlzIiwiX2dldEFsbEtleXMiLCJiYXNlR2V0QWxsS2V5cyIsImdldFN5bWJvbHMiLCJfZXF1YWxPYmplY3RzIiwib2JqUHJvcHMiLCJnZXRBbGxLZXlzIiwib2JqTGVuZ3RoIiwib2JqU3RhY2tlZCIsInNraXBDdG9yIiwib2JqVmFsdWUiLCJvYmpDdG9yIiwib3RoQ3RvciIsIl9EYXRhVmlldyIsIl9Qcm9taXNlIiwiX1NldCIsIl9XZWFrTWFwIiwibWFwVGFnIiwicHJvbWlzZVRhZyIsInNldFRhZyIsIndlYWtNYXBUYWciLCJkYXRhVmlld1RhZyIsImRhdGFWaWV3Q3RvclN0cmluZyIsIkRhdGFWaWV3IiwibWFwQ3RvclN0cmluZyIsInByb21pc2VDdG9yU3RyaW5nIiwiUHJvbWlzZSIsInNldEN0b3JTdHJpbmciLCJTZXQiLCJ3ZWFrTWFwQ3RvclN0cmluZyIsIldlYWtNYXAiLCJnZXRUYWciLCJBcnJheUJ1ZmZlciIsInJlc29sdmUiLCJjdG9yU3RyaW5nIiwiX2dldFRhZyIsImFyZ3NUYWciLCJhcnJheVRhZyIsIm9iamVjdFRhZyIsIl9iYXNlSXNFcXVhbERlZXAiLCJvYmpJc0FyciIsIm90aElzQXJyIiwib2JqVGFnIiwib3RoVGFnIiwib2JqSXNPYmoiLCJvdGhJc09iaiIsImlzU2FtZVRhZyIsImVxdWFsQnlUYWciLCJvYmpJc1dyYXBwZWQiLCJvdGhJc1dyYXBwZWQiLCJvYmpVbndyYXBwZWQiLCJvdGhVbndyYXBwZWQiLCJlcXVhbE9iamVjdHMiLCJfYmFzZUlzRXF1YWwiLCJiYXNlSXNFcXVhbCIsImJhc2VJc0VxdWFsRGVlcCIsImlzRXF1YWxfMSIsImlzRW1wdHlfMSIsIl9hcnJheUVhY2giLCJfYmFzZUFzc2lnblZhbHVlIiwiX2Fzc2lnblZhbHVlIiwiYmFzZUFzc2lnblZhbHVlIiwiX2NvcHlPYmplY3QiLCJzb3VyY2UiLCJwcm9wcyIsImlzTmV3IiwibmV3VmFsdWUiLCJhc3NpZ25WYWx1ZSIsIl9iYXNlQXNzaWduIiwiY29weU9iamVjdCIsIl9uYXRpdmVLZXlzSW4iLCJfYmFzZUtleXNJbiIsIm5hdGl2ZUtleXNJbiIsImlzUHJvdG8iLCJrZXlzSW5fMSIsImJhc2VLZXlzSW4iLCJfYmFzZUFzc2lnbkluIiwia2V5c0luIiwiYWxsb2NVbnNhZmUiLCJpc0RlZXAiLCJzbGljZSIsImNvcHkiLCJfY29weUFycmF5IiwiX2NvcHlTeW1ib2xzIiwiX2dldFByb3RvdHlwZSIsImdldFByb3RvdHlwZU9mIiwiX2dldFN5bWJvbHNJbiIsImdldFByb3RvdHlwZSIsIl9jb3B5U3ltYm9sc0luIiwiZ2V0U3ltYm9sc0luIiwiX2dldEFsbEtleXNJbiIsIl9pbml0Q2xvbmVBcnJheSIsImlucHV0IiwiX2Nsb25lQXJyYXlCdWZmZXIiLCJhcnJheUJ1ZmZlciIsIl9jbG9uZURhdGFWaWV3IiwiZGF0YVZpZXciLCJjbG9uZUFycmF5QnVmZmVyIiwicmVGbGFncyIsIl9jbG9uZVJlZ0V4cCIsInJlZ2V4cCIsImxhc3RJbmRleCIsIl9jbG9uZVN5bWJvbCIsIl9jbG9uZVR5cGVkQXJyYXkiLCJ0eXBlZEFycmF5IiwiX2luaXRDbG9uZUJ5VGFnIiwiY2xvbmVEYXRhVmlldyIsImNsb25lVHlwZWRBcnJheSIsImNsb25lUmVnRXhwIiwiY2xvbmVTeW1ib2wiLCJvYmplY3RDcmVhdGUiLCJjcmVhdGUiLCJfYmFzZUNyZWF0ZSIsInByb3RvIiwiX2luaXRDbG9uZU9iamVjdCIsImJhc2VDcmVhdGUiLCJfYmFzZUlzTWFwIiwibm9kZUlzTWFwIiwiaXNNYXAiLCJpc01hcF8xIiwiYmFzZUlzTWFwIiwiX2Jhc2VJc1NldCIsIm5vZGVJc1NldCIsImlzU2V0IiwiaXNTZXRfMSIsImJhc2VJc1NldCIsImZ1bmNUYWciLCJjbG9uZWFibGVUYWdzIiwiX2Jhc2VDbG9uZSIsImJhc2VDbG9uZSIsImlzRmxhdCIsImlzRnVsbCIsImluaXRDbG9uZUFycmF5IiwiY29weUFycmF5IiwiaXNGdW5jIiwiY2xvbmVCdWZmZXIiLCJpbml0Q2xvbmVPYmplY3QiLCJjb3B5U3ltYm9sc0luIiwiYmFzZUFzc2lnbkluIiwiY29weVN5bWJvbHMiLCJiYXNlQXNzaWduIiwiaW5pdENsb25lQnlUYWciLCJzdWJWYWx1ZSIsImdldEFsbEtleXNJbiIsImFycmF5RWFjaCIsImlzU3ltYm9sXzEiLCJyZUlzRGVlcFByb3AiLCJyZUlzUGxhaW5Qcm9wIiwiX2lzS2V5IiwiaXNTeW1ib2wiLCJtZW1vaXplIiwicmVzb2x2ZXIiLCJtZW1vaXplZCIsIkNhY2hlIiwibWVtb2l6ZV8xIiwicmVQcm9wTmFtZSIsInJlRXNjYXBlQ2hhciIsIl9zdHJpbmdUb1BhdGgiLCJtZW1vaXplQ2FwcGVkIiwiY2hhckNvZGVBdCIsIm1hdGNoIiwibnVtYmVyIiwicXVvdGUiLCJzdWJTdHJpbmciLCJzeW1ib2xUb1N0cmluZyIsIl9iYXNlVG9TdHJpbmciLCJiYXNlVG9TdHJpbmciLCJ0b1N0cmluZ18xIiwiX2Nhc3RQYXRoIiwiaXNLZXkiLCJzdHJpbmdUb1BhdGgiLCJfdG9LZXkiLCJfYmFzZUdldCIsInBhdGgiLCJjYXN0UGF0aCIsInRvS2V5IiwiX2Jhc2VTbGljZSIsImVuZCIsIl9wYXJlbnQiLCJiYXNlR2V0IiwiYmFzZVNsaWNlIiwiX2Jhc2VVbnNldCIsInBhcmVudCIsIm9iamVjdEN0b3JTdHJpbmciLCJpc1BsYWluT2JqZWN0XzEiLCJfY3VzdG9tT21pdENsb25lIiwiaXNQbGFpbk9iamVjdCIsImZsYXR0ZW5fMSIsIm9taXRfMSIsImZsYXR0ZW4iLCJmbGF0UmVzdCIsInBhdGhzIiwiQ0xPTkVfREVFUF9GTEFHIiwiY3VzdG9tT21pdENsb25lIiwiYmFzZVVuc2V0IiwicmVSZWdFeHBDaGFyIiwicmVIYXNSZWdFeHBDaGFyIiwiZXNjYXBlUmVnRXhwXzEiLCJjbG9uZURlZXBfMSIsImdldExvY2FsYWRtaW4iLCJzdWdnZXN0aW9uIiwibG9jYWxhZG1pbiIsImFkZHJlc3MiLCJsYXN0SW5kZXhPZiIsInN1YnN0cmluZyIsImdldFN0b3BDb2RlIiwiaWQiLCJjb2RlIiwiaW5kZXhPZiIsImZvcm1hdEZhdm91cml0ZVBsYWNlTGFiZWwiLCJzcGxpdCIsImVzY2FwZVJlZ0V4cCIsInN0eWxlSW5qZWN0IiwiY3NzIiwicmVmIiwiaW5zZXJ0QXQiLCJkb2N1bWVudCIsImhlYWQiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsInN0eWxlIiwiY3JlYXRlRWxlbWVudCIsImZpcnN0Q2hpbGQiLCJpbnNlcnRCZWZvcmUiLCJhcHBlbmRDaGlsZCIsInN0eWxlU2hlZXQiLCJjc3NUZXh0IiwiY3JlYXRlVGV4dE5vZGUiLCJwbGFpbiIsImxheWVyIiwibGFiZWxJZCIsInNob3J0TmFtZSIsImd0ZnNJZCIsIm1vZGUiLCJ0b0xvd2VyQ2FzZSIsImxvbmdOYW1lIiwiYWdlbmN5IiwibGFiZWwiLCJpdGVtIiwiY2xvbmVEZWVwIiwiTW9kYWxDb250ZW50IiwiaGVhZGVyVGV4dCIsInJlbmRlckxpc3QiLCJSZWFjdCIsImNsYXNzTmFtZSIsInN0eWxlcyIsImVudiIsIk5PREVfRU5WIiwicHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwiaXNSZXF1aXJlZCIsInRyYW5zbGF0aW9ucyIsImRlIiwiY2FuY2VsIiwiZGVsZXRlIiwic2F2ZSIsImVuIiwidXAiLCJkb3duIiwiZmkiLCJwbCIsInN2IiwiaTE4bmV4dF9fZGVmYXVsdCIsImluaXQiLCJsbmciLCJmYWxsYmFja0xuZyIsImRlZmF1bHROUyIsImludGVycG9sYXRpb24iLCJlc2NhcGVWYWx1ZSIsImlzS2V5Ym9hcmRTZWxlY3Rpb25FdmVudCIsImV2ZW50Iiwid2hpY2giLCJrZXlDb2RlIiwiY29uY2F0IiwicHJldmVudERlZmF1bHQiLCJGYXZvdXJpdGVFZGl0aW5nTW9kYWwiLCJDb21wb25lbnQiLCJzdXBlciIsImRpcmVjdGlvbiIsImZhdm91cml0ZXMiLCJzdGF0ZSIsImZhdm91cml0ZXNDb3B5IiwidG1wIiwic2V0U3RhdGUiLCJmYXZvdXJpdGUiLCJpY29uSWQiLCJzZWxlY3RlZEljb25JZCIsImN4IiwiZmF2b3VyaXRlSWQiLCJpMThuZXh0Iiwib25DbGljayIsIm1vdmVGYXZvdXJpdGUiLCJJY29uIiwiaW1nIiwiY29sb3IiLCJyb2xlIiwidGFiSW5kZXgiLCJvbkVkaXRTZWxlY3RlZCIsIm9uS2V5RG93biIsInNlbGVjdGVkRmF2b3VyaXRlIiwic2hvd0RlbGV0ZVBsYWNlTW9kYWwiLCJpc0xvYWRpbmciLCJDb250YWluZXJTcGlubmVyIiwidmlzaWJsZSIsIlJlYWN0U29ydGFibGUiLCJsaXN0Iiwic2V0TGlzdCIsIml0ZW1zIiwiYW5pbWF0aW9uIiwiaGFuZGxlIiwicmVuZGVyRmF2b3VyaXRlTGlzdEl0ZW0iLCJEaWFsb2dNb2RhbCIsImFwcEVsZW1lbnQiLCJoYW5kbGVDbG9zZSIsImlzTW9kYWxPcGVuIiwiZGlhbG9nQ29udGVudCIsInByaW1hcnlCdXR0b25UZXh0IiwicHJpbWFyeUJ1dHRvbk9uQ2xpY2siLCJkZWxldGVGYXZvdXJpdGUiLCJzZWNvbmRhcnlCdXR0b25UZXh0Iiwic2Vjb25kYXJ5QnV0dG9uT25DbGljayIsImhvdmVyQ29sb3IiLCJmb250V2VpZ2h0cyIsImxhbmciLCJvbWl0dGVkRmF2b3VyaXRlcyIsIm9taXQiLCJpc0VxdWFsIiwidXBkYXRlRmF2b3VyaXRlcyIsIm1vZGFsUHJvcHMiLCJyZW5kZXJGYXZvdXJpdGVMaXN0IiwibWVkaXVtIiwiY2hhbmdlTGFuZ3VhZ2UiLCJhZGRSZXNvdXJjZUJ1bmRsZSIsImdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyIsIm5leHRQcm9wcyIsInByZXZTdGF0ZSIsIm5leHRGYXZvdXJpdGVzIiwicHJldkZhdm91cml0ZXMiLCJpc0VtcHR5IiwiZGlmZmVyZW5jZVdpdGgiLCJjb21wb25lbnREaWRVcGRhdGUiLCJsYW5ndWFnZSIsInJlbmRlciIsImlzTW9iaWxlIiwiTW9kYWwiLCJjb250ZW50TGFiZWwiLCJjbG9zZUJ1dHRvbkxhYmVsIiwidmFyaWFudCIsImlzT3BlbiIsIm9uQ3Jvc3NDbGljayIsImNsb3NlTW9kYWwiLCJyZW5kZXJEZWxldGVGYXZvdXJpdGVNb2RhbCIsInJlbmRlck1vZGFsQ29udGVudCIsImFycmF5T2YiLCJzaGFwZSIsImdpZCIsImxhdCIsImxvbiIsImJvb2wiXSwibWFwcGluZ3MiOiJnZ0NBQWUsU0FBU0EsRUFBUUMsR0FHOUIsT0FBT0QsRUFBVSxtQkFBcUJFLFFBQVUsaUJBQW1CQSxPQUFPQyxTQUFXLFNBQVVGLEdBQzdGLGNBQWNBLENBQ2YsRUFBRyxTQUFVQSxHQUNaLE9BQU9BLEdBQUssbUJBQXFCQyxRQUFVRCxFQUFFRyxjQUFnQkYsUUFBVUQsSUFBTUMsT0FBT0csVUFBWSxnQkFBa0JKLENBQ3RILEVBQUtELEVBQVFDLEVBQ2IsQ0NOZSxTQUFTSyxFQUFjQyxHQUNwQyxJQUFJQyxFQ0ZTLFNBQXFCRCxFQUFHRSxHQUNyQyxHQUFJLFVBQVlULEVBQVFPLEtBQU9BLEVBQUcsT0FBT0EsRUFDekMsSUFBSUcsRUFBSUgsRUFBRUwsT0FBT1MsYUFDakIsUUFBSSxJQUFXRCxFQUFHLENBQ2hCLElBQUlGLEVBQUlFLEVBQUVFLEtBQUtMLEVBQUdFLEdBQUssV0FDdkIsR0FBSSxVQUFZVCxFQUFRUSxHQUFJLE9BQU9BLEVBQ25DLE1BQU0sSUFBSUssVUFBVSwrQ0FDckIsQ0FDRCxPQUFRLFdBQWFKLEVBQUlLLE9BQVNDLFFBQVFSLEVBQzVDLENEUFVJLENBQVlKLEVBQUcsVUFDdkIsTUFBTyxV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
|
|
7
|
+
!function(){var t={}.hasOwnProperty;function r(){for(var e="",t=0;t<arguments.length;t++){var r=arguments[t];r&&(e=n(e,i(r)))}return e}function i(e){if("string"==typeof e||"number"==typeof e)return e;if("object"!=typeof e)return"";if(Array.isArray(e))return r.apply(null,e);if(e.toString!==Object.prototype.toString&&!e.toString.toString().includes("[native code]"))return e.toString();var i="";for(var a in e)t.call(e,a)&&e[a]&&(i=n(i,a));return i}function n(e,t){return t?e?e+" "+t:e+t:e}e.exports?(r.default=r,e.exports=r):window.classNames=r}()})),w="object"==typeof global&&global&&global.Object===Object&&global,x="object"==typeof self&&self&&self.Object===Object&&self,S=w||x||Function("return this")(),M=S.Symbol,O=Object.prototype,E=O.hasOwnProperty,F=O.toString,N=M?M.toStringTag:void 0;var A=function(e){var t=E.call(e,N),r=e[N];try{e[N]=void 0;var i=!0}catch(e){}var n=F.call(e);return i&&(t?e[N]=r:delete e[N]),n},P=Object.prototype.toString;var V=function(e){return P.call(e)},I=M?M.toStringTag:void 0;var k=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":I&&I in Object(e)?A(e):V(e)};var C=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)};var z,D=function(e){if(!C(e))return!1;var t=k(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t},Z=S["__core-js_shared__"],L=(z=/[^.]+$/.exec(Z&&Z.keys&&Z.keys.IE_PROTO||""))?"Symbol(src)_1."+z:"";var T=function(e){return!!L&&L in e},R=Function.prototype.toString;var H=function(e){if(null!=e){try{return R.call(e)}catch(e){}try{return e+""}catch(e){}}return""},J=/^\[object .+?Constructor\]$/,B=Function.prototype,q=Object.prototype,U=B.toString,$=q.hasOwnProperty,Q=RegExp("^"+U.call($).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");var G=function(e){return!(!C(e)||T(e))&&(D(e)?Q:J).test(H(e))};var W=function(e,t){return null==e?void 0:e[t]};var K=function(e,t){var r=W(e,t);return G(r)?r:void 0},Y=K(Object,"create");var X=function(){this.__data__=Y?Y(null):{},this.size=0};var ee=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t},te=Object.prototype.hasOwnProperty;var re=function(e){var t=this.__data__;if(Y){var r=t[e];return"__lodash_hash_undefined__"===r?void 0:r}return te.call(t,e)?t[e]:void 0},ie=Object.prototype.hasOwnProperty;var ne=function(e){var t=this.__data__;return Y?void 0!==t[e]:ie.call(t,e)};var ae=function(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=Y&&void 0===t?"__lodash_hash_undefined__":t,this};function oe(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t<r;){var i=e[t];this.set(i[0],i[1])}}oe.prototype.clear=X,oe.prototype.delete=ee,oe.prototype.get=re,oe.prototype.has=ne,oe.prototype.set=ae;var se=oe;var le=function(){this.__data__=[],this.size=0};var ue=function(e,t){return e===t||e!=e&&t!=t};var ce=function(e,t){for(var r=e.length;r--;)if(ue(e[r][0],t))return r;return-1},de=Array.prototype.splice;var fe=function(e){var t=this.__data__,r=ce(t,e);return!(r<0)&&(r==t.length-1?t.pop():de.call(t,r,1),--this.size,!0)};var ve=function(e){var t=this.__data__,r=ce(t,e);return r<0?void 0:t[r][1]};var _e=function(e){return ce(this.__data__,e)>-1};var pe=function(e,t){var r=this.__data__,i=ce(r,e);return i<0?(++this.size,r.push([e,t])):r[i][1]=t,this};function he(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t<r;){var i=e[t];this.set(i[0],i[1])}}he.prototype.clear=le,he.prototype.delete=fe,he.prototype.get=ve,he.prototype.has=_e,he.prototype.set=pe;var ye=he,me=K(S,"Map");var be=function(){this.size=0,this.__data__={hash:new se,map:new(me||ye),string:new se}};var ge=function(e){var t=typeof e;return"string"==t||"number"==t||"symbol"==t||"boolean"==t?"__proto__"!==e:null===e};var je=function(e,t){var r=e.__data__;return ge(t)?r["string"==typeof t?"string":"hash"]:r.map};var we=function(e){var t=je(this,e).delete(e);return this.size-=t?1:0,t};var xe=function(e){return je(this,e).get(e)};var Se=function(e){return je(this,e).has(e)};var Me=function(e,t){var r=je(this,e),i=r.size;return r.set(e,t),this.size+=r.size==i?0:1,this};function Oe(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t<r;){var i=e[t];this.set(i[0],i[1])}}Oe.prototype.clear=be,Oe.prototype.delete=we,Oe.prototype.get=xe,Oe.prototype.has=Se,Oe.prototype.set=Me;var Ee=Oe;var Fe=function(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this};var Ne=function(e){return this.__data__.has(e)};function Ae(e){var t=-1,r=null==e?0:e.length;for(this.__data__=new Ee;++t<r;)this.add(e[t])}Ae.prototype.add=Ae.prototype.push=Fe,Ae.prototype.has=Ne;var Pe=Ae;var Ve=function(e,t,r,i){for(var n=e.length,a=r+(i?1:-1);i?a--:++a<n;)if(t(e[a],a,e))return a;return-1};var Ie=function(e){return e!=e};var ke=function(e,t,r){for(var i=r-1,n=e.length;++i<n;)if(e[i]===t)return i;return-1};var Ce=function(e,t,r){return t==t?ke(e,t,r):Ve(e,Ie,r)};var ze=function(e,t){return!!(null==e?0:e.length)&&Ce(e,t,0)>-1};var De=function(e,t,r){for(var i=-1,n=null==e?0:e.length;++i<n;)if(r(t,e[i]))return!0;return!1};var Ze=function(e,t){for(var r=-1,i=null==e?0:e.length,n=Array(i);++r<i;)n[r]=t(e[r],r,e);return n};var Le=function(e){return function(t){return e(t)}};var Te=function(e,t){return e.has(t)};var Re=function(e,t,r,i){var n=-1,a=ze,o=!0,s=e.length,l=[],u=t.length;if(!s)return l;r&&(t=Ze(t,Le(r))),i?(a=De,o=!1):t.length>=200&&(a=Te,o=!1,t=new Pe(t));e:for(;++n<s;){var c=e[n],d=null==r?c:r(c);if(c=i||0!==c?c:0,o&&d==d){for(var f=u;f--;)if(t[f]===d)continue e;l.push(c)}else a(t,d,i)||l.push(c)}return l};var He=function(e,t){for(var r=-1,i=t.length,n=e.length;++r<i;)e[n+r]=t[r];return e};var Je=function(e){return null!=e&&"object"==typeof e};var Be=function(e){return Je(e)&&"[object Arguments]"==k(e)},qe=Object.prototype,Ue=qe.hasOwnProperty,$e=qe.propertyIsEnumerable,Qe=Be(function(){return arguments}())?Be:function(e){return Je(e)&&Ue.call(e,"callee")&&!$e.call(e,"callee")},Ge=Qe,We=Array.isArray,Ke=M?M.isConcatSpreadable:void 0;var Ye=function(e){return We(e)||Ge(e)||!!(Ke&&e&&e[Ke])};var Xe=function e(t,r,i,n,a){var o=-1,s=t.length;for(i||(i=Ye),a||(a=[]);++o<s;){var l=t[o];r>0&&i(l)?r>1?e(l,r-1,i,n,a):He(a,l):n||(a[a.length]=l)}return a};var et=function(e){return e};var tt=function(e,t,r){switch(r.length){case 0:return e.call(t);case 1:return e.call(t,r[0]);case 2:return e.call(t,r[0],r[1]);case 3:return e.call(t,r[0],r[1],r[2])}return e.apply(t,r)},rt=Math.max;var it=function(e,t,r){return t=rt(void 0===t?e.length-1:t,0),function(){for(var i=arguments,n=-1,a=rt(i.length-t,0),o=Array(a);++n<a;)o[n]=i[t+n];n=-1;for(var s=Array(t+1);++n<t;)s[n]=i[n];return s[t]=r(o),tt(e,this,s)}};var nt=function(e){return function(){return e}},at=function(){try{var e=K(Object,"defineProperty");return e({},"",{}),e}catch(e){}}(),ot=at?function(e,t){return at(e,"toString",{configurable:!0,enumerable:!1,value:nt(t),writable:!0})}:et,st=Date.now;var lt=function(e){var t=0,r=0;return function(){var i=st(),n=16-(i-r);if(r=i,n>0){if(++t>=800)return arguments[0]}else t=0;return e.apply(void 0,arguments)}},ut=lt(ot);var ct=function(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991};var dt=function(e){return null!=e&&ct(e.length)&&!D(e)};var ft=function(e){return Je(e)&&dt(e)};var vt=function(e){var t=null==e?0:e.length;return t?e[t-1]:void 0},_t=function(e,t){return ut(it(e,t,et),e+"")}((function(e,t){var r=vt(t);return ft(r)&&(r=void 0),ft(e)?Re(e,Xe(t,1,ft,!0),void 0,r):[]}));var pt=function(){this.__data__=new ye,this.size=0};var ht=function(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r};var yt=function(e){return this.__data__.get(e)};var mt=function(e){return this.__data__.has(e)};var bt=function(e,t){var r=this.__data__;if(r instanceof ye){var i=r.__data__;if(!me||i.length<199)return i.push([e,t]),this.size=++r.size,this;r=this.__data__=new Ee(i)}return r.set(e,t),this.size=r.size,this};function gt(e){var t=this.__data__=new ye(e);this.size=t.size}gt.prototype.clear=pt,gt.prototype.delete=ht,gt.prototype.get=yt,gt.prototype.has=mt,gt.prototype.set=bt;var jt=gt;var wt=function(e,t){for(var r=-1,i=null==e?0:e.length;++r<i;)if(t(e[r],r,e))return!0;return!1};var xt=function(e,t,r,i,n,a){var o=1&r,s=e.length,l=t.length;if(s!=l&&!(o&&l>s))return!1;var u=a.get(e),c=a.get(t);if(u&&c)return u==t&&c==e;var d=-1,f=!0,v=2&r?new Pe:void 0;for(a.set(e,t),a.set(t,e);++d<s;){var _=e[d],p=t[d];if(i)var h=o?i(p,_,d,t,e,a):i(_,p,d,e,t,a);if(void 0!==h){if(h)continue;f=!1;break}if(v){if(!wt(t,(function(e,t){if(!Te(v,t)&&(_===e||n(_,e,r,i,a)))return v.push(t)}))){f=!1;break}}else if(_!==p&&!n(_,p,r,i,a)){f=!1;break}}return a.delete(e),a.delete(t),f},St=S.Uint8Array;var Mt=function(e){var t=-1,r=Array(e.size);return e.forEach((function(e,i){r[++t]=[i,e]})),r};var Ot=function(e){var t=-1,r=Array(e.size);return e.forEach((function(e){r[++t]=e})),r},Et=M?M.prototype:void 0,Ft=Et?Et.valueOf:void 0;var Nt=function(e,t,r,i,n,a,o){switch(r){case"[object DataView]":if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case"[object ArrayBuffer]":return!(e.byteLength!=t.byteLength||!a(new St(e),new St(t)));case"[object Boolean]":case"[object Date]":case"[object Number]":return ue(+e,+t);case"[object Error]":return e.name==t.name&&e.message==t.message;case"[object RegExp]":case"[object String]":return e==t+"";case"[object Map]":var s=Mt;case"[object Set]":var l=1&i;if(s||(s=Ot),e.size!=t.size&&!l)return!1;var u=o.get(e);if(u)return u==t;i|=2,o.set(e,t);var c=xt(s(e),s(t),i,n,a,o);return o.delete(e),c;case"[object Symbol]":if(Ft)return Ft.call(e)==Ft.call(t)}return!1};var At=function(e,t,r){var i=t(e);return We(e)?i:He(i,r(e))};var Pt=function(e,t){for(var r=-1,i=null==e?0:e.length,n=0,a=[];++r<i;){var o=e[r];t(o,r,e)&&(a[n++]=o)}return a};var Vt=function(){return[]},It=Object.prototype.propertyIsEnumerable,kt=Object.getOwnPropertySymbols,Ct=kt?function(e){return null==e?[]:(e=Object(e),Pt(kt(e),(function(t){return It.call(e,t)})))}:Vt;var zt=function(e,t){for(var r=-1,i=Array(e);++r<e;)i[r]=t(r);return i};var Dt=function(){return!1},Zt=g((function(e,t){var r=t&&!t.nodeType&&t,i=r&&e&&!e.nodeType&&e,n=i&&i.exports===r?S.Buffer:void 0,a=(n?n.isBuffer:void 0)||Dt;e.exports=a})),Lt=/^(?:0|[1-9]\d*)$/;var Tt=function(e,t){var r=typeof e;return!!(t=null==t?9007199254740991:t)&&("number"==r||"symbol"!=r&&Lt.test(e))&&e>-1&&e%1==0&&e<t},Rt={};Rt["[object Float32Array]"]=Rt["[object Float64Array]"]=Rt["[object Int8Array]"]=Rt["[object Int16Array]"]=Rt["[object Int32Array]"]=Rt["[object Uint8Array]"]=Rt["[object Uint8ClampedArray]"]=Rt["[object Uint16Array]"]=Rt["[object Uint32Array]"]=!0,Rt["[object Arguments]"]=Rt["[object Array]"]=Rt["[object ArrayBuffer]"]=Rt["[object Boolean]"]=Rt["[object DataView]"]=Rt["[object Date]"]=Rt["[object Error]"]=Rt["[object Function]"]=Rt["[object Map]"]=Rt["[object Number]"]=Rt["[object Object]"]=Rt["[object RegExp]"]=Rt["[object Set]"]=Rt["[object String]"]=Rt["[object WeakMap]"]=!1;var Ht=function(e){return Je(e)&&ct(e.length)&&!!Rt[k(e)]},Jt=g((function(e,t){var r=t&&!t.nodeType&&t,i=r&&e&&!e.nodeType&&e,n=i&&i.exports===r&&w.process,a=function(){try{var e=i&&i.require&&i.require("util").types;return e||n&&n.binding&&n.binding("util")}catch(e){}}();e.exports=a})),Bt=Jt&&Jt.isTypedArray,qt=Bt?Le(Bt):Ht,Ut=Object.prototype.hasOwnProperty;var $t=function(e,t){var r=We(e),i=!r&&Ge(e),n=!r&&!i&&Zt(e),a=!r&&!i&&!n&&qt(e),o=r||i||n||a,s=o?zt(e.length,String):[],l=s.length;for(var u in e)!t&&!Ut.call(e,u)||o&&("length"==u||n&&("offset"==u||"parent"==u)||a&&("buffer"==u||"byteLength"==u||"byteOffset"==u)||Tt(u,l))||s.push(u);return s},Qt=Object.prototype;var Gt=function(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||Qt)};var Wt=function(e,t){return function(r){return e(t(r))}},Kt=Wt(Object.keys,Object),Yt=Object.prototype.hasOwnProperty;var Xt=function(e){if(!Gt(e))return Kt(e);var t=[];for(var r in Object(e))Yt.call(e,r)&&"constructor"!=r&&t.push(r);return t};var er=function(e){return dt(e)?$t(e):Xt(e)};var tr=function(e){return At(e,er,Ct)},rr=Object.prototype.hasOwnProperty;var ir=function(e,t,r,i,n,a){var o=1&r,s=tr(e),l=s.length;if(l!=tr(t).length&&!o)return!1;for(var u=l;u--;){var c=s[u];if(!(o?c in t:rr.call(t,c)))return!1}var d=a.get(e),f=a.get(t);if(d&&f)return d==t&&f==e;var v=!0;a.set(e,t),a.set(t,e);for(var _=o;++u<l;){var p=e[c=s[u]],h=t[c];if(i)var y=o?i(h,p,c,t,e,a):i(p,h,c,e,t,a);if(!(void 0===y?p===h||n(p,h,r,i,a):y)){v=!1;break}_||(_="constructor"==c)}if(v&&!_){var m=e.constructor,b=t.constructor;m==b||!("constructor"in e)||!("constructor"in t)||"function"==typeof m&&m instanceof m&&"function"==typeof b&&b instanceof b||(v=!1)}return a.delete(e),a.delete(t),v},nr=K(S,"DataView"),ar=K(S,"Promise"),or=K(S,"Set"),sr=K(S,"WeakMap"),lr="[object Map]",ur="[object Promise]",cr="[object Set]",dr="[object WeakMap]",fr="[object DataView]",vr=H(nr),_r=H(me),pr=H(ar),hr=H(or),yr=H(sr),mr=k;(nr&&mr(new nr(new ArrayBuffer(1)))!=fr||me&&mr(new me)!=lr||ar&&mr(ar.resolve())!=ur||or&&mr(new or)!=cr||sr&&mr(new sr)!=dr)&&(mr=function(e){var t=k(e),r="[object Object]"==t?e.constructor:void 0,i=r?H(r):"";if(i)switch(i){case vr:return fr;case _r:return lr;case pr:return ur;case hr:return cr;case yr:return dr}return t});var br=mr,gr="[object Arguments]",jr="[object Array]",wr="[object Object]",xr=Object.prototype.hasOwnProperty;var Sr=function(e,t,r,i,n,a){var o=We(e),s=We(t),l=o?jr:br(e),u=s?jr:br(t),c=(l=l==gr?wr:l)==wr,d=(u=u==gr?wr:u)==wr,f=l==u;if(f&&Zt(e)){if(!Zt(t))return!1;o=!0,c=!1}if(f&&!c)return a||(a=new jt),o||qt(e)?xt(e,t,r,i,n,a):Nt(e,t,l,r,i,n,a);if(!(1&r)){var v=c&&xr.call(e,"__wrapped__"),_=d&&xr.call(t,"__wrapped__");if(v||_){var p=v?e.value():e,h=_?t.value():t;return a||(a=new jt),n(p,h,r,i,a)}}return!!f&&(a||(a=new jt),ir(e,t,r,i,n,a))};var Mr=function e(t,r,i,n,a){return t===r||(null==t||null==r||!Je(t)&&!Je(r)?t!=t&&r!=r:Sr(t,r,i,n,e,a))};var Or=function(e,t){return Mr(e,t)},Er=Object.prototype.hasOwnProperty;var Fr=function(e){if(null==e)return!0;if(dt(e)&&(We(e)||"string"==typeof e||"function"==typeof e.splice||Zt(e)||qt(e)||Ge(e)))return!e.length;var t=br(e);if("[object Map]"==t||"[object Set]"==t)return!e.size;if(Gt(e))return!Xt(e).length;for(var r in e)if(Er.call(e,r))return!1;return!0};var Nr=function(e,t){for(var r=-1,i=null==e?0:e.length;++r<i&&!1!==t(e[r],r,e););return e};var Ar=function(e,t,r){"__proto__"==t&&at?at(e,t,{configurable:!0,enumerable:!0,value:r,writable:!0}):e[t]=r},Pr=Object.prototype.hasOwnProperty;var Vr=function(e,t,r){var i=e[t];Pr.call(e,t)&&ue(i,r)&&(void 0!==r||t in e)||Ar(e,t,r)};var Ir=function(e,t,r,i){var n=!r;r||(r={});for(var a=-1,o=t.length;++a<o;){var s=t[a],l=i?i(r[s],e[s],s,r,e):void 0;void 0===l&&(l=e[s]),n?Ar(r,s,l):Vr(r,s,l)}return r};var kr=function(e,t){return e&&Ir(t,er(t),e)};var Cr=function(e){var t=[];if(null!=e)for(var r in Object(e))t.push(r);return t},zr=Object.prototype.hasOwnProperty;var Dr=function(e){if(!C(e))return Cr(e);var t=Gt(e),r=[];for(var i in e)("constructor"!=i||!t&&zr.call(e,i))&&r.push(i);return r};var Zr=function(e){return dt(e)?$t(e,!0):Dr(e)};var Lr=function(e,t){return e&&Ir(t,Zr(t),e)},Tr=g((function(e,t){var r=t&&!t.nodeType&&t,i=r&&e&&!e.nodeType&&e,n=i&&i.exports===r?S.Buffer:void 0,a=n?n.allocUnsafe:void 0;e.exports=function(e,t){if(t)return e.slice();var r=e.length,i=a?a(r):new e.constructor(r);return e.copy(i),i}}));var Rr=function(e,t){var r=-1,i=e.length;for(t||(t=Array(i));++r<i;)t[r]=e[r];return t};var Hr=function(e,t){return Ir(e,Ct(e),t)},Jr=Wt(Object.getPrototypeOf,Object),Br=Object.getOwnPropertySymbols?function(e){for(var t=[];e;)He(t,Ct(e)),e=Jr(e);return t}:Vt;var qr=function(e,t){return Ir(e,Br(e),t)};var Ur=function(e){return At(e,Zr,Br)},$r=Object.prototype.hasOwnProperty;var Qr=function(e){var t=e.length,r=new e.constructor(t);return t&&"string"==typeof e[0]&&$r.call(e,"index")&&(r.index=e.index,r.input=e.input),r};var Gr=function(e){var t=new e.constructor(e.byteLength);return new St(t).set(new St(e)),t};var Wr=function(e,t){var r=t?Gr(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.byteLength)},Kr=/\w*$/;var Yr=function(e){var t=new e.constructor(e.source,Kr.exec(e));return t.lastIndex=e.lastIndex,t},Xr=M?M.prototype:void 0,ei=Xr?Xr.valueOf:void 0;var ti=function(e){return ei?Object(ei.call(e)):{}};var ri=function(e,t){var r=t?Gr(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.length)};var ii=function(e,t,r){var i=e.constructor;switch(t){case"[object ArrayBuffer]":return Gr(e);case"[object Boolean]":case"[object Date]":return new i(+e);case"[object DataView]":return Wr(e,r);case"[object Float32Array]":case"[object Float64Array]":case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":case"[object Uint16Array]":case"[object Uint32Array]":return ri(e,r);case"[object Map]":case"[object Set]":return new i;case"[object Number]":case"[object String]":return new i(e);case"[object RegExp]":return Yr(e);case"[object Symbol]":return ti(e)}},ni=Object.create,ai=function(){function e(){}return function(t){if(!C(t))return{};if(ni)return ni(t);e.prototype=t;var r=new e;return e.prototype=void 0,r}}();var oi=function(e){return"function"!=typeof e.constructor||Gt(e)?{}:ai(Jr(e))};var si=function(e){return Je(e)&&"[object Map]"==br(e)},li=Jt&&Jt.isMap,ui=li?Le(li):si;var ci=function(e){return Je(e)&&"[object Set]"==br(e)},di=Jt&&Jt.isSet,fi=di?Le(di):ci,vi="[object Arguments]",_i="[object Function]",pi="[object Object]",hi={};hi[vi]=hi["[object Array]"]=hi["[object ArrayBuffer]"]=hi["[object DataView]"]=hi["[object Boolean]"]=hi["[object Date]"]=hi["[object Float32Array]"]=hi["[object Float64Array]"]=hi["[object Int8Array]"]=hi["[object Int16Array]"]=hi["[object Int32Array]"]=hi["[object Map]"]=hi["[object Number]"]=hi[pi]=hi["[object RegExp]"]=hi["[object Set]"]=hi["[object String]"]=hi["[object Symbol]"]=hi["[object Uint8Array]"]=hi["[object Uint8ClampedArray]"]=hi["[object Uint16Array]"]=hi["[object Uint32Array]"]=!0,hi["[object Error]"]=hi[_i]=hi["[object WeakMap]"]=!1;var yi=function e(t,r,i,n,a,o){var s,l=1&r,u=2&r,c=4&r;if(i&&(s=a?i(t,n,a,o):i(t)),void 0!==s)return s;if(!C(t))return t;var d=We(t);if(d){if(s=Qr(t),!l)return Rr(t,s)}else{var f=br(t),v=f==_i||"[object GeneratorFunction]"==f;if(Zt(t))return Tr(t,l);if(f==pi||f==vi||v&&!a){if(s=u||v?{}:oi(t),!l)return u?qr(t,Lr(s,t)):Hr(t,kr(s,t))}else{if(!hi[f])return a?t:{};s=ii(t,f,l)}}o||(o=new jt);var _=o.get(t);if(_)return _;o.set(t,s),fi(t)?t.forEach((function(n){s.add(e(n,r,i,n,t,o))})):ui(t)&&t.forEach((function(n,a){s.set(a,e(n,r,i,a,t,o))}));var p=d?void 0:(c?u?Ur:tr:u?Zr:er)(t);return Nr(p||t,(function(n,a){p&&(n=t[a=n]),Vr(s,a,e(n,r,i,a,t,o))})),s};var mi=function(e){return"symbol"==typeof e||Je(e)&&"[object Symbol]"==k(e)},bi=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,gi=/^\w*$/;var ji=function(e,t){if(We(e))return!1;var r=typeof e;return!("number"!=r&&"symbol"!=r&&"boolean"!=r&&null!=e&&!mi(e))||(gi.test(e)||!bi.test(e)||null!=t&&e in Object(t))};function wi(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new TypeError("Expected a function");var r=function(){var i=arguments,n=t?t.apply(this,i):i[0],a=r.cache;if(a.has(n))return a.get(n);var o=e.apply(this,i);return r.cache=a.set(n,o)||a,o};return r.cache=new(wi.Cache||Ee),r}wi.Cache=Ee;var xi=wi;var Si=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Mi=/\\(\\)?/g,Oi=function(e){var t=xi(e,(function(e){return 500===r.size&&r.clear(),e})),r=t.cache;return t}((function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(""),e.replace(Si,(function(e,r,i,n){t.push(i?n.replace(Mi,"$1"):r||e)})),t})),Ei=M?M.prototype:void 0,Fi=Ei?Ei.toString:void 0;var Ni=function e(t){if("string"==typeof t)return t;if(We(t))return Ze(t,e)+"";if(mi(t))return Fi?Fi.call(t):"";var r=t+"";return"0"==r&&1/t==-1/0?"-0":r};var Ai=function(e){return null==e?"":Ni(e)};var Pi=function(e,t){return We(e)?e:ji(e,t)?[e]:Oi(Ai(e))};var Vi=function(e){if("string"==typeof e||mi(e))return e;var t=e+"";return"0"==t&&1/e==-1/0?"-0":t};var Ii=function(e,t){for(var r=0,i=(t=Pi(t,e)).length;null!=e&&r<i;)e=e[Vi(t[r++])];return r&&r==i?e:void 0};var ki=function(e,t,r){var i=-1,n=e.length;t<0&&(t=-t>n?0:n+t),(r=r>n?n:r)<0&&(r+=n),n=t>r?0:r-t>>>0,t>>>=0;for(var a=Array(n);++i<n;)a[i]=e[i+t];return a};var Ci=function(e,t){return t.length<2?e:Ii(e,ki(t,0,-1))};var zi=function(e,t){return t=Pi(t,e),null==(e=Ci(e,t))||delete e[Vi(vt(t))]},Di=Function.prototype,Zi=Object.prototype,Li=Di.toString,Ti=Zi.hasOwnProperty,Ri=Li.call(Object);var Hi=function(e){if(!Je(e)||"[object Object]"!=k(e))return!1;var t=Jr(e);if(null===t)return!0;var r=Ti.call(t,"constructor")&&t.constructor;return"function"==typeof r&&r instanceof r&&Li.call(r)==Ri};var Ji=function(e){return Hi(e)?void 0:e};var Bi=function(e){return(null==e?0:e.length)?Xe(e,1):[]};var qi=function(e){return ut(it(e,void 0,Bi),e+"")}((function(e,t){var r={};if(null==e)return r;var i=!1;t=Ze(t,(function(t){return t=Pi(t,e),i||(i=t.length>1),t})),Ir(e,Ur(e),r),i&&(r=yi(r,7,Ji));for(var n=t.length;n--;)zi(r,t[n]);return r}));or&&Ot(new or([,-0]))[1];var Ui=/[\\^$.*+?()[\]{}|]/g,$i=RegExp(Ui.source);var Qi=function(e){return(e=Ai(e))&&$i.test(e)?e.replace(Ui,"\\$&"):e};var Gi=function(e){return yi(e,5)};const Wi=e=>e.localadmin||e.localadmin||e.address&&e.address.lastIndexOf(",")<e.address.length-2&&e.address.substring(e.address.lastIndexOf(",")+2)||"",Ki=({id:e,code:t})=>t||(void 0!==e&&void 0!==e.indexOf&&-1!==e.indexOf("#")?e.substring(e.indexOf("#")+1):void 0),Yi=(e,t)=>[e||t&&t.split(",")[0],"string"==typeof t?t.replace(new RegExp(`${Qi(e)}([ ,]|$)+`),""):""];function Xi(e,t){void 0===t&&(t={});var r=t.insertAt;if(e&&"undefined"!=typeof document){var i=document.head||document.getElementsByTagName("head")[0],n=document.createElement("style");n.type="text/css","top"===r&&i.firstChild?i.insertBefore(n,i.firstChild):i.appendChild(n),n.styleSheet?n.styleSheet.cssText=e:n.appendChild(document.createTextNode(e))}}xi(((e,t=!1)=>{switch(e.layer){case"currentPosition":return[e.labelId,e.address];case"selectFromMap":case"ownLocations":case"back":return[e.labelId];case"favouritePlace":return Yi(e.name,e.address);case"favouriteVehicleRentalStation":case"bikestation":return[e.name];case"favouriteRoute":case"route-BUS":case"route-TRAM":case"route-RAIL":case"route-SUBWAY":case"route-FERRY":case"route-FUNICULAR":case"route-AIRPLANE":return!t&&e.shortName?[e.gtfsId,e.mode.toLowerCase(),e.longName]:[e.shortName,e.longName,e.agency?e.agency.name:void 0];case"venue":case"address":case"street":return[e.name,e.label.replace(new RegExp(`${Qi(e.name)}(,)?( )?`),"")];case"favouriteStop":case"stop":return t?[e.name||e.label||e.address&&e.address.split(",")[0],Wi(e)]:[e.name,e.id,Ki(e),Wi(e)];default:return[e.name||e.label||e.address&&e.address.split(",")[0],Wi(e)]}}),((e,t)=>{const r=Gi(e);return r.plain=t,r}));var en="modal-content_favourite-edit-modal-content-container__dGK6D",tn="modal-content_favourite-edit-modal-content-top__Luuv-",rn="modal-content_favourite-edit-modal-content-header__2oSv9";Xi(".modal-content_favourite-edit-modal-content-container__dGK6D {\n display: flex;\n flex-direction: column; }\n .modal-content_favourite-edit-modal-content-container__dGK6D .modal-content_favourite-edit-modal-content-top__Luuv- {\n display: flex;\n flex-direction: row;\n width: 100%;\n border-bottom: 1px solid #ddd;\n margin-bottom: 31px; }\n @media screen and (min-width: 768px) {\n .modal-content_favourite-edit-modal-content-container__dGK6D .modal-content_favourite-edit-modal-content-top__Luuv- {\n border-bottom: none;\n margin-bottom: 0; } }\n .modal-content_favourite-edit-modal-content-container__dGK6D .modal-content_favourite-edit-modal-content-top__Luuv- .modal-content_favourite-edit-modal-content-header__2oSv9 {\n display: flex;\n justify-content: center;\n align-items: center;\n width: 100%;\n height: inherit;\n font-size: 18px;\n font-weight: var(--font-weight-medium);\n line-height: normal;\n letter-spacing: -0.6px;\n color: #333;\n margin-bottom: 34px; }\n @media screen and (min-width: 768px) {\n .modal-content_favourite-edit-modal-content-container__dGK6D .modal-content_favourite-edit-modal-content-top__Luuv- .modal-content_favourite-edit-modal-content-header__2oSv9 {\n justify-content: start;\n align-items: center;\n margin-bottom: 26px;\n line-height: 1.33; } }\n");const nn=({headerText:e,renderList:t})=>d.default.createElement("div",{className:en},d.default.createElement("div",{className:tn},d.default.createElement("div",{className:rn},e)),t());"production"!==process.env.NODE_ENV&&(nn.propTypes={headerText:c.default.string.isRequired,renderList:c.default.func.isRequired});var an={"favourite-edit-list-container":"styles_favourite-edit-list-container__SM5ZN","favourite-edit-list":"styles_favourite-edit-list__VJIsM","favourite-edit-list-item":"styles_favourite-edit-list-item__VHc3F","favourite-edit-list-item-left":"styles_favourite-edit-list-item-left__iPstx","favourite-edit-list-arrow-hidden":"styles_favourite-edit-list-arrow-hidden__Of1nE","favourite-edit-list-item-drag":"styles_favourite-edit-list-item-drag__puT4i","favourite-edit-list-item-ellipsis":"styles_favourite-edit-list-item-ellipsis__ChHu0","favourite-edit-list-item-icon":"styles_favourite-edit-list-item-icon__QN7uQ",place:"styles_place__bY4jg",home:"styles_home__P1rvA",school:"styles_school__exJZw",sport:"styles_sport__rEyiE",shopping:"styles_shopping__hGZRe",work:"styles_work__PM6aB","favourite-edit-list-item-content":"styles_favourite-edit-list-item-content__qcbys","favourite-edit-list-item-name":"styles_favourite-edit-list-item-name__8HtQs","favourite-edit-list-item-address":"styles_favourite-edit-list-item-address__VxW9P","favourite-edit-list-item-right":"styles_favourite-edit-list-item-right__5dGkh","favourite-edit-list-item-edit":"styles_favourite-edit-list-item-edit__D-KxF","favourite-edit-list-item-remove":"styles_favourite-edit-list-item-remove__Ifpcz"};Xi(".styles_favourite-edit-list-container__SM5ZN {\n display: flex;\n position: relative;\n width: 100%; }\n @media screen and (min-width: 768px) {\n .styles_favourite-edit-list-container__SM5ZN {\n min-height: 286px; } }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM {\n display: flex;\n flex-direction: column;\n width: 100%;\n margin: 0;\n padding: 0;\n box-sizing: border-box; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F:not(:first-child) {\n margin-top: 9px; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F {\n display: flex;\n flex-direction: row;\n align-items: center;\n background: white;\n margin: 0;\n padding: 0;\n width: 100%;\n min-height: 50px;\n border-radius: 5px;\n border: solid 1px #d9d9d9;\n list-style: none;\n box-sizing: border-box; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-left__iPstx {\n display: flex;\n min-width: 69px;\n height: 100%;\n align-items: center; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-left__iPstx .styles_favourite-edit-list-arrow-hidden__Of1nE {\n z-index: -999;\n opacity: 0;\n width: 0;\n padding: 0;\n border: 0; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-left__iPstx .styles_favourite-edit-list-arrow-hidden__Of1nE:focus {\n font-weight: bold;\n z-index: 10;\n opacity: 1; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-left__iPstx .styles_favourite-edit-list-item-drag__puT4i {\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: 37px;\n height: 100%;\n cursor: move; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-left__iPstx .styles_favourite-edit-list-item-drag__puT4i .styles_favourite-edit-list-item-ellipsis__ChHu0 {\n height: 20px; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-left__iPstx .styles_favourite-edit-list-item-drag__puT4i .styles_favourite-edit-list-item-ellipsis__ChHu0 svg {\n fill: #888;\n height: 20px;\n transform: rotate(90deg); }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-left__iPstx .styles_favourite-edit-list-item-icon__QN7uQ {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n min-width: 24px; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-left__iPstx .styles_favourite-edit-list-item-icon__QN7uQ svg {\n position: relative;\n left: -3px;\n top: -1px;\n fill: var(--color);\n width: 22px;\n height: 22px; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-left__iPstx .styles_favourite-edit-list-item-icon__QN7uQ.styles_place__bY4jg svg {\n fill: var(--color);\n width: 24px;\n height: 24px; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-left__iPstx .styles_favourite-edit-list-item-icon__QN7uQ.styles_home__P1rvA svg, .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-left__iPstx .styles_favourite-edit-list-item-icon__QN7uQ.styles_school__exJZw svg, .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-left__iPstx .styles_favourite-edit-list-item-icon__QN7uQ.styles_sport__rEyiE svg, .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-left__iPstx .styles_favourite-edit-list-item-icon__QN7uQ.styles_shopping__hGZRe svg {\n fill: var(--color);\n width: 18px;\n height: 18px; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-left__iPstx .styles_favourite-edit-list-item-icon__QN7uQ.styles_work__PM6aB svg {\n fill: var(--color);\n width: 20px;\n height: 20px; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-content__qcbys {\n display: flex;\n flex-direction: column;\n width: calc(100% - 69px - 86px); }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-content__qcbys .styles_favourite-edit-list-item-name__8HtQs {\n margin: 0;\n font-weight: var(--font-weight-medium);\n color: #333;\n font-size: 15px;\n line-height: 1;\n letter-spacing: -0.6px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-content__qcbys .styles_favourite-edit-list-item-address__VxW9P {\n margin: 3px 0 0;\n color: #666;\n font-size: 12px;\n font-weight: 400;\n line-height: 1;\n letter-spacing: -0.48px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-content__qcbys .styles_favourite-edit-list-item-address__VxW9P:empty {\n margin-top: 0; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-right__5dGkh {\n display: flex;\n min-width: 86px;\n align-items: center;\n justify-content: space-evenly; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-right__5dGkh .styles_favourite-edit-list-item-edit__D-KxF {\n display: flex;\n justify-content: center;\n align-items: center;\n width: 22px;\n height: 48px;\n cursor: pointer; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-right__5dGkh .styles_favourite-edit-list-item-edit__D-KxF svg {\n fill: #888;\n width: 22px;\n height: 22px; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-right__5dGkh .styles_favourite-edit-list-item-remove__Ifpcz {\n display: flex;\n justify-content: center;\n align-items: center;\n cursor: pointer;\n width: 18px;\n height: 48px; }\n .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-right__5dGkh .styles_favourite-edit-list-item-remove__Ifpcz svg {\n fill: #888;\n width: 18px;\n height: 20px; }\n .styles_favourite-edit-list-container__SM5ZN > div {\n width: 100%; }\n");const on={de:{cancel:"Abbrechen",delete:"Löschen","delete-place-header":"Wollen Sie den Favoriten löschen?","delete-place-name":"Lösche Favorit: {{favourite.name}}","edit-places":"Bearbeite Favoriten","edit-place-name":"Bearbeite Favorit: {{favourite.name}}","edit-modal-on-open":"Favoriten bearbeiten.","choose-icon":"Wähle das Symbol für diesen Ort","close-modal":"Schließe den Dialog","input-placeholder":"Wählen Sie einen Name für diesen Ort (optional)",save:"Speichern","save-place":"Favorit speichern"},en:{cancel:"Cancel",delete:"Delete","delete-place-header":"Do you want to delete the place?","delete-place-name":"Delete place: {{favourite.name}}","edit-places":"Edit places","edit-place-name":"Edit place: {{favourite.name}}","edit-modal-on-open":"Favourite editing modal.","choose-icon":"Select the place's icon","close-modal":"Close the modal","input-placeholder":"Give the name a place (optional)",save:"Save","save-place":"Save place",up:"Move favourite up",down:"Move favourite down"},fi:{cancel:"Peruuta",delete:"Poista","delete-place-header":"Haluatko poistaa paikan?","delete-place-name":"Poista paikka: {{favourite.name}}","edit-places":"Muokkaa paikkoja","edit-place-name":"Muokkaa paikkaa: {{favourite.name}}","edit-modal-on-open":"Suosikkien muokkaus modaali.","choose-icon":"Valitse paikan kuvake","close-modal":"Sulje modaali","input-placeholder":"Anna paikalle nimi (vapaaehtoinen)",save:"Tallenna","save-place":"Tallenna paikka",up:"Siirrä suosikkisijaintia ylöpäin",down:"Siirrä suosikkisijaintia alaspäin"},pl:{cancel:"Anuluj",delete:"Usuń","delete-place-header":"Czy na pewno chcesz usunąć to miejsce?","delete-place-name":"Usuń miejsce: {{favourite.name}}","edit-places":"Edytuj miejsca","edit-place-name":"Edytuj miejsce: {{favourite.name}}","edit-modal-on-open":"Modal edycji ulubionych.","choose-icon":"Wybierz ikonę miejsca","close-modal":"Zamknij modal","input-placeholder":"Nadaj nazwę miejscu (opcjonalne)",save:"Zapisz","save-place":"Zapisz miejsce",up:"Przenieś ulubione wyżej",down:"Przenieś ulubione niżej"},sv:{cancel:"Avbryt",delete:"Ta bort","delete-place-header":"Vill du ta bort platsen?","delete-place-name":"Ta bort platsen: {{favourite.name}}","edit-places":"Redigera platser","edit-place-name":"Edit place: {{favourite.name}}","edit-modal-on-open":"Favourite editing modal.","choose-icon":"Välj platsens ikon","close-modal":"Stäng modalen","input-placeholder":"Ange platsens namn (frivilligt)",save:"Spara","save-place":"Spara plats",up:"Flytta favoriten uppåt",down:"Flytta favoriten nedåt"}};f.default.init({lng:"fi",fallbackLng:"fi",defaultNS:"translation",interpolation:{escapeValue:!1}});const sn=e=>{const t=e&&(e.key||e.which||e.keyCode)||"";return!(!t||![13," ","Spacebar"].concat([32,"Enter"]).includes(t))&&(e.preventDefault(),!0)};class ln extends d.default.Component{constructor(e){super(e),b(this,"moveFavourite",((e,t)=>{const{favourites:r}=this.state,i=[...r],n=i[e+t];i[e+t]=i[e],i[e]=n,this.setState({favourites:i})})),b(this,"renderFavouriteListItem",((e,t)=>{const r=e.selectedIconId?e.selectedIconId.replace("icon-icon_",""):"place",[i,n]=Yi(e.name,e.address);return d.default.createElement("li",{className:j(an["favourite-edit-list-item"]),key:e.favouriteId},d.default.createElement("div",{className:an["favourite-edit-list-item-left"]},t>0&&d.default.createElement("button",{className:an["favourite-edit-list-arrow-hidden"],type:"button","aria-label":f.default.t("up"),onClick:()=>{this.moveFavourite(t,-1)}},"↑"),t<this.state.favourites.length-1&&d.default.createElement("button",{className:an["favourite-edit-list-arrow-hidden"],type:"button","aria-label":f.default.t("down"),onClick:()=>{this.moveFavourite(t,1)}},"↓"),d.default.createElement("div",{className:an["favourite-edit-list-item-drag"]},d.default.createElement("div",{className:an["favourite-edit-list-item-ellipsis"]},d.default.createElement(p.default,{img:"ellipsis"}))),d.default.createElement("div",{className:j(an["favourite-edit-list-item-icon"],an[r])},d.default.createElement(p.default,{img:r,color:this.props.color}))),d.default.createElement("div",{className:an["favourite-edit-list-item-content"]},d.default.createElement("p",{className:an["favourite-edit-list-item-name"]},i),d.default.createElement("p",{className:an["favourite-edit-list-item-address"]},n)),d.default.createElement("div",{className:an["favourite-edit-list-item-right"]},d.default.createElement("div",{role:"button",tabIndex:"0","aria-label":f.default.t("edit-place-name",{favourite:e}),className:an["favourite-edit-list-item-edit"],onClick:()=>this.props.onEditSelected(e),onKeyDown:t=>{sn(t)&&this.props.onEditSelected(e)}},d.default.createElement(p.default,{img:"edit"})),d.default.createElement("div",{role:"button",tabIndex:"0","aria-label":f.default.t("delete-place-name",{favourite:e}),className:an["favourite-edit-list-item-remove"],onClick:()=>this.setState({selectedFavourite:e,showDeletePlaceModal:!0}),onKeyDown:t=>{sn(t)&&this.setState({selectedFavourite:e,showDeletePlaceModal:!0})}},d.default.createElement(p.default,{img:"trash"}))))})),b(this,"renderFavouriteList",(()=>{const{isLoading:e}=this.props,{favourites:t}=this.state;return d.default.createElement("div",{className:an["favourite-edit-list-container"]},d.default.createElement(v.default,{visible:e},d.default.createElement(i.ReactSortable,{className:an["favourite-edit-list"],tag:"ul",list:t,setList:e=>this.setState({favourites:e}),animation:200,handle:`.${an["favourite-edit-list-item-left"]}`},t.map(((e,t)=>this.renderFavouriteListItem(e,t))))))})),b(this,"renderDeleteFavouriteModal",(e=>d.default.createElement(h.default,{appElement:this.props.appElement,headerText:f.default.t("delete-place-header"),handleClose:()=>this.setState({selectedFavourite:null,showDeletePlaceModal:!1},(()=>this.props.handleClose())),isModalOpen:this.state.showDeletePlaceModal,dialogContent:e?`${e.name}: ${e.address}`:"",primaryButtonText:f.default.t("delete"),primaryButtonOnClick:()=>{this.props.deleteFavourite(e),this.setState({selectedFavourite:null,showDeletePlaceModal:!1})},secondaryButtonText:f.default.t("cancel"),secondaryButtonOnClick:()=>this.setState({selectedFavourite:null,showDeletePlaceModal:!1}),color:this.props.color,hoverColor:this.props.hoverColor,fontWeights:this.props.fontWeights,lang:this.props.lang}))),b(this,"closeModal",(()=>{this.props.handleClose();const e=this.state.favourites.map((e=>qi(e,["chosen","selected"])));Or(e,this.props.favourites)||this.props.updateFavourites(e)})),b(this,"renderModalContent",(()=>{const{color:e,hoverColor:t,fontWeights:r}=this.props,i={headerText:f.default.t("edit-places"),renderList:()=>this.renderFavouriteList()};return d.default.createElement("div",{style:{"--color":`${e}`,"--hover-color":`${t}`,"--font-weight-medium":r.medium}},d.default.createElement(nn,i))})),f.default.changeLanguage(e.lang),this.state={favourites:e.favourites,showDeletePlaceModal:!1,selectedFavourite:null},Object.keys(on).forEach((e=>{f.default.addResourceBundle(e,"translation",on[e])}))}static getDerivedStateFromProps(e,t){const r=e.favourites,i=t.favourites;return Fr(_t(r,i,Or))&&Fr(_t(i,r,Or))?null:(Fr(r)&&e.handleClose(),{favourites:r})}componentDidUpdate(){f.default.language!==this.props.lang&&f.default.changeLanguage(this.props.lang)}render(){const{isMobile:e}=this.props,{showDeletePlaceModal:t,selectedFavourite:r}=this.state;return d.default.createElement("div",null,e&&d.default.createElement(_.default,{appElement:this.props.appElement,contentLabel:f.default.t("edit-modal-on-open"),closeButtonLabel:f.default.t("close-modal"),variant:"large",isOpen:this.props.isModalOpen,onCrossClick:this.closeModal},this.renderDeleteFavouriteModal(r),this.renderModalContent()),!e&&d.default.createElement(_.default,{appElement:this.props.appElement,contentLabel:f.default.t("edit-modal-on-open"),closeButtonLabel:f.default.t("close-modal"),variant:"small",isOpen:this.props.isModalOpen,onCrossClick:this.closeModal},this.renderDeleteFavouriteModal(r),!t&&this.renderModalContent()))}}b(ln,"defaultProps",{lang:"fi",isMobile:!1,color:"#007ac9",hoverColor:"#0062a1",fontWeights:{medium:500}}),"production"!==process.env.NODE_ENV&&(ln.propTypes={handleClose:c.default.func.isRequired,updateFavourites:c.default.func.isRequired,deleteFavourite:c.default.func.isRequired,onEditSelected:c.default.func.isRequired,favourites:c.default.arrayOf(c.default.shape({type:c.default.string,address:c.default.string,gtfsId:c.default.string,gid:c.default.string,lat:c.default.number,lon:c.default.number,name:c.default.string,selectedIconId:c.default.string,favouriteId:c.default.string,layer:c.default.string})).isRequired,lang:c.default.string,appElement:c.default.string.isRequired,isModalOpen:c.default.bool.isRequired,isMobile:c.default.bool,isLoading:c.default.bool.isRequired,color:c.default.string,hoverColor:c.default.string,fontWeights:c.default.shape({medium:c.default.number})}),e.default=ln,Object.defineProperty(e,"__esModule",{value:!0})}));
|
|
8
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZGV2ZWxvcG1lbnQuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Qcm9wZXJ0eUtleS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b1ByaW1pdGl2ZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZnJlZUdsb2JhbC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3Jvb3QuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19TeW1ib2wuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRSYXdUYWcuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19vYmplY3RUb1N0cmluZy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VHZXRUYWcuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzT2JqZWN0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0Z1bmN0aW9uLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNNYXNrZWQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3JlSnNEYXRhLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fdG9Tb3VyY2UuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNOYXRpdmUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRWYWx1ZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldE5hdGl2ZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25hdGl2ZUNyZWF0ZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hDbGVhci5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hEZWxldGUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoR2V0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaEhhcy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hTZXQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19IYXNoLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlQ2xlYXIuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2VxLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNzb2NJbmRleE9mLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlRGVsZXRlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlR2V0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlSGFzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlU2V0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fTGlzdENhY2hlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fTWFwLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVDbGVhci5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzS2V5YWJsZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldE1hcERhdGEuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZURlbGV0ZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlR2V0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVIYXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZVNldC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX01hcENhY2hlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0Q2FjaGVBZGQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRDYWNoZUhhcy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1NldENhY2hlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUZpbmRJbmRleC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc05hTi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0cmljdEluZGV4T2YuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSW5kZXhPZi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5SW5jbHVkZXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheUluY2x1ZGVzV2l0aC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5TWFwLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVVuYXJ5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2FjaGVIYXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlRGlmZmVyZW5jZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5UHVzaC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNPYmplY3RMaWtlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzQXJndW1lbnRzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FyZ3VtZW50cy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcnJheS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzRmxhdHRlbmFibGUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlRmxhdHRlbi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaWRlbnRpdHkuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcHBseS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX292ZXJSZXN0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9jb25zdGFudC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2RlZmluZVByb3BlcnR5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVNldFRvU3RyaW5nLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2hvcnRPdXQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRUb1N0cmluZy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNMZW5ndGguanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJyYXlMaWtlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5TGlrZU9iamVjdC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvbGFzdC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZGlmZmVyZW5jZVdpdGguanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlUmVzdC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrQ2xlYXIuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0RlbGV0ZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrR2V0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tIYXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja1NldC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1N0YWNrLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlTb21lLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZXF1YWxBcnJheXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19VaW50OEFycmF5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwVG9BcnJheS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3NldFRvQXJyYXkuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19lcXVhbEJ5VGFnLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUdldEFsbEtleXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheUZpbHRlci5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvc3R1YkFycmF5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0U3ltYm9scy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VUaW1lcy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvc3R1YkZhbHNlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0J1ZmZlci5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzSW5kZXguanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNUeXBlZEFycmF5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbm9kZVV0aWwuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzVHlwZWRBcnJheS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5TGlrZUtleXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc1Byb3RvdHlwZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX292ZXJBcmcuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19uYXRpdmVLZXlzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUtleXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2tleXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRBbGxLZXlzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZXF1YWxPYmplY3RzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fRGF0YVZpZXcuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19Qcm9taXNlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU2V0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fV2Vha01hcC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFRhZy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc0VxdWFsRGVlcC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc0VxdWFsLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0VxdWFsLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0VtcHR5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlFYWNoLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUFzc2lnblZhbHVlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNzaWduVmFsdWUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5T2JqZWN0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUFzc2lnbi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25hdGl2ZUtleXNJbi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VLZXlzSW4uanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2tleXNJbi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VBc3NpZ25Jbi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nsb25lQnVmZmVyLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29weUFycmF5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29weVN5bWJvbHMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRQcm90b3R5cGUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRTeW1ib2xzSW4uanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5U3ltYm9sc0luLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0QWxsS2V5c0luLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faW5pdENsb25lQXJyYXkuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jbG9uZUFycmF5QnVmZmVyLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVEYXRhVmlldy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nsb25lUmVnRXhwLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVTeW1ib2wuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jbG9uZVR5cGVkQXJyYXkuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pbml0Q2xvbmVCeVRhZy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VDcmVhdGUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pbml0Q2xvbmVPYmplY3QuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNNYXAuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzTWFwLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzU2V0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1NldC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VDbG9uZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNTeW1ib2wuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0tleS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvbWVtb2l6ZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21lbW9pemVDYXBwZWQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdHJpbmdUb1BhdGguanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVG9TdHJpbmcuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL3RvU3RyaW5nLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2FzdFBhdGguanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL190b0tleS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VHZXQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlU2xpY2UuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19wYXJlbnQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVW5zZXQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzUGxhaW5PYmplY3QuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jdXN0b21PbWl0Q2xvbmUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2ZsYXR0ZW4uanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19mbGF0UmVzdC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvb21pdC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NyZWF0ZVNldC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZXNjYXBlUmVnRXhwLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9jbG9uZURlZXAuanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC11bmlxLWJ5LWxhYmVsL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWluamVjdC9kaXN0L3N0eWxlLWluamVjdC5lcy5qcyIsIi4uL3NyYy9oZWxwZXJzL01vZGFsQ29udGVudC5qcyIsIi4uL3NyYy9oZWxwZXJzL3RyYW5zbGF0aW9ucy5qcyIsIi4uL3NyYy9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBfdHlwZW9mKG8pIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gdHlwZW9mIG87XG4gIH0gOiBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvO1xuICB9LCBfdHlwZW9mKG8pO1xufVxuZXhwb3J0IHsgX3R5cGVvZiBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IF90eXBlb2YgZnJvbSBcIi4vdHlwZW9mLmpzXCI7XG5pbXBvcnQgdG9QcmltaXRpdmUgZnJvbSBcIi4vdG9QcmltaXRpdmUuanNcIjtcbmZ1bmN0aW9uIHRvUHJvcGVydHlLZXkodCkge1xuICB2YXIgaSA9IHRvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpO1xuICByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiO1xufVxuZXhwb3J0IHsgdG9Qcm9wZXJ0eUtleSBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IF90eXBlb2YgZnJvbSBcIi4vdHlwZW9mLmpzXCI7XG5mdW5jdGlvbiB0b1ByaW1pdGl2ZSh0LCByKSB7XG4gIGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0O1xuICB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTtcbiAgaWYgKHZvaWQgMCAhPT0gZSkge1xuICAgIHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpO1xuICAgIGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTtcbiAgfVxuICByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpO1xufVxuZXhwb3J0IHsgdG9QcmltaXRpdmUgYXMgZGVmYXVsdCB9OyIsImltcG9ydCB0b1Byb3BlcnR5S2V5IGZyb20gXCIuL3RvUHJvcGVydHlLZXkuanNcIjtcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7XG4gIHJldHVybiAociA9IHRvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwge1xuICAgIHZhbHVlOiB0LFxuICAgIGVudW1lcmFibGU6ICEwLFxuICAgIGNvbmZpZ3VyYWJsZTogITAsXG4gICAgd3JpdGFibGU6ICEwXG4gIH0pIDogZVtyXSA9IHQsIGU7XG59XG5leHBvcnQgeyBfZGVmaW5lUHJvcGVydHkgYXMgZGVmYXVsdCB9OyIsIi8qIVxuXHRDb3B5cmlnaHQgKGMpIDIwMTggSmVkIFdhdHNvbi5cblx0TGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlIChNSVQpLCBzZWVcblx0aHR0cDovL2plZHdhdHNvbi5naXRodWIuaW8vY2xhc3NuYW1lc1xuKi9cbi8qIGdsb2JhbCBkZWZpbmUgKi9cblxuKGZ1bmN0aW9uICgpIHtcblx0J3VzZSBzdHJpY3QnO1xuXG5cdHZhciBoYXNPd24gPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxuXHRmdW5jdGlvbiBjbGFzc05hbWVzICgpIHtcblx0XHR2YXIgY2xhc3NlcyA9ICcnO1xuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBhcmcgPSBhcmd1bWVudHNbaV07XG5cdFx0XHRpZiAoYXJnKSB7XG5cdFx0XHRcdGNsYXNzZXMgPSBhcHBlbmRDbGFzcyhjbGFzc2VzLCBwYXJzZVZhbHVlKGFyZykpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBjbGFzc2VzO1xuXHR9XG5cblx0ZnVuY3Rpb24gcGFyc2VWYWx1ZSAoYXJnKSB7XG5cdFx0aWYgKHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBhcmcgPT09ICdudW1iZXInKSB7XG5cdFx0XHRyZXR1cm4gYXJnO1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2YgYXJnICE9PSAnb2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuICcnO1xuXHRcdH1cblxuXHRcdGlmIChBcnJheS5pc0FycmF5KGFyZykpIHtcblx0XHRcdHJldHVybiBjbGFzc05hbWVzLmFwcGx5KG51bGwsIGFyZyk7XG5cdFx0fVxuXG5cdFx0aWYgKGFyZy50b1N0cmluZyAhPT0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyAmJiAhYXJnLnRvU3RyaW5nLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ1tuYXRpdmUgY29kZV0nKSkge1xuXHRcdFx0cmV0dXJuIGFyZy50b1N0cmluZygpO1xuXHRcdH1cblxuXHRcdHZhciBjbGFzc2VzID0gJyc7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gYXJnKSB7XG5cdFx0XHRpZiAoaGFzT3duLmNhbGwoYXJnLCBrZXkpICYmIGFyZ1trZXldKSB7XG5cdFx0XHRcdGNsYXNzZXMgPSBhcHBlbmRDbGFzcyhjbGFzc2VzLCBrZXkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBjbGFzc2VzO1xuXHR9XG5cblx0ZnVuY3Rpb24gYXBwZW5kQ2xhc3MgKHZhbHVlLCBuZXdDbGFzcykge1xuXHRcdGlmICghbmV3Q2xhc3MpIHtcblx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9XG5cdFxuXHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0cmV0dXJuIHZhbHVlICsgJyAnICsgbmV3Q2xhc3M7XG5cdFx0fVxuXHRcblx0XHRyZXR1cm4gdmFsdWUgKyBuZXdDbGFzcztcblx0fVxuXG5cdGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuXHRcdGNsYXNzTmFtZXMuZGVmYXVsdCA9IGNsYXNzTmFtZXM7XG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBjbGFzc05hbWVzO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGRlZmluZS5hbWQgPT09ICdvYmplY3QnICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyByZWdpc3RlciBhcyAnY2xhc3NuYW1lcycsIGNvbnNpc3RlbnQgd2l0aCBucG0gcGFja2FnZSBuYW1lXG5cdFx0ZGVmaW5lKCdjbGFzc25hbWVzJywgW10sIGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiBjbGFzc05hbWVzO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHdpbmRvdy5jbGFzc05hbWVzID0gY2xhc3NOYW1lcztcblx0fVxufSgpKTtcbiIsIi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZ2xvYmFsYCBmcm9tIE5vZGUuanMuICovXG52YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsICYmIGdsb2JhbC5PYmplY3QgPT09IE9iamVjdCAmJiBnbG9iYWw7XG5cbm1vZHVsZS5leHBvcnRzID0gZnJlZUdsb2JhbDtcbiIsInZhciBmcmVlR2xvYmFsID0gcmVxdWlyZSgnLi9fZnJlZUdsb2JhbCcpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHNlbGZgLiAqL1xudmFyIGZyZWVTZWxmID0gdHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZiAmJiBzZWxmLk9iamVjdCA9PT0gT2JqZWN0ICYmIHNlbGY7XG5cbi8qKiBVc2VkIGFzIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgb2JqZWN0LiAqL1xudmFyIHJvb3QgPSBmcmVlR2xvYmFsIHx8IGZyZWVTZWxmIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gcm9vdDtcbiIsInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBTeW1ib2wgPSByb290LlN5bWJvbDtcblxubW9kdWxlLmV4cG9ydHMgPSBTeW1ib2w7XG4iLCJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVXNlZCB0byByZXNvbHZlIHRoZVxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gKiBvZiB2YWx1ZXMuXG4gKi9cbnZhciBuYXRpdmVPYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1Ub1N0cmluZ1RhZyA9IFN5bWJvbCA/IFN5bWJvbC50b1N0cmluZ1RhZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VHZXRUYWdgIHdoaWNoIGlnbm9yZXMgYFN5bWJvbC50b1N0cmluZ1RhZ2AgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHJhdyBgdG9TdHJpbmdUYWdgLlxuICovXG5mdW5jdGlvbiBnZXRSYXdUYWcodmFsdWUpIHtcbiAgdmFyIGlzT3duID0gaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgc3ltVG9TdHJpbmdUYWcpLFxuICAgICAgdGFnID0gdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuXG4gIHRyeSB7XG4gICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdW5kZWZpbmVkO1xuICAgIHZhciB1bm1hc2tlZCA9IHRydWU7XG4gIH0gY2F0Y2ggKGUpIHt9XG5cbiAgdmFyIHJlc3VsdCA9IG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xuICBpZiAodW5tYXNrZWQpIHtcbiAgICBpZiAoaXNPd24pIHtcbiAgICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHRhZztcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRSYXdUYWc7XG4iLCIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIHVzaW5nIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIG9iamVjdFRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvYmplY3RUb1N0cmluZztcbiIsInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKSxcbiAgICBnZXRSYXdUYWcgPSByZXF1aXJlKCcuL19nZXRSYXdUYWcnKSxcbiAgICBvYmplY3RUb1N0cmluZyA9IHJlcXVpcmUoJy4vX29iamVjdFRvU3RyaW5nJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBudWxsVGFnID0gJ1tvYmplY3QgTnVsbF0nLFxuICAgIHVuZGVmaW5lZFRhZyA9ICdbb2JqZWN0IFVuZGVmaW5lZF0nO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1Ub1N0cmluZ1RhZyA9IFN5bWJvbCA/IFN5bWJvbC50b1N0cmluZ1RhZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2V0VGFnYCB3aXRob3V0IGZhbGxiYWNrcyBmb3IgYnVnZ3kgZW52aXJvbm1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGJhc2VHZXRUYWcodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZFRhZyA6IG51bGxUYWc7XG4gIH1cbiAgcmV0dXJuIChzeW1Ub1N0cmluZ1RhZyAmJiBzeW1Ub1N0cmluZ1RhZyBpbiBPYmplY3QodmFsdWUpKVxuICAgID8gZ2V0UmF3VGFnKHZhbHVlKVxuICAgIDogb2JqZWN0VG9TdHJpbmcodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VHZXRUYWc7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHRoZVxuICogW2xhbmd1YWdlIHR5cGVdKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1lY21hc2NyaXB0LWxhbmd1YWdlLXR5cGVzKVxuICogb2YgYE9iamVjdGAuIChlLmcuIGFycmF5cywgZnVuY3Rpb25zLCBvYmplY3RzLCByZWdleGVzLCBgbmV3IE51bWJlcigwKWAsIGFuZCBgbmV3IFN0cmluZygnJylgKVxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0KHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChfLm5vb3ApO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgKHR5cGUgPT0gJ29iamVjdCcgfHwgdHlwZSA9PSAnZnVuY3Rpb24nKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc09iamVjdDtcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXN5bmNUYWcgPSAnW29iamVjdCBBc3luY0Z1bmN0aW9uXScsXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgZ2VuVGFnID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJyxcbiAgICBwcm94eVRhZyA9ICdbb2JqZWN0IFByb3h5XSc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBGdW5jdGlvbmAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgZnVuY3Rpb24sIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0Z1bmN0aW9uKF8pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNGdW5jdGlvbigvYWJjLyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3QodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIFRoZSB1c2Ugb2YgYE9iamVjdCN0b1N0cmluZ2AgYXZvaWRzIGlzc3VlcyB3aXRoIHRoZSBgdHlwZW9mYCBvcGVyYXRvclxuICAvLyBpbiBTYWZhcmkgOSB3aGljaCByZXR1cm5zICdvYmplY3QnIGZvciB0eXBlZCBhcnJheXMgYW5kIG90aGVyIGNvbnN0cnVjdG9ycy5cbiAgdmFyIHRhZyA9IGJhc2VHZXRUYWcodmFsdWUpO1xuICByZXR1cm4gdGFnID09IGZ1bmNUYWcgfHwgdGFnID09IGdlblRhZyB8fCB0YWcgPT0gYXN5bmNUYWcgfHwgdGFnID09IHByb3h5VGFnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRnVuY3Rpb247XG4iLCJ2YXIgY29yZUpzRGF0YSA9IHJlcXVpcmUoJy4vX2NvcmVKc0RhdGEnKTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1ldGhvZHMgbWFzcXVlcmFkaW5nIGFzIG5hdGl2ZS4gKi9cbnZhciBtYXNrU3JjS2V5ID0gKGZ1bmN0aW9uKCkge1xuICB2YXIgdWlkID0gL1teLl0rJC8uZXhlYyhjb3JlSnNEYXRhICYmIGNvcmVKc0RhdGEua2V5cyAmJiBjb3JlSnNEYXRhLmtleXMuSUVfUFJPVE8gfHwgJycpO1xuICByZXR1cm4gdWlkID8gKCdTeW1ib2woc3JjKV8xLicgKyB1aWQpIDogJyc7XG59KCkpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgZnVuY2AgaGFzIGl0cyBzb3VyY2UgbWFza2VkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgZnVuY2AgaXMgbWFza2VkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzTWFza2VkKGZ1bmMpIHtcbiAgcmV0dXJuICEhbWFza1NyY0tleSAmJiAobWFza1NyY0tleSBpbiBmdW5jKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc01hc2tlZDtcbiIsInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogVXNlZCB0byBkZXRlY3Qgb3ZlcnJlYWNoaW5nIGNvcmUtanMgc2hpbXMuICovXG52YXIgY29yZUpzRGF0YSA9IHJvb3RbJ19fY29yZS1qc19zaGFyZWRfXyddO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcmVKc0RhdGE7XG4iLCIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKipcbiAqIENvbnZlcnRzIGBmdW5jYCB0byBpdHMgc291cmNlIGNvZGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBzb3VyY2UgY29kZS5cbiAqL1xuZnVuY3Rpb24gdG9Tb3VyY2UoZnVuYykge1xuICBpZiAoZnVuYyAhPSBudWxsKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBmdW5jVG9TdHJpbmcuY2FsbChmdW5jKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gKGZ1bmMgKyAnJyk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgfVxuICByZXR1cm4gJyc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9Tb3VyY2U7XG4iLCJ2YXIgaXNGdW5jdGlvbiA9IHJlcXVpcmUoJy4vaXNGdW5jdGlvbicpLFxuICAgIGlzTWFza2VkID0gcmVxdWlyZSgnLi9faXNNYXNrZWQnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKSxcbiAgICB0b1NvdXJjZSA9IHJlcXVpcmUoJy4vX3RvU291cmNlJyk7XG5cbi8qKlxuICogVXNlZCB0byBtYXRjaCBgUmVnRXhwYFxuICogW3N5bnRheCBjaGFyYWN0ZXJzXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wYXR0ZXJucykuXG4gKi9cbnZhciByZVJlZ0V4cENoYXIgPSAvW1xcXFxeJC4qKz8oKVtcXF17fXxdL2c7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBob3N0IGNvbnN0cnVjdG9ycyAoU2FmYXJpKS4gKi9cbnZhciByZUlzSG9zdEN0b3IgPSAvXlxcW29iamVjdCAuKz9Db25zdHJ1Y3RvclxcXSQvO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxuICAgIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGlmIGEgbWV0aG9kIGlzIG5hdGl2ZS4gKi9cbnZhciByZUlzTmF0aXZlID0gUmVnRXhwKCdeJyArXG4gIGZ1bmNUb1N0cmluZy5jYWxsKGhhc093blByb3BlcnR5KS5yZXBsYWNlKHJlUmVnRXhwQ2hhciwgJ1xcXFwkJicpXG4gIC5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcXFxcKCl8IGZvciAuKz8oPz1cXFxcXFxdKS9nLCAnJDEuKj8nKSArICckJ1xuKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc05hdGl2ZWAgd2l0aG91dCBiYWQgc2hpbSBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBuYXRpdmUgZnVuY3Rpb24sXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNOYXRpdmUodmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkgfHwgaXNNYXNrZWQodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBwYXR0ZXJuID0gaXNGdW5jdGlvbih2YWx1ZSkgPyByZUlzTmF0aXZlIDogcmVJc0hvc3RDdG9yO1xuICByZXR1cm4gcGF0dGVybi50ZXN0KHRvU291cmNlKHZhbHVlKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzTmF0aXZlO1xuIiwiLyoqXG4gKiBHZXRzIHRoZSB2YWx1ZSBhdCBga2V5YCBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBwcm9wZXJ0eSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gZ2V0VmFsdWUob2JqZWN0LCBrZXkpIHtcbiAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W2tleV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0VmFsdWU7XG4iLCJ2YXIgYmFzZUlzTmF0aXZlID0gcmVxdWlyZSgnLi9fYmFzZUlzTmF0aXZlJyksXG4gICAgZ2V0VmFsdWUgPSByZXF1aXJlKCcuL19nZXRWYWx1ZScpO1xuXG4vKipcbiAqIEdldHMgdGhlIG5hdGl2ZSBmdW5jdGlvbiBhdCBga2V5YCBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBtZXRob2QgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGZ1bmN0aW9uIGlmIGl0J3MgbmF0aXZlLCBlbHNlIGB1bmRlZmluZWRgLlxuICovXG5mdW5jdGlvbiBnZXROYXRpdmUob2JqZWN0LCBrZXkpIHtcbiAgdmFyIHZhbHVlID0gZ2V0VmFsdWUob2JqZWN0LCBrZXkpO1xuICByZXR1cm4gYmFzZUlzTmF0aXZlKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldE5hdGl2ZTtcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIG5hdGl2ZUNyZWF0ZSA9IGdldE5hdGl2ZShPYmplY3QsICdjcmVhdGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBuYXRpdmVDcmVhdGU7XG4iLCJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgaGFzaC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKi9cbmZ1bmN0aW9uIGhhc2hDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IG5hdGl2ZUNyZWF0ZSA/IG5hdGl2ZUNyZWF0ZShudWxsKSA6IHt9O1xuICB0aGlzLnNpemUgPSAwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hDbGVhcjtcbiIsIi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGhhc2guXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7T2JqZWN0fSBoYXNoIFRoZSBoYXNoIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBoYXNoRGVsZXRlKGtleSkge1xuICB2YXIgcmVzdWx0ID0gdGhpcy5oYXMoa2V5KSAmJiBkZWxldGUgdGhpcy5fX2RhdGFfX1trZXldO1xuICB0aGlzLnNpemUgLT0gcmVzdWx0ID8gMSA6IDA7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaERlbGV0ZTtcbiIsInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEdldHMgdGhlIGhhc2ggdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gaGFzaEdldChrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICBpZiAobmF0aXZlQ3JlYXRlKSB7XG4gICAgdmFyIHJlc3VsdCA9IGRhdGFba2V5XTtcbiAgICByZXR1cm4gcmVzdWx0ID09PSBIQVNIX1VOREVGSU5FRCA/IHVuZGVmaW5lZCA6IHJlc3VsdDtcbiAgfVxuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpID8gZGF0YVtrZXldIDogdW5kZWZpbmVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hHZXQ7XG4iLCJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgaGFzaCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzaEhhcyhrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICByZXR1cm4gbmF0aXZlQ3JlYXRlID8gKGRhdGFba2V5XSAhPT0gdW5kZWZpbmVkKSA6IGhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoSGFzO1xuIiwidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKlxuICogU2V0cyB0aGUgaGFzaCBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGhhc2ggaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIGhhc2hTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIHRoaXMuc2l6ZSArPSB0aGlzLmhhcyhrZXkpID8gMCA6IDE7XG4gIGRhdGFba2V5XSA9IChuYXRpdmVDcmVhdGUgJiYgdmFsdWUgPT09IHVuZGVmaW5lZCkgPyBIQVNIX1VOREVGSU5FRCA6IHZhbHVlO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoU2V0O1xuIiwidmFyIGhhc2hDbGVhciA9IHJlcXVpcmUoJy4vX2hhc2hDbGVhcicpLFxuICAgIGhhc2hEZWxldGUgPSByZXF1aXJlKCcuL19oYXNoRGVsZXRlJyksXG4gICAgaGFzaEdldCA9IHJlcXVpcmUoJy4vX2hhc2hHZXQnKSxcbiAgICBoYXNoSGFzID0gcmVxdWlyZSgnLi9faGFzaEhhcycpLFxuICAgIGhhc2hTZXQgPSByZXF1aXJlKCcuL19oYXNoU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGhhc2ggb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBIYXNoKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYEhhc2hgLlxuSGFzaC5wcm90b3R5cGUuY2xlYXIgPSBoYXNoQ2xlYXI7XG5IYXNoLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBoYXNoRGVsZXRlO1xuSGFzaC5wcm90b3R5cGUuZ2V0ID0gaGFzaEdldDtcbkhhc2gucHJvdG90eXBlLmhhcyA9IGhhc2hIYXM7XG5IYXNoLnByb3RvdHlwZS5zZXQgPSBoYXNoU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEhhc2g7XG4iLCIvKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGxpc3QgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUNsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gW107XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlQ2xlYXI7XG4iLCIvKipcbiAqIFBlcmZvcm1zIGFcbiAqIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBjb21wYXJpc29uIGJldHdlZW4gdHdvIHZhbHVlcyB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmUgZXF1aXZhbGVudC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcbiAqIHZhciBvdGhlciA9IHsgJ2EnOiAxIH07XG4gKlxuICogXy5lcShvYmplY3QsIG9iamVjdCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5lcShvYmplY3QsIG90aGVyKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5lcSgnYScsICdhJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5lcSgnYScsIE9iamVjdCgnYScpKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5lcShOYU4sIE5hTik7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGVxKHZhbHVlLCBvdGhlcikge1xuICByZXR1cm4gdmFsdWUgPT09IG90aGVyIHx8ICh2YWx1ZSAhPT0gdmFsdWUgJiYgb3RoZXIgIT09IG90aGVyKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlcTtcbiIsInZhciBlcSA9IHJlcXVpcmUoJy4vZXEnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBpbmRleCBhdCB3aGljaCB0aGUgYGtleWAgaXMgZm91bmQgaW4gYGFycmF5YCBvZiBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSBrZXkgVGhlIGtleSB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gYXNzb2NJbmRleE9mKGFycmF5LCBrZXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgaWYgKGVxKGFycmF5W2xlbmd0aF1bMF0sIGtleSkpIHtcbiAgICAgIHJldHVybiBsZW5ndGg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhc3NvY0luZGV4T2Y7XG4iLCJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBhcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzcGxpY2UgPSBhcnJheVByb3RvLnNwbGljZTtcblxuLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgbGlzdCBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlRGVsZXRlKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIGlmIChpbmRleCA8IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIGxhc3RJbmRleCA9IGRhdGEubGVuZ3RoIC0gMTtcbiAgaWYgKGluZGV4ID09IGxhc3RJbmRleCkge1xuICAgIGRhdGEucG9wKCk7XG4gIH0gZWxzZSB7XG4gICAgc3BsaWNlLmNhbGwoZGF0YSwgaW5kZXgsIDEpO1xuICB9XG4gIC0tdGhpcy5zaXplO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVEZWxldGU7XG4iLCJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUdldChrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICByZXR1cm4gaW5kZXggPCAwID8gdW5kZWZpbmVkIDogZGF0YVtpbmRleF1bMV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlR2V0O1xuIiwidmFyIGFzc29jSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Fzc29jSW5kZXhPZicpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIGxpc3QgY2FjaGUgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlSGFzKGtleSkge1xuICByZXR1cm4gYXNzb2NJbmRleE9mKHRoaXMuX19kYXRhX18sIGtleSkgPiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVIYXM7XG4iLCJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKlxuICogU2V0cyB0aGUgbGlzdCBjYWNoZSBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbGlzdCBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgKyt0aGlzLnNpemU7XG4gICAgZGF0YS5wdXNoKFtrZXksIHZhbHVlXSk7XG4gIH0gZWxzZSB7XG4gICAgZGF0YVtpbmRleF1bMV0gPSB2YWx1ZTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVTZXQ7XG4iLCJ2YXIgbGlzdENhY2hlQ2xlYXIgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVDbGVhcicpLFxuICAgIGxpc3RDYWNoZURlbGV0ZSA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZURlbGV0ZScpLFxuICAgIGxpc3RDYWNoZUdldCA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZUdldCcpLFxuICAgIGxpc3RDYWNoZUhhcyA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZUhhcycpLFxuICAgIGxpc3RDYWNoZVNldCA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZVNldCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gbGlzdCBjYWNoZSBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIExpc3RDYWNoZShlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBMaXN0Q2FjaGVgLlxuTGlzdENhY2hlLnByb3RvdHlwZS5jbGVhciA9IGxpc3RDYWNoZUNsZWFyO1xuTGlzdENhY2hlLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBsaXN0Q2FjaGVEZWxldGU7XG5MaXN0Q2FjaGUucHJvdG90eXBlLmdldCA9IGxpc3RDYWNoZUdldDtcbkxpc3RDYWNoZS5wcm90b3R5cGUuaGFzID0gbGlzdENhY2hlSGFzO1xuTGlzdENhY2hlLnByb3RvdHlwZS5zZXQgPSBsaXN0Q2FjaGVTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gTGlzdENhY2hlO1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBNYXAgPSBnZXROYXRpdmUocm9vdCwgJ01hcCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1hcDtcbiIsInZhciBIYXNoID0gcmVxdWlyZSgnLi9fSGFzaCcpLFxuICAgIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpLFxuICAgIE1hcCA9IHJlcXVpcmUoJy4vX01hcCcpO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIG1hcC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUNsZWFyKCkge1xuICB0aGlzLnNpemUgPSAwO1xuICB0aGlzLl9fZGF0YV9fID0ge1xuICAgICdoYXNoJzogbmV3IEhhc2gsXG4gICAgJ21hcCc6IG5ldyAoTWFwIHx8IExpc3RDYWNoZSksXG4gICAgJ3N0cmluZyc6IG5ldyBIYXNoXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVDbGVhcjtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUgZm9yIHVzZSBhcyB1bmlxdWUgb2JqZWN0IGtleS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0tleWFibGUodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiAodHlwZSA9PSAnc3RyaW5nJyB8fCB0eXBlID09ICdudW1iZXInIHx8IHR5cGUgPT0gJ3N5bWJvbCcgfHwgdHlwZSA9PSAnYm9vbGVhbicpXG4gICAgPyAodmFsdWUgIT09ICdfX3Byb3RvX18nKVxuICAgIDogKHZhbHVlID09PSBudWxsKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0tleWFibGU7XG4iLCJ2YXIgaXNLZXlhYmxlID0gcmVxdWlyZSgnLi9faXNLZXlhYmxlJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgZGF0YSBmb3IgYG1hcGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXAgVGhlIG1hcCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIHJlZmVyZW5jZSBrZXkuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbWFwIGRhdGEuXG4gKi9cbmZ1bmN0aW9uIGdldE1hcERhdGEobWFwLCBrZXkpIHtcbiAgdmFyIGRhdGEgPSBtYXAuX19kYXRhX187XG4gIHJldHVybiBpc0tleWFibGUoa2V5KVxuICAgID8gZGF0YVt0eXBlb2Yga2V5ID09ICdzdHJpbmcnID8gJ3N0cmluZycgOiAnaGFzaCddXG4gICAgOiBkYXRhLm1hcDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRNYXBEYXRhO1xuIiwidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIG1hcC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZURlbGV0ZShrZXkpIHtcbiAgdmFyIHJlc3VsdCA9IGdldE1hcERhdGEodGhpcywga2V5KVsnZGVsZXRlJ10oa2V5KTtcbiAgdGhpcy5zaXplIC09IHJlc3VsdCA/IDEgOiAwO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlRGVsZXRlO1xuIiwidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgbWFwIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUdldChrZXkpIHtcbiAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5KS5nZXQoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZUdldDtcbiIsInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIG1hcCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlSGFzKGtleSkge1xuICByZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLmhhcyhrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlSGFzO1xuIiwidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogU2V0cyB0aGUgbWFwIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG1hcCBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IGdldE1hcERhdGEodGhpcywga2V5KSxcbiAgICAgIHNpemUgPSBkYXRhLnNpemU7XG5cbiAgZGF0YS5zZXQoa2V5LCB2YWx1ZSk7XG4gIHRoaXMuc2l6ZSArPSBkYXRhLnNpemUgPT0gc2l6ZSA/IDAgOiAxO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZVNldDtcbiIsInZhciBtYXBDYWNoZUNsZWFyID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVDbGVhcicpLFxuICAgIG1hcENhY2hlRGVsZXRlID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVEZWxldGUnKSxcbiAgICBtYXBDYWNoZUdldCA9IHJlcXVpcmUoJy4vX21hcENhY2hlR2V0JyksXG4gICAgbWFwQ2FjaGVIYXMgPSByZXF1aXJlKCcuL19tYXBDYWNoZUhhcycpLFxuICAgIG1hcENhY2hlU2V0ID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbWFwIGNhY2hlIG9iamVjdCB0byBzdG9yZSBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIE1hcENhY2hlKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYE1hcENhY2hlYC5cbk1hcENhY2hlLnByb3RvdHlwZS5jbGVhciA9IG1hcENhY2hlQ2xlYXI7XG5NYXBDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gbWFwQ2FjaGVEZWxldGU7XG5NYXBDYWNoZS5wcm90b3R5cGUuZ2V0ID0gbWFwQ2FjaGVHZXQ7XG5NYXBDYWNoZS5wcm90b3R5cGUuaGFzID0gbWFwQ2FjaGVIYXM7XG5NYXBDYWNoZS5wcm90b3R5cGUuc2V0ID0gbWFwQ2FjaGVTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gTWFwQ2FjaGU7XG4iLCIvKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKlxuICogQWRkcyBgdmFsdWVgIHRvIHRoZSBhcnJheSBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgYWRkXG4gKiBAbWVtYmVyT2YgU2V0Q2FjaGVcbiAqIEBhbGlhcyBwdXNoXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjYWNoZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBzZXRDYWNoZUFkZCh2YWx1ZSkge1xuICB0aGlzLl9fZGF0YV9fLnNldCh2YWx1ZSwgSEFTSF9VTkRFRklORUQpO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXRDYWNoZUFkZDtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgaW4gdGhlIGFycmF5IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBTZXRDYWNoZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgZm91bmQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gc2V0Q2FjaGVIYXModmFsdWUpIHtcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXRDYWNoZUhhcztcbiIsInZhciBNYXBDYWNoZSA9IHJlcXVpcmUoJy4vX01hcENhY2hlJyksXG4gICAgc2V0Q2FjaGVBZGQgPSByZXF1aXJlKCcuL19zZXRDYWNoZUFkZCcpLFxuICAgIHNldENhY2hlSGFzID0gcmVxdWlyZSgnLi9fc2V0Q2FjaGVIYXMnKTtcblxuLyoqXG4gKlxuICogQ3JlYXRlcyBhbiBhcnJheSBjYWNoZSBvYmplY3QgdG8gc3RvcmUgdW5pcXVlIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbdmFsdWVzXSBUaGUgdmFsdWVzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBTZXRDYWNoZSh2YWx1ZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSB2YWx1ZXMgPT0gbnVsbCA/IDAgOiB2YWx1ZXMubGVuZ3RoO1xuXG4gIHRoaXMuX19kYXRhX18gPSBuZXcgTWFwQ2FjaGU7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdGhpcy5hZGQodmFsdWVzW2luZGV4XSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYFNldENhY2hlYC5cblNldENhY2hlLnByb3RvdHlwZS5hZGQgPSBTZXRDYWNoZS5wcm90b3R5cGUucHVzaCA9IHNldENhY2hlQWRkO1xuU2V0Q2FjaGUucHJvdG90eXBlLmhhcyA9IHNldENhY2hlSGFzO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNldENhY2hlO1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5maW5kSW5kZXhgIGFuZCBgXy5maW5kTGFzdEluZGV4YCB3aXRob3V0XG4gKiBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IGZyb21JbmRleCBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNwZWNpZnkgaXRlcmF0aW5nIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VGaW5kSW5kZXgoYXJyYXksIHByZWRpY2F0ZSwgZnJvbUluZGV4LCBmcm9tUmlnaHQpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIGluZGV4ID0gZnJvbUluZGV4ICsgKGZyb21SaWdodCA/IDEgOiAtMSk7XG5cbiAgd2hpbGUgKChmcm9tUmlnaHQgPyBpbmRleC0tIDogKytpbmRleCA8IGxlbmd0aCkpIHtcbiAgICBpZiAocHJlZGljYXRlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSkge1xuICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cbiAgfVxuICByZXR1cm4gLTE7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUZpbmRJbmRleDtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNOYU5gIHdpdGhvdXQgc3VwcG9ydCBmb3IgbnVtYmVyIG9iamVjdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYE5hTmAsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzTmFOKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPT0gdmFsdWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzTmFOO1xuIiwiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uaW5kZXhPZmAgd2hpY2ggcGVyZm9ybXMgc3RyaWN0IGVxdWFsaXR5XG4gKiBjb21wYXJpc29ucyBvZiB2YWx1ZXMsIGkuZS4gYD09PWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXggVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gc3RyaWN0SW5kZXhPZihhcnJheSwgdmFsdWUsIGZyb21JbmRleCkge1xuICB2YXIgaW5kZXggPSBmcm9tSW5kZXggLSAxLFxuICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKGFycmF5W2luZGV4XSA9PT0gdmFsdWUpIHtcbiAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0cmljdEluZGV4T2Y7XG4iLCJ2YXIgYmFzZUZpbmRJbmRleCA9IHJlcXVpcmUoJy4vX2Jhc2VGaW5kSW5kZXgnKSxcbiAgICBiYXNlSXNOYU4gPSByZXF1aXJlKCcuL19iYXNlSXNOYU4nKSxcbiAgICBzdHJpY3RJbmRleE9mID0gcmVxdWlyZSgnLi9fc3RyaWN0SW5kZXhPZicpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmluZGV4T2ZgIHdpdGhvdXQgYGZyb21JbmRleGAgYm91bmRzIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHBhcmFtIHtudW1iZXJ9IGZyb21JbmRleCBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICovXG5mdW5jdGlvbiBiYXNlSW5kZXhPZihhcnJheSwgdmFsdWUsIGZyb21JbmRleCkge1xuICByZXR1cm4gdmFsdWUgPT09IHZhbHVlXG4gICAgPyBzdHJpY3RJbmRleE9mKGFycmF5LCB2YWx1ZSwgZnJvbUluZGV4KVxuICAgIDogYmFzZUZpbmRJbmRleChhcnJheSwgYmFzZUlzTmFOLCBmcm9tSW5kZXgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJbmRleE9mO1xuIiwidmFyIGJhc2VJbmRleE9mID0gcmVxdWlyZSgnLi9fYmFzZUluZGV4T2YnKTtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uaW5jbHVkZXNgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvclxuICogc3BlY2lmeWluZyBhbiBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gdGFyZ2V0IFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB0YXJnZXRgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5SW5jbHVkZXMoYXJyYXksIHZhbHVlKSB7XG4gIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgcmV0dXJuICEhbGVuZ3RoICYmIGJhc2VJbmRleE9mKGFycmF5LCB2YWx1ZSwgMCkgPiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheUluY2x1ZGVzO1xuIiwiLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2UgYGFycmF5SW5jbHVkZXNgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYSBjb21wYXJhdG9yLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSB0YXJnZXQgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjb21wYXJhdG9yIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHRhcmdldGAgaXMgZm91bmQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlJbmNsdWRlc1dpdGgoYXJyYXksIHZhbHVlLCBjb21wYXJhdG9yKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBpZiAoY29tcGFyYXRvcih2YWx1ZSwgYXJyYXlbaW5kZXhdKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheUluY2x1ZGVzV2l0aDtcbiIsIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLm1hcGAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlXG4gKiBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgbWFwcGVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBhcnJheU1hcChhcnJheSwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlNYXA7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnVuYXJ5YCB3aXRob3V0IHN1cHBvcnQgZm9yIHN0b3JpbmcgbWV0YWRhdGEuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNhcCBhcmd1bWVudHMgZm9yLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY2FwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlVW5hcnkoZnVuYykge1xuICByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gZnVuYyh2YWx1ZSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVVuYXJ5O1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYSBgY2FjaGVgIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBjYWNoZSBUaGUgY2FjaGUgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gY2FjaGVIYXMoY2FjaGUsIGtleSkge1xuICByZXR1cm4gY2FjaGUuaGFzKGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2FjaGVIYXM7XG4iLCJ2YXIgU2V0Q2FjaGUgPSByZXF1aXJlKCcuL19TZXRDYWNoZScpLFxuICAgIGFycmF5SW5jbHVkZXMgPSByZXF1aXJlKCcuL19hcnJheUluY2x1ZGVzJyksXG4gICAgYXJyYXlJbmNsdWRlc1dpdGggPSByZXF1aXJlKCcuL19hcnJheUluY2x1ZGVzV2l0aCcpLFxuICAgIGFycmF5TWFwID0gcmVxdWlyZSgnLi9fYXJyYXlNYXAnKSxcbiAgICBiYXNlVW5hcnkgPSByZXF1aXJlKCcuL19iYXNlVW5hcnknKSxcbiAgICBjYWNoZUhhcyA9IHJlcXVpcmUoJy4vX2NhY2hlSGFzJyk7XG5cbi8qKiBVc2VkIGFzIHRoZSBzaXplIHRvIGVuYWJsZSBsYXJnZSBhcnJheSBvcHRpbWl6YXRpb25zLiAqL1xudmFyIExBUkdFX0FSUkFZX1NJWkUgPSAyMDA7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgbWV0aG9kcyBsaWtlIGBfLmRpZmZlcmVuY2VgIHdpdGhvdXQgc3VwcG9ydFxuICogZm9yIGV4Y2x1ZGluZyBtdWx0aXBsZSBhcnJheXMgb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIHZhbHVlcyB0byBleGNsdWRlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlXSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjb21wYXJhdG9yXSBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgZmlsdGVyZWQgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBiYXNlRGlmZmVyZW5jZShhcnJheSwgdmFsdWVzLCBpdGVyYXRlZSwgY29tcGFyYXRvcikge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGluY2x1ZGVzID0gYXJyYXlJbmNsdWRlcyxcbiAgICAgIGlzQ29tbW9uID0gdHJ1ZSxcbiAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IFtdLFxuICAgICAgdmFsdWVzTGVuZ3RoID0gdmFsdWVzLmxlbmd0aDtcblxuICBpZiAoIWxlbmd0aCkge1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgaWYgKGl0ZXJhdGVlKSB7XG4gICAgdmFsdWVzID0gYXJyYXlNYXAodmFsdWVzLCBiYXNlVW5hcnkoaXRlcmF0ZWUpKTtcbiAgfVxuICBpZiAoY29tcGFyYXRvcikge1xuICAgIGluY2x1ZGVzID0gYXJyYXlJbmNsdWRlc1dpdGg7XG4gICAgaXNDb21tb24gPSBmYWxzZTtcbiAgfVxuICBlbHNlIGlmICh2YWx1ZXMubGVuZ3RoID49IExBUkdFX0FSUkFZX1NJWkUpIHtcbiAgICBpbmNsdWRlcyA9IGNhY2hlSGFzO1xuICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gICAgdmFsdWVzID0gbmV3IFNldENhY2hlKHZhbHVlcyk7XG4gIH1cbiAgb3V0ZXI6XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdLFxuICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlID09IG51bGwgPyB2YWx1ZSA6IGl0ZXJhdGVlKHZhbHVlKTtcblxuICAgIHZhbHVlID0gKGNvbXBhcmF0b3IgfHwgdmFsdWUgIT09IDApID8gdmFsdWUgOiAwO1xuICAgIGlmIChpc0NvbW1vbiAmJiBjb21wdXRlZCA9PT0gY29tcHV0ZWQpIHtcbiAgICAgIHZhciB2YWx1ZXNJbmRleCA9IHZhbHVlc0xlbmd0aDtcbiAgICAgIHdoaWxlICh2YWx1ZXNJbmRleC0tKSB7XG4gICAgICAgIGlmICh2YWx1ZXNbdmFsdWVzSW5kZXhdID09PSBjb21wdXRlZCkge1xuICAgICAgICAgIGNvbnRpbnVlIG91dGVyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKCFpbmNsdWRlcyh2YWx1ZXMsIGNvbXB1dGVkLCBjb21wYXJhdG9yKSkge1xuICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VEaWZmZXJlbmNlO1xuIiwiLyoqXG4gKiBBcHBlbmRzIHRoZSBlbGVtZW50cyBvZiBgdmFsdWVzYCB0byBgYXJyYXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gYXBwZW5kLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5UHVzaChhcnJheSwgdmFsdWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gdmFsdWVzLmxlbmd0aCxcbiAgICAgIG9mZnNldCA9IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGFycmF5W29mZnNldCArIGluZGV4XSA9IHZhbHVlc1tpbmRleF07XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5UHVzaDtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UuIEEgdmFsdWUgaXMgb2JqZWN0LWxpa2UgaWYgaXQncyBub3QgYG51bGxgXG4gKiBhbmQgaGFzIGEgYHR5cGVvZmAgcmVzdWx0IG9mIFwib2JqZWN0XCIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdExpa2Uoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc09iamVjdExpa2UobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzT2JqZWN0TGlrZTtcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXSc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNBcmd1bWVudHNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcbiAqL1xuZnVuY3Rpb24gYmFzZUlzQXJndW1lbnRzKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IGFyZ3NUYWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzQXJndW1lbnRzO1xuIiwidmFyIGJhc2VJc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vX2Jhc2VJc0FyZ3VtZW50cycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGFuIGBhcmd1bWVudHNgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FyZ3VtZW50cyA9IGJhc2VJc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA/IGJhc2VJc0FyZ3VtZW50cyA6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdjYWxsZWUnKSAmJlxuICAgICFwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHZhbHVlLCAnY2FsbGVlJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJndW1lbnRzO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGFuIGBBcnJheWAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcnJheTtcbiIsInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKSxcbiAgICBpc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5Jyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHNwcmVhZGFibGVTeW1ib2wgPSBTeW1ib2wgPyBTeW1ib2wuaXNDb25jYXRTcHJlYWRhYmxlIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgZmxhdHRlbmFibGUgYGFyZ3VtZW50c2Agb2JqZWN0IG9yIGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGZsYXR0ZW5hYmxlLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzRmxhdHRlbmFibGUodmFsdWUpIHtcbiAgcmV0dXJuIGlzQXJyYXkodmFsdWUpIHx8IGlzQXJndW1lbnRzKHZhbHVlKSB8fFxuICAgICEhKHNwcmVhZGFibGVTeW1ib2wgJiYgdmFsdWUgJiYgdmFsdWVbc3ByZWFkYWJsZVN5bWJvbF0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRmxhdHRlbmFibGU7XG4iLCJ2YXIgYXJyYXlQdXNoID0gcmVxdWlyZSgnLi9fYXJyYXlQdXNoJyksXG4gICAgaXNGbGF0dGVuYWJsZSA9IHJlcXVpcmUoJy4vX2lzRmxhdHRlbmFibGUnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mbGF0dGVuYCB3aXRoIHN1cHBvcnQgZm9yIHJlc3RyaWN0aW5nIGZsYXR0ZW5pbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBmbGF0dGVuLlxuICogQHBhcmFtIHtudW1iZXJ9IGRlcHRoIFRoZSBtYXhpbXVtIHJlY3Vyc2lvbiBkZXB0aC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3ByZWRpY2F0ZT1pc0ZsYXR0ZW5hYmxlXSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNTdHJpY3RdIFJlc3RyaWN0IHRvIHZhbHVlcyB0aGF0IHBhc3MgYHByZWRpY2F0ZWAgY2hlY2tzLlxuICogQHBhcmFtIHtBcnJheX0gW3Jlc3VsdD1bXV0gVGhlIGluaXRpYWwgcmVzdWx0IHZhbHVlLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmxhdHRlbmVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBiYXNlRmxhdHRlbihhcnJheSwgZGVwdGgsIHByZWRpY2F0ZSwgaXNTdHJpY3QsIHJlc3VsdCkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBwcmVkaWNhdGUgfHwgKHByZWRpY2F0ZSA9IGlzRmxhdHRlbmFibGUpO1xuICByZXN1bHQgfHwgKHJlc3VsdCA9IFtdKTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTtcbiAgICBpZiAoZGVwdGggPiAwICYmIHByZWRpY2F0ZSh2YWx1ZSkpIHtcbiAgICAgIGlmIChkZXB0aCA+IDEpIHtcbiAgICAgICAgLy8gUmVjdXJzaXZlbHkgZmxhdHRlbiBhcnJheXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICAgICAgYmFzZUZsYXR0ZW4odmFsdWUsIGRlcHRoIC0gMSwgcHJlZGljYXRlLCBpc1N0cmljdCwgcmVzdWx0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFycmF5UHVzaChyZXN1bHQsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFpc1N0cmljdCkge1xuICAgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGhdID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUZsYXR0ZW47XG4iLCIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGZpcnN0IGFyZ3VtZW50IGl0IHJlY2VpdmVzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0geyp9IHZhbHVlIEFueSB2YWx1ZS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIGB2YWx1ZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICpcbiAqIGNvbnNvbGUubG9nKF8uaWRlbnRpdHkob2JqZWN0KSA9PT0gb2JqZWN0KTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gaWRlbnRpdHkodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlkZW50aXR5O1xuIiwiLyoqXG4gKiBBIGZhc3RlciBhbHRlcm5hdGl2ZSB0byBgRnVuY3Rpb24jYXBwbHlgLCB0aGlzIGZ1bmN0aW9uIGludm9rZXMgYGZ1bmNgXG4gKiB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiBgdGhpc0FyZ2AgYW5kIHRoZSBhcmd1bWVudHMgb2YgYGFyZ3NgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBpbnZva2UuXG4gKiBAcGFyYW0geyp9IHRoaXNBcmcgVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgYGZ1bmNgIHdpdGguXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzdWx0IG9mIGBmdW5jYC5cbiAqL1xuZnVuY3Rpb24gYXBwbHkoZnVuYywgdGhpc0FyZywgYXJncykge1xuICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgY2FzZSAwOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcpO1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdKTtcbiAgICBjYXNlIDI6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgY2FzZSAzOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICB9XG4gIHJldHVybiBmdW5jLmFwcGx5KHRoaXNBcmcsIGFyZ3MpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFwcGx5O1xuIiwidmFyIGFwcGx5ID0gcmVxdWlyZSgnLi9fYXBwbHknKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU1heCA9IE1hdGgubWF4O1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZVJlc3RgIHdoaWNoIHRyYW5zZm9ybXMgdGhlIHJlc3QgYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PWZ1bmMubGVuZ3RoLTFdIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgcmVzdCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2Zvcm0gVGhlIHJlc3QgYXJyYXkgdHJhbnNmb3JtLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG92ZXJSZXN0KGZ1bmMsIHN0YXJ0LCB0cmFuc2Zvcm0pIHtcbiAgc3RhcnQgPSBuYXRpdmVNYXgoc3RhcnQgPT09IHVuZGVmaW5lZCA/IChmdW5jLmxlbmd0aCAtIDEpIDogc3RhcnQsIDApO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IG5hdGl2ZU1heChhcmdzLmxlbmd0aCAtIHN0YXJ0LCAwKSxcbiAgICAgICAgYXJyYXkgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGFycmF5W2luZGV4XSA9IGFyZ3Nbc3RhcnQgKyBpbmRleF07XG4gICAgfVxuICAgIGluZGV4ID0gLTE7XG4gICAgdmFyIG90aGVyQXJncyA9IEFycmF5KHN0YXJ0ICsgMSk7XG4gICAgd2hpbGUgKCsraW5kZXggPCBzdGFydCkge1xuICAgICAgb3RoZXJBcmdzW2luZGV4XSA9IGFyZ3NbaW5kZXhdO1xuICAgIH1cbiAgICBvdGhlckFyZ3Nbc3RhcnRdID0gdHJhbnNmb3JtKGFycmF5KTtcbiAgICByZXR1cm4gYXBwbHkoZnVuYywgdGhpcywgb3RoZXJBcmdzKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvdmVyUmVzdDtcbiIsIi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBgdmFsdWVgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi40LjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byByZXR1cm4gZnJvbSB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY29uc3RhbnQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3RzID0gXy50aW1lcygyLCBfLmNvbnN0YW50KHsgJ2EnOiAxIH0pKTtcbiAqXG4gKiBjb25zb2xlLmxvZyhvYmplY3RzKTtcbiAqIC8vID0+IFt7ICdhJzogMSB9LCB7ICdhJzogMSB9XVxuICpcbiAqIGNvbnNvbGUubG9nKG9iamVjdHNbMF0gPT09IG9iamVjdHNbMV0pO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBjb25zdGFudCh2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbnN0YW50O1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpO1xuXG52YXIgZGVmaW5lUHJvcGVydHkgPSAoZnVuY3Rpb24oKSB7XG4gIHRyeSB7XG4gICAgdmFyIGZ1bmMgPSBnZXROYXRpdmUoT2JqZWN0LCAnZGVmaW5lUHJvcGVydHknKTtcbiAgICBmdW5jKHt9LCAnJywge30pO1xuICAgIHJldHVybiBmdW5jO1xuICB9IGNhdGNoIChlKSB7fVxufSgpKTtcblxubW9kdWxlLmV4cG9ydHMgPSBkZWZpbmVQcm9wZXJ0eTtcbiIsInZhciBjb25zdGFudCA9IHJlcXVpcmUoJy4vY29uc3RhbnQnKSxcbiAgICBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2RlZmluZVByb3BlcnR5JyksXG4gICAgaWRlbnRpdHkgPSByZXF1aXJlKCcuL2lkZW50aXR5Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYHNldFRvU3RyaW5nYCB3aXRob3V0IHN1cHBvcnQgZm9yIGhvdCBsb29wIHNob3J0aW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdHJpbmcgVGhlIGB0b1N0cmluZ2AgcmVzdWx0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC5cbiAqL1xudmFyIGJhc2VTZXRUb1N0cmluZyA9ICFkZWZpbmVQcm9wZXJ0eSA/IGlkZW50aXR5IDogZnVuY3Rpb24oZnVuYywgc3RyaW5nKSB7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eShmdW5jLCAndG9TdHJpbmcnLCB7XG4gICAgJ2NvbmZpZ3VyYWJsZSc6IHRydWUsXG4gICAgJ2VudW1lcmFibGUnOiBmYWxzZSxcbiAgICAndmFsdWUnOiBjb25zdGFudChzdHJpbmcpLFxuICAgICd3cml0YWJsZSc6IHRydWVcbiAgfSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VTZXRUb1N0cmluZztcbiIsIi8qKiBVc2VkIHRvIGRldGVjdCBob3QgZnVuY3Rpb25zIGJ5IG51bWJlciBvZiBjYWxscyB3aXRoaW4gYSBzcGFuIG9mIG1pbGxpc2Vjb25kcy4gKi9cbnZhciBIT1RfQ09VTlQgPSA4MDAsXG4gICAgSE9UX1NQQU4gPSAxNjtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU5vdyA9IERhdGUubm93O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0J2xsIHNob3J0IG91dCBhbmQgaW52b2tlIGBpZGVudGl0eWAgaW5zdGVhZFxuICogb2YgYGZ1bmNgIHdoZW4gaXQncyBjYWxsZWQgYEhPVF9DT1VOVGAgb3IgbW9yZSB0aW1lcyBpbiBgSE9UX1NQQU5gXG4gKiBtaWxsaXNlY29uZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHJlc3RyaWN0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc2hvcnRhYmxlIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBzaG9ydE91dChmdW5jKSB7XG4gIHZhciBjb3VudCA9IDAsXG4gICAgICBsYXN0Q2FsbGVkID0gMDtcblxuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0YW1wID0gbmF0aXZlTm93KCksXG4gICAgICAgIHJlbWFpbmluZyA9IEhPVF9TUEFOIC0gKHN0YW1wIC0gbGFzdENhbGxlZCk7XG5cbiAgICBsYXN0Q2FsbGVkID0gc3RhbXA7XG4gICAgaWYgKHJlbWFpbmluZyA+IDApIHtcbiAgICAgIGlmICgrK2NvdW50ID49IEhPVF9DT1VOVCkge1xuICAgICAgICByZXR1cm4gYXJndW1lbnRzWzBdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb3VudCA9IDA7XG4gICAgfVxuICAgIHJldHVybiBmdW5jLmFwcGx5KHVuZGVmaW5lZCwgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzaG9ydE91dDtcbiIsInZhciBiYXNlU2V0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19iYXNlU2V0VG9TdHJpbmcnKSxcbiAgICBzaG9ydE91dCA9IHJlcXVpcmUoJy4vX3Nob3J0T3V0Jyk7XG5cbi8qKlxuICogU2V0cyB0aGUgYHRvU3RyaW5nYCBtZXRob2Qgb2YgYGZ1bmNgIHRvIHJldHVybiBgc3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3RyaW5nIFRoZSBgdG9TdHJpbmdgIHJlc3VsdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gKi9cbnZhciBzZXRUb1N0cmluZyA9IHNob3J0T3V0KGJhc2VTZXRUb1N0cmluZyk7XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0VG9TdHJpbmc7XG4iLCIvKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgbGVuZ3RoLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBsb29zZWx5IGJhc2VkIG9uXG4gKiBbYFRvTGVuZ3RoYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtdG9sZW5ndGgpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgbGVuZ3RoLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNMZW5ndGgoMyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0xlbmd0aChOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0xlbmd0aChJbmZpbml0eSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNMZW5ndGgoJzMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzTGVuZ3RoKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgJiZcbiAgICB2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDw9IE1BWF9TQUZFX0lOVEVHRVI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNMZW5ndGg7XG4iLCJ2YXIgaXNGdW5jdGlvbiA9IHJlcXVpcmUoJy4vaXNGdW5jdGlvbicpLFxuICAgIGlzTGVuZ3RoID0gcmVxdWlyZSgnLi9pc0xlbmd0aCcpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UuIEEgdmFsdWUgaXMgY29uc2lkZXJlZCBhcnJheS1saWtlIGlmIGl0J3NcbiAqIG5vdCBhIGZ1bmN0aW9uIGFuZCBoYXMgYSBgdmFsdWUubGVuZ3RoYCB0aGF0J3MgYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gb3JcbiAqIGVxdWFsIHRvIGAwYCBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUmAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKCdhYmMnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5TGlrZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiBpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpICYmICFpc0Z1bmN0aW9uKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0FycmF5TGlrZTtcbiIsInZhciBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uaXNBcnJheUxpa2VgIGV4Y2VwdCB0aGF0IGl0IGFsc28gY2hlY2tzIGlmIGB2YWx1ZWBcbiAqIGlzIGFuIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheS1saWtlIG9iamVjdCxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlT2JqZWN0KGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXlMaWtlT2JqZWN0KF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5TGlrZU9iamVjdCh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBpc0FycmF5TGlrZSh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcnJheUxpa2VPYmplY3Q7XG4iLCIvKipcbiAqIEdldHMgdGhlIGxhc3QgZWxlbWVudCBvZiBgYXJyYXlgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGxhc3QgZWxlbWVudCBvZiBgYXJyYXlgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmxhc3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IDNcbiAqL1xuZnVuY3Rpb24gbGFzdChhcnJheSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gIHJldHVybiBsZW5ndGggPyBhcnJheVtsZW5ndGggLSAxXSA6IHVuZGVmaW5lZDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsYXN0O1xuIiwidmFyIGJhc2VEaWZmZXJlbmNlID0gcmVxdWlyZSgnLi9fYmFzZURpZmZlcmVuY2UnKSxcbiAgICBiYXNlRmxhdHRlbiA9IHJlcXVpcmUoJy4vX2Jhc2VGbGF0dGVuJyksXG4gICAgYmFzZVJlc3QgPSByZXF1aXJlKCcuL19iYXNlUmVzdCcpLFxuICAgIGlzQXJyYXlMaWtlT2JqZWN0ID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZU9iamVjdCcpLFxuICAgIGxhc3QgPSByZXF1aXJlKCcuL2xhc3QnKTtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmRpZmZlcmVuY2VgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGNvbXBhcmF0b3JgXG4gKiB3aGljaCBpcyBpbnZva2VkIHRvIGNvbXBhcmUgZWxlbWVudHMgb2YgYGFycmF5YCB0byBgdmFsdWVzYC4gVGhlIG9yZGVyIGFuZFxuICogcmVmZXJlbmNlcyBvZiByZXN1bHQgdmFsdWVzIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSBmaXJzdCBhcnJheS4gVGhlIGNvbXBhcmF0b3JcbiAqIGlzIGludm9rZWQgd2l0aCB0d28gYXJndW1lbnRzOiAoYXJyVmFsLCBvdGhWYWwpLlxuICpcbiAqICoqTm90ZToqKiBVbmxpa2UgYF8ucHVsbEFsbFdpdGhgLCB0aGlzIG1ldGhvZCByZXR1cm5zIGEgbmV3IGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0gey4uLkFycmF5fSBbdmFsdWVzXSBUaGUgdmFsdWVzIHRvIGV4Y2x1ZGUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY29tcGFyYXRvcl0gVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGZpbHRlcmVkIHZhbHVlcy5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdHMgPSBbeyAneCc6IDEsICd5JzogMiB9LCB7ICd4JzogMiwgJ3knOiAxIH1dO1xuICpcbiAqIF8uZGlmZmVyZW5jZVdpdGgob2JqZWN0cywgW3sgJ3gnOiAxLCAneSc6IDIgfV0sIF8uaXNFcXVhbCk7XG4gKiAvLyA9PiBbeyAneCc6IDIsICd5JzogMSB9XVxuICovXG52YXIgZGlmZmVyZW5jZVdpdGggPSBiYXNlUmVzdChmdW5jdGlvbihhcnJheSwgdmFsdWVzKSB7XG4gIHZhciBjb21wYXJhdG9yID0gbGFzdCh2YWx1ZXMpO1xuICBpZiAoaXNBcnJheUxpa2VPYmplY3QoY29tcGFyYXRvcikpIHtcbiAgICBjb21wYXJhdG9yID0gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiBpc0FycmF5TGlrZU9iamVjdChhcnJheSlcbiAgICA/IGJhc2VEaWZmZXJlbmNlKGFycmF5LCBiYXNlRmxhdHRlbih2YWx1ZXMsIDEsIGlzQXJyYXlMaWtlT2JqZWN0LCB0cnVlKSwgdW5kZWZpbmVkLCBjb21wYXJhdG9yKVxuICAgIDogW107XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBkaWZmZXJlbmNlV2l0aDtcbiIsInZhciBpZGVudGl0eSA9IHJlcXVpcmUoJy4vaWRlbnRpdHknKSxcbiAgICBvdmVyUmVzdCA9IHJlcXVpcmUoJy4vX292ZXJSZXN0JyksXG4gICAgc2V0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19zZXRUb1N0cmluZycpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnJlc3RgIHdoaWNoIGRvZXNuJ3QgdmFsaWRhdGUgb3IgY29lcmNlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9ZnVuYy5sZW5ndGgtMV0gVGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSByZXN0IHBhcmFtZXRlci5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlUmVzdChmdW5jLCBzdGFydCkge1xuICByZXR1cm4gc2V0VG9TdHJpbmcob3ZlclJlc3QoZnVuYywgc3RhcnQsIGlkZW50aXR5KSwgZnVuYyArICcnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlUmVzdDtcbiIsInZhciBMaXN0Q2FjaGUgPSByZXF1aXJlKCcuL19MaXN0Q2FjaGUnKTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBzdGFjay5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBTdGFja1xuICovXG5mdW5jdGlvbiBzdGFja0NsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gbmV3IExpc3RDYWNoZTtcbiAgdGhpcy5zaXplID0gMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja0NsZWFyO1xuIiwiLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgc3RhY2suXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gc3RhY2tEZWxldGUoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIHJlc3VsdCA9IGRhdGFbJ2RlbGV0ZSddKGtleSk7XG5cbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrRGVsZXRlO1xuIiwiLyoqXG4gKiBHZXRzIHRoZSBzdGFjayB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gc3RhY2tHZXQoa2V5KSB7XG4gIHJldHVybiB0aGlzLl9fZGF0YV9fLmdldChrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrR2V0O1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYSBzdGFjayB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrSGFzKGtleSkge1xuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja0hhcztcbiIsInZhciBMaXN0Q2FjaGUgPSByZXF1aXJlKCcuL19MaXN0Q2FjaGUnKSxcbiAgICBNYXAgPSByZXF1aXJlKCcuL19NYXAnKSxcbiAgICBNYXBDYWNoZSA9IHJlcXVpcmUoJy4vX01hcENhY2hlJyk7XG5cbi8qKiBVc2VkIGFzIHRoZSBzaXplIHRvIGVuYWJsZSBsYXJnZSBhcnJheSBvcHRpbWl6YXRpb25zLiAqL1xudmFyIExBUkdFX0FSUkFZX1NJWkUgPSAyMDA7XG5cbi8qKlxuICogU2V0cyB0aGUgc3RhY2sgYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgc3RhY2sgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICBpZiAoZGF0YSBpbnN0YW5jZW9mIExpc3RDYWNoZSkge1xuICAgIHZhciBwYWlycyA9IGRhdGEuX19kYXRhX187XG4gICAgaWYgKCFNYXAgfHwgKHBhaXJzLmxlbmd0aCA8IExBUkdFX0FSUkFZX1NJWkUgLSAxKSkge1xuICAgICAgcGFpcnMucHVzaChba2V5LCB2YWx1ZV0pO1xuICAgICAgdGhpcy5zaXplID0gKytkYXRhLnNpemU7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZGF0YSA9IHRoaXMuX19kYXRhX18gPSBuZXcgTWFwQ2FjaGUocGFpcnMpO1xuICB9XG4gIGRhdGEuc2V0KGtleSwgdmFsdWUpO1xuICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrU2V0O1xuIiwidmFyIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpLFxuICAgIHN0YWNrQ2xlYXIgPSByZXF1aXJlKCcuL19zdGFja0NsZWFyJyksXG4gICAgc3RhY2tEZWxldGUgPSByZXF1aXJlKCcuL19zdGFja0RlbGV0ZScpLFxuICAgIHN0YWNrR2V0ID0gcmVxdWlyZSgnLi9fc3RhY2tHZXQnKSxcbiAgICBzdGFja0hhcyA9IHJlcXVpcmUoJy4vX3N0YWNrSGFzJyksXG4gICAgc3RhY2tTZXQgPSByZXF1aXJlKCcuL19zdGFja1NldCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzdGFjayBjYWNoZSBvYmplY3QgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBTdGFjayhlbnRyaWVzKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyA9IG5ldyBMaXN0Q2FjaGUoZW50cmllcyk7XG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYFN0YWNrYC5cblN0YWNrLnByb3RvdHlwZS5jbGVhciA9IHN0YWNrQ2xlYXI7XG5TdGFjay5wcm90b3R5cGVbJ2RlbGV0ZSddID0gc3RhY2tEZWxldGU7XG5TdGFjay5wcm90b3R5cGUuZ2V0ID0gc3RhY2tHZXQ7XG5TdGFjay5wcm90b3R5cGUuaGFzID0gc3RhY2tIYXM7XG5TdGFjay5wcm90b3R5cGUuc2V0ID0gc3RhY2tTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gU3RhY2s7XG4iLCIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5zb21lYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWVcbiAqIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFueSBlbGVtZW50IHBhc3NlcyB0aGUgcHJlZGljYXRlIGNoZWNrLFxuICogIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlTb21lKGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGlmIChwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5U29tZTtcbiIsInZhciBTZXRDYWNoZSA9IHJlcXVpcmUoJy4vX1NldENhY2hlJyksXG4gICAgYXJyYXlTb21lID0gcmVxdWlyZSgnLi9fYXJyYXlTb21lJyksXG4gICAgY2FjaGVIYXMgPSByZXF1aXJlKCcuL19jYWNoZUhhcycpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDEsXG4gICAgQ09NUEFSRV9VTk9SREVSRURfRkxBRyA9IDI7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbERlZXBgIGZvciBhcnJheXMgd2l0aCBzdXBwb3J0IGZvclxuICogcGFydGlhbCBkZWVwIGNvbXBhcmlzb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7QXJyYXl9IG90aGVyIFRoZSBvdGhlciBhcnJheSB0byBjb21wYXJlLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgYXJyYXlgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGFycmF5cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBlcXVhbEFycmF5cyhhcnJheSwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spIHtcbiAgdmFyIGlzUGFydGlhbCA9IGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRyxcbiAgICAgIGFyckxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIG90aExlbmd0aCA9IG90aGVyLmxlbmd0aDtcblxuICBpZiAoYXJyTGVuZ3RoICE9IG90aExlbmd0aCAmJiAhKGlzUGFydGlhbCAmJiBvdGhMZW5ndGggPiBhcnJMZW5ndGgpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIENoZWNrIHRoYXQgY3ljbGljIHZhbHVlcyBhcmUgZXF1YWwuXG4gIHZhciBhcnJTdGFja2VkID0gc3RhY2suZ2V0KGFycmF5KTtcbiAgdmFyIG90aFN0YWNrZWQgPSBzdGFjay5nZXQob3RoZXIpO1xuICBpZiAoYXJyU3RhY2tlZCAmJiBvdGhTdGFja2VkKSB7XG4gICAgcmV0dXJuIGFyclN0YWNrZWQgPT0gb3RoZXIgJiYgb3RoU3RhY2tlZCA9PSBhcnJheTtcbiAgfVxuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IHRydWUsXG4gICAgICBzZWVuID0gKGJpdG1hc2sgJiBDT01QQVJFX1VOT1JERVJFRF9GTEFHKSA/IG5ldyBTZXRDYWNoZSA6IHVuZGVmaW5lZDtcblxuICBzdGFjay5zZXQoYXJyYXksIG90aGVyKTtcbiAgc3RhY2suc2V0KG90aGVyLCBhcnJheSk7XG5cbiAgLy8gSWdub3JlIG5vbi1pbmRleCBwcm9wZXJ0aWVzLlxuICB3aGlsZSAoKytpbmRleCA8IGFyckxlbmd0aCkge1xuICAgIHZhciBhcnJWYWx1ZSA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgb3RoVmFsdWUgPSBvdGhlcltpbmRleF07XG5cbiAgICBpZiAoY3VzdG9taXplcikge1xuICAgICAgdmFyIGNvbXBhcmVkID0gaXNQYXJ0aWFsXG4gICAgICAgID8gY3VzdG9taXplcihvdGhWYWx1ZSwgYXJyVmFsdWUsIGluZGV4LCBvdGhlciwgYXJyYXksIHN0YWNrKVxuICAgICAgICA6IGN1c3RvbWl6ZXIoYXJyVmFsdWUsIG90aFZhbHVlLCBpbmRleCwgYXJyYXksIG90aGVyLCBzdGFjayk7XG4gICAgfVxuICAgIGlmIChjb21wYXJlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoY29tcGFyZWQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIGFycmF5cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgIGlmIChzZWVuKSB7XG4gICAgICBpZiAoIWFycmF5U29tZShvdGhlciwgZnVuY3Rpb24ob3RoVmFsdWUsIG90aEluZGV4KSB7XG4gICAgICAgICAgICBpZiAoIWNhY2hlSGFzKHNlZW4sIG90aEluZGV4KSAmJlxuICAgICAgICAgICAgICAgIChhcnJWYWx1ZSA9PT0gb3RoVmFsdWUgfHwgZXF1YWxGdW5jKGFyclZhbHVlLCBvdGhWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spKSkge1xuICAgICAgICAgICAgICByZXR1cm4gc2Vlbi5wdXNoKG90aEluZGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSkge1xuICAgICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghKFxuICAgICAgICAgIGFyclZhbHVlID09PSBvdGhWYWx1ZSB8fFxuICAgICAgICAgICAgZXF1YWxGdW5jKGFyclZhbHVlLCBvdGhWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spXG4gICAgICAgICkpIHtcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHN0YWNrWydkZWxldGUnXShhcnJheSk7XG4gIHN0YWNrWydkZWxldGUnXShvdGhlcik7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXF1YWxBcnJheXM7XG4iLCJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgVWludDhBcnJheSA9IHJvb3QuVWludDhBcnJheTtcblxubW9kdWxlLmV4cG9ydHMgPSBVaW50OEFycmF5O1xuIiwiLyoqXG4gKiBDb252ZXJ0cyBgbWFwYCB0byBpdHMga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUga2V5LXZhbHVlIHBhaXJzLlxuICovXG5mdW5jdGlvbiBtYXBUb0FycmF5KG1hcCkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KG1hcC5zaXplKTtcblxuICBtYXAuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgcmVzdWx0WysraW5kZXhdID0gW2tleSwgdmFsdWVdO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBUb0FycmF5O1xuIiwiLyoqXG4gKiBDb252ZXJ0cyBgc2V0YCB0byBhbiBhcnJheSBvZiBpdHMgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc2V0IFRoZSBzZXQgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBzZXRUb0FycmF5KHNldCkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KHNldC5zaXplKTtcblxuICBzZXQuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJlc3VsdFsrK2luZGV4XSA9IHZhbHVlO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXRUb0FycmF5O1xuIiwidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpLFxuICAgIFVpbnQ4QXJyYXkgPSByZXF1aXJlKCcuL19VaW50OEFycmF5JyksXG4gICAgZXEgPSByZXF1aXJlKCcuL2VxJyksXG4gICAgZXF1YWxBcnJheXMgPSByZXF1aXJlKCcuL19lcXVhbEFycmF5cycpLFxuICAgIG1hcFRvQXJyYXkgPSByZXF1aXJlKCcuL19tYXBUb0FycmF5JyksXG4gICAgc2V0VG9BcnJheSA9IHJlcXVpcmUoJy4vX3NldFRvQXJyYXknKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcbiAgICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxuICAgIGVycm9yVGFnID0gJ1tvYmplY3QgRXJyb3JdJyxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJyxcbiAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJyxcbiAgICBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XSc7XG5cbi8qKiBVc2VkIHRvIGNvbnZlcnQgc3ltYm9scyB0byBwcmltaXRpdmVzIGFuZCBzdHJpbmdzLiAqL1xudmFyIHN5bWJvbFByb3RvID0gU3ltYm9sID8gU3ltYm9sLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcbiAgICBzeW1ib2xWYWx1ZU9mID0gc3ltYm9sUHJvdG8gPyBzeW1ib2xQcm90by52YWx1ZU9mIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3IgY29tcGFyaW5nIG9iamVjdHMgb2ZcbiAqIHRoZSBzYW1lIGB0b1N0cmluZ1RhZ2AuXG4gKlxuICogKipOb3RlOioqIFRoaXMgZnVuY3Rpb24gb25seSBzdXBwb3J0cyBjb21wYXJpbmcgdmFsdWVzIHdpdGggdGFncyBvZlxuICogYEJvb2xlYW5gLCBgRGF0ZWAsIGBFcnJvcmAsIGBOdW1iZXJgLCBgUmVnRXhwYCwgb3IgYFN0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSB0YWcgVGhlIGB0b1N0cmluZ1RhZ2Agb2YgdGhlIG9iamVjdHMgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYG9iamVjdGAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBlcXVhbEJ5VGFnKG9iamVjdCwgb3RoZXIsIHRhZywgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgZGF0YVZpZXdUYWc6XG4gICAgICBpZiAoKG9iamVjdC5ieXRlTGVuZ3RoICE9IG90aGVyLmJ5dGVMZW5ndGgpIHx8XG4gICAgICAgICAgKG9iamVjdC5ieXRlT2Zmc2V0ICE9IG90aGVyLmJ5dGVPZmZzZXQpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIG9iamVjdCA9IG9iamVjdC5idWZmZXI7XG4gICAgICBvdGhlciA9IG90aGVyLmJ1ZmZlcjtcblxuICAgIGNhc2UgYXJyYXlCdWZmZXJUYWc6XG4gICAgICBpZiAoKG9iamVjdC5ieXRlTGVuZ3RoICE9IG90aGVyLmJ5dGVMZW5ndGgpIHx8XG4gICAgICAgICAgIWVxdWFsRnVuYyhuZXcgVWludDhBcnJheShvYmplY3QpLCBuZXcgVWludDhBcnJheShvdGhlcikpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgY2FzZSBib29sVGFnOlxuICAgIGNhc2UgZGF0ZVRhZzpcbiAgICBjYXNlIG51bWJlclRhZzpcbiAgICAgIC8vIENvZXJjZSBib29sZWFucyB0byBgMWAgb3IgYDBgIGFuZCBkYXRlcyB0byBtaWxsaXNlY29uZHMuXG4gICAgICAvLyBJbnZhbGlkIGRhdGVzIGFyZSBjb2VyY2VkIHRvIGBOYU5gLlxuICAgICAgcmV0dXJuIGVxKCtvYmplY3QsICtvdGhlcik7XG5cbiAgICBjYXNlIGVycm9yVGFnOlxuICAgICAgcmV0dXJuIG9iamVjdC5uYW1lID09IG90aGVyLm5hbWUgJiYgb2JqZWN0Lm1lc3NhZ2UgPT0gb3RoZXIubWVzc2FnZTtcblxuICAgIGNhc2UgcmVnZXhwVGFnOlxuICAgIGNhc2Ugc3RyaW5nVGFnOlxuICAgICAgLy8gQ29lcmNlIHJlZ2V4ZXMgdG8gc3RyaW5ncyBhbmQgdHJlYXQgc3RyaW5ncywgcHJpbWl0aXZlcyBhbmQgb2JqZWN0cyxcbiAgICAgIC8vIGFzIGVxdWFsLiBTZWUgaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXJlZ2V4cC5wcm90b3R5cGUudG9zdHJpbmdcbiAgICAgIC8vIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICByZXR1cm4gb2JqZWN0ID09IChvdGhlciArICcnKTtcblxuICAgIGNhc2UgbWFwVGFnOlxuICAgICAgdmFyIGNvbnZlcnQgPSBtYXBUb0FycmF5O1xuXG4gICAgY2FzZSBzZXRUYWc6XG4gICAgICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHO1xuICAgICAgY29udmVydCB8fCAoY29udmVydCA9IHNldFRvQXJyYXkpO1xuXG4gICAgICBpZiAob2JqZWN0LnNpemUgIT0gb3RoZXIuc2l6ZSAmJiAhaXNQYXJ0aWFsKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIC8vIEFzc3VtZSBjeWNsaWMgdmFsdWVzIGFyZSBlcXVhbC5cbiAgICAgIHZhciBzdGFja2VkID0gc3RhY2suZ2V0KG9iamVjdCk7XG4gICAgICBpZiAoc3RhY2tlZCkge1xuICAgICAgICByZXR1cm4gc3RhY2tlZCA9PSBvdGhlcjtcbiAgICAgIH1cbiAgICAgIGJpdG1hc2sgfD0gQ09NUEFSRV9VTk9SREVSRURfRkxBRztcblxuICAgICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgICBzdGFjay5zZXQob2JqZWN0LCBvdGhlcik7XG4gICAgICB2YXIgcmVzdWx0ID0gZXF1YWxBcnJheXMoY29udmVydChvYmplY3QpLCBjb252ZXJ0KG90aGVyKSwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjayk7XG4gICAgICBzdGFja1snZGVsZXRlJ10ob2JqZWN0KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG5cbiAgICBjYXNlIHN5bWJvbFRhZzpcbiAgICAgIGlmIChzeW1ib2xWYWx1ZU9mKSB7XG4gICAgICAgIHJldHVybiBzeW1ib2xWYWx1ZU9mLmNhbGwob2JqZWN0KSA9PSBzeW1ib2xWYWx1ZU9mLmNhbGwob3RoZXIpO1xuICAgICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlcXVhbEJ5VGFnO1xuIiwidmFyIGFycmF5UHVzaCA9IHJlcXVpcmUoJy4vX2FycmF5UHVzaCcpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2V0QWxsS2V5c2AgYW5kIGBnZXRBbGxLZXlzSW5gIHdoaWNoIHVzZXNcbiAqIGBrZXlzRnVuY2AgYW5kIGBzeW1ib2xzRnVuY2AgdG8gZ2V0IHRoZSBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIGFuZFxuICogc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0ga2V5c0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUga2V5cyBvZiBgb2JqZWN0YC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN5bWJvbHNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0QWxsS2V5cyhvYmplY3QsIGtleXNGdW5jLCBzeW1ib2xzRnVuYykge1xuICB2YXIgcmVzdWx0ID0ga2V5c0Z1bmMob2JqZWN0KTtcbiAgcmV0dXJuIGlzQXJyYXkob2JqZWN0KSA/IHJlc3VsdCA6IGFycmF5UHVzaChyZXN1bHQsIHN5bWJvbHNGdW5jKG9iamVjdCkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VHZXRBbGxLZXlzO1xuIiwiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uZmlsdGVyYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmlsdGVyZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5RmlsdGVyKGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc0luZGV4ID0gMCxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuICAgIGlmIChwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBhcnJheSkpIHtcbiAgICAgIHJlc3VsdFtyZXNJbmRleCsrXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5RmlsdGVyO1xuIiwiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgbmV3IGVtcHR5IGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4xMy4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZW1wdHkgYXJyYXkuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBhcnJheXMgPSBfLnRpbWVzKDIsIF8uc3R1YkFycmF5KTtcbiAqXG4gKiBjb25zb2xlLmxvZyhhcnJheXMpO1xuICogLy8gPT4gW1tdLCBbXV1cbiAqXG4gKiBjb25zb2xlLmxvZyhhcnJheXNbMF0gPT09IGFycmF5c1sxXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBzdHViQXJyYXkoKSB7XG4gIHJldHVybiBbXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHViQXJyYXk7XG4iLCJ2YXIgYXJyYXlGaWx0ZXIgPSByZXF1aXJlKCcuL19hcnJheUZpbHRlcicpLFxuICAgIHN0dWJBcnJheSA9IHJlcXVpcmUoJy4vc3R1YkFycmF5Jyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVHZXRTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gZW51bWVyYWJsZSBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHN5bWJvbHMuXG4gKi9cbnZhciBnZXRTeW1ib2xzID0gIW5hdGl2ZUdldFN5bWJvbHMgPyBzdHViQXJyYXkgOiBmdW5jdGlvbihvYmplY3QpIHtcbiAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIG9iamVjdCA9IE9iamVjdChvYmplY3QpO1xuICByZXR1cm4gYXJyYXlGaWx0ZXIobmF0aXZlR2V0U3ltYm9scyhvYmplY3QpLCBmdW5jdGlvbihzeW1ib2wpIHtcbiAgICByZXR1cm4gcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmplY3QsIHN5bWJvbCk7XG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRTeW1ib2xzO1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50aW1lc2Agd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzXG4gKiBvciBtYXggYXJyYXkgbGVuZ3RoIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiB0aW1lcyB0byBpbnZva2UgYGl0ZXJhdGVlYC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHJlc3VsdHMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VUaW1lcyhuLCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KG4pO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbikge1xuICAgIHJlc3VsdFtpbmRleF0gPSBpdGVyYXRlZShpbmRleCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVGltZXM7XG4iLCIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgYGZhbHNlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMTMuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udGltZXMoMiwgXy5zdHViRmFsc2UpO1xuICogLy8gPT4gW2ZhbHNlLCBmYWxzZV1cbiAqL1xuZnVuY3Rpb24gc3R1YkZhbHNlKCkge1xuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3R1YkZhbHNlO1xuIiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290JyksXG4gICAgc3R1YkZhbHNlID0gcmVxdWlyZSgnLi9zdHViRmFsc2UnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cbnZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xudmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcblxuLyoqIERldGVjdCB0aGUgcG9wdWxhciBDb21tb25KUyBleHRlbnNpb24gYG1vZHVsZS5leHBvcnRzYC4gKi9cbnZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBCdWZmZXIgPSBtb2R1bGVFeHBvcnRzID8gcm9vdC5CdWZmZXIgOiB1bmRlZmluZWQ7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVJc0J1ZmZlciA9IEJ1ZmZlciA/IEJ1ZmZlci5pc0J1ZmZlciA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIGJ1ZmZlci5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMy4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGJ1ZmZlciwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQnVmZmVyKG5ldyBCdWZmZXIoMikpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNCdWZmZXIobmV3IFVpbnQ4QXJyYXkoMikpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQnVmZmVyID0gbmF0aXZlSXNCdWZmZXIgfHwgc3R1YkZhbHNlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQnVmZmVyO1xuIiwiLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlcy4gKi9cbnZhciByZUlzVWludCA9IC9eKD86MHxbMS05XVxcZCopJC87XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGluZGV4LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoPU1BWF9TQUZFX0lOVEVHRVJdIFRoZSB1cHBlciBib3VuZHMgb2YgYSB2YWxpZCBpbmRleC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgaW5kZXgsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNJbmRleCh2YWx1ZSwgbGVuZ3RoKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICBsZW5ndGggPSBsZW5ndGggPT0gbnVsbCA/IE1BWF9TQUZFX0lOVEVHRVIgOiBsZW5ndGg7XG5cbiAgcmV0dXJuICEhbGVuZ3RoICYmXG4gICAgKHR5cGUgPT0gJ251bWJlcicgfHxcbiAgICAgICh0eXBlICE9ICdzeW1ib2wnICYmIHJlSXNVaW50LnRlc3QodmFsdWUpKSkgJiZcbiAgICAgICAgKHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPCBsZW5ndGgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzSW5kZXg7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc0xlbmd0aCA9IHJlcXVpcmUoJy4vaXNMZW5ndGgnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nLFxuICAgIGFycmF5VGFnID0gJ1tvYmplY3QgQXJyYXldJyxcbiAgICBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgIGRhdGVUYWcgPSAnW29iamVjdCBEYXRlXScsXG4gICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG51bWJlclRhZyA9ICdbb2JqZWN0IE51bWJlcl0nLFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nLFxuICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxuICAgIHdlYWtNYXBUYWcgPSAnW29iamVjdCBXZWFrTWFwXSc7XG5cbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXG4gICAgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nLFxuICAgIGZsb2F0MzJUYWcgPSAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICBmbG9hdDY0VGFnID0gJ1tvYmplY3QgRmxvYXQ2NEFycmF5XScsXG4gICAgaW50OFRhZyA9ICdbb2JqZWN0IEludDhBcnJheV0nLFxuICAgIGludDE2VGFnID0gJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgIGludDMyVGFnID0gJ1tvYmplY3QgSW50MzJBcnJheV0nLFxuICAgIHVpbnQ4VGFnID0gJ1tvYmplY3QgVWludDhBcnJheV0nLFxuICAgIHVpbnQ4Q2xhbXBlZFRhZyA9ICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXG4gICAgdWludDE2VGFnID0gJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICB1aW50MzJUYWcgPSAnW29iamVjdCBVaW50MzJBcnJheV0nO1xuXG4vKiogVXNlZCB0byBpZGVudGlmeSBgdG9TdHJpbmdUYWdgIHZhbHVlcyBvZiB0eXBlZCBhcnJheXMuICovXG52YXIgdHlwZWRBcnJheVRhZ3MgPSB7fTtcbnR5cGVkQXJyYXlUYWdzW2Zsb2F0MzJUYWddID0gdHlwZWRBcnJheVRhZ3NbZmxvYXQ2NFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbaW50OFRhZ10gPSB0eXBlZEFycmF5VGFnc1tpbnQxNlRhZ10gPVxudHlwZWRBcnJheVRhZ3NbaW50MzJUYWddID0gdHlwZWRBcnJheVRhZ3NbdWludDhUYWddID1cbnR5cGVkQXJyYXlUYWdzW3VpbnQ4Q2xhbXBlZFRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50MTZUYWddID1cbnR5cGVkQXJyYXlUYWdzW3VpbnQzMlRhZ10gPSB0cnVlO1xudHlwZWRBcnJheVRhZ3NbYXJnc1RhZ10gPSB0eXBlZEFycmF5VGFnc1thcnJheVRhZ10gPVxudHlwZWRBcnJheVRhZ3NbYXJyYXlCdWZmZXJUYWddID0gdHlwZWRBcnJheVRhZ3NbYm9vbFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbZGF0YVZpZXdUYWddID0gdHlwZWRBcnJheVRhZ3NbZGF0ZVRhZ10gPVxudHlwZWRBcnJheVRhZ3NbZXJyb3JUYWddID0gdHlwZWRBcnJheVRhZ3NbZnVuY1RhZ10gPVxudHlwZWRBcnJheVRhZ3NbbWFwVGFnXSA9IHR5cGVkQXJyYXlUYWdzW251bWJlclRhZ10gPVxudHlwZWRBcnJheVRhZ3Nbb2JqZWN0VGFnXSA9IHR5cGVkQXJyYXlUYWdzW3JlZ2V4cFRhZ10gPVxudHlwZWRBcnJheVRhZ3Nbc2V0VGFnXSA9IHR5cGVkQXJyYXlUYWdzW3N0cmluZ1RhZ10gPVxudHlwZWRBcnJheVRhZ3Nbd2Vha01hcFRhZ10gPSBmYWxzZTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc1R5cGVkQXJyYXlgIHdpdGhvdXQgTm9kZS5qcyBvcHRpbWl6YXRpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzVHlwZWRBcnJheSh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJlxuICAgIGlzTGVuZ3RoKHZhbHVlLmxlbmd0aCkgJiYgISF0eXBlZEFycmF5VGFnc1tiYXNlR2V0VGFnKHZhbHVlKV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzVHlwZWRBcnJheTtcbiIsInZhciBmcmVlR2xvYmFsID0gcmVxdWlyZSgnLi9fZnJlZUdsb2JhbCcpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgcHJvY2Vzc2AgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVQcm9jZXNzID0gbW9kdWxlRXhwb3J0cyAmJiBmcmVlR2xvYmFsLnByb2Nlc3M7XG5cbi8qKiBVc2VkIHRvIGFjY2VzcyBmYXN0ZXIgTm9kZS5qcyBoZWxwZXJzLiAqL1xudmFyIG5vZGVVdGlsID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIC8vIFVzZSBgdXRpbC50eXBlc2AgZm9yIE5vZGUuanMgMTArLlxuICAgIHZhciB0eXBlcyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlICYmIGZyZWVNb2R1bGUucmVxdWlyZSgndXRpbCcpLnR5cGVzO1xuXG4gICAgaWYgKHR5cGVzKSB7XG4gICAgICByZXR1cm4gdHlwZXM7XG4gICAgfVxuXG4gICAgLy8gTGVnYWN5IGBwcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKWAgZm9yIE5vZGUuanMgPCAxMC5cbiAgICByZXR1cm4gZnJlZVByb2Nlc3MgJiYgZnJlZVByb2Nlc3MuYmluZGluZyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nKCd1dGlsJyk7XG4gIH0gY2F0Y2ggKGUpIHt9XG59KCkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5vZGVVdGlsO1xuIiwidmFyIGJhc2VJc1R5cGVkQXJyYXkgPSByZXF1aXJlKCcuL19iYXNlSXNUeXBlZEFycmF5JyksXG4gICAgYmFzZVVuYXJ5ID0gcmVxdWlyZSgnLi9fYmFzZVVuYXJ5JyksXG4gICAgbm9kZVV0aWwgPSByZXF1aXJlKCcuL19ub2RlVXRpbCcpO1xuXG4vKiBOb2RlLmpzIGhlbHBlciByZWZlcmVuY2VzLiAqL1xudmFyIG5vZGVJc1R5cGVkQXJyYXkgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc1R5cGVkQXJyYXk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIHR5cGVkIGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1R5cGVkQXJyYXkobmV3IFVpbnQ4QXJyYXkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNUeXBlZEFycmF5KFtdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc1R5cGVkQXJyYXkgPSBub2RlSXNUeXBlZEFycmF5ID8gYmFzZVVuYXJ5KG5vZGVJc1R5cGVkQXJyYXkpIDogYmFzZUlzVHlwZWRBcnJheTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc1R5cGVkQXJyYXk7XG4iLCJ2YXIgYmFzZVRpbWVzID0gcmVxdWlyZSgnLi9fYmFzZVRpbWVzJyksXG4gICAgaXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzQnVmZmVyID0gcmVxdWlyZSgnLi9pc0J1ZmZlcicpLFxuICAgIGlzSW5kZXggPSByZXF1aXJlKCcuL19pc0luZGV4JyksXG4gICAgaXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9pc1R5cGVkQXJyYXknKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIHRoZSBhcnJheS1saWtlIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtib29sZWFufSBpbmhlcml0ZWQgU3BlY2lmeSByZXR1cm5pbmcgaW5oZXJpdGVkIHByb3BlcnR5IG5hbWVzLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYXJyYXlMaWtlS2V5cyh2YWx1ZSwgaW5oZXJpdGVkKSB7XG4gIHZhciBpc0FyciA9IGlzQXJyYXkodmFsdWUpLFxuICAgICAgaXNBcmcgPSAhaXNBcnIgJiYgaXNBcmd1bWVudHModmFsdWUpLFxuICAgICAgaXNCdWZmID0gIWlzQXJyICYmICFpc0FyZyAmJiBpc0J1ZmZlcih2YWx1ZSksXG4gICAgICBpc1R5cGUgPSAhaXNBcnIgJiYgIWlzQXJnICYmICFpc0J1ZmYgJiYgaXNUeXBlZEFycmF5KHZhbHVlKSxcbiAgICAgIHNraXBJbmRleGVzID0gaXNBcnIgfHwgaXNBcmcgfHwgaXNCdWZmIHx8IGlzVHlwZSxcbiAgICAgIHJlc3VsdCA9IHNraXBJbmRleGVzID8gYmFzZVRpbWVzKHZhbHVlLmxlbmd0aCwgU3RyaW5nKSA6IFtdLFxuICAgICAgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcblxuICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICBpZiAoKGluaGVyaXRlZCB8fCBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrZXkpKSAmJlxuICAgICAgICAhKHNraXBJbmRleGVzICYmIChcbiAgICAgICAgICAgLy8gU2FmYXJpIDkgaGFzIGVudW1lcmFibGUgYGFyZ3VtZW50cy5sZW5ndGhgIGluIHN0cmljdCBtb2RlLlxuICAgICAgICAgICBrZXkgPT0gJ2xlbmd0aCcgfHxcbiAgICAgICAgICAgLy8gTm9kZS5qcyAwLjEwIGhhcyBlbnVtZXJhYmxlIG5vbi1pbmRleCBwcm9wZXJ0aWVzIG9uIGJ1ZmZlcnMuXG4gICAgICAgICAgIChpc0J1ZmYgJiYgKGtleSA9PSAnb2Zmc2V0JyB8fCBrZXkgPT0gJ3BhcmVudCcpKSB8fFxuICAgICAgICAgICAvLyBQaGFudG9tSlMgMiBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiB0eXBlZCBhcnJheXMuXG4gICAgICAgICAgIChpc1R5cGUgJiYgKGtleSA9PSAnYnVmZmVyJyB8fCBrZXkgPT0gJ2J5dGVMZW5ndGgnIHx8IGtleSA9PSAnYnl0ZU9mZnNldCcpKSB8fFxuICAgICAgICAgICAvLyBTa2lwIGluZGV4IHByb3BlcnRpZXMuXG4gICAgICAgICAgIGlzSW5kZXgoa2V5LCBsZW5ndGgpXG4gICAgICAgICkpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5TGlrZUtleXM7XG4iLCIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhIHByb3RvdHlwZSBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwcm90b3R5cGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNQcm90b3R5cGUodmFsdWUpIHtcbiAgdmFyIEN0b3IgPSB2YWx1ZSAmJiB2YWx1ZS5jb25zdHJ1Y3RvcixcbiAgICAgIHByb3RvID0gKHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3Rvci5wcm90b3R5cGUpIHx8IG9iamVjdFByb3RvO1xuXG4gIHJldHVybiB2YWx1ZSA9PT0gcHJvdG87XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNQcm90b3R5cGU7XG4iLCIvKipcbiAqIENyZWF0ZXMgYSB1bmFyeSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggaXRzIGFyZ3VtZW50IHRyYW5zZm9ybWVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNmb3JtIFRoZSBhcmd1bWVudCB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlckFyZyhmdW5jLCB0cmFuc2Zvcm0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiBmdW5jKHRyYW5zZm9ybShhcmcpKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvdmVyQXJnO1xuIiwidmFyIG92ZXJBcmcgPSByZXF1aXJlKCcuL19vdmVyQXJnJyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVLZXlzID0gb3ZlckFyZyhPYmplY3Qua2V5cywgT2JqZWN0KTtcblxubW9kdWxlLmV4cG9ydHMgPSBuYXRpdmVLZXlzO1xuIiwidmFyIGlzUHJvdG90eXBlID0gcmVxdWlyZSgnLi9faXNQcm90b3R5cGUnKSxcbiAgICBuYXRpdmVLZXlzID0gcmVxdWlyZSgnLi9fbmF0aXZlS2V5cycpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmtleXNgIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYmFzZUtleXMob2JqZWN0KSB7XG4gIGlmICghaXNQcm90b3R5cGUob2JqZWN0KSkge1xuICAgIHJldHVybiBuYXRpdmVLZXlzKG9iamVjdCk7XG4gIH1cbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gT2JqZWN0KG9iamVjdCkpIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYga2V5ICE9ICdjb25zdHJ1Y3RvcicpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUtleXM7XG4iLCJ2YXIgYXJyYXlMaWtlS2V5cyA9IHJlcXVpcmUoJy4vX2FycmF5TGlrZUtleXMnKSxcbiAgICBiYXNlS2V5cyA9IHJlcXVpcmUoJy4vX2Jhc2VLZXlzJyksXG4gICAgaXNBcnJheUxpa2UgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgYG9iamVjdGAuXG4gKlxuICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuIFNlZSB0aGVcbiAqIFtFUyBzcGVjXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3Qua2V5cylcbiAqIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy5rZXlzKG5ldyBGb28pO1xuICogLy8gPT4gWydhJywgJ2InXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICpcbiAqIF8ua2V5cygnaGknKTtcbiAqIC8vID0+IFsnMCcsICcxJ11cbiAqL1xuZnVuY3Rpb24ga2V5cyhvYmplY3QpIHtcbiAgcmV0dXJuIGlzQXJyYXlMaWtlKG9iamVjdCkgPyBhcnJheUxpa2VLZXlzKG9iamVjdCkgOiBiYXNlS2V5cyhvYmplY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGtleXM7XG4iLCJ2YXIgYmFzZUdldEFsbEtleXMgPSByZXF1aXJlKCcuL19iYXNlR2V0QWxsS2V5cycpLFxuICAgIGdldFN5bWJvbHMgPSByZXF1aXJlKCcuL19nZXRTeW1ib2xzJyksXG4gICAga2V5cyA9IHJlcXVpcmUoJy4va2V5cycpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2Ygb3duIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMgYW5kIHN5bWJvbHMuXG4gKi9cbmZ1bmN0aW9uIGdldEFsbEtleXMob2JqZWN0KSB7XG4gIHJldHVybiBiYXNlR2V0QWxsS2V5cyhvYmplY3QsIGtleXMsIGdldFN5bWJvbHMpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEFsbEtleXM7XG4iLCJ2YXIgZ2V0QWxsS2V5cyA9IHJlcXVpcmUoJy4vX2dldEFsbEtleXMnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3Igb2JqZWN0cyB3aXRoIHN1cHBvcnQgZm9yXG4gKiBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYG9iamVjdGAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBlcXVhbE9iamVjdHMob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHLFxuICAgICAgb2JqUHJvcHMgPSBnZXRBbGxLZXlzKG9iamVjdCksXG4gICAgICBvYmpMZW5ndGggPSBvYmpQcm9wcy5sZW5ndGgsXG4gICAgICBvdGhQcm9wcyA9IGdldEFsbEtleXMob3RoZXIpLFxuICAgICAgb3RoTGVuZ3RoID0gb3RoUHJvcHMubGVuZ3RoO1xuXG4gIGlmIChvYmpMZW5ndGggIT0gb3RoTGVuZ3RoICYmICFpc1BhcnRpYWwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIGluZGV4ID0gb2JqTGVuZ3RoO1xuICB3aGlsZSAoaW5kZXgtLSkge1xuICAgIHZhciBrZXkgPSBvYmpQcm9wc1tpbmRleF07XG4gICAgaWYgKCEoaXNQYXJ0aWFsID8ga2V5IGluIG90aGVyIDogaGFzT3duUHJvcGVydHkuY2FsbChvdGhlciwga2V5KSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgLy8gQ2hlY2sgdGhhdCBjeWNsaWMgdmFsdWVzIGFyZSBlcXVhbC5cbiAgdmFyIG9ialN0YWNrZWQgPSBzdGFjay5nZXQob2JqZWN0KTtcbiAgdmFyIG90aFN0YWNrZWQgPSBzdGFjay5nZXQob3RoZXIpO1xuICBpZiAob2JqU3RhY2tlZCAmJiBvdGhTdGFja2VkKSB7XG4gICAgcmV0dXJuIG9ialN0YWNrZWQgPT0gb3RoZXIgJiYgb3RoU3RhY2tlZCA9PSBvYmplY3Q7XG4gIH1cbiAgdmFyIHJlc3VsdCA9IHRydWU7XG4gIHN0YWNrLnNldChvYmplY3QsIG90aGVyKTtcbiAgc3RhY2suc2V0KG90aGVyLCBvYmplY3QpO1xuXG4gIHZhciBza2lwQ3RvciA9IGlzUGFydGlhbDtcbiAgd2hpbGUgKCsraW5kZXggPCBvYmpMZW5ndGgpIHtcbiAgICBrZXkgPSBvYmpQcm9wc1tpbmRleF07XG4gICAgdmFyIG9ialZhbHVlID0gb2JqZWN0W2tleV0sXG4gICAgICAgIG90aFZhbHVlID0gb3RoZXJba2V5XTtcblxuICAgIGlmIChjdXN0b21pemVyKSB7XG4gICAgICB2YXIgY29tcGFyZWQgPSBpc1BhcnRpYWxcbiAgICAgICAgPyBjdXN0b21pemVyKG90aFZhbHVlLCBvYmpWYWx1ZSwga2V5LCBvdGhlciwgb2JqZWN0LCBzdGFjaylcbiAgICAgICAgOiBjdXN0b21pemVyKG9ialZhbHVlLCBvdGhWYWx1ZSwga2V5LCBvYmplY3QsIG90aGVyLCBzdGFjayk7XG4gICAgfVxuICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgb2JqZWN0cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgIGlmICghKGNvbXBhcmVkID09PSB1bmRlZmluZWRcbiAgICAgICAgICA/IChvYmpWYWx1ZSA9PT0gb3RoVmFsdWUgfHwgZXF1YWxGdW5jKG9ialZhbHVlLCBvdGhWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spKVxuICAgICAgICAgIDogY29tcGFyZWRcbiAgICAgICAgKSkge1xuICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgc2tpcEN0b3IgfHwgKHNraXBDdG9yID0ga2V5ID09ICdjb25zdHJ1Y3RvcicpO1xuICB9XG4gIGlmIChyZXN1bHQgJiYgIXNraXBDdG9yKSB7XG4gICAgdmFyIG9iakN0b3IgPSBvYmplY3QuY29uc3RydWN0b3IsXG4gICAgICAgIG90aEN0b3IgPSBvdGhlci5jb25zdHJ1Y3RvcjtcblxuICAgIC8vIE5vbiBgT2JqZWN0YCBvYmplY3QgaW5zdGFuY2VzIHdpdGggZGlmZmVyZW50IGNvbnN0cnVjdG9ycyBhcmUgbm90IGVxdWFsLlxuICAgIGlmIChvYmpDdG9yICE9IG90aEN0b3IgJiZcbiAgICAgICAgKCdjb25zdHJ1Y3RvcicgaW4gb2JqZWN0ICYmICdjb25zdHJ1Y3RvcicgaW4gb3RoZXIpICYmXG4gICAgICAgICEodHlwZW9mIG9iakN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBvYmpDdG9yIGluc3RhbmNlb2Ygb2JqQ3RvciAmJlxuICAgICAgICAgIHR5cGVvZiBvdGhDdG9yID09ICdmdW5jdGlvbicgJiYgb3RoQ3RvciBpbnN0YW5jZW9mIG90aEN0b3IpKSB7XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgc3RhY2tbJ2RlbGV0ZSddKG9iamVjdCk7XG4gIHN0YWNrWydkZWxldGUnXShvdGhlcik7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXF1YWxPYmplY3RzO1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBEYXRhVmlldyA9IGdldE5hdGl2ZShyb290LCAnRGF0YVZpZXcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBEYXRhVmlldztcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgUHJvbWlzZSA9IGdldE5hdGl2ZShyb290LCAnUHJvbWlzZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFByb21pc2U7XG4iLCJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIFNldCA9IGdldE5hdGl2ZShyb290LCAnU2V0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gU2V0O1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBXZWFrTWFwID0gZ2V0TmF0aXZlKHJvb3QsICdXZWFrTWFwJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gV2Vha01hcDtcbiIsInZhciBEYXRhVmlldyA9IHJlcXVpcmUoJy4vX0RhdGFWaWV3JyksXG4gICAgTWFwID0gcmVxdWlyZSgnLi9fTWFwJyksXG4gICAgUHJvbWlzZSA9IHJlcXVpcmUoJy4vX1Byb21pc2UnKSxcbiAgICBTZXQgPSByZXF1aXJlKCcuL19TZXQnKSxcbiAgICBXZWFrTWFwID0gcmVxdWlyZSgnLi9fV2Vha01hcCcpLFxuICAgIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgdG9Tb3VyY2UgPSByZXF1aXJlKCcuL190b1NvdXJjZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXG4gICAgcHJvbWlzZVRhZyA9ICdbb2JqZWN0IFByb21pc2VdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICB3ZWFrTWFwVGFnID0gJ1tvYmplY3QgV2Vha01hcF0nO1xuXG52YXIgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgbWFwcywgc2V0cywgYW5kIHdlYWttYXBzLiAqL1xudmFyIGRhdGFWaWV3Q3RvclN0cmluZyA9IHRvU291cmNlKERhdGFWaWV3KSxcbiAgICBtYXBDdG9yU3RyaW5nID0gdG9Tb3VyY2UoTWFwKSxcbiAgICBwcm9taXNlQ3RvclN0cmluZyA9IHRvU291cmNlKFByb21pc2UpLFxuICAgIHNldEN0b3JTdHJpbmcgPSB0b1NvdXJjZShTZXQpLFxuICAgIHdlYWtNYXBDdG9yU3RyaW5nID0gdG9Tb3VyY2UoV2Vha01hcCk7XG5cbi8qKlxuICogR2V0cyB0aGUgYHRvU3RyaW5nVGFnYCBvZiBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGB0b1N0cmluZ1RhZ2AuXG4gKi9cbnZhciBnZXRUYWcgPSBiYXNlR2V0VGFnO1xuXG4vLyBGYWxsYmFjayBmb3IgZGF0YSB2aWV3cywgbWFwcywgc2V0cywgYW5kIHdlYWsgbWFwcyBpbiBJRSAxMSBhbmQgcHJvbWlzZXMgaW4gTm9kZS5qcyA8IDYuXG5pZiAoKERhdGFWaWV3ICYmIGdldFRhZyhuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKDEpKSkgIT0gZGF0YVZpZXdUYWcpIHx8XG4gICAgKE1hcCAmJiBnZXRUYWcobmV3IE1hcCkgIT0gbWFwVGFnKSB8fFxuICAgIChQcm9taXNlICYmIGdldFRhZyhQcm9taXNlLnJlc29sdmUoKSkgIT0gcHJvbWlzZVRhZykgfHxcbiAgICAoU2V0ICYmIGdldFRhZyhuZXcgU2V0KSAhPSBzZXRUYWcpIHx8XG4gICAgKFdlYWtNYXAgJiYgZ2V0VGFnKG5ldyBXZWFrTWFwKSAhPSB3ZWFrTWFwVGFnKSkge1xuICBnZXRUYWcgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHZhciByZXN1bHQgPSBiYXNlR2V0VGFnKHZhbHVlKSxcbiAgICAgICAgQ3RvciA9IHJlc3VsdCA9PSBvYmplY3RUYWcgPyB2YWx1ZS5jb25zdHJ1Y3RvciA6IHVuZGVmaW5lZCxcbiAgICAgICAgY3RvclN0cmluZyA9IEN0b3IgPyB0b1NvdXJjZShDdG9yKSA6ICcnO1xuXG4gICAgaWYgKGN0b3JTdHJpbmcpIHtcbiAgICAgIHN3aXRjaCAoY3RvclN0cmluZykge1xuICAgICAgICBjYXNlIGRhdGFWaWV3Q3RvclN0cmluZzogcmV0dXJuIGRhdGFWaWV3VGFnO1xuICAgICAgICBjYXNlIG1hcEN0b3JTdHJpbmc6IHJldHVybiBtYXBUYWc7XG4gICAgICAgIGNhc2UgcHJvbWlzZUN0b3JTdHJpbmc6IHJldHVybiBwcm9taXNlVGFnO1xuICAgICAgICBjYXNlIHNldEN0b3JTdHJpbmc6IHJldHVybiBzZXRUYWc7XG4gICAgICAgIGNhc2Ugd2Vha01hcEN0b3JTdHJpbmc6IHJldHVybiB3ZWFrTWFwVGFnO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFRhZztcbiIsInZhciBTdGFjayA9IHJlcXVpcmUoJy4vX1N0YWNrJyksXG4gICAgZXF1YWxBcnJheXMgPSByZXF1aXJlKCcuL19lcXVhbEFycmF5cycpLFxuICAgIGVxdWFsQnlUYWcgPSByZXF1aXJlKCcuL19lcXVhbEJ5VGFnJyksXG4gICAgZXF1YWxPYmplY3RzID0gcmVxdWlyZSgnLi9fZXF1YWxPYmplY3RzJyksXG4gICAgZ2V0VGFnID0gcmVxdWlyZSgnLi9fZ2V0VGFnJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzQnVmZmVyID0gcmVxdWlyZSgnLi9pc0J1ZmZlcicpLFxuICAgIGlzVHlwZWRBcnJheSA9IHJlcXVpcmUoJy4vaXNUeXBlZEFycmF5Jyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJyxcbiAgICBhcnJheVRhZyA9ICdbb2JqZWN0IEFycmF5XScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XSc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbGAgZm9yIGFycmF5cyBhbmQgb2JqZWN0cyB3aGljaCBwZXJmb3Jtc1xuICogZGVlcCBjb21wYXJpc29ucyBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzIGVuYWJsaW5nIG9iamVjdHMgd2l0aCBjaXJjdWxhclxuICogcmVmZXJlbmNlcyB0byBiZSBjb21wYXJlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIGBvYmplY3RgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdHMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzRXF1YWxEZWVwKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spIHtcbiAgdmFyIG9iaklzQXJyID0gaXNBcnJheShvYmplY3QpLFxuICAgICAgb3RoSXNBcnIgPSBpc0FycmF5KG90aGVyKSxcbiAgICAgIG9ialRhZyA9IG9iaklzQXJyID8gYXJyYXlUYWcgOiBnZXRUYWcob2JqZWN0KSxcbiAgICAgIG90aFRhZyA9IG90aElzQXJyID8gYXJyYXlUYWcgOiBnZXRUYWcob3RoZXIpO1xuXG4gIG9ialRhZyA9IG9ialRhZyA9PSBhcmdzVGFnID8gb2JqZWN0VGFnIDogb2JqVGFnO1xuICBvdGhUYWcgPSBvdGhUYWcgPT0gYXJnc1RhZyA/IG9iamVjdFRhZyA6IG90aFRhZztcblxuICB2YXIgb2JqSXNPYmogPSBvYmpUYWcgPT0gb2JqZWN0VGFnLFxuICAgICAgb3RoSXNPYmogPSBvdGhUYWcgPT0gb2JqZWN0VGFnLFxuICAgICAgaXNTYW1lVGFnID0gb2JqVGFnID09IG90aFRhZztcblxuICBpZiAoaXNTYW1lVGFnICYmIGlzQnVmZmVyKG9iamVjdCkpIHtcbiAgICBpZiAoIWlzQnVmZmVyKG90aGVyKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBvYmpJc0FyciA9IHRydWU7XG4gICAgb2JqSXNPYmogPSBmYWxzZTtcbiAgfVxuICBpZiAoaXNTYW1lVGFnICYmICFvYmpJc09iaikge1xuICAgIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gICAgcmV0dXJuIChvYmpJc0FyciB8fCBpc1R5cGVkQXJyYXkob2JqZWN0KSlcbiAgICAgID8gZXF1YWxBcnJheXMob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaylcbiAgICAgIDogZXF1YWxCeVRhZyhvYmplY3QsIG90aGVyLCBvYmpUYWcsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spO1xuICB9XG4gIGlmICghKGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRykpIHtcbiAgICB2YXIgb2JqSXNXcmFwcGVkID0gb2JqSXNPYmogJiYgaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsICdfX3dyYXBwZWRfXycpLFxuICAgICAgICBvdGhJc1dyYXBwZWQgPSBvdGhJc09iaiAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG90aGVyLCAnX193cmFwcGVkX18nKTtcblxuICAgIGlmIChvYmpJc1dyYXBwZWQgfHwgb3RoSXNXcmFwcGVkKSB7XG4gICAgICB2YXIgb2JqVW53cmFwcGVkID0gb2JqSXNXcmFwcGVkID8gb2JqZWN0LnZhbHVlKCkgOiBvYmplY3QsXG4gICAgICAgICAgb3RoVW53cmFwcGVkID0gb3RoSXNXcmFwcGVkID8gb3RoZXIudmFsdWUoKSA6IG90aGVyO1xuXG4gICAgICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgU3RhY2spO1xuICAgICAgcmV0dXJuIGVxdWFsRnVuYyhvYmpVbndyYXBwZWQsIG90aFVud3JhcHBlZCwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spO1xuICAgIH1cbiAgfVxuICBpZiAoIWlzU2FtZVRhZykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgU3RhY2spO1xuICByZXR1cm4gZXF1YWxPYmplY3RzKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc0VxdWFsRGVlcDtcbiIsInZhciBiYXNlSXNFcXVhbERlZXAgPSByZXF1aXJlKCcuL19iYXNlSXNFcXVhbERlZXAnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzRXF1YWxgIHdoaWNoIHN1cHBvcnRzIHBhcnRpYWwgY29tcGFyaXNvbnNcbiAqIGFuZCB0cmFja3MgdHJhdmVyc2VkIG9iamVjdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHtib29sZWFufSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLlxuICogIDEgLSBVbm9yZGVyZWQgY29tcGFyaXNvblxuICogIDIgLSBQYXJ0aWFsIGNvbXBhcmlzb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBgdmFsdWVgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNFcXVhbCh2YWx1ZSwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKSB7XG4gIGlmICh2YWx1ZSA9PT0gb3RoZXIpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAodmFsdWUgPT0gbnVsbCB8fCBvdGhlciA9PSBudWxsIHx8ICghaXNPYmplY3RMaWtlKHZhbHVlKSAmJiAhaXNPYmplY3RMaWtlKG90aGVyKSkpIHtcbiAgICByZXR1cm4gdmFsdWUgIT09IHZhbHVlICYmIG90aGVyICE9PSBvdGhlcjtcbiAgfVxuICByZXR1cm4gYmFzZUlzRXF1YWxEZWVwKHZhbHVlLCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgYmFzZUlzRXF1YWwsIHN0YWNrKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNFcXVhbDtcbiIsInZhciBiYXNlSXNFcXVhbCA9IHJlcXVpcmUoJy4vX2Jhc2VJc0VxdWFsJyk7XG5cbi8qKlxuICogUGVyZm9ybXMgYSBkZWVwIGNvbXBhcmlzb24gYmV0d2VlbiB0d28gdmFsdWVzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZVxuICogZXF1aXZhbGVudC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2Qgc3VwcG9ydHMgY29tcGFyaW5nIGFycmF5cywgYXJyYXkgYnVmZmVycywgYm9vbGVhbnMsXG4gKiBkYXRlIG9iamVjdHMsIGVycm9yIG9iamVjdHMsIG1hcHMsIG51bWJlcnMsIGBPYmplY3RgIG9iamVjdHMsIHJlZ2V4ZXMsXG4gKiBzZXRzLCBzdHJpbmdzLCBzeW1ib2xzLCBhbmQgdHlwZWQgYXJyYXlzLiBgT2JqZWN0YCBvYmplY3RzIGFyZSBjb21wYXJlZFxuICogYnkgdGhlaXIgb3duLCBub3QgaW5oZXJpdGVkLCBlbnVtZXJhYmxlIHByb3BlcnRpZXMuIEZ1bmN0aW9ucyBhbmQgRE9NXG4gKiBub2RlcyBhcmUgY29tcGFyZWQgYnkgc3RyaWN0IGVxdWFsaXR5LCBpLmUuIGA9PT1gLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICogdmFyIG90aGVyID0geyAnYSc6IDEgfTtcbiAqXG4gKiBfLmlzRXF1YWwob2JqZWN0LCBvdGhlcik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogb2JqZWN0ID09PSBvdGhlcjtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRXF1YWwodmFsdWUsIG90aGVyKSB7XG4gIHJldHVybiBiYXNlSXNFcXVhbCh2YWx1ZSwgb3RoZXIpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRXF1YWw7XG4iLCJ2YXIgYmFzZUtleXMgPSByZXF1aXJlKCcuL19iYXNlS2V5cycpLFxuICAgIGdldFRhZyA9IHJlcXVpcmUoJy4vX2dldFRhZycpLFxuICAgIGlzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9pc0FyZ3VtZW50cycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKSxcbiAgICBpc0J1ZmZlciA9IHJlcXVpcmUoJy4vaXNCdWZmZXInKSxcbiAgICBpc1Byb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2lzUHJvdG90eXBlJyksXG4gICAgaXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9pc1R5cGVkQXJyYXknKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGFuIGVtcHR5IG9iamVjdCwgY29sbGVjdGlvbiwgbWFwLCBvciBzZXQuXG4gKlxuICogT2JqZWN0cyBhcmUgY29uc2lkZXJlZCBlbXB0eSBpZiB0aGV5IGhhdmUgbm8gb3duIGVudW1lcmFibGUgc3RyaW5nIGtleWVkXG4gKiBwcm9wZXJ0aWVzLlxuICpcbiAqIEFycmF5LWxpa2UgdmFsdWVzIHN1Y2ggYXMgYGFyZ3VtZW50c2Agb2JqZWN0cywgYXJyYXlzLCBidWZmZXJzLCBzdHJpbmdzLCBvclxuICogalF1ZXJ5LWxpa2UgY29sbGVjdGlvbnMgYXJlIGNvbnNpZGVyZWQgZW1wdHkgaWYgdGhleSBoYXZlIGEgYGxlbmd0aGAgb2YgYDBgLlxuICogU2ltaWxhcmx5LCBtYXBzIGFuZCBzZXRzIGFyZSBjb25zaWRlcmVkIGVtcHR5IGlmIHRoZXkgaGF2ZSBhIGBzaXplYCBvZiBgMGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgZW1wdHksIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0VtcHR5KG51bGwpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNFbXB0eSh0cnVlKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRW1wdHkoMSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0VtcHR5KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNFbXB0eSh7ICdhJzogMSB9KTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRW1wdHkodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoaXNBcnJheUxpa2UodmFsdWUpICYmXG4gICAgICAoaXNBcnJheSh2YWx1ZSkgfHwgdHlwZW9mIHZhbHVlID09ICdzdHJpbmcnIHx8IHR5cGVvZiB2YWx1ZS5zcGxpY2UgPT0gJ2Z1bmN0aW9uJyB8fFxuICAgICAgICBpc0J1ZmZlcih2YWx1ZSkgfHwgaXNUeXBlZEFycmF5KHZhbHVlKSB8fCBpc0FyZ3VtZW50cyh2YWx1ZSkpKSB7XG4gICAgcmV0dXJuICF2YWx1ZS5sZW5ndGg7XG4gIH1cbiAgdmFyIHRhZyA9IGdldFRhZyh2YWx1ZSk7XG4gIGlmICh0YWcgPT0gbWFwVGFnIHx8IHRhZyA9PSBzZXRUYWcpIHtcbiAgICByZXR1cm4gIXZhbHVlLnNpemU7XG4gIH1cbiAgaWYgKGlzUHJvdG90eXBlKHZhbHVlKSkge1xuICAgIHJldHVybiAhYmFzZUtleXModmFsdWUpLmxlbmd0aDtcbiAgfVxuICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwga2V5KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0VtcHR5O1xuIiwiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uZm9yRWFjaGAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5RWFjaChhcnJheSwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGlmIChpdGVyYXRlZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkgPT09IGZhbHNlKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5RWFjaDtcbiIsInZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2RlZmluZVByb3BlcnR5Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGFzc2lnblZhbHVlYCBhbmQgYGFzc2lnbk1lcmdlVmFsdWVgIHdpdGhvdXRcbiAqIHZhbHVlIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduLlxuICovXG5mdW5jdGlvbiBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgPT0gJ19fcHJvdG9fXycgJiYgZGVmaW5lUHJvcGVydHkpIHtcbiAgICBkZWZpbmVQcm9wZXJ0eShvYmplY3QsIGtleSwge1xuICAgICAgJ2NvbmZpZ3VyYWJsZSc6IHRydWUsXG4gICAgICAnZW51bWVyYWJsZSc6IHRydWUsXG4gICAgICAndmFsdWUnOiB2YWx1ZSxcbiAgICAgICd3cml0YWJsZSc6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUFzc2lnblZhbHVlO1xuIiwidmFyIGJhc2VBc3NpZ25WYWx1ZSA9IHJlcXVpcmUoJy4vX2Jhc2VBc3NpZ25WYWx1ZScpLFxuICAgIGVxID0gcmVxdWlyZSgnLi9lcScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEFzc2lnbnMgYHZhbHVlYCB0byBga2V5YCBvZiBgb2JqZWN0YCBpZiB0aGUgZXhpc3RpbmcgdmFsdWUgaXMgbm90IGVxdWl2YWxlbnRcbiAqIHVzaW5nIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gYXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHZhciBvYmpWYWx1ZSA9IG9iamVjdFtrZXldO1xuICBpZiAoIShoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSAmJiBlcShvYmpWYWx1ZSwgdmFsdWUpKSB8fFxuICAgICAgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkpIHtcbiAgICBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFzc2lnblZhbHVlO1xuIiwidmFyIGFzc2lnblZhbHVlID0gcmVxdWlyZSgnLi9fYXNzaWduVmFsdWUnKSxcbiAgICBiYXNlQXNzaWduVmFsdWUgPSByZXF1aXJlKCcuL19iYXNlQXNzaWduVmFsdWUnKTtcblxuLyoqXG4gKiBDb3BpZXMgcHJvcGVydGllcyBvZiBgc291cmNlYCB0byBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tLlxuICogQHBhcmFtIHtBcnJheX0gcHJvcHMgVGhlIHByb3BlcnR5IGlkZW50aWZpZXJzIHRvIGNvcHkuXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdD17fV0gVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgdG8uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb3BpZWQgdmFsdWVzLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gY29weU9iamVjdChzb3VyY2UsIHByb3BzLCBvYmplY3QsIGN1c3RvbWl6ZXIpIHtcbiAgdmFyIGlzTmV3ID0gIW9iamVjdDtcbiAgb2JqZWN0IHx8IChvYmplY3QgPSB7fSk7XG5cbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIga2V5ID0gcHJvcHNbaW5kZXhdO1xuXG4gICAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxuICAgICAgPyBjdXN0b21pemVyKG9iamVjdFtrZXldLCBzb3VyY2Vba2V5XSwga2V5LCBvYmplY3QsIHNvdXJjZSlcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKG5ld1ZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG5ld1ZhbHVlID0gc291cmNlW2tleV07XG4gICAgfVxuICAgIGlmIChpc05ldykge1xuICAgICAgYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBvYmplY3Q7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29weU9iamVjdDtcbiIsInZhciBjb3B5T2JqZWN0ID0gcmVxdWlyZSgnLi9fY29weU9iamVjdCcpLFxuICAgIGtleXMgPSByZXF1aXJlKCcuL2tleXMnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5hc3NpZ25gIHdpdGhvdXQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgc291cmNlc1xuICogb3IgYGN1c3RvbWl6ZXJgIGZ1bmN0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgc291cmNlIG9iamVjdC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VBc3NpZ24ob2JqZWN0LCBzb3VyY2UpIHtcbiAgcmV0dXJuIG9iamVjdCAmJiBjb3B5T2JqZWN0KHNvdXJjZSwga2V5cyhzb3VyY2UpLCBvYmplY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VBc3NpZ247XG4iLCIvKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgbGlrZVxuICogW2BPYmplY3Qua2V5c2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5rZXlzKVxuICogZXhjZXB0IHRoYXQgaXQgaW5jbHVkZXMgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydGllcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gbmF0aXZlS2V5c0luKG9iamVjdCkge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGlmIChvYmplY3QgIT0gbnVsbCkge1xuICAgIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBuYXRpdmVLZXlzSW47XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0JyksXG4gICAgaXNQcm90b3R5cGUgPSByZXF1aXJlKCcuL19pc1Byb3RvdHlwZScpLFxuICAgIG5hdGl2ZUtleXNJbiA9IHJlcXVpcmUoJy4vX25hdGl2ZUtleXNJbicpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmtleXNJbmAgd2hpY2ggZG9lc24ndCB0cmVhdCBzcGFyc2UgYXJyYXlzIGFzIGRlbnNlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBiYXNlS2V5c0luKG9iamVjdCkge1xuICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICByZXR1cm4gbmF0aXZlS2V5c0luKG9iamVjdCk7XG4gIH1cbiAgdmFyIGlzUHJvdG8gPSBpc1Byb3RvdHlwZShvYmplY3QpLFxuICAgICAgcmVzdWx0ID0gW107XG5cbiAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgIGlmICghKGtleSA9PSAnY29uc3RydWN0b3InICYmIChpc1Byb3RvIHx8ICFoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VLZXlzSW47XG4iLCJ2YXIgYXJyYXlMaWtlS2V5cyA9IHJlcXVpcmUoJy4vX2FycmF5TGlrZUtleXMnKSxcbiAgICBiYXNlS2V5c0luID0gcmVxdWlyZSgnLi9fYmFzZUtleXNJbicpLFxuICAgIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgYG9iamVjdGAuXG4gKlxuICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy5rZXlzSW4obmV3IEZvbyk7XG4gKiAvLyA9PiBbJ2EnLCAnYicsICdjJ10gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqL1xuZnVuY3Rpb24ga2V5c0luKG9iamVjdCkge1xuICByZXR1cm4gaXNBcnJheUxpa2Uob2JqZWN0KSA/IGFycmF5TGlrZUtleXMob2JqZWN0LCB0cnVlKSA6IGJhc2VLZXlzSW4ob2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBrZXlzSW47XG4iLCJ2YXIgY29weU9iamVjdCA9IHJlcXVpcmUoJy4vX2NvcHlPYmplY3QnKSxcbiAgICBrZXlzSW4gPSByZXF1aXJlKCcuL2tleXNJbicpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmFzc2lnbkluYCB3aXRob3V0IHN1cHBvcnQgZm9yIG11bHRpcGxlIHNvdXJjZXNcbiAqIG9yIGBjdXN0b21pemVyYCBmdW5jdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBiYXNlQXNzaWduSW4ob2JqZWN0LCBzb3VyY2UpIHtcbiAgcmV0dXJuIG9iamVjdCAmJiBjb3B5T2JqZWN0KHNvdXJjZSwga2V5c0luKHNvdXJjZSksIG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUFzc2lnbkluO1xuIiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgQnVmZmVyID0gbW9kdWxlRXhwb3J0cyA/IHJvb3QuQnVmZmVyIDogdW5kZWZpbmVkLFxuICAgIGFsbG9jVW5zYWZlID0gQnVmZmVyID8gQnVmZmVyLmFsbG9jVW5zYWZlIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiAgYGJ1ZmZlcmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QnVmZmVyfSBidWZmZXIgVGhlIGJ1ZmZlciB0byBjbG9uZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXG4gKiBAcmV0dXJucyB7QnVmZmVyfSBSZXR1cm5zIHRoZSBjbG9uZWQgYnVmZmVyLlxuICovXG5mdW5jdGlvbiBjbG9uZUJ1ZmZlcihidWZmZXIsIGlzRGVlcCkge1xuICBpZiAoaXNEZWVwKSB7XG4gICAgcmV0dXJuIGJ1ZmZlci5zbGljZSgpO1xuICB9XG4gIHZhciBsZW5ndGggPSBidWZmZXIubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0gYWxsb2NVbnNhZmUgPyBhbGxvY1Vuc2FmZShsZW5ndGgpIDogbmV3IGJ1ZmZlci5jb25zdHJ1Y3RvcihsZW5ndGgpO1xuXG4gIGJ1ZmZlci5jb3B5KHJlc3VsdCk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVCdWZmZXI7XG4iLCIvKipcbiAqIENvcGllcyB0aGUgdmFsdWVzIG9mIGBzb3VyY2VgIHRvIGBhcnJheWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IHNvdXJjZSBUaGUgYXJyYXkgdG8gY29weSB2YWx1ZXMgZnJvbS5cbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheT1bXV0gVGhlIGFycmF5IHRvIGNvcHkgdmFsdWVzIHRvLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIGNvcHlBcnJheShzb3VyY2UsIGFycmF5KSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gc291cmNlLmxlbmd0aDtcblxuICBhcnJheSB8fCAoYXJyYXkgPSBBcnJheShsZW5ndGgpKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBhcnJheVtpbmRleF0gPSBzb3VyY2VbaW5kZXhdO1xuICB9XG4gIHJldHVybiBhcnJheTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb3B5QXJyYXk7XG4iLCJ2YXIgY29weU9iamVjdCA9IHJlcXVpcmUoJy4vX2NvcHlPYmplY3QnKSxcbiAgICBnZXRTeW1ib2xzID0gcmVxdWlyZSgnLi9fZ2V0U3ltYm9scycpO1xuXG4vKipcbiAqIENvcGllcyBvd24gc3ltYm9scyBvZiBgc291cmNlYCB0byBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IHRvIGNvcHkgc3ltYm9scyBmcm9tLlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3Q9e31dIFRoZSBvYmplY3QgdG8gY29weSBzeW1ib2xzIHRvLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gY29weVN5bWJvbHMoc291cmNlLCBvYmplY3QpIHtcbiAgcmV0dXJuIGNvcHlPYmplY3Qoc291cmNlLCBnZXRTeW1ib2xzKHNvdXJjZSksIG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29weVN5bWJvbHM7XG4iLCJ2YXIgb3ZlckFyZyA9IHJlcXVpcmUoJy4vX292ZXJBcmcnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgZ2V0UHJvdG90eXBlID0gb3ZlckFyZyhPYmplY3QuZ2V0UHJvdG90eXBlT2YsIE9iamVjdCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0UHJvdG90eXBlO1xuIiwidmFyIGFycmF5UHVzaCA9IHJlcXVpcmUoJy4vX2FycmF5UHVzaCcpLFxuICAgIGdldFByb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2dldFByb3RvdHlwZScpLFxuICAgIGdldFN5bWJvbHMgPSByZXF1aXJlKCcuL19nZXRTeW1ib2xzJyksXG4gICAgc3R1YkFycmF5ID0gcmVxdWlyZSgnLi9zdHViQXJyYXknKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUdldFN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBzeW1ib2xzLlxuICovXG52YXIgZ2V0U3ltYm9sc0luID0gIW5hdGl2ZUdldFN5bWJvbHMgPyBzdHViQXJyYXkgOiBmdW5jdGlvbihvYmplY3QpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB3aGlsZSAob2JqZWN0KSB7XG4gICAgYXJyYXlQdXNoKHJlc3VsdCwgZ2V0U3ltYm9scyhvYmplY3QpKTtcbiAgICBvYmplY3QgPSBnZXRQcm90b3R5cGUob2JqZWN0KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRTeW1ib2xzSW47XG4iLCJ2YXIgY29weU9iamVjdCA9IHJlcXVpcmUoJy4vX2NvcHlPYmplY3QnKSxcbiAgICBnZXRTeW1ib2xzSW4gPSByZXF1aXJlKCcuL19nZXRTeW1ib2xzSW4nKTtcblxuLyoqXG4gKiBDb3BpZXMgb3duIGFuZCBpbmhlcml0ZWQgc3ltYm9scyBvZiBgc291cmNlYCB0byBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IHRvIGNvcHkgc3ltYm9scyBmcm9tLlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3Q9e31dIFRoZSBvYmplY3QgdG8gY29weSBzeW1ib2xzIHRvLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gY29weVN5bWJvbHNJbihzb3VyY2UsIG9iamVjdCkge1xuICByZXR1cm4gY29weU9iamVjdChzb3VyY2UsIGdldFN5bWJvbHNJbihzb3VyY2UpLCBvYmplY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcHlTeW1ib2xzSW47XG4iLCJ2YXIgYmFzZUdldEFsbEtleXMgPSByZXF1aXJlKCcuL19iYXNlR2V0QWxsS2V5cycpLFxuICAgIGdldFN5bWJvbHNJbiA9IHJlcXVpcmUoJy4vX2dldFN5bWJvbHNJbicpLFxuICAgIGtleXNJbiA9IHJlcXVpcmUoJy4va2V5c0luJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIGFuZFxuICogc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scy5cbiAqL1xuZnVuY3Rpb24gZ2V0QWxsS2V5c0luKG9iamVjdCkge1xuICByZXR1cm4gYmFzZUdldEFsbEtleXMob2JqZWN0LCBrZXlzSW4sIGdldFN5bWJvbHNJbik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QWxsS2V5c0luO1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBJbml0aWFsaXplcyBhbiBhcnJheSBjbG9uZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGNsb25lLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBpbml0aWFsaXplZCBjbG9uZS5cbiAqL1xuZnVuY3Rpb24gaW5pdENsb25lQXJyYXkoYXJyYXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IG5ldyBhcnJheS5jb25zdHJ1Y3RvcihsZW5ndGgpO1xuXG4gIC8vIEFkZCBwcm9wZXJ0aWVzIGFzc2lnbmVkIGJ5IGBSZWdFeHAjZXhlY2AuXG4gIGlmIChsZW5ndGggJiYgdHlwZW9mIGFycmF5WzBdID09ICdzdHJpbmcnICYmIGhhc093blByb3BlcnR5LmNhbGwoYXJyYXksICdpbmRleCcpKSB7XG4gICAgcmVzdWx0LmluZGV4ID0gYXJyYXkuaW5kZXg7XG4gICAgcmVzdWx0LmlucHV0ID0gYXJyYXkuaW5wdXQ7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbml0Q2xvbmVBcnJheTtcbiIsInZhciBVaW50OEFycmF5ID0gcmVxdWlyZSgnLi9fVWludDhBcnJheScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgYXJyYXlCdWZmZXJgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5QnVmZmVyfSBhcnJheUJ1ZmZlciBUaGUgYXJyYXkgYnVmZmVyIHRvIGNsb25lLlxuICogQHJldHVybnMge0FycmF5QnVmZmVyfSBSZXR1cm5zIHRoZSBjbG9uZWQgYXJyYXkgYnVmZmVyLlxuICovXG5mdW5jdGlvbiBjbG9uZUFycmF5QnVmZmVyKGFycmF5QnVmZmVyKSB7XG4gIHZhciByZXN1bHQgPSBuZXcgYXJyYXlCdWZmZXIuY29uc3RydWN0b3IoYXJyYXlCdWZmZXIuYnl0ZUxlbmd0aCk7XG4gIG5ldyBVaW50OEFycmF5KHJlc3VsdCkuc2V0KG5ldyBVaW50OEFycmF5KGFycmF5QnVmZmVyKSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVBcnJheUJ1ZmZlcjtcbiIsInZhciBjbG9uZUFycmF5QnVmZmVyID0gcmVxdWlyZSgnLi9fY2xvbmVBcnJheUJ1ZmZlcicpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgZGF0YVZpZXdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gZGF0YVZpZXcgVGhlIGRhdGEgdmlldyB0byBjbG9uZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgZGF0YSB2aWV3LlxuICovXG5mdW5jdGlvbiBjbG9uZURhdGFWaWV3KGRhdGFWaWV3LCBpc0RlZXApIHtcbiAgdmFyIGJ1ZmZlciA9IGlzRGVlcCA/IGNsb25lQXJyYXlCdWZmZXIoZGF0YVZpZXcuYnVmZmVyKSA6IGRhdGFWaWV3LmJ1ZmZlcjtcbiAgcmV0dXJuIG5ldyBkYXRhVmlldy5jb25zdHJ1Y3RvcihidWZmZXIsIGRhdGFWaWV3LmJ5dGVPZmZzZXQsIGRhdGFWaWV3LmJ5dGVMZW5ndGgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb25lRGF0YVZpZXc7XG4iLCIvKiogVXNlZCB0byBtYXRjaCBgUmVnRXhwYCBmbGFncyBmcm9tIHRoZWlyIGNvZXJjZWQgc3RyaW5nIHZhbHVlcy4gKi9cbnZhciByZUZsYWdzID0gL1xcdyokLztcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYHJlZ2V4cGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSByZWdleHAgVGhlIHJlZ2V4cCB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCByZWdleHAuXG4gKi9cbmZ1bmN0aW9uIGNsb25lUmVnRXhwKHJlZ2V4cCkge1xuICB2YXIgcmVzdWx0ID0gbmV3IHJlZ2V4cC5jb25zdHJ1Y3RvcihyZWdleHAuc291cmNlLCByZUZsYWdzLmV4ZWMocmVnZXhwKSk7XG4gIHJlc3VsdC5sYXN0SW5kZXggPSByZWdleHAubGFzdEluZGV4O1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb25lUmVnRXhwO1xuIiwidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpO1xuXG4vKiogVXNlZCB0byBjb252ZXJ0IHN5bWJvbHMgdG8gcHJpbWl0aXZlcyBhbmQgc3RyaW5ncy4gKi9cbnZhciBzeW1ib2xQcm90byA9IFN5bWJvbCA/IFN5bWJvbC5wcm90b3R5cGUgOiB1bmRlZmluZWQsXG4gICAgc3ltYm9sVmFsdWVPZiA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udmFsdWVPZiA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhlIGBzeW1ib2xgIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHN5bWJvbCBUaGUgc3ltYm9sIG9iamVjdCB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCBzeW1ib2wgb2JqZWN0LlxuICovXG5mdW5jdGlvbiBjbG9uZVN5bWJvbChzeW1ib2wpIHtcbiAgcmV0dXJuIHN5bWJvbFZhbHVlT2YgPyBPYmplY3Qoc3ltYm9sVmFsdWVPZi5jYWxsKHN5bWJvbCkpIDoge307XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVTeW1ib2w7XG4iLCJ2YXIgY2xvbmVBcnJheUJ1ZmZlciA9IHJlcXVpcmUoJy4vX2Nsb25lQXJyYXlCdWZmZXInKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYHR5cGVkQXJyYXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gdHlwZWRBcnJheSBUaGUgdHlwZWQgYXJyYXkgdG8gY2xvbmUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0RlZXBdIFNwZWNpZnkgYSBkZWVwIGNsb25lLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2xvbmVkIHR5cGVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBjbG9uZVR5cGVkQXJyYXkodHlwZWRBcnJheSwgaXNEZWVwKSB7XG4gIHZhciBidWZmZXIgPSBpc0RlZXAgPyBjbG9uZUFycmF5QnVmZmVyKHR5cGVkQXJyYXkuYnVmZmVyKSA6IHR5cGVkQXJyYXkuYnVmZmVyO1xuICByZXR1cm4gbmV3IHR5cGVkQXJyYXkuY29uc3RydWN0b3IoYnVmZmVyLCB0eXBlZEFycmF5LmJ5dGVPZmZzZXQsIHR5cGVkQXJyYXkubGVuZ3RoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZVR5cGVkQXJyYXk7XG4iLCJ2YXIgY2xvbmVBcnJheUJ1ZmZlciA9IHJlcXVpcmUoJy4vX2Nsb25lQXJyYXlCdWZmZXInKSxcbiAgICBjbG9uZURhdGFWaWV3ID0gcmVxdWlyZSgnLi9fY2xvbmVEYXRhVmlldycpLFxuICAgIGNsb25lUmVnRXhwID0gcmVxdWlyZSgnLi9fY2xvbmVSZWdFeHAnKSxcbiAgICBjbG9uZVN5bWJvbCA9IHJlcXVpcmUoJy4vX2Nsb25lU3ltYm9sJyksXG4gICAgY2xvbmVUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9fY2xvbmVUeXBlZEFycmF5Jyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgIGRhdGVUYWcgPSAnW29iamVjdCBEYXRlXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXSc7XG5cbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXG4gICAgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nLFxuICAgIGZsb2F0MzJUYWcgPSAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICBmbG9hdDY0VGFnID0gJ1tvYmplY3QgRmxvYXQ2NEFycmF5XScsXG4gICAgaW50OFRhZyA9ICdbb2JqZWN0IEludDhBcnJheV0nLFxuICAgIGludDE2VGFnID0gJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgIGludDMyVGFnID0gJ1tvYmplY3QgSW50MzJBcnJheV0nLFxuICAgIHVpbnQ4VGFnID0gJ1tvYmplY3QgVWludDhBcnJheV0nLFxuICAgIHVpbnQ4Q2xhbXBlZFRhZyA9ICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXG4gICAgdWludDE2VGFnID0gJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICB1aW50MzJUYWcgPSAnW29iamVjdCBVaW50MzJBcnJheV0nO1xuXG4vKipcbiAqIEluaXRpYWxpemVzIGFuIG9iamVjdCBjbG9uZSBiYXNlZCBvbiBpdHMgYHRvU3RyaW5nVGFnYC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBmdW5jdGlvbiBvbmx5IHN1cHBvcnRzIGNsb25pbmcgdmFsdWVzIHdpdGggdGFncyBvZlxuICogYEJvb2xlYW5gLCBgRGF0ZWAsIGBFcnJvcmAsIGBNYXBgLCBgTnVtYmVyYCwgYFJlZ0V4cGAsIGBTZXRgLCBvciBgU3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNsb25lLlxuICogQHBhcmFtIHtzdHJpbmd9IHRhZyBUaGUgYHRvU3RyaW5nVGFnYCBvZiB0aGUgb2JqZWN0IHRvIGNsb25lLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGluaXRpYWxpemVkIGNsb25lLlxuICovXG5mdW5jdGlvbiBpbml0Q2xvbmVCeVRhZyhvYmplY3QsIHRhZywgaXNEZWVwKSB7XG4gIHZhciBDdG9yID0gb2JqZWN0LmNvbnN0cnVjdG9yO1xuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgYXJyYXlCdWZmZXJUYWc6XG4gICAgICByZXR1cm4gY2xvbmVBcnJheUJ1ZmZlcihvYmplY3QpO1xuXG4gICAgY2FzZSBib29sVGFnOlxuICAgIGNhc2UgZGF0ZVRhZzpcbiAgICAgIHJldHVybiBuZXcgQ3Rvcigrb2JqZWN0KTtcblxuICAgIGNhc2UgZGF0YVZpZXdUYWc6XG4gICAgICByZXR1cm4gY2xvbmVEYXRhVmlldyhvYmplY3QsIGlzRGVlcCk7XG5cbiAgICBjYXNlIGZsb2F0MzJUYWc6IGNhc2UgZmxvYXQ2NFRhZzpcbiAgICBjYXNlIGludDhUYWc6IGNhc2UgaW50MTZUYWc6IGNhc2UgaW50MzJUYWc6XG4gICAgY2FzZSB1aW50OFRhZzogY2FzZSB1aW50OENsYW1wZWRUYWc6IGNhc2UgdWludDE2VGFnOiBjYXNlIHVpbnQzMlRhZzpcbiAgICAgIHJldHVybiBjbG9uZVR5cGVkQXJyYXkob2JqZWN0LCBpc0RlZXApO1xuXG4gICAgY2FzZSBtYXBUYWc6XG4gICAgICByZXR1cm4gbmV3IEN0b3I7XG5cbiAgICBjYXNlIG51bWJlclRhZzpcbiAgICBjYXNlIHN0cmluZ1RhZzpcbiAgICAgIHJldHVybiBuZXcgQ3RvcihvYmplY3QpO1xuXG4gICAgY2FzZSByZWdleHBUYWc6XG4gICAgICByZXR1cm4gY2xvbmVSZWdFeHAob2JqZWN0KTtcblxuICAgIGNhc2Ugc2V0VGFnOlxuICAgICAgcmV0dXJuIG5ldyBDdG9yO1xuXG4gICAgY2FzZSBzeW1ib2xUYWc6XG4gICAgICByZXR1cm4gY2xvbmVTeW1ib2wob2JqZWN0KTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGluaXRDbG9uZUJ5VGFnO1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RDcmVhdGUgPSBPYmplY3QuY3JlYXRlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmNyZWF0ZWAgd2l0aG91dCBzdXBwb3J0IGZvciBhc3NpZ25pbmdcbiAqIHByb3BlcnRpZXMgdG8gdGhlIGNyZWF0ZWQgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvdG8gVGhlIG9iamVjdCB0byBpbmhlcml0IGZyb20uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICovXG52YXIgYmFzZUNyZWF0ZSA9IChmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gb2JqZWN0KCkge31cbiAgcmV0dXJuIGZ1bmN0aW9uKHByb3RvKSB7XG4gICAgaWYgKCFpc09iamVjdChwcm90bykpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgaWYgKG9iamVjdENyZWF0ZSkge1xuICAgICAgcmV0dXJuIG9iamVjdENyZWF0ZShwcm90byk7XG4gICAgfVxuICAgIG9iamVjdC5wcm90b3R5cGUgPSBwcm90bztcbiAgICB2YXIgcmVzdWx0ID0gbmV3IG9iamVjdDtcbiAgICBvYmplY3QucHJvdG90eXBlID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59KCkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VDcmVhdGU7XG4iLCJ2YXIgYmFzZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX2Jhc2VDcmVhdGUnKSxcbiAgICBnZXRQcm90b3R5cGUgPSByZXF1aXJlKCcuL19nZXRQcm90b3R5cGUnKSxcbiAgICBpc1Byb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2lzUHJvdG90eXBlJyk7XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgYW4gb2JqZWN0IGNsb25lLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBpbml0aWFsaXplZCBjbG9uZS5cbiAqL1xuZnVuY3Rpb24gaW5pdENsb25lT2JqZWN0KG9iamVjdCkge1xuICByZXR1cm4gKHR5cGVvZiBvYmplY3QuY29uc3RydWN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNQcm90b3R5cGUob2JqZWN0KSlcbiAgICA/IGJhc2VDcmVhdGUoZ2V0UHJvdG90eXBlKG9iamVjdCkpXG4gICAgOiB7fTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbml0Q2xvbmVPYmplY3Q7XG4iLCJ2YXIgZ2V0VGFnID0gcmVxdWlyZSgnLi9fZ2V0VGFnJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTWFwYCB3aXRob3V0IE5vZGUuanMgb3B0aW1pemF0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG1hcCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNNYXAodmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgZ2V0VGFnKHZhbHVlKSA9PSBtYXBUYWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzTWFwO1xuIiwidmFyIGJhc2VJc01hcCA9IHJlcXVpcmUoJy4vX2Jhc2VJc01hcCcpLFxuICAgIGJhc2VVbmFyeSA9IHJlcXVpcmUoJy4vX2Jhc2VVbmFyeScpLFxuICAgIG5vZGVVdGlsID0gcmVxdWlyZSgnLi9fbm9kZVV0aWwnKTtcblxuLyogTm9kZS5qcyBoZWxwZXIgcmVmZXJlbmNlcy4gKi9cbnZhciBub2RlSXNNYXAgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc01hcDtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYE1hcGAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4zLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbWFwLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNNYXAobmV3IE1hcCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc01hcChuZXcgV2Vha01hcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNNYXAgPSBub2RlSXNNYXAgPyBiYXNlVW5hcnkobm9kZUlzTWFwKSA6IGJhc2VJc01hcDtcblxubW9kdWxlLmV4cG9ydHMgPSBpc01hcDtcbiIsInZhciBnZXRUYWcgPSByZXF1aXJlKCcuL19nZXRUYWcnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgc2V0VGFnID0gJ1tvYmplY3QgU2V0XSc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNTZXRgIHdpdGhvdXQgTm9kZS5qcyBvcHRpbWl6YXRpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc2V0LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc1NldCh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBnZXRUYWcodmFsdWUpID09IHNldFRhZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNTZXQ7XG4iLCJ2YXIgYmFzZUlzU2V0ID0gcmVxdWlyZSgnLi9fYmFzZUlzU2V0JyksXG4gICAgYmFzZVVuYXJ5ID0gcmVxdWlyZSgnLi9fYmFzZVVuYXJ5JyksXG4gICAgbm9kZVV0aWwgPSByZXF1aXJlKCcuL19ub2RlVXRpbCcpO1xuXG4vKiBOb2RlLmpzIGhlbHBlciByZWZlcmVuY2VzLiAqL1xudmFyIG5vZGVJc1NldCA9IG5vZGVVdGlsICYmIG5vZGVVdGlsLmlzU2V0O1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgU2V0YCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjMuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzZXQsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1NldChuZXcgU2V0KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzU2V0KG5ldyBXZWFrU2V0KTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc1NldCA9IG5vZGVJc1NldCA/IGJhc2VVbmFyeShub2RlSXNTZXQpIDogYmFzZUlzU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzU2V0O1xuIiwidmFyIFN0YWNrID0gcmVxdWlyZSgnLi9fU3RhY2snKSxcbiAgICBhcnJheUVhY2ggPSByZXF1aXJlKCcuL19hcnJheUVhY2gnKSxcbiAgICBhc3NpZ25WYWx1ZSA9IHJlcXVpcmUoJy4vX2Fzc2lnblZhbHVlJyksXG4gICAgYmFzZUFzc2lnbiA9IHJlcXVpcmUoJy4vX2Jhc2VBc3NpZ24nKSxcbiAgICBiYXNlQXNzaWduSW4gPSByZXF1aXJlKCcuL19iYXNlQXNzaWduSW4nKSxcbiAgICBjbG9uZUJ1ZmZlciA9IHJlcXVpcmUoJy4vX2Nsb25lQnVmZmVyJyksXG4gICAgY29weUFycmF5ID0gcmVxdWlyZSgnLi9fY29weUFycmF5JyksXG4gICAgY29weVN5bWJvbHMgPSByZXF1aXJlKCcuL19jb3B5U3ltYm9scycpLFxuICAgIGNvcHlTeW1ib2xzSW4gPSByZXF1aXJlKCcuL19jb3B5U3ltYm9sc0luJyksXG4gICAgZ2V0QWxsS2V5cyA9IHJlcXVpcmUoJy4vX2dldEFsbEtleXMnKSxcbiAgICBnZXRBbGxLZXlzSW4gPSByZXF1aXJlKCcuL19nZXRBbGxLZXlzSW4nKSxcbiAgICBnZXRUYWcgPSByZXF1aXJlKCcuL19nZXRUYWcnKSxcbiAgICBpbml0Q2xvbmVBcnJheSA9IHJlcXVpcmUoJy4vX2luaXRDbG9uZUFycmF5JyksXG4gICAgaW5pdENsb25lQnlUYWcgPSByZXF1aXJlKCcuL19pbml0Q2xvbmVCeVRhZycpLFxuICAgIGluaXRDbG9uZU9iamVjdCA9IHJlcXVpcmUoJy4vX2luaXRDbG9uZU9iamVjdCcpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0J1ZmZlciA9IHJlcXVpcmUoJy4vaXNCdWZmZXInKSxcbiAgICBpc01hcCA9IHJlcXVpcmUoJy4vaXNNYXAnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKSxcbiAgICBpc1NldCA9IHJlcXVpcmUoJy4vaXNTZXQnKSxcbiAgICBrZXlzID0gcmVxdWlyZSgnLi9rZXlzJyksXG4gICAga2V5c0luID0gcmVxdWlyZSgnLi9rZXlzSW4nKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgY2xvbmluZy4gKi9cbnZhciBDTE9ORV9ERUVQX0ZMQUcgPSAxLFxuICAgIENMT05FX0ZMQVRfRkxBRyA9IDIsXG4gICAgQ0xPTkVfU1lNQk9MU19GTEFHID0gNDtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJyxcbiAgICBhcnJheVRhZyA9ICdbb2JqZWN0IEFycmF5XScsXG4gICAgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcbiAgICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxuICAgIGVycm9yVGFnID0gJ1tvYmplY3QgRXJyb3JdJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBnZW5UYWcgPSAnW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0nLFxuICAgIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG51bWJlclRhZyA9ICdbb2JqZWN0IE51bWJlcl0nLFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nLFxuICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxuICAgIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nLFxuICAgIHdlYWtNYXBUYWcgPSAnW29iamVjdCBXZWFrTWFwXSc7XG5cbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXG4gICAgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nLFxuICAgIGZsb2F0MzJUYWcgPSAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICBmbG9hdDY0VGFnID0gJ1tvYmplY3QgRmxvYXQ2NEFycmF5XScsXG4gICAgaW50OFRhZyA9ICdbb2JqZWN0IEludDhBcnJheV0nLFxuICAgIGludDE2VGFnID0gJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgIGludDMyVGFnID0gJ1tvYmplY3QgSW50MzJBcnJheV0nLFxuICAgIHVpbnQ4VGFnID0gJ1tvYmplY3QgVWludDhBcnJheV0nLFxuICAgIHVpbnQ4Q2xhbXBlZFRhZyA9ICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXG4gICAgdWludDE2VGFnID0gJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICB1aW50MzJUYWcgPSAnW29iamVjdCBVaW50MzJBcnJheV0nO1xuXG4vKiogVXNlZCB0byBpZGVudGlmeSBgdG9TdHJpbmdUYWdgIHZhbHVlcyBzdXBwb3J0ZWQgYnkgYF8uY2xvbmVgLiAqL1xudmFyIGNsb25lYWJsZVRhZ3MgPSB7fTtcbmNsb25lYWJsZVRhZ3NbYXJnc1RhZ10gPSBjbG9uZWFibGVUYWdzW2FycmF5VGFnXSA9XG5jbG9uZWFibGVUYWdzW2FycmF5QnVmZmVyVGFnXSA9IGNsb25lYWJsZVRhZ3NbZGF0YVZpZXdUYWddID1cbmNsb25lYWJsZVRhZ3NbYm9vbFRhZ10gPSBjbG9uZWFibGVUYWdzW2RhdGVUYWddID1cbmNsb25lYWJsZVRhZ3NbZmxvYXQzMlRhZ10gPSBjbG9uZWFibGVUYWdzW2Zsb2F0NjRUYWddID1cbmNsb25lYWJsZVRhZ3NbaW50OFRhZ10gPSBjbG9uZWFibGVUYWdzW2ludDE2VGFnXSA9XG5jbG9uZWFibGVUYWdzW2ludDMyVGFnXSA9IGNsb25lYWJsZVRhZ3NbbWFwVGFnXSA9XG5jbG9uZWFibGVUYWdzW251bWJlclRhZ10gPSBjbG9uZWFibGVUYWdzW29iamVjdFRhZ10gPVxuY2xvbmVhYmxlVGFnc1tyZWdleHBUYWddID0gY2xvbmVhYmxlVGFnc1tzZXRUYWddID1cbmNsb25lYWJsZVRhZ3Nbc3RyaW5nVGFnXSA9IGNsb25lYWJsZVRhZ3Nbc3ltYm9sVGFnXSA9XG5jbG9uZWFibGVUYWdzW3VpbnQ4VGFnXSA9IGNsb25lYWJsZVRhZ3NbdWludDhDbGFtcGVkVGFnXSA9XG5jbG9uZWFibGVUYWdzW3VpbnQxNlRhZ10gPSBjbG9uZWFibGVUYWdzW3VpbnQzMlRhZ10gPSB0cnVlO1xuY2xvbmVhYmxlVGFnc1tlcnJvclRhZ10gPSBjbG9uZWFibGVUYWdzW2Z1bmNUYWddID1cbmNsb25lYWJsZVRhZ3Nbd2Vha01hcFRhZ10gPSBmYWxzZTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5jbG9uZWAgYW5kIGBfLmNsb25lRGVlcGAgd2hpY2ggdHJhY2tzXG4gKiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2xvbmUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuXG4gKiAgMSAtIERlZXAgY2xvbmVcbiAqICAyIC0gRmxhdHRlbiBpbmhlcml0ZWQgcHJvcGVydGllc1xuICogIDQgLSBDbG9uZSBzeW1ib2xzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjbG9uaW5nLlxuICogQHBhcmFtIHtzdHJpbmd9IFtrZXldIFRoZSBrZXkgb2YgYHZhbHVlYC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgcGFyZW50IG9iamVjdCBvZiBgdmFsdWVgLlxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzIGFuZCB0aGVpciBjbG9uZSBjb3VudGVycGFydHMuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgY2xvbmVkIHZhbHVlLlxuICovXG5mdW5jdGlvbiBiYXNlQ2xvbmUodmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGtleSwgb2JqZWN0LCBzdGFjaykge1xuICB2YXIgcmVzdWx0LFxuICAgICAgaXNEZWVwID0gYml0bWFzayAmIENMT05FX0RFRVBfRkxBRyxcbiAgICAgIGlzRmxhdCA9IGJpdG1hc2sgJiBDTE9ORV9GTEFUX0ZMQUcsXG4gICAgICBpc0Z1bGwgPSBiaXRtYXNrICYgQ0xPTkVfU1lNQk9MU19GTEFHO1xuXG4gIGlmIChjdXN0b21pemVyKSB7XG4gICAgcmVzdWx0ID0gb2JqZWN0ID8gY3VzdG9taXplcih2YWx1ZSwga2V5LCBvYmplY3QsIHN0YWNrKSA6IGN1c3RvbWl6ZXIodmFsdWUpO1xuICB9XG4gIGlmIChyZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgdmFyIGlzQXJyID0gaXNBcnJheSh2YWx1ZSk7XG4gIGlmIChpc0Fycikge1xuICAgIHJlc3VsdCA9IGluaXRDbG9uZUFycmF5KHZhbHVlKTtcbiAgICBpZiAoIWlzRGVlcCkge1xuICAgICAgcmV0dXJuIGNvcHlBcnJheSh2YWx1ZSwgcmVzdWx0KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIHRhZyA9IGdldFRhZyh2YWx1ZSksXG4gICAgICAgIGlzRnVuYyA9IHRhZyA9PSBmdW5jVGFnIHx8IHRhZyA9PSBnZW5UYWc7XG5cbiAgICBpZiAoaXNCdWZmZXIodmFsdWUpKSB7XG4gICAgICByZXR1cm4gY2xvbmVCdWZmZXIodmFsdWUsIGlzRGVlcCk7XG4gICAgfVxuICAgIGlmICh0YWcgPT0gb2JqZWN0VGFnIHx8IHRhZyA9PSBhcmdzVGFnIHx8IChpc0Z1bmMgJiYgIW9iamVjdCkpIHtcbiAgICAgIHJlc3VsdCA9IChpc0ZsYXQgfHwgaXNGdW5jKSA/IHt9IDogaW5pdENsb25lT2JqZWN0KHZhbHVlKTtcbiAgICAgIGlmICghaXNEZWVwKSB7XG4gICAgICAgIHJldHVybiBpc0ZsYXRcbiAgICAgICAgICA/IGNvcHlTeW1ib2xzSW4odmFsdWUsIGJhc2VBc3NpZ25JbihyZXN1bHQsIHZhbHVlKSlcbiAgICAgICAgICA6IGNvcHlTeW1ib2xzKHZhbHVlLCBiYXNlQXNzaWduKHJlc3VsdCwgdmFsdWUpKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFjbG9uZWFibGVUYWdzW3RhZ10pIHtcbiAgICAgICAgcmV0dXJuIG9iamVjdCA/IHZhbHVlIDoge307XG4gICAgICB9XG4gICAgICByZXN1bHQgPSBpbml0Q2xvbmVCeVRhZyh2YWx1ZSwgdGFnLCBpc0RlZXApO1xuICAgIH1cbiAgfVxuICAvLyBDaGVjayBmb3IgY2lyY3VsYXIgcmVmZXJlbmNlcyBhbmQgcmV0dXJuIGl0cyBjb3JyZXNwb25kaW5nIGNsb25lLlxuICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgU3RhY2spO1xuICB2YXIgc3RhY2tlZCA9IHN0YWNrLmdldCh2YWx1ZSk7XG4gIGlmIChzdGFja2VkKSB7XG4gICAgcmV0dXJuIHN0YWNrZWQ7XG4gIH1cbiAgc3RhY2suc2V0KHZhbHVlLCByZXN1bHQpO1xuXG4gIGlmIChpc1NldCh2YWx1ZSkpIHtcbiAgICB2YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uKHN1YlZhbHVlKSB7XG4gICAgICByZXN1bHQuYWRkKGJhc2VDbG9uZShzdWJWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3ViVmFsdWUsIHZhbHVlLCBzdGFjaykpO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKGlzTWFwKHZhbHVlKSkge1xuICAgIHZhbHVlLmZvckVhY2goZnVuY3Rpb24oc3ViVmFsdWUsIGtleSkge1xuICAgICAgcmVzdWx0LnNldChrZXksIGJhc2VDbG9uZShzdWJWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwga2V5LCB2YWx1ZSwgc3RhY2spKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhciBrZXlzRnVuYyA9IGlzRnVsbFxuICAgID8gKGlzRmxhdCA/IGdldEFsbEtleXNJbiA6IGdldEFsbEtleXMpXG4gICAgOiAoaXNGbGF0ID8ga2V5c0luIDoga2V5cyk7XG5cbiAgdmFyIHByb3BzID0gaXNBcnIgPyB1bmRlZmluZWQgOiBrZXlzRnVuYyh2YWx1ZSk7XG4gIGFycmF5RWFjaChwcm9wcyB8fCB2YWx1ZSwgZnVuY3Rpb24oc3ViVmFsdWUsIGtleSkge1xuICAgIGlmIChwcm9wcykge1xuICAgICAga2V5ID0gc3ViVmFsdWU7XG4gICAgICBzdWJWYWx1ZSA9IHZhbHVlW2tleV07XG4gICAgfVxuICAgIC8vIFJlY3Vyc2l2ZWx5IHBvcHVsYXRlIGNsb25lIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgYXNzaWduVmFsdWUocmVzdWx0LCBrZXksIGJhc2VDbG9uZShzdWJWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwga2V5LCB2YWx1ZSwgc3RhY2spKTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUNsb25lO1xuIiwidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgU3ltYm9sYCBwcmltaXRpdmUgb3Igb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc3ltYm9sLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNTeW1ib2woU3ltYm9sLml0ZXJhdG9yKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzU3ltYm9sKCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3ltYm9sKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ3N5bWJvbCcgfHxcbiAgICAoaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBzeW1ib2xUYWcpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzU3ltYm9sO1xuIiwidmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc1N5bWJvbCA9IHJlcXVpcmUoJy4vaXNTeW1ib2wnKTtcblxuLyoqIFVzZWQgdG8gbWF0Y2ggcHJvcGVydHkgbmFtZXMgd2l0aGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlSXNEZWVwUHJvcCA9IC9cXC58XFxbKD86W15bXFxdXSp8KFtcIiddKSg/Oig/IVxcMSlbXlxcXFxdfFxcXFwuKSo/XFwxKVxcXS8sXG4gICAgcmVJc1BsYWluUHJvcCA9IC9eXFx3KiQvO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcHJvcGVydHkgbmFtZSBhbmQgbm90IGEgcHJvcGVydHkgcGF0aC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeSBrZXlzIG9uLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwcm9wZXJ0eSBuYW1lLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzS2V5KHZhbHVlLCBvYmplY3QpIHtcbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICBpZiAodHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nIHx8XG4gICAgICB2YWx1ZSA9PSBudWxsIHx8IGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiByZUlzUGxhaW5Qcm9wLnRlc3QodmFsdWUpIHx8ICFyZUlzRGVlcFByb3AudGVzdCh2YWx1ZSkgfHxcbiAgICAob2JqZWN0ICE9IG51bGwgJiYgdmFsdWUgaW4gT2JqZWN0KG9iamVjdCkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzS2V5O1xuIiwidmFyIE1hcENhY2hlID0gcmVxdWlyZSgnLi9fTWFwQ2FjaGUnKTtcblxuLyoqIEVycm9yIG1lc3NhZ2UgY29uc3RhbnRzLiAqL1xudmFyIEZVTkNfRVJST1JfVEVYVCA9ICdFeHBlY3RlZCBhIGZ1bmN0aW9uJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBtZW1vaXplcyB0aGUgcmVzdWx0IG9mIGBmdW5jYC4gSWYgYHJlc29sdmVyYCBpc1xuICogcHJvdmlkZWQsIGl0IGRldGVybWluZXMgdGhlIGNhY2hlIGtleSBmb3Igc3RvcmluZyB0aGUgcmVzdWx0IGJhc2VkIG9uIHRoZVxuICogYXJndW1lbnRzIHByb3ZpZGVkIHRvIHRoZSBtZW1vaXplZCBmdW5jdGlvbi4gQnkgZGVmYXVsdCwgdGhlIGZpcnN0IGFyZ3VtZW50XG4gKiBwcm92aWRlZCB0byB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24gaXMgdXNlZCBhcyB0aGUgbWFwIGNhY2hlIGtleS4gVGhlIGBmdW5jYFxuICogaXMgaW52b2tlZCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gKlxuICogKipOb3RlOioqIFRoZSBjYWNoZSBpcyBleHBvc2VkIGFzIHRoZSBgY2FjaGVgIHByb3BlcnR5IG9uIHRoZSBtZW1vaXplZFxuICogZnVuY3Rpb24uIEl0cyBjcmVhdGlvbiBtYXkgYmUgY3VzdG9taXplZCBieSByZXBsYWNpbmcgdGhlIGBfLm1lbW9pemUuQ2FjaGVgXG4gKiBjb25zdHJ1Y3RvciB3aXRoIG9uZSB3aG9zZSBpbnN0YW5jZXMgaW1wbGVtZW50IHRoZVxuICogW2BNYXBgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wcm9wZXJ0aWVzLW9mLXRoZS1tYXAtcHJvdG90eXBlLW9iamVjdClcbiAqIG1ldGhvZCBpbnRlcmZhY2Ugb2YgYGNsZWFyYCwgYGRlbGV0ZWAsIGBnZXRgLCBgaGFzYCwgYW5kIGBzZXRgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaGF2ZSBpdHMgb3V0cHV0IG1lbW9pemVkLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3Jlc29sdmVyXSBUaGUgZnVuY3Rpb24gdG8gcmVzb2x2ZSB0aGUgY2FjaGUga2V5LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAyIH07XG4gKiB2YXIgb3RoZXIgPSB7ICdjJzogMywgJ2QnOiA0IH07XG4gKlxuICogdmFyIHZhbHVlcyA9IF8ubWVtb2l6ZShfLnZhbHVlcyk7XG4gKiB2YWx1ZXMob2JqZWN0KTtcbiAqIC8vID0+IFsxLCAyXVxuICpcbiAqIHZhbHVlcyhvdGhlcik7XG4gKiAvLyA9PiBbMywgNF1cbiAqXG4gKiBvYmplY3QuYSA9IDI7XG4gKiB2YWx1ZXMob2JqZWN0KTtcbiAqIC8vID0+IFsxLCAyXVxuICpcbiAqIC8vIE1vZGlmeSB0aGUgcmVzdWx0IGNhY2hlLlxuICogdmFsdWVzLmNhY2hlLnNldChvYmplY3QsIFsnYScsICdiJ10pO1xuICogdmFsdWVzKG9iamVjdCk7XG4gKiAvLyA9PiBbJ2EnLCAnYiddXG4gKlxuICogLy8gUmVwbGFjZSBgXy5tZW1vaXplLkNhY2hlYC5cbiAqIF8ubWVtb2l6ZS5DYWNoZSA9IFdlYWtNYXA7XG4gKi9cbmZ1bmN0aW9uIG1lbW9pemUoZnVuYywgcmVzb2x2ZXIpIHtcbiAgaWYgKHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicgfHwgKHJlc29sdmVyICE9IG51bGwgJiYgdHlwZW9mIHJlc29sdmVyICE9ICdmdW5jdGlvbicpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICB9XG4gIHZhciBtZW1vaXplZCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBhcmdzID0gYXJndW1lbnRzLFxuICAgICAgICBrZXkgPSByZXNvbHZlciA/IHJlc29sdmVyLmFwcGx5KHRoaXMsIGFyZ3MpIDogYXJnc1swXSxcbiAgICAgICAgY2FjaGUgPSBtZW1vaXplZC5jYWNoZTtcblxuICAgIGlmIChjYWNoZS5oYXMoa2V5KSkge1xuICAgICAgcmV0dXJuIGNhY2hlLmdldChrZXkpO1xuICAgIH1cbiAgICB2YXIgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICBtZW1vaXplZC5jYWNoZSA9IGNhY2hlLnNldChrZXksIHJlc3VsdCkgfHwgY2FjaGU7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbiAgbWVtb2l6ZWQuY2FjaGUgPSBuZXcgKG1lbW9pemUuQ2FjaGUgfHwgTWFwQ2FjaGUpO1xuICByZXR1cm4gbWVtb2l6ZWQ7XG59XG5cbi8vIEV4cG9zZSBgTWFwQ2FjaGVgLlxubWVtb2l6ZS5DYWNoZSA9IE1hcENhY2hlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG1lbW9pemU7XG4iLCJ2YXIgbWVtb2l6ZSA9IHJlcXVpcmUoJy4vbWVtb2l6ZScpO1xuXG4vKiogVXNlZCBhcyB0aGUgbWF4aW11bSBtZW1vaXplIGNhY2hlIHNpemUuICovXG52YXIgTUFYX01FTU9JWkVfU0laRSA9IDUwMDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ubWVtb2l6ZWAgd2hpY2ggY2xlYXJzIHRoZSBtZW1vaXplZCBmdW5jdGlvbidzXG4gKiBjYWNoZSB3aGVuIGl0IGV4Y2VlZHMgYE1BWF9NRU1PSVpFX1NJWkVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBoYXZlIGl0cyBvdXRwdXQgbWVtb2l6ZWQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBtZW1vaXplZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gbWVtb2l6ZUNhcHBlZChmdW5jKSB7XG4gIHZhciByZXN1bHQgPSBtZW1vaXplKGZ1bmMsIGZ1bmN0aW9uKGtleSkge1xuICAgIGlmIChjYWNoZS5zaXplID09PSBNQVhfTUVNT0laRV9TSVpFKSB7XG4gICAgICBjYWNoZS5jbGVhcigpO1xuICAgIH1cbiAgICByZXR1cm4ga2V5O1xuICB9KTtcblxuICB2YXIgY2FjaGUgPSByZXN1bHQuY2FjaGU7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWVtb2l6ZUNhcHBlZDtcbiIsInZhciBtZW1vaXplQ2FwcGVkID0gcmVxdWlyZSgnLi9fbWVtb2l6ZUNhcHBlZCcpO1xuXG4vKiogVXNlZCB0byBtYXRjaCBwcm9wZXJ0eSBuYW1lcyB3aXRoaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgcmVQcm9wTmFtZSA9IC9bXi5bXFxdXSt8XFxbKD86KC0/XFxkKyg/OlxcLlxcZCspPyl8KFtcIiddKSgoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqPylcXDIpXFxdfCg/PSg/OlxcLnxcXFtcXF0pKD86XFwufFxcW1xcXXwkKSkvZztcblxuLyoqIFVzZWQgdG8gbWF0Y2ggYmFja3NsYXNoZXMgaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgcmVFc2NhcGVDaGFyID0gL1xcXFwoXFxcXCk/L2c7XG5cbi8qKlxuICogQ29udmVydHMgYHN0cmluZ2AgdG8gYSBwcm9wZXJ0eSBwYXRoIGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAqL1xudmFyIHN0cmluZ1RvUGF0aCA9IG1lbW9pemVDYXBwZWQoZnVuY3Rpb24oc3RyaW5nKSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgaWYgKHN0cmluZy5jaGFyQ29kZUF0KDApID09PSA0NiAvKiAuICovKSB7XG4gICAgcmVzdWx0LnB1c2goJycpO1xuICB9XG4gIHN0cmluZy5yZXBsYWNlKHJlUHJvcE5hbWUsIGZ1bmN0aW9uKG1hdGNoLCBudW1iZXIsIHF1b3RlLCBzdWJTdHJpbmcpIHtcbiAgICByZXN1bHQucHVzaChxdW90ZSA/IHN1YlN0cmluZy5yZXBsYWNlKHJlRXNjYXBlQ2hhciwgJyQxJykgOiAobnVtYmVyIHx8IG1hdGNoKSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gc3RyaW5nVG9QYXRoO1xuIiwidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpLFxuICAgIGFycmF5TWFwID0gcmVxdWlyZSgnLi9fYXJyYXlNYXAnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNTeW1ib2wgPSByZXF1aXJlKCcuL2lzU3ltYm9sJyk7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIElORklOSVRZID0gMSAvIDA7XG5cbi8qKiBVc2VkIHRvIGNvbnZlcnQgc3ltYm9scyB0byBwcmltaXRpdmVzIGFuZCBzdHJpbmdzLiAqL1xudmFyIHN5bWJvbFByb3RvID0gU3ltYm9sID8gU3ltYm9sLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcbiAgICBzeW1ib2xUb1N0cmluZyA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udG9TdHJpbmcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udG9TdHJpbmdgIHdoaWNoIGRvZXNuJ3QgY29udmVydCBudWxsaXNoXG4gKiB2YWx1ZXMgdG8gZW1wdHkgc3RyaW5ncy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvY2Vzcy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gYmFzZVRvU3RyaW5nKHZhbHVlKSB7XG4gIC8vIEV4aXQgZWFybHkgZm9yIHN0cmluZ3MgdG8gYXZvaWQgYSBwZXJmb3JtYW5jZSBoaXQgaW4gc29tZSBlbnZpcm9ubWVudHMuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgLy8gUmVjdXJzaXZlbHkgY29udmVydCB2YWx1ZXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICByZXR1cm4gYXJyYXlNYXAodmFsdWUsIGJhc2VUb1N0cmluZykgKyAnJztcbiAgfVxuICBpZiAoaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIHN5bWJvbFRvU3RyaW5nID8gc3ltYm9sVG9TdHJpbmcuY2FsbCh2YWx1ZSkgOiAnJztcbiAgfVxuICB2YXIgcmVzdWx0ID0gKHZhbHVlICsgJycpO1xuICByZXR1cm4gKHJlc3VsdCA9PSAnMCcgJiYgKDEgLyB2YWx1ZSkgPT0gLUlORklOSVRZKSA/ICctMCcgOiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVRvU3RyaW5nO1xuIiwidmFyIGJhc2VUb1N0cmluZyA9IHJlcXVpcmUoJy4vX2Jhc2VUb1N0cmluZycpO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcuIEFuIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZCBmb3IgYG51bGxgXG4gKiBhbmQgYHVuZGVmaW5lZGAgdmFsdWVzLiBUaGUgc2lnbiBvZiBgLTBgIGlzIHByZXNlcnZlZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBzdHJpbmcuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udG9TdHJpbmcobnVsbCk7XG4gKiAvLyA9PiAnJ1xuICpcbiAqIF8udG9TdHJpbmcoLTApO1xuICogLy8gPT4gJy0wJ1xuICpcbiAqIF8udG9TdHJpbmcoWzEsIDIsIDNdKTtcbiAqIC8vID0+ICcxLDIsMydcbiAqL1xuZnVuY3Rpb24gdG9TdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09IG51bGwgPyAnJyA6IGJhc2VUb1N0cmluZyh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9TdHJpbmc7XG4iLCJ2YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzS2V5ID0gcmVxdWlyZSgnLi9faXNLZXknKSxcbiAgICBzdHJpbmdUb1BhdGggPSByZXF1aXJlKCcuL19zdHJpbmdUb1BhdGgnKSxcbiAgICB0b1N0cmluZyA9IHJlcXVpcmUoJy4vdG9TdHJpbmcnKTtcblxuLyoqXG4gKiBDYXN0cyBgdmFsdWVgIHRvIGEgcGF0aCBhcnJheSBpZiBpdCdzIG5vdCBvbmUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeSBrZXlzIG9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjYXN0IHByb3BlcnR5IHBhdGggYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGNhc3RQYXRoKHZhbHVlLCBvYmplY3QpIHtcbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiBpc0tleSh2YWx1ZSwgb2JqZWN0KSA/IFt2YWx1ZV0gOiBzdHJpbmdUb1BhdGgodG9TdHJpbmcodmFsdWUpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjYXN0UGF0aDtcbiIsInZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4vaXNTeW1ib2wnKTtcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgSU5GSU5JVFkgPSAxIC8gMDtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIGtleSBpZiBpdCdzIG5vdCBhIHN0cmluZyBvciBzeW1ib2wuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7c3RyaW5nfHN5bWJvbH0gUmV0dXJucyB0aGUga2V5LlxuICovXG5mdW5jdGlvbiB0b0tleSh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnIHx8IGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICB2YXIgcmVzdWx0ID0gKHZhbHVlICsgJycpO1xuICByZXR1cm4gKHJlc3VsdCA9PSAnMCcgJiYgKDEgLyB2YWx1ZSkgPT0gLUlORklOSVRZKSA/ICctMCcgOiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9LZXk7XG4iLCJ2YXIgY2FzdFBhdGggPSByZXF1aXJlKCcuL19jYXN0UGF0aCcpLFxuICAgIHRvS2V5ID0gcmVxdWlyZSgnLi9fdG9LZXknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5nZXRgIHdpdGhvdXQgc3VwcG9ydCBmb3IgZGVmYXVsdCB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2ZWQgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGJhc2VHZXQob2JqZWN0LCBwYXRoKSB7XG4gIHBhdGggPSBjYXN0UGF0aChwYXRoLCBvYmplY3QpO1xuXG4gIHZhciBpbmRleCA9IDAsXG4gICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aDtcblxuICB3aGlsZSAob2JqZWN0ICE9IG51bGwgJiYgaW5kZXggPCBsZW5ndGgpIHtcbiAgICBvYmplY3QgPSBvYmplY3RbdG9LZXkocGF0aFtpbmRleCsrXSldO1xuICB9XG4gIHJldHVybiAoaW5kZXggJiYgaW5kZXggPT0gbGVuZ3RoKSA/IG9iamVjdCA6IHVuZGVmaW5lZDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlR2V0O1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zbGljZWAgd2l0aG91dCBhbiBpdGVyYXRlZSBjYWxsIGd1YXJkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gc2xpY2UuXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PTBdIFRoZSBzdGFydCBwb3NpdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbZW5kPWFycmF5Lmxlbmd0aF0gVGhlIGVuZCBwb3NpdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gYmFzZVNsaWNlKGFycmF5LCBzdGFydCwgZW5kKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGlmIChzdGFydCA8IDApIHtcbiAgICBzdGFydCA9IC1zdGFydCA+IGxlbmd0aCA/IDAgOiAobGVuZ3RoICsgc3RhcnQpO1xuICB9XG4gIGVuZCA9IGVuZCA+IGxlbmd0aCA/IGxlbmd0aCA6IGVuZDtcbiAgaWYgKGVuZCA8IDApIHtcbiAgICBlbmQgKz0gbGVuZ3RoO1xuICB9XG4gIGxlbmd0aCA9IHN0YXJ0ID4gZW5kID8gMCA6ICgoZW5kIC0gc3RhcnQpID4+PiAwKTtcbiAgc3RhcnQgPj4+PSAwO1xuXG4gIHZhciByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHJlc3VsdFtpbmRleF0gPSBhcnJheVtpbmRleCArIHN0YXJ0XTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VTbGljZTtcbiIsInZhciBiYXNlR2V0ID0gcmVxdWlyZSgnLi9fYmFzZUdldCcpLFxuICAgIGJhc2VTbGljZSA9IHJlcXVpcmUoJy4vX2Jhc2VTbGljZScpO1xuXG4vKipcbiAqIEdldHMgdGhlIHBhcmVudCB2YWx1ZSBhdCBgcGF0aGAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl9IHBhdGggVGhlIHBhdGggdG8gZ2V0IHRoZSBwYXJlbnQgdmFsdWUgb2YuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcGFyZW50IHZhbHVlLlxuICovXG5mdW5jdGlvbiBwYXJlbnQob2JqZWN0LCBwYXRoKSB7XG4gIHJldHVybiBwYXRoLmxlbmd0aCA8IDIgPyBvYmplY3QgOiBiYXNlR2V0KG9iamVjdCwgYmFzZVNsaWNlKHBhdGgsIDAsIC0xKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwidmFyIGNhc3RQYXRoID0gcmVxdWlyZSgnLi9fY2FzdFBhdGgnKSxcbiAgICBsYXN0ID0gcmVxdWlyZSgnLi9sYXN0JyksXG4gICAgcGFyZW50ID0gcmVxdWlyZSgnLi9fcGFyZW50JyksXG4gICAgdG9LZXkgPSByZXF1aXJlKCcuL190b0tleScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnVuc2V0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwcm9wZXJ0eSBwYXRoIHRvIHVuc2V0LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBwcm9wZXJ0eSBpcyBkZWxldGVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VVbnNldChvYmplY3QsIHBhdGgpIHtcbiAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG4gIG9iamVjdCA9IHBhcmVudChvYmplY3QsIHBhdGgpO1xuICByZXR1cm4gb2JqZWN0ID09IG51bGwgfHwgZGVsZXRlIG9iamVjdFt0b0tleShsYXN0KHBhdGgpKV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVVuc2V0O1xuIiwidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgZ2V0UHJvdG90eXBlID0gcmVxdWlyZSgnLi9fZ2V0UHJvdG90eXBlJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxuICAgIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIFVzZWQgdG8gaW5mZXIgdGhlIGBPYmplY3RgIGNvbnN0cnVjdG9yLiAqL1xudmFyIG9iamVjdEN0b3JTdHJpbmcgPSBmdW5jVG9TdHJpbmcuY2FsbChPYmplY3QpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcGxhaW4gb2JqZWN0LCB0aGF0IGlzLCBhbiBvYmplY3QgY3JlYXRlZCBieSB0aGVcbiAqIGBPYmplY3RgIGNvbnN0cnVjdG9yIG9yIG9uZSB3aXRoIGEgYFtbUHJvdG90eXBlXV1gIG9mIGBudWxsYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuOC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHBsYWluIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiB9XG4gKlxuICogXy5pc1BsYWluT2JqZWN0KG5ldyBGb28pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KHsgJ3gnOiAwLCAneSc6IDAgfSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KE9iamVjdC5jcmVhdGUobnVsbCkpO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3RMaWtlKHZhbHVlKSB8fCBiYXNlR2V0VGFnKHZhbHVlKSAhPSBvYmplY3RUYWcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHByb3RvID0gZ2V0UHJvdG90eXBlKHZhbHVlKTtcbiAgaWYgKHByb3RvID09PSBudWxsKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgdmFyIEN0b3IgPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3RvLCAnY29uc3RydWN0b3InKSAmJiBwcm90by5jb25zdHJ1Y3RvcjtcbiAgcmV0dXJuIHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3RvciBpbnN0YW5jZW9mIEN0b3IgJiZcbiAgICBmdW5jVG9TdHJpbmcuY2FsbChDdG9yKSA9PSBvYmplY3RDdG9yU3RyaW5nO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzUGxhaW5PYmplY3Q7XG4iLCJ2YXIgaXNQbGFpbk9iamVjdCA9IHJlcXVpcmUoJy4vaXNQbGFpbk9iamVjdCcpO1xuXG4vKipcbiAqIFVzZWQgYnkgYF8ub21pdGAgdG8gY3VzdG9taXplIGl0cyBgXy5jbG9uZURlZXBgIHVzZSB0byBvbmx5IGNsb25lIHBsYWluXG4gKiBvYmplY3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBpbnNwZWN0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHVuY2xvbmVkIHZhbHVlIG9yIGB1bmRlZmluZWRgIHRvIGRlZmVyIGNsb25pbmcgdG8gYF8uY2xvbmVEZWVwYC5cbiAqL1xuZnVuY3Rpb24gY3VzdG9tT21pdENsb25lKHZhbHVlKSB7XG4gIHJldHVybiBpc1BsYWluT2JqZWN0KHZhbHVlKSA/IHVuZGVmaW5lZCA6IHZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGN1c3RvbU9taXRDbG9uZTtcbiIsInZhciBiYXNlRmxhdHRlbiA9IHJlcXVpcmUoJy4vX2Jhc2VGbGF0dGVuJyk7XG5cbi8qKlxuICogRmxhdHRlbnMgYGFycmF5YCBhIHNpbmdsZSBsZXZlbCBkZWVwLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGZsYXR0ZW4uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmbGF0dGVuZWQgYXJyYXkuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uZmxhdHRlbihbMSwgWzIsIFszLCBbNF1dLCA1XV0pO1xuICogLy8gPT4gWzEsIDIsIFszLCBbNF1dLCA1XVxuICovXG5mdW5jdGlvbiBmbGF0dGVuKGFycmF5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgcmV0dXJuIGxlbmd0aCA/IGJhc2VGbGF0dGVuKGFycmF5LCAxKSA6IFtdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZsYXR0ZW47XG4iLCJ2YXIgZmxhdHRlbiA9IHJlcXVpcmUoJy4vZmxhdHRlbicpLFxuICAgIG92ZXJSZXN0ID0gcmVxdWlyZSgnLi9fb3ZlclJlc3QnKSxcbiAgICBzZXRUb1N0cmluZyA9IHJlcXVpcmUoJy4vX3NldFRvU3RyaW5nJyk7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUmVzdGAgd2hpY2ggZmxhdHRlbnMgdGhlIHJlc3QgYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gZmxhdFJlc3QoZnVuYykge1xuICByZXR1cm4gc2V0VG9TdHJpbmcob3ZlclJlc3QoZnVuYywgdW5kZWZpbmVkLCBmbGF0dGVuKSwgZnVuYyArICcnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmbGF0UmVzdDtcbiIsInZhciBhcnJheU1hcCA9IHJlcXVpcmUoJy4vX2FycmF5TWFwJyksXG4gICAgYmFzZUNsb25lID0gcmVxdWlyZSgnLi9fYmFzZUNsb25lJyksXG4gICAgYmFzZVVuc2V0ID0gcmVxdWlyZSgnLi9fYmFzZVVuc2V0JyksXG4gICAgY2FzdFBhdGggPSByZXF1aXJlKCcuL19jYXN0UGF0aCcpLFxuICAgIGNvcHlPYmplY3QgPSByZXF1aXJlKCcuL19jb3B5T2JqZWN0JyksXG4gICAgY3VzdG9tT21pdENsb25lID0gcmVxdWlyZSgnLi9fY3VzdG9tT21pdENsb25lJyksXG4gICAgZmxhdFJlc3QgPSByZXF1aXJlKCcuL19mbGF0UmVzdCcpLFxuICAgIGdldEFsbEtleXNJbiA9IHJlcXVpcmUoJy4vX2dldEFsbEtleXNJbicpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBjbG9uaW5nLiAqL1xudmFyIENMT05FX0RFRVBfRkxBRyA9IDEsXG4gICAgQ0xPTkVfRkxBVF9GTEFHID0gMixcbiAgICBDTE9ORV9TWU1CT0xTX0ZMQUcgPSA0O1xuXG4vKipcbiAqIFRoZSBvcHBvc2l0ZSBvZiBgXy5waWNrYDsgdGhpcyBtZXRob2QgY3JlYXRlcyBhbiBvYmplY3QgY29tcG9zZWQgb2YgdGhlXG4gKiBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnR5IHBhdGhzIG9mIGBvYmplY3RgIHRoYXQgYXJlIG5vdCBvbWl0dGVkLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBjb25zaWRlcmFibHkgc2xvd2VyIHRoYW4gYF8ucGlja2AuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgc291cmNlIG9iamVjdC5cbiAqIEBwYXJhbSB7Li4uKHN0cmluZ3xzdHJpbmdbXSl9IFtwYXRoc10gVGhlIHByb3BlcnR5IHBhdGhzIHRvIG9taXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEsICdiJzogJzInLCAnYyc6IDMgfTtcbiAqXG4gKiBfLm9taXQob2JqZWN0LCBbJ2EnLCAnYyddKTtcbiAqIC8vID0+IHsgJ2InOiAnMicgfVxuICovXG52YXIgb21pdCA9IGZsYXRSZXN0KGZ1bmN0aW9uKG9iamVjdCwgcGF0aHMpIHtcbiAgdmFyIHJlc3VsdCA9IHt9O1xuICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHZhciBpc0RlZXAgPSBmYWxzZTtcbiAgcGF0aHMgPSBhcnJheU1hcChwYXRocywgZnVuY3Rpb24ocGF0aCkge1xuICAgIHBhdGggPSBjYXN0UGF0aChwYXRoLCBvYmplY3QpO1xuICAgIGlzRGVlcCB8fCAoaXNEZWVwID0gcGF0aC5sZW5ndGggPiAxKTtcbiAgICByZXR1cm4gcGF0aDtcbiAgfSk7XG4gIGNvcHlPYmplY3Qob2JqZWN0LCBnZXRBbGxLZXlzSW4ob2JqZWN0KSwgcmVzdWx0KTtcbiAgaWYgKGlzRGVlcCkge1xuICAgIHJlc3VsdCA9IGJhc2VDbG9uZShyZXN1bHQsIENMT05FX0RFRVBfRkxBRyB8IENMT05FX0ZMQVRfRkxBRyB8IENMT05FX1NZTUJPTFNfRkxBRywgY3VzdG9tT21pdENsb25lKTtcbiAgfVxuICB2YXIgbGVuZ3RoID0gcGF0aHMubGVuZ3RoO1xuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICBiYXNlVW5zZXQocmVzdWx0LCBwYXRoc1tsZW5ndGhdKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gb21pdDtcbiIsInZhciBTZXQgPSByZXF1aXJlKCcuL19TZXQnKSxcbiAgICBub29wID0gcmVxdWlyZSgnLi9ub29wJyksXG4gICAgc2V0VG9BcnJheSA9IHJlcXVpcmUoJy4vX3NldFRvQXJyYXknKTtcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgSU5GSU5JVFkgPSAxIC8gMDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgc2V0IG9iamVjdCBvZiBgdmFsdWVzYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gYWRkIHRvIHRoZSBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgc2V0LlxuICovXG52YXIgY3JlYXRlU2V0ID0gIShTZXQgJiYgKDEgLyBzZXRUb0FycmF5KG5ldyBTZXQoWywtMF0pKVsxXSkgPT0gSU5GSU5JVFkpID8gbm9vcCA6IGZ1bmN0aW9uKHZhbHVlcykge1xuICByZXR1cm4gbmV3IFNldCh2YWx1ZXMpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVTZXQ7XG4iLCJ2YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuL3RvU3RyaW5nJyk7XG5cbi8qKlxuICogVXNlZCB0byBtYXRjaCBgUmVnRXhwYFxuICogW3N5bnRheCBjaGFyYWN0ZXJzXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wYXR0ZXJucykuXG4gKi9cbnZhciByZVJlZ0V4cENoYXIgPSAvW1xcXFxeJC4qKz8oKVtcXF17fXxdL2csXG4gICAgcmVIYXNSZWdFeHBDaGFyID0gUmVnRXhwKHJlUmVnRXhwQ2hhci5zb3VyY2UpO1xuXG4vKipcbiAqIEVzY2FwZXMgdGhlIGBSZWdFeHBgIHNwZWNpYWwgY2hhcmFjdGVycyBcIl5cIiwgXCIkXCIsIFwiXFxcIiwgXCIuXCIsIFwiKlwiLCBcIitcIixcbiAqIFwiP1wiLCBcIihcIiwgXCIpXCIsIFwiW1wiLCBcIl1cIiwgXCJ7XCIsIFwifVwiLCBhbmQgXCJ8XCIgaW4gYHN0cmluZ2AuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IFN0cmluZ1xuICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gZXNjYXBlLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgZXNjYXBlZCBzdHJpbmcuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uZXNjYXBlUmVnRXhwKCdbbG9kYXNoXShodHRwczovL2xvZGFzaC5jb20vKScpO1xuICogLy8gPT4gJ1xcW2xvZGFzaFxcXVxcKGh0dHBzOi8vbG9kYXNoXFwuY29tL1xcKSdcbiAqL1xuZnVuY3Rpb24gZXNjYXBlUmVnRXhwKHN0cmluZykge1xuICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICByZXR1cm4gKHN0cmluZyAmJiByZUhhc1JlZ0V4cENoYXIudGVzdChzdHJpbmcpKVxuICAgID8gc3RyaW5nLnJlcGxhY2UocmVSZWdFeHBDaGFyLCAnXFxcXCQmJylcbiAgICA6IHN0cmluZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlc2NhcGVSZWdFeHA7XG4iLCJ2YXIgYmFzZUNsb25lID0gcmVxdWlyZSgnLi9fYmFzZUNsb25lJyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGNsb25pbmcuICovXG52YXIgQ0xPTkVfREVFUF9GTEFHID0gMSxcbiAgICBDTE9ORV9TWU1CT0xTX0ZMQUcgPSA0O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uY2xvbmVgIGV4Y2VwdCB0aGF0IGl0IHJlY3Vyc2l2ZWx5IGNsb25lcyBgdmFsdWVgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byByZWN1cnNpdmVseSBjbG9uZS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBkZWVwIGNsb25lZCB2YWx1ZS5cbiAqIEBzZWUgXy5jbG9uZVxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0cyA9IFt7ICdhJzogMSB9LCB7ICdiJzogMiB9XTtcbiAqXG4gKiB2YXIgZGVlcCA9IF8uY2xvbmVEZWVwKG9iamVjdHMpO1xuICogY29uc29sZS5sb2coZGVlcFswXSA9PT0gb2JqZWN0c1swXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBjbG9uZURlZXAodmFsdWUpIHtcbiAgcmV0dXJuIGJhc2VDbG9uZSh2YWx1ZSwgQ0xPTkVfREVFUF9GTEFHIHwgQ0xPTkVfU1lNQk9MU19GTEFHKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZURlZXA7XG4iLCJpbXBvcnQgdW5pcVdpdGggZnJvbSAnbG9kYXNoL3VuaXFXaXRoJztcbmltcG9ydCBpc0VxdWFsIGZyb20gJ2xvZGFzaC9pc0VxdWFsJztcbmltcG9ydCBtZW1vaXplIGZyb20gJ2xvZGFzaC9tZW1vaXplJztcbmltcG9ydCBlc2NhcGVSZWdFeHAgZnJvbSAnbG9kYXNoL2VzY2FwZVJlZ0V4cCc7XG5pbXBvcnQgY2xvbmVEZWVwIGZyb20gJ2xvZGFzaC9jbG9uZURlZXAnO1xuXG4vKipcbiAqIExvY2F0aW9uIHByb3BlcnRpZXMuXG4gKiBAdHlwZWRlZiB7TG9jYXRpb25Qcm9wZXJ0aWVzfVxuICogQHByb3BlcnR5IHtzdHJpbmd9IGxheWVyIFN1Z2dlc3Rpb24gbGF5ZXIuXG4gKiBAcHJvcGVydHkge2xhdH0gW251bWJlcl1cbiAqIEBwcm9wZXJ0eSB7bG9ufSBbbnVtYmVyXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IGFkZHJlc3MgQWRkcmVzcy5cbiAqL1xuXG4vKipcbiAqIFJldHVybnMgbG9jYWxhZG1pbiAoY2l0eSBuYW1lKSBmb3Igc3VnZ2VzdGlvbnNcbiAqXG4gKiBAbmFtZSBnZXRMb2NhbGFkbWluXG4gKiBAcGFyYW0ge09iamVjdH0gc3VnZ2VzdGlvbiBzdWdnZXN0aW9uJ3MgcHJvcGVydGllcyBmcm9tIGdlb2NvZGluZyBvciBhIGZhdm91cml0ZSBzdG9wL3N0YXRpb24uXG4gKiBFeHBlY3RzIGxhc3QgcGFydCBvZiBhbiBhZGRyZXNzIChhZnRlciAnLCcpIHRvIGNvbnRhaW4gdGhlIGNpdHkgbmFtZSBvZiB0aGUgc3VnZ2VzdGlvbiBsb2NhdGlvbi5cbiAqIEByZXR1cm5zIHtTdHJpbmd9ICBDaXR5IG5hbWUgb3IgZW1wdHkgc3RyaW5nXG4gKi9cbmNvbnN0IGdldExvY2FsYWRtaW4gPSBzdWdnZXN0aW9uID0+XG4gIHN1Z2dlc3Rpb24ubG9jYWxhZG1pbiB8fFxuICBzdWdnZXN0aW9uLmxvY2FsYWRtaW4gfHxcbiAgKHN1Z2dlc3Rpb24uYWRkcmVzcyAmJlxuICAgIHN1Z2dlc3Rpb24uYWRkcmVzcy5sYXN0SW5kZXhPZignLCcpIDwgc3VnZ2VzdGlvbi5hZGRyZXNzLmxlbmd0aCAtIDIgJiZcbiAgICBzdWdnZXN0aW9uLmFkZHJlc3Muc3Vic3RyaW5nKHN1Z2dlc3Rpb24uYWRkcmVzcy5sYXN0SW5kZXhPZignLCcpICsgMikpIHx8XG4gICcnO1xuXG5leHBvcnQgY29uc3QgZ2V0U3RvcENvZGUgPSAoeyBpZCwgY29kZSB9KSA9PiB7XG4gIGlmIChjb2RlKSB7XG4gICAgcmV0dXJuIGNvZGU7XG4gIH1cbiAgaWYgKFxuICAgIGlkID09PSB1bmRlZmluZWQgfHxcbiAgICB0eXBlb2YgaWQuaW5kZXhPZiA9PT0gJ3VuZGVmaW5lZCcgfHxcbiAgICBpZC5pbmRleE9mKCcjJykgPT09IC0xXG4gICkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gaWQgZnJvbSBwZWxpYXNcbiAgcmV0dXJuIGlkLnN1YnN0cmluZyhpZC5pbmRleE9mKCcjJykgKyAxKTtcbn07XG5cbmV4cG9ydCBjb25zdCBmb3JtYXRGYXZvdXJpdGVQbGFjZUxhYmVsID0gKG5hbWUsIGFkZHJlc3MpID0+IFtcbiAgbmFtZSB8fCAoYWRkcmVzcyAmJiBhZGRyZXNzLnNwbGl0KCcsJylbMF0pLFxuICB0eXBlb2YgYWRkcmVzcyA9PT0gJ3N0cmluZydcbiAgICA/IGFkZHJlc3MucmVwbGFjZShuZXcgUmVnRXhwKGAke2VzY2FwZVJlZ0V4cChuYW1lKX0oWyAsXXwkKStgKSwgJycpXG4gICAgOiAnJyxcbl07XG5cbi8qKlxuICogRm9ybWF0IHN1Z2dlc3Rpb24tcGFpciBbbmFtZSwgYWRkcmVzc10gYnkgYHN1Z2dlc3Rpb24ubGF5ZXJgLlxuICpcbiAqIEBuYW1lIGdldE5hbWVMYWJlbFxuICogQHBhcmFtIHtMb2NhdGlvblByb3BlcnRpZXN9IHN1Z2dlc3Rpb25cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3BsYWluXVxuICpcbiAqIEByZXR1cm5zIHtBcnJheS48c3RyaW5nPn0gRm9ybWF0dGVkIGxhYmVsLlxuICovXG5leHBvcnQgY29uc3QgZ2V0TmFtZUxhYmVsID0gbWVtb2l6ZShcbiAgKHN1Z2dlc3Rpb24sIHBsYWluID0gZmFsc2UpID0+IHtcbiAgICBzd2l0Y2ggKHN1Z2dlc3Rpb24ubGF5ZXIpIHtcbiAgICAgIGNhc2UgJ2N1cnJlbnRQb3NpdGlvbic6XG4gICAgICAgIHJldHVybiBbc3VnZ2VzdGlvbi5sYWJlbElkLCBzdWdnZXN0aW9uLmFkZHJlc3NdO1xuICAgICAgY2FzZSAnc2VsZWN0RnJvbU1hcCc6XG4gICAgICBjYXNlICdvd25Mb2NhdGlvbnMnOlxuICAgICAgY2FzZSAnYmFjayc6XG4gICAgICAgIHJldHVybiBbc3VnZ2VzdGlvbi5sYWJlbElkXTtcbiAgICAgIGNhc2UgJ2Zhdm91cml0ZVBsYWNlJzpcbiAgICAgICAgcmV0dXJuIGZvcm1hdEZhdm91cml0ZVBsYWNlTGFiZWwoc3VnZ2VzdGlvbi5uYW1lLCBzdWdnZXN0aW9uLmFkZHJlc3MpO1xuICAgICAgY2FzZSAnZmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb24nOlxuICAgICAgY2FzZSAnYmlrZXN0YXRpb24nOlxuICAgICAgICByZXR1cm4gW3N1Z2dlc3Rpb24ubmFtZV07XG4gICAgICBjYXNlICdmYXZvdXJpdGVSb3V0ZSc6XG4gICAgICBjYXNlICdyb3V0ZS1CVVMnOlxuICAgICAgY2FzZSAncm91dGUtVFJBTSc6XG4gICAgICBjYXNlICdyb3V0ZS1SQUlMJzpcbiAgICAgIGNhc2UgJ3JvdXRlLVNVQldBWSc6XG4gICAgICBjYXNlICdyb3V0ZS1GRVJSWSc6XG4gICAgICBjYXNlICdyb3V0ZS1GVU5JQ1VMQVInOlxuICAgICAgY2FzZSAncm91dGUtQUlSUExBTkUnOlxuICAgICAgICByZXR1cm4gIXBsYWluICYmIHN1Z2dlc3Rpb24uc2hvcnROYW1lXG4gICAgICAgICAgPyBbXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24uZ3Rmc0lkLFxuICAgICAgICAgICAgICBzdWdnZXN0aW9uLm1vZGUudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5sb25nTmFtZSxcbiAgICAgICAgICAgIF1cbiAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5zaG9ydE5hbWUsXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24ubG9uZ05hbWUsXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24uYWdlbmN5ID8gc3VnZ2VzdGlvbi5hZ2VuY3kubmFtZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIF07XG4gICAgICBjYXNlICd2ZW51ZSc6XG4gICAgICBjYXNlICdhZGRyZXNzJzpcbiAgICAgIGNhc2UgJ3N0cmVldCc6XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgc3VnZ2VzdGlvbi5uYW1lLFxuICAgICAgICAgIHN1Z2dlc3Rpb24ubGFiZWwucmVwbGFjZShcbiAgICAgICAgICAgIG5ldyBSZWdFeHAoYCR7ZXNjYXBlUmVnRXhwKHN1Z2dlc3Rpb24ubmFtZSl9KCwpPyggKT9gKSxcbiAgICAgICAgICAgICcnLFxuICAgICAgICAgICksXG4gICAgICAgIF07XG4gICAgICBjYXNlICdmYXZvdXJpdGVTdG9wJzpcbiAgICAgIGNhc2UgJ3N0b3AnOlxuICAgICAgICByZXR1cm4gcGxhaW5cbiAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5uYW1lIHx8XG4gICAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5sYWJlbCB8fFxuICAgICAgICAgICAgICAgIChzdWdnZXN0aW9uLmFkZHJlc3MgJiYgc3VnZ2VzdGlvbi5hZGRyZXNzLnNwbGl0KCcsJylbMF0pLFxuICAgICAgICAgICAgICBnZXRMb2NhbGFkbWluKHN1Z2dlc3Rpb24pLFxuICAgICAgICAgICAgXVxuICAgICAgICAgIDogW1xuICAgICAgICAgICAgICBzdWdnZXN0aW9uLm5hbWUsXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24uaWQsXG4gICAgICAgICAgICAgIGdldFN0b3BDb2RlKHN1Z2dlc3Rpb24pLFxuICAgICAgICAgICAgICBnZXRMb2NhbGFkbWluKHN1Z2dlc3Rpb24pLFxuICAgICAgICAgICAgXTtcbiAgICAgIGNhc2UgJ2Zhdm91cml0ZVN0YXRpb24nOlxuICAgICAgY2FzZSAnc3RhdGlvbic6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIHN1Z2dlc3Rpb24ubmFtZSB8fFxuICAgICAgICAgICAgc3VnZ2VzdGlvbi5sYWJlbCB8fFxuICAgICAgICAgICAgKHN1Z2dlc3Rpb24uYWRkcmVzcyAmJiBzdWdnZXN0aW9uLmFkZHJlc3Muc3BsaXQoJywnKVswXSksXG4gICAgICAgICAgZ2V0TG9jYWxhZG1pbihzdWdnZXN0aW9uKSxcbiAgICAgICAgXTtcbiAgICB9XG4gIH0sXG4gIChpdGVtLCBwbGFpbikgPT4ge1xuICAgIGNvbnN0IGkgPSBjbG9uZURlZXAoaXRlbSk7XG4gICAgaS5wbGFpbiA9IHBsYWluO1xuICAgIHJldHVybiBpO1xuICB9LFxuKTtcblxuLyoqXG4gKiBDaGVja3MgdGhhdCBmZWF0dXJlcyBhcmUgdW5pcXVlIGJ5IGxhYmVsXG4gKlxuICogQG5hbWUgdW5pcUJ5TGFiZWxcbiAqIEBwYXJhbSB7QXJyYXl9IGZlYXR1cmVzIEFycmF5IG9mIGZlYXR1cmVzXG4gKiBAcmV0dXJucyB7QXJyYXl9ICBBcnJheSBvZiB1bmlxdWUgZmVhdHVyZXNcbiAqIEBleGFtcGxlXG4gKiBkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC51bmlxQnlMYWJlbChmZWF0dXJlcyk7XG4gKiAvLz0gQXJyYXkoMilcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdW5pcUJ5TGFiZWwoZmVhdHVyZXMpIHtcbiAgcmV0dXJuIHVuaXFXaXRoKGZlYXR1cmVzLCAoZmVhdDEsIGZlYXQyKSA9PiB7XG4gICAgaWYgKGZlYXQxLnR5cGUgPT09ICdGdXR1cmVSb3V0ZScgfHwgZmVhdDIudHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgaXNFcXVhbChnZXROYW1lTGFiZWwoZmVhdDEucHJvcGVydGllcyksIGdldE5hbWVMYWJlbChmZWF0Mi5wcm9wZXJ0aWVzKSkgJiZcbiAgICAgIGZlYXQxLnByb3BlcnRpZXMubGF5ZXIgPT09IGZlYXQyLnByb3BlcnRpZXMubGF5ZXJcbiAgICApO1xuICB9KTtcbn1cbiIsImZ1bmN0aW9uIHN0eWxlSW5qZWN0KGNzcywgcmVmKSB7XG4gIGlmICggcmVmID09PSB2b2lkIDAgKSByZWYgPSB7fTtcbiAgdmFyIGluc2VydEF0ID0gcmVmLmluc2VydEF0O1xuXG4gIGlmICghY3NzIHx8IHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuOyB9XG5cbiAgdmFyIGhlYWQgPSBkb2N1bWVudC5oZWFkIHx8IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07XG4gIHZhciBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gIHN0eWxlLnR5cGUgPSAndGV4dC9jc3MnO1xuXG4gIGlmIChpbnNlcnRBdCA9PT0gJ3RvcCcpIHtcbiAgICBpZiAoaGVhZC5maXJzdENoaWxkKSB7XG4gICAgICBoZWFkLmluc2VydEJlZm9yZShzdHlsZSwgaGVhZC5maXJzdENoaWxkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuICB9XG5cbiAgaWYgKHN0eWxlLnN0eWxlU2hlZXQpIHtcbiAgICBzdHlsZS5zdHlsZVNoZWV0LmNzc1RleHQgPSBjc3M7XG4gIH0gZWxzZSB7XG4gICAgc3R5bGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgc3R5bGVJbmplY3Q7XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9jbGljay1ldmVudHMtaGF2ZS1rZXktZXZlbnRzICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9tb2RhbC1jb250ZW50LnNjc3MnO1xuXG5jb25zdCBNb2RhbENvbnRlbnQgPSAoeyBoZWFkZXJUZXh0LCByZW5kZXJMaXN0IH0pID0+IHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzWydmYXZvdXJpdGUtZWRpdC1tb2RhbC1jb250ZW50LWNvbnRhaW5lciddfT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXNbJ2Zhdm91cml0ZS1lZGl0LW1vZGFsLWNvbnRlbnQtdG9wJ119PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzWydmYXZvdXJpdGUtZWRpdC1tb2RhbC1jb250ZW50LWhlYWRlciddfT5cbiAgICAgICAgICB7aGVhZGVyVGV4dH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIHtyZW5kZXJMaXN0KCl9XG4gICAgPC9kaXY+XG4gICk7XG59O1xuXG5Nb2RhbENvbnRlbnQucHJvcFR5cGVzID0ge1xuICBoZWFkZXJUZXh0OiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIHJlbmRlckxpc3Q6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBNb2RhbENvbnRlbnQ7XG4iLCJjb25zdCB0cmFuc2xhdGlvbnMgPSB7XG4gIGRlOiB7XG4gICAgY2FuY2VsOiAnQWJicmVjaGVuJyxcbiAgICBkZWxldGU6ICdMw7ZzY2hlbicsXG4gICAgJ2RlbGV0ZS1wbGFjZS1oZWFkZXInOiAnV29sbGVuIFNpZSBkZW4gRmF2b3JpdGVuIGzDtnNjaGVuPycsXG4gICAgJ2RlbGV0ZS1wbGFjZS1uYW1lJzogJ0zDtnNjaGUgRmF2b3JpdDoge3tmYXZvdXJpdGUubmFtZX19JyxcbiAgICAnZWRpdC1wbGFjZXMnOiAnQmVhcmJlaXRlIEZhdm9yaXRlbicsXG4gICAgJ2VkaXQtcGxhY2UtbmFtZSc6ICdCZWFyYmVpdGUgRmF2b3JpdDoge3tmYXZvdXJpdGUubmFtZX19JyxcbiAgICAnZWRpdC1tb2RhbC1vbi1vcGVuJzogJ0Zhdm9yaXRlbiBiZWFyYmVpdGVuLicsXG4gICAgJ2Nob29zZS1pY29uJzogJ1fDpGhsZSBkYXMgU3ltYm9sIGbDvHIgZGllc2VuIE9ydCcsXG4gICAgJ2Nsb3NlLW1vZGFsJzogJ1NjaGxpZcOfZSBkZW4gRGlhbG9nJyxcbiAgICAnaW5wdXQtcGxhY2Vob2xkZXInOiAnV8OkaGxlbiBTaWUgZWluZW4gTmFtZSBmw7xyIGRpZXNlbiBPcnQgKG9wdGlvbmFsKScsXG4gICAgc2F2ZTogJ1NwZWljaGVybicsXG4gICAgJ3NhdmUtcGxhY2UnOiAnRmF2b3JpdCBzcGVpY2hlcm4nLFxuICB9LFxuICBlbjoge1xuICAgIGNhbmNlbDogJ0NhbmNlbCcsXG4gICAgZGVsZXRlOiAnRGVsZXRlJyxcbiAgICAnZGVsZXRlLXBsYWNlLWhlYWRlcic6ICdEbyB5b3Ugd2FudCB0byBkZWxldGUgdGhlIHBsYWNlPycsXG4gICAgJ2RlbGV0ZS1wbGFjZS1uYW1lJzogJ0RlbGV0ZSBwbGFjZToge3tmYXZvdXJpdGUubmFtZX19JyxcbiAgICAnZWRpdC1wbGFjZXMnOiAnRWRpdCBwbGFjZXMnLFxuICAgICdlZGl0LXBsYWNlLW5hbWUnOiAnRWRpdCBwbGFjZToge3tmYXZvdXJpdGUubmFtZX19JyxcbiAgICAnZWRpdC1tb2RhbC1vbi1vcGVuJzogJ0Zhdm91cml0ZSBlZGl0aW5nIG1vZGFsLicsXG4gICAgJ2Nob29zZS1pY29uJzogXCJTZWxlY3QgdGhlIHBsYWNlJ3MgaWNvblwiLFxuICAgICdjbG9zZS1tb2RhbCc6ICdDbG9zZSB0aGUgbW9kYWwnLFxuICAgICdpbnB1dC1wbGFjZWhvbGRlcic6ICdHaXZlIHRoZSBuYW1lIGEgcGxhY2UgKG9wdGlvbmFsKScsXG4gICAgc2F2ZTogJ1NhdmUnLFxuICAgICdzYXZlLXBsYWNlJzogJ1NhdmUgcGxhY2UnLFxuICAgIHVwOiAnTW92ZSBmYXZvdXJpdGUgdXAnLFxuICAgIGRvd246ICdNb3ZlIGZhdm91cml0ZSBkb3duJyxcbiAgfSxcbiAgZmk6IHtcbiAgICBjYW5jZWw6ICdQZXJ1dXRhJyxcbiAgICBkZWxldGU6ICdQb2lzdGEnLFxuICAgICdkZWxldGUtcGxhY2UtaGVhZGVyJzogJ0hhbHVhdGtvIHBvaXN0YWEgcGFpa2FuPycsXG4gICAgJ2RlbGV0ZS1wbGFjZS1uYW1lJzogJ1BvaXN0YSBwYWlra2E6IHt7ZmF2b3VyaXRlLm5hbWV9fScsXG4gICAgJ2VkaXQtcGxhY2VzJzogJ011b2trYWEgcGFpa2tvamEnLFxuICAgICdlZGl0LXBsYWNlLW5hbWUnOiAnTXVva2thYSBwYWlra2FhOiB7e2Zhdm91cml0ZS5uYW1lfX0nLFxuICAgICdlZGl0LW1vZGFsLW9uLW9wZW4nOiAnU3Vvc2lra2llbiBtdW9ra2F1cyBtb2RhYWxpLicsXG4gICAgJ2Nob29zZS1pY29uJzogJ1ZhbGl0c2UgcGFpa2FuIGt1dmFrZScsXG4gICAgJ2Nsb3NlLW1vZGFsJzogJ1N1bGplIG1vZGFhbGknLFxuICAgICdpbnB1dC1wbGFjZWhvbGRlcic6ICdBbm5hIHBhaWthbGxlIG5pbWkgKHZhcGFhZWh0b2luZW4pJyxcbiAgICBzYXZlOiAnVGFsbGVubmEnLFxuICAgICdzYXZlLXBsYWNlJzogJ1RhbGxlbm5hIHBhaWtrYScsXG4gICAgdXA6ICdTaWlycsOkIHN1b3Npa2tpc2lqYWludGlhIHlsw7Zww6RpbicsXG4gICAgZG93bjogJ1NpaXJyw6Qgc3Vvc2lra2lzaWphaW50aWEgYWxhc3DDpGluJyxcbiAgfSxcbiAgcGw6IHtcbiAgICBjYW5jZWw6ICdBbnVsdWonLFxuICAgIGRlbGV0ZTogJ1VzdcWEJyxcbiAgICAnZGVsZXRlLXBsYWNlLWhlYWRlcic6ICdDenkgbmEgcGV3bm8gY2hjZXN6IHVzdW7EhcSHIHRvIG1pZWpzY2U/JyxcbiAgICAnZGVsZXRlLXBsYWNlLW5hbWUnOiAnVXN1xYQgbWllanNjZToge3tmYXZvdXJpdGUubmFtZX19JyxcbiAgICAnZWRpdC1wbGFjZXMnOiAnRWR5dHVqIG1pZWpzY2EnLFxuICAgICdlZGl0LXBsYWNlLW5hbWUnOiAnRWR5dHVqIG1pZWpzY2U6IHt7ZmF2b3VyaXRlLm5hbWV9fScsXG4gICAgJ2VkaXQtbW9kYWwtb24tb3Blbic6ICdNb2RhbCBlZHljamkgdWx1YmlvbnljaC4nLFxuICAgICdjaG9vc2UtaWNvbic6ICdXeWJpZXJ6IGlrb27EmSBtaWVqc2NhJyxcbiAgICAnY2xvc2UtbW9kYWwnOiAnWmFta25paiBtb2RhbCcsXG4gICAgJ2lucHV0LXBsYWNlaG9sZGVyJzogJ05hZGFqIG5henfEmSBtaWVqc2N1IChvcGNqb25hbG5lKScsXG4gICAgc2F2ZTogJ1phcGlzeicsXG4gICAgJ3NhdmUtcGxhY2UnOiAnWmFwaXN6IG1pZWpzY2UnLFxuICAgIHVwOiAnUHJ6ZW5pZcWbIHVsdWJpb25lIHd5xbxlaicsXG4gICAgZG93bjogJ1ByemVuaWXFmyB1bHViaW9uZSBuacW8ZWonLFxuICB9LFxuICBzdjoge1xuICAgIGNhbmNlbDogJ0F2YnJ5dCcsXG4gICAgZGVsZXRlOiAnVGEgYm9ydCcsXG4gICAgJ2RlbGV0ZS1wbGFjZS1oZWFkZXInOiAnVmlsbCBkdSB0YSBib3J0IHBsYXRzZW4/JyxcbiAgICAnZGVsZXRlLXBsYWNlLW5hbWUnOiAnVGEgYm9ydCBwbGF0c2VuOiB7e2Zhdm91cml0ZS5uYW1lfX0nLFxuICAgICdlZGl0LXBsYWNlcyc6ICdSZWRpZ2VyYSBwbGF0c2VyJyxcbiAgICAnZWRpdC1wbGFjZS1uYW1lJzogJ0VkaXQgcGxhY2U6IHt7ZmF2b3VyaXRlLm5hbWV9fScsXG4gICAgJ2VkaXQtbW9kYWwtb24tb3Blbic6ICdGYXZvdXJpdGUgZWRpdGluZyBtb2RhbC4nLFxuICAgICdjaG9vc2UtaWNvbic6ICdWw6RsaiBwbGF0c2VucyBpa29uJyxcbiAgICAnY2xvc2UtbW9kYWwnOiAnU3TDpG5nIG1vZGFsZW4nLFxuICAgICdpbnB1dC1wbGFjZWhvbGRlcic6ICdBbmdlIHBsYXRzZW5zIG5hbW4gKGZyaXZpbGxpZ3QpJyxcbiAgICBzYXZlOiAnU3BhcmEnLFxuICAgICdzYXZlLXBsYWNlJzogJ1NwYXJhIHBsYXRzJyxcbiAgICB1cDogJ0ZseXR0YSBmYXZvcml0ZW4gdXBww6V0JyxcbiAgICBkb3duOiAnRmx5dHRhIGZhdm9yaXRlbiBuZWTDpXQnLFxuICB9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgdHJhbnNsYXRpb25zO1xuIiwiLyogZXNsaW50IHJlYWN0L2ZvcmJpZC1wcm9wLXR5cGVzOiAwICovXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFJlYWN0U29ydGFibGUgfSBmcm9tICdyZWFjdC1zb3J0YWJsZWpzJztcbmltcG9ydCBjeCBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBpMThuZXh0IGZyb20gJ2kxOG5leHQnO1xuaW1wb3J0IGRpZmZlcmVuY2VXaXRoIGZyb20gJ2xvZGFzaC9kaWZmZXJlbmNlV2l0aCc7XG5pbXBvcnQgaXNFcXVhbCBmcm9tICdsb2Rhc2gvaXNFcXVhbCc7XG5pbXBvcnQgaXNFbXB0eSBmcm9tICdsb2Rhc2gvaXNFbXB0eSc7XG5pbXBvcnQgb21pdCBmcm9tICdsb2Rhc2gvb21pdCc7XG5pbXBvcnQgQ29udGFpbmVyU3Bpbm5lciBmcm9tICdAaHNsLWZpL2NvbnRhaW5lci1zcGlubmVyJztcbmltcG9ydCBNb2RhbCBmcm9tICdAaHNsLWZpL21vZGFsJztcbmltcG9ydCBJY29uIGZyb20gJ0BkaWdpdHJhbnNpdC1jb21wb25lbnQvZGlnaXRyYW5zaXQtY29tcG9uZW50LWljb24nO1xuaW1wb3J0IERpYWxvZ01vZGFsIGZyb20gJ0BkaWdpdHJhbnNpdC1jb21wb25lbnQvZGlnaXRyYW5zaXQtY29tcG9uZW50LWRpYWxvZy1tb2RhbCc7XG5pbXBvcnQgeyBmb3JtYXRGYXZvdXJpdGVQbGFjZUxhYmVsIH0gZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXVuaXEtYnktbGFiZWwnO1xuaW1wb3J0IE1vZGFsQ29udGVudCBmcm9tICcuL2hlbHBlcnMvTW9kYWxDb250ZW50JztcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9oZWxwZXJzL3N0eWxlcy5zY3NzJztcbmltcG9ydCB0cmFuc2xhdGlvbnMgZnJvbSAnLi9oZWxwZXJzL3RyYW5zbGF0aW9ucyc7XG5cbmkxOG5leHQuaW5pdCh7XG4gIGxuZzogJ2ZpJyxcbiAgZmFsbGJhY2tMbmc6ICdmaScsXG4gIGRlZmF1bHROUzogJ3RyYW5zbGF0aW9uJyxcbiAgaW50ZXJwb2xhdGlvbjoge1xuICAgIGVzY2FwZVZhbHVlOiBmYWxzZSwgLy8gbm90IG5lZWRlZCBmb3IgcmVhY3QgYXMgaXQgZXNjYXBlcyBieSBkZWZhdWx0XG4gIH0sXG59KTtcblxuY29uc3QgaXNLZXlib2FyZFNlbGVjdGlvbkV2ZW50ID0gZXZlbnQgPT4ge1xuICBjb25zdCBzcGFjZSA9IFsxMywgJyAnLCAnU3BhY2ViYXInXTtcbiAgY29uc3QgZW50ZXIgPSBbMzIsICdFbnRlciddO1xuICBjb25zdCBrZXkgPSAoZXZlbnQgJiYgKGV2ZW50LmtleSB8fCBldmVudC53aGljaCB8fCBldmVudC5rZXlDb2RlKSkgfHwgJyc7XG5cbiAgaWYgKCFrZXkgfHwgIXNwYWNlLmNvbmNhdChlbnRlcikuaW5jbHVkZXMoa2V5KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmNsYXNzIEZhdm91cml0ZUVkaXRpbmdNb2RhbCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgLyoqIFJlcXVpcmVkLiBDbG9zZSBtb2RhbC5cbiAgICAgKiBAdHlwZSB7ZnVuY3Rpb259ICovXG4gICAgaGFuZGxlQ2xvc2U6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgLyoqIFJlcXVpcmVkLlxuICAgICAqIEB0eXBlIHtmdW5jdGlvbn0gKi9cbiAgICB1cGRhdGVGYXZvdXJpdGVzOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIC8qKiBSZXF1aXJlZC5cbiAgICAgKiBAdHlwZSB7ZnVuY3Rpb259ICovXG4gICAgZGVsZXRlRmF2b3VyaXRlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIC8qKiBSZXF1aXJlZC4gRnVuY3Rpb24gdGhhdCB0YWtlcyBzZWxlY3RlZCBmYXZvdXJpdGUgb2JqZWN0IGFzIHBhcmFtZXRlci5cbiAgICAgKiBAdHlwZSB7ZnVuY3Rpb259ICovXG4gICAgb25FZGl0U2VsZWN0ZWQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgLyoqIFJlcXVpcmVkLlxuICAgICAqIEB0eXBlIHthcnJheTxvYmplY3Q+fVxuICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0eXBlXG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IGFkZHJlc3NcbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gZ3Rmc0lkXG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IGdpZFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsYXRcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gbG9uXG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IG5hbWVcbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gc2VsZWN0ZWRJY29uSWRcbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gZmF2b3VyaXRlSWRcbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gbGF5ZXJcbiAgICAgKi9cbiAgICBmYXZvdXJpdGVzOiBQcm9wVHlwZXMuYXJyYXlPZihcbiAgICAgIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICAgIHR5cGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICAgIGFkZHJlc3M6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICAgIGd0ZnNJZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgICAgZ2lkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgICBsYXQ6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgICAgIGxvbjogUHJvcFR5cGVzLm51bWJlcixcbiAgICAgICAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgICAgc2VsZWN0ZWRJY29uSWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICAgIGZhdm91cml0ZUlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgICBsYXllcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIH0pLFxuICAgICkuaXNSZXF1aXJlZCxcbiAgICBsYW5nOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGFwcEVsZW1lbnQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBpc01vZGFsT3BlbjogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgICBpc01vYmlsZTogUHJvcFR5cGVzLmJvb2wsXG4gICAgaXNMb2FkaW5nOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAgIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGhvdmVyQ29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgLyoqIE9wdGlvbmFsLiAqL1xuICAgIGZvbnRXZWlnaHRzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgLyoqIERlZmF1bHQgdmFsdWUgaXMgNTAwLiAqL1xuICAgICAgbWVkaXVtOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIH0pLFxuICB9O1xuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgbGFuZzogJ2ZpJyxcbiAgICBpc01vYmlsZTogZmFsc2UsXG4gICAgY29sb3I6ICcjMDA3YWM5JyxcbiAgICBob3ZlckNvbG9yOiAnIzAwNjJhMScsXG4gICAgZm9udFdlaWdodHM6IHtcbiAgICAgIG1lZGl1bTogNTAwLFxuICAgIH0sXG4gIH07XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgaTE4bmV4dC5jaGFuZ2VMYW5ndWFnZShwcm9wcy5sYW5nKTtcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgZmF2b3VyaXRlczogcHJvcHMuZmF2b3VyaXRlcyxcbiAgICAgIHNob3dEZWxldGVQbGFjZU1vZGFsOiBmYWxzZSxcbiAgICAgIHNlbGVjdGVkRmF2b3VyaXRlOiBudWxsLFxuICAgIH07XG4gICAgT2JqZWN0LmtleXModHJhbnNsYXRpb25zKS5mb3JFYWNoKGxhbmcgPT4ge1xuICAgICAgaTE4bmV4dC5hZGRSZXNvdXJjZUJ1bmRsZShsYW5nLCAndHJhbnNsYXRpb24nLCB0cmFuc2xhdGlvbnNbbGFuZ10pO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhuZXh0UHJvcHMsIHByZXZTdGF0ZSkge1xuICAgIGNvbnN0IG5leHRGYXZvdXJpdGVzID0gbmV4dFByb3BzLmZhdm91cml0ZXM7XG4gICAgY29uc3QgcHJldkZhdm91cml0ZXMgPSBwcmV2U3RhdGUuZmF2b3VyaXRlcztcbiAgICBpZiAoXG4gICAgICAhaXNFbXB0eShkaWZmZXJlbmNlV2l0aChuZXh0RmF2b3VyaXRlcywgcHJldkZhdm91cml0ZXMsIGlzRXF1YWwpKSB8fFxuICAgICAgIWlzRW1wdHkoZGlmZmVyZW5jZVdpdGgocHJldkZhdm91cml0ZXMsIG5leHRGYXZvdXJpdGVzLCBpc0VxdWFsKSlcbiAgICApIHtcbiAgICAgIGlmIChpc0VtcHR5KG5leHRGYXZvdXJpdGVzKSkge1xuICAgICAgICBuZXh0UHJvcHMuaGFuZGxlQ2xvc2UoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZhdm91cml0ZXM6IG5leHRGYXZvdXJpdGVzLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb21wb25lbnREaWRVcGRhdGUoKSB7XG4gICAgaWYgKGkxOG5leHQubGFuZ3VhZ2UgIT09IHRoaXMucHJvcHMubGFuZykge1xuICAgICAgaTE4bmV4dC5jaGFuZ2VMYW5ndWFnZSh0aGlzLnByb3BzLmxhbmcpO1xuICAgIH1cbiAgfVxuXG4gIG1vdmVGYXZvdXJpdGUgPSAoaSwgZGlyZWN0aW9uKSA9PiB7XG4gICAgY29uc3QgeyBmYXZvdXJpdGVzIH0gPSB0aGlzLnN0YXRlO1xuICAgIC8vIEVkaXQgY29weSBvZiB0aGUgZmF2b3VyaXRlcyB0byBhdm9pZCBjaGFuZ2luZyB0aGUgcHJvcHMuZmF2b3VyaXRlcyB1c2VkIGZvciBzdGF0ZSBpbml0aWFsaXphdGlvblxuICAgIGNvbnN0IGZhdm91cml0ZXNDb3B5ID0gWy4uLmZhdm91cml0ZXNdO1xuXG4gICAgY29uc3QgdG1wID0gZmF2b3VyaXRlc0NvcHlbaSArIGRpcmVjdGlvbl07XG4gICAgZmF2b3VyaXRlc0NvcHlbaSArIGRpcmVjdGlvbl0gPSBmYXZvdXJpdGVzQ29weVtpXTtcbiAgICBmYXZvdXJpdGVzQ29weVtpXSA9IHRtcDtcblxuICAgIHRoaXMuc2V0U3RhdGUoeyBmYXZvdXJpdGVzOiBmYXZvdXJpdGVzQ29weSB9KTtcbiAgfTtcblxuICByZW5kZXJGYXZvdXJpdGVMaXN0SXRlbSA9IChmYXZvdXJpdGUsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgaWNvbklkID0gZmF2b3VyaXRlLnNlbGVjdGVkSWNvbklkXG4gICAgICA/IGZhdm91cml0ZS5zZWxlY3RlZEljb25JZC5yZXBsYWNlKCdpY29uLWljb25fJywgJycpXG4gICAgICA6ICdwbGFjZSc7XG4gICAgY29uc3QgW25hbWUsIGFkZHJlc3NdID0gZm9ybWF0RmF2b3VyaXRlUGxhY2VMYWJlbChcbiAgICAgIGZhdm91cml0ZS5uYW1lLFxuICAgICAgZmF2b3VyaXRlLmFkZHJlc3MsXG4gICAgKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8bGlcbiAgICAgICAgY2xhc3NOYW1lPXtjeChzdHlsZXNbJ2Zhdm91cml0ZS1lZGl0LWxpc3QtaXRlbSddKX1cbiAgICAgICAga2V5PXtmYXZvdXJpdGUuZmF2b3VyaXRlSWR9XG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXNbJ2Zhdm91cml0ZS1lZGl0LWxpc3QtaXRlbS1sZWZ0J119PlxuICAgICAgICAgIHtpbmRleCA+IDAgJiYgKFxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlc1snZmF2b3VyaXRlLWVkaXQtbGlzdC1hcnJvdy1oaWRkZW4nXX1cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9e2kxOG5leHQudCgndXAnKX1cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubW92ZUZhdm91cml0ZShpbmRleCwgLTEpO1xuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAmdWFycjtcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICl9XG4gICAgICAgICAge2luZGV4IDwgdGhpcy5zdGF0ZS5mYXZvdXJpdGVzLmxlbmd0aCAtIDEgJiYgKFxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlc1snZmF2b3VyaXRlLWVkaXQtbGlzdC1hcnJvdy1oaWRkZW4nXX1cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9e2kxOG5leHQudCgnZG93bicpfVxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5tb3ZlRmF2b3VyaXRlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgJmRhcnI7XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICApfVxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXNbJ2Zhdm91cml0ZS1lZGl0LWxpc3QtaXRlbS1kcmFnJ119PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlc1snZmF2b3VyaXRlLWVkaXQtbGlzdC1pdGVtLWVsbGlwc2lzJ119PlxuICAgICAgICAgICAgICA8SWNvbiBpbWc9XCJlbGxpcHNpc1wiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9e2N4KFxuICAgICAgICAgICAgICBzdHlsZXNbJ2Zhdm91cml0ZS1lZGl0LWxpc3QtaXRlbS1pY29uJ10sXG4gICAgICAgICAgICAgIHN0eWxlc1tpY29uSWRdLFxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8SWNvbiBpbWc9e2ljb25JZH0gY29sb3I9e3RoaXMucHJvcHMuY29sb3J9IC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzWydmYXZvdXJpdGUtZWRpdC1saXN0LWl0ZW0tY29udGVudCddfT5cbiAgICAgICAgICA8cCBjbGFzc05hbWU9e3N0eWxlc1snZmF2b3VyaXRlLWVkaXQtbGlzdC1pdGVtLW5hbWUnXX0+e25hbWV9PC9wPlxuICAgICAgICAgIDxwIGNsYXNzTmFtZT17c3R5bGVzWydmYXZvdXJpdGUtZWRpdC1saXN0LWl0ZW0tYWRkcmVzcyddfT5cbiAgICAgICAgICAgIHthZGRyZXNzfVxuICAgICAgICAgIDwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXNbJ2Zhdm91cml0ZS1lZGl0LWxpc3QtaXRlbS1yaWdodCddfT5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIHRhYkluZGV4PVwiMFwiXG4gICAgICAgICAgICBhcmlhLWxhYmVsPXtpMThuZXh0LnQoJ2VkaXQtcGxhY2UtbmFtZScsIHtcbiAgICAgICAgICAgICAgZmF2b3VyaXRlLFxuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlc1snZmF2b3VyaXRlLWVkaXQtbGlzdC1pdGVtLWVkaXQnXX1cbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHRoaXMucHJvcHMub25FZGl0U2VsZWN0ZWQoZmF2b3VyaXRlKX1cbiAgICAgICAgICAgIG9uS2V5RG93bj17ZSA9PiB7XG4gICAgICAgICAgICAgIGlmIChpc0tleWJvYXJkU2VsZWN0aW9uRXZlbnQoZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLm9uRWRpdFNlbGVjdGVkKGZhdm91cml0ZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEljb24gaW1nPVwiZWRpdFwiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICB0YWJJbmRleD1cIjBcIlxuICAgICAgICAgICAgYXJpYS1sYWJlbD17aTE4bmV4dC50KCdkZWxldGUtcGxhY2UtbmFtZScsIHtcbiAgICAgICAgICAgICAgZmF2b3VyaXRlLFxuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlc1snZmF2b3VyaXRlLWVkaXQtbGlzdC1pdGVtLXJlbW92ZSddfVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT5cbiAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRGYXZvdXJpdGU6IGZhdm91cml0ZSxcbiAgICAgICAgICAgICAgICBzaG93RGVsZXRlUGxhY2VNb2RhbDogdHJ1ZSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9uS2V5RG93bj17ZSA9PiB7XG4gICAgICAgICAgICAgIGlmIChpc0tleWJvYXJkU2VsZWN0aW9uRXZlbnQoZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkRmF2b3VyaXRlOiBmYXZvdXJpdGUsXG4gICAgICAgICAgICAgICAgICBzaG93RGVsZXRlUGxhY2VNb2RhbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8SWNvbiBpbWc9XCJ0cmFzaFwiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9saT5cbiAgICApO1xuICB9O1xuXG4gIHJlbmRlckZhdm91cml0ZUxpc3QgPSAoKSA9PiB7XG4gICAgY29uc3QgeyBpc0xvYWRpbmcgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyBmYXZvdXJpdGVzIH0gPSB0aGlzLnN0YXRlO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzWydmYXZvdXJpdGUtZWRpdC1saXN0LWNvbnRhaW5lciddfT5cbiAgICAgICAgPENvbnRhaW5lclNwaW5uZXIgdmlzaWJsZT17aXNMb2FkaW5nfT5cbiAgICAgICAgICA8UmVhY3RTb3J0YWJsZVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXNbJ2Zhdm91cml0ZS1lZGl0LWxpc3QnXX1cbiAgICAgICAgICAgIHRhZz1cInVsXCJcbiAgICAgICAgICAgIGxpc3Q9e2Zhdm91cml0ZXN9XG4gICAgICAgICAgICBzZXRMaXN0PXtpdGVtcyA9PiB0aGlzLnNldFN0YXRlKHsgZmF2b3VyaXRlczogaXRlbXMgfSl9XG4gICAgICAgICAgICBhbmltYXRpb249ezIwMH1cbiAgICAgICAgICAgIGhhbmRsZT17YC4ke3N0eWxlc1snZmF2b3VyaXRlLWVkaXQtbGlzdC1pdGVtLWxlZnQnXX1gfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtmYXZvdXJpdGVzLm1hcCgoZmF2b3VyaXRlLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJGYXZvdXJpdGVMaXN0SXRlbShmYXZvdXJpdGUsIGluZGV4KTtcbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgIDwvUmVhY3RTb3J0YWJsZT5cbiAgICAgICAgPC9Db250YWluZXJTcGlubmVyPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfTtcblxuICByZW5kZXJEZWxldGVGYXZvdXJpdGVNb2RhbCA9IGZhdm91cml0ZSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxEaWFsb2dNb2RhbFxuICAgICAgICBhcHBFbGVtZW50PXt0aGlzLnByb3BzLmFwcEVsZW1lbnR9XG4gICAgICAgIGhlYWRlclRleHQ9e2kxOG5leHQudCgnZGVsZXRlLXBsYWNlLWhlYWRlcicpfVxuICAgICAgICBoYW5kbGVDbG9zZT17KCkgPT5cbiAgICAgICAgICB0aGlzLnNldFN0YXRlKFxuICAgICAgICAgICAgeyBzZWxlY3RlZEZhdm91cml0ZTogbnVsbCwgc2hvd0RlbGV0ZVBsYWNlTW9kYWw6IGZhbHNlIH0sXG4gICAgICAgICAgICAoKSA9PiB0aGlzLnByb3BzLmhhbmRsZUNsb3NlKCksXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICAgIGlzTW9kYWxPcGVuPXt0aGlzLnN0YXRlLnNob3dEZWxldGVQbGFjZU1vZGFsfVxuICAgICAgICBkaWFsb2dDb250ZW50PXtcbiAgICAgICAgICBmYXZvdXJpdGUgPyBgJHtmYXZvdXJpdGUubmFtZX06ICR7ZmF2b3VyaXRlLmFkZHJlc3N9YCA6ICcnXG4gICAgICAgIH1cbiAgICAgICAgcHJpbWFyeUJ1dHRvblRleHQ9e2kxOG5leHQudCgnZGVsZXRlJyl9XG4gICAgICAgIHByaW1hcnlCdXR0b25PbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgdGhpcy5wcm9wcy5kZWxldGVGYXZvdXJpdGUoZmF2b3VyaXRlKTtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIHNlbGVjdGVkRmF2b3VyaXRlOiBudWxsLFxuICAgICAgICAgICAgc2hvd0RlbGV0ZVBsYWNlTW9kYWw6IGZhbHNlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9fVxuICAgICAgICBzZWNvbmRhcnlCdXR0b25UZXh0PXtpMThuZXh0LnQoJ2NhbmNlbCcpfVxuICAgICAgICBzZWNvbmRhcnlCdXR0b25PbkNsaWNrPXsoKSA9PlxuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgc2VsZWN0ZWRGYXZvdXJpdGU6IG51bGwsXG4gICAgICAgICAgICBzaG93RGVsZXRlUGxhY2VNb2RhbDogZmFsc2UsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgICBjb2xvcj17dGhpcy5wcm9wcy5jb2xvcn1cbiAgICAgICAgaG92ZXJDb2xvcj17dGhpcy5wcm9wcy5ob3ZlckNvbG9yfVxuICAgICAgICBmb250V2VpZ2h0cz17dGhpcy5wcm9wcy5mb250V2VpZ2h0c31cbiAgICAgICAgbGFuZz17dGhpcy5wcm9wcy5sYW5nfVxuICAgICAgLz5cbiAgICApO1xuICB9O1xuXG4gIGNsb3NlTW9kYWwgPSAoKSA9PiB7XG4gICAgdGhpcy5wcm9wcy5oYW5kbGVDbG9zZSgpO1xuICAgIGNvbnN0IG9taXR0ZWRGYXZvdXJpdGVzID0gdGhpcy5zdGF0ZS5mYXZvdXJpdGVzLm1hcChpdGVtID0+XG4gICAgICBvbWl0KGl0ZW0sIFsnY2hvc2VuJywgJ3NlbGVjdGVkJ10pLFxuICAgICk7XG4gICAgaWYgKCFpc0VxdWFsKG9taXR0ZWRGYXZvdXJpdGVzLCB0aGlzLnByb3BzLmZhdm91cml0ZXMpKSB7XG4gICAgICB0aGlzLnByb3BzLnVwZGF0ZUZhdm91cml0ZXMob21pdHRlZEZhdm91cml0ZXMpO1xuICAgIH1cbiAgfTtcblxuICByZW5kZXJNb2RhbENvbnRlbnQgPSAoKSA9PiB7XG4gICAgY29uc3QgeyBjb2xvciwgaG92ZXJDb2xvciwgZm9udFdlaWdodHMgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgbW9kYWxQcm9wcyA9IHtcbiAgICAgIGhlYWRlclRleHQ6IGkxOG5leHQudCgnZWRpdC1wbGFjZXMnKSxcbiAgICAgIHJlbmRlckxpc3Q6ICgpID0+IHRoaXMucmVuZGVyRmF2b3VyaXRlTGlzdCgpLFxuICAgIH07XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAnLS1jb2xvcic6IGAke2NvbG9yfWAsXG4gICAgICAgICAgJy0taG92ZXItY29sb3InOiBgJHtob3ZlckNvbG9yfWAsXG4gICAgICAgICAgJy0tZm9udC13ZWlnaHQtbWVkaXVtJzogZm9udFdlaWdodHMubWVkaXVtLFxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICA8TW9kYWxDb250ZW50IHsuLi5tb2RhbFByb3BzfSAvPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfTtcblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyBpc01vYmlsZSB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IHNob3dEZWxldGVQbGFjZU1vZGFsLCBzZWxlY3RlZEZhdm91cml0ZSB9ID0gdGhpcy5zdGF0ZTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdj5cbiAgICAgICAge2lzTW9iaWxlICYmIChcbiAgICAgICAgICA8TW9kYWxcbiAgICAgICAgICAgIGFwcEVsZW1lbnQ9e3RoaXMucHJvcHMuYXBwRWxlbWVudH1cbiAgICAgICAgICAgIGNvbnRlbnRMYWJlbD17aTE4bmV4dC50KCdlZGl0LW1vZGFsLW9uLW9wZW4nKX1cbiAgICAgICAgICAgIGNsb3NlQnV0dG9uTGFiZWw9e2kxOG5leHQudCgnY2xvc2UtbW9kYWwnKX1cbiAgICAgICAgICAgIHZhcmlhbnQ9XCJsYXJnZVwiXG4gICAgICAgICAgICBpc09wZW49e3RoaXMucHJvcHMuaXNNb2RhbE9wZW59XG4gICAgICAgICAgICBvbkNyb3NzQ2xpY2s9e3RoaXMuY2xvc2VNb2RhbH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7dGhpcy5yZW5kZXJEZWxldGVGYXZvdXJpdGVNb2RhbChzZWxlY3RlZEZhdm91cml0ZSl9XG4gICAgICAgICAgICB7dGhpcy5yZW5kZXJNb2RhbENvbnRlbnQoKX1cbiAgICAgICAgICA8L01vZGFsPlxuICAgICAgICApfVxuICAgICAgICB7IWlzTW9iaWxlICYmIChcbiAgICAgICAgICA8TW9kYWxcbiAgICAgICAgICAgIGFwcEVsZW1lbnQ9e3RoaXMucHJvcHMuYXBwRWxlbWVudH1cbiAgICAgICAgICAgIGNvbnRlbnRMYWJlbD17aTE4bmV4dC50KCdlZGl0LW1vZGFsLW9uLW9wZW4nKX1cbiAgICAgICAgICAgIGNsb3NlQnV0dG9uTGFiZWw9e2kxOG5leHQudCgnY2xvc2UtbW9kYWwnKX1cbiAgICAgICAgICAgIHZhcmlhbnQ9XCJzbWFsbFwiXG4gICAgICAgICAgICBpc09wZW49e3RoaXMucHJvcHMuaXNNb2RhbE9wZW59XG4gICAgICAgICAgICBvbkNyb3NzQ2xpY2s9e3RoaXMuY2xvc2VNb2RhbH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7dGhpcy5yZW5kZXJEZWxldGVGYXZvdXJpdGVNb2RhbChzZWxlY3RlZEZhdm91cml0ZSl9XG4gICAgICAgICAgICB7IXNob3dEZWxldGVQbGFjZU1vZGFsICYmIHRoaXMucmVuZGVyTW9kYWxDb250ZW50KCl9XG4gICAgICAgICAgPC9Nb2RhbD5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRmF2b3VyaXRlRWRpdGluZ01vZGFsO1xuIl0sIm5hbWVzIjpbIl90eXBlb2YiLCJvIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJjb25zdHJ1Y3RvciIsInByb3RvdHlwZSIsInRvUHJvcGVydHlLZXkiLCJ0IiwiaSIsInIiLCJlIiwidG9QcmltaXRpdmUiLCJjYWxsIiwiVHlwZUVycm9yIiwiU3RyaW5nIiwiTnVtYmVyIiwiX2RlZmluZVByb3BlcnR5IiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsImhhc093biIsImhhc093blByb3BlcnR5IiwiY2xhc3NOYW1lcyIsImNsYXNzZXMiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJhcmciLCJhcHBlbmRDbGFzcyIsInBhcnNlVmFsdWUiLCJBcnJheSIsImlzQXJyYXkiLCJhcHBseSIsInRvU3RyaW5nIiwiaW5jbHVkZXMiLCJrZXkiLCJuZXdDbGFzcyIsIm1vZHVsZSIsImV4cG9ydHMiLCJkZWZhdWx0Iiwid2luZG93IiwiX2ZyZWVHbG9iYWwiLCJnbG9iYWwiLCJmcmVlU2VsZiIsInNlbGYiLCJfcm9vdCIsImZyZWVHbG9iYWwiLCJGdW5jdGlvbiIsIl9TeW1ib2wiLCJyb290Iiwib2JqZWN0UHJvdG8iLCJuYXRpdmVPYmplY3RUb1N0cmluZyIsInN5bVRvU3RyaW5nVGFnIiwidG9TdHJpbmdUYWciLCJ1bmRlZmluZWQiLCJfZ2V0UmF3VGFnIiwiaXNPd24iLCJ0YWciLCJ1bm1hc2tlZCIsInJlc3VsdCIsIl9vYmplY3RUb1N0cmluZyIsIl9iYXNlR2V0VGFnIiwiZ2V0UmF3VGFnIiwib2JqZWN0VG9TdHJpbmciLCJpc09iamVjdF8xIiwidHlwZSIsInVpZCIsImlzRnVuY3Rpb25fMSIsImlzT2JqZWN0IiwiYmFzZUdldFRhZyIsIl9jb3JlSnNEYXRhIiwibWFza1NyY0tleSIsImV4ZWMiLCJjb3JlSnNEYXRhIiwia2V5cyIsIklFX1BST1RPIiwiX2lzTWFza2VkIiwiZnVuYyIsImZ1bmNUb1N0cmluZyIsIl90b1NvdXJjZSIsInJlSXNIb3N0Q3RvciIsImZ1bmNQcm90byIsInJlSXNOYXRpdmUiLCJSZWdFeHAiLCJyZXBsYWNlIiwiX2Jhc2VJc05hdGl2ZSIsImlzTWFza2VkIiwiaXNGdW5jdGlvbiIsInRlc3QiLCJ0b1NvdXJjZSIsIl9nZXRWYWx1ZSIsIm9iamVjdCIsIl9nZXROYXRpdmUiLCJnZXRWYWx1ZSIsImJhc2VJc05hdGl2ZSIsIl9uYXRpdmVDcmVhdGUiLCJnZXROYXRpdmUiLCJfaGFzaENsZWFyIiwidGhpcyIsIl9fZGF0YV9fIiwibmF0aXZlQ3JlYXRlIiwic2l6ZSIsIl9oYXNoRGVsZXRlIiwiaGFzIiwiX2hhc2hHZXQiLCJkYXRhIiwiX2hhc2hIYXMiLCJfaGFzaFNldCIsIkhhc2giLCJlbnRyaWVzIiwiaW5kZXgiLCJjbGVhciIsImVudHJ5Iiwic2V0IiwiaGFzaENsZWFyIiwiaGFzaERlbGV0ZSIsImdldCIsImhhc2hHZXQiLCJoYXNoSGFzIiwiaGFzaFNldCIsIl9IYXNoIiwiX2xpc3RDYWNoZUNsZWFyIiwiZXFfMSIsIm90aGVyIiwiX2Fzc29jSW5kZXhPZiIsImFycmF5IiwiZXEiLCJzcGxpY2UiLCJfbGlzdENhY2hlRGVsZXRlIiwiYXNzb2NJbmRleE9mIiwicG9wIiwiX2xpc3RDYWNoZUdldCIsIl9saXN0Q2FjaGVIYXMiLCJfbGlzdENhY2hlU2V0IiwicHVzaCIsIkxpc3RDYWNoZSIsImxpc3RDYWNoZUNsZWFyIiwibGlzdENhY2hlRGVsZXRlIiwibGlzdENhY2hlR2V0IiwibGlzdENhY2hlSGFzIiwibGlzdENhY2hlU2V0IiwiX0xpc3RDYWNoZSIsIl9NYXAiLCJfbWFwQ2FjaGVDbGVhciIsImhhc2giLCJtYXAiLCJNYXAiLCJzdHJpbmciLCJfaXNLZXlhYmxlIiwiX2dldE1hcERhdGEiLCJpc0tleWFibGUiLCJfbWFwQ2FjaGVEZWxldGUiLCJnZXRNYXBEYXRhIiwiX21hcENhY2hlR2V0IiwiX21hcENhY2hlSGFzIiwiX21hcENhY2hlU2V0IiwiTWFwQ2FjaGUiLCJtYXBDYWNoZUNsZWFyIiwibWFwQ2FjaGVEZWxldGUiLCJtYXBDYWNoZUdldCIsIm1hcENhY2hlSGFzIiwibWFwQ2FjaGVTZXQiLCJfTWFwQ2FjaGUiLCJfc2V0Q2FjaGVBZGQiLCJfc2V0Q2FjaGVIYXMiLCJTZXRDYWNoZSIsInZhbHVlcyIsImFkZCIsInNldENhY2hlQWRkIiwic2V0Q2FjaGVIYXMiLCJfU2V0Q2FjaGUiLCJfYmFzZUZpbmRJbmRleCIsInByZWRpY2F0ZSIsImZyb21JbmRleCIsImZyb21SaWdodCIsIl9iYXNlSXNOYU4iLCJfc3RyaWN0SW5kZXhPZiIsIl9iYXNlSW5kZXhPZiIsInN0cmljdEluZGV4T2YiLCJiYXNlRmluZEluZGV4IiwiYmFzZUlzTmFOIiwiX2FycmF5SW5jbHVkZXMiLCJiYXNlSW5kZXhPZiIsIl9hcnJheUluY2x1ZGVzV2l0aCIsImNvbXBhcmF0b3IiLCJfYXJyYXlNYXAiLCJpdGVyYXRlZSIsIl9iYXNlVW5hcnkiLCJfY2FjaGVIYXMiLCJjYWNoZSIsIl9iYXNlRGlmZmVyZW5jZSIsImFycmF5SW5jbHVkZXMiLCJpc0NvbW1vbiIsInZhbHVlc0xlbmd0aCIsImFycmF5TWFwIiwiYmFzZVVuYXJ5IiwiYXJyYXlJbmNsdWRlc1dpdGgiLCJjYWNoZUhhcyIsIm91dGVyIiwiY29tcHV0ZWQiLCJ2YWx1ZXNJbmRleCIsIl9hcnJheVB1c2giLCJvZmZzZXQiLCJpc09iamVjdExpa2VfMSIsIl9iYXNlSXNBcmd1bWVudHMiLCJpc09iamVjdExpa2UiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsImlzQXJndW1lbnRzIiwiYmFzZUlzQXJndW1lbnRzIiwiaXNBcmd1bWVudHNfMSIsImlzQXJyYXlfMSIsInNwcmVhZGFibGVTeW1ib2wiLCJpc0NvbmNhdFNwcmVhZGFibGUiLCJfaXNGbGF0dGVuYWJsZSIsIl9iYXNlRmxhdHRlbiIsImJhc2VGbGF0dGVuIiwiZGVwdGgiLCJpc1N0cmljdCIsImlzRmxhdHRlbmFibGUiLCJhcnJheVB1c2giLCJpZGVudGl0eV8xIiwiX2FwcGx5IiwidGhpc0FyZyIsImFyZ3MiLCJuYXRpdmVNYXgiLCJNYXRoIiwibWF4IiwiX292ZXJSZXN0Iiwic3RhcnQiLCJ0cmFuc2Zvcm0iLCJvdGhlckFyZ3MiLCJjb25zdGFudF8xIiwiX2Jhc2VTZXRUb1N0cmluZyIsImNvbnN0YW50IiwiaWRlbnRpdHkiLCJuYXRpdmVOb3ciLCJEYXRlIiwibm93IiwiX3Nob3J0T3V0IiwiY291bnQiLCJsYXN0Q2FsbGVkIiwic3RhbXAiLCJyZW1haW5pbmciLCJfc2V0VG9TdHJpbmciLCJzaG9ydE91dCIsImJhc2VTZXRUb1N0cmluZyIsImlzTGVuZ3RoXzEiLCJpc0FycmF5TGlrZV8xIiwiaXNMZW5ndGgiLCJpc0FycmF5TGlrZU9iamVjdF8xIiwiaXNBcnJheUxpa2UiLCJsYXN0XzEiLCJkaWZmZXJlbmNlV2l0aF8xIiwic2V0VG9TdHJpbmciLCJvdmVyUmVzdCIsImJhc2VSZXN0IiwibGFzdCIsImlzQXJyYXlMaWtlT2JqZWN0IiwiYmFzZURpZmZlcmVuY2UiLCJfc3RhY2tDbGVhciIsIl9zdGFja0RlbGV0ZSIsIl9zdGFja0dldCIsIl9zdGFja0hhcyIsIl9zdGFja1NldCIsInBhaXJzIiwiTEFSR0VfQVJSQVlfU0laRSIsIlN0YWNrIiwic3RhY2tDbGVhciIsInN0YWNrRGVsZXRlIiwic3RhY2tHZXQiLCJzdGFja0hhcyIsInN0YWNrU2V0IiwiX1N0YWNrIiwiX2FycmF5U29tZSIsIl9lcXVhbEFycmF5cyIsImJpdG1hc2siLCJjdXN0b21pemVyIiwiZXF1YWxGdW5jIiwic3RhY2siLCJpc1BhcnRpYWwiLCJhcnJMZW5ndGgiLCJvdGhMZW5ndGgiLCJhcnJTdGFja2VkIiwib3RoU3RhY2tlZCIsInNlZW4iLCJhcnJWYWx1ZSIsIm90aFZhbHVlIiwiY29tcGFyZWQiLCJhcnJheVNvbWUiLCJvdGhJbmRleCIsIl9VaW50OEFycmF5IiwiVWludDhBcnJheSIsIl9tYXBUb0FycmF5IiwiZm9yRWFjaCIsIl9zZXRUb0FycmF5Iiwic3ltYm9sUHJvdG8iLCJzeW1ib2xWYWx1ZU9mIiwidmFsdWVPZiIsIl9lcXVhbEJ5VGFnIiwiYnl0ZUxlbmd0aCIsImJ5dGVPZmZzZXQiLCJidWZmZXIiLCJuYW1lIiwibWVzc2FnZSIsImNvbnZlcnQiLCJtYXBUb0FycmF5Iiwic2V0VG9BcnJheSIsInN0YWNrZWQiLCJlcXVhbEFycmF5cyIsIl9iYXNlR2V0QWxsS2V5cyIsImtleXNGdW5jIiwic3ltYm9sc0Z1bmMiLCJfYXJyYXlGaWx0ZXIiLCJyZXNJbmRleCIsInN0dWJBcnJheV8xIiwibmF0aXZlR2V0U3ltYm9scyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIl9nZXRTeW1ib2xzIiwiYXJyYXlGaWx0ZXIiLCJzeW1ib2wiLCJzdHViQXJyYXkiLCJfYmFzZVRpbWVzIiwibiIsInN0dWJGYWxzZV8xIiwiZnJlZUV4cG9ydHMiLCJub2RlVHlwZSIsImZyZWVNb2R1bGUiLCJCdWZmZXIiLCJpc0J1ZmZlciIsInN0dWJGYWxzZSIsInJlSXNVaW50IiwiX2lzSW5kZXgiLCJ0eXBlZEFycmF5VGFncyIsIl9iYXNlSXNUeXBlZEFycmF5IiwiZnJlZVByb2Nlc3MiLCJwcm9jZXNzIiwibm9kZVV0aWwiLCJ0eXBlcyIsInJlcXVpcmUiLCJiaW5kaW5nIiwibm9kZUlzVHlwZWRBcnJheSIsImlzVHlwZWRBcnJheSIsImlzVHlwZWRBcnJheV8xIiwiYmFzZUlzVHlwZWRBcnJheSIsIl9hcnJheUxpa2VLZXlzIiwiaW5oZXJpdGVkIiwiaXNBcnIiLCJpc0FyZyIsImlzQnVmZiIsImlzVHlwZSIsInNraXBJbmRleGVzIiwiYmFzZVRpbWVzIiwiaXNJbmRleCIsIl9pc1Byb3RvdHlwZSIsIkN0b3IiLCJfb3ZlckFyZyIsIl9uYXRpdmVLZXlzIiwib3ZlckFyZyIsIl9iYXNlS2V5cyIsImlzUHJvdG90eXBlIiwibmF0aXZlS2V5cyIsImtleXNfMSIsImFycmF5TGlrZUtleXMiLCJiYXNlS2V5cyIsIl9nZXRBbGxLZXlzIiwiYmFzZUdldEFsbEtleXMiLCJnZXRTeW1ib2xzIiwiX2VxdWFsT2JqZWN0cyIsIm9ialByb3BzIiwiZ2V0QWxsS2V5cyIsIm9iakxlbmd0aCIsIm9ialN0YWNrZWQiLCJza2lwQ3RvciIsIm9ialZhbHVlIiwib2JqQ3RvciIsIm90aEN0b3IiLCJfRGF0YVZpZXciLCJfUHJvbWlzZSIsIl9TZXQiLCJfV2Vha01hcCIsIm1hcFRhZyIsInByb21pc2VUYWciLCJzZXRUYWciLCJ3ZWFrTWFwVGFnIiwiZGF0YVZpZXdUYWciLCJkYXRhVmlld0N0b3JTdHJpbmciLCJEYXRhVmlldyIsIm1hcEN0b3JTdHJpbmciLCJwcm9taXNlQ3RvclN0cmluZyIsIlByb21pc2UiLCJzZXRDdG9yU3RyaW5nIiwiU2V0Iiwid2Vha01hcEN0b3JTdHJpbmciLCJXZWFrTWFwIiwiZ2V0VGFnIiwiQXJyYXlCdWZmZXIiLCJyZXNvbHZlIiwiY3RvclN0cmluZyIsIl9nZXRUYWciLCJhcmdzVGFnIiwiYXJyYXlUYWciLCJvYmplY3RUYWciLCJfYmFzZUlzRXF1YWxEZWVwIiwib2JqSXNBcnIiLCJvdGhJc0FyciIsIm9ialRhZyIsIm90aFRhZyIsIm9iaklzT2JqIiwib3RoSXNPYmoiLCJpc1NhbWVUYWciLCJlcXVhbEJ5VGFnIiwib2JqSXNXcmFwcGVkIiwib3RoSXNXcmFwcGVkIiwib2JqVW53cmFwcGVkIiwib3RoVW53cmFwcGVkIiwiZXF1YWxPYmplY3RzIiwiX2Jhc2VJc0VxdWFsIiwiYmFzZUlzRXF1YWwiLCJiYXNlSXNFcXVhbERlZXAiLCJpc0VxdWFsXzEiLCJpc0VtcHR5XzEiLCJfYXJyYXlFYWNoIiwiX2Jhc2VBc3NpZ25WYWx1ZSIsIl9hc3NpZ25WYWx1ZSIsImJhc2VBc3NpZ25WYWx1ZSIsIl9jb3B5T2JqZWN0Iiwic291cmNlIiwicHJvcHMiLCJpc05ldyIsIm5ld1ZhbHVlIiwiYXNzaWduVmFsdWUiLCJfYmFzZUFzc2lnbiIsImNvcHlPYmplY3QiLCJfbmF0aXZlS2V5c0luIiwiX2Jhc2VLZXlzSW4iLCJuYXRpdmVLZXlzSW4iLCJpc1Byb3RvIiwia2V5c0luXzEiLCJiYXNlS2V5c0luIiwiX2Jhc2VBc3NpZ25JbiIsImtleXNJbiIsImFsbG9jVW5zYWZlIiwiaXNEZWVwIiwic2xpY2UiLCJjb3B5IiwiX2NvcHlBcnJheSIsIl9jb3B5U3ltYm9scyIsIl9nZXRQcm90b3R5cGUiLCJnZXRQcm90b3R5cGVPZiIsIl9nZXRTeW1ib2xzSW4iLCJnZXRQcm90b3R5cGUiLCJfY29weVN5bWJvbHNJbiIsImdldFN5bWJvbHNJbiIsIl9nZXRBbGxLZXlzSW4iLCJfaW5pdENsb25lQXJyYXkiLCJpbnB1dCIsIl9jbG9uZUFycmF5QnVmZmVyIiwiYXJyYXlCdWZmZXIiLCJfY2xvbmVEYXRhVmlldyIsImRhdGFWaWV3IiwiY2xvbmVBcnJheUJ1ZmZlciIsInJlRmxhZ3MiLCJfY2xvbmVSZWdFeHAiLCJyZWdleHAiLCJsYXN0SW5kZXgiLCJfY2xvbmVTeW1ib2wiLCJfY2xvbmVUeXBlZEFycmF5IiwidHlwZWRBcnJheSIsIl9pbml0Q2xvbmVCeVRhZyIsImNsb25lRGF0YVZpZXciLCJjbG9uZVR5cGVkQXJyYXkiLCJjbG9uZVJlZ0V4cCIsImNsb25lU3ltYm9sIiwib2JqZWN0Q3JlYXRlIiwiY3JlYXRlIiwiX2Jhc2VDcmVhdGUiLCJwcm90byIsIl9pbml0Q2xvbmVPYmplY3QiLCJiYXNlQ3JlYXRlIiwiX2Jhc2VJc01hcCIsIm5vZGVJc01hcCIsImlzTWFwIiwiaXNNYXBfMSIsImJhc2VJc01hcCIsIl9iYXNlSXNTZXQiLCJub2RlSXNTZXQiLCJpc1NldCIsImlzU2V0XzEiLCJiYXNlSXNTZXQiLCJmdW5jVGFnIiwiY2xvbmVhYmxlVGFncyIsIl9iYXNlQ2xvbmUiLCJiYXNlQ2xvbmUiLCJpc0ZsYXQiLCJpc0Z1bGwiLCJpbml0Q2xvbmVBcnJheSIsImNvcHlBcnJheSIsImlzRnVuYyIsImNsb25lQnVmZmVyIiwiaW5pdENsb25lT2JqZWN0IiwiY29weVN5bWJvbHNJbiIsImJhc2VBc3NpZ25JbiIsImNvcHlTeW1ib2xzIiwiYmFzZUFzc2lnbiIsImluaXRDbG9uZUJ5VGFnIiwic3ViVmFsdWUiLCJnZXRBbGxLZXlzSW4iLCJhcnJheUVhY2giLCJpc1N5bWJvbF8xIiwicmVJc0RlZXBQcm9wIiwicmVJc1BsYWluUHJvcCIsIl9pc0tleSIsImlzU3ltYm9sIiwibWVtb2l6ZSIsInJlc29sdmVyIiwibWVtb2l6ZWQiLCJDYWNoZSIsIm1lbW9pemVfMSIsInJlUHJvcE5hbWUiLCJyZUVzY2FwZUNoYXIiLCJfc3RyaW5nVG9QYXRoIiwibWVtb2l6ZUNhcHBlZCIsImNoYXJDb2RlQXQiLCJtYXRjaCIsIm51bWJlciIsInF1b3RlIiwic3ViU3RyaW5nIiwic3ltYm9sVG9TdHJpbmciLCJfYmFzZVRvU3RyaW5nIiwiYmFzZVRvU3RyaW5nIiwidG9TdHJpbmdfMSIsIl9jYXN0UGF0aCIsImlzS2V5Iiwic3RyaW5nVG9QYXRoIiwiX3RvS2V5IiwiX2Jhc2VHZXQiLCJwYXRoIiwiY2FzdFBhdGgiLCJ0b0tleSIsIl9iYXNlU2xpY2UiLCJlbmQiLCJfcGFyZW50IiwiYmFzZUdldCIsImJhc2VTbGljZSIsIl9iYXNlVW5zZXQiLCJwYXJlbnQiLCJvYmplY3RDdG9yU3RyaW5nIiwiaXNQbGFpbk9iamVjdF8xIiwiX2N1c3RvbU9taXRDbG9uZSIsImlzUGxhaW5PYmplY3QiLCJmbGF0dGVuXzEiLCJvbWl0XzEiLCJmbGF0dGVuIiwiZmxhdFJlc3QiLCJwYXRocyIsIkNMT05FX0RFRVBfRkxBRyIsImN1c3RvbU9taXRDbG9uZSIsImJhc2VVbnNldCIsInJlUmVnRXhwQ2hhciIsInJlSGFzUmVnRXhwQ2hhciIsImVzY2FwZVJlZ0V4cF8xIiwiY2xvbmVEZWVwXzEiLCJnZXRMb2NhbGFkbWluIiwic3VnZ2VzdGlvbiIsImxvY2FsYWRtaW4iLCJhZGRyZXNzIiwibGFzdEluZGV4T2YiLCJzdWJzdHJpbmciLCJnZXRTdG9wQ29kZSIsImlkIiwiY29kZSIsImluZGV4T2YiLCJmb3JtYXRGYXZvdXJpdGVQbGFjZUxhYmVsIiwic3BsaXQiLCJlc2NhcGVSZWdFeHAiLCJzdHlsZUluamVjdCIsImNzcyIsInJlZiIsImluc2VydEF0IiwiZG9jdW1lbnQiLCJoZWFkIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJzdHlsZSIsImNyZWF0ZUVsZW1lbnQiLCJmaXJzdENoaWxkIiwiaW5zZXJ0QmVmb3JlIiwiYXBwZW5kQ2hpbGQiLCJzdHlsZVNoZWV0IiwiY3NzVGV4dCIsImNyZWF0ZVRleHROb2RlIiwicGxhaW4iLCJsYXllciIsImxhYmVsSWQiLCJzaG9ydE5hbWUiLCJndGZzSWQiLCJtb2RlIiwidG9Mb3dlckNhc2UiLCJsb25nTmFtZSIsImFnZW5jeSIsImxhYmVsIiwiaXRlbSIsImNsb25lRGVlcCIsIk1vZGFsQ29udGVudCIsImhlYWRlclRleHQiLCJyZW5kZXJMaXN0IiwiUmVhY3QiLCJjbGFzc05hbWUiLCJzdHlsZXMiLCJlbnYiLCJOT0RFX0VOViIsInByb3BUeXBlcyIsIlByb3BUeXBlcyIsImlzUmVxdWlyZWQiLCJ0cmFuc2xhdGlvbnMiLCJkZSIsImNhbmNlbCIsImRlbGV0ZSIsInNhdmUiLCJlbiIsInVwIiwiZG93biIsImZpIiwicGwiLCJzdiIsImkxOG5leHRfX2RlZmF1bHQiLCJpbml0IiwibG5nIiwiZmFsbGJhY2tMbmciLCJkZWZhdWx0TlMiLCJpbnRlcnBvbGF0aW9uIiwiZXNjYXBlVmFsdWUiLCJpc0tleWJvYXJkU2VsZWN0aW9uRXZlbnQiLCJldmVudCIsIndoaWNoIiwia2V5Q29kZSIsImNvbmNhdCIsInByZXZlbnREZWZhdWx0IiwiRmF2b3VyaXRlRWRpdGluZ01vZGFsIiwiQ29tcG9uZW50Iiwic3VwZXIiLCJkaXJlY3Rpb24iLCJmYXZvdXJpdGVzIiwic3RhdGUiLCJmYXZvdXJpdGVzQ29weSIsInRtcCIsInNldFN0YXRlIiwiZmF2b3VyaXRlIiwiaWNvbklkIiwic2VsZWN0ZWRJY29uSWQiLCJjeCIsImZhdm91cml0ZUlkIiwiaTE4bmV4dCIsIm9uQ2xpY2siLCJtb3ZlRmF2b3VyaXRlIiwiSWNvbiIsImltZyIsImNvbG9yIiwicm9sZSIsInRhYkluZGV4Iiwib25FZGl0U2VsZWN0ZWQiLCJvbktleURvd24iLCJzZWxlY3RlZEZhdm91cml0ZSIsInNob3dEZWxldGVQbGFjZU1vZGFsIiwiaXNMb2FkaW5nIiwiQ29udGFpbmVyU3Bpbm5lciIsInZpc2libGUiLCJSZWFjdFNvcnRhYmxlIiwibGlzdCIsInNldExpc3QiLCJpdGVtcyIsImFuaW1hdGlvbiIsImhhbmRsZSIsInJlbmRlckZhdm91cml0ZUxpc3RJdGVtIiwiRGlhbG9nTW9kYWwiLCJhcHBFbGVtZW50IiwiaGFuZGxlQ2xvc2UiLCJpc01vZGFsT3BlbiIsImRpYWxvZ0NvbnRlbnQiLCJwcmltYXJ5QnV0dG9uVGV4dCIsInByaW1hcnlCdXR0b25PbkNsaWNrIiwiZGVsZXRlRmF2b3VyaXRlIiwic2Vjb25kYXJ5QnV0dG9uVGV4dCIsInNlY29uZGFyeUJ1dHRvbk9uQ2xpY2siLCJob3ZlckNvbG9yIiwiZm9udFdlaWdodHMiLCJsYW5nIiwib21pdHRlZEZhdm91cml0ZXMiLCJvbWl0IiwiaXNFcXVhbCIsInVwZGF0ZUZhdm91cml0ZXMiLCJtb2RhbFByb3BzIiwicmVuZGVyRmF2b3VyaXRlTGlzdCIsIm1lZGl1bSIsImNoYW5nZUxhbmd1YWdlIiwiYWRkUmVzb3VyY2VCdW5kbGUiLCJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMiLCJuZXh0UHJvcHMiLCJwcmV2U3RhdGUiLCJuZXh0RmF2b3VyaXRlcyIsInByZXZGYXZvdXJpdGVzIiwiaXNFbXB0eSIsImRpZmZlcmVuY2VXaXRoIiwiY29tcG9uZW50RGlkVXBkYXRlIiwibGFuZ3VhZ2UiLCJyZW5kZXIiLCJpc01vYmlsZSIsIk1vZGFsIiwiY29udGVudExhYmVsIiwiY2xvc2VCdXR0b25MYWJlbCIsInZhcmlhbnQiLCJpc09wZW4iLCJvbkNyb3NzQ2xpY2siLCJjbG9zZU1vZGFsIiwicmVuZGVyRGVsZXRlRmF2b3VyaXRlTW9kYWwiLCJyZW5kZXJNb2RhbENvbnRlbnQiLCJhcnJheU9mIiwic2hhcGUiLCJnaWQiLCJsYXQiLCJsb24iLCJib29sIl0sIm1hcHBpbmdzIjoiZ2dDQUFBLFNBQVNBLEVBQVFDLEdBR2YsT0FBT0QsRUFBVSxtQkFBcUJFLFFBQVUsaUJBQW1CQSxPQUFPQyxTQUFXLFNBQVVGLEdBQzdGLGNBQWNBLENBQ2YsRUFBRyxTQUFVQSxHQUNaLE9BQU9BLEdBQUssbUJBQXFCQyxRQUFVRCxFQUFFRyxjQUFnQkYsUUFBVUQsSUFBTUMsT0FBT0csVUFBWSxnQkFBa0JKLENBQ3RILEVBQUtELEVBQVFDLEVBQ2IsQ0NOQSxTQUFTSyxFQUFjQyxHQUNyQixJQUFJQyxFQ0ZOLFNBQXFCRCxFQUFHRSxHQUN0QixHQUFJLFVBQVlULEVBQVFPLEtBQU9BLEVBQUcsT0FBT0EsRUFDekMsSUFBSUcsRUFBSUgsRUFBRUwsT0FBT1MsYUFDakIsUUFBSSxJQUFXRCxFQUFHLENBQ2hCLElBQUlGLEVBQUlFLEVBQUVFLEtBQUtMLEVBQUdFLEdBQUssV0FDdkIsR0FBSSxVQUFZVCxFQUFRUSxHQUFJLE9BQU9BLEVBQ25DLE1BQU0sSUFBSUssVUFBVSwrQ0FDckIsQ0FDRCxPQUFRLFdBQWFKLEVBQUlLLE9BQVNDLFFBQVFSLEVBQzVDLENEUFVJLENBQVlKLEVBQUcsVUFDdkIsTUFBTyxVQUFZUCxFQUFRUSxHQUFLQSxFQUFJQSxFQUFJLEVBQzFDLENFSkEsU0FBU1EsRUFBZ0JOLEVBQUdELEVBQUdGLEdBQzdCLE9BQVFFLEVBQUlILEVBQWNHLE1BQU9DLEVBQUlPLE9BQU9DLGVBQWVSLEVBQUdELEVBQUcsQ0FDL0RVLE1BQU9aLEVBQ1BhLFlBQVksRUFDWkMsY0FBYyxFQUNkQyxVQUFVLElBQ1BaLEVBQUVELEdBQUtGLEVBQUdHLENBQ2pCOzs7Ozs7Q0NEQyxXQUdBLElBQUlhLEVBQVMsQ0FBRSxFQUFDQyxlQUVoQixTQUFTQyxJQUdSLElBRkEsSUFBSUMsRUFBVSxHQUVMbEIsRUFBSSxFQUFHQSxFQUFJbUIsVUFBVUMsT0FBUXBCLElBQUssQ0FDMUMsSUFBSXFCLEVBQU1GLFVBQVVuQixHQUNoQnFCLElBQ0hILEVBQVVJLEVBQVlKLEVBQVNLLEVBQVdGLElBRTNDLENBRUQsT0FBT0gsQ0FDUCxDQUVELFNBQVNLLEVBQVlGLEdBQ3BCLEdBQW1CLGlCQUFSQSxHQUFtQyxpQkFBUkEsRUFDckMsT0FBT0EsRUFHUixHQUFtQixpQkFBUkEsRUFDVixNQUFPLEdBR1IsR0FBSUcsTUFBTUMsUUFBUUosR0FDakIsT0FBT0osRUFBV1MsTUFBTSxLQUFNTCxHQUcvQixHQUFJQSxFQUFJTSxXQUFhbEIsT0FBT1osVUFBVThCLFdBQWFOLEVBQUlNLFNBQVNBLFdBQVdDLFNBQVMsaUJBQ25GLE9BQU9QLEVBQUlNLFdBR1osSUFBSVQsRUFBVSxHQUVkLElBQUssSUFBSVcsS0FBT1IsRUFDWE4sRUFBT1gsS0FBS2lCLEVBQUtRLElBQVFSLEVBQUlRLEtBQ2hDWCxFQUFVSSxFQUFZSixFQUFTVyxJQUlqQyxPQUFPWCxDQUNQLENBRUQsU0FBU0ksRUFBYVgsRUFBT21CLEdBQzVCLE9BQUtBLEVBSURuQixFQUNJQSxFQUFRLElBQU1tQixFQUdmbkIsRUFBUW1CLEVBUFBuQixDQVFSLENBRW9Db0IsRUFBT0MsU0FDM0NmLEVBQVdnQixRQUFVaEIsRUFDckJjLEVBQUFDLFFBQWlCZixHQU9qQmlCLE9BQU9qQixXQUFhQSxDQUV0QixDQXJFQSxNQ0pBa0IsRUFGa0MsaUJBQVZDLFFBQXNCQSxRQUFVQSxPQUFPM0IsU0FBV0EsUUFBVTJCLE9DRWhGQyxFQUEwQixpQkFBUkMsTUFBb0JBLE1BQVFBLEtBQUs3QixTQUFXQSxRQUFVNkIsS0FLNUVDLEVBRldDLEdBQWNILEdBQVlJLFNBQVMsY0FBVEEsR0NEckNDLEVBRmFDLEVBQUtqRCxPQ0Fka0QsRUFBY25DLE9BQU9aLFVBR3JCbUIsRUFBaUI0QixFQUFZNUIsZUFPN0I2QixFQUF1QkQsRUFBWWpCLFNBR25DbUIsRUFBaUJwRCxFQUFTQSxFQUFPcUQsaUJBQWNDLEVBNkJuRCxJQUFBQyxFQXBCQSxTQUFtQnRDLEdBQ2pCLElBQUl1QyxFQUFRbEMsRUFBZVosS0FBS08sRUFBT21DLEdBQ25DSyxFQUFNeEMsRUFBTW1DLEdBRWhCLElBQ0VuQyxFQUFNbUMsUUFBa0JFLEVBQ3hCLElBQUlJLEdBQVcsQ0FDbkIsQ0FBSSxNQUFPbEQsR0FBSyxDQUVkLElBQUltRCxFQUFTUixFQUFxQnpDLEtBQUtPLEdBUXZDLE9BUEl5QyxJQUNFRixFQUNGdkMsRUFBTW1DLEdBQWtCSyxTQUVqQnhDLEVBQU1tQyxJQUdWTyxDQUNULEVDbkNJUixFQVBjcEMsT0FBT1osVUFPYzhCLFNBYXZDLElBQUEyQixFQUpBLFNBQXdCM0MsR0FDdEIsT0FBT2tDLEVBQXFCekMsS0FBS08sRUFDbkMsRUNWSW1DLEVBQWlCcEQsRUFBU0EsRUFBT3FELGlCQUFjQyxFQWtCbkQsSUFBQU8sRUFUQSxTQUFvQjVDLEdBQ2xCLE9BQWEsTUFBVEEsT0FDZXFDLElBQVZyQyxFQWRRLHFCQURMLGdCQWlCSm1DLEdBQWtCQSxLQUFrQnJDLE9BQU9FLEdBQy9DNkMsRUFBVTdDLEdBQ1Y4QyxFQUFlOUMsRUFDckIsRUNLQSxJQUFBK0MsRUFMQSxTQUFrQi9DLEdBQ2hCLElBQUlnRCxTQUFjaEQsRUFDbEIsT0FBZ0IsTUFBVEEsSUFBMEIsVUFBUmdELEdBQTRCLFlBQVJBLEVBQy9DLEVDUUEsSUNoQ01DLEVEZ0NOQyxFQVZBLFNBQW9CbEQsR0FDbEIsSUFBS21ELEVBQVNuRCxHQUNaLE9BQU8sRUFJVCxJQUFJd0MsRUFBTVksRUFBV3BELEdBQ3JCLE1BNUJZLHFCQTRCTHdDLEdBM0JJLDhCQTJCY0EsR0E3QlosMEJBNkI2QkEsR0ExQjdCLGtCQTBCZ0RBLENBQy9ELEVFN0JBYSxFQUZpQnJCLEVBQUssc0JEQWxCc0IsR0FDRUwsRUFBTSxTQUFTTSxLQUFLQyxHQUFjQSxFQUFXQyxNQUFRRCxFQUFXQyxLQUFLQyxVQUFZLEtBQ3ZFLGlCQUFtQlQsRUFBTyxHQWMxQyxJQUFBVSxFQUpBLFNBQWtCQyxHQUNoQixRQUFTTixHQUFlQSxLQUFjTSxDQUN4QyxFRWJJQyxFQUhZL0IsU0FBUzVDLFVBR0k4QixTQXFCN0IsSUFBQThDLEVBWkEsU0FBa0JGLEdBQ2hCLEdBQVksTUFBUkEsRUFBYyxDQUNoQixJQUNFLE9BQU9DLEVBQWFwRSxLQUFLbUUsRUFDL0IsQ0FBTSxNQUFPckUsR0FBSyxDQUNkLElBQ0UsT0FBUXFFLEVBQU8sRUFDckIsQ0FBTSxNQUFPckUsR0FBSyxDQUNmLENBQ0QsTUFBTyxFQUNULEVDWEl3RSxFQUFlLDhCQUdmQyxFQUFZbEMsU0FBUzVDLFVBQ3JCK0MsRUFBY25DLE9BQU9aLFVBR3JCMkUsRUFBZUcsRUFBVWhELFNBR3pCWCxFQUFpQjRCLEVBQVk1QixlQUc3QjRELEVBQWFDLE9BQU8sSUFDdEJMLEVBQWFwRSxLQUFLWSxHQUFnQjhELFFBakJqQixzQkFpQnVDLFFBQ3ZEQSxRQUFRLHlEQUEwRCxTQUFXLEtBbUJoRixJQUFBQyxFQVJBLFNBQXNCcEUsR0FDcEIsU0FBS21ELEVBQVNuRCxJQUFVcUUsRUFBU3JFLE1BR25Cc0UsRUFBV3RFLEdBQVNpRSxFQUFhRixHQUNoQ1EsS0FBS0MsRUFBU3hFLEdBQy9CLEVDaENBLElBQUF5RSxFQUpBLFNBQWtCQyxFQUFReEQsR0FDeEIsT0FBaUIsTUFBVndELE9BQWlCckMsRUFBWXFDLEVBQU94RCxFQUM3QyxFQ01BLElBQUF5RCxFQUxBLFNBQW1CRCxFQUFReEQsR0FDekIsSUFBSWxCLEVBQVE0RSxFQUFTRixFQUFReEQsR0FDN0IsT0FBTzJELEVBQWE3RSxHQUFTQSxPQUFRcUMsQ0FDdkMsRUNUQXlDLEVBRm1CQyxFQUFVakYsT0FBUSxVQ1dyQyxJQUFBa0YsRUFMQSxXQUNFQyxLQUFLQyxTQUFXQyxFQUFlQSxFQUFhLE1BQVEsQ0FBQSxFQUNwREYsS0FBS0csS0FBTyxDQUNkLEVDSUEsSUFBQUMsR0FOQSxTQUFvQm5FLEdBQ2xCLElBQUl3QixFQUFTdUMsS0FBS0ssSUFBSXBFLFdBQWUrRCxLQUFLQyxTQUFTaEUsR0FFbkQsT0FEQStELEtBQUtHLE1BQVExQyxFQUFTLEVBQUksRUFDbkJBLENBQ1QsRUNMSXJDLEdBSGNQLE9BQU9aLFVBR1FtQixlQW9CakMsSUFBQWtGLEdBVEEsU0FBaUJyRSxHQUNmLElBQUlzRSxFQUFPUCxLQUFLQyxTQUNoQixHQUFJQyxFQUFjLENBQ2hCLElBQUl6QyxFQUFTOEMsRUFBS3RFLEdBQ2xCLE1BckJpQiw4QkFxQlZ3QixPQUE0QkwsRUFBWUssQ0FDaEQsQ0FDRCxPQUFPckMsR0FBZVosS0FBSytGLEVBQU10RSxHQUFPc0UsRUFBS3RFLFFBQU9tQixDQUN0RCxFQ3JCSWhDLEdBSGNQLE9BQU9aLFVBR1FtQixlQWdCakMsSUFBQW9GLEdBTEEsU0FBaUJ2RSxHQUNmLElBQUlzRSxFQUFPUCxLQUFLQyxTQUNoQixPQUFPQyxPQUE4QjlDLElBQWRtRCxFQUFLdEUsR0FBc0JiLEdBQWVaLEtBQUsrRixFQUFNdEUsRUFDOUUsRUNFQSxJQUFBd0UsR0FQQSxTQUFpQnhFLEVBQUtsQixHQUNwQixJQUFJd0YsRUFBT1AsS0FBS0MsU0FHaEIsT0FGQUQsS0FBS0csTUFBUUgsS0FBS0ssSUFBSXBFLEdBQU8sRUFBSSxFQUNqQ3NFLEVBQUt0RSxHQUFRaUUsUUFBMEI5QyxJQUFWckMsRUFmViw0QkFla0RBLEVBQzlEaUYsSUFDVCxFQ1BBLFNBQVNVLEdBQUtDLEdBQ1osSUFBSUMsR0FBUyxFQUNUcEYsRUFBb0IsTUFBWG1GLEVBQWtCLEVBQUlBLEVBQVFuRixPQUczQyxJQURBd0UsS0FBS2EsVUFDSUQsRUFBUXBGLEdBQVEsQ0FDdkIsSUFBSXNGLEVBQVFILEVBQVFDLEdBQ3BCWixLQUFLZSxJQUFJRCxFQUFNLEdBQUlBLEVBQU0sR0FDMUIsQ0FDSCxDQUdBSixHQUFLekcsVUFBVTRHLE1BQVFHLEVBQ3ZCTixHQUFLekcsVUFBa0IsT0FBSWdILEdBQzNCUCxHQUFLekcsVUFBVWlILElBQU1DLEdBQ3JCVCxHQUFLekcsVUFBVW9HLElBQU1lLEdBQ3JCVixHQUFLekcsVUFBVThHLElBQU1NLEdBRXJCLElBQUFDLEdBQWlCWixHQ25CakIsSUFBQWEsR0FMQSxXQUNFdkIsS0FBS0MsU0FBVyxHQUNoQkQsS0FBS0csS0FBTyxDQUNkLEVDMEJBLElBQUFxQixHQUpBLFNBQVl6RyxFQUFPMEcsR0FDakIsT0FBTzFHLElBQVUwRyxHQUFVMUcsR0FBVUEsR0FBUzBHLEdBQVVBLENBQzFELEVDZEEsSUFBQUMsR0FWQSxTQUFzQkMsRUFBTzFGLEdBRTNCLElBREEsSUFBSVQsRUFBU21HLEVBQU1uRyxPQUNaQSxLQUNMLEdBQUlvRyxHQUFHRCxFQUFNbkcsR0FBUSxHQUFJUyxHQUN2QixPQUFPVCxFQUdYLE9BQVEsQ0FDVixFQ1pJcUcsR0FIYWpHLE1BQU0zQixVQUdDNEgsT0E0QnhCLElBQUFDLEdBakJBLFNBQXlCN0YsR0FDdkIsSUFBSXNFLEVBQU9QLEtBQUtDLFNBQ1pXLEVBQVFtQixHQUFheEIsRUFBTXRFLEdBRS9CLFFBQUkyRSxFQUFRLEtBSVJBLEdBRFlMLEVBQUsvRSxPQUFTLEVBRTVCK0UsRUFBS3lCLE1BRUxILEdBQU9ySCxLQUFLK0YsRUFBTUssRUFBTyxLQUV6QlosS0FBS0csTUFDQSxFQUNULEVDZEEsSUFBQThCLEdBUEEsU0FBc0JoRyxHQUNwQixJQUFJc0UsRUFBT1AsS0FBS0MsU0FDWlcsRUFBUW1CLEdBQWF4QixFQUFNdEUsR0FFL0IsT0FBTzJFLEVBQVEsT0FBSXhELEVBQVltRCxFQUFLSyxHQUFPLEVBQzdDLEVDREEsSUFBQXNCLEdBSkEsU0FBc0JqRyxHQUNwQixPQUFPOEYsR0FBYS9CLEtBQUtDLFNBQVVoRSxJQUFRLENBQzdDLEVDWUEsSUFBQWtHLEdBYkEsU0FBc0JsRyxFQUFLbEIsR0FDekIsSUFBSXdGLEVBQU9QLEtBQUtDLFNBQ1pXLEVBQVFtQixHQUFheEIsRUFBTXRFLEdBUS9CLE9BTkkyRSxFQUFRLEtBQ1JaLEtBQUtHLEtBQ1BJLEVBQUs2QixLQUFLLENBQUNuRyxFQUFLbEIsS0FFaEJ3RixFQUFLSyxHQUFPLEdBQUs3RixFQUVaaUYsSUFDVCxFQ1ZBLFNBQVNxQyxHQUFVMUIsR0FDakIsSUFBSUMsR0FBUyxFQUNUcEYsRUFBb0IsTUFBWG1GLEVBQWtCLEVBQUlBLEVBQVFuRixPQUczQyxJQURBd0UsS0FBS2EsVUFDSUQsRUFBUXBGLEdBQVEsQ0FDdkIsSUFBSXNGLEVBQVFILEVBQVFDLEdBQ3BCWixLQUFLZSxJQUFJRCxFQUFNLEdBQUlBLEVBQU0sR0FDMUIsQ0FDSCxDQUdBdUIsR0FBVXBJLFVBQVU0RyxNQUFReUIsR0FDNUJELEdBQVVwSSxVQUFrQixPQUFJc0ksR0FDaENGLEdBQVVwSSxVQUFVaUgsSUFBTXNCLEdBQzFCSCxHQUFVcEksVUFBVW9HLElBQU1vQyxHQUMxQkosR0FBVXBJLFVBQVU4RyxJQUFNMkIsR0FFMUIsSUFBQUMsR0FBaUJOLEdDekJqQk8sR0FGVTlDLEVBQVUvQyxFQUFNLE9DZ0IxQixJQUFBOEYsR0FUQSxXQUNFN0MsS0FBS0csS0FBTyxFQUNaSCxLQUFLQyxTQUFXLENBQ2Q2QyxLQUFRLElBQUlwQyxHQUNacUMsSUFBTyxJQUFLQyxJQUFPWCxJQUNuQlksT0FBVSxJQUFJdkMsR0FFbEIsRUNKQSxJQUFBd0MsR0FQQSxTQUFtQm5JLEdBQ2pCLElBQUlnRCxTQUFjaEQsRUFDbEIsTUFBZ0IsVUFBUmdELEdBQTRCLFVBQVJBLEdBQTRCLFVBQVJBLEdBQTRCLFdBQVJBLEVBQ3JELGNBQVZoRCxFQUNVLE9BQVZBLENBQ1AsRUNLQSxJQUFBb0ksR0FQQSxTQUFvQkosRUFBSzlHLEdBQ3ZCLElBQUlzRSxFQUFPd0MsRUFBSTlDLFNBQ2YsT0FBT21ELEdBQVVuSCxHQUNic0UsRUFBbUIsaUJBQVB0RSxFQUFrQixTQUFXLFFBQ3pDc0UsRUFBS3dDLEdBQ1gsRUNFQSxJQUFBTSxHQU5BLFNBQXdCcEgsR0FDdEIsSUFBSXdCLEVBQVM2RixHQUFXdEQsS0FBTS9ELEdBQWEsT0FBRUEsR0FFN0MsT0FEQStELEtBQUtHLE1BQVExQyxFQUFTLEVBQUksRUFDbkJBLENBQ1QsRUNBQSxJQUFBOEYsR0FKQSxTQUFxQnRILEdBQ25CLE9BQU9xSCxHQUFXdEQsS0FBTS9ELEdBQUtpRixJQUFJakYsRUFDbkMsRUNFQSxJQUFBdUgsR0FKQSxTQUFxQnZILEdBQ25CLE9BQU9xSCxHQUFXdEQsS0FBTS9ELEdBQUtvRSxJQUFJcEUsRUFDbkMsRUNRQSxJQUFBd0gsR0FUQSxTQUFxQnhILEVBQUtsQixHQUN4QixJQUFJd0YsRUFBTytDLEdBQVd0RCxLQUFNL0QsR0FDeEJrRSxFQUFPSSxFQUFLSixLQUloQixPQUZBSSxFQUFLUSxJQUFJOUUsRUFBS2xCLEdBQ2RpRixLQUFLRyxNQUFRSSxFQUFLSixNQUFRQSxFQUFPLEVBQUksRUFDOUJILElBQ1QsRUNOQSxTQUFTMEQsR0FBUy9DLEdBQ2hCLElBQUlDLEdBQVMsRUFDVHBGLEVBQW9CLE1BQVhtRixFQUFrQixFQUFJQSxFQUFRbkYsT0FHM0MsSUFEQXdFLEtBQUthLFVBQ0lELEVBQVFwRixHQUFRLENBQ3ZCLElBQUlzRixFQUFRSCxFQUFRQyxHQUNwQlosS0FBS2UsSUFBSUQsRUFBTSxHQUFJQSxFQUFNLEdBQzFCLENBQ0gsQ0FHQTRDLEdBQVN6SixVQUFVNEcsTUFBUThDLEdBQzNCRCxHQUFTekosVUFBa0IsT0FBSTJKLEdBQy9CRixHQUFTekosVUFBVWlILElBQU0yQyxHQUN6QkgsR0FBU3pKLFVBQVVvRyxJQUFNeUQsR0FDekJKLEdBQVN6SixVQUFVOEcsSUFBTWdELEdBRXpCLElBQUFDLEdBQWlCTixHQ2JqQixJQUFBTyxHQUxBLFNBQXFCbEosR0FFbkIsT0FEQWlGLEtBQUtDLFNBQVNjLElBQUloRyxFQWJDLDZCQWNaaUYsSUFDVCxFQ0hBLElBQUFrRSxHQUpBLFNBQXFCbkosR0FDbkIsT0FBT2lGLEtBQUtDLFNBQVNJLElBQUl0RixFQUMzQixFQ0NBLFNBQVNvSixHQUFTQyxHQUNoQixJQUFJeEQsR0FBUyxFQUNUcEYsRUFBbUIsTUFBVjRJLEVBQWlCLEVBQUlBLEVBQU81SSxPQUd6QyxJQURBd0UsS0FBS0MsU0FBVyxJQUFJeUQsS0FDWDlDLEVBQVFwRixHQUNmd0UsS0FBS3FFLElBQUlELEVBQU94RCxHQUVwQixDQUdBdUQsR0FBU2xLLFVBQVVvSyxJQUFNRixHQUFTbEssVUFBVW1JLEtBQU9rQyxHQUNuREgsR0FBU2xLLFVBQVVvRyxJQUFNa0UsR0FFekIsSUFBQUMsR0FBaUJMLEdDSGpCLElBQUFNLEdBWkEsU0FBdUI5QyxFQUFPK0MsRUFBV0MsRUFBV0MsR0FJbEQsSUFIQSxJQUFJcEosRUFBU21HLEVBQU1uRyxPQUNmb0YsRUFBUStELEdBQWFDLEVBQVksR0FBSyxHQUVsQ0EsRUFBWWhFLE1BQVlBLEVBQVFwRixHQUN0QyxHQUFJa0osRUFBVS9DLEVBQU1mLEdBQVFBLEVBQU9lLEdBQ2pDLE9BQU9mLEVBR1gsT0FBUSxDQUNWLEVDVkEsSUFBQWlFLEdBSkEsU0FBbUI5SixHQUNqQixPQUFPQSxHQUFVQSxDQUNuQixFQ2FBLElBQUErSixHQVpBLFNBQXVCbkQsRUFBTzVHLEVBQU80SixHQUluQyxJQUhBLElBQUkvRCxFQUFRK0QsRUFBWSxFQUNwQm5KLEVBQVNtRyxFQUFNbkcsU0FFVm9GLEVBQVFwRixHQUNmLEdBQUltRyxFQUFNZixLQUFXN0YsRUFDbkIsT0FBTzZGLEVBR1gsT0FBUSxDQUNWLEVDREEsSUFBQW1FLEdBTkEsU0FBcUJwRCxFQUFPNUcsRUFBTzRKLEdBQ2pDLE9BQU81SixHQUFVQSxFQUNiaUssR0FBY3JELEVBQU81RyxFQUFPNEosR0FDNUJNLEdBQWN0RCxFQUFPdUQsR0FBV1AsRUFDdEMsRUNEQSxJQUFBUSxHQUxBLFNBQXVCeEQsRUFBTzVHLEdBRTVCLFNBRHNCLE1BQVQ0RyxFQUFnQixFQUFJQSxFQUFNbkcsU0FDcEI0SixHQUFZekQsRUFBTzVHLEVBQU8sSUFBTSxDQUNyRCxFQ09BLElBQUFzSyxHQVpBLFNBQTJCMUQsRUFBTzVHLEVBQU91SyxHQUl2QyxJQUhBLElBQUkxRSxHQUFTLEVBQ1RwRixFQUFrQixNQUFUbUcsRUFBZ0IsRUFBSUEsRUFBTW5HLFNBRTlCb0YsRUFBUXBGLEdBQ2YsR0FBSThKLEVBQVd2SyxFQUFPNEcsRUFBTWYsSUFDMUIsT0FBTyxFQUdYLE9BQU8sQ0FDVCxFQ0NBLElBQUEyRSxHQVhBLFNBQWtCNUQsRUFBTzZELEdBS3ZCLElBSkEsSUFBSTVFLEdBQVMsRUFDVHBGLEVBQWtCLE1BQVRtRyxFQUFnQixFQUFJQSxFQUFNbkcsT0FDbkNpQyxFQUFTN0IsTUFBTUosS0FFVm9GLEVBQVFwRixHQUNmaUMsRUFBT21ELEdBQVM0RSxFQUFTN0QsRUFBTWYsR0FBUUEsRUFBT2UsR0FFaEQsT0FBT2xFLENBQ1QsRUNMQSxJQUFBZ0ksR0FOQSxTQUFtQjlHLEdBQ2pCLE9BQU8sU0FBUzVELEdBQ2QsT0FBTzRELEVBQUs1RCxFQUNoQixDQUNBLEVDQ0EsSUFBQTJLLEdBSkEsU0FBa0JDLEVBQU8xSixHQUN2QixPQUFPMEosRUFBTXRGLElBQUlwRSxFQUNuQixFQ3dEQSxJQUFBMkosR0E3Q0EsU0FBd0JqRSxFQUFPeUMsRUFBUW9CLEVBQVVGLEdBQy9DLElBQUkxRSxHQUFTLEVBQ1Q1RSxFQUFXNkosR0FDWEMsR0FBVyxFQUNYdEssRUFBU21HLEVBQU1uRyxPQUNmaUMsRUFBUyxHQUNUc0ksRUFBZTNCLEVBQU81SSxPQUUxQixJQUFLQSxFQUNILE9BQU9pQyxFQUVMK0gsSUFDRnBCLEVBQVM0QixHQUFTNUIsRUFBUTZCLEdBQVVULEtBRWxDRixHQUNGdEosRUFBV2tLLEdBQ1hKLEdBQVcsR0FFSjFCLEVBQU81SSxRQS9CSyxNQWdDbkJRLEVBQVdtSyxHQUNYTCxHQUFXLEVBQ1gxQixFQUFTLElBQUlELEdBQVNDLElBRXhCZ0MsRUFDQSxPQUFTeEYsRUFBUXBGLEdBQVEsQ0FDdkIsSUFBSVQsRUFBUTRHLEVBQU1mLEdBQ2R5RixFQUF1QixNQUFaYixFQUFtQnpLLEVBQVF5SyxFQUFTekssR0FHbkQsR0FEQUEsRUFBU3VLLEdBQXdCLElBQVZ2SyxFQUFlQSxFQUFRLEVBQzFDK0ssR0FBWU8sR0FBYUEsRUFBVSxDQUVyQyxJQURBLElBQUlDLEVBQWNQLEVBQ1hPLEtBQ0wsR0FBSWxDLEVBQU9rQyxLQUFpQkQsRUFDMUIsU0FBU0QsRUFHYjNJLEVBQU8yRSxLQUFLckgsRUFDYixNQUNTaUIsRUFBU29JLEVBQVFpQyxFQUFVZixJQUNuQzdILEVBQU8yRSxLQUFLckgsRUFFZixDQUNELE9BQU8wQyxDQUNULEVDN0NBLElBQUE4SSxHQVhBLFNBQW1CNUUsRUFBT3lDLEdBS3hCLElBSkEsSUFBSXhELEdBQVMsRUFDVHBGLEVBQVM0SSxFQUFPNUksT0FDaEJnTCxFQUFTN0UsRUFBTW5HLFNBRVZvRixFQUFRcEYsR0FDZm1HLEVBQU02RSxFQUFTNUYsR0FBU3dELEVBQU94RCxHQUVqQyxPQUFPZSxDQUNULEVDV0EsSUFBQThFLEdBSkEsU0FBc0IxTCxHQUNwQixPQUFnQixNQUFUQSxHQUFpQyxpQkFBVEEsQ0FDakMsRUNUQSxJQUFBMkwsR0FKQSxTQUF5QjNMLEdBQ3ZCLE9BQU80TCxHQUFhNUwsSUFWUixzQkFVa0JvRCxFQUFXcEQsRUFDM0MsRUNYSWlDLEdBQWNuQyxPQUFPWixVQUdyQm1CLEdBQWlCNEIsR0FBWTVCLGVBRzdCd0wsR0FBdUI1SixHQUFZNEoscUJBb0JuQ0MsR0FBY0MsR0FBZ0IsV0FBYSxPQUFPdkwsU0FBVSxDQUE5QixJQUFzQ3VMLEdBQWtCLFNBQVMvTCxHQUNqRyxPQUFPNEwsR0FBYTVMLElBQVVLLEdBQWVaLEtBQUtPLEVBQU8sWUFDdEQ2TCxHQUFxQnBNLEtBQUtPLEVBQU8sU0FDdEMsRUFFQWdNLEdBQWlCRixHQ1ZqQkcsR0FGY3BMLE1BQU1DLFFDbEJoQm9MLEdBQW1Cbk4sRUFBU0EsRUFBT29OLHdCQUFxQjlKLEVBYzVELElBQUErSixHQUxBLFNBQXVCcE0sR0FDckIsT0FBT2MsR0FBUWQsSUFBVThMLEdBQVk5TCxPQUNoQ2tNLElBQW9CbE0sR0FBU0EsRUFBTWtNLElBQzFDLEVDb0JBLElBQUFHLEdBdkJBLFNBQVNDLEVBQVkxRixFQUFPMkYsRUFBTzVDLEVBQVc2QyxFQUFVOUosR0FDdEQsSUFBSW1ELEdBQVMsRUFDVHBGLEVBQVNtRyxFQUFNbkcsT0FLbkIsSUFIQWtKLElBQWNBLEVBQVk4QyxJQUMxQi9KLElBQVdBLEVBQVMsTUFFWG1ELEVBQVFwRixHQUFRLENBQ3ZCLElBQUlULEVBQVE0RyxFQUFNZixHQUNkMEcsRUFBUSxHQUFLNUMsRUFBVTNKLEdBQ3JCdU0sRUFBUSxFQUVWRCxFQUFZdE0sRUFBT3VNLEVBQVEsRUFBRzVDLEVBQVc2QyxFQUFVOUosR0FFbkRnSyxHQUFVaEssRUFBUTFDLEdBRVZ3TSxJQUNWOUosRUFBT0EsRUFBT2pDLFFBQVVULEVBRTNCLENBQ0QsT0FBTzBDLENBQ1QsRUNmQSxJQUFBaUssR0FKQSxTQUFrQjNNLEdBQ2hCLE9BQU9BLENBQ1QsRUNFQSxJQUFBNE0sR0FWQSxTQUFlaEosRUFBTWlKLEVBQVNDLEdBQzVCLE9BQVFBLEVBQUtyTSxRQUNYLEtBQUssRUFBRyxPQUFPbUQsRUFBS25FLEtBQUtvTixHQUN6QixLQUFLLEVBQUcsT0FBT2pKLEVBQUtuRSxLQUFLb04sRUFBU0MsRUFBSyxJQUN2QyxLQUFLLEVBQUcsT0FBT2xKLEVBQUtuRSxLQUFLb04sRUFBU0MsRUFBSyxHQUFJQSxFQUFLLElBQ2hELEtBQUssRUFBRyxPQUFPbEosRUFBS25FLEtBQUtvTixFQUFTQyxFQUFLLEdBQUlBLEVBQUssR0FBSUEsRUFBSyxJQUUzRCxPQUFPbEosRUFBSzdDLE1BQU04TCxFQUFTQyxFQUM3QixFQ2ZJQyxHQUFZQyxLQUFLQyxJQWdDckIsSUFBQUMsR0FyQkEsU0FBa0J0SixFQUFNdUosRUFBT0MsR0FFN0IsT0FEQUQsRUFBUUosUUFBb0IxSyxJQUFWOEssRUFBdUJ2SixFQUFLbkQsT0FBUyxFQUFLME0sRUFBTyxHQUM1RCxXQU1MLElBTEEsSUFBSUwsRUFBT3RNLFVBQ1BxRixHQUFTLEVBQ1RwRixFQUFTc00sR0FBVUQsRUFBS3JNLE9BQVMwTSxFQUFPLEdBQ3hDdkcsRUFBUS9GLE1BQU1KLEtBRVRvRixFQUFRcEYsR0FDZm1HLEVBQU1mLEdBQVNpSCxFQUFLSyxFQUFRdEgsR0FFOUJBLEdBQVMsRUFFVCxJQURBLElBQUl3SCxFQUFZeE0sTUFBTXNNLEVBQVEsS0FDckJ0SCxFQUFRc0gsR0FDZkUsRUFBVXhILEdBQVNpSCxFQUFLakgsR0FHMUIsT0FEQXdILEVBQVVGLEdBQVNDLEVBQVV4RyxHQUN0QjdGLEdBQU02QyxFQUFNcUIsS0FBTW9JLEVBQzdCLENBQ0EsRUNSQSxJQUFBQyxHQU5BLFNBQWtCdE4sR0FDaEIsT0FBTyxXQUNMLE9BQU9BLENBQ1gsQ0FDQSxFQ2JBSCxHQVJzQixXQUNwQixJQUNFLElBQUkrRCxFQUFPbUIsRUFBVWpGLE9BQVEsa0JBRTdCLE9BREE4RCxFQUFLLENBQUUsRUFBRSxHQUFJLENBQUEsR0FDTkEsQ0FDWCxDQUFJLE1BQU9yRSxHQUFLLENBQ2hCLElDYUFnTyxHQVR1QnhOLEdBQTRCLFNBQVM2RCxFQUFNc0UsR0FDaEUsT0FBT25JLEdBQWU2RCxFQUFNLFdBQVksQ0FDdEMxRCxjQUFnQixFQUNoQkQsWUFBYyxFQUNkRCxNQUFTd04sR0FBU3RGLEdBQ2xCL0gsVUFBWSxHQUVoQixFQVB3Q3NOLEdDUHBDQyxHQUFZQyxLQUFLQyxJQStCckIsSUFBQUMsR0FwQkEsU0FBa0JqSyxHQUNoQixJQUFJa0ssRUFBUSxFQUNSQyxFQUFhLEVBRWpCLE9BQU8sV0FDTCxJQUFJQyxFQUFRTixLQUNSTyxFQXBCTyxJQW9CaUJELEVBQVFELEdBR3BDLEdBREFBLEVBQWFDLEVBQ1RDLEVBQVksR0FDZCxLQUFNSCxHQXpCSSxJQTBCUixPQUFPdE4sVUFBVSxRQUduQnNOLEVBQVEsRUFFVixPQUFPbEssRUFBSzdDLFdBQU1zQixFQUFXN0IsVUFDakMsQ0FDQSxFQ3JCQTBOLEdBRmtCQyxHQUFTQyxJQ3VCM0IsSUFBQUMsR0FMQSxTQUFrQnJPLEdBQ2hCLE1BQXVCLGlCQUFUQSxHQUNaQSxHQUFTLEdBQUtBLEVBQVEsR0FBSyxHQUFLQSxHQTlCYixnQkErQnZCLEVDQUEsSUFBQXNPLEdBSkEsU0FBcUJ0TyxHQUNuQixPQUFnQixNQUFUQSxHQUFpQnVPLEdBQVN2TyxFQUFNUyxVQUFZNkQsRUFBV3RFLEVBQ2hFLEVDRUEsSUFBQXdPLEdBSkEsU0FBMkJ4TyxHQUN6QixPQUFPNEwsR0FBYTVMLElBQVV5TyxHQUFZek8sRUFDNUMsRUNYQSxJQUFBME8sR0FMQSxTQUFjOUgsR0FDWixJQUFJbkcsRUFBa0IsTUFBVG1HLEVBQWdCLEVBQUlBLEVBQU1uRyxPQUN2QyxPQUFPQSxFQUFTbUcsRUFBTW5HLEVBQVMsUUFBSzRCLENBQ3RDLEVDc0JBc00sR0MzQkEsU0FBa0IvSyxFQUFNdUosR0FDdEIsT0FBT3lCLEdBQVlDLEdBQVNqTCxFQUFNdUosRUFBT00sSUFBVzdKLEVBQU8sR0FDN0QsQ0RlcUJrTCxFQUFTLFNBQVNsSSxFQUFPeUMsR0FDNUMsSUFBSWtCLEVBQWF3RSxHQUFLMUYsR0FJdEIsT0FISTJGLEdBQWtCekUsS0FDcEJBLE9BQWFsSSxHQUVSMk0sR0FBa0JwSSxHQUNyQnFJLEdBQWVySSxFQUFPMEYsR0FBWWpELEVBQVEsRUFBRzJGLElBQW1CLFFBQU8zTSxFQUFXa0ksR0FDbEYsRUFDTixJRXZCQSxJQUFBMkUsR0FMQSxXQUNFakssS0FBS0MsU0FBVyxJQUFJb0MsR0FDcEJyQyxLQUFLRyxLQUFPLENBQ2QsRUNLQSxJQUFBK0osR0FSQSxTQUFxQmpPLEdBQ25CLElBQUlzRSxFQUFPUCxLQUFLQyxTQUNaeEMsRUFBUzhDLEVBQWEsT0FBRXRFLEdBRzVCLE9BREErRCxLQUFLRyxLQUFPSSxFQUFLSixLQUNWMUMsQ0FDVCxFQ0ZBLElBQUEwTSxHQUpBLFNBQWtCbE8sR0FDaEIsT0FBTytELEtBQUtDLFNBQVNpQixJQUFJakYsRUFDM0IsRUNFQSxJQUFBbU8sR0FKQSxTQUFrQm5PLEdBQ2hCLE9BQU8rRCxLQUFLQyxTQUFTSSxJQUFJcEUsRUFDM0IsRUNzQkEsSUFBQW9PLEdBaEJBLFNBQWtCcE8sRUFBS2xCLEdBQ3JCLElBQUl3RixFQUFPUCxLQUFLQyxTQUNoQixHQUFJTSxhQUFnQjhCLEdBQVcsQ0FDN0IsSUFBSWlJLEVBQVEvSixFQUFLTixTQUNqQixJQUFLK0MsSUFBUXNILEVBQU05TyxPQUFTK08sSUFHMUIsT0FGQUQsRUFBTWxJLEtBQUssQ0FBQ25HLEVBQUtsQixJQUNqQmlGLEtBQUtHLE9BQVNJLEVBQUtKLEtBQ1pILEtBRVRPLEVBQU9QLEtBQUtDLFNBQVcsSUFBSXlELEdBQVM0RyxFQUNyQyxDQUdELE9BRkEvSixFQUFLUSxJQUFJOUUsRUFBS2xCLEdBQ2RpRixLQUFLRyxLQUFPSSxFQUFLSixLQUNWSCxJQUNULEVDakJBLFNBQVN3SyxHQUFNN0osR0FDYixJQUFJSixFQUFPUCxLQUFLQyxTQUFXLElBQUlvQyxHQUFVMUIsR0FDekNYLEtBQUtHLEtBQU9JLEVBQUtKLElBQ25CLENBR0FxSyxHQUFNdlEsVUFBVTRHLE1BQVE0SixHQUN4QkQsR0FBTXZRLFVBQWtCLE9BQUl5USxHQUM1QkYsR0FBTXZRLFVBQVVpSCxJQUFNeUosR0FDdEJILEdBQU12USxVQUFVb0csSUFBTXVLLEdBQ3RCSixHQUFNdlEsVUFBVThHLElBQU04SixHQUV0QixJQUFBQyxHQUFpQk4sR0NKakIsSUFBQU8sR0FaQSxTQUFtQnBKLEVBQU8rQyxHQUl4QixJQUhBLElBQUk5RCxHQUFTLEVBQ1RwRixFQUFrQixNQUFUbUcsRUFBZ0IsRUFBSUEsRUFBTW5HLFNBRTlCb0YsRUFBUXBGLEdBQ2YsR0FBSWtKLEVBQVUvQyxFQUFNZixHQUFRQSxFQUFPZSxHQUNqQyxPQUFPLEVBR1gsT0FBTyxDQUNULEVDK0RBLElBQUFxSixHQTlEQSxTQUFxQnJKLEVBQU9GLEVBQU93SixFQUFTQyxFQUFZQyxFQUFXQyxHQUNqRSxJQUFJQyxFQWpCcUIsRUFpQlRKLEVBQ1pLLEVBQVkzSixFQUFNbkcsT0FDbEIrUCxFQUFZOUosRUFBTWpHLE9BRXRCLEdBQUk4UCxHQUFhQyxLQUFlRixHQUFhRSxFQUFZRCxHQUN2RCxPQUFPLEVBR1QsSUFBSUUsRUFBYUosRUFBTWxLLElBQUlTLEdBQ3ZCOEosRUFBYUwsRUFBTWxLLElBQUlPLEdBQzNCLEdBQUkrSixHQUFjQyxFQUNoQixPQUFPRCxHQUFjL0osR0FBU2dLLEdBQWM5SixFQUU5QyxJQUFJZixHQUFTLEVBQ1RuRCxHQUFTLEVBQ1RpTyxFQS9CdUIsRUErQmZULEVBQW9DLElBQUk5RyxRQUFXL0csRUFNL0QsSUFKQWdPLEVBQU1ySyxJQUFJWSxFQUFPRixHQUNqQjJKLEVBQU1ySyxJQUFJVSxFQUFPRSxLQUdSZixFQUFRMEssR0FBVyxDQUMxQixJQUFJSyxFQUFXaEssRUFBTWYsR0FDakJnTCxFQUFXbkssRUFBTWIsR0FFckIsR0FBSXNLLEVBQ0YsSUFBSVcsRUFBV1IsRUFDWEgsRUFBV1UsRUFBVUQsRUFBVS9LLEVBQU9hLEVBQU9FLEVBQU95SixHQUNwREYsRUFBV1MsRUFBVUMsRUFBVWhMLEVBQU9lLEVBQU9GLEVBQU8ySixHQUUxRCxRQUFpQmhPLElBQWJ5TyxFQUF3QixDQUMxQixHQUFJQSxFQUNGLFNBRUZwTyxHQUFTLEVBQ1QsS0FDRCxDQUVELEdBQUlpTyxHQUNGLElBQUtJLEdBQVVySyxHQUFPLFNBQVNtSyxFQUFVRyxHQUNuQyxJQUFLNUYsR0FBU3VGLEVBQU1LLEtBQ2ZKLElBQWFDLEdBQVlULEVBQVVRLEVBQVVDLEVBQVVYLEVBQVNDLEVBQVlFLElBQy9FLE9BQU9NLEVBQUt0SixLQUFLMkosRUFFL0IsSUFBYyxDQUNOdE8sR0FBUyxFQUNULEtBQ0QsT0FDSSxHQUNEa08sSUFBYUMsSUFDWFQsRUFBVVEsRUFBVUMsRUFBVVgsRUFBU0MsRUFBWUUsR0FDcEQsQ0FDTDNOLEdBQVMsRUFDVCxLQUNELENBQ0YsQ0FHRCxPQUZBMk4sRUFBYyxPQUFFekosR0FDaEJ5SixFQUFjLE9BQUUzSixHQUNUaEUsQ0FDVCxFQzVFQXVPLEdBRmlCalAsRUFBS2tQLFdDY3RCLElBQUFDLEdBVkEsU0FBb0JuSixHQUNsQixJQUFJbkMsR0FBUyxFQUNUbkQsRUFBUzdCLE1BQU1tSCxFQUFJNUMsTUFLdkIsT0FIQTRDLEVBQUlvSixTQUFRLFNBQVNwUixFQUFPa0IsR0FDMUJ3QixJQUFTbUQsR0FBUyxDQUFDM0UsRUFBS2xCLEVBQzVCLElBQ1MwQyxDQUNULEVDRUEsSUFBQTJPLEdBVkEsU0FBb0JyTCxHQUNsQixJQUFJSCxHQUFTLEVBQ1RuRCxFQUFTN0IsTUFBTW1GLEVBQUlaLE1BS3ZCLE9BSEFZLEVBQUlvTCxTQUFRLFNBQVNwUixHQUNuQjBDLElBQVNtRCxHQUFTN0YsQ0FDdEIsSUFDUzBDLENBQ1QsRUNXSTRPLEdBQWN2UyxFQUFTQSxFQUFPRyxlQUFZbUQsRUFDMUNrUCxHQUFnQkQsR0FBY0EsR0FBWUUsYUFBVW5QLEVBb0Z4RCxJQUFBb1AsR0FqRUEsU0FBb0IvTSxFQUFRZ0MsRUFBT2xFLEVBQUswTixFQUFTQyxFQUFZQyxFQUFXQyxHQUN0RSxPQUFRN04sR0FDTixJQXpCYyxvQkEwQlosR0FBS2tDLEVBQU9nTixZQUFjaEwsRUFBTWdMLFlBQzNCaE4sRUFBT2lOLFlBQWNqTCxFQUFNaUwsV0FDOUIsT0FBTyxFQUVUak4sRUFBU0EsRUFBT2tOLE9BQ2hCbEwsRUFBUUEsRUFBTWtMLE9BRWhCLElBbENpQix1QkFtQ2YsUUFBS2xOLEVBQU9nTixZQUFjaEwsRUFBTWdMLGFBQzNCdEIsRUFBVSxJQUFJYyxHQUFXeE0sR0FBUyxJQUFJd00sR0FBV3hLLEtBS3hELElBbkRVLG1CQW9EVixJQW5EVSxnQkFvRFYsSUFqRFksa0JBb0RWLE9BQU9HLElBQUluQyxHQUFTZ0MsR0FFdEIsSUF4RFcsaUJBeURULE9BQU9oQyxFQUFPbU4sTUFBUW5MLEVBQU1tTCxNQUFRbk4sRUFBT29OLFNBQVdwTCxFQUFNb0wsUUFFOUQsSUF4RFksa0JBeURaLElBdkRZLGtCQTJEVixPQUFPcE4sR0FBV2dDLEVBQVEsR0FFNUIsSUFqRVMsZUFrRVAsSUFBSXFMLEVBQVVDLEdBRWhCLElBakVTLGVBa0VQLElBQUkxQixFQTVFaUIsRUE0RUxKLEVBR2hCLEdBRkE2QixJQUFZQSxFQUFVRSxJQUVsQnZOLEVBQU9VLE1BQVFzQixFQUFNdEIsT0FBU2tMLEVBQ2hDLE9BQU8sRUFHVCxJQUFJNEIsRUFBVTdCLEVBQU1sSyxJQUFJekIsR0FDeEIsR0FBSXdOLEVBQ0YsT0FBT0EsR0FBV3hMLEVBRXBCd0osR0F0RnVCLEVBeUZ2QkcsRUFBTXJLLElBQUl0QixFQUFRZ0MsR0FDbEIsSUFBSWhFLEVBQVN5UCxHQUFZSixFQUFRck4sR0FBU3FOLEVBQVFyTCxHQUFRd0osRUFBU0MsRUFBWUMsRUFBV0MsR0FFMUYsT0FEQUEsRUFBYyxPQUFFM0wsR0FDVGhDLEVBRVQsSUFuRlksa0JBb0ZWLEdBQUk2TyxHQUNGLE9BQU9BLEdBQWM5UixLQUFLaUYsSUFBVzZNLEdBQWM5UixLQUFLaUgsR0FHOUQsT0FBTyxDQUNULEVDMUZBLElBQUEwTCxHQUxBLFNBQXdCMU4sRUFBUTJOLEVBQVVDLEdBQ3hDLElBQUk1UCxFQUFTMlAsRUFBUzNOLEdBQ3RCLE9BQU81RCxHQUFRNEQsR0FBVWhDLEVBQVNnSyxHQUFVaEssRUFBUTRQLEVBQVk1TixHQUNsRSxFQ09BLElBQUE2TixHQWZBLFNBQXFCM0wsRUFBTytDLEdBTTFCLElBTEEsSUFBSTlELEdBQVMsRUFDVHBGLEVBQWtCLE1BQVRtRyxFQUFnQixFQUFJQSxFQUFNbkcsT0FDbkMrUixFQUFXLEVBQ1g5UCxFQUFTLEtBRUptRCxFQUFRcEYsR0FBUSxDQUN2QixJQUFJVCxFQUFRNEcsRUFBTWYsR0FDZDhELEVBQVUzSixFQUFPNkYsRUFBT2UsS0FDMUJsRSxFQUFPOFAsS0FBY3hTLEVBRXhCLENBQ0QsT0FBTzBDLENBQ1QsRUNBQSxJQUFBK1AsR0FKQSxXQUNFLE1BQU8sRUFDVCxFQ2JJNUcsR0FIYy9MLE9BQU9aLFVBR2MyTSxxQkFHbkM2RyxHQUFtQjVTLE9BQU82UyxzQkFtQjlCQyxHQVZrQkYsR0FBK0IsU0FBU2hPLEdBQ3hELE9BQWMsTUFBVkEsRUFDSyxJQUVUQSxFQUFTNUUsT0FBTzRFLEdBQ1RtTyxHQUFZSCxHQUFpQmhPLElBQVMsU0FBU29PLEdBQ3BELE9BQU9qSCxHQUFxQnBNLEtBQUtpRixFQUFRb08sRUFDN0MsSUFDQSxFQVJxQ0MsR0NBckMsSUFBQUMsR0FWQSxTQUFtQkMsRUFBR3hJLEdBSXBCLElBSEEsSUFBSTVFLEdBQVMsRUFDVG5ELEVBQVM3QixNQUFNb1MsS0FFVnBOLEVBQVFvTixHQUNmdlEsRUFBT21ELEdBQVM0RSxFQUFTNUUsR0FFM0IsT0FBT25ELENBQ1QsRUNBQSxJQUFBd1EsR0FKQSxXQUNFLE9BQU8sQ0FDVCxzQkNYQSxJQUFJQyxFQUE0QzlSLElBQVlBLEVBQVErUixVQUFZL1IsRUFHNUVnUyxFQUFhRixHQUE0Qy9SLElBQVdBLEVBQU9nUyxVQUFZaFMsRUFNdkZrUyxFQUhnQkQsR0FBY0EsRUFBV2hTLFVBQVk4UixFQUc1Qm5SLEVBQUtzUixZQUFTalIsRUFzQnZDa1IsR0FuQmlCRCxFQUFTQSxFQUFPQyxjQUFXbFIsSUFtQmZtUixHQUVqQ3BTLEVBQUFDLFFBQWlCa1MsS0NqQ2JFLEdBQVcsbUJBb0JmLElBQUFDLEdBVkEsU0FBaUIxVCxFQUFPUyxHQUN0QixJQUFJdUMsU0FBY2hELEVBR2xCLFNBRkFTLEVBQW1CLE1BQVZBLEVBZlksaUJBZXdCQSxLQUdsQyxVQUFSdUMsR0FDVSxVQUFSQSxHQUFvQnlRLEdBQVNsUCxLQUFLdkUsS0FDaENBLEdBQVMsR0FBS0EsRUFBUSxHQUFLLEdBQUtBLEVBQVFTLENBQ2pELEVDVUlrVCxHQUFpQixDQUFBLEVBQ3JCQSxHQVppQix5QkFZWUEsR0FYWix5QkFZakJBLEdBWGMsc0JBV1lBLEdBVlgsdUJBV2ZBLEdBVmUsdUJBVVlBLEdBVFosdUJBVWZBLEdBVHNCLDhCQVNZQSxHQVJsQix3QkFTaEJBLEdBUmdCLHlCQVFZLEVBQzVCQSxHQWpDYyxzQkFpQ1lBLEdBaENYLGtCQWlDZkEsR0FwQnFCLHdCQW9CWUEsR0FoQ25CLG9CQWlDZEEsR0FwQmtCLHFCQW9CWUEsR0FoQ2hCLGlCQWlDZEEsR0FoQ2Usa0JBZ0NZQSxHQS9CYixxQkFnQ2RBLEdBL0JhLGdCQStCWUEsR0E5QlQsbUJBK0JoQkEsR0E5QmdCLG1CQThCWUEsR0E3QlosbUJBOEJoQkEsR0E3QmEsZ0JBNkJZQSxHQTVCVCxtQkE2QmhCQSxHQTVCaUIscUJBNEJZLEVBYzdCLElBQUFDLEdBTEEsU0FBMEI1VCxHQUN4QixPQUFPNEwsR0FBYTVMLElBQ2xCdU8sR0FBU3ZPLEVBQU1TLFdBQWFrVCxHQUFldlEsRUFBV3BELEdBQzFELHNCQ3REQSxJQUFJbVQsRUFBNEM5UixJQUFZQSxFQUFRK1IsVUFBWS9SLEVBRzVFZ1MsRUFBYUYsR0FBNEMvUixJQUFXQSxFQUFPZ1MsVUFBWWhTLEVBTXZGeVMsRUFIZ0JSLEdBQWNBLEVBQVdoUyxVQUFZOFIsR0FHdEJ0UixFQUFXaVMsUUFHMUNDLEVBQVksV0FDZCxJQUVFLElBQUlDLEVBQVFYLEdBQWNBLEVBQVdZLFNBQVdaLEVBQVdZLFFBQVEsUUFBUUQsTUFFM0UsT0FBSUEsR0FLR0gsR0FBZUEsRUFBWUssU0FBV0wsRUFBWUssUUFBUSxPQUNyRSxDQUFJLE1BQU8zVSxHQUFLLENBQ2hCLElBRUE2QixFQUFBQyxRQUFpQjBTLEtDeEJiSSxHQUFtQkosSUFBWUEsR0FBU0ssYUFxQjVDQyxHQUZtQkYsR0FBbUJqSixHQUFVaUosSUFBb0JHLEdDYmhFalUsR0FIY1AsT0FBT1osVUFHUW1CLGVBcUNqQyxJQUFBa1UsR0EzQkEsU0FBdUJ2VSxFQUFPd1UsR0FDNUIsSUFBSUMsRUFBUTNULEdBQVFkLEdBQ2hCMFUsR0FBU0QsR0FBUzNJLEdBQVk5TCxHQUM5QjJVLEdBQVVGLElBQVVDLEdBQVNuQixHQUFTdlQsR0FDdEM0VSxHQUFVSCxJQUFVQyxJQUFVQyxHQUFVUCxHQUFhcFUsR0FDckQ2VSxFQUFjSixHQUFTQyxHQUFTQyxHQUFVQyxFQUMxQ2xTLEVBQVNtUyxFQUFjQyxHQUFVOVUsRUFBTVMsT0FBUWQsUUFBVSxHQUN6RGMsRUFBU2lDLEVBQU9qQyxPQUVwQixJQUFLLElBQUlTLEtBQU9sQixHQUNUd1UsSUFBYW5VLEdBQWVaLEtBQUtPLEVBQU9rQixJQUN2QzJULElBRVEsVUFBUDNULEdBRUN5VCxJQUFrQixVQUFQelQsR0FBMEIsVUFBUEEsSUFFOUIwVCxJQUFrQixVQUFQMVQsR0FBMEIsY0FBUEEsR0FBOEIsY0FBUEEsSUFFdEQ2VCxHQUFRN1QsRUFBS1QsS0FFbEJpQyxFQUFPMkUsS0FBS25HLEdBR2hCLE9BQU93QixDQUNULEVDN0NJVCxHQUFjbkMsT0FBT1osVUFnQnpCLElBQUE4VixHQVBBLFNBQXFCaFYsR0FDbkIsSUFBSWlWLEVBQU9qVixHQUFTQSxFQUFNZixZQUcxQixPQUFPZSxLQUZxQixtQkFBUmlWLEdBQXNCQSxFQUFLL1YsV0FBYytDLEdBRy9ELEVDREEsSUFBQWlULEdBTkEsU0FBaUJ0UixFQUFNd0osR0FDckIsT0FBTyxTQUFTMU0sR0FDZCxPQUFPa0QsRUFBS3dKLEVBQVUxTSxHQUMxQixDQUNBLEVDUEF5VSxHQUZpQkMsR0FBUXRWLE9BQU8yRCxLQUFNM0QsUUNJbENPLEdBSGNQLE9BQU9aLFVBR1FtQixlQXNCakMsSUFBQWdWLEdBYkEsU0FBa0IzUSxHQUNoQixJQUFLNFEsR0FBWTVRLEdBQ2YsT0FBTzZRLEdBQVc3USxHQUVwQixJQUFJaEMsRUFBUyxHQUNiLElBQUssSUFBSXhCLEtBQU9wQixPQUFPNEUsR0FDakJyRSxHQUFlWixLQUFLaUYsRUFBUXhELElBQWUsZUFBUEEsR0FDdEN3QixFQUFPMkUsS0FBS25HLEdBR2hCLE9BQU93QixDQUNULEVDU0EsSUFBQThTLEdBSkEsU0FBYzlRLEdBQ1osT0FBTytKLEdBQVkvSixHQUFVK1EsR0FBYy9RLEdBQVVnUixHQUFTaFIsRUFDaEUsRUNuQkEsSUFBQWlSLEdBSkEsU0FBb0JqUixHQUNsQixPQUFPa1IsR0FBZWxSLEVBQVFqQixHQUFNb1MsR0FDdEMsRUNKSXhWLEdBSGNQLE9BQU9aLFVBR1FtQixlQWdGakMsSUFBQXlWLEdBakVBLFNBQXNCcFIsRUFBUWdDLEVBQU93SixFQUFTQyxFQUFZQyxFQUFXQyxHQUNuRSxJQUFJQyxFQXRCcUIsRUFzQlRKLEVBQ1o2RixFQUFXQyxHQUFXdFIsR0FDdEJ1UixFQUFZRixFQUFTdFYsT0FJekIsR0FBSXdWLEdBSFdELEdBQVd0UCxHQUNEakcsU0FFTTZQLEVBQzdCLE9BQU8sRUFHVCxJQURBLElBQUl6SyxFQUFRb1EsRUFDTHBRLEtBQVMsQ0FDZCxJQUFJM0UsRUFBTTZVLEVBQVNsUSxHQUNuQixLQUFNeUssRUFBWXBQLEtBQU93RixFQUFRckcsR0FBZVosS0FBS2lILEVBQU94RixJQUMxRCxPQUFPLENBRVYsQ0FFRCxJQUFJZ1YsRUFBYTdGLEVBQU1sSyxJQUFJekIsR0FDdkJnTSxFQUFhTCxFQUFNbEssSUFBSU8sR0FDM0IsR0FBSXdQLEdBQWN4RixFQUNoQixPQUFPd0YsR0FBY3hQLEdBQVNnSyxHQUFjaE0sRUFFOUMsSUFBSWhDLEdBQVMsRUFDYjJOLEVBQU1ySyxJQUFJdEIsRUFBUWdDLEdBQ2xCMkosRUFBTXJLLElBQUlVLEVBQU9oQyxHQUdqQixJQURBLElBQUl5UixFQUFXN0YsSUFDTnpLLEVBQVFvUSxHQUFXLENBRTFCLElBQUlHLEVBQVcxUixFQURmeEQsRUFBTTZVLEVBQVNsUSxJQUVYZ0wsRUFBV25LLEVBQU14RixHQUVyQixHQUFJaVAsRUFDRixJQUFJVyxFQUFXUixFQUNYSCxFQUFXVSxFQUFVdUYsRUFBVWxWLEVBQUt3RixFQUFPaEMsRUFBUTJMLEdBQ25ERixFQUFXaUcsRUFBVXZGLEVBQVUzUCxFQUFLd0QsRUFBUWdDLEVBQU8ySixHQUd6RCxVQUFtQmhPLElBQWJ5TyxFQUNHc0YsSUFBYXZGLEdBQVlULEVBQVVnRyxFQUFVdkYsRUFBVVgsRUFBU0MsRUFBWUUsR0FDN0VTLEdBQ0QsQ0FDTHBPLEdBQVMsRUFDVCxLQUNELENBQ0R5VCxJQUFhQSxFQUFrQixlQUFQalYsRUFDekIsQ0FDRCxHQUFJd0IsSUFBV3lULEVBQVUsQ0FDdkIsSUFBSUUsRUFBVTNSLEVBQU96RixZQUNqQnFYLEVBQVU1UCxFQUFNekgsWUFHaEJvWCxHQUFXQyxLQUNWLGdCQUFpQjVSLE1BQVUsZ0JBQWlCZ0MsSUFDekIsbUJBQVgyUCxHQUF5QkEsYUFBbUJBLEdBQ2pDLG1CQUFYQyxHQUF5QkEsYUFBbUJBLElBQ3ZENVQsR0FBUyxFQUVaLENBR0QsT0FGQTJOLEVBQWMsT0FBRTNMLEdBQ2hCMkwsRUFBYyxPQUFFM0osR0FDVGhFLENBQ1QsRUNqRkE2VCxHQUZleFIsRUFBVS9DLEVBQU0sWUNFL0J3VSxHQUZjelIsRUFBVS9DLEVBQU0sV0NFOUJ5VSxHQUZVMVIsRUFBVS9DLEVBQU0sT0NFMUIwVSxHQUZjM1IsRUFBVS9DLEVBQU0sV0NLMUIyVSxHQUFTLGVBRVRDLEdBQWEsbUJBQ2JDLEdBQVMsZUFDVEMsR0FBYSxtQkFFYkMsR0FBYyxvQkFHZEMsR0FBcUJ4UyxFQUFTeVMsSUFDOUJDLEdBQWdCMVMsRUFBU3lELElBQ3pCa1AsR0FBb0IzUyxFQUFTNFMsSUFDN0JDLEdBQWdCN1MsRUFBUzhTLElBQ3pCQyxHQUFvQi9TLEVBQVNnVCxJQVM3QkMsR0FBU3JVLEdBR1I2VCxJQUFZUSxHQUFPLElBQUlSLEdBQVMsSUFBSVMsWUFBWSxNQUFRWCxJQUN4RDlPLElBQU93UCxHQUFPLElBQUl4UCxLQUFRME8sSUFDMUJTLElBQVdLLEdBQU9MLEdBQVFPLFlBQWNmLElBQ3hDVSxJQUFPRyxHQUFPLElBQUlILEtBQVFULElBQzFCVyxJQUFXQyxHQUFPLElBQUlELEtBQVlWLE1BQ3JDVyxHQUFTLFNBQVN6WCxHQUNoQixJQUFJMEMsRUFBU1UsRUFBV3BELEdBQ3BCaVYsRUEvQlEsbUJBK0JEdlMsRUFBc0IxQyxFQUFNZixpQkFBY29ELEVBQ2pEdVYsRUFBYTNDLEVBQU96USxFQUFTeVEsR0FBUSxHQUV6QyxHQUFJMkMsRUFDRixPQUFRQSxHQUNOLEtBQUtaLEdBQW9CLE9BQU9ELEdBQ2hDLEtBQUtHLEdBQWUsT0FBT1AsR0FDM0IsS0FBS1EsR0FBbUIsT0FBT1AsR0FDL0IsS0FBS1MsR0FBZSxPQUFPUixHQUMzQixLQUFLVSxHQUFtQixPQUFPVCxHQUduQyxPQUFPcFUsQ0FDWCxHQUdBLElBQUFtVixHQUFpQkosR0M1Q2JLLEdBQVUscUJBQ1ZDLEdBQVcsaUJBQ1hDLEdBQVksa0JBTVozWCxHQUhjUCxPQUFPWixVQUdRbUIsZUE2RGpDLElBQUE0WCxHQTdDQSxTQUF5QnZULEVBQVFnQyxFQUFPd0osRUFBU0MsRUFBWUMsRUFBV0MsR0FDdEUsSUFBSTZILEVBQVdwWCxHQUFRNEQsR0FDbkJ5VCxFQUFXclgsR0FBUTRGLEdBQ25CMFIsRUFBU0YsRUFBV0gsR0FBV04sR0FBTy9TLEdBQ3RDMlQsRUFBU0YsRUFBV0osR0FBV04sR0FBTy9RLEdBS3RDNFIsR0FISkYsRUFBU0EsR0FBVU4sR0FBVUUsR0FBWUksSUFHaEJKLEdBQ3JCTyxHQUhKRixFQUFTQSxHQUFVUCxHQUFVRSxHQUFZSyxJQUdoQkwsR0FDckJRLEVBQVlKLEdBQVVDLEVBRTFCLEdBQUlHLEdBQWFqRixHQUFTN08sR0FBUyxDQUNqQyxJQUFLNk8sR0FBUzdNLEdBQ1osT0FBTyxFQUVUd1IsR0FBVyxFQUNYSSxHQUFXLENBQ1osQ0FDRCxHQUFJRSxJQUFjRixFQUVoQixPQURBakksSUFBVUEsRUFBUSxJQUFJWixJQUNkeUksR0FBWTlELEdBQWExUCxHQUM3QnlOLEdBQVl6TixFQUFRZ0MsRUFBT3dKLEVBQVNDLEVBQVlDLEVBQVdDLEdBQzNEb0ksR0FBVy9ULEVBQVFnQyxFQUFPMFIsRUFBUWxJLEVBQVNDLEVBQVlDLEVBQVdDLEdBRXhFLEtBckR5QixFQXFEbkJILEdBQWlDLENBQ3JDLElBQUl3SSxFQUFlSixHQUFZalksR0FBZVosS0FBS2lGLEVBQVEsZUFDdkRpVSxFQUFlSixHQUFZbFksR0FBZVosS0FBS2lILEVBQU8sZUFFMUQsR0FBSWdTLEdBQWdCQyxFQUFjLENBQ2hDLElBQUlDLEVBQWVGLEVBQWVoVSxFQUFPMUUsUUFBVTBFLEVBQy9DbVUsRUFBZUYsRUFBZWpTLEVBQU0xRyxRQUFVMEcsRUFHbEQsT0FEQTJKLElBQVVBLEVBQVEsSUFBSVosSUFDZlcsRUFBVXdJLEVBQWNDLEVBQWMzSSxFQUFTQyxFQUFZRSxFQUNuRSxDQUNGLENBQ0QsUUFBS21JLElBR0xuSSxJQUFVQSxFQUFRLElBQUlaLElBQ2ZxSixHQUFhcFUsRUFBUWdDLEVBQU93SixFQUFTQyxFQUFZQyxFQUFXQyxHQUNyRSxFQ3JEQSxJQUFBMEksR0FWQSxTQUFTQyxFQUFZaFosRUFBTzBHLEVBQU93SixFQUFTQyxFQUFZRSxHQUN0RCxPQUFJclEsSUFBVTBHLElBR0QsTUFBVDFHLEdBQTBCLE1BQVQwRyxJQUFtQmtGLEdBQWE1TCxLQUFXNEwsR0FBYWxGLEdBQ3BFMUcsR0FBVUEsR0FBUzBHLEdBQVVBLEVBRS9CdVMsR0FBZ0JqWixFQUFPMEcsRUFBT3dKLEVBQVNDLEVBQVk2SSxFQUFhM0ksR0FDekUsRUNTQSxJQUFBNkksR0FKQSxTQUFpQmxaLEVBQU8wRyxHQUN0QixPQUFPc1MsR0FBWWhaLEVBQU8wRyxFQUM1QixFQ2ZJckcsR0FIY1AsT0FBT1osVUFHUW1CLGVBMkRqQyxJQUFBOFksR0F4QkEsU0FBaUJuWixHQUNmLEdBQWEsTUFBVEEsRUFDRixPQUFPLEVBRVQsR0FBSXlPLEdBQVl6TyxLQUNYYyxHQUFRZCxJQUEwQixpQkFBVEEsR0FBNEMsbUJBQWhCQSxFQUFNOEcsUUFDMUR5TSxHQUFTdlQsSUFBVW9VLEdBQWFwVSxJQUFVOEwsR0FBWTlMLElBQzFELE9BQVFBLEVBQU1TLE9BRWhCLElBQUkrQixFQUFNaVYsR0FBT3pYLEdBQ2pCLEdBcERXLGdCQW9EUHdDLEdBbkRPLGdCQW1EVUEsRUFDbkIsT0FBUXhDLEVBQU1vRixLQUVoQixHQUFJa1EsR0FBWXRWLEdBQ2QsT0FBUTBWLEdBQVMxVixHQUFPUyxPQUUxQixJQUFLLElBQUlTLEtBQU9sQixFQUNkLEdBQUlLLEdBQWVaLEtBQUtPLEVBQU9rQixHQUM3QixPQUFPLEVBR1gsT0FBTyxDQUNULEVDckRBLElBQUFrWSxHQVpBLFNBQW1CeFMsRUFBTzZELEdBSXhCLElBSEEsSUFBSTVFLEdBQVMsRUFDVHBGLEVBQWtCLE1BQVRtRyxFQUFnQixFQUFJQSxFQUFNbkcsU0FFOUJvRixFQUFRcEYsSUFDOEIsSUFBekNnSyxFQUFTN0QsRUFBTWYsR0FBUUEsRUFBT2UsS0FJcEMsT0FBT0EsQ0FDVCxFQ0tBLElBQUF5UyxHQWJBLFNBQXlCM1UsRUFBUXhELEVBQUtsQixHQUN6QixhQUFQa0IsR0FBc0JuQixHQUN4QkEsR0FBZTJFLEVBQVF4RCxFQUFLLENBQzFCaEIsY0FBZ0IsRUFDaEJELFlBQWMsRUFDZEQsTUFBU0EsRUFDVEcsVUFBWSxJQUdkdUUsRUFBT3hELEdBQU9sQixDQUVsQixFQ2ZJSyxHQUhjUCxPQUFPWixVQUdRbUIsZUFvQmpDLElBQUFpWixHQVJBLFNBQXFCNVUsRUFBUXhELEVBQUtsQixHQUNoQyxJQUFJb1csRUFBVzFSLEVBQU94RCxHQUNoQmIsR0FBZVosS0FBS2lGLEVBQVF4RCxJQUFRMkYsR0FBR3VQLEVBQVVwVyxVQUN4Q3FDLElBQVZyQyxHQUF5QmtCLEtBQU93RCxJQUNuQzZVLEdBQWdCN1UsRUFBUXhELEVBQUtsQixFQUVqQyxFQ2NBLElBQUF3WixHQTFCQSxTQUFvQkMsRUFBUUMsRUFBT2hWLEVBQVF5TCxHQUN6QyxJQUFJd0osR0FBU2pWLEVBQ2JBLElBQVdBLEVBQVMsQ0FBQSxHQUtwQixJQUhBLElBQUltQixHQUFTLEVBQ1RwRixFQUFTaVosRUFBTWpaLFNBRVZvRixFQUFRcEYsR0FBUSxDQUN2QixJQUFJUyxFQUFNd1ksRUFBTTdULEdBRVorVCxFQUFXekosRUFDWEEsRUFBV3pMLEVBQU94RCxHQUFNdVksRUFBT3ZZLEdBQU1BLEVBQUt3RCxFQUFRK1UsUUFDbERwWCxPQUVhQSxJQUFidVgsSUFDRkEsRUFBV0gsRUFBT3ZZLElBRWhCeVksRUFDRkosR0FBZ0I3VSxFQUFReEQsRUFBSzBZLEdBRTdCQyxHQUFZblYsRUFBUXhELEVBQUswWSxFQUU1QixDQUNELE9BQU9sVixDQUNULEVDckJBLElBQUFvVixHQUpBLFNBQW9CcFYsRUFBUStVLEdBQzFCLE9BQU8vVSxHQUFVcVYsR0FBV04sRUFBUWhXLEdBQUtnVyxHQUFTL1UsRUFDcEQsRUNLQSxJQUFBc1YsR0FWQSxTQUFzQnRWLEdBQ3BCLElBQUloQyxFQUFTLEdBQ2IsR0FBYyxNQUFWZ0MsRUFDRixJQUFLLElBQUl4RCxLQUFPcEIsT0FBTzRFLEdBQ3JCaEMsRUFBTzJFLEtBQUtuRyxHQUdoQixPQUFPd0IsQ0FDVCxFQ1RJckMsR0FIY1AsT0FBT1osVUFHUW1CLGVBd0JqQyxJQUFBNFosR0FmQSxTQUFvQnZWLEdBQ2xCLElBQUt2QixFQUFTdUIsR0FDWixPQUFPd1YsR0FBYXhWLEdBRXRCLElBQUl5VixFQUFVN0UsR0FBWTVRLEdBQ3RCaEMsRUFBUyxHQUViLElBQUssSUFBSXhCLEtBQU93RCxHQUNELGVBQVB4RCxJQUF5QmlaLEdBQVk5WixHQUFlWixLQUFLaUYsRUFBUXhELEtBQ3JFd0IsRUFBTzJFLEtBQUtuRyxHQUdoQixPQUFPd0IsQ0FDVCxFQ0NBLElBQUEwWCxHQUpBLFNBQWdCMVYsR0FDZCxPQUFPK0osR0FBWS9KLEdBQVUrUSxHQUFjL1EsR0FBUSxHQUFRMlYsR0FBVzNWLEVBQ3hFLEVDYkEsSUFBQTRWLEdBSkEsU0FBc0I1VixFQUFRK1UsR0FDNUIsT0FBTy9VLEdBQVVxVixHQUFXTixFQUFRYyxHQUFPZCxHQUFTL1UsRUFDdEQsc0JDWEEsSUFBSXlPLEVBQTRDOVIsSUFBWUEsRUFBUStSLFVBQVkvUixFQUc1RWdTLEVBQWFGLEdBQTRDL1IsSUFBV0EsRUFBT2dTLFVBQVloUyxFQU12RmtTLEVBSGdCRCxHQUFjQSxFQUFXaFMsVUFBWThSLEVBRzVCblIsRUFBS3NSLFlBQVNqUixFQUN2Q21ZLEVBQWNsSCxFQUFTQSxFQUFPa0gsaUJBQWNuWSxFQXFCaERqQixFQUFBQyxRQVhBLFNBQXFCdVEsRUFBUTZJLEdBQzNCLEdBQUlBLEVBQ0YsT0FBTzdJLEVBQU84SSxRQUVoQixJQUFJamEsRUFBU21SLEVBQU9uUixPQUNoQmlDLEVBQVM4WCxFQUFjQSxFQUFZL1osR0FBVSxJQUFJbVIsRUFBTzNTLFlBQVl3QixHQUd4RSxPQURBbVIsRUFBTytJLEtBQUtqWSxHQUNMQSxDQUNULEtDYkEsSUFBQWtZLEdBWEEsU0FBbUJuQixFQUFRN1MsR0FDekIsSUFBSWYsR0FBUyxFQUNUcEYsRUFBU2daLEVBQU9oWixPQUdwQixJQURBbUcsSUFBVUEsRUFBUS9GLE1BQU1KLE1BQ2ZvRixFQUFRcEYsR0FDZm1HLEVBQU1mLEdBQVM0VCxFQUFPNVQsR0FFeEIsT0FBT2UsQ0FDVCxFQ0ZBLElBQUFpVSxHQUpBLFNBQXFCcEIsRUFBUS9VLEdBQzNCLE9BQU9xVixHQUFXTixFQUFRNUQsR0FBVzRELEdBQVMvVSxFQUNoRCxFQ1JBb1csR0FGbUIxRixHQUFRdFYsT0FBT2liLGVBQWdCamIsUUNxQmxEa2IsR0FsQnVCbGIsT0FBTzZTLHNCQVNxQixTQUFTak8sR0FFMUQsSUFEQSxJQUFJaEMsRUFBUyxHQUNOZ0MsR0FDTGdJLEdBQVVoSyxFQUFRbVQsR0FBV25SLElBQzdCQSxFQUFTdVcsR0FBYXZXLEdBRXhCLE9BQU9oQyxDQUNULEVBUHVDcVEsR0NBdkMsSUFBQW1JLEdBSkEsU0FBdUJ6QixFQUFRL1UsR0FDN0IsT0FBT3FWLEdBQVdOLEVBQVEwQixHQUFhMUIsR0FBUy9VLEVBQ2xELEVDR0EsSUFBQTBXLEdBSkEsU0FBc0IxVyxHQUNwQixPQUFPa1IsR0FBZWxSLEVBQVE2VixHQUFRWSxHQUN4QyxFQ1ZJOWEsR0FIY1AsT0FBT1osVUFHUW1CLGVBcUJqQyxJQUFBZ2IsR0FaQSxTQUF3QnpVLEdBQ3RCLElBQUluRyxFQUFTbUcsRUFBTW5HLE9BQ2ZpQyxFQUFTLElBQUlrRSxFQUFNM0gsWUFBWXdCLEdBT25DLE9BSklBLEdBQTZCLGlCQUFabUcsRUFBTSxJQUFrQnZHLEdBQWVaLEtBQUttSCxFQUFPLFdBQ3RFbEUsRUFBT21ELE1BQVFlLEVBQU1mLE1BQ3JCbkQsRUFBTzRZLE1BQVExVSxFQUFNMFUsT0FFaEI1WSxDQUNULEVDUkEsSUFBQTZZLEdBTkEsU0FBMEJDLEdBQ3hCLElBQUk5WSxFQUFTLElBQUk4WSxFQUFZdmMsWUFBWXVjLEVBQVk5SixZQUVyRCxPQURBLElBQUlSLEdBQVd4TyxHQUFRc0QsSUFBSSxJQUFJa0wsR0FBV3NLLElBQ25DOVksQ0FDVCxFQ0VBLElBQUErWSxHQUxBLFNBQXVCQyxFQUFVakIsR0FDL0IsSUFBSTdJLEVBQVM2SSxFQUFTa0IsR0FBaUJELEVBQVM5SixRQUFVOEosRUFBUzlKLE9BQ25FLE9BQU8sSUFBSThKLEVBQVN6YyxZQUFZMlMsRUFBUThKLEVBQVMvSixXQUFZK0osRUFBU2hLLFdBQ3hFLEVDWklrSyxHQUFVLE9BZWQsSUFBQUMsR0FOQSxTQUFxQkMsR0FDbkIsSUFBSXBaLEVBQVMsSUFBSW9aLEVBQU83YyxZQUFZNmMsRUFBT3JDLE9BQVFtQyxHQUFRclksS0FBS3VZLElBRWhFLE9BREFwWixFQUFPcVosVUFBWUQsRUFBT0MsVUFDbkJyWixDQUNULEVDWEk0TyxHQUFjdlMsRUFBU0EsRUFBT0csZUFBWW1ELEVBQzFDa1AsR0FBZ0JELEdBQWNBLEdBQVlFLGFBQVVuUCxFQWF4RCxJQUFBMlosR0FKQSxTQUFxQmxKLEdBQ25CLE9BQU92QixHQUFnQnpSLE9BQU95UixHQUFjOVIsS0FBS3FULElBQVcsRUFDOUQsRUNBQSxJQUFBbUosR0FMQSxTQUF5QkMsRUFBWXpCLEdBQ25DLElBQUk3SSxFQUFTNkksRUFBU2tCLEdBQWlCTyxFQUFXdEssUUFBVXNLLEVBQVd0SyxPQUN2RSxPQUFPLElBQUlzSyxFQUFXamQsWUFBWTJTLEVBQVFzSyxFQUFXdkssV0FBWXVLLEVBQVd6YixPQUM5RSxFQytEQSxJQUFBMGIsR0FwQ0EsU0FBd0J6WCxFQUFRbEMsRUFBS2lZLEdBQ25DLElBQUl4RixFQUFPdlEsRUFBT3pGLFlBQ2xCLE9BQVF1RCxHQUNOLElBM0JpQix1QkE0QmYsT0FBT21aLEdBQWlCalgsR0FFMUIsSUF2Q1UsbUJBd0NWLElBdkNVLGdCQXdDUixPQUFPLElBQUl1USxHQUFNdlEsR0FFbkIsSUFqQ2Msb0JBa0NaLE9BQU8wWCxHQUFjMVgsRUFBUStWLEdBRS9CLElBbkNhLHdCQW1DSSxJQWxDSix3QkFtQ2IsSUFsQ1UscUJBa0NJLElBakNILHNCQWlDa0IsSUFoQ2xCLHNCQWlDWCxJQWhDVyxzQkFnQ0ksSUEvQkcsNkJBK0JtQixJQTlCekIsdUJBOEJ5QyxJQTdCekMsdUJBOEJWLE9BQU80QixHQUFnQjNYLEVBQVErVixHQUVqQyxJQWpEUyxlQTJEVCxJQXhEUyxlQXlEUCxPQUFPLElBQUl4RixFQVJiLElBbkRZLGtCQW9EWixJQWpEWSxrQkFrRFYsT0FBTyxJQUFJQSxFQUFLdlEsR0FFbEIsSUF0RFksa0JBdURWLE9BQU80WCxHQUFZNVgsR0FLckIsSUF6RFksa0JBMERWLE9BQU82WCxHQUFZN1gsR0FFekIsRUN2RUk4WCxHQUFlMWMsT0FBTzJjLE9BMEIxQkMsR0FoQmtCLFdBQ2hCLFNBQVNoWSxJQUFXLENBQ3BCLE9BQU8sU0FBU2lZLEdBQ2QsSUFBS3haLEVBQVN3WixHQUNaLE1BQU8sR0FFVCxHQUFJSCxHQUNGLE9BQU9BLEdBQWFHLEdBRXRCalksRUFBT3hGLFVBQVl5ZCxFQUNuQixJQUFJamEsRUFBUyxJQUFJZ0MsRUFFakIsT0FEQUEsRUFBT3hGLGVBQVltRCxFQUNaSyxDQUNYLENBQ0EsSUNWQSxJQUFBa2EsR0FOQSxTQUF5QmxZLEdBQ3ZCLE1BQXFDLG1CQUF0QkEsRUFBT3pGLGFBQThCcVcsR0FBWTVRLEdBRTVELEdBREFtWSxHQUFXNUIsR0FBYXZXLEdBRTlCLEVDRUEsSUFBQW9ZLEdBSkEsU0FBbUI5YyxHQUNqQixPQUFPNEwsR0FBYTVMLElBVlQsZ0JBVW1CeVgsR0FBT3pYLEVBQ3ZDLEVDVkkrYyxHQUFZaEosSUFBWUEsR0FBU2lKLE1BcUJyQ0MsR0FGWUYsR0FBWTdSLEdBQVU2UixJQUFhRyxHQ1AvQyxJQUFBQyxHQUpBLFNBQW1CbmQsR0FDakIsT0FBTzRMLEdBQWE1TCxJQVZULGdCQVVtQnlYLEdBQU96WCxFQUN2QyxFQ1ZJb2QsR0FBWXJKLElBQVlBLEdBQVNzSixNQXFCckNDLEdBRllGLEdBQVlsUyxHQUFVa1MsSUFBYUcsR0NLM0N6RixHQUFVLHFCQUtWMEYsR0FBVSxvQkFJVnhGLEdBQVksa0JBb0JaeUYsR0FBZ0IsQ0FBQSxFQUNwQkEsR0FBYzNGLElBQVcyRixHQTdCVixrQkE4QmZBLEdBZnFCLHdCQWVXQSxHQWRkLHFCQWVsQkEsR0E5QmMsb0JBOEJXQSxHQTdCWCxpQkE4QmRBLEdBZmlCLHlCQWVXQSxHQWRYLHlCQWVqQkEsR0FkYyxzQkFjV0EsR0FiVix1QkFjZkEsR0FiZSx1QkFhV0EsR0E1QmIsZ0JBNkJiQSxHQTVCZ0IsbUJBNEJXQSxHQUFjekYsSUFDekN5RixHQTNCZ0IsbUJBMkJXQSxHQTFCZCxnQkEyQmJBLEdBMUJnQixtQkEwQldBLEdBekJYLG1CQTBCaEJBLEdBaEJlLHVCQWdCV0EsR0FmSiw4QkFnQnRCQSxHQWZnQix3QkFlV0EsR0FkWCx5QkFjc0MsRUFDdERBLEdBckNlLGtCQXFDV0EsR0FBY0QsSUFDeENDLEdBNUJpQixxQkE0QlcsRUE4RjVCLElBQUFDLEdBNUVBLFNBQVNDLEVBQVUzZCxFQUFPa1EsRUFBU0MsRUFBWWpQLEVBQUt3RCxFQUFRMkwsR0FDMUQsSUFBSTNOLEVBQ0ErWCxFQW5FZ0IsRUFtRVB2SyxFQUNUME4sRUFuRWdCLEVBbUVQMU4sRUFDVDJOLEVBbkVtQixFQW1FVjNOLEVBS2IsR0FISUMsSUFDRnpOLEVBQVNnQyxFQUFTeUwsRUFBV25RLEVBQU9rQixFQUFLd0QsRUFBUTJMLEdBQVNGLEVBQVduUSxTQUV4RHFDLElBQVhLLEVBQ0YsT0FBT0EsRUFFVCxJQUFLUyxFQUFTbkQsR0FDWixPQUFPQSxFQUVULElBQUl5VSxFQUFRM1QsR0FBUWQsR0FDcEIsR0FBSXlVLEdBRUYsR0FEQS9SLEVBQVNvYixHQUFlOWQsSUFDbkJ5YSxFQUNILE9BQU9zRCxHQUFVL2QsRUFBTzBDLE9BRXJCLENBQ0wsSUFBSUYsRUFBTWlWLEdBQU96WCxHQUNiZ2UsRUFBU3hiLEdBQU9nYixJQTdFWCw4QkE2RXNCaGIsRUFFL0IsR0FBSStRLEdBQVN2VCxHQUNYLE9BQU9pZSxHQUFZamUsRUFBT3lhLEdBRTVCLEdBQUlqWSxHQUFPd1YsSUFBYXhWLEdBQU9zVixJQUFZa0csSUFBV3RaLEdBRXBELEdBREFoQyxFQUFVa2IsR0FBVUksRUFBVSxDQUFBLEVBQUtFLEdBQWdCbGUsSUFDOUN5YSxFQUNILE9BQU9tRCxFQUNITyxHQUFjbmUsRUFBT29lLEdBQWExYixFQUFRMUMsSUFDMUNxZSxHQUFZcmUsRUFBT3NlLEdBQVc1YixFQUFRMUMsUUFFdkMsQ0FDTCxJQUFLeWQsR0FBY2piLEdBQ2pCLE9BQU9rQyxFQUFTMUUsRUFBUSxHQUUxQjBDLEVBQVM2YixHQUFldmUsRUFBT3dDLEVBQUtpWSxFQUNyQyxDQUNGLENBRURwSyxJQUFVQSxFQUFRLElBQUlaLElBQ3RCLElBQUl5QyxFQUFVN0IsRUFBTWxLLElBQUluRyxHQUN4QixHQUFJa1MsRUFDRixPQUFPQSxFQUVUN0IsRUFBTXJLLElBQUloRyxFQUFPMEMsR0FFYjJhLEdBQU1yZCxHQUNSQSxFQUFNb1IsU0FBUSxTQUFTb04sR0FDckI5YixFQUFPNEcsSUFBSXFVLEVBQVVhLEVBQVV0TyxFQUFTQyxFQUFZcU8sRUFBVXhlLEVBQU9xUSxHQUMzRSxJQUNhMk0sR0FBTWhkLElBQ2ZBLEVBQU1vUixTQUFRLFNBQVNvTixFQUFVdGQsR0FDL0J3QixFQUFPc0QsSUFBSTlFLEVBQUt5YyxFQUFVYSxFQUFVdE8sRUFBU0MsRUFBWWpQLEVBQUtsQixFQUFPcVEsR0FDM0UsSUFHRSxJQUlJcUosRUFBUWpGLE9BQVFwUyxHQUpMd2IsRUFDVkQsRUFBU2EsR0FBZXpJLEdBQ3hCNEgsRUFBU3JELEdBQVM5VyxJQUVrQnpELEdBU3pDLE9BUkEwZSxHQUFVaEYsR0FBUzFaLEdBQU8sU0FBU3dlLEVBQVV0ZCxHQUN2Q3dZLElBRUY4RSxFQUFXeGUsRUFEWGtCLEVBQU1zZCxJQUlSM0UsR0FBWW5YLEVBQVF4QixFQUFLeWMsRUFBVWEsRUFBVXRPLEVBQVNDLEVBQVlqUCxFQUFLbEIsRUFBT3FRLEdBQ2xGLElBQ1MzTixDQUNULEVDdklBLElBQUFpYyxHQUxBLFNBQWtCM2UsR0FDaEIsTUFBdUIsaUJBQVRBLEdBQ1g0TCxHQUFhNUwsSUFyQkYsbUJBcUJZb0QsRUFBV3BELEVBQ3ZDLEVDdEJJNGUsR0FBZSxtREFDZkMsR0FBZ0IsUUF1QnBCLElBQUFDLEdBYkEsU0FBZTllLEVBQU8wRSxHQUNwQixHQUFJNUQsR0FBUWQsR0FDVixPQUFPLEVBRVQsSUFBSWdELFNBQWNoRCxFQUNsQixRQUFZLFVBQVJnRCxHQUE0QixVQUFSQSxHQUE0QixXQUFSQSxHQUMvQixNQUFUaEQsSUFBaUIrZSxHQUFTL2UsTUFHdkI2ZSxHQUFjdGEsS0FBS3ZFLEtBQVc0ZSxHQUFhcmEsS0FBS3ZFLElBQzFDLE1BQVYwRSxHQUFrQjFFLEtBQVNGLE9BQU80RSxHQUN2QyxFQ3VCQSxTQUFTc2EsR0FBUXBiLEVBQU1xYixHQUNyQixHQUFtQixtQkFBUnJiLEdBQW1DLE1BQVpxYixHQUF1QyxtQkFBWkEsRUFDM0QsTUFBTSxJQUFJdmYsVUFoRFEsdUJBa0RwQixJQUFJd2YsRUFBVyxXQUNiLElBQUlwUyxFQUFPdE0sVUFDUFUsRUFBTStkLEVBQVdBLEVBQVNsZSxNQUFNa0UsS0FBTTZILEdBQVFBLEVBQUssR0FDbkRsQyxFQUFRc1UsRUFBU3RVLE1BRXJCLEdBQUlBLEVBQU10RixJQUFJcEUsR0FDWixPQUFPMEosRUFBTXpFLElBQUlqRixHQUVuQixJQUFJd0IsRUFBU2tCLEVBQUs3QyxNQUFNa0UsS0FBTTZILEdBRTlCLE9BREFvUyxFQUFTdFUsTUFBUUEsRUFBTTVFLElBQUk5RSxFQUFLd0IsSUFBV2tJLEVBQ3BDbEksQ0FDWCxFQUVFLE9BREF3YyxFQUFTdFUsTUFBUSxJQUFLb1UsR0FBUUcsT0FBU3hXLElBQ2hDdVcsQ0FDVCxDQUdBRixHQUFRRyxNQUFReFcsR0FFaEIsSUFBQXlXLEdBQWlCSixHQy9DakIsSUN0QklLLEdBQWEsbUdBR2JDLEdBQWUsV0FvQm5CQyxHRGJBLFNBQXVCM2IsR0FDckIsSUFBSWxCLEVBQVNzYyxHQUFRcGIsR0FBTSxTQUFTMUMsR0FJbEMsT0FmbUIsTUFZZjBKLEVBQU14RixNQUNSd0YsRUFBTTlFLFFBRUQ1RSxDQUNYLElBRU0wSixFQUFRbEksRUFBT2tJLE1BQ25CLE9BQU9sSSxDQUNULENDUm1COGMsRUFBYyxTQUFTdFgsR0FDeEMsSUFBSXhGLEVBQVMsR0FPYixPQU42QixLQUF6QndGLEVBQU91WCxXQUFXLElBQ3BCL2MsRUFBTzJFLEtBQUssSUFFZGEsRUFBTy9ELFFBQVFrYixJQUFZLFNBQVNLLEVBQU9DLEVBQVFDLEVBQU9DLEdBQ3hEbmQsRUFBTzJFLEtBQUt1WSxFQUFRQyxFQUFVMWIsUUFBUW1iLEdBQWMsTUFBU0ssR0FBVUQsRUFDM0UsSUFDU2hkLENBQ1QsSUNmSTRPLEdBQWN2UyxFQUFTQSxFQUFPRyxlQUFZbUQsRUFDMUN5ZCxHQUFpQnhPLEdBQWNBLEdBQVl0USxjQUFXcUIsRUEwQjFELElBQUEwZCxHQWhCQSxTQUFTQyxFQUFhaGdCLEdBRXBCLEdBQW9CLGlCQUFUQSxFQUNULE9BQU9BLEVBRVQsR0FBSWMsR0FBUWQsR0FFVixPQUFPaUwsR0FBU2pMLEVBQU9nZ0IsR0FBZ0IsR0FFekMsR0FBSWpCLEdBQVMvZSxHQUNYLE9BQU84ZixHQUFpQkEsR0FBZXJnQixLQUFLTyxHQUFTLEdBRXZELElBQUkwQyxFQUFVMUMsRUFBUSxHQUN0QixNQUFrQixLQUFWMEMsR0FBa0IsRUFBSTFDLElBQVUsSUFBYSxLQUFPMEMsQ0FDOUQsRUNQQSxJQUFBdWQsR0FKQSxTQUFrQmpnQixHQUNoQixPQUFnQixNQUFUQSxFQUFnQixHQUFLZ2dCLEdBQWFoZ0IsRUFDM0MsRUNMQSxJQUFBa2dCLEdBUEEsU0FBa0JsZ0IsRUFBTzBFLEdBQ3ZCLE9BQUk1RCxHQUFRZCxHQUNIQSxFQUVGbWdCLEdBQU1uZ0IsRUFBTzBFLEdBQVUsQ0FBQzFFLEdBQVNvZ0IsR0FBYXBmLEdBQVNoQixHQUNoRSxFQ0VBLElBQUFxZ0IsR0FSQSxTQUFlcmdCLEdBQ2IsR0FBb0IsaUJBQVRBLEdBQXFCK2UsR0FBUy9lLEdBQ3ZDLE9BQU9BLEVBRVQsSUFBSTBDLEVBQVUxQyxFQUFRLEdBQ3RCLE1BQWtCLEtBQVYwQyxHQUFrQixFQUFJMUMsSUFBVSxJQUFhLEtBQU8wQyxDQUM5RCxFQ0tBLElBQUE0ZCxHQVpBLFNBQWlCNWIsRUFBUTZiLEdBTXZCLElBSEEsSUFBSTFhLEVBQVEsRUFDUnBGLEdBSEo4ZixFQUFPQyxHQUFTRCxFQUFNN2IsSUFHSmpFLE9BRUQsTUFBVmlFLEdBQWtCbUIsRUFBUXBGLEdBQy9CaUUsRUFBU0EsRUFBTytiLEdBQU1GLEVBQUsxYSxPQUU3QixPQUFRQSxHQUFTQSxHQUFTcEYsRUFBVWlFLE9BQVNyQyxDQUMvQyxFQ1NBLElBQUFxZSxHQXJCQSxTQUFtQjlaLEVBQU91RyxFQUFPd1QsR0FDL0IsSUFBSTlhLEdBQVMsRUFDVHBGLEVBQVNtRyxFQUFNbkcsT0FFZjBNLEVBQVEsSUFDVkEsR0FBU0EsRUFBUTFNLEVBQVMsRUFBS0EsRUFBUzBNLElBRTFDd1QsRUFBTUEsRUFBTWxnQixFQUFTQSxFQUFTa2dCLEdBQ3BCLElBQ1JBLEdBQU9sZ0IsR0FFVEEsRUFBUzBNLEVBQVF3VCxFQUFNLEVBQU1BLEVBQU14VCxJQUFXLEVBQzlDQSxLQUFXLEVBR1gsSUFEQSxJQUFJekssRUFBUzdCLE1BQU1KLEtBQ1ZvRixFQUFRcEYsR0FDZmlDLEVBQU9tRCxHQUFTZSxFQUFNZixFQUFRc0gsR0FFaEMsT0FBT3pLLENBQ1QsRUNiQSxJQUFBa2UsR0FKQSxTQUFnQmxjLEVBQVE2YixHQUN0QixPQUFPQSxFQUFLOWYsT0FBUyxFQUFJaUUsRUFBU21jLEdBQVFuYyxFQUFRb2MsR0FBVVAsRUFBTSxHQUFJLEdBQ3hFLEVDTUEsSUFBQVEsR0FOQSxTQUFtQnJjLEVBQVE2YixHQUd6QixPQUZBQSxFQUFPQyxHQUFTRCxFQUFNN2IsR0FFTCxPQURqQkEsRUFBU3NjLEdBQU90YyxFQUFRNmIsWUFDUTdiLEVBQU8rYixHQUFNMVIsR0FBS3dSLElBQ3BELEVDVEl2YyxHQUFZbEMsU0FBUzVDLFVBQ3JCK0MsR0FBY25DLE9BQU9aLFVBR3JCMkUsR0FBZUcsR0FBVWhELFNBR3pCWCxHQUFpQjRCLEdBQVk1QixlQUc3QjRnQixHQUFtQnBkLEdBQWFwRSxLQUFLSyxRQTJDekMsSUFBQW9oQixHQWJBLFNBQXVCbGhCLEdBQ3JCLElBQUs0TCxHQUFhNUwsSUE1Q0osbUJBNENjb0QsRUFBV3BELEdBQ3JDLE9BQU8sRUFFVCxJQUFJMmMsRUFBUTFCLEdBQWFqYixHQUN6QixHQUFjLE9BQVYyYyxFQUNGLE9BQU8sRUFFVCxJQUFJMUgsRUFBTzVVLEdBQWVaLEtBQUtrZCxFQUFPLGdCQUFrQkEsRUFBTTFkLFlBQzlELE1BQXNCLG1CQUFSZ1csR0FBc0JBLGFBQWdCQSxHQUNsRHBSLEdBQWFwRSxLQUFLd1YsSUFBU2dNLEVBQy9CLEVDNUNBLElBQUFFLEdBSkEsU0FBeUJuaEIsR0FDdkIsT0FBT29oQixHQUFjcGhCLFFBQVNxQyxFQUFZckMsQ0FDNUMsRUNRQSxJQUFBcWhCLEdBTEEsU0FBaUJ6YSxHQUVmLE9BRHNCLE1BQVRBLEVBQWdCLEVBQUlBLEVBQU1uRyxRQUN2QjZMLEdBQVkxRixFQUFPLEdBQUssRUFDMUMsRUNKQSxJQ3lDQTBhLEdEN0NBLFNBQWtCMWQsR0FDaEIsT0FBT2dMLEdBQVlDLEdBQVNqTCxPQUFNdkIsRUFBV2tmLElBQVUzZCxFQUFPLEdBQ2hFLENDcUJXNGQsRUFBUyxTQUFTOWMsRUFBUStjLEdBQ25DLElBQUkvZSxFQUFTLENBQUEsRUFDYixHQUFjLE1BQVZnQyxFQUNGLE9BQU9oQyxFQUVULElBQUkrWCxHQUFTLEVBQ2JnSCxFQUFReFcsR0FBU3dXLEdBQU8sU0FBU2xCLEdBRy9CLE9BRkFBLEVBQU9DLEdBQVNELEVBQU03YixHQUN0QitWLElBQVdBLEVBQVM4RixFQUFLOWYsT0FBUyxHQUMzQjhmLENBQ1gsSUFDRXhHLEdBQVdyVixFQUFRK1osR0FBYS9aLEdBQVNoQyxHQUNyQytYLElBQ0YvWCxFQUFTaWIsR0FBVWpiLEVBQVFnZixFQUF3REMsS0FHckYsSUFEQSxJQUFJbGhCLEVBQVNnaEIsRUFBTWhoQixPQUNaQSxLQUNMbWhCLEdBQVVsZixFQUFRK2UsRUFBTWhoQixJQUUxQixPQUFPaUMsQ0FDVCxJQ3hDa0I0VSxJQUFZckYsR0FBVyxJQUFJcUYsR0FBSSxDQUFBLEVBQUcsS0FBSyxHQ1J6RCxJQUFJdUssR0FBZSxzQkFDZkMsR0FBa0I1ZCxPQUFPMmQsR0FBYXBJLFFBd0IxQyxJQUFBc0ksR0FQQSxTQUFzQjdaLEdBRXBCLE9BREFBLEVBQVNsSCxHQUFTa0gsS0FDQTRaLEdBQWdCdmQsS0FBSzJELEdBQ25DQSxFQUFPL0QsUUFBUTBkLEdBQWMsUUFDN0IzWixDQUNOLEVDREEsSUFBQThaLEdBSkEsU0FBbUJoaUIsR0FDakIsT0FBTzJkLEdBQVUzZCxFQUFPMGhCLEVBQzFCLEVDSEEsTUFBTU8sR0FBZ0JDLEdBQ3BCQSxFQUFXQyxZQUNYRCxFQUFXQyxZQUNWRCxFQUFXRSxTQUNWRixFQUFXRSxRQUFRQyxZQUFZLEtBQU9ILEVBQVdFLFFBQVEzaEIsT0FBUyxHQUNsRXloQixFQUFXRSxRQUFRRSxVQUFVSixFQUFXRSxRQUFRQyxZQUFZLEtBQU8sSUFDckUsR0FFV0UsR0FBY0EsRUFBR0MsS0FBSUMsVUFDNUJBLFNBSUtwZ0IsSUFBUG1nQixRQUNzQixJQUFmQSxFQUFHRSxVQUNXLElBQXJCRixFQUFHRSxRQUFRLEtBS05GLEVBQUdGLFVBQVVFLEVBQUdFLFFBQVEsS0FBTyxRQVJ0QyxHQVdXQyxHQUE0QkEsQ0FBQzlRLEVBQU11USxJQUFZLENBQzFEdlEsR0FBU3VRLEdBQVdBLEVBQVFRLE1BQU0sS0FBSyxHQUNwQixpQkFBWlIsRUFDSEEsRUFBUWplLFFBQVEsSUFBSUQsT0FBTyxHQUFHMmUsR0FBYWhSLGVBQW1CLElBQzlELElDbEROLFNBQVNpUixHQUFZQyxFQUFLQyxRQUNYLElBQVJBLElBQWlCQSxFQUFNLENBQUEsR0FDNUIsSUFBSUMsRUFBV0QsRUFBSUMsU0FFbkIsR0FBS0YsR0FBMkIsb0JBQWJHLFNBQW5CLENBRUEsSUFBSUMsRUFBT0QsU0FBU0MsTUFBUUQsU0FBU0UscUJBQXFCLFFBQVEsR0FDOURDLEVBQVFILFNBQVNJLGNBQWMsU0FDbkNELEVBQU1yZ0IsS0FBTyxXQUVJLFFBQWJpZ0IsR0FDRUUsRUFBS0ksV0FDUEosRUFBS0ssYUFBYUgsRUFBT0YsRUFBS0ksWUFLaENKLEVBQUtNLFlBQVlKLEdBR2ZBLEVBQU1LLFdBQ1JMLEVBQU1LLFdBQVdDLFFBQVVaLEVBRTNCTSxFQUFNSSxZQUFZUCxTQUFTVSxlQUFlYixHQW5CWSxDQXFCMUQsQ0RxQzRCL0QsSUFDMUIsQ0FBQ2tELEVBQVkyQixHQUFRLEtBQ25CLE9BQVEzQixFQUFXNEIsT0FDakIsSUFBSyxrQkFDSCxNQUFPLENBQUM1QixFQUFXNkIsUUFBUzdCLEVBQVdFLFNBQ3pDLElBQUssZ0JBQ0wsSUFBSyxlQUNMLElBQUssT0FDSCxNQUFPLENBQUNGLEVBQVc2QixTQUNyQixJQUFLLGlCQUNILE9BQU9wQixHQUEwQlQsRUFBV3JRLEtBQU1xUSxFQUFXRSxTQUMvRCxJQUFLLGdDQUNMLElBQUssY0FDSCxNQUFPLENBQUNGLEVBQVdyUSxNQUNyQixJQUFLLGlCQUNMLElBQUssWUFDTCxJQUFLLGFBQ0wsSUFBSyxhQUNMLElBQUssZUFDTCxJQUFLLGNBQ0wsSUFBSyxrQkFDTCxJQUFLLGlCQUNILE9BQVFnUyxHQUFTM0IsRUFBVzhCLFVBQ3hCLENBQ0U5QixFQUFXK0IsT0FDWC9CLEVBQVdnQyxLQUFLQyxjQUNoQmpDLEVBQVdrQyxVQUViLENBQ0VsQyxFQUFXOEIsVUFDWDlCLEVBQVdrQyxTQUNYbEMsRUFBV21DLE9BQVNuQyxFQUFXbUMsT0FBT3hTLFVBQU94UCxHQUVyRCxJQUFLLFFBQ0wsSUFBSyxVQUNMLElBQUssU0FDSCxNQUFPLENBQ0w2ZixFQUFXclEsS0FDWHFRLEVBQVdvQyxNQUFNbmdCLFFBQ2YsSUFBSUQsT0FBTyxHQUFHMmUsR0FBYVgsRUFBV3JRLGlCQUN0QyxLQUdOLElBQUssZ0JBQ0wsSUFBSyxPQUNILE9BQU9nUyxFQUNILENBQ0UzQixFQUFXclEsTUFDVHFRLEVBQVdvQyxPQUNWcEMsRUFBV0UsU0FBV0YsRUFBV0UsUUFBUVEsTUFBTSxLQUFLLEdBQ3ZEWCxHQUFjQyxJQUVoQixDQUNFQSxFQUFXclEsS0FDWHFRLEVBQVdNLEdBQ1hELEdBQVlMLEdBQ1pELEdBQWNDLElBSXRCLFFBQ0UsTUFBTyxDQUNMQSxFQUFXclEsTUFDVHFRLEVBQVdvQyxPQUNWcEMsRUFBV0UsU0FBV0YsRUFBV0UsUUFBUVEsTUFBTSxLQUFLLEdBQ3ZEWCxHQUFjQyxJQUVwQixJQUVGLENBQUNxQyxFQUFNVixLQUNMLE1BQU14a0IsRUFBSW1sQixHQUFVRCxHQUVwQixPQURBbGxCLEVBQUV3a0IsTUFBUUEsRUFDSHhrQixDQUFDLDBtREVqSVosTUFBTW9sQixHQUFlQSxFQUFHQyxhQUFZQyxnQkFFaENDLEVBQUEsUUFBQXRCLGNBQUEsTUFBQSxDQUFLdUIsVUFBV0MsSUFDZEYsRUFBQSxRQUFBdEIsY0FBQSxNQUFBLENBQUt1QixVQUFXQyxJQUNkRixFQUFBLFFBQUF0QixjQUFBLE1BQUEsQ0FBS3VCLFVBQVdDLElBQ2JKLElBR0pDLG9CQUtQN1EsUUFBQWlSLElBQUFDLFdBQUFQLEdBQWFRLFVBQVksQ0FDdkJQLFdBQVlRLEVBQUFBLFFBQVVoZCxPQUFPaWQsV0FDN0JSLFdBQVlPLEVBQUFBLFFBQVV0aEIsS0FBS3VoQixnN1RDcEI3QixNQUFNQyxHQUFlLENBQ25CQyxHQUFJLENBQ0ZDLE9BQVEsWUFDUkMsT0FBUSxVQUNSLHNCQUF1QixvQ0FDdkIsb0JBQXFCLHFDQUNyQixjQUFlLHNCQUNmLGtCQUFtQix3Q0FDbkIscUJBQXNCLHdCQUN0QixjQUFlLGtDQUNmLGNBQWUsc0JBQ2Ysb0JBQXFCLGtEQUNyQkMsS0FBTSxZQUNOLGFBQWMscUJBRWhCQyxHQUFJLENBQ0ZILE9BQVEsU0FDUkMsT0FBUSxTQUNSLHNCQUF1QixtQ0FDdkIsb0JBQXFCLG1DQUNyQixjQUFlLGNBQ2Ysa0JBQW1CLGlDQUNuQixxQkFBc0IsMkJBQ3RCLGNBQWUsMEJBQ2YsY0FBZSxrQkFDZixvQkFBcUIsbUNBQ3JCQyxLQUFNLE9BQ04sYUFBYyxhQUNkRSxHQUFJLG9CQUNKQyxLQUFNLHVCQUVSQyxHQUFJLENBQ0ZOLE9BQVEsVUFDUkMsT0FBUSxTQUNSLHNCQUF1QiwyQkFDdkIsb0JBQXFCLG9DQUNyQixjQUFlLG1CQUNmLGtCQUFtQixzQ0FDbkIscUJBQXNCLCtCQUN0QixjQUFlLHdCQUNmLGNBQWUsZ0JBQ2Ysb0JBQXFCLHFDQUNyQkMsS0FBTSxXQUNOLGFBQWMsa0JBQ2RFLEdBQUksbUNBQ0pDLEtBQU0scUNBRVJFLEdBQUksQ0FDRlAsT0FBUSxTQUNSQyxPQUFRLE9BQ1Isc0JBQXVCLHlDQUN2QixvQkFBcUIsbUNBQ3JCLGNBQWUsaUJBQ2Ysa0JBQW1CLHFDQUNuQixxQkFBc0IsMkJBQ3RCLGNBQWUsd0JBQ2YsY0FBZSxnQkFDZixvQkFBcUIsbUNBQ3JCQyxLQUFNLFNBQ04sYUFBYyxpQkFDZEUsR0FBSSwwQkFDSkMsS0FBTSwyQkFFUkcsR0FBSSxDQUNGUixPQUFRLFNBQ1JDLE9BQVEsVUFDUixzQkFBdUIsMkJBQ3ZCLG9CQUFxQixzQ0FDckIsY0FBZSxtQkFDZixrQkFBbUIsaUNBQ25CLHFCQUFzQiwyQkFDdEIsY0FBZSxxQkFDZixjQUFlLGdCQUNmLG9CQUFxQixrQ0FDckJDLEtBQU0sUUFDTixhQUFjLGNBQ2RFLEdBQUkseUJBQ0pDLEtBQU0sMkJDMURISSxFQUFBLFFBQUNDLEtBQUssQ0FDWEMsSUFBSyxLQUNMQyxZQUFhLEtBQ2JDLFVBQVcsY0FDWEMsY0FBZSxDQUNiQyxhQUFhLEtBSWpCLE1BQU1DLEdBQTJCQyxJQUMvQixNQUVNcmxCLEVBQU9xbEIsSUFBVUEsRUFBTXJsQixLQUFPcWxCLEVBQU1DLE9BQVNELEVBQU1FLFVBQWEsR0FFdEUsU0FBS3ZsQixJQUpTLENBQUMsR0FBSSxJQUFLLFlBSUx3bEIsT0FITCxDQUFDLEdBQUksVUFHY3psQixTQUFTQyxNQUcxQ3FsQixFQUFNSSxrQkFDQyxFQUFJLEVBR2IsTUFBTUMsV0FBOEJoQyxFQUFLLFFBQUNpQyxVQWlFeEM1bkIsV0FBQUEsQ0FBWXlhLEdBQ1ZvTixNQUFNcE4sR0FBTzdaLEVBbUNDb0YsS0FBQSxpQkFBQSxDQUFDNUYsRUFBRzBuQixLQUNsQixNQUFNQyxXQUFFQSxHQUFlL2hCLEtBQUtnaUIsTUFFdEJDLEVBQWlCLElBQUlGLEdBRXJCRyxFQUFNRCxFQUFlN25CLEVBQUkwbkIsR0FDL0JHLEVBQWU3bkIsRUFBSTBuQixHQUFhRyxFQUFlN25CLEdBQy9DNm5CLEVBQWU3bkIsR0FBSzhuQixFQUVwQmxpQixLQUFLbWlCLFNBQVMsQ0FBRUosV0FBWUUsR0FBaUIsSUFDOUNybkIsRUFFeUJvRixLQUFBLDJCQUFBLENBQUNvaUIsRUFBV3hoQixLQUNwQyxNQUFNeWhCLEVBQVNELEVBQVVFLGVBQ3JCRixFQUFVRSxlQUFlcGpCLFFBQVEsYUFBYyxJQUMvQyxTQUNHME4sRUFBTXVRLEdBQVdPLEdBQ3RCMEUsRUFBVXhWLEtBQ1Z3VixFQUFVakYsU0FHWixPQUNFd0MsRUFBQSxRQUFBdEIsY0FBQSxLQUFBLENBQ0V1QixVQUFXMkMsRUFBRzFDLEdBQU8sNkJBQ3JCNWpCLElBQUttbUIsRUFBVUksYUFFZjdDLEVBQUEsUUFBQXRCLGNBQUEsTUFBQSxDQUFLdUIsVUFBV0MsR0FBTyxrQ0FDcEJqZixFQUFRLEdBQ1ArZSxVQUFBdEIsY0FBQSxTQUFBLENBQ0V1QixVQUFXQyxHQUFPLG9DQUNsQjloQixLQUFLLFNBQ0wsYUFBWTBrQixFQUFBQSxRQUFRdG9CLEVBQUUsTUFDdEJ1b0IsUUFBU0EsS0FDUDFpQixLQUFLMmlCLGNBQWMvaEIsR0FBUSxFQUFFLEdBRWhDLEtBSUZBLEVBQVFaLEtBQUtnaUIsTUFBTUQsV0FBV3ZtQixPQUFTLEdBQ3RDbWtCLFVBQUF0QixjQUFBLFNBQUEsQ0FDRXVCLFVBQVdDLEdBQU8sb0NBQ2xCOWhCLEtBQUssU0FDTCxhQUFZMGtCLEVBQUFBLFFBQVF0b0IsRUFBRSxRQUN0QnVvQixRQUFTQSxLQUNQMWlCLEtBQUsyaUIsY0FBYy9oQixFQUFPLEVBQUUsR0FFL0IsS0FJSCtlLFVBQUF0QixjQUFBLE1BQUEsQ0FBS3VCLFVBQVdDLEdBQU8sa0NBQ3JCRixFQUFBLFFBQUF0QixjQUFBLE1BQUEsQ0FBS3VCLFVBQVdDLEdBQU8sc0NBQ3JCRixFQUFBLFFBQUF0QixjQUFDdUUsVUFBSSxDQUFDQyxJQUFJLGVBR2RsRCxVQUFBdEIsY0FBQSxNQUFBLENBQ0V1QixVQUFXMkMsRUFDVDFDLEdBQU8saUNBQ1BBLEdBQU93QyxLQUdUMUMsRUFBQSxRQUFBdEIsY0FBQ3VFLFVBQUksQ0FBQ0MsSUFBS1IsRUFBUVMsTUFBTzlpQixLQUFLeVUsTUFBTXFPLFVBR3pDbkQsVUFBQXRCLGNBQUEsTUFBQSxDQUFLdUIsVUFBV0MsR0FBTyxxQ0FDckJGLEVBQUEsUUFBQXRCLGNBQUEsSUFBQSxDQUFHdUIsVUFBV0MsR0FBTyxrQ0FBbUNqVCxHQUN4RCtTLFVBQUF0QixjQUFBLElBQUEsQ0FBR3VCLFVBQVdDLEdBQU8scUNBQ2xCMUMsSUFHTHdDLFVBQUF0QixjQUFBLE1BQUEsQ0FBS3VCLFVBQVdDLEdBQU8sbUNBQ3JCRixFQUFBLFFBQUF0QixjQUFBLE1BQUEsQ0FDRTBFLEtBQUssU0FDTEMsU0FBUyxJQUNULGFBQVlQLEVBQUFBLFFBQVF0b0IsRUFBRSxrQkFBbUIsQ0FDdkNpb0IsY0FFRnhDLFVBQVdDLEdBQU8saUNBQ2xCNkMsUUFBU0EsSUFBTTFpQixLQUFLeVUsTUFBTXdPLGVBQWViLEdBQ3pDYyxVQUFXNW9CLElBQ0wrbUIsR0FBeUIvbUIsSUFDM0IwRixLQUFLeVUsTUFBTXdPLGVBQWViLEVBQzVCLEdBR0Z6QyxFQUFBLFFBQUF0QixjQUFDdUUsVUFBSSxDQUFDQyxJQUFJLFVBRVpsRCxFQUFBQSxRQUFBdEIsY0FBQSxNQUFBLENBQ0UwRSxLQUFLLFNBQ0xDLFNBQVMsSUFDVCxhQUFZUCxFQUFBQSxRQUFRdG9CLEVBQUUsb0JBQXFCLENBQ3pDaW9CLGNBRUZ4QyxVQUFXQyxHQUFPLG1DQUNsQjZDLFFBQVNBLElBQ1AxaUIsS0FBS21pQixTQUFTLENBQ1pnQixrQkFBbUJmLEVBQ25CZ0Isc0JBQXNCLElBRzFCRixVQUFXNW9CLElBQ0wrbUIsR0FBeUIvbUIsSUFDM0IwRixLQUFLbWlCLFNBQVMsQ0FDWmdCLGtCQUFtQmYsRUFDbkJnQixzQkFBc0IsR0FFMUIsR0FHRnpELEVBQUEsUUFBQXRCLGNBQUN1RSxVQUFJLENBQUNDLElBQUksWUFHWCxJQUVSam9CLDhCQUVxQixLQUNwQixNQUFNeW9CLFVBQUVBLEdBQWNyakIsS0FBS3lVLE9BQ3JCc04sV0FBRUEsR0FBZS9oQixLQUFLZ2lCLE1BQzVCLE9BQ0VyQyxFQUFBLFFBQUF0QixjQUFBLE1BQUEsQ0FBS3VCLFVBQVdDLEdBQU8sa0NBQ3JCRixFQUFBLFFBQUF0QixjQUFDaUYsVUFBZ0IsQ0FBQ0MsUUFBU0YsR0FDekIxRCxFQUFBLFFBQUF0QixjQUFDbUYsZ0JBQWEsQ0FDWjVELFVBQVdDLEdBQU8sdUJBQ2xCdGlCLElBQUksS0FDSmttQixLQUFNMUIsRUFDTjJCLFFBQVNDLEdBQVMzakIsS0FBS21pQixTQUFTLENBQUVKLFdBQVk0QixJQUM5Q0MsVUFBVyxJQUNYQyxPQUFRLElBQUloRSxHQUFPLG9DQUVsQmtDLEVBQVdoZixLQUFJLENBQUNxZixFQUFXeGhCLElBQ25CWixLQUFLOGpCLHdCQUF3QjFCLEVBQVd4aEIsT0FJakQsSUFFVGhHLEVBQUFvRixLQUFBLDhCQUU0Qm9pQixHQUV6QnpDLEVBQUEsUUFBQXRCLGNBQUMwRixVQUFXLENBQ1ZDLFdBQVloa0IsS0FBS3lVLE1BQU11UCxXQUN2QnZFLFdBQVlnRCxFQUFBQSxRQUFRdG9CLEVBQUUsdUJBQ3RCOHBCLFlBQWFBLElBQ1hqa0IsS0FBS21pQixTQUNILENBQUVnQixrQkFBbUIsS0FBTUMsc0JBQXNCLElBQ2pELElBQU1wakIsS0FBS3lVLE1BQU13UCxnQkFHckJDLFlBQWFsa0IsS0FBS2dpQixNQUFNb0IscUJBQ3hCZSxjQUNFL0IsRUFBWSxHQUFHQSxFQUFVeFYsU0FBU3dWLEVBQVVqRixVQUFZLEdBRTFEaUgsa0JBQW1CM0IsRUFBQUEsUUFBUXRvQixFQUFFLFVBQzdCa3FCLHFCQUFzQkEsS0FDcEJya0IsS0FBS3lVLE1BQU02UCxnQkFBZ0JsQyxHQUMzQnBpQixLQUFLbWlCLFNBQVMsQ0FDWmdCLGtCQUFtQixLQUNuQkMsc0JBQXNCLEdBQ3RCLEVBRUptQixvQkFBcUI5QixFQUFBQSxRQUFRdG9CLEVBQUUsVUFDL0JxcUIsdUJBQXdCQSxJQUN0QnhrQixLQUFLbWlCLFNBQVMsQ0FDWmdCLGtCQUFtQixLQUNuQkMsc0JBQXNCLElBRzFCTixNQUFPOWlCLEtBQUt5VSxNQUFNcU8sTUFDbEIyQixXQUFZemtCLEtBQUt5VSxNQUFNZ1EsV0FDdkJDLFlBQWExa0IsS0FBS3lVLE1BQU1pUSxZQUN4QkMsS0FBTTNrQixLQUFLeVUsTUFBTWtRLFNBR3RCL3BCLHFCQUVZLEtBQ1hvRixLQUFLeVUsTUFBTXdQLGNBQ1gsTUFBTVcsRUFBb0I1a0IsS0FBS2dpQixNQUFNRCxXQUFXaGYsS0FBSXVjLEdBQ2xEdUYsR0FBS3ZGLEVBQU0sQ0FBQyxTQUFVLGVBRW5Cd0YsR0FBUUYsRUFBbUI1a0IsS0FBS3lVLE1BQU1zTixhQUN6Qy9oQixLQUFLeVUsTUFBTXNRLGlCQUFpQkgsRUFDOUIsSUFDRGhxQiw2QkFFb0IsS0FDbkIsTUFBTWtvQixNQUFFQSxFQUFLMkIsV0FBRUEsRUFBVUMsWUFBRUEsR0FBZ0Ixa0IsS0FBS3lVLE1BQzFDdVEsRUFBYSxDQUNqQnZGLFdBQVlnRCxFQUFBQSxRQUFRdG9CLEVBQUUsZUFDdEJ1bEIsV0FBWUEsSUFBTTFmLEtBQUtpbEIsdUJBRXpCLE9BQ0V0RixFQUFBLFFBQUF0QixjQUFBLE1BQUEsQ0FDRUQsTUFBTyxDQUNMLFVBQVcsR0FBRzBFLElBQ2QsZ0JBQWlCLEdBQUcyQixJQUNwQix1QkFBd0JDLEVBQVlRLFNBR3RDdkYsRUFBQSxRQUFBdEIsY0FBQ21CLEdBQWlCd0YsR0FDZCxJQTdPUnZDLEVBQUFBLFFBQVEwQyxlQUFlMVEsRUFBTWtRLE1BQzdCM2tCLEtBQUtnaUIsTUFBUSxDQUNYRCxXQUFZdE4sRUFBTXNOLFdBQ2xCcUIsc0JBQXNCLEVBQ3RCRCxrQkFBbUIsTUFFckJ0b0IsT0FBTzJELEtBQUsyaEIsSUFBY2hVLFNBQVF3WSxJQUNoQ2xDLEVBQU8sUUFBQzJDLGtCQUFrQlQsRUFBTSxjQUFleEUsR0FBYXdFLEdBQU0sR0FFdEUsQ0FFQSwrQkFBT1UsQ0FBeUJDLEVBQVdDLEdBQ3pDLE1BQU1DLEVBQWlCRixFQUFVdkQsV0FDM0IwRCxFQUFpQkYsRUFBVXhELFdBQ2pDLE9BQ0cyRCxHQUFRQyxHQUFlSCxFQUFnQkMsRUFBZ0JYLE1BQ3ZEWSxHQUFRQyxHQUFlRixFQUFnQkQsRUFBZ0JWLEtBU25ELE1BUERZLEdBQVFGLElBQ1ZGLEVBQVVyQixjQUVMLENBQ0xsQyxXQUFZeUQsR0FJbEIsQ0FFQUksa0JBQUFBLEdBQ01uRCxFQUFPLFFBQUNvRCxXQUFhN2xCLEtBQUt5VSxNQUFNa1EsTUFDbENsQyxFQUFBQSxRQUFRMEMsZUFBZW5sQixLQUFLeVUsTUFBTWtRLEtBRXRDLENBaU5BbUIsTUFBQUEsR0FDRSxNQUFNQyxTQUFFQSxHQUFhL2xCLEtBQUt5VSxPQUNwQjJPLHFCQUFFQSxFQUFvQkQsa0JBQUVBLEdBQXNCbmpCLEtBQUtnaUIsTUFDekQsT0FDRXJDLEVBQUEsUUFBQXRCLGNBQ0cwSCxNQUFBQSxLQUFBQSxHQUNDcEcsRUFBQSxRQUFBdEIsY0FBQzJILFVBQUssQ0FDSmhDLFdBQVloa0IsS0FBS3lVLE1BQU11UCxXQUN2QmlDLGFBQWN4RCxFQUFBQSxRQUFRdG9CLEVBQUUsc0JBQ3hCK3JCLGlCQUFrQnpELEVBQUFBLFFBQVF0b0IsRUFBRSxlQUM1QmdzQixRQUFRLFFBQ1JDLE9BQVFwbUIsS0FBS3lVLE1BQU15UCxZQUNuQm1DLGFBQWNybUIsS0FBS3NtQixZQUVsQnRtQixLQUFLdW1CLDJCQUEyQnBELEdBQ2hDbmpCLEtBQUt3bUIsdUJBR1JULEdBQ0FwRyxVQUFBdEIsY0FBQzJILEVBQUFBLFFBQUssQ0FDSmhDLFdBQVloa0IsS0FBS3lVLE1BQU11UCxXQUN2QmlDLGFBQWN4RCxFQUFBQSxRQUFRdG9CLEVBQUUsc0JBQ3hCK3JCLGlCQUFrQnpELEVBQUFBLFFBQVF0b0IsRUFBRSxlQUM1QmdzQixRQUFRLFFBQ1JDLE9BQVFwbUIsS0FBS3lVLE1BQU15UCxZQUNuQm1DLGFBQWNybUIsS0FBS3NtQixZQUVsQnRtQixLQUFLdW1CLDJCQUEyQnBELElBQy9CQyxHQUF3QnBqQixLQUFLd21CLHNCQUt6QyxFQUNENXJCLEVBdFZLK21CLEdBdURrQixlQUFBLENBQ3BCZ0QsS0FBTSxLQUNOb0IsVUFBVSxFQUNWakQsTUFBTyxVQUNQMkIsV0FBWSxVQUNaQyxZQUFhLENBQ1hRLE9BQVEsc0JBRVhyVyxRQUFBaVIsSUFBQUMsV0EvREc0QixHQUNHM0IsVUFBWSxDQUdqQmlFLFlBQWFoRSxFQUFBQSxRQUFVdGhCLEtBQUt1aEIsV0FHNUI2RSxpQkFBa0I5RSxFQUFBQSxRQUFVdGhCLEtBQUt1aEIsV0FHakNvRSxnQkFBaUJyRSxFQUFBQSxRQUFVdGhCLEtBQUt1aEIsV0FHaEMrQyxlQUFnQmhELEVBQUFBLFFBQVV0aEIsS0FBS3VoQixXQWMvQjZCLFdBQVk5QixFQUFTLFFBQUN3RyxRQUNwQnhHLEVBQUFBLFFBQVV5RyxNQUFNLENBQ2Qzb0IsS0FBTWtpQixFQUFTLFFBQUNoZCxPQUNoQmthLFFBQVM4QyxFQUFTLFFBQUNoZCxPQUNuQitiLE9BQVFpQixFQUFTLFFBQUNoZCxPQUNsQjBqQixJQUFLMUcsRUFBUyxRQUFDaGQsT0FDZjJqQixJQUFLM0csRUFBUyxRQUFDdkYsT0FDZm1NLElBQUs1RyxFQUFTLFFBQUN2RixPQUNmOU4sS0FBTXFULEVBQVMsUUFBQ2hkLE9BQ2hCcWYsZUFBZ0JyQyxFQUFTLFFBQUNoZCxPQUMxQnVmLFlBQWF2QyxFQUFTLFFBQUNoZCxPQUN2QjRiLE1BQU9vQixFQUFTLFFBQUNoZCxVQUVuQmlkLFdBQ0Z5RSxLQUFNMUUsRUFBUyxRQUFDaGQsT0FDaEIrZ0IsV0FBWS9ELEVBQUFBLFFBQVVoZCxPQUFPaWQsV0FDN0JnRSxZQUFhakUsRUFBQUEsUUFBVTZHLEtBQUs1RyxXQUM1QjZGLFNBQVU5RixFQUFTLFFBQUM2RyxLQUNwQnpELFVBQVdwRCxFQUFBQSxRQUFVNkcsS0FBSzVHLFdBQzFCNEMsTUFBTzdDLEVBQVMsUUFBQ2hkLE9BQ2pCd2hCLFdBQVl4RSxFQUFTLFFBQUNoZCxPQUV0QnloQixZQUFhekUsRUFBUyxRQUFDeUcsTUFBTSxDQUUzQnhCLE9BQVFqRixFQUFTLFFBQUN2RiJ9
|