| !function(e){var t=window.webpackHotUpdate;window.webpackHotUpdate=function(e,n){!function(e,t){if(!k[e]||!b[e])return;for(var n in b[e]=!1,t)Object.prototype.hasOwnProperty.call(t,n)&&(m[n]=t[n]);0==--y&&0===v&&P()}(e,n),t&&t(e,n)};var n,o=!0,i="5c26811618424e1fb46a",r=1e4,s={},a=[],c=[];function l(e){var t=N[e];if(!t)return I;var o=function(o){return t.hot.active?(N[o]?-1===N[o].parents.indexOf(e)&&N[o].parents.push(e):(a=[e],n=o),-1===t.children.indexOf(o)&&t.children.push(o)):(console.warn("[HMR] unexpected require("+o+") from disposed module "+e),a=[]),I(o)},i=function(e){return{configurable:!0,enumerable:!0,get:function(){return I[e]},set:function(t){I[e]=t}}};for(var r in I)Object.prototype.hasOwnProperty.call(I,r)&&"e"!==r&&"t"!==r&&Object.defineProperty(o,r,i(r));return o.e=function(e){return"ready"===p&&h("prepare"),v++,I.e(e).then(t,function(e){throw t(),e});function t(){v--,"prepare"===p&&(g[e]||S(e),0===v&&0===y&&P())}},o.t=function(e,t){return 1&t&&(e=o(e)),I.t(e,-2&t)},o}function u(e){var t={_acceptedDependencies:{},_declinedDependencies:{},_selfAccepted:!1,_selfDeclined:!1,_disposeHandlers:[],_main:n!==e,active:!0,accept:function(e,n){if(void 0===e)t._selfAccepted=!0;else if("function"==typeof e)t._selfAccepted=e;else if("object"==typeof e)for(var o=0;o<e.length;o++)t._acceptedDependencies[e[o]]=n||function(){};else t._acceptedDependencies[e]=n||function(){}},decline:function(e){if(void 0===e)t._selfDeclined=!0;else if("object"==typeof e)for(var n=0;n<e.length;n++)t._declinedDependencies[e[n]]=!0;else t._declinedDependencies[e]=!0},dispose:function(e){t._disposeHandlers.push(e)},addDisposeHandler:function(e){t._disposeHandlers.push(e)},removeDisposeHandler:function(e){var n=t._disposeHandlers.indexOf(e);n>=0&&t._disposeHandlers.splice(n,1)},check:M,apply:j,status:function(e){if(!e)return p;d.push(e)},addStatusHandler:function(e){d.push(e)},removeStatusHandler:function(e){var t=d.indexOf(e);t>=0&&d.splice(t,1)},data:s[e]};return n=void 0,t}var d=[],p="idle";function h(e){p=e;for(var t=0;t<d.length;t++)d[t].call(null,e)}var f,m,w,y=0,v=0,g={},b={},k={};function O(e){return+e+""===e?+e:e}function M(e){if("idle"!==p)throw new Error("check() is only allowed in idle status");return o=e,h("check"),(t=r,t=t||1e4,new Promise(function(e,n){if("undefined"==typeof XMLHttpRequest)return n(new Error("No browser support"));try{var o=new XMLHttpRequest,r=I.p+""+i+".hot-update.json";o.open("GET",r,!0),o.timeout=t,o.send(null)}catch(e){return n(e)}o.onreadystatechange=function(){if(4===o.readyState)if(0===o.status)n(new Error("Manifest request to "+r+" timed out."));else if(404===o.status)e();else if(200!==o.status&&304!==o.status)n(new Error("Manifest request to "+r+" failed."));else{try{var t=JSON.parse(o.responseText)}catch(e){return void n(e)}e(t)}}})).then(function(e){if(!e)return h("idle"),null;b={},g={},k=e.c,w=e.h,h("prepare");var t=new Promise(function(e,t){f={resolve:e,reject:t}});m={};return S(0),"prepare"===p&&0===v&&0===y&&P(),t});var t}function S(e){k[e]?(b[e]=!0,y++,function(e){var t=document.createElement("script");t.charset="utf-8",t.src=I.p+""+e+"."+i+".hot-update.js",document.head.appendChild(t)}(e)):g[e]=!0}function P(){h("ready");var e=f;if(f=null,e)if(o)Promise.resolve().then(function(){return j(o)}).then(function(t){e.resolve(t)},function(t){e.reject(t)});else{var t=[];for(var n in m)Object.prototype.hasOwnProperty.call(m,n)&&t.push(O(n));e.resolve(t)}}function j(t){if("ready"!==p)throw new Error("apply() is only allowed in ready status");var n,o,r,c,l;function u(e){for(var t=[e],n={},o=t.slice().map(function(e){return{chain:[e],id:e}});o.length>0;){var i=o.pop(),r=i.id,s=i.chain;if((c=N[r])&&!c.hot._selfAccepted){if(c.hot._selfDeclined)return{type:"self-declined",chain:s,moduleId:r};if(c.hot._main)return{type:"unaccepted",chain:s,moduleId:r};for(var a=0;a<c.parents.length;a++){var l=c.parents[a],u=N[l];if(u){if(u.hot._declinedDependencies[r])return{type:"declined",chain:s.concat([l]),moduleId:r,parentId:l};-1===t.indexOf(l)&&(u.hot._acceptedDependencies[r]?(n[l]||(n[l]=[]),d(n[l],[r])):(delete n[l],t.push(l),o.push({chain:s.concat([l]),id:l})))}}}}return{type:"accepted",moduleId:e,outdatedModules:t,outdatedDependencies:n}}function d(e,t){for(var n=0;n<t.length;n++){var o=t[n];-1===e.indexOf(o)&&e.push(o)}}t=t||{};var f={},y=[],v={},g=function(){console.warn("[HMR] unexpected require("+M.moduleId+") to disposed module")};for(var b in m)if(Object.prototype.hasOwnProperty.call(m,b)){var M;l=O(b);var S=!1,P=!1,j=!1,C="";switch((M=m[b]?u(l):{type:"disposed",moduleId:b}).chain&&(C="\nUpdate propagation: "+M.chain.join(" -> ")),M.type){case"self-declined":t.onDeclined&&t.onDeclined(M),t.ignoreDeclined||(S=new Error("Aborted because of self decline: "+M.moduleId+C));break;case"declined":t.onDeclined&&t.onDeclined(M),t.ignoreDeclined||(S=new Error("Aborted because of declined dependency: "+M.moduleId+" in "+M.parentId+C));break;case"unaccepted":t.onUnaccepted&&t.onUnaccepted(M),t.ignoreUnaccepted||(S=new Error("Aborted because "+l+" is not accepted"+C));break;case"accepted":t.onAccepted&&t.onAccepted(M),P=!0;break;case"disposed":t.onDisposed&&t.onDisposed(M),j=!0;break;default:throw new Error("Unexception type "+M.type)}if(S)return h("abort"),Promise.reject(S);if(P)for(l in v[l]=m[l],d(y,M.outdatedModules),M.outdatedDependencies)Object.prototype.hasOwnProperty.call(M.outdatedDependencies,l)&&(f[l]||(f[l]=[]),d(f[l],M.outdatedDependencies[l]));j&&(d(y,[M.moduleId]),v[l]=g)}var D,q=[];for(o=0;o<y.length;o++)l=y[o],N[l]&&N[l].hot._selfAccepted&&q.push({module:l,errorHandler:N[l].hot._selfAccepted});h("dispose"),Object.keys(k).forEach(function(e){!1===k[e]&&function(e){delete installedChunks[e]}(e)});for(var A,B,E=y.slice();E.length>0;)if(l=E.pop(),c=N[l]){var F={},R=c.hot._disposeHandlers;for(r=0;r<R.length;r++)(n=R[r])(F);for(s[l]=F,c.hot.active=!1,delete N[l],delete f[l],r=0;r<c.children.length;r++){var x=N[c.children[r]];x&&((D=x.parents.indexOf(l))>=0&&x.parents.splice(D,1))}}for(l in f)if(Object.prototype.hasOwnProperty.call(f,l)&&(c=N[l]))for(B=f[l],r=0;r<B.length;r++)A=B[r],(D=c.children.indexOf(A))>=0&&c.children.splice(D,1);for(l in h("apply"),i=w,v)Object.prototype.hasOwnProperty.call(v,l)&&(e[l]=v[l]);var _=null;for(l in f)if(Object.prototype.hasOwnProperty.call(f,l)&&(c=N[l])){B=f[l];var W=[];for(o=0;o<B.length;o++)if(A=B[o],n=c.hot._acceptedDependencies[A]){if(-1!==W.indexOf(n))continue;W.push(n)}for(o=0;o<W.length;o++){n=W[o];try{n(B)}catch(e){t.onErrored&&t.onErrored({type:"accept-errored",moduleId:l,dependencyId:B[o],error:e}),t.ignoreErrored||_||(_=e)}}}for(o=0;o<q.length;o++){var T=q[o];l=T.module,a=[l];try{I(l)}catch(e){if("function"==typeof T.errorHandler)try{T.errorHandler(e)}catch(n){t.onErrored&&t.onErrored({type:"self-accept-error-handler-errored",moduleId:l,error:n,originalError:e}),t.ignoreErrored||_||(_=n),_||(_=e)}else t.onErrored&&t.onErrored({type:"self-accept-errored",moduleId:l,error:e}),t.ignoreErrored||_||(_=e)}}return _?(h("fail"),Promise.reject(_)):(h("idle"),new Promise(function(e){e(y)}))}var N={};function I(t){if(N[t])return N[t].exports;var n=N[t]={i:t,l:!1,exports:{},hot:u(t),parents:(c=a,a=[],c),children:[]};return e[t].call(n.exports,n,n.exports,l(t)),n.l=!0,n.exports}I.m=e,I.c=N,I.d=function(e,t,n){I.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},I.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},I.t=function(e,t){if(1&t&&(e=I(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(I.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)I.d(n,o,function(t){return e[t]}.bind(null,o));return n},I.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return I.d(t,"a",t),t},I.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},I.p="dist/",I.h=function(){return i},l(10)(I.s=10)}([function(e,t){e.exports=React},function(e,t,n){"use strict";(function(e){n(5),n(6);!function(e){e._n4jsImport=function(e){return n(7)(e)}}("object"==typeof e?e:self)}).call(this,n(2))},function(e,t){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(e){"object"==typeof window&&(n=window)}e.exports=n},function(e,t,n){"use strict";e.exports=n(8)},function(e,t){e.exports=ReactDOM},function(e,t,n){(function(e){!function(e){"use strict";function t(e,t,n,o){"function"==typeof t&&Object.setPrototypeOf(e,t),t===Error&&(n.stack={get:function(){return this.$__n4err.stack}},n.message={get:function(){return this.$__n4err.message}},n.name={get:function(){return e.n4type.name}}),Object.defineProperties(e,o);var i=Object.create(t.prototype,n);Object.defineProperty(i,"constructor",{value:e}),e.prototype=i}function n(e,t){Object.defineProperty(e,"n4type",{value:t,enumerable:!1}),t.ownedMembers.forEach(function(e){Object.defineProperty(e,"owner",{value:t,enumerable:!1})}),t.ownedMembers.forEach(function(e){e instanceof h&&(Object.defineProperty(e,"jsFunction",{value:e.constructor,enumerable:!1}),e.constructor.n4member=e)})}function o(e){Object.defineProperty(e,"target",{value:this,enumerable:!1})}function i(e){e.annotations&&e.annotations.forEach(o,e)}var r=function(e){Object.prototype.constructor.call(this,e)},s=function(e){r.prototype.constructor.call(this,e),this.origin=e.origin,this.annotations=e.annotations||[],i(this)},a=function(e){s.prototype.constructor.call(this,e),this.name=e.name},c=function(e){a.prototype.constructor.call(this,e),this.fqn=e.fqn},l=function(e){c.prototype.constructor.call(this,e),this.n4superType=e.n4superType,this.allImplementedInterfaces=e.allImplementedInterfaces,this.annotations=e.annotations,this.ownedMembers=e.ownedMembers||[],this.consumedMembers=e.consumedMembers||[],this.ownedMembers.forEach(function(e){Object.defineProperty(e,"owner",{value:this,enumerable:!1}),i(e)},this)},u=function(e){l.prototype.constructor.call(this,e)},d=function(e){l.prototype.constructor.call(this,e)},p=function(e){a.prototype.constructor.call(this,e),this.owner=e.owner,this.isStatic=e.isStatic||!1},h=function(e){p.prototype.constructor.call(this,e),this.jsFunction=e.jsFunction},f=function(e){p.prototype.constructor.call(this,e)},m=function(e){p.prototype.constructor.call(this,e),this.getter=e.getter},w=function(e){c.prototype.constructor.call(this,e)},y=function(e){Object.prototype.constructor.call(this,e)},v=function(e){c.prototype.constructor.call(this,e)},g=function(e){Object.prototype.constructor.call(this,e)},b=function(e){r.prototype.constructor.call(this,e),this.name=e.name,this.details=e.details,this.target=e.target},k=function(e){Object.prototype.constructor.call(this,e)},O=function(e){this.$__n4err=new Error(e)},M=function(e){Object.prototype.constructor.call(this,e)},S=function(e){Object.prototype.constructor.call(this,e)};t(r,Object,{},{}),t(s,r,{hasAnnotation:{value:function(e){return this.annotations.some(function(t){return t.name===e})}},anyAnnotation:{value:function(e){for(var t=this.annotations.length-1;t>=0;t--){var n=this.annotations[t];if(n.name===e)return n}return null}},allAnnotations:{value:function(e){return this.annotations.filter(function(t){return t.name===e})}}},{}),t(a,s,{},{}),t(c,a,{isClass:{get:function(){return!1}},isInterface:{get:function(){return!1}},isEnum:{get:function(){return!1}}},{of:{value:function(e){return e?e.n4type||e.constructor.n4type:void 0}}}),t(l,c,{members:{value:function(e,t,n){var o=this.ownedMembers.slice();if(e&&(o=o.concat(this.consumedMembers)),t&&this.n4superType instanceof l){var i=this.n4superType.members(e,t,n);o=o.concat(i)}return n||(o=o.filter(function(e){return!e.isStatic})),o}},membersWithAnnotation:{value:function(e,t,n,o){return this.members(t,n,o).filter(function(t){return t.hasAnnotation(e)})}},dataFields:{value:function(e,t,n){return this.members(e,t,n).filter(function(e){return e instanceof f})}},dataFieldsWithAnnotation:{value:function(e,t,n,o){return this.membersWithAnnotation(e,t,n,o).filter(function(e){return e instanceof f})}},methods:{value:function(e,t,n){return this.members(e,t,n).filter(function(e){return e instanceof h})}},methodsWithAnnotation:{value:function(e,t,n,o){return this.membersWithAnnotation(e,t,n,o).filter(function(e){return e instanceof h})}}},{}),t(u,l,{isClass:{get:function(){return!0}}},{}),t(d,l,{isInterface:{get:function(){return!0}}},{}),t(p,a,{},{}),t(h,p,{},{}),t(f,p,{},{}),t(m,p,{isGetter:{value:function(){return this.getter}},isSetter:{value:function(){return!this.getter}}},{}),t(w,c,{isEnum:{get:function(){return!0}}},{}),t(y,Object,{toString:{value:function(){return this.value}}},{findLiteralByName:{value:function(e){for(var t=this.literals.length-1;t>=0;t--)if(this.literals[t].name===e)return this.literals[t]}},findLiteralByValue:{value:function(e){for(var t=this.literals.length-1;t>=0;t--)if(this.literals[t].value===e)return this.literals[t]}}}),t(v,c,{isEnum:{get:function(){return!0}}},{}),t(g,Object,{toString:{value:function(){return this.value}}},{findLiteralByValue:{value:function(e){for(var t=this.literals.length-1;t>=0;t--)if(this.literals[t]===e)return this.literals[t]}}}),t(b,r,{},{}),t(O,Error,{},{}),n(r,new u({name:"N4Object",origin:"n4js-runtime",fqn:"N4BuiltInClasses.N4Object",n4superType:r.n4type,allImplementedInterfaces:[],annotations:[],ownedMembers:[],consumedMemebers:[]})),n(s,new u({name:"N4Element",origin:"n4js-runtime",fqn:"N4BuiltInClasses.N4Element",n4superType:r.n4type,allImplementedInterfaces:[],annotations:[],ownedMembers:[new m({name:"annotations",getter:!0}),new h({name:"hasAnnotation",jsFunction:s.hasAnnotation}),new h({name:"anyAnnotation",jsFunction:s.anyAnnotation}),new h({name:"allAnnotations",jsFunction:s.allAnnotations}),new m({name:"origin",getter:!0})],consumedMemebers:[]})),n(a,new u({name:"N4NamedElement",origin:"n4js-runtime",fqn:"N4BuiltInClasses.N4NamedElement",n4superType:s.n4type,allImplementedInterfaces:[],annotations:[],ownedMembers:[new m({name:"name",getter:!0})],consumedMemebers:[]})),n(c,new u({name:"N4Type",origin:"n4js-runtime",fqn:"N4BuiltInClasses.N4Type",n4superType:a.n4type,allImplementedInterfaces:[],annotations:[],ownedMembers:[new m({name:"fqn",getter:!0}),new h({name:"of",jsFunction:c.of,isStatic:!0}),new m({name:"isClass",getter:!0}),new m({name:"isInterface",getter:!0}),new m({name:"isEnum",getter:!0})],consumedMemebers:[]})),n(l,new u({name:"N4Classifier",origin:"n4js-runtime",fqn:"N4BuiltInClasses.N4Classifier",n4superType:c.n4type,allImplementedInterfaces:[],annotations:[],ownedMembers:[new m({name:"n4superType",getter:!0}),new m({name:"allImplementedInterfaces",getter:!0}),new f({name:"ownedMembers"}),new f({name:"consumedMembers"}),new h({name:"constructor"}),new h({name:"members",jsFunction:l.members}),new h({name:"membersWithAnnotation",jsFunction:l.membersWithAnnotation}),new h({name:"dataFields",jsFunction:l.dataFields}),new h({name:"dataFieldsWithAnnotation",jsFunction:l.dataFieldsWithAnnotation}),new h({name:"methods",jsFunction:l.methods}),new h({name:"methodsWithAnnotation",jsFunction:l.methodsWithAnnotation})],consumedMemebers:[]})),n(u,new u({name:"N4Class",origin:"n4js-runtime",fqn:"N4BuiltInClasses.N4Class",n4superType:l.n4type,allImplementedInterfaces:[],annotations:[],ownedMembers:[new m({name:"isClass",getter:!0})],consumedMemebers:[]})),n(d,new u({name:"N4Interface",origin:"n4js-runtime",fqn:"N4BuiltInClasses.N4Interface",n4superType:l.n4type,allImplementedInterfaces:[],annotations:[],ownedMembers:[new m({name:"isInterface",getter:!0})],consumedMemebers:[]})),n(p,new u({name:"N4Member",origin:"n4js-runtime",fqn:"N4BuiltInClasses.N4Member",n4superType:a.n4type,allImplementedInterfaces:[],annotations:[],ownedMembers:[new m({name:"owner",getter:!0}),new m({name:"isStatic",getter:!0})],consumedMemebers:[]})),n(h,new u({name:"N4Method",origin:"n4js-runtime",fqn:"N4BuiltInClasses.N4Method",n4superType:p.n4type,allImplementedInterfaces:[],annotations:[],ownedMembers:[new m({name:"jsFunction",getter:!0})],consumedMemebers:[]})),n(f,new u({name:"N4DataField",origin:"n4js-runtime",fqn:"N4BuiltInClasses.N4DataField",n4superType:p.n4type,allImplementedInterfaces:[],annotations:[],ownedMembers:[],consumedMemebers:[]})),n(m,new u({name:"N4Accessor",origin:"n4js-runtime",fqn:"N4BuiltInClasses.N4Accessor",n4superType:p.n4type,allImplementedInterfaces:[],annotations:[],ownedMembers:[new f({name:"getter"}),new h({name:"isGetter",jsFunction:m.isGetter}),new h({name:"isSetter",jsFunction:m.isSetter})],consumedMemebers:[]})),n(w,new u({name:"N4EnumType",origin:"n4js-runtime",fqn:"N4BuiltInClasses.N4EnumType",n4superType:c.n4type,allImplementedInterfaces:[],annotations:[],ownedMembers:[new m({name:"isEnum",getter:!0})],consumedMemebers:[]})),n(y,new u({name:"N4Enum",origin:"n4js-runtime",fqn:"N4BuiltInClasses.N4Enum",n4superType:void 0,allImplementedInterfaces:[],annotations:[],ownedMembers:[new h({name:"toString",jsFunction:y.toString}),new h({name:"valueByName",jsFunction:y.valueByName,isStatic:!0}),new m({name:"name",getter:!0}),new m({name:"value",getter:!0}),new m({name:"values",getter:!0,isStatic:!0}),new m({name:"n4type",getter:!0})],consumedMemebers:[]})),n(v,new u({name:"N4StringBasedEnumType",origin:"n4js-runtime",fqn:"N4BuiltInClasses.N4StringBasedEnumType",n4superType:c.n4type,allImplementedInterfaces:[],annotations:[],ownedMembers:[new m({name:"isEnum",getter:!0})],consumedMemebers:[]})),n(g,new u({name:"N4StringBasedEnum",origin:"n4js-runtime",fqn:"N4BuiltInClasses.N4StringBasedEnum",n4superType:void 0,allImplementedInterfaces:[],annotations:[],ownedMembers:[new h({name:"toString",jsFunction:g.toString}),new h({name:"valueByName",jsFunction:g.valueByName,isStatic:!0}),new m({name:"name",getter:!0}),new m({name:"value",getter:!0}),new m({name:"values",getter:!0,isStatic:!0}),new m({name:"n4type",getter:!0})],consumedMemebers:[]})),n(b,new u({name:"N4Annotation",origin:"n4js-runtime",fqn:"N4BuiltInClasses.N4Annotation",n4superType:r.n4type,allImplementedInterfaces:[],annotations:[],ownedMembers:[new m({name:"name",getter:!0}),new m({name:"details",getter:!0}),new m({name:"target",getter:!0})],consumedMemebers:[]})),n(k,new d({name:"N4Provider",origin:"n4js-runtime",fqn:"N4BuiltInClasses.N4Provider",n4superType:void 0,allImplementedInterfaces:[],annotations:[],ownedMembers:[new h({name:"get",jsFunction:k.get,annotations:[]})],consumedMembers:[]})),n(O,new u({name:"N4ApiNotImplementedError",origin:"N4BuiltInClasses",fqn:"N4BuiltInClasses.N4ApiNotImplementedError",n4superType:void 0,allImplementedInterfaces:[],annotations:[],ownedMembers:[],consumedMemebers:[]})),n(M,new d({name:"MigrationController",origin:"n4js-runtime",fqn:"N4BuiltInClasses.MigrationController",n4superType:void 0,allImplementedInterfaces:[],annotations:[],ownedMembers:[new h({name:"migrate",isStatic:!1,annotations:[]}),new h({name:"migrateWith",isStatic:!1,annotations:[]}),new m({name:"context",getter:!0,isStatic:!1,annotations:[]})],consumedMembers:[]})),n(S,new d({name:"MigrationContext",origin:"n4js-runtime",fqn:"N4BuiltInClasses.MigrationContext",n4superType:void 0,allImplementedInterfaces:[],annotations:[],ownedMembers:[new h({name:"getTrace",isStatic:!1,annotations:[]}),new h({name:"isModified",isStatic:!1,annotations:[]}),new h({name:"setUserData",isStatic:!1,annotations:[]}),new h({name:"getUserData",isStatic:!1,annotations:[]})],consumedMembers:[]})),Object.freeze(r),Object.freeze(s),Object.freeze(a),Object.freeze(c),Object.freeze(l),Object.freeze(u),Object.freeze(d),Object.freeze(p),Object.freeze(h),Object.freeze(f),Object.freeze(m),Object.freeze(w),Object.freeze(y),Object.freeze(v),Object.freeze(g),Object.freeze(k),Object.freeze(O),Object.freeze(M),Object.freeze(S),e.N4Object=r,e.N4Element=s,e.N4NamedElement=a,e.N4Type=c,e.N4Classifier=l,e.N4Class=u,e.N4Interface=d,e.N4Member=p,e.N4Method=h,e.N4DataField=f,e.N4Accessor=m,e.N4EnumType=w,e.N4Enum=y,e.N4StringBasedEnumType=v,e.N4StringBasedEnum=g,e.N4Annotation=b,e.N4Provider=k,e.N4ApiNotImplementedError=O,e.MigrationController=M,e.MigrationContext=S}("object"==typeof e?e:self)}).call(this,n(2))},function(e,t,n){(function(e){!function(e){"use strict";var t=Array.prototype.slice,n=function(){};if("undefined"!=typeof __REACT_HOT_LOADER__){var o=Object.defineProperties.bind(Object),i=Object.defineProperty.bind(Object);Object.defineProperties=function(e,t){for(var n in t){var i=t[n];i.configurable=!0,i.value&&(i.writable=!0)}return o(e,t)},Object.defineProperty=function(e,t,n){return n.configurable=!0,n.value&&(n.writable=!0),i(e,t,n)}}function r(e){var t=e&&e.name;!t||t in this||e.isStatic||!e.jsFunction||(this[t]=e.jsFunction.value)}function s(e){var t=e&&e.n4type;t&&(t.ownedMembers.forEach(r,this),t.consumedMembers.forEach(r,this))}function a(e,t){return!!(e&&e.constructor&&e.constructor.n4type&&e.constructor.n4type.allImplementedInterfaces)&&-1!==e.constructor.n4type.allImplementedInterfaces.indexOf(t)}e.$makeClass=function(e,t,n,o,i,r){"function"==typeof t&&Object.setPrototypeOf(e,t),Object.defineProperties(e,i);var a=Object.create(t.prototype,o);n.forEach(s,a),Object.defineProperty(a,"constructor",{value:e});var c=r(a,e);Object.defineProperty(e,"n4type",{value:c}),e.prototype=a},e.$makeInterface=function(e,t){var n=t(e.$methods,e);Object.defineProperty(e,"n4type",{value:n})},e.$makeEnum=function(t,o,i,r){var s,a,c,l,u;for(Object.setPrototypeOf(t,e.N4Enum),t.prototype=Object.create(e.N4Enum.prototype,{}),Object.defineProperty(t,"n4type",{value:r(n)}),Object.defineProperty(t.prototype,"constructor",{value:t}),s=i.length,l=new Array(s),a=0;a<s;++a)u=new t((c=i[a])[0],c[1]),Object.defineProperty(t,u.name,{enumerable:!0,value:u}),l[a]=u;Object.defineProperty(t,"literals",{value:l})},e.$implements=a,e.$instanceof=function(e,t){switch(typeof e){case"object":case"function":if("object"==typeof t){var n=t.n4type||null;return a(e,n?n.fqn:"")}return e instanceof t}return!1},e.$sliceToArrayForDestruct=function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e)){for(var n,o=[],i=e[Symbol.iterator]();!((n=i.next()).done||(o.push(n.value),o.length>=t)););return o}throw new TypeError("Invalid attempt to destructure non-iterable instance")},e.$spawn=function(e){function t(e,t){var i;try{i=this[e](t)}catch(e){return Promise.reject(e)}return i.done?Promise.resolve(i.value):Promise.resolve(i.value).then(n,o)}var n=t.bind(e,"next"),o=t.bind(e,"throw");return n()},e.$n4promisifyFunction=function(e,n,o,i){return new Promise(function(r,s){n.push(function(e,n){i?r(o?t.call(arguments,0):e):e?s(e):r(o?t.call(arguments,1):n)}),e.apply(null,n)})},e.$n4promisifyMethod=function(e,n,o,i,r){return new Promise(function(s,a){o.push(function(e,n){r?s(i?t.call(arguments,0):e):e?a(e):s(i?t.call(arguments,1):n)}),e[n].apply(e,o)})}}("object"==typeof e?e:self)}).call(this,n(2))},function(e,t){function n(e){return Promise.resolve().then(function(){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t})}n.keys=function(){return[]},n.resolve=n,e.exports=n,n.id=7},function(e,t,n){"use strict"; |
| /** @license React v16.8.6 |
| * react.production.min.js |
| * |
| * Copyright (c) Facebook, Inc. and its affiliates. |
| * |
| * This source code is licensed under the MIT license found in the |
| * LICENSE file in the root directory of this source tree. |
| */var o=n(9),i="function"==typeof Symbol&&Symbol.for,r=i?Symbol.for("react.element"):60103,s=i?Symbol.for("react.portal"):60106,a=i?Symbol.for("react.fragment"):60107,c=i?Symbol.for("react.strict_mode"):60108,l=i?Symbol.for("react.profiler"):60114,u=i?Symbol.for("react.provider"):60109,d=i?Symbol.for("react.context"):60110,p=i?Symbol.for("react.concurrent_mode"):60111,h=i?Symbol.for("react.forward_ref"):60112,f=i?Symbol.for("react.suspense"):60113,m=i?Symbol.for("react.memo"):60115,w=i?Symbol.for("react.lazy"):60116,y="function"==typeof Symbol&&Symbol.iterator;function v(e){for(var t=arguments.length-1,n="https://reactjs.org/docs/error-decoder.html?invariant="+e,o=0;o<t;o++)n+="&args[]="+encodeURIComponent(arguments[o+1]);!function(e,t,n,o,i,r,s,a){if(!e){if(e=void 0,void 0===t)e=Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var c=[n,o,i,r,s,a],l=0;(e=Error(t.replace(/%s/g,function(){return c[l++]}))).name="Invariant Violation"}throw e.framesToPop=1,e}}(!1,"Minified React error #"+e+"; visit %s for the full message or use the non-minified dev environment for full errors and additional helpful warnings. ",n)}var g={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},b={};function k(e,t,n){this.props=e,this.context=t,this.refs=b,this.updater=n||g}function O(){}function M(e,t,n){this.props=e,this.context=t,this.refs=b,this.updater=n||g}k.prototype.isReactComponent={},k.prototype.setState=function(e,t){"object"!=typeof e&&"function"!=typeof e&&null!=e&&v("85"),this.updater.enqueueSetState(this,e,t,"setState")},k.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},O.prototype=k.prototype;var S=M.prototype=new O;S.constructor=M,o(S,k.prototype),S.isPureReactComponent=!0;var P={current:null},j={current:null},N=Object.prototype.hasOwnProperty,I={key:!0,ref:!0,__self:!0,__source:!0};function C(e,t,n){var o=void 0,i={},s=null,a=null;if(null!=t)for(o in void 0!==t.ref&&(a=t.ref),void 0!==t.key&&(s=""+t.key),t)N.call(t,o)&&!I.hasOwnProperty(o)&&(i[o]=t[o]);var c=arguments.length-2;if(1===c)i.children=n;else if(1<c){for(var l=Array(c),u=0;u<c;u++)l[u]=arguments[u+2];i.children=l}if(e&&e.defaultProps)for(o in c=e.defaultProps)void 0===i[o]&&(i[o]=c[o]);return{$$typeof:r,type:e,key:s,ref:a,props:i,_owner:j.current}}function D(e){return"object"==typeof e&&null!==e&&e.$$typeof===r}var q=/\/+/g,A=[];function B(e,t,n,o){if(A.length){var i=A.pop();return i.result=e,i.keyPrefix=t,i.func=n,i.context=o,i.count=0,i}return{result:e,keyPrefix:t,func:n,context:o,count:0}}function E(e){e.result=null,e.keyPrefix=null,e.func=null,e.context=null,e.count=0,10>A.length&&A.push(e)}function F(e,t,n){return null==e?0:function e(t,n,o,i){var a=typeof t;"undefined"!==a&&"boolean"!==a||(t=null);var c=!1;if(null===t)c=!0;else switch(a){case"string":case"number":c=!0;break;case"object":switch(t.$$typeof){case r:case s:c=!0}}if(c)return o(i,t,""===n?"."+R(t,0):n),1;if(c=0,n=""===n?".":n+":",Array.isArray(t))for(var l=0;l<t.length;l++){var u=n+R(a=t[l],l);c+=e(a,u,o,i)}else if(u=null===t||"object"!=typeof t?null:"function"==typeof(u=y&&t[y]||t["@@iterator"])?u:null,"function"==typeof u)for(t=u.call(t),l=0;!(a=t.next()).done;)c+=e(a=a.value,u=n+R(a,l++),o,i);else"object"===a&&v("31","[object Object]"==(o=""+t)?"object with keys {"+Object.keys(t).join(", ")+"}":o,"");return c}(e,"",t,n)}function R(e,t){return"object"==typeof e&&null!==e&&null!=e.key?function(e){var t={"=":"=0",":":"=2"};return"$"+(""+e).replace(/[=:]/g,function(e){return t[e]})}(e.key):t.toString(36)}function x(e,t){e.func.call(e.context,t,e.count++)}function _(e,t,n){var o=e.result,i=e.keyPrefix;e=e.func.call(e.context,t,e.count++),Array.isArray(e)?W(e,o,n,function(e){return e}):null!=e&&(D(e)&&(e=function(e,t){return{$$typeof:r,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(e,i+(!e.key||t&&t.key===e.key?"":(""+e.key).replace(q,"$&/")+"/")+n)),o.push(e))}function W(e,t,n,o,i){var r="";null!=n&&(r=(""+n).replace(q,"$&/")+"/"),F(e,_,t=B(t,r,o,i)),E(t)}function T(){var e=P.current;return null===e&&v("321"),e}var $={Children:{map:function(e,t,n){if(null==e)return e;var o=[];return W(e,o,null,t,n),o},forEach:function(e,t,n){if(null==e)return e;F(e,x,t=B(null,null,t,n)),E(t)},count:function(e){return F(e,function(){return null},null)},toArray:function(e){var t=[];return W(e,t,null,function(e){return e}),t},only:function(e){return D(e)||v("143"),e}},createRef:function(){return{current:null}},Component:k,PureComponent:M,createContext:function(e,t){return void 0===t&&(t=null),(e={$$typeof:d,_calculateChangedBits:t,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null}).Provider={$$typeof:u,_context:e},e.Consumer=e},forwardRef:function(e){return{$$typeof:h,render:e}},lazy:function(e){return{$$typeof:w,_ctor:e,_status:-1,_result:null}},memo:function(e,t){return{$$typeof:m,type:e,compare:void 0===t?null:t}},useCallback:function(e,t){return T().useCallback(e,t)},useContext:function(e,t){return T().useContext(e,t)},useEffect:function(e,t){return T().useEffect(e,t)},useImperativeHandle:function(e,t,n){return T().useImperativeHandle(e,t,n)},useDebugValue:function(){},useLayoutEffect:function(e,t){return T().useLayoutEffect(e,t)},useMemo:function(e,t){return T().useMemo(e,t)},useReducer:function(e,t,n){return T().useReducer(e,t,n)},useRef:function(e){return T().useRef(e)},useState:function(e){return T().useState(e)},Fragment:a,StrictMode:c,Suspense:f,createElement:C,cloneElement:function(e,t,n){null==e&&v("267",e);var i=void 0,s=o({},e.props),a=e.key,c=e.ref,l=e._owner;if(null!=t){void 0!==t.ref&&(c=t.ref,l=j.current),void 0!==t.key&&(a=""+t.key);var u=void 0;for(i in e.type&&e.type.defaultProps&&(u=e.type.defaultProps),t)N.call(t,i)&&!I.hasOwnProperty(i)&&(s[i]=void 0===t[i]&&void 0!==u?u[i]:t[i])}if(1===(i=arguments.length-2))s.children=n;else if(1<i){u=Array(i);for(var d=0;d<i;d++)u[d]=arguments[d+2];s.children=u}return{$$typeof:r,type:e.type,key:a,ref:c,props:s,_owner:l}},createFactory:function(e){var t=C.bind(null,e);return t.type=e,t},isValidElement:D,version:"16.8.6",unstable_ConcurrentMode:p,unstable_Profiler:l,__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:{ReactCurrentDispatcher:P,ReactCurrentOwner:j,assign:o}},K={default:$},V=K&&$||K;e.exports=V.default||V},function(e,t,n){"use strict"; |
| /* |
| object-assign |
| (c) Sindre Sorhus |
| @license MIT |
| */var o=Object.getOwnPropertySymbols,i=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map(function(e){return t[e]}).join(""))return!1;var o={};return"abcdefghijklmnopqrst".split("").forEach(function(e){o[e]=e}),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},o)).join("")}catch(e){return!1}}()?Object.assign:function(e,t){for(var n,s,a=function(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}(e),c=1;c<arguments.length;c++){for(var l in n=Object(arguments[c]))i.call(n,l)&&(a[l]=n[l]);if(o){s=o(n);for(var u=0;u<s.length;u++)r.call(n,s[u])&&(a[s[u]]=n[s[u]])}}return a}},function(e,t,n){"use strict";n.r(t);n(1);var o=n(3);function i(e){this.row=e&&"row"in e?e.row:void 0,this.col=e&&"col"in e?e.col:void 0}function r(e){this.piece=e&&"piece"in e?e.piece:void 0,this.fromPos=e&&"fromPos"in e?e.fromPos:void 0,this.toPos=e&&"toPos"in e?e.toPos:void 0}$makeClass(i,N4Object,[],{equals:{value:function(e){return this.row==e.row&&this.col==e.col}},getBoardCoordinateRepresentation:{value:function(){return`(${8-this.row+","+String.fromCharCode("a".charCodeAt(0)+this.col)})`}},toString:{value:function(){return`(${this.row},${this.col})`}},row:{value:void 0,writable:!0},col:{value:void 0,writable:!0}},{},function(e,t){return new N4Class({name:"Coordinate",origin:"chess-react",fqn:"Coordinate.Coordinate",n4superType:N4Object.n4type,allImplementedInterfaces:[],ownedMembers:[new N4DataField({name:"row",isStatic:!1,annotations:[]}),new N4DataField({name:"col",isStatic:!1,annotations:[]}),new N4Method({name:"constructor",isStatic:!1,jsFunction:e.constructor,annotations:[]}),new N4Method({name:"equals",isStatic:!1,jsFunction:e.equals,annotations:[]}),new N4Method({name:"getBoardCoordinateRepresentation",isStatic:!1,jsFunction:e.getBoardCoordinateRepresentation,annotations:[]}),new N4Method({name:"toString",isStatic:!1,jsFunction:e.toString,annotations:[]})],consumedMembers:[],annotations:[]})}),$makeClass(r,N4Object,[],{toString:{value:function(){return this.piece+" "+this.fromPos.getBoardCoordinateRepresentation()+"→"+this.toPos.getBoardCoordinateRepresentation()}},piece:{value:void 0,writable:!0},fromPos:{value:void 0,writable:!0},toPos:{value:void 0,writable:!0}},{},function(e,t){return new N4Class({name:"Move",origin:"chess-react",fqn:"Move.Move",n4superType:N4Object.n4type,allImplementedInterfaces:[],ownedMembers:[new N4DataField({name:"piece",isStatic:!1,annotations:[]}),new N4DataField({name:"fromPos",isStatic:!1,annotations:[]}),new N4DataField({name:"toPos",isStatic:!1,annotations:[]}),new N4Method({name:"constructor",isStatic:!1,jsFunction:e.constructor,annotations:[]}),new N4Method({name:"toString",isStatic:!1,jsFunction:e.toString,annotations:[]})],consumedMembers:[],annotations:[]})});var s=n(0),a={$fieldInit:function(e,t){e?t.hasOwnProperty("label")||this.hasOwnProperty("label")||(this.label="label"in e?e.label:void 0):t.hasOwnProperty("label")||this.hasOwnProperty("label")||(this.label=void 0)},$methods:{}};$makeInterface(a,function(e,t){return new N4Interface({name:"CoordinateSquareProps",origin:"chess-react",fqn:"components.CoordinateSquare.CoordinateSquareProps",n4superType:void 0,allImplementedInterfaces:[],ownedMembers:[new N4DataField({name:"label",isStatic:!1,annotations:[]})],consumedMembers:[],annotations:[]})});const c={fontSize:"2vw",textAlign:"center",display:"flex",justifyContent:"center",alignItems:"center",width:"100%",height:"100%"};function l(e){s.Component.prototype.constructor.call(this,e)}$makeClass(l,s.Component,[],{render:{value:function(){return s.createElement("div",Object.assign({style:c}),this.props.label)}}},{},function(e,t){return new N4Class({name:"LabelSquare",origin:"chess-react",fqn:"components.CoordinateSquare.LabelSquare",n4superType:void 0,allImplementedInterfaces:[],ownedMembers:[new N4Method({name:"render",isStatic:!1,jsFunction:e.render,annotations:[]})],consumedMembers:[],annotations:[]})}),Object.defineProperty(l,"$di",{value:{superType:s.Component,fieldsInjectedTypes:[]}});var u={$fieldInit:function(e,t){e?(t.hasOwnProperty("isWhite")||this.hasOwnProperty("isWhite")||(this.isWhite="isWhite"in e?e.isWhite:void 0),t.hasOwnProperty("piece")||this.hasOwnProperty("piece")||(this.piece="piece"in e?e.piece:void 0),t.hasOwnProperty("onClick")||this.hasOwnProperty("onClick")||(this.onClick="onClick"in e?e.onClick:void 0),t.hasOwnProperty("isPicked")||this.hasOwnProperty("isPicked")||(this.isPicked="isPicked"in e?e.isPicked:void 0),t.hasOwnProperty("isValidDestination")||this.hasOwnProperty("isValidDestination")||(this.isValidDestination="isValidDestination"in e?e.isValidDestination:void 0)):(t.hasOwnProperty("isWhite")||this.hasOwnProperty("isWhite")||(this.isWhite=void 0),t.hasOwnProperty("piece")||this.hasOwnProperty("piece")||(this.piece=void 0),t.hasOwnProperty("onClick")||this.hasOwnProperty("onClick")||(this.onClick=void 0),t.hasOwnProperty("isPicked")||this.hasOwnProperty("isPicked")||(this.isPicked=void 0),t.hasOwnProperty("isValidDestination")||this.hasOwnProperty("isValidDestination")||(this.isValidDestination=void 0))},$methods:{}};$makeInterface(u,function(e,t){return new N4Interface({name:"SquareProps",origin:"chess-react",fqn:"components.Square.SquareProps",n4superType:void 0,allImplementedInterfaces:[],ownedMembers:[new N4DataField({name:"isWhite",isStatic:!1,annotations:[]}),new N4DataField({name:"piece",isStatic:!1,annotations:[]}),new N4DataField({name:"onClick",isStatic:!1,annotations:[]}),new N4DataField({name:"isPicked",isStatic:!1,annotations:[]}),new N4DataField({name:"isValidDestination",isStatic:!1,annotations:[]})],consumedMembers:[],annotations:[]})});const d={display:"flex",justifyContent:"center",alignItems:"center",width:"100%",height:"100%",fontSize:"5vw"};function p(e){let t=e.isWhite?"#EADAB9":"#C2A482";return e.isPicked?t="lime":e.isValidDestination&&(t="yellow"),s.createElement("div",Object.assign({style:Object.assign({},d,{backgroundColor:t}),onClick:e.onClick}),e.piece)}var h={$fieldInit:function(e,t){e?(t.hasOwnProperty("squares")||this.hasOwnProperty("squares")||(this.squares="squares"in e?e.squares:void 0),t.hasOwnProperty("pickedSquare")||this.hasOwnProperty("pickedSquare")||(this.pickedSquare="pickedSquare"in e?e.pickedSquare:void 0),t.hasOwnProperty("validDestinations")||this.hasOwnProperty("validDestinations")||(this.validDestinations="validDestinations"in e?e.validDestinations:void 0),t.hasOwnProperty("onClick")||this.hasOwnProperty("onClick")||(this.onClick="onClick"in e?e.onClick:void 0)):(t.hasOwnProperty("squares")||this.hasOwnProperty("squares")||(this.squares=void 0),t.hasOwnProperty("pickedSquare")||this.hasOwnProperty("pickedSquare")||(this.pickedSquare=void 0),t.hasOwnProperty("validDestinations")||this.hasOwnProperty("validDestinations")||(this.validDestinations=void 0),t.hasOwnProperty("onClick")||this.hasOwnProperty("onClick")||(this.onClick=void 0))},$methods:{}};$makeInterface(h,function(e,t){return new N4Interface({name:"BoardProps",origin:"chess-react",fqn:"components.Board.BoardProps",n4superType:void 0,allImplementedInterfaces:[],ownedMembers:[new N4DataField({name:"squares",isStatic:!1,annotations:[]}),new N4DataField({name:"pickedSquare",isStatic:!1,annotations:[]}),new N4DataField({name:"validDestinations",isStatic:!1,annotations:[]}),new N4DataField({name:"onClick",isStatic:!1,annotations:[]})],consumedMembers:[],annotations:[]})});const f={display:"flex",flexWrap:"wrap",width:"100%",height:"100%"},m={width:"10%",height:"10%"};function w(e){s.Component.prototype.constructor.call(this,e)}$makeClass(w,s.Component,[],{renderSquare:{value:function(e,t,n,o,i){return s.createElement("div",Object.assign({style:m}),s.createElement(p,Object.assign({isWhite:t,isPicked:n,isValidDestination:o,piece:i,onClick:()=>this.props.onClick(e)})))}},renderCoordinateSquare:{value:function(e){return s.createElement("div",Object.assign({style:m}),s.createElement(l,Object.assign({label:e})))}},renderSquares:{value:function(){const e=new Array;let t=!0;e.push(this.renderCoordinateSquare(""));for(let t=0;t<8;t++)e.push(this.renderCoordinateSquare(String.fromCharCode("a".charCodeAt(0)+t)));e.push(this.renderCoordinateSquare(""));for(let n=0;n<8;n++){e.push(this.renderCoordinateSquare((8-n).toString()));let o=t;for(let t=0;t<8;t++){const r=new i({row:n,col:t}),s=this.props.validDestinations.findIndex(e=>e.equals(r))>=0;e.push(this.renderSquare(r,o,!(!this.props.pickedSquare||!this.props.pickedSquare.equals(r)),s,this.props.squares[r.row][r.col])),o=!o}t=!t,e.push(this.renderCoordinateSquare((8-n).toString()))}e.push(this.renderCoordinateSquare(""));for(let t=0;t<8;t++)e.push(this.renderCoordinateSquare(String.fromCharCode("a".charCodeAt(0)+t)));return e.push(this.renderCoordinateSquare("")),e}},render:{value:function(){return s.createElement("div",Object.assign({style:f}),this.renderSquares())}}},{},function(e,t){return new N4Class({name:"Board",origin:"chess-react",fqn:"components.Board.Board",n4superType:void 0,allImplementedInterfaces:[],ownedMembers:[new N4Method({name:"renderSquare",isStatic:!1,jsFunction:e.renderSquare,annotations:[]}),new N4Method({name:"renderCoordinateSquare",isStatic:!1,jsFunction:e.renderCoordinateSquare,annotations:[]}),new N4Method({name:"renderSquares",isStatic:!1,jsFunction:e.renderSquares,annotations:[]}),new N4Method({name:"render",isStatic:!1,jsFunction:e.render,annotations:[]})],consumedMembers:[],annotations:[]})}),Object.defineProperty(w,"$di",{value:{superType:s.Component,fieldsInjectedTypes:[]}});var y={$fieldInit:function(e,t){e?(t.hasOwnProperty("squares")||this.hasOwnProperty("squares")||(this.squares="squares"in e?e.squares:void 0),t.hasOwnProperty("lastMoves")||this.hasOwnProperty("lastMoves")||(this.lastMoves="lastMoves"in e?e.lastMoves:void 0),t.hasOwnProperty("whiteKingMoved")||this.hasOwnProperty("whiteKingMoved")||(this.whiteKingMoved="whiteKingMoved"in e?e.whiteKingMoved:void 0),t.hasOwnProperty("leftWhiteRookMoved")||this.hasOwnProperty("leftWhiteRookMoved")||(this.leftWhiteRookMoved="leftWhiteRookMoved"in e?e.leftWhiteRookMoved:void 0),t.hasOwnProperty("rightWhiteRookMoved")||this.hasOwnProperty("rightWhiteRookMoved")||(this.rightWhiteRookMoved="rightWhiteRookMoved"in e?e.rightWhiteRookMoved:void 0),t.hasOwnProperty("blackKingMoved")||this.hasOwnProperty("blackKingMoved")||(this.blackKingMoved="blackKingMoved"in e?e.blackKingMoved:void 0),t.hasOwnProperty("leftBlackRookMoved")||this.hasOwnProperty("leftBlackRookMoved")||(this.leftBlackRookMoved="leftBlackRookMoved"in e?e.leftBlackRookMoved:void 0),t.hasOwnProperty("rightBlackRookMoved")||this.hasOwnProperty("rightBlackRookMoved")||(this.rightBlackRookMoved="rightBlackRookMoved"in e?e.rightBlackRookMoved:void 0)):(t.hasOwnProperty("squares")||this.hasOwnProperty("squares")||(this.squares=void 0),t.hasOwnProperty("lastMoves")||this.hasOwnProperty("lastMoves")||(this.lastMoves=void 0),t.hasOwnProperty("whiteKingMoved")||this.hasOwnProperty("whiteKingMoved")||(this.whiteKingMoved=void 0),t.hasOwnProperty("leftWhiteRookMoved")||this.hasOwnProperty("leftWhiteRookMoved")||(this.leftWhiteRookMoved=void 0),t.hasOwnProperty("rightWhiteRookMoved")||this.hasOwnProperty("rightWhiteRookMoved")||(this.rightWhiteRookMoved=void 0),t.hasOwnProperty("blackKingMoved")||this.hasOwnProperty("blackKingMoved")||(this.blackKingMoved=void 0),t.hasOwnProperty("leftBlackRookMoved")||this.hasOwnProperty("leftBlackRookMoved")||(this.leftBlackRookMoved=void 0),t.hasOwnProperty("rightBlackRookMoved")||this.hasOwnProperty("rightBlackRookMoved")||(this.rightBlackRookMoved=void 0))},$methods:{}};$makeInterface(y,function(e,t){return new N4Interface({name:"Snapshot",origin:"chess-react",fqn:"components.Game.Snapshot",n4superType:void 0,allImplementedInterfaces:[],ownedMembers:[new N4DataField({name:"squares",isStatic:!1,annotations:[]}),new N4DataField({name:"lastMoves",isStatic:!1,annotations:[]}),new N4DataField({name:"whiteKingMoved",isStatic:!1,annotations:[]}),new N4DataField({name:"leftWhiteRookMoved",isStatic:!1,annotations:[]}),new N4DataField({name:"rightWhiteRookMoved",isStatic:!1,annotations:[]}),new N4DataField({name:"blackKingMoved",isStatic:!1,annotations:[]}),new N4DataField({name:"leftBlackRookMoved",isStatic:!1,annotations:[]}),new N4DataField({name:"rightBlackRookMoved",isStatic:!1,annotations:[]})],consumedMembers:[],annotations:[]})});var v={};function g(e){s.Component.prototype.constructor.call(this,e);this.state={history:[{squares:[["♖","♘","♗","♕","♔","♗","♘","♖"],["♙","♙","♙","♙","♙","♙","♙","♙"],[null,null,null,null,null,null,null,null],[null,null,null,null,null,null,null,null],[null,null,null,null,null,null,null,null],[null,null,null,null,null,null,null,null],["♟","♟","♟","♟","♟","♟","♟","♟"],["♜","♞","♝","♛","♚","♝","♞","♜"]],lastMoves:new Array,whiteKingMoved:!1,leftWhiteRookMoved:!1,rightWhiteRookMoved:!1,blackKingMoved:!1,leftBlackRookMoved:!1,rightBlackRookMoved:!1}],stepNumber:0,whiteIsNext:!0,pickedSquare:null,validDestinations:new Array}}v.$fieldInit=function(e,t){e?(t.hasOwnProperty("history")||this.hasOwnProperty("history")||(this.history="history"in e?e.history:void 0),t.hasOwnProperty("stepNumber")||this.hasOwnProperty("stepNumber")||(this.stepNumber="stepNumber"in e?e.stepNumber:void 0),t.hasOwnProperty("whiteIsNext")||this.hasOwnProperty("whiteIsNext")||(this.whiteIsNext="whiteIsNext"in e?e.whiteIsNext:void 0),t.hasOwnProperty("pickedSquare")||this.hasOwnProperty("pickedSquare")||(this.pickedSquare="pickedSquare"in e?e.pickedSquare:void 0),t.hasOwnProperty("validDestinations")||this.hasOwnProperty("validDestinations")||(this.validDestinations="validDestinations"in e?e.validDestinations:void 0)):(t.hasOwnProperty("history")||this.hasOwnProperty("history")||(this.history=void 0),t.hasOwnProperty("stepNumber")||this.hasOwnProperty("stepNumber")||(this.stepNumber=void 0),t.hasOwnProperty("whiteIsNext")||this.hasOwnProperty("whiteIsNext")||(this.whiteIsNext=void 0),t.hasOwnProperty("pickedSquare")||this.hasOwnProperty("pickedSquare")||(this.pickedSquare=void 0),t.hasOwnProperty("validDestinations")||this.hasOwnProperty("validDestinations")||(this.validDestinations=void 0))},v.$methods={},$makeInterface(v,function(e,t){return new N4Interface({name:"GameState",origin:"chess-react",fqn:"components.Game.GameState",n4superType:void 0,allImplementedInterfaces:[],ownedMembers:[new N4DataField({name:"history",isStatic:!1,annotations:[]}),new N4DataField({name:"stepNumber",isStatic:!1,annotations:[]}),new N4DataField({name:"whiteIsNext",isStatic:!1,annotations:[]}),new N4DataField({name:"pickedSquare",isStatic:!1,annotations:[]}),new N4DataField({name:"validDestinations",isStatic:!1,annotations:[]})],consumedMembers:[],annotations:[]})}),$makeClass(g,s.Component,[],{handleClick:{value:function(e){const t=e.row,n=e.col,o=this.state.history.slice(0,this.state.stepNumber+1),i=o[o.length-1],s=this.state.pickedSquare;let a=i.squares;if(this.calculateWinner(a))return;const c=a[t][n];if(this.isWhitepiece(c)&&this.state.whiteIsNext||this.isBlackpiece(c)&&!this.state.whiteIsNext){const t=this.calculateValidDestinations(a,c,e);return void this.setState({pickedSquare:e,validDestinations:t})}if(!s)return;const l=new r({piece:a[s.row][s.col],fromPos:s,toPos:e});if(this.isValidMove(a,l)){const{squares:e,moves:t}=this.move(l);let n=i.whiteKingMoved,r=i.leftWhiteRookMoved,a=i.rightWhiteRookMoved,c=i.blackKingMoved,u=i.leftBlackRookMoved,d=i.rightBlackRookMoved;this.isWhitepiece(l.piece)?(n=n||"♔"==l.piece,r=r||"♖"==l.piece&&0==s.col,a=a||"♖"==l.piece&&7==s.col):(c=c||"♚"==l.piece,u=u||"♜"==l.piece&&0==s.col,d=d||"♜"==l.piece&&7==s.col),this.setState({history:o.concat([{squares:e,lastMoves:t,whiteKingMoved:n,leftWhiteRookMoved:r,rightWhiteRookMoved:a,blackKingMoved:c,leftBlackRookMoved:u,rightBlackRookMoved:d}]),stepNumber:o.length,whiteIsNext:!this.state.whiteIsNext,pickedSquare:null,validDestinations:new Array})}else this.setState({pickedSquare:null,validDestinations:new Array})}},goToStep:{value:function(e){this.setState({stepNumber:e,whiteIsNext:e%2==0,pickedSquare:null,validDestinations:new Array})}},getAllPiecesSameColor:{value:function(e,t){const n=new Array;for(let o=0;o<8;o++)for(let r=0;r<8;r++)(t&&this.isWhitepiece(e[o][r])||!t&&this.isBlackpiece(e[o][r]))&&n.push({piece:e[o][r],pos:new i({row:o,col:r})});return n}},forAll:{value:function(e,t){return e.reduce((e,n)=>e&&t(n),!0)}},calculateWinner:{value:function(e){const t=this.state.whiteIsNext,n=this.getAllPiecesSameColor(e,t);return this.forAll(n,t=>0==this.calculateValidDestinations(e,t.piece,t.pos).length)?t?"Black":"White":null}},calculateValidDestinations:{value:function(e,t,n){const o=this.calculateAttackedDestinations(e,t,n),s=this.isWhitepiece(t);if("♙"==t||"♟"==t)if(s&&n.row<7){const t=new i({row:n.row+1,col:n.col});if(e[t.row][t.col]||o.push(t),n.row<=1){const r=new i({row:n.row+2,col:n.col});e[t.row][t.col]||e[r.row][r.col]||o.push(r)}}else if(!s&&n.row>0){const t=new i({row:n.row-1,col:n.col});if(e[t.row][t.col]||o.push(t),n.row>=6){const r=new i({row:n.row-2,col:n.col});e[t.row][t.col]||e[r.row][r.col]||o.push(r)}}const a=this.state.history[this.state.stepNumber];return"♔"==t&&s&&!a.whiteKingMoved?(a.leftWhiteRookMoved||e[n.row][n.col-1]||e[n.row][n.col-2]||e[n.row][n.col-3]||o.push(new i({row:n.row,col:n.col-2})),a.rightWhiteRookMoved||e[n.row][n.col+1]||e[n.row][n.col+2]||o.push(new i({row:n.row,col:n.col+2}))):"♚"!=t||s||a.blackKingMoved||(a.leftBlackRookMoved||e[n.row][n.col-1]||e[n.row][n.col-2]||e[n.row][n.col-3]||o.push(new i({row:n.row,col:n.col-2})),a.rightBlackRookMoved||e[n.row][n.col+1]||e[n.row][n.col+2]||o.push(new i({row:n.row,col:n.col+2}))),o.filter(e=>!this.isKingInCheckIfMove(new r({piece:t,fromPos:n,toPos:e})))}},isValidMove:{value:function(e,t){return this.calculateValidDestinations(e,t.piece,t.fromPos).findIndex(e=>e.equals(t.toPos))>=0}},isInsideBoard:{value:function(e){return 0<=e.row&&e.row<8&&0<=e.col&&e.col<8}},calculateKnightAttackingDestinations:{value:function(e,t,n){return[[-1,-2],[-2,-1],[-2,1],[-1,2],[1,2],[2,1],[2,-1],[1,-2]].map(e=>new i({row:n.row+e[0],col:n.col+e[1]})).filter(n=>this.isInsideBoard(n)&&!this.isPositionOccupiedBypieceSameColor(e,t,n))}},calculateRookAttackingDestinations:{value:function(e,t,n){const o=n.row,r=n.col,s=new Array,a=[[-1,0],[1,0],[0,-1],[0,1]];for(let n of a){let a=new i({row:o+n[0],col:r+n[1]});for(;this.isInsideBoard(a);){if(e[a.row][a.col]){if(this.isPositionOccupiedBypieceSameColor(e,t,a))break;if(this.isPositionOccupiedBypieceOtherColor(e,t,a)){s.push(a);break}}else s.push(a);a=new i({row:a.row+n[0],col:a.col+n[1]})}}return s}},calculateBishopAttackingDestinations:{value:function(e,t,n){const o=n.row,r=n.col,s=new Array,a=[[-1,-1],[-1,1],[1,1],[1,-1]];for(let n of a){let a=new i({row:o+n[0],col:r+n[1]});for(;this.isInsideBoard(a);){if(e[a.row][a.col]){if(this.isPositionOccupiedBypieceSameColor(e,t,a))break;if(this.isPositionOccupiedBypieceOtherColor(e,t,a)){s.push(a);break}}else s.push(a);a=new i({row:a.row+n[0],col:a.col+n[1]})}}return s}},calculateQueenAttackingDestinations:{value:function(e,t,n){return this.isWhitepiece(t)?this.calculateRookAttackingDestinations(e,"♖",n).concat(this.calculateBishopAttackingDestinations(e,"♗",n)):this.calculateRookAttackingDestinations(e,"♜",n).concat(this.calculateBishopAttackingDestinations(e,"♝",n))}},calculateKingAttackingDestinations:{value:function(e,t,n){return[[-1,-1],[-1,0],[-1,1],[0,1],[1,1],[1,0],[1,-1],[0,-1]].map(e=>new i({row:n.row+e[0],col:n.col+e[1]})).filter(n=>this.isInsideBoard(n)&&!this.isPositionOccupiedBypieceSameColor(e,t,n))}},calculatePawnAttackingDestinations:{value:function(e,t,n){const o=new Array,r=this.isWhitepiece(t);if(r&&n.row<7)for(let r of[1,-1]){const s=new i({row:n.row+1,col:n.col+r});this.isInsideBoard(s)&&this.isPositionOccupiedBypieceOtherColor(e,t,s)&&o.push(s)}else if(!r&&n.row>0)for(let r of[1,-1]){const s=new i({row:n.row-1,col:n.col+r});this.isInsideBoard(s)&&this.isPositionOccupiedBypieceOtherColor(e,t,s)&&o.push(s)}return o}},calculateAttackedDestinations:{value:function(e,t,n){let o=new Array;switch(t){case"♘":case"♞":o=this.calculateKnightAttackingDestinations(e,t,n);break;case"♖":case"♜":o=this.calculateRookAttackingDestinations(e,t,n);break;case"♗":case"♝":o=this.calculateBishopAttackingDestinations(e,t,n);break;case"♕":case"♛":o=this.calculateQueenAttackingDestinations(e,t,n);break;case"♔":case"♚":o=this.calculateKingAttackingDestinations(e,t,n);break;case"♔":case"♚":o=this.calculateKingAttackingDestinations(e,t,n);break;case"♙":case"♟":o=this.calculatePawnAttackingDestinations(e,t,n)}return o}},isKingInCheckIfMove:{value:function(e){const{squares:t}=this.move(e),n=this.isWhitepiece(e.piece),o=this.getKingPosition(t,n);return!!o&&this.isKingInCheck(t,n?"♔":"♚",o)}},isKingInCheck:{value:function(e,t,n){if("♔"!=t&&"♚"!=t)throw"The input piece is not a king";const o="♔"==t?this.getPiecesOfSameColor(e,!1):this.getPiecesOfSameColor(e,!0);let i=new Array;for(let t of o){const n=this.calculateAttackedDestinations(e,t.piece,t.pos);i=i.concat(n)}return!!i.find(e=>e.equals(n))}},getPiecesOfSameColor:{value:function(e,t){const n=new Array;for(let o=0;o<e.length;o++)for(let r=0;r<e[o].length;r++)(t?this.isWhitepiece(e[o][r]):this.isBlackpiece(e[o][r]))&&n.push({piece:e[o][r],pos:new i({row:o,col:r})});return n}},getKingPosition:{value:function(e,t){for(let n=0;n<e.length;n++)for(let o=0;o<e[n].length;o++)if(t?"♔"==e[n][o]:"♚"==e[n][o])return new i({row:n,col:o});return null}},isPositionOccupiedBypieceSameColor:{value:function(e,t,n){const o=this.isWhitepiece(t);return!(!o||!this.isWhitepiece(e[n.row][n.col]))||!(o||!this.isBlackpiece(e[n.row][n.col]))}},isPositionOccupiedBypieceOtherColor:{value:function(e,t,n){const o=this.isWhitepiece(t);return!(!o||!this.isBlackpiece(e[n.row][n.col]))||!(o||!this.isWhitepiece(e[n.row][n.col]))}},getCurrentSnapshot:{value:function(){return this.state.history[this.state.stepNumber]}},move:{value:function(e){const t=e.piece,n=e.fromPos,o=e.toPos,s=this.getCurrentSnapshot().squares,a=s.map(e=>e.slice()),c=new Array;if(this.isCastlingMove(t,n,o)){let e,l;c.push(new r({piece:t,fromPos:new i({row:n.row,col:n.col}),toPos:new i({row:o.row,col:o.col})})),a[o.row][o.col]=t,a[n.row][n.col]=null,"♔"==t?o.col<n.col?(e=new i({row:0,col:0}),l=new i({row:0,col:3})):(e=new i({row:0,col:7}),l=new i({row:0,col:5})):o.col<n.col?(e=new i({row:7,col:0}),l=new i({row:7,col:3})):(e=new i({row:7,col:7}),l=new i({row:7,col:5})),c.push(new r({piece:s[e.row][e.col],fromPos:e,toPos:l})),a[l.row][l.col]=s[e.row][e.col],a[e.row][e.col]=null}else{const t=s[n.row][n.col];a[o.row][o.col]=t,a[n.row][n.col]=null,c.push(e)}return{squares:a,moves:c}}},isCastlingMove:{value:function(e,t,n){const o=this.getCurrentSnapshot();return"♔"==e&&!o.whiteKingMoved&&2==Math.abs(n.col-t.col)||"♚"==e&&!o.blackKingMoved&&2==Math.abs(n.col-t.col)}},isLeftWhiteRook:{value:function(e,t){return"♖"==e&&0==t.row&&0==t.col}},isWhitepiece:{value:function(e){switch(e){case"♙":case"♖":case"♘":case"♗":case"♕":case"♔":return!0;default:return!1}}},isBlackpiece:{value:function(e){switch(e){case"♟":case"♜":case"♞":case"♝":case"♛":case"♚":return!0;default:return!1}}},render:{value:function(){const e=this.state.history,t=e[this.state.stepNumber],n=this.calculateWinner(t.squares),o=e.map((e,t)=>{const n=t?"Go to move #"+t:"Go to game start",o={textAlign:"center",verticalAlign:"middle",padding:"5px",position:"relative"};return s.createElement(s.Fragment,null,s.createElement("tr",null,s.createElement("td",Object.assign({style:o}),t),s.createElement("td",Object.assign({style:o}),e.lastMoves.join(",")),s.createElement("td",Object.assign({style:o}),s.createElement("button",Object.assign({style:{backgroundColor:"green",border:"none",color:"white",padding:"4px",textAlign:"center",textDecoration:"none",display:"inline-block"},onClick:()=>this.goToStep(t)}),n))))});let i;i=n?"Winner: "+n:"Next player: "+(this.state.whiteIsNext?"White":"Black");return s.createElement("div",Object.assign({style:{display:"flex",flexDirection:"row"}}),s.createElement("div",Object.assign({style:{width:"60vw",height:"60vw"}}),s.createElement(w,Object.assign({squares:t.squares,pickedSquare:this.state.pickedSquare,validDestinations:this.state.validDestinations,onClick:e=>this.handleClick(e)}))),s.createElement("div",Object.assign({style:{marginTop:"20px",marginLeft:"20px",width:"40vw",fontSize:"1.5vw"}}),s.createElement("div",null,i),s.createElement("p",null),s.createElement("table",Object.assign({style:{width:"100%"}}),s.createElement("tr",null,s.createElement("th",Object.assign({style:{width:"10%"}}),"Step"),s.createElement("th",Object.assign({style:{width:"45%"}}),"Move"),s.createElement("th",Object.assign({style:{width:"45%"}}),"Action")),o)))}}},{},function(e,t){return new N4Class({name:"Game",origin:"chess-react",fqn:"components.Game.Game",n4superType:void 0,allImplementedInterfaces:[],ownedMembers:[new N4Method({name:"constructor",isStatic:!1,jsFunction:e.constructor,annotations:[]}),new N4Method({name:"handleClick",isStatic:!1,jsFunction:e.handleClick,annotations:[]}),new N4Method({name:"goToStep",isStatic:!1,jsFunction:e.goToStep,annotations:[]}),new N4Method({name:"getAllPiecesSameColor",isStatic:!1,jsFunction:e.getAllPiecesSameColor,annotations:[]}),new N4Method({name:"forAll",isStatic:!1,jsFunction:e.forAll,annotations:[]}),new N4Method({name:"calculateWinner",isStatic:!1,jsFunction:e.calculateWinner,annotations:[]}),new N4Method({name:"calculateValidDestinations",isStatic:!1,jsFunction:e.calculateValidDestinations,annotations:[]}),new N4Method({name:"isValidMove",isStatic:!1,jsFunction:e.isValidMove,annotations:[]}),new N4Method({name:"isInsideBoard",isStatic:!1,jsFunction:e.isInsideBoard,annotations:[]}),new N4Method({name:"calculateKnightAttackingDestinations",isStatic:!1,jsFunction:e.calculateKnightAttackingDestinations,annotations:[]}),new N4Method({name:"calculateRookAttackingDestinations",isStatic:!1,jsFunction:e.calculateRookAttackingDestinations,annotations:[]}),new N4Method({name:"calculateBishopAttackingDestinations",isStatic:!1,jsFunction:e.calculateBishopAttackingDestinations,annotations:[]}),new N4Method({name:"calculateQueenAttackingDestinations",isStatic:!1,jsFunction:e.calculateQueenAttackingDestinations,annotations:[]}),new N4Method({name:"calculateKingAttackingDestinations",isStatic:!1,jsFunction:e.calculateKingAttackingDestinations,annotations:[]}),new N4Method({name:"calculatePawnAttackingDestinations",isStatic:!1,jsFunction:e.calculatePawnAttackingDestinations,annotations:[]}),new N4Method({name:"calculateAttackedDestinations",isStatic:!1,jsFunction:e.calculateAttackedDestinations,annotations:[]}),new N4Method({name:"isKingInCheckIfMove",isStatic:!1,jsFunction:e.isKingInCheckIfMove,annotations:[]}),new N4Method({name:"isKingInCheck",isStatic:!1,jsFunction:e.isKingInCheck,annotations:[]}),new N4Method({name:"getPiecesOfSameColor",isStatic:!1,jsFunction:e.getPiecesOfSameColor,annotations:[]}),new N4Method({name:"getKingPosition",isStatic:!1,jsFunction:e.getKingPosition,annotations:[]}),new N4Method({name:"isPositionOccupiedBypieceSameColor",isStatic:!1,jsFunction:e.isPositionOccupiedBypieceSameColor,annotations:[]}),new N4Method({name:"isPositionOccupiedBypieceOtherColor",isStatic:!1,jsFunction:e.isPositionOccupiedBypieceOtherColor,annotations:[]}),new N4Method({name:"getCurrentSnapshot",isStatic:!1,jsFunction:e.getCurrentSnapshot,annotations:[]}),new N4Method({name:"move",isStatic:!1,jsFunction:e.move,annotations:[]}),new N4Method({name:"isCastlingMove",isStatic:!1,jsFunction:e.isCastlingMove,annotations:[]}),new N4Method({name:"isLeftWhiteRook",isStatic:!1,jsFunction:e.isLeftWhiteRook,annotations:[]}),new N4Method({name:"isWhitepiece",isStatic:!1,jsFunction:e.isWhitepiece,annotations:[]}),new N4Method({name:"isBlackpiece",isStatic:!1,jsFunction:e.isBlackpiece,annotations:[]}),new N4Method({name:"render",isStatic:!1,jsFunction:e.render,annotations:[]})],consumedMembers:[],annotations:[]})}),Object.defineProperty(g,"$di",{value:{superType:s.Component,fieldsInjectedTypes:[]}}),n(4).render(o.createElement(g,null),document.getElementById("chessAppMountPoint"))}]); |
| //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwiUmVhY3RcIiIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbjRqcy1ydW50aW1lL3NyYy1nZW4vcnQuanMiLCJ3ZWJwYWNrOi8vLyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwiUmVhY3RET01cIiIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbjRqcy1ydW50aW1lL3NyYy1nZW4vcnQvTjRCdWlsdEluQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbjRqcy1ydW50aW1lL3NyYy1nZW4vcnQvTjRSdW50aW1lQm9vdHN0cmFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9uNGpzLXJ1bnRpbWUvc3JjLWdlbiBsYXp5IG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0L2Nqcy9yZWFjdC5wcm9kdWN0aW9uLm1pbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvb2JqZWN0LWFzc2lnbi9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMtZ2VuL0Nvb3JkaW5hdGUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjLWdlbi9Nb3ZlLmpzIiwid2VicGFjazovLy8uL3NyYy1nZW4vY29tcG9uZW50cy9Db29yZGluYXRlU3F1YXJlLmpzIiwid2VicGFjazovLy8uL3NyYy1nZW4vY29tcG9uZW50cy9TcXVhcmUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjLWdlbi9jb21wb25lbnRzL0JvYXJkLmpzIiwid2VicGFjazovLy8uL3NyYy1nZW4vY29tcG9uZW50cy9HYW1lLmpzIiwid2VicGFjazovLy8uL3NyYy1nZW4vbWFpbi5qcyJdLCJuYW1lcyI6WyJwYXJlbnRIb3RVcGRhdGVDYWxsYmFjayIsIndpbmRvdyIsImNodW5rSWQiLCJtb3JlTW9kdWxlcyIsImhvdEF2YWlsYWJsZUZpbGVzTWFwIiwiaG90UmVxdWVzdGVkRmlsZXNNYXAiLCJtb2R1bGVJZCIsIk9iamVjdCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImhvdFVwZGF0ZSIsImhvdFdhaXRpbmdGaWxlcyIsImhvdENodW5rc0xvYWRpbmciLCJob3RVcGRhdGVEb3dubG9hZGVkIiwiaG90QWRkVXBkYXRlQ2h1bmsiLCJob3RDdXJyZW50Q2hpbGRNb2R1bGUiLCJob3RBcHBseU9uVXBkYXRlIiwiaG90Q3VycmVudEhhc2giLCJob3RSZXF1ZXN0VGltZW91dCIsImhvdEN1cnJlbnRNb2R1bGVEYXRhIiwiaG90Q3VycmVudFBhcmVudHMiLCJob3RDdXJyZW50UGFyZW50c1RlbXAiLCJob3RDcmVhdGVSZXF1aXJlIiwibWUiLCJpbnN0YWxsZWRNb2R1bGVzIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsImZuIiwicmVxdWVzdCIsImhvdCIsImFjdGl2ZSIsInBhcmVudHMiLCJpbmRleE9mIiwicHVzaCIsImNoaWxkcmVuIiwiY29uc29sZSIsIndhcm4iLCJPYmplY3RGYWN0b3J5IiwibmFtZSIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJnZXQiLCJzZXQiLCJ2YWx1ZSIsImRlZmluZVByb3BlcnR5IiwiZSIsImhvdFN0YXR1cyIsImhvdFNldFN0YXR1cyIsInRoZW4iLCJmaW5pc2hDaHVua0xvYWRpbmciLCJlcnIiLCJob3RXYWl0aW5nRmlsZXNNYXAiLCJob3RFbnN1cmVVcGRhdGVDaHVuayIsInQiLCJtb2RlIiwiaG90Q3JlYXRlTW9kdWxlIiwiX2FjY2VwdGVkRGVwZW5kZW5jaWVzIiwiX2RlY2xpbmVkRGVwZW5kZW5jaWVzIiwiX3NlbGZBY2NlcHRlZCIsIl9zZWxmRGVjbGluZWQiLCJfZGlzcG9zZUhhbmRsZXJzIiwiX21haW4iLCJhY2NlcHQiLCJkZXAiLCJjYWxsYmFjayIsInVuZGVmaW5lZCIsImkiLCJsZW5ndGgiLCJkZWNsaW5lIiwiZGlzcG9zZSIsImFkZERpc3Bvc2VIYW5kbGVyIiwicmVtb3ZlRGlzcG9zZUhhbmRsZXIiLCJpZHgiLCJzcGxpY2UiLCJjaGVjayIsImhvdENoZWNrIiwiYXBwbHkiLCJob3RBcHBseSIsInN0YXR1cyIsImwiLCJob3RTdGF0dXNIYW5kbGVycyIsImFkZFN0YXR1c0hhbmRsZXIiLCJyZW1vdmVTdGF0dXNIYW5kbGVyIiwiZGF0YSIsIm5ld1N0YXR1cyIsImhvdERlZmVycmVkIiwiaG90VXBkYXRlTmV3SGFzaCIsInRvTW9kdWxlSWQiLCJpZCIsIkVycm9yIiwicmVxdWVzdFRpbWVvdXQiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsIlhNTEh0dHBSZXF1ZXN0IiwicmVxdWVzdFBhdGgiLCJwIiwib3BlbiIsInRpbWVvdXQiLCJzZW5kIiwib25yZWFkeXN0YXRlY2hhbmdlIiwicmVhZHlTdGF0ZSIsInVwZGF0ZSIsIkpTT04iLCJwYXJzZSIsInJlc3BvbnNlVGV4dCIsImMiLCJoIiwicHJvbWlzZSIsInNjcmlwdCIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsImNoYXJzZXQiLCJzcmMiLCJoZWFkIiwiYXBwZW5kQ2hpbGQiLCJob3REb3dubG9hZFVwZGF0ZUNodW5rIiwiZGVmZXJyZWQiLCJyZXN1bHQiLCJvdXRkYXRlZE1vZHVsZXMiLCJvcHRpb25zIiwiY2IiLCJqIiwibW9kdWxlIiwiZ2V0QWZmZWN0ZWRTdHVmZiIsInVwZGF0ZU1vZHVsZUlkIiwib3V0ZGF0ZWREZXBlbmRlbmNpZXMiLCJxdWV1ZSIsInNsaWNlIiwibWFwIiwiY2hhaW4iLCJxdWV1ZUl0ZW0iLCJwb3AiLCJ0eXBlIiwicGFyZW50SWQiLCJwYXJlbnQiLCJjb25jYXQiLCJhZGRBbGxUb1NldCIsImEiLCJiIiwiaXRlbSIsImFwcGxpZWRVcGRhdGUiLCJ3YXJuVW5leHBlY3RlZFJlcXVpcmUiLCJhYm9ydEVycm9yIiwiZG9BcHBseSIsImRvRGlzcG9zZSIsImNoYWluSW5mbyIsImpvaW4iLCJvbkRlY2xpbmVkIiwiaWdub3JlRGVjbGluZWQiLCJvblVuYWNjZXB0ZWQiLCJpZ25vcmVVbmFjY2VwdGVkIiwib25BY2NlcHRlZCIsIm9uRGlzcG9zZWQiLCJvdXRkYXRlZFNlbGZBY2NlcHRlZE1vZHVsZXMiLCJlcnJvckhhbmRsZXIiLCJrZXlzIiwiZm9yRWFjaCIsImluc3RhbGxlZENodW5rcyIsImhvdERpc3Bvc2VDaHVuayIsImRlcGVuZGVuY3kiLCJtb2R1bGVPdXRkYXRlZERlcGVuZGVuY2llcyIsImRpc3Bvc2VIYW5kbGVycyIsImNoaWxkIiwibW9kdWxlcyIsImVycm9yIiwiY2FsbGJhY2tzIiwib25FcnJvcmVkIiwiZGVwZW5kZW5jeUlkIiwiaWdub3JlRXJyb3JlZCIsImVycjIiLCJvcmlnaW5hbEVycm9yIiwiZXhwb3J0cyIsIm0iLCJkIiwiZ2V0dGVyIiwibyIsInIiLCJTeW1ib2wiLCJ0b1N0cmluZ1RhZyIsIl9fZXNNb2R1bGUiLCJucyIsImNyZWF0ZSIsImtleSIsImJpbmQiLCJuIiwib2JqZWN0IiwicHJvcGVydHkiLCJzIiwiUmVhY3QiLCJnbG9iYWwiLCJfbjRqc0ltcG9ydCIsInBhdGgiLCJzZWxmIiwiZyIsInRoaXMiLCJGdW5jdGlvbiIsIlJlYWN0RE9NIiwiJG1ha2VONEJ1aWx0SW5DbGFzcyIsImN0b3IiLCJzdXBlckN0b3IiLCJpbnN0YW5jZU1ldGhvZHMiLCJzdGF0aWNNZXRob2RzIiwic2V0UHJvdG90eXBlT2YiLCJzdGFjayIsIiRfX240ZXJyIiwibWVzc2FnZSIsIm40dHlwZSIsImRlZmluZVByb3BlcnRpZXMiLCJwcm90byIsIiRjcmVhdGVNZXRhSW5mbyIsIm1ldGFDbGFzcyIsIm93bmVkTWVtYmVycyIsIk40TWV0aG9kIiwiY29uc3RydWN0b3IiLCJuNG1lbWJlciIsImRlZmluZVRhcmdldFByb3AiLCJhbm5vdGF0aW9uIiwic2V0VGFyZ2V0T2ZBbm5vdGF0aW9ucyIsInRhcmdldCIsImFubm90YXRpb25zIiwiTjRPYmplY3QiLCJzcGVjIiwiTjRFbGVtZW50Iiwib3JpZ2luIiwiTjROYW1lZEVsZW1lbnQiLCJONFR5cGUiLCJmcW4iLCJONENsYXNzaWZpZXIiLCJuNHN1cGVyVHlwZSIsImFsbEltcGxlbWVudGVkSW50ZXJmYWNlcyIsImNvbnN1bWVkTWVtYmVycyIsIk40Q2xhc3MiLCJONEludGVyZmFjZSIsIk40TWVtYmVyIiwib3duZXIiLCJpc1N0YXRpYyIsImpzRnVuY3Rpb24iLCJONERhdGFGaWVsZCIsIk40QWNjZXNzb3IiLCJONEVudW1UeXBlIiwiTjRFbnVtIiwiTjRTdHJpbmdCYXNlZEVudW1UeXBlIiwiTjRTdHJpbmdCYXNlZEVudW0iLCJONEFubm90YXRpb24iLCJkZXRhaWxzIiwiTjRQcm92aWRlciIsIk40QXBpTm90SW1wbGVtZW50ZWRFcnJvciIsIk1pZ3JhdGlvbkNvbnRyb2xsZXIiLCJNaWdyYXRpb25Db250ZXh0IiwiaGFzQW5ub3RhdGlvbiIsInNvbWUiLCJhbnlBbm5vdGF0aW9uIiwiYWxsQW5ub3RhdGlvbnMiLCJmaWx0ZXIiLCJpc0NsYXNzIiwiaXNJbnRlcmZhY2UiLCJpc0VudW0iLCJvZiIsIm40b2JqZWN0IiwibWVtYmVycyIsImNvbnN1bWVkIiwiaW5oZXJpdGVkIiwiX3N0YXRpYyIsImFyciIsInRtcCIsIm1lbWJlcnNXaXRoQW5ub3RhdGlvbiIsImRhdGFGaWVsZHMiLCJkYXRhRmllbGRzV2l0aEFubm90YXRpb24iLCJtZXRob2RzIiwibWV0aG9kc1dpdGhBbm5vdGF0aW9uIiwiaXNHZXR0ZXIiLCJpc1NldHRlciIsInRvU3RyaW5nIiwiZmluZExpdGVyYWxCeU5hbWUiLCJsaXRlcmFscyIsImZpbmRMaXRlcmFsQnlWYWx1ZSIsImNvbnN1bWVkTWVtZWJlcnMiLCJmcmVlemUiLCJBcnJheVNsaWNlIiwiQXJyYXkiLCJub29wIiwiX19SRUFDVF9IT1RfTE9BREVSX18iLCJwcm9wcyIsImsiLCJwcm9wIiwid3JpdGFibGUiLCJtaXhpbkRlZmF1bHRNZXRob2QiLCJtZXRob2QiLCJtaXhpbkRlZmF1bHRNZXRob2RzIiwiaWZhY2UiLCIkaW1wbGVtZW50cyIsImluc3RhbmNlIiwiaW1wbGVtZW50ZWRJbnRlcmZhY2UiLCIkbWFrZUNsYXNzIiwiaW1wbGVtZW50ZWRJbnRlcmZhY2VzIiwibjR0eXBlRm4iLCIkbWFrZUludGVyZmFjZSIsInRpbnRlcmZhY2UiLCIkbWV0aG9kcyIsIiRtYWtlRW51bSIsImVudW1lcmF0aW9uIiwic3RyaW5nQmFzZWQiLCJpbmRleCIsIm1lbWJlciIsInZhbHVlcyIsImxpdGVyYWwiLCIkaW5zdGFuY2VvZiIsInN1cGVydHlwZSIsIiRzbGljZVRvQXJyYXlGb3JEZXN0cnVjdCIsIm1heCIsImlzQXJyYXkiLCJpdGVyYXRvciIsImVudHJ5IiwicmV0IiwiaXQiLCJuZXh0IiwiZG9uZSIsIlR5cGVFcnJvciIsIiRzcGF3biIsImdlbiIsImV4ZWMiLCJzdGVwIiwidiIsInJlcyIsImV4YyIsInRocm93ciIsIiRuNHByb21pc2lmeUZ1bmN0aW9uIiwiY2JCYXNlZEZuIiwiYXJncyIsIm11bHRpU3VjY2Vzc1ZhbHVlcyIsIm5vRXJyb3JWYWx1ZSIsInJlc3VsdDAiLCJyZXN1bHQxIiwiYXJndW1lbnRzIiwiJG40cHJvbWlzaWZ5TWV0aG9kIiwicmVjZWl2ZXIiLCJtZXRob2ROYW1lIiwid2VicGFja0VtcHR5QXN5bmNDb250ZXh0IiwicmVxIiwiY29kZSIsImZvciIsInEiLCJ1IiwidyIsIngiLCJ5IiwieiIsImFhIiwiYmEiLCJBIiwiQiIsImVuY29kZVVSSUNvbXBvbmVudCIsImYiLCJyZXBsYWNlIiwiZnJhbWVzVG9Qb3AiLCJjYSIsIkMiLCJpc01vdW50ZWQiLCJlbnF1ZXVlRm9yY2VVcGRhdGUiLCJlbnF1ZXVlUmVwbGFjZVN0YXRlIiwiZW5xdWV1ZVNldFN0YXRlIiwiRCIsIkUiLCJjb250ZXh0IiwicmVmcyIsInVwZGF0ZXIiLCJGIiwiRyIsImlzUmVhY3RDb21wb25lbnQiLCJzZXRTdGF0ZSIsImZvcmNlVXBkYXRlIiwiSCIsImlzUHVyZVJlYWN0Q29tcG9uZW50IiwiSSIsImN1cnJlbnQiLCJKIiwiSyIsIkwiLCJyZWYiLCJfX3NlbGYiLCJfX3NvdXJjZSIsIk0iLCJkZWZhdWx0UHJvcHMiLCIkJHR5cGVvZiIsIl9vd25lciIsIk4iLCJPIiwiUCIsIlEiLCJrZXlQcmVmaXgiLCJmdW5jIiwiY291bnQiLCJSIiwiVSIsIlMiLCJUIiwiPSIsIjoiLCJlc2NhcGUiLCJlYSIsImZhIiwiViIsImRhIiwiVyIsIlgiLCJDaGlsZHJlbiIsInRvQXJyYXkiLCJvbmx5IiwiY3JlYXRlUmVmIiwiQ29tcG9uZW50IiwiUHVyZUNvbXBvbmVudCIsImNyZWF0ZUNvbnRleHQiLCJfY2FsY3VsYXRlQ2hhbmdlZEJpdHMiLCJfY3VycmVudFZhbHVlIiwiX2N1cnJlbnRWYWx1ZTIiLCJfdGhyZWFkQ291bnQiLCJQcm92aWRlciIsIkNvbnN1bWVyIiwiX2NvbnRleHQiLCJmb3J3YXJkUmVmIiwicmVuZGVyIiwibGF6eSIsIl9jdG9yIiwiX3N0YXR1cyIsIl9yZXN1bHQiLCJtZW1vIiwiY29tcGFyZSIsInVzZUNhbGxiYWNrIiwidXNlQ29udGV4dCIsInVzZUVmZmVjdCIsInVzZUltcGVyYXRpdmVIYW5kbGUiLCJ1c2VEZWJ1Z1ZhbHVlIiwidXNlTGF5b3V0RWZmZWN0IiwidXNlTWVtbyIsInVzZVJlZHVjZXIiLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsIkZyYWdtZW50IiwiU3RyaWN0TW9kZSIsIlN1c3BlbnNlIiwiY2xvbmVFbGVtZW50IiwiY3JlYXRlRmFjdG9yeSIsImlzVmFsaWRFbGVtZW50IiwidmVyc2lvbiIsInVuc3RhYmxlX0NvbmN1cnJlbnRNb2RlIiwidW5zdGFibGVfUHJvZmlsZXIiLCJfX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRCIsIlJlYWN0Q3VycmVudERpc3BhdGNoZXIiLCJSZWFjdEN1cnJlbnRPd25lciIsImFzc2lnbiIsIlkiLCJkZWZhdWx0IiwiWiIsImdldE93blByb3BlcnR5U3ltYm9scyIsInByb3BJc0VudW1lcmFibGUiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsInRlc3QxIiwiU3RyaW5nIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsInRlc3QyIiwiZnJvbUNoYXJDb2RlIiwidGVzdDMiLCJzcGxpdCIsImxldHRlciIsInNob3VsZFVzZU5hdGl2ZSIsInNvdXJjZSIsImZyb20iLCJzeW1ib2xzIiwidG8iLCJ2YWwiLCJ0b09iamVjdCIsIkNvb3JkaW5hdGUiLCJyb3ciLCJjb2wiLCJNb3ZlIiwicGllY2UiLCJmcm9tUG9zIiwidG9Qb3MiLCJlcXVhbHMiLCJvdGhlciIsImdldEJvYXJkQ29vcmRpbmF0ZVJlcHJlc2VudGF0aW9uIiwiY2hhckNvZGVBdCIsImluc3RhbmNlUHJvdG8iLCJzdGF0aWNQcm90byIsIkNvb3JkaW5hdGVTcXVhcmVQcm9wcyIsIiRmaWVsZEluaXQiLCJtaXhpbkV4Y2x1c2lvbiIsImxhYmVsIiwibGFiZWxTcXVhcmVTdHlsZXMiLCJmb250U2l6ZSIsInRleHRBbGlnbiIsImRpc3BsYXkiLCJqdXN0aWZ5Q29udGVudCIsImFsaWduSXRlbXMiLCJ3aWR0aCIsImhlaWdodCIsIkxhYmVsU3F1YXJlIiwiZXh0ZXJuYWxfUmVhY3RfIiwic3R5bGUiLCJzdXBlclR5cGUiLCJmaWVsZHNJbmplY3RlZFR5cGVzIiwiU3F1YXJlUHJvcHMiLCJpc1doaXRlIiwib25DbGljayIsImlzUGlja2VkIiwiaXNWYWxpZERlc3RpbmF0aW9uIiwiYm9hcmRTcXVhcmVTdHlsZXMiLCJTcXVhcmUiLCJiYWNrZ3JvdW5kQ29sb3IiLCJCb2FyZFByb3BzIiwic3F1YXJlcyIsInBpY2tlZFNxdWFyZSIsInZhbGlkRGVzdGluYXRpb25zIiwiYm9hcmRTdHlsZXMiLCJmbGV4V3JhcCIsInNxdWFyZVN0eWxlcyIsIkJvYXJkIiwicmVuZGVyU3F1YXJlIiwicG9zIiwicmVuZGVyQ29vcmRpbmF0ZVNxdWFyZSIsInJlbmRlclNxdWFyZXMiLCJpc1doaXRlSW5pdGlhbCIsImlzUG90ZW50aWFsRGVzdGluYXRpb24iLCJmaW5kSW5kZXgiLCJwb3RlbnRpYWxEZXN0IiwiU25hcHNob3QiLCJsYXN0TW92ZXMiLCJ3aGl0ZUtpbmdNb3ZlZCIsImxlZnRXaGl0ZVJvb2tNb3ZlZCIsInJpZ2h0V2hpdGVSb29rTW92ZWQiLCJibGFja0tpbmdNb3ZlZCIsImxlZnRCbGFja1Jvb2tNb3ZlZCIsInJpZ2h0QmxhY2tSb29rTW92ZWQiLCJHYW1lU3RhdGUiLCJHYW1lIiwic3RhdGUiLCJoaXN0b3J5Iiwic3RlcE51bWJlciIsIndoaXRlSXNOZXh0IiwiaGFuZGxlQ2xpY2siLCJzZWxlY3RlZFBvcyIsImNhbGN1bGF0ZVdpbm5lciIsImN1cnJlbnRwaWVjZSIsImlzV2hpdGVwaWVjZSIsImlzQmxhY2twaWVjZSIsImNhbGN1bGF0ZVZhbGlkRGVzdGluYXRpb25zIiwiYXR0ZW1wdGVkTW92ZSIsImlzVmFsaWRNb3ZlIiwibmV3U3F1YXJlcyIsIm1vdmVzIiwibW92ZSIsImdvVG9TdGVwIiwiZ2V0QWxsUGllY2VzU2FtZUNvbG9yIiwiZm9yQWxsIiwicHJlZGljYXRlIiwicmVkdWNlIiwiYWNjIiwiZWxlbSIsImFsbFBpZWNlcyIsImNhbGN1bGF0ZUF0dGFja2VkRGVzdGluYXRpb25zIiwibmV4dFBvcyIsIm5leHROZXh0UG9zIiwiaXNLaW5nSW5DaGVja0lmTW92ZSIsImlzSW5zaWRlQm9hcmQiLCJjb29yZCIsImNhbGN1bGF0ZUtuaWdodEF0dGFja2luZ0Rlc3RpbmF0aW9ucyIsImRlbHRhIiwiaXNQb3NpdGlvbk9jY3VwaWVkQnlwaWVjZVNhbWVDb2xvciIsImNhbGN1bGF0ZVJvb2tBdHRhY2tpbmdEZXN0aW5hdGlvbnMiLCJkZWx0YXMiLCJuZXdQb3MiLCJpc1Bvc2l0aW9uT2NjdXBpZWRCeXBpZWNlT3RoZXJDb2xvciIsImNhbGN1bGF0ZUJpc2hvcEF0dGFja2luZ0Rlc3RpbmF0aW9ucyIsImNhbGN1bGF0ZVF1ZWVuQXR0YWNraW5nRGVzdGluYXRpb25zIiwiY2FsY3VsYXRlS2luZ0F0dGFja2luZ0Rlc3RpbmF0aW9ucyIsImNhbGN1bGF0ZVBhd25BdHRhY2tpbmdEZXN0aW5hdGlvbnMiLCJkYyIsImF0dGFja1BvcyIsImNoYW5nZWRTcXVhcmVzIiwia2luZ1BvcyIsImdldEtpbmdQb3NpdGlvbiIsImlzS2luZ0luQ2hlY2siLCJraW5nIiwib3Bwb25lbnRwaWVjZXMiLCJnZXRQaWVjZXNPZlNhbWVDb2xvciIsIm9wcG9uZW50cGllY2UiLCJmaW5kIiwid2hpdGUiLCJnZXRDdXJyZW50U25hcHNob3QiLCJyb3dzIiwiaXNDYXN0bGluZ01vdmUiLCJyb29rRnJvbVBvcyIsInJvb2tUb1BvcyIsImN1cnJlbnRTbmFwc2hvdCIsIk1hdGgiLCJhYnMiLCJpc0xlZnRXaGl0ZVJvb2siLCJ3aW5uZXIiLCJzbmFwc2hvdCIsImFjdGlvbkxhYmVsIiwidGFibGVDZWxsU3R5bGVzIiwidmVydGljYWxBbGlnbiIsInBhZGRpbmciLCJwb3NpdGlvbiIsImJvcmRlciIsImNvbG9yIiwidGV4dERlY29yYXRpb24iLCJmbGV4RGlyZWN0aW9uIiwibWFyZ2luVG9wIiwibWFyZ2luTGVmdCIsInJlYWN0IiwiZ2V0RWxlbWVudEJ5SWQiXSwibWFwcGluZ3MiOiJhQUdBLElBQUFBLEVBQUFDLE9BQUEsaUJBQ0FBLE9BQUEsaUJBQ0EsU0FBQUMsRUFBQUMsSUFnUkEsU0FBQUQsRUFBQUMsR0FDQSxJQUFBQyxFQUFBRixLQUFBRyxFQUFBSCxHQUNBLE9BRUEsUUFBQUksS0FEQUQsRUFBQUgsSUFBQSxFQUNBQyxFQUNBSSxPQUFBQyxVQUFBQyxlQUFBQyxLQUFBUCxFQUFBRyxLQUNBSyxFQUFBTCxHQUFBSCxFQUFBRyxJQUdBLEtBQUFNLEdBQUEsSUFBQUMsR0FDQUMsSUF6UkFDLENBQUFiLEVBQUFDLEdBQ0FILEtBQUFFLEVBQUFDLElBdURBLElBS0FhLEVBTEFDLEdBQUEsRUFFQUMsRUFBQSx1QkFDQUMsRUFBQSxJQUNBQyxFQUFBLEdBR0FDLEVBQUEsR0FFQUMsRUFBQSxHQUdBLFNBQUFDLEVBQUFqQixHQUNBLElBQUFrQixFQUFBQyxFQUFBbkIsR0FDQSxJQUFBa0IsRUFBQSxP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QUEsRUFDQUMsV0FBQXNQLEVBQUEsT0FDQXZRLFlBQUEsTUFHQVcsZ0JBQUEsR0FDQVgsWUFBQSxPQUlBck4sT0FBQXFDLGVBQUEyZSxFQUFBLE9BQ0E1ZSxNQUFBLENBQ0F5YyxVQUFhRixFQUFBLFVBQ2JHLG9CQUFBLFdDaHZDQSxPQUFnQjhHLEVBQUEsY0FBb0I1RSxFQUFJLE1BQUF6YSxTQUFBc2YsZUFBQSIsImZpbGUiOiJjaGVzcy1hcHAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHRmdW5jdGlvbiBob3REaXNwb3NlQ2h1bmsoY2h1bmtJZCkge1xuIFx0XHRkZWxldGUgaW5zdGFsbGVkQ2h1bmtzW2NodW5rSWRdO1xuIFx0fVxuIFx0dmFyIHBhcmVudEhvdFVwZGF0ZUNhbGxiYWNrID0gd2luZG93W1wid2VicGFja0hvdFVwZGF0ZVwiXTtcbiBcdHdpbmRvd1tcIndlYnBhY2tIb3RVcGRhdGVcIl0gPSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiBcdGZ1bmN0aW9uIHdlYnBhY2tIb3RVcGRhdGVDYWxsYmFjayhjaHVua0lkLCBtb3JlTW9kdWxlcykge1xuIFx0XHRob3RBZGRVcGRhdGVDaHVuayhjaHVua0lkLCBtb3JlTW9kdWxlcyk7XG4gXHRcdGlmIChwYXJlbnRIb3RVcGRhdGVDYWxsYmFjaykgcGFyZW50SG90VXBkYXRlQ2FsbGJhY2soY2h1bmtJZCwgbW9yZU1vZHVsZXMpO1xuIFx0fSA7XG5cbiBcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuIFx0ZnVuY3Rpb24gaG90RG93bmxvYWRVcGRhdGVDaHVuayhjaHVua0lkKSB7XG4gXHRcdHZhciBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuIFx0XHRzY3JpcHQuY2hhcnNldCA9IFwidXRmLThcIjtcbiBcdFx0c2NyaXB0LnNyYyA9IF9fd2VicGFja19yZXF1aXJlX18ucCArIFwiXCIgKyBjaHVua0lkICsgXCIuXCIgKyBob3RDdXJyZW50SGFzaCArIFwiLmhvdC11cGRhdGUuanNcIjtcbiBcdFx0aWYgKG51bGwpIHNjcmlwdC5jcm9zc09yaWdpbiA9IG51bGw7XG4gXHRcdGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcbiBcdH1cblxuIFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gXHRmdW5jdGlvbiBob3REb3dubG9hZE1hbmlmZXN0KHJlcXVlc3RUaW1lb3V0KSB7XG4gXHRcdHJlcXVlc3RUaW1lb3V0ID0gcmVxdWVzdFRpbWVvdXQgfHwgMTAwMDA7XG4gXHRcdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiBcdFx0XHRpZiAodHlwZW9mIFhNTEh0dHBSZXF1ZXN0ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gXHRcdFx0XHRyZXR1cm4gcmVqZWN0KG5ldyBFcnJvcihcIk5vIGJyb3dzZXIgc3VwcG9ydFwiKSk7XG4gXHRcdFx0fVxuIFx0XHRcdHRyeSB7XG4gXHRcdFx0XHR2YXIgcmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuIFx0XHRcdFx0dmFyIHJlcXVlc3RQYXRoID0gX193ZWJwYWNrX3JlcXVpcmVfXy5wICsgXCJcIiArIGhvdEN1cnJlbnRIYXNoICsgXCIuaG90LXVwZGF0ZS5qc29uXCI7XG4gXHRcdFx0XHRyZXF1ZXN0Lm9wZW4oXCJHRVRcIiwgcmVxdWVzdFBhdGgsIHRydWUpO1xuIFx0XHRcdFx0cmVxdWVzdC50aW1lb3V0ID0gcmVxdWVzdFRpbWVvdXQ7XG4gXHRcdFx0XHRyZXF1ZXN0LnNlbmQobnVsbCk7XG4gXHRcdFx0fSBjYXRjaCAoZXJyKSB7XG4gXHRcdFx0XHRyZXR1cm4gcmVqZWN0KGVycik7XG4gXHRcdFx0fVxuIFx0XHRcdHJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7XG4gXHRcdFx0XHRpZiAocmVxdWVzdC5yZWFkeVN0YXRlICE9PSA0KSByZXR1cm47XG4gXHRcdFx0XHRpZiAocmVxdWVzdC5zdGF0dXMgPT09IDApIHtcbiBcdFx0XHRcdFx0Ly8gdGltZW91dFxuIFx0XHRcdFx0XHRyZWplY3QoXG4gXHRcdFx0XHRcdFx0bmV3IEVycm9yKFwiTWFuaWZlc3QgcmVxdWVzdCB0byBcIiArIHJlcXVlc3RQYXRoICsgXCIgdGltZWQgb3V0LlwiKVxuIFx0XHRcdFx0XHQpO1xuIFx0XHRcdFx0fSBlbHNlIGlmIChyZXF1ZXN0LnN0YXR1cyA9PT0gNDA0KSB7XG4gXHRcdFx0XHRcdC8vIG5vIHVwZGF0ZSBhdmFpbGFibGVcbiBcdFx0XHRcdFx0cmVzb2x2ZSgpO1xuIFx0XHRcdFx0fSBlbHNlIGlmIChyZXF1ZXN0LnN0YXR1cyAhPT0gMjAwICYmIHJlcXVlc3Quc3RhdHVzICE9PSAzMDQpIHtcbiBcdFx0XHRcdFx0Ly8gb3RoZXIgZmFpbHVyZVxuIFx0XHRcdFx0XHRyZWplY3QobmV3IEVycm9yKFwiTWFuaWZlc3QgcmVxdWVzdCB0byBcIiArIHJlcXVlc3RQYXRoICsgXCIgZmFpbGVkLlwiKSk7XG4gXHRcdFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0XHQvLyBzdWNjZXNzXG4gXHRcdFx0XHRcdHRyeSB7XG4gXHRcdFx0XHRcdFx0dmFyIHVwZGF0ZSA9IEpTT04ucGFyc2UocmVxdWVzdC5yZXNwb25zZVRleHQpO1xuIFx0XHRcdFx0XHR9IGNhdGNoIChlKSB7XG4gXHRcdFx0XHRcdFx0cmVqZWN0KGUpO1xuIFx0XHRcdFx0XHRcdHJldHVybjtcbiBcdFx0XHRcdFx0fVxuIFx0XHRcdFx0XHRyZXNvbHZlKHVwZGF0ZSk7XG4gXHRcdFx0XHR9XG4gXHRcdFx0fTtcbiBcdFx0fSk7XG4gXHR9XG5cbiBcdHZhciBob3RBcHBseU9uVXBkYXRlID0gdHJ1ZTtcbiBcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuIFx0dmFyIGhvdEN1cnJlbnRIYXNoID0gXCI1YzI2ODExNjE4NDI0ZTFmYjQ2YVwiO1xuIFx0dmFyIGhvdFJlcXVlc3RUaW1lb3V0ID0gMTAwMDA7XG4gXHR2YXIgaG90Q3VycmVudE1vZHVsZURhdGEgPSB7fTtcbiBcdHZhciBob3RDdXJyZW50Q2hpbGRNb2R1bGU7XG4gXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiBcdHZhciBob3RDdXJyZW50UGFyZW50cyA9IFtdO1xuIFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gXHR2YXIgaG90Q3VycmVudFBhcmVudHNUZW1wID0gW107XG5cbiBcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuIFx0ZnVuY3Rpb24gaG90Q3JlYXRlUmVxdWlyZShtb2R1bGVJZCkge1xuIFx0XHR2YXIgbWUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXTtcbiBcdFx0aWYgKCFtZSkgcmV0dXJuIF9fd2VicGFja19yZXF1aXJlX187XG4gXHRcdHZhciBmbiA9IGZ1bmN0aW9uKHJlcXVlc3QpIHtcbiBcdFx0XHRpZiAobWUuaG90LmFjdGl2ZSkge1xuIFx0XHRcdFx0aWYgKGluc3RhbGxlZE1vZHVsZXNbcmVxdWVzdF0pIHtcbiBcdFx0XHRcdFx0aWYgKGluc3RhbGxlZE1vZHVsZXNbcmVxdWVzdF0ucGFyZW50cy5pbmRleE9mKG1vZHVsZUlkKSA9PT0gLTEpIHtcbiBcdFx0XHRcdFx0XHRpbnN0YWxsZWRNb2R1bGVzW3JlcXVlc3RdLnBhcmVudHMucHVzaChtb2R1bGVJZCk7XG4gXHRcdFx0XHRcdH1cbiBcdFx0XHRcdH0gZWxzZSB7XG4gXHRcdFx0XHRcdGhvdEN1cnJlbnRQYXJlbnRzID0gW21vZHVsZUlkXTtcbiBcdFx0XHRcdFx0aG90Q3VycmVudENoaWxkTW9kdWxlID0gcmVxdWVzdDtcbiBcdFx0XHRcdH1cbiBcdFx0XHRcdGlmIChtZS5jaGlsZHJlbi5pbmRleE9mKHJlcXVlc3QpID09PSAtMSkge1xuIFx0XHRcdFx0XHRtZS5jaGlsZHJlbi5wdXNoKHJlcXVlc3QpO1xuIFx0XHRcdFx0fVxuIFx0XHRcdH0gZWxzZSB7XG4gXHRcdFx0XHRjb25zb2xlLndhcm4oXG4gXHRcdFx0XHRcdFwiW0hNUl0gdW5leHBlY3RlZCByZXF1aXJlKFwiICtcbiBcdFx0XHRcdFx0XHRyZXF1ZXN0ICtcbiBcdFx0XHRcdFx0XHRcIikgZnJvbSBkaXNwb3NlZCBtb2R1bGUgXCIgK1xuIFx0XHRcdFx0XHRcdG1vZHVsZUlkXG4gXHRcdFx0XHQpO1xuIFx0XHRcdFx0aG90Q3VycmVudFBhcmVudHMgPSBbXTtcbiBcdFx0XHR9XG4gXHRcdFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18ocmVxdWVzdCk7XG4gXHRcdH07XG4gXHRcdHZhciBPYmplY3RGYWN0b3J5ID0gZnVuY3Rpb24gT2JqZWN0RmFjdG9yeShuYW1lKSB7XG4gXHRcdFx0cmV0dXJuIHtcbiBcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiBcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG4gXHRcdFx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xuIFx0XHRcdFx0XHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfX1tuYW1lXTtcbiBcdFx0XHRcdH0sXG4gXHRcdFx0XHRzZXQ6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gXHRcdFx0XHRcdF9fd2VicGFja19yZXF1aXJlX19bbmFtZV0gPSB2YWx1ZTtcbiBcdFx0XHRcdH1cbiBcdFx0XHR9O1xuIFx0XHR9O1xuIFx0XHRmb3IgKHZhciBuYW1lIGluIF9fd2VicGFja19yZXF1aXJlX18pIHtcbiBcdFx0XHRpZiAoXG4gXHRcdFx0XHRPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoX193ZWJwYWNrX3JlcXVpcmVfXywgbmFtZSkgJiZcbiBcdFx0XHRcdG5hbWUgIT09IFwiZVwiICYmXG4gXHRcdFx0XHRuYW1lICE9PSBcInRcIlxuIFx0XHRcdCkge1xuIFx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGZuLCBuYW1lLCBPYmplY3RGYWN0b3J5KG5hbWUpKTtcbiBcdFx0XHR9XG4gXHRcdH1cbiBcdFx0Zm4uZSA9IGZ1bmN0aW9uKGNodW5rSWQpIHtcbiBcdFx0XHRpZiAoaG90U3RhdHVzID09PSBcInJlYWR5XCIpIGhvdFNldFN0YXR1cyhcInByZXBhcmVcIik7XG4gXHRcdFx0aG90Q2h1bmtzTG9hZGluZysrO1xuIFx0XHRcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fLmUoY2h1bmtJZCkudGhlbihmaW5pc2hDaHVua0xvYWRpbmcsIGZ1bmN0aW9uKGVycikge1xuIFx0XHRcdFx0ZmluaXNoQ2h1bmtMb2FkaW5nKCk7XG4gXHRcdFx0XHR0aHJvdyBlcnI7XG4gXHRcdFx0fSk7XG5cbiBcdFx0XHRmdW5jdGlvbiBmaW5pc2hDaHVua0xvYWRpbmcoKSB7XG4gXHRcdFx0XHRob3RDaHVua3NMb2FkaW5nLS07XG4gXHRcdFx0XHRpZiAoaG90U3RhdHVzID09PSBcInByZXBhcmVcIikge1xuIFx0XHRcdFx0XHRpZiAoIWhvdFdhaXRpbmdGaWxlc01hcFtjaHVua0lkXSkge1xuIFx0XHRcdFx0XHRcdGhvdEVuc3VyZVVwZGF0ZUNodW5rKGNodW5rSWQpO1xuIFx0XHRcdFx0XHR9XG4gXHRcdFx0XHRcdGlmIChob3RDaHVua3NMb2FkaW5nID09PSAwICYmIGhvdFdhaXRpbmdGaWxlcyA9PT0gMCkge1xuIFx0XHRcdFx0XHRcdGhvdFVwZGF0ZURvd25sb2FkZWQoKTtcbiBcdFx0XHRcdFx0fVxuIFx0XHRcdFx0fVxuIFx0XHRcdH1cbiBcdFx0fTtcbiBcdFx0Zm4udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdFx0aWYgKG1vZGUgJiAxKSB2YWx1ZSA9IGZuKHZhbHVlKTtcbiBcdFx0XHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXy50KHZhbHVlLCBtb2RlICYgfjEpO1xuIFx0XHR9O1xuIFx0XHRyZXR1cm4gZm47XG4gXHR9XG5cbiBcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuIFx0ZnVuY3Rpb24gaG90Q3JlYXRlTW9kdWxlKG1vZHVsZUlkKSB7XG4gXHRcdHZhciBob3QgPSB7XG4gXHRcdFx0Ly8gcHJpdmF0ZSBzdHVmZlxuIFx0XHRcdF9hY2NlcHRlZERlcGVuZGVuY2llczoge30sXG4gXHRcdFx0X2RlY2xpbmVkRGVwZW5kZW5jaWVzOiB7fSxcbiBcdFx0XHRfc2VsZkFjY2VwdGVkOiBmYWxzZSxcbiBcdFx0XHRfc2VsZkRlY2xpbmVkOiBmYWxzZSxcbiBcdFx0XHRfZGlzcG9zZUhhbmRsZXJzOiBbXSxcbiBcdFx0XHRfbWFpbjogaG90Q3VycmVudENoaWxkTW9kdWxlICE9PSBtb2R1bGVJZCxcblxuIFx0XHRcdC8vIE1vZHVsZSBBUElcbiBcdFx0XHRhY3RpdmU6IHRydWUsXG4gXHRcdFx0YWNjZXB0OiBmdW5jdGlvbihkZXAsIGNhbGxiYWNrKSB7XG4gXHRcdFx0XHRpZiAoZGVwID09PSB1bmRlZmluZWQpIGhvdC5fc2VsZkFjY2VwdGVkID0gdHJ1ZTtcbiBcdFx0XHRcdGVsc2UgaWYgKHR5cGVvZiBkZXAgPT09IFwiZnVuY3Rpb25cIikgaG90Ll9zZWxmQWNjZXB0ZWQgPSBkZXA7XG4gXHRcdFx0XHRlbHNlIGlmICh0eXBlb2YgZGVwID09PSBcIm9iamVjdFwiKVxuIFx0XHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGRlcC5sZW5ndGg7IGkrKylcbiBcdFx0XHRcdFx0XHRob3QuX2FjY2VwdGVkRGVwZW5kZW5jaWVzW2RlcFtpXV0gPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuIFx0XHRcdFx0ZWxzZSBob3QuX2FjY2VwdGVkRGVwZW5kZW5jaWVzW2RlcF0gPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xuIFx0XHRcdH0sXG4gXHRcdFx0ZGVjbGluZTogZnVuY3Rpb24oZGVwKSB7XG4gXHRcdFx0XHRpZiAoZGVwID09PSB1bmRlZmluZWQpIGhvdC5fc2VsZkRlY2xpbmVkID0gdHJ1ZTtcbiBcdFx0XHRcdGVsc2UgaWYgKHR5cGVvZiBkZXAgPT09IFwib2JqZWN0XCIpXG4gXHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgZGVwLmxlbmd0aDsgaSsrKVxuIFx0XHRcdFx0XHRcdGhvdC5fZGVjbGluZWREZXBlbmRlbmNpZXNbZGVwW2ldXSA9IHRydWU7XG4gXHRcdFx0XHRlbHNlIGhvdC5fZGVjbGluZWREZXBlbmRlbmNpZXNbZGVwXSA9IHRydWU7XG4gXHRcdFx0fSxcbiBcdFx0XHRkaXNwb3NlOiBmdW5jdGlvbihjYWxsYmFjaykge1xuIFx0XHRcdFx0aG90Ll9kaXNwb3NlSGFuZGxlcnMucHVzaChjYWxsYmFjayk7XG4gXHRcdFx0fSxcbiBcdFx0XHRhZGREaXNwb3NlSGFuZGxlcjogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiBcdFx0XHRcdGhvdC5fZGlzcG9zZUhhbmRsZXJzLnB1c2goY2FsbGJhY2spO1xuIFx0XHRcdH0sXG4gXHRcdFx0cmVtb3ZlRGlzcG9zZUhhbmRsZXI6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gXHRcdFx0XHR2YXIgaWR4ID0gaG90Ll9kaXNwb3NlSGFuZGxlcnMuaW5kZXhPZihjYWxsYmFjayk7XG4gXHRcdFx0XHRpZiAoaWR4ID49IDApIGhvdC5fZGlzcG9zZUhhbmRsZXJzLnNwbGljZShpZHgsIDEpO1xuIFx0XHRcdH0sXG5cbiBcdFx0XHQvLyBNYW5hZ2VtZW50IEFQSVxuIFx0XHRcdGNoZWNrOiBob3RDaGVjayxcbiBcdFx0XHRhcHBseTogaG90QXBwbHksXG4gXHRcdFx0c3RhdHVzOiBmdW5jdGlvbihsKSB7XG4gXHRcdFx0XHRpZiAoIWwpIHJldHVybiBob3RTdGF0dXM7XG4gXHRcdFx0XHRob3RTdGF0dXNIYW5kbGVycy5wdXNoKGwpO1xuIFx0XHRcdH0sXG4gXHRcdFx0YWRkU3RhdHVzSGFuZGxlcjogZnVuY3Rpb24obCkge1xuIFx0XHRcdFx0aG90U3RhdHVzSGFuZGxlcnMucHVzaChsKTtcbiBcdFx0XHR9LFxuIFx0XHRcdHJlbW92ZVN0YXR1c0hhbmRsZXI6IGZ1bmN0aW9uKGwpIHtcbiBcdFx0XHRcdHZhciBpZHggPSBob3RTdGF0dXNIYW5kbGVycy5pbmRleE9mKGwpO1xuIFx0XHRcdFx0aWYgKGlkeCA+PSAwKSBob3RTdGF0dXNIYW5kbGVycy5zcGxpY2UoaWR4LCAxKTtcbiBcdFx0XHR9LFxuXG4gXHRcdFx0Ly9pbmhlcml0IGZyb20gcHJldmlvdXMgZGlzcG9zZSBjYWxsXG4gXHRcdFx0ZGF0YTogaG90Q3VycmVudE1vZHVsZURhdGFbbW9kdWxlSWRdXG4gXHRcdH07XG4gXHRcdGhvdEN1cnJlbnRDaGlsZE1vZHVsZSA9IHVuZGVmaW5lZDtcbiBcdFx0cmV0dXJuIGhvdDtcbiBcdH1cblxuIFx0dmFyIGhvdFN0YXR1c0hhbmRsZXJzID0gW107XG4gXHR2YXIgaG90U3RhdHVzID0gXCJpZGxlXCI7XG5cbiBcdGZ1bmN0aW9uIGhvdFNldFN0YXR1cyhuZXdTdGF0dXMpIHtcbiBcdFx0aG90U3RhdHVzID0gbmV3U3RhdHVzO1xuIFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGhvdFN0YXR1c0hhbmRsZXJzLmxlbmd0aDsgaSsrKVxuIFx0XHRcdGhvdFN0YXR1c0hhbmRsZXJzW2ldLmNhbGwobnVsbCwgbmV3U3RhdHVzKTtcbiBcdH1cblxuIFx0Ly8gd2hpbGUgZG93bmxvYWRpbmdcbiBcdHZhciBob3RXYWl0aW5nRmlsZXMgPSAwO1xuIFx0dmFyIGhvdENodW5rc0xvYWRpbmcgPSAwO1xuIFx0dmFyIGhvdFdhaXRpbmdGaWxlc01hcCA9IHt9O1xuIFx0dmFyIGhvdFJlcXVlc3RlZEZpbGVzTWFwID0ge307XG4gXHR2YXIgaG90QXZhaWxhYmxlRmlsZXNNYXAgPSB7fTtcbiBcdHZhciBob3REZWZlcnJlZDtcblxuIFx0Ly8gVGhlIHVwZGF0ZSBpbmZvXG4gXHR2YXIgaG90VXBkYXRlLCBob3RVcGRhdGVOZXdIYXNoO1xuXG4gXHRmdW5jdGlvbiB0b01vZHVsZUlkKGlkKSB7XG4gXHRcdHZhciBpc051bWJlciA9ICtpZCArIFwiXCIgPT09IGlkO1xuIFx0XHRyZXR1cm4gaXNOdW1iZXIgPyAraWQgOiBpZDtcbiBcdH1cblxuIFx0ZnVuY3Rpb24gaG90Q2hlY2soYXBwbHkpIHtcbiBcdFx0aWYgKGhvdFN0YXR1cyAhPT0gXCJpZGxlXCIpIHtcbiBcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJjaGVjaygpIGlzIG9ubHkgYWxsb3dlZCBpbiBpZGxlIHN0YXR1c1wiKTtcbiBcdFx0fVxuIFx0XHRob3RBcHBseU9uVXBkYXRlID0gYXBwbHk7XG4gXHRcdGhvdFNldFN0YXR1cyhcImNoZWNrXCIpO1xuIFx0XHRyZXR1cm4gaG90RG93bmxvYWRNYW5pZmVzdChob3RSZXF1ZXN0VGltZW91dCkudGhlbihmdW5jdGlvbih1cGRhdGUpIHtcbiBcdFx0XHRpZiAoIXVwZGF0ZSkge1xuIFx0XHRcdFx0aG90U2V0U3RhdHVzKFwiaWRsZVwiKTtcbiBcdFx0XHRcdHJldHVybiBudWxsO1xuIFx0XHRcdH1cbiBcdFx0XHRob3RSZXF1ZXN0ZWRGaWxlc01hcCA9IHt9O1xuIFx0XHRcdGhvdFdhaXRpbmdGaWxlc01hcCA9IHt9O1xuIFx0XHRcdGhvdEF2YWlsYWJsZUZpbGVzTWFwID0gdXBkYXRlLmM7XG4gXHRcdFx0aG90VXBkYXRlTmV3SGFzaCA9IHVwZGF0ZS5oO1xuXG4gXHRcdFx0aG90U2V0U3RhdHVzKFwicHJlcGFyZVwiKTtcbiBcdFx0XHR2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuIFx0XHRcdFx0aG90RGVmZXJyZWQgPSB7XG4gXHRcdFx0XHRcdHJlc29sdmU6IHJlc29sdmUsXG4gXHRcdFx0XHRcdHJlamVjdDogcmVqZWN0XG4gXHRcdFx0XHR9O1xuIFx0XHRcdH0pO1xuIFx0XHRcdGhvdFVwZGF0ZSA9IHt9O1xuIFx0XHRcdHZhciBjaHVua0lkID0gMDtcbiBcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbG9uZS1ibG9ja3NcbiBcdFx0XHR7XG4gXHRcdFx0XHQvKmdsb2JhbHMgY2h1bmtJZCAqL1xuIFx0XHRcdFx0aG90RW5zdXJlVXBkYXRlQ2h1bmsoY2h1bmtJZCk7XG4gXHRcdFx0fVxuIFx0XHRcdGlmIChcbiBcdFx0XHRcdGhvdFN0YXR1cyA9PT0gXCJwcmVwYXJlXCIgJiZcbiBcdFx0XHRcdGhvdENodW5rc0xvYWRpbmcgPT09IDAgJiZcbiBcdFx0XHRcdGhvdFdhaXRpbmdGaWxlcyA9PT0gMFxuIFx0XHRcdCkge1xuIFx0XHRcdFx0aG90VXBkYXRlRG93bmxvYWRlZCgpO1xuIFx0XHRcdH1cbiBcdFx0XHRyZXR1cm4gcHJvbWlzZTtcbiBcdFx0fSk7XG4gXHR9XG5cbiBcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuIFx0ZnVuY3Rpb24gaG90QWRkVXBkYXRlQ2h1bmsoY2h1bmtJZCwgbW9yZU1vZHVsZXMpIHtcbiBcdFx0aWYgKCFob3RBdmFpbGFibGVGaWxlc01hcFtjaHVua0lkXSB8fCAhaG90UmVxdWVzdGVkRmlsZXNNYXBbY2h1bmtJZF0pXG4gXHRcdFx0cmV0dXJuO1xuIFx0XHRob3RSZXF1ZXN0ZWRGaWxlc01hcFtjaHVua0lkXSA9IGZhbHNlO1xuIFx0XHRmb3IgKHZhciBtb2R1bGVJZCBpbiBtb3JlTW9kdWxlcykge1xuIFx0XHRcdGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9yZU1vZHVsZXMsIG1vZHVsZUlkKSkge1xuIFx0XHRcdFx0aG90VXBkYXRlW21vZHVsZUlkXSA9IG1vcmVNb2R1bGVzW21vZHVsZUlkXTtcbiBcdFx0XHR9XG4gXHRcdH1cbiBcdFx0aWYgKC0taG90V2FpdGluZ0ZpbGVzID09PSAwICYmIGhvdENodW5rc0xvYWRpbmcgPT09IDApIHtcbiBcdFx0XHRob3RVcGRhdGVEb3dubG9hZGVkKCk7XG4gXHRcdH1cbiBcdH1cblxuIFx0ZnVuY3Rpb24gaG90RW5zdXJlVXBkYXRlQ2h1bmsoY2h1bmtJZCkge1xuIFx0XHRpZiAoIWhvdEF2YWlsYWJsZUZpbGVzTWFwW2NodW5rSWRdKSB7XG4gXHRcdFx0aG90V2FpdGluZ0ZpbGVzTWFwW2NodW5rSWRdID0gdHJ1ZTtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRob3RSZXF1ZXN0ZWRGaWxlc01hcFtjaHVua0lkXSA9IHRydWU7XG4gXHRcdFx0aG90V2FpdGluZ0ZpbGVzKys7XG4gXHRcdFx0aG90RG93bmxvYWRVcGRhdGVDaHVuayhjaHVua0lkKTtcbiBcdFx0fVxuIFx0fVxuXG4gXHRmdW5jdGlvbiBob3RVcGRhdGVEb3dubG9hZGVkKCkge1xuIFx0XHRob3RTZXRTdGF0dXMoXCJyZWFkeVwiKTtcbiBcdFx0dmFyIGRlZmVycmVkID0gaG90RGVmZXJyZWQ7XG4gXHRcdGhvdERlZmVycmVkID0gbnVsbDtcbiBcdFx0aWYgKCFkZWZlcnJlZCkgcmV0dXJuO1xuIFx0XHRpZiAoaG90QXBwbHlPblVwZGF0ZSkge1xuIFx0XHRcdC8vIFdyYXAgZGVmZXJyZWQgb2JqZWN0IGluIFByb21pc2UgdG8gbWFyayBpdCBhcyBhIHdlbGwtaGFuZGxlZCBQcm9taXNlIHRvXG4gXHRcdFx0Ly8gYXZvaWQgdHJpZ2dlcmluZyB1bmNhdWdodCBleGNlcHRpb24gd2FybmluZyBpbiBDaHJvbWUuXG4gXHRcdFx0Ly8gU2VlIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTQ2NTY2NlxuIFx0XHRcdFByb21pc2UucmVzb2x2ZSgpXG4gXHRcdFx0XHQudGhlbihmdW5jdGlvbigpIHtcbiBcdFx0XHRcdFx0cmV0dXJuIGhvdEFwcGx5KGhvdEFwcGx5T25VcGRhdGUpO1xuIFx0XHRcdFx0fSlcbiBcdFx0XHRcdC50aGVuKFxuIFx0XHRcdFx0XHRmdW5jdGlvbihyZXN1bHQpIHtcbiBcdFx0XHRcdFx0XHRkZWZlcnJlZC5yZXNvbHZlKHJlc3VsdCk7XG4gXHRcdFx0XHRcdH0sXG4gXHRcdFx0XHRcdGZ1bmN0aW9uKGVycikge1xuIFx0XHRcdFx0XHRcdGRlZmVycmVkLnJlamVjdChlcnIpO1xuIFx0XHRcdFx0XHR9XG4gXHRcdFx0XHQpO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdHZhciBvdXRkYXRlZE1vZHVsZXMgPSBbXTtcbiBcdFx0XHRmb3IgKHZhciBpZCBpbiBob3RVcGRhdGUpIHtcbiBcdFx0XHRcdGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaG90VXBkYXRlLCBpZCkpIHtcbiBcdFx0XHRcdFx0b3V0ZGF0ZWRNb2R1bGVzLnB1c2godG9Nb2R1bGVJZChpZCkpO1xuIFx0XHRcdFx0fVxuIFx0XHRcdH1cbiBcdFx0XHRkZWZlcnJlZC5yZXNvbHZlKG91dGRhdGVkTW9kdWxlcyk7XG4gXHRcdH1cbiBcdH1cblxuIFx0ZnVuY3Rpb24gaG90QXBwbHkob3B0aW9ucykge1xuIFx0XHRpZiAoaG90U3RhdHVzICE9PSBcInJlYWR5XCIpXG4gXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiYXBwbHkoKSBpcyBvbmx5IGFsbG93ZWQgaW4gcmVhZHkgc3RhdHVzXCIpO1xuIFx0XHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuIFx0XHR2YXIgY2I7XG4gXHRcdHZhciBpO1xuIFx0XHR2YXIgajtcbiBcdFx0dmFyIG1vZHVsZTtcbiBcdFx0dmFyIG1vZHVsZUlkO1xuXG4gXHRcdGZ1bmN0aW9uIGdldEFmZmVjdGVkU3R1ZmYodXBkYXRlTW9kdWxlSWQpIHtcbiBcdFx0XHR2YXIgb3V0ZGF0ZWRNb2R1bGVzID0gW3VwZGF0ZU1vZHVsZUlkXTtcbiBcdFx0XHR2YXIgb3V0ZGF0ZWREZXBlbmRlbmNpZXMgPSB7fTtcblxuIFx0XHRcdHZhciBxdWV1ZSA9IG91dGRhdGVkTW9kdWxlcy5zbGljZSgpLm1hcChmdW5jdGlvbihpZCkge1xuIFx0XHRcdFx0cmV0dXJuIHtcbiBcdFx0XHRcdFx0Y2hhaW46IFtpZF0sXG4gXHRcdFx0XHRcdGlkOiBpZFxuIFx0XHRcdFx0fTtcbiBcdFx0XHR9KTtcbiBcdFx0XHR3aGlsZSAocXVldWUubGVuZ3RoID4gMCkge1xuIFx0XHRcdFx0dmFyIHF1ZXVlSXRlbSA9IHF1ZXVlLnBvcCgpO1xuIFx0XHRcdFx0dmFyIG1vZHVsZUlkID0gcXVldWVJdGVtLmlkO1xuIFx0XHRcdFx0dmFyIGNoYWluID0gcXVldWVJdGVtLmNoYWluO1xuIFx0XHRcdFx0bW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF07XG4gXHRcdFx0XHRpZiAoIW1vZHVsZSB8fCBtb2R1bGUuaG90Ll9zZWxmQWNjZXB0ZWQpIGNvbnRpbnVlO1xuIFx0XHRcdFx0aWYgKG1vZHVsZS5ob3QuX3NlbGZEZWNsaW5lZCkge1xuIFx0XHRcdFx0XHRyZXR1cm4ge1xuIFx0XHRcdFx0XHRcdHR5cGU6IFwic2VsZi1kZWNsaW5lZFwiLFxuIFx0XHRcdFx0XHRcdGNoYWluOiBjaGFpbixcbiBcdFx0XHRcdFx0XHRtb2R1bGVJZDogbW9kdWxlSWRcbiBcdFx0XHRcdFx0fTtcbiBcdFx0XHRcdH1cbiBcdFx0XHRcdGlmIChtb2R1bGUuaG90Ll9tYWluKSB7XG4gXHRcdFx0XHRcdHJldHVybiB7XG4gXHRcdFx0XHRcdFx0dHlwZTogXCJ1bmFjY2VwdGVkXCIsXG4gXHRcdFx0XHRcdFx0Y2hhaW46IGNoYWluLFxuIFx0XHRcdFx0XHRcdG1vZHVsZUlkOiBtb2R1bGVJZFxuIFx0XHRcdFx0XHR9O1xuIFx0XHRcdFx0fVxuIFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBtb2R1bGUucGFyZW50cy5sZW5ndGg7IGkrKykge1xuIFx0XHRcdFx0XHR2YXIgcGFyZW50SWQgPSBtb2R1bGUucGFyZW50c1tpXTtcbiBcdFx0XHRcdFx0dmFyIHBhcmVudCA9IGluc3RhbGxlZE1vZHVsZXNbcGFyZW50SWRdO1xuIFx0XHRcdFx0XHRpZiAoIXBhcmVudCkgY29udGludWU7XG4gXHRcdFx0XHRcdGlmIChwYXJlbnQuaG90Ll9kZWNsaW5lZERlcGVuZGVuY2llc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRcdFx0XHRyZXR1cm4ge1xuIFx0XHRcdFx0XHRcdFx0dHlwZTogXCJkZWNsaW5lZFwiLFxuIFx0XHRcdFx0XHRcdFx0Y2hhaW46IGNoYWluLmNvbmNhdChbcGFyZW50SWRdKSxcbiBcdFx0XHRcdFx0XHRcdG1vZHVsZUlkOiBtb2R1bGVJZCxcbiBcdFx0XHRcdFx0XHRcdHBhcmVudElkOiBwYXJlbnRJZFxuIFx0XHRcdFx0XHRcdH07XG4gXHRcdFx0XHRcdH1cbiBcdFx0XHRcdFx0aWYgKG91dGRhdGVkTW9kdWxlcy5pbmRleE9mKHBhcmVudElkKSAhPT0gLTEpIGNvbnRpbnVlO1xuIFx0XHRcdFx0XHRpZiAocGFyZW50LmhvdC5fYWNjZXB0ZWREZXBlbmRlbmNpZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0XHRcdFx0aWYgKCFvdXRkYXRlZERlcGVuZGVuY2llc1twYXJlbnRJZF0pXG4gXHRcdFx0XHRcdFx0XHRvdXRkYXRlZERlcGVuZGVuY2llc1twYXJlbnRJZF0gPSBbXTtcbiBcdFx0XHRcdFx0XHRhZGRBbGxUb1NldChvdXRkYXRlZERlcGVuZGVuY2llc1twYXJlbnRJZF0sIFttb2R1bGVJZF0pO1xuIFx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRcdFx0XHR9XG4gXHRcdFx0XHRcdGRlbGV0ZSBvdXRkYXRlZERlcGVuZGVuY2llc1twYXJlbnRJZF07XG4gXHRcdFx0XHRcdG91dGRhdGVkTW9kdWxlcy5wdXNoKHBhcmVudElkKTtcbiBcdFx0XHRcdFx0cXVldWUucHVzaCh7XG4gXHRcdFx0XHRcdFx0Y2hhaW46IGNoYWluLmNvbmNhdChbcGFyZW50SWRdKSxcbiBcdFx0XHRcdFx0XHRpZDogcGFyZW50SWRcbiBcdFx0XHRcdFx0fSk7XG4gXHRcdFx0XHR9XG4gXHRcdFx0fVxuXG4gXHRcdFx0cmV0dXJuIHtcbiBcdFx0XHRcdHR5cGU6IFwiYWNjZXB0ZWRcIixcbiBcdFx0XHRcdG1vZHVsZUlkOiB1cGRhdGVNb2R1bGVJZCxcbiBcdFx0XHRcdG91dGRhdGVkTW9kdWxlczogb3V0ZGF0ZWRNb2R1bGVzLFxuIFx0XHRcdFx0b3V0ZGF0ZWREZXBlbmRlbmNpZXM6IG91dGRhdGVkRGVwZW5kZW5jaWVzXG4gXHRcdFx0fTtcbiBcdFx0fVxuXG4gXHRcdGZ1bmN0aW9uIGFkZEFsbFRvU2V0KGEsIGIpIHtcbiBcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGIubGVuZ3RoOyBpKyspIHtcbiBcdFx0XHRcdHZhciBpdGVtID0gYltpXTtcbiBcdFx0XHRcdGlmIChhLmluZGV4T2YoaXRlbSkgPT09IC0xKSBhLnB1c2goaXRlbSk7XG4gXHRcdFx0fVxuIFx0XHR9XG5cbiBcdFx0Ly8gYXQgYmVnaW4gYWxsIHVwZGF0ZXMgbW9kdWxlcyBhcmUgb3V0ZGF0ZWRcbiBcdFx0Ly8gdGhlIFwib3V0ZGF0ZWRcIiBzdGF0dXMgY2FuIHByb3BhZ2F0ZSB0byBwYXJlbnRzIGlmIHRoZXkgZG9uJ3QgYWNjZXB0IHRoZSBjaGlsZHJlblxuIFx0XHR2YXIgb3V0ZGF0ZWREZXBlbmRlbmNpZXMgPSB7fTtcbiBcdFx0dmFyIG91dGRhdGVkTW9kdWxlcyA9IFtdO1xuIFx0XHR2YXIgYXBwbGllZFVwZGF0ZSA9IHt9O1xuXG4gXHRcdHZhciB3YXJuVW5leHBlY3RlZFJlcXVpcmUgPSBmdW5jdGlvbiB3YXJuVW5leHBlY3RlZFJlcXVpcmUoKSB7XG4gXHRcdFx0Y29uc29sZS53YXJuKFxuIFx0XHRcdFx0XCJbSE1SXSB1bmV4cGVjdGVkIHJlcXVpcmUoXCIgKyByZXN1bHQubW9kdWxlSWQgKyBcIikgdG8gZGlzcG9zZWQgbW9kdWxlXCJcbiBcdFx0XHQpO1xuIFx0XHR9O1xuXG4gXHRcdGZvciAodmFyIGlkIGluIGhvdFVwZGF0ZSkge1xuIFx0XHRcdGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaG90VXBkYXRlLCBpZCkpIHtcbiBcdFx0XHRcdG1vZHVsZUlkID0gdG9Nb2R1bGVJZChpZCk7XG4gXHRcdFx0XHQvKiogQHR5cGUge1RPRE99ICovXG4gXHRcdFx0XHR2YXIgcmVzdWx0O1xuIFx0XHRcdFx0aWYgKGhvdFVwZGF0ZVtpZF0pIHtcbiBcdFx0XHRcdFx0cmVzdWx0ID0gZ2V0QWZmZWN0ZWRTdHVmZihtb2R1bGVJZCk7XG4gXHRcdFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0XHRyZXN1bHQgPSB7XG4gXHRcdFx0XHRcdFx0dHlwZTogXCJkaXNwb3NlZFwiLFxuIFx0XHRcdFx0XHRcdG1vZHVsZUlkOiBpZFxuIFx0XHRcdFx0XHR9O1xuIFx0XHRcdFx0fVxuIFx0XHRcdFx0LyoqIEB0eXBlIHtFcnJvcnxmYWxzZX0gKi9cbiBcdFx0XHRcdHZhciBhYm9ydEVycm9yID0gZmFsc2U7XG4gXHRcdFx0XHR2YXIgZG9BcHBseSA9IGZhbHNlO1xuIFx0XHRcdFx0dmFyIGRvRGlzcG9zZSA9IGZhbHNlO1xuIFx0XHRcdFx0dmFyIGNoYWluSW5mbyA9IFwiXCI7XG4gXHRcdFx0XHRpZiAocmVzdWx0LmNoYWluKSB7XG4gXHRcdFx0XHRcdGNoYWluSW5mbyA9IFwiXFxuVXBkYXRlIHByb3BhZ2F0aW9uOiBcIiArIHJlc3VsdC5jaGFpbi5qb2luKFwiIC0+IFwiKTtcbiBcdFx0XHRcdH1cbiBcdFx0XHRcdHN3aXRjaCAocmVzdWx0LnR5cGUpIHtcbiBcdFx0XHRcdFx0Y2FzZSBcInNlbGYtZGVjbGluZWRcIjpcbiBcdFx0XHRcdFx0XHRpZiAob3B0aW9ucy5vbkRlY2xpbmVkKSBvcHRpb25zLm9uRGVjbGluZWQocmVzdWx0KTtcbiBcdFx0XHRcdFx0XHRpZiAoIW9wdGlvbnMuaWdub3JlRGVjbGluZWQpXG4gXHRcdFx0XHRcdFx0XHRhYm9ydEVycm9yID0gbmV3IEVycm9yKFxuIFx0XHRcdFx0XHRcdFx0XHRcIkFib3J0ZWQgYmVjYXVzZSBvZiBzZWxmIGRlY2xpbmU6IFwiICtcbiBcdFx0XHRcdFx0XHRcdFx0XHRyZXN1bHQubW9kdWxlSWQgK1xuIFx0XHRcdFx0XHRcdFx0XHRcdGNoYWluSW5mb1xuIFx0XHRcdFx0XHRcdFx0KTtcbiBcdFx0XHRcdFx0XHRicmVhaztcbiBcdFx0XHRcdFx0Y2FzZSBcImRlY2xpbmVkXCI6XG4gXHRcdFx0XHRcdFx0aWYgKG9wdGlvbnMub25EZWNsaW5lZCkgb3B0aW9ucy5vbkRlY2xpbmVkKHJlc3VsdCk7XG4gXHRcdFx0XHRcdFx0aWYgKCFvcHRpb25zLmlnbm9yZURlY2xpbmVkKVxuIFx0XHRcdFx0XHRcdFx0YWJvcnRFcnJvciA9IG5ldyBFcnJvcihcbiBcdFx0XHRcdFx0XHRcdFx0XCJBYm9ydGVkIGJlY2F1c2Ugb2YgZGVjbGluZWQgZGVwZW5kZW5jeTogXCIgK1xuIFx0XHRcdFx0XHRcdFx0XHRcdHJlc3VsdC5tb2R1bGVJZCArXG4gXHRcdFx0XHRcdFx0XHRcdFx0XCIgaW4gXCIgK1xuIFx0XHRcdFx0XHRcdFx0XHRcdHJlc3VsdC5wYXJlbnRJZCArXG4gXHRcdFx0XHRcdFx0XHRcdFx0Y2hhaW5JbmZvXG4gXHRcdFx0XHRcdFx0XHQpO1xuIFx0XHRcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdFx0XHRjYXNlIFwidW5hY2NlcHRlZFwiOlxuIFx0XHRcdFx0XHRcdGlmIChvcHRpb25zLm9uVW5hY2NlcHRlZCkgb3B0aW9ucy5vblVuYWNjZXB0ZWQocmVzdWx0KTtcbiBcdFx0XHRcdFx0XHRpZiAoIW9wdGlvbnMuaWdub3JlVW5hY2NlcHRlZClcbiBcdFx0XHRcdFx0XHRcdGFib3J0RXJyb3IgPSBuZXcgRXJyb3IoXG4gXHRcdFx0XHRcdFx0XHRcdFwiQWJvcnRlZCBiZWNhdXNlIFwiICsgbW9kdWxlSWQgKyBcIiBpcyBub3QgYWNjZXB0ZWRcIiArIGNoYWluSW5mb1xuIFx0XHRcdFx0XHRcdFx0KTtcbiBcdFx0XHRcdFx0XHRicmVhaztcbiBcdFx0XHRcdFx0Y2FzZSBcImFjY2VwdGVkXCI6XG4gXHRcdFx0XHRcdFx0aWYgKG9wdGlvbnMub25BY2NlcHRlZCkgb3B0aW9ucy5vbkFjY2VwdGVkKHJlc3VsdCk7XG4gXHRcdFx0XHRcdFx0ZG9BcHBseSA9IHRydWU7XG4gXHRcdFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0XHRcdGNhc2UgXCJkaXNwb3NlZFwiOlxuIFx0XHRcdFx0XHRcdGlmIChvcHRpb25zLm9uRGlzcG9zZWQpIG9wdGlvbnMub25EaXNwb3NlZChyZXN1bHQpO1xuIFx0XHRcdFx0XHRcdGRvRGlzcG9zZSA9IHRydWU7XG4gXHRcdFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0XHRcdGRlZmF1bHQ6XG4gXHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiVW5leGNlcHRpb24gdHlwZSBcIiArIHJlc3VsdC50eXBlKTtcbiBcdFx0XHRcdH1cbiBcdFx0XHRcdGlmIChhYm9ydEVycm9yKSB7XG4gXHRcdFx0XHRcdGhvdFNldFN0YXR1cyhcImFib3J0XCIpO1xuIFx0XHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QoYWJvcnRFcnJvcik7XG4gXHRcdFx0XHR9XG4gXHRcdFx0XHRpZiAoZG9BcHBseSkge1xuIFx0XHRcdFx0XHRhcHBsaWVkVXBkYXRlW21vZHVsZUlkXSA9IGhvdFVwZGF0ZVttb2R1bGVJZF07XG4gXHRcdFx0XHRcdGFkZEFsbFRvU2V0KG91dGRhdGVkTW9kdWxlcywgcmVzdWx0Lm91dGRhdGVkTW9kdWxlcyk7XG4gXHRcdFx0XHRcdGZvciAobW9kdWxlSWQgaW4gcmVzdWx0Lm91dGRhdGVkRGVwZW5kZW5jaWVzKSB7XG4gXHRcdFx0XHRcdFx0aWYgKFxuIFx0XHRcdFx0XHRcdFx0T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFxuIFx0XHRcdFx0XHRcdFx0XHRyZXN1bHQub3V0ZGF0ZWREZXBlbmRlbmNpZXMsXG4gXHRcdFx0XHRcdFx0XHRcdG1vZHVsZUlkXG4gXHRcdFx0XHRcdFx0XHQpXG4gXHRcdFx0XHRcdFx0KSB7XG4gXHRcdFx0XHRcdFx0XHRpZiAoIW91dGRhdGVkRGVwZW5kZW5jaWVzW21vZHVsZUlkXSlcbiBcdFx0XHRcdFx0XHRcdFx0b3V0ZGF0ZWREZXBlbmRlbmNpZXNbbW9kdWxlSWRdID0gW107XG4gXHRcdFx0XHRcdFx0XHRhZGRBbGxUb1NldChcbiBcdFx0XHRcdFx0XHRcdFx0b3V0ZGF0ZWREZXBlbmRlbmNpZXNbbW9kdWxlSWRdLFxuIFx0XHRcdFx0XHRcdFx0XHRyZXN1bHQub3V0ZGF0ZWREZXBlbmRlbmNpZXNbbW9kdWxlSWRdXG4gXHRcdFx0XHRcdFx0XHQpO1xuIFx0XHRcdFx0XHRcdH1cbiBcdFx0XHRcdFx0fVxuIFx0XHRcdFx0fVxuIFx0XHRcdFx0aWYgKGRvRGlzcG9zZSkge1xuIFx0XHRcdFx0XHRhZGRBbGxUb1NldChvdXRkYXRlZE1vZHVsZXMsIFtyZXN1bHQubW9kdWxlSWRdKTtcbiBcdFx0XHRcdFx0YXBwbGllZFVwZGF0ZVttb2R1bGVJZF0gPSB3YXJuVW5leHBlY3RlZFJlcXVpcmU7XG4gXHRcdFx0XHR9XG4gXHRcdFx0fVxuIFx0XHR9XG5cbiBcdFx0Ly8gU3RvcmUgc2VsZiBhY2NlcHRlZCBvdXRkYXRlZCBtb2R1bGVzIHRvIHJlcXVpcmUgdGhlbSBsYXRlciBieSB0aGUgbW9kdWxlIHN5c3RlbVxuIFx0XHR2YXIgb3V0ZGF0ZWRTZWxmQWNjZXB0ZWRNb2R1bGVzID0gW107XG4gXHRcdGZvciAoaSA9IDA7IGkgPCBvdXRkYXRlZE1vZHVsZXMubGVuZ3RoOyBpKyspIHtcbiBcdFx0XHRtb2R1bGVJZCA9IG91dGRhdGVkTW9kdWxlc1tpXTtcbiBcdFx0XHRpZiAoXG4gXHRcdFx0XHRpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSAmJlxuIFx0XHRcdFx0aW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uaG90Ll9zZWxmQWNjZXB0ZWRcbiBcdFx0XHQpXG4gXHRcdFx0XHRvdXRkYXRlZFNlbGZBY2NlcHRlZE1vZHVsZXMucHVzaCh7XG4gXHRcdFx0XHRcdG1vZHVsZTogbW9kdWxlSWQsXG4gXHRcdFx0XHRcdGVycm9ySGFuZGxlcjogaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uaG90Ll9zZWxmQWNjZXB0ZWRcbiBcdFx0XHRcdH0pO1xuIFx0XHR9XG5cbiBcdFx0Ly8gTm93IGluIFwiZGlzcG9zZVwiIHBoYXNlXG4gXHRcdGhvdFNldFN0YXR1cyhcImRpc3Bvc2VcIik7XG4gXHRcdE9iamVjdC5rZXlzKGhvdEF2YWlsYWJsZUZpbGVzTWFwKS5mb3JFYWNoKGZ1bmN0aW9uKGNodW5rSWQpIHtcbiBcdFx0XHRpZiAoaG90QXZhaWxhYmxlRmlsZXNNYXBbY2h1bmtJZF0gPT09IGZhbHNlKSB7XG4gXHRcdFx0XHRob3REaXNwb3NlQ2h1bmsoY2h1bmtJZCk7XG4gXHRcdFx0fVxuIFx0XHR9KTtcblxuIFx0XHR2YXIgaWR4O1xuIFx0XHR2YXIgcXVldWUgPSBvdXRkYXRlZE1vZHVsZXMuc2xpY2UoKTtcbiBcdFx0d2hpbGUgKHF1ZXVlLmxlbmd0aCA+IDApIHtcbiBcdFx0XHRtb2R1bGVJZCA9IHF1ZXVlLnBvcCgpO1xuIFx0XHRcdG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdO1xuIFx0XHRcdGlmICghbW9kdWxlKSBjb250aW51ZTtcblxuIFx0XHRcdHZhciBkYXRhID0ge307XG5cbiBcdFx0XHQvLyBDYWxsIGRpc3Bvc2UgaGFuZGxlcnNcbiBcdFx0XHR2YXIgZGlzcG9zZUhhbmRsZXJzID0gbW9kdWxlLmhvdC5fZGlzcG9zZUhhbmRsZXJzO1xuIFx0XHRcdGZvciAoaiA9IDA7IGogPCBkaXNwb3NlSGFuZGxlcnMubGVuZ3RoOyBqKyspIHtcbiBcdFx0XHRcdGNiID0gZGlzcG9zZUhhbmRsZXJzW2pdO1xuIFx0XHRcdFx0Y2IoZGF0YSk7XG4gXHRcdFx0fVxuIFx0XHRcdGhvdEN1cnJlbnRNb2R1bGVEYXRhW21vZHVsZUlkXSA9IGRhdGE7XG5cbiBcdFx0XHQvLyBkaXNhYmxlIG1vZHVsZSAodGhpcyBkaXNhYmxlcyByZXF1aXJlcyBmcm9tIHRoaXMgbW9kdWxlKVxuIFx0XHRcdG1vZHVsZS5ob3QuYWN0aXZlID0gZmFsc2U7XG5cbiBcdFx0XHQvLyByZW1vdmUgbW9kdWxlIGZyb20gY2FjaGVcbiBcdFx0XHRkZWxldGUgaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF07XG5cbiBcdFx0XHQvLyB3aGVuIGRpc3Bvc2luZyB0aGVyZSBpcyBubyBuZWVkIHRvIGNhbGwgZGlzcG9zZSBoYW5kbGVyXG4gXHRcdFx0ZGVsZXRlIG91dGRhdGVkRGVwZW5kZW5jaWVzW21vZHVsZUlkXTtcblxuIFx0XHRcdC8vIHJlbW92ZSBcInBhcmVudHNcIiByZWZlcmVuY2VzIGZyb20gYWxsIGNoaWxkcmVuXG4gXHRcdFx0Zm9yIChqID0gMDsgaiA8IG1vZHVsZS5jaGlsZHJlbi5sZW5ndGg7IGorKykge1xuIFx0XHRcdFx0dmFyIGNoaWxkID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGUuY2hpbGRyZW5bal1dO1xuIFx0XHRcdFx0aWYgKCFjaGlsZCkgY29udGludWU7XG4gXHRcdFx0XHRpZHggPSBjaGlsZC5wYXJlbnRzLmluZGV4T2YobW9kdWxlSWQpO1xuIFx0XHRcdFx0aWYgKGlkeCA+PSAwKSB7XG4gXHRcdFx0XHRcdGNoaWxkLnBhcmVudHMuc3BsaWNlKGlkeCwgMSk7XG4gXHRcdFx0XHR9XG4gXHRcdFx0fVxuIFx0XHR9XG5cbiBcdFx0Ly8gcmVtb3ZlIG91dGRhdGVkIGRlcGVuZGVuY3kgZnJvbSBtb2R1bGUgY2hpbGRyZW5cbiBcdFx0dmFyIGRlcGVuZGVuY3k7XG4gXHRcdHZhciBtb2R1bGVPdXRkYXRlZERlcGVuZGVuY2llcztcbiBcdFx0Zm9yIChtb2R1bGVJZCBpbiBvdXRkYXRlZERlcGVuZGVuY2llcykge1xuIFx0XHRcdGlmIChcbiBcdFx0XHRcdE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvdXRkYXRlZERlcGVuZGVuY2llcywgbW9kdWxlSWQpXG4gXHRcdFx0KSB7XG4gXHRcdFx0XHRtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXTtcbiBcdFx0XHRcdGlmIChtb2R1bGUpIHtcbiBcdFx0XHRcdFx0bW9kdWxlT3V0ZGF0ZWREZXBlbmRlbmNpZXMgPSBvdXRkYXRlZERlcGVuZGVuY2llc1ttb2R1bGVJZF07XG4gXHRcdFx0XHRcdGZvciAoaiA9IDA7IGogPCBtb2R1bGVPdXRkYXRlZERlcGVuZGVuY2llcy5sZW5ndGg7IGorKykge1xuIFx0XHRcdFx0XHRcdGRlcGVuZGVuY3kgPSBtb2R1bGVPdXRkYXRlZERlcGVuZGVuY2llc1tqXTtcbiBcdFx0XHRcdFx0XHRpZHggPSBtb2R1bGUuY2hpbGRyZW4uaW5kZXhPZihkZXBlbmRlbmN5KTtcbiBcdFx0XHRcdFx0XHRpZiAoaWR4ID49IDApIG1vZHVsZS5jaGlsZHJlbi5zcGxpY2UoaWR4LCAxKTtcbiBcdFx0XHRcdFx0fVxuIFx0XHRcdFx0fVxuIFx0XHRcdH1cbiBcdFx0fVxuXG4gXHRcdC8vIE5vdCBpbiBcImFwcGx5XCIgcGhhc2VcbiBcdFx0aG90U2V0U3RhdHVzKFwiYXBwbHlcIik7XG5cbiBcdFx0aG90Q3VycmVudEhhc2ggPSBob3RVcGRhdGVOZXdIYXNoO1xuXG4gXHRcdC8vIGluc2VydCBuZXcgY29kZVxuIFx0XHRmb3IgKG1vZHVsZUlkIGluIGFwcGxpZWRVcGRhdGUpIHtcbiBcdFx0XHRpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGFwcGxpZWRVcGRhdGUsIG1vZHVsZUlkKSkge1xuIFx0XHRcdFx0bW9kdWxlc1ttb2R1bGVJZF0gPSBhcHBsaWVkVXBkYXRlW21vZHVsZUlkXTtcbiBcdFx0XHR9XG4gXHRcdH1cblxuIFx0XHQvLyBjYWxsIGFjY2VwdCBoYW5kbGVyc1xuIFx0XHR2YXIgZXJyb3IgPSBudWxsO1xuIFx0XHRmb3IgKG1vZHVsZUlkIGluIG91dGRhdGVkRGVwZW5kZW5jaWVzKSB7XG4gXHRcdFx0aWYgKFxuIFx0XHRcdFx0T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG91dGRhdGVkRGVwZW5kZW5jaWVzLCBtb2R1bGVJZClcbiBcdFx0XHQpIHtcbiBcdFx0XHRcdG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdO1xuIFx0XHRcdFx0aWYgKG1vZHVsZSkge1xuIFx0XHRcdFx0XHRtb2R1bGVPdXRkYXRlZERlcGVuZGVuY2llcyA9IG91dGRhdGVkRGVwZW5kZW5jaWVzW21vZHVsZUlkXTtcbiBcdFx0XHRcdFx0dmFyIGNhbGxiYWNrcyA9IFtdO1xuIFx0XHRcdFx0XHRmb3IgKGkgPSAwOyBpIDwgbW9kdWxlT3V0ZGF0ZWREZXBlbmRlbmNpZXMubGVuZ3RoOyBpKyspIHtcbiBcdFx0XHRcdFx0XHRkZXBlbmRlbmN5ID0gbW9kdWxlT3V0ZGF0ZWREZXBlbmRlbmNpZXNbaV07XG4gXHRcdFx0XHRcdFx0Y2IgPSBtb2R1bGUuaG90Ll9hY2NlcHRlZERlcGVuZGVuY2llc1tkZXBlbmRlbmN5XTtcbiBcdFx0XHRcdFx0XHRpZiAoY2IpIHtcbiBcdFx0XHRcdFx0XHRcdGlmIChjYWxsYmFja3MuaW5kZXhPZihjYikgIT09IC0xKSBjb250aW51ZTtcbiBcdFx0XHRcdFx0XHRcdGNhbGxiYWNrcy5wdXNoKGNiKTtcbiBcdFx0XHRcdFx0XHR9XG4gXHRcdFx0XHRcdH1cbiBcdFx0XHRcdFx0Zm9yIChpID0gMDsgaSA8IGNhbGxiYWNrcy5sZW5ndGg7IGkrKykge1xuIFx0XHRcdFx0XHRcdGNiID0gY2FsbGJhY2tzW2ldO1xuIFx0XHRcdFx0XHRcdHRyeSB7XG4gXHRcdFx0XHRcdFx0XHRjYihtb2R1bGVPdXRkYXRlZERlcGVuZGVuY2llcyk7XG4gXHRcdFx0XHRcdFx0fSBjYXRjaCAoZXJyKSB7XG4gXHRcdFx0XHRcdFx0XHRpZiAob3B0aW9ucy5vbkVycm9yZWQpIHtcbiBcdFx0XHRcdFx0XHRcdFx0b3B0aW9ucy5vbkVycm9yZWQoe1xuIFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU6IFwiYWNjZXB0LWVycm9yZWRcIixcbiBcdFx0XHRcdFx0XHRcdFx0XHRtb2R1bGVJZDogbW9kdWxlSWQsXG4gXHRcdFx0XHRcdFx0XHRcdFx0ZGVwZW5kZW5jeUlkOiBtb2R1bGVPdXRkYXRlZERlcGVuZGVuY2llc1tpXSxcbiBcdFx0XHRcdFx0XHRcdFx0XHRlcnJvcjogZXJyXG4gXHRcdFx0XHRcdFx0XHRcdH0pO1xuIFx0XHRcdFx0XHRcdFx0fVxuIFx0XHRcdFx0XHRcdFx0aWYgKCFvcHRpb25zLmlnbm9yZUVycm9yZWQpIHtcbiBcdFx0XHRcdFx0XHRcdFx0aWYgKCFlcnJvcikgZXJyb3IgPSBlcnI7XG4gXHRcdFx0XHRcdFx0XHR9XG4gXHRcdFx0XHRcdFx0fVxuIFx0XHRcdFx0XHR9XG4gXHRcdFx0XHR9XG4gXHRcdFx0fVxuIFx0XHR9XG5cbiBcdFx0Ly8gTG9hZCBzZWxmIGFjY2VwdGVkIG1vZHVsZXNcbiBcdFx0Zm9yIChpID0gMDsgaSA8IG91dGRhdGVkU2VsZkFjY2VwdGVkTW9kdWxlcy5sZW5ndGg7IGkrKykge1xuIFx0XHRcdHZhciBpdGVtID0gb3V0ZGF0ZWRTZWxmQWNjZXB0ZWRNb2R1bGVzW2ldO1xuIFx0XHRcdG1vZHVsZUlkID0gaXRlbS5tb2R1bGU7XG4gXHRcdFx0aG90Q3VycmVudFBhcmVudHMgPSBbbW9kdWxlSWRdO1xuIFx0XHRcdHRyeSB7XG4gXHRcdFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKTtcbiBcdFx0XHR9IGNhdGNoIChlcnIpIHtcbiBcdFx0XHRcdGlmICh0eXBlb2YgaXRlbS5lcnJvckhhbmRsZXIgPT09IFwiZnVuY3Rpb25cIikge1xuIFx0XHRcdFx0XHR0cnkge1xuIFx0XHRcdFx0XHRcdGl0ZW0uZXJyb3JIYW5kbGVyKGVycik7XG4gXHRcdFx0XHRcdH0gY2F0Y2ggKGVycjIpIHtcbiBcdFx0XHRcdFx0XHRpZiAob3B0aW9ucy5vbkVycm9yZWQpIHtcbiBcdFx0XHRcdFx0XHRcdG9wdGlvbnMub25FcnJvcmVkKHtcbiBcdFx0XHRcdFx0XHRcdFx0dHlwZTogXCJzZWxmLWFjY2VwdC1lcnJvci1oYW5kbGVyLWVycm9yZWRcIixcbiBcdFx0XHRcdFx0XHRcdFx0bW9kdWxlSWQ6IG1vZHVsZUlkLFxuIFx0XHRcdFx0XHRcdFx0XHRlcnJvcjogZXJyMixcbiBcdFx0XHRcdFx0XHRcdFx0b3JpZ2luYWxFcnJvcjogZXJyXG4gXHRcdFx0XHRcdFx0XHR9KTtcbiBcdFx0XHRcdFx0XHR9XG4gXHRcdFx0XHRcdFx0aWYgKCFvcHRpb25zLmlnbm9yZUVycm9yZWQpIHtcbiBcdFx0XHRcdFx0XHRcdGlmICghZXJyb3IpIGVycm9yID0gZXJyMjtcbiBcdFx0XHRcdFx0XHR9XG4gXHRcdFx0XHRcdFx0aWYgKCFlcnJvcikgZXJyb3IgPSBlcnI7XG4gXHRcdFx0XHRcdH1cbiBcdFx0XHRcdH0gZWxzZSB7XG4gXHRcdFx0XHRcdGlmIChvcHRpb25zLm9uRXJyb3JlZCkge1xuIFx0XHRcdFx0XHRcdG9wdGlvbnMub25FcnJvcmVkKHtcbiBcdFx0XHRcdFx0XHRcdHR5cGU6IFwic2VsZi1hY2NlcHQtZXJyb3JlZFwiLFxuIFx0XHRcdFx0XHRcdFx0bW9kdWxlSWQ6IG1vZHVsZUlkLFxuIFx0XHRcdFx0XHRcdFx0ZXJyb3I6IGVyclxuIFx0XHRcdFx0XHRcdH0pO1xuIFx0XHRcdFx0XHR9XG4gXHRcdFx0XHRcdGlmICghb3B0aW9ucy5pZ25vcmVFcnJvcmVkKSB7XG4gXHRcdFx0XHRcdFx0aWYgKCFlcnJvcikgZXJyb3IgPSBlcnI7XG4gXHRcdFx0XHRcdH1cbiBcdFx0XHRcdH1cbiBcdFx0XHR9XG4gXHRcdH1cblxuIFx0XHQvLyBoYW5kbGUgZXJyb3JzIGluIGFjY2VwdCBoYW5kbGVycyBhbmQgc2VsZiBhY2NlcHRlZCBtb2R1bGUgbG9hZFxuIFx0XHRpZiAoZXJyb3IpIHtcbiBcdFx0XHRob3RTZXRTdGF0dXMoXCJmYWlsXCIpO1xuIFx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gXHRcdH1cblxuIFx0XHRob3RTZXRTdGF0dXMoXCJpZGxlXCIpO1xuIFx0XHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSkge1xuIFx0XHRcdHJlc29sdmUob3V0ZGF0ZWRNb2R1bGVzKTtcbiBcdFx0fSk7XG4gXHR9XG5cbiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9LFxuIFx0XHRcdGhvdDogaG90Q3JlYXRlTW9kdWxlKG1vZHVsZUlkKSxcbiBcdFx0XHRwYXJlbnRzOiAoaG90Q3VycmVudFBhcmVudHNUZW1wID0gaG90Q3VycmVudFBhcmVudHMsIGhvdEN1cnJlbnRQYXJlbnRzID0gW10sIGhvdEN1cnJlbnRQYXJlbnRzVGVtcCksXG4gXHRcdFx0Y2hpbGRyZW46IFtdXG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIGhvdENyZWF0ZVJlcXVpcmUobW9kdWxlSWQpKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcImRpc3QvXCI7XG5cbiBcdC8vIF9fd2VicGFja19oYXNoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18uaCA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gaG90Q3VycmVudEhhc2g7IH07XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gaG90Q3JlYXRlUmVxdWlyZSgxMCkoX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMTApO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBSZWFjdDsiLCIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE3IE51bWJlckZvdXIgQUcuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzXG4gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjBcbiAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0XG4gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbFxuICpcbiAqIENvbnRyaWJ1dG9yczpcbiAqICAgTnVtYmVyRm91ciBBRyAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvblxuICovXG5pbXBvcnQgXCIuL3J0L040QnVpbHRJbkNsYXNzZXMuanNcIjtcbmltcG9ydCBcIi4vcnQvTjRSdW50aW1lQm9vdHN0cmFwLmpzXCI7XG5cbihmdW5jdGlvbihnbG9iYWwpIHtcbiAgICBcInVzZSBzdHJpY3RcIjtcblxuICAgIC8vIFRPRE86IHdpbGwgYmUgcmVtb3ZlZCBvbmNlIHRoZSBwYXJzZXIgY291bGQgcHJvcGVybHkgc3VwcG9ydCBnbG9iYWwgYGltcG9ydGAuXG4gICAgLy8ganVzdCBmb3IgaW1tZWRpYXRlIGV4ZWN1dGlvbiB3aXRob3V0IGNvbXBpbGUgc3RlcFxuICAgIGdsb2JhbC5fbjRqc0ltcG9ydCA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgICAgICAgcmV0dXJuIGltcG9ydChwYXRoKTtcbiAgICB9O1xuXG59KHR5cGVvZiBnbG9iYWwgPT09IFwib2JqZWN0XCIgPyBnbG9iYWwgOiBzZWxmKSk7XG4iLCJ2YXIgZztcblxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcbmcgPSAoZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzO1xufSkoKTtcblxudHJ5IHtcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXG5cdGcgPSBnIHx8IG5ldyBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XG59IGNhdGNoIChlKSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXG5cdGlmICh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKSBnID0gd2luZG93O1xufVxuXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXG4vLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGc7XG4iLCIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gUmVhY3RET007IiwiLypcbiAqIENvcHlyaWdodCAoYykgMjAxNyBOdW1iZXJGb3VyIEFHLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFsc1xuICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wXG4gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdFxuICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWxcbiAqXG4gKiBDb250cmlidXRvcnM6XG4gKiAgIE51bWJlckZvdXIgQUcgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb25cbiAqL1xuLyplc2xpbnQtZGlzYWJsZSBuby1wcm90bywgbmV3LWNhcCAqL1xuLypnbG9iYWwgJG1ha2VDbGFzcyAqL1xuXG4oZnVuY3Rpb24gKGdsb2JhbCkge1xuICAgIFwidXNlIHN0cmljdFwiO1xuXG4gICAgLyoqXG4gICAgICogU2ltaWxhciB0byB7QGxpbmsgJG1ha2VDbGFzc30gd2l0aG91dCBuNHR5cGUgbWV0YSBjbGFzcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjdG9yIC0gVGhlIGNvbnN0cnVjdG9yIGZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHN1cGVyQ3RvciAtIFRoZSBjb25zdHJ1Y3RvciBmdW5jdGlvbiBvZiB0aGUgc3VwZXIgY2xhc3NcbiAgICAgKiBAcGFyYW0gaW5zdGFuY2VNZXRob2RzIC0gQW4gb2JqZWN0IGhvbGRpbmcgdGhlIG1ldGhvZHMgZm9yIHRoZSBjbGFzcyBpbnN0YW5jZSBhbmQgbWl4ZWQgaW4gbWV0aG9kc1xuICAgICAqIEBwYXJhbSBzdGF0aWNNZXRob2RzIC0gQW4gb2JqZWN0IGhvbGRpbmcgdGhlIGRlc2NyaXB0b3JzIGZvciB0aGUgY2xhc3Mgc3RhdGljIG1ldGhvZHNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiAkbWFrZU40QnVpbHRJbkNsYXNzKGN0b3IsIHN1cGVyQ3RvciwgaW5zdGFuY2VNZXRob2RzLCBzdGF0aWNNZXRob2RzKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc3VwZXJDdG9yID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihjdG9yLCBzdXBlckN0b3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN1cGVyQ3RvciA9PT0gRXJyb3IpIHtcbiAgICAgICAgICAgIGluc3RhbmNlTWV0aG9kcy5zdGFjayA9IHsgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMuJF9fbjRlcnIuc3RhY2s7IH0gfTtcbiAgICAgICAgICAgIGluc3RhbmNlTWV0aG9kcy5tZXNzYWdlID0geyBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy4kX19uNGVyci5tZXNzYWdlOyB9IH07XG4gICAgICAgICAgICBpbnN0YW5jZU1ldGhvZHMubmFtZSA9IHsgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIGN0b3IubjR0eXBlLm5hbWU7IH0gfTtcbiAgICAgICAgfVxuXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGN0b3IsIHN0YXRpY01ldGhvZHMpO1xuXG4gICAgICAgIHZhciBwcm90byA9IE9iamVjdC5jcmVhdGUoc3VwZXJDdG9yLnByb3RvdHlwZSwgaW5zdGFuY2VNZXRob2RzKTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3RvLCBcImNvbnN0cnVjdG9yXCIsIHsgdmFsdWU6IGN0b3IgfSk7XG5cbiAgICAgICAgY3Rvci5wcm90b3R5cGUgPSBwcm90bztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgbWV0YSBpbmZvcm1hdGlvbiBmb3IgTjRCdWlsdEluQ2xhc3NlcyBpLmUuXG4gICAgICogLSBiaW5kIG40VHlwZSBwcm9wZXJ0eSBvZiBjdG9yIHRvIGluc3RhbmNlIG9mIChtZXRhKSBONENsYXNzXG4gICAgICogLSBiaW5kIG93bmVkTWVtYmVycyAobWV0YSkgTjRDbGFzcyB0byB0aGF0IGluc3RhbmNlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY3RvciAtIFRoZSBjb25zdHJ1Y3RvciBmdW5jdGlvbiBvZiBONEJ1aWx0SW5DbGFzcyB0aGF0IHdpbGwgYmUgZW5yaWNoZWQgd2l0aCBtZXRhIGluZm9cbiAgICAgKiBAcGFyYW0gbjR0eXBlIC0gVGhlIGluc3RhbmNlIG9mIE40Q2xhc3MgZGVzY3JpYmluZyBtZXRhIGluZm8gb2YgZ2l2ZW4gTjRCdWlsdEluQ2xhc3MgKHNwZWNpZmllZCBieSBwcm92aWRlZCBjdG9yKVxuICAgICAqL1xuICAgIGZ1bmN0aW9uICRjcmVhdGVNZXRhSW5mbyhjdG9yLCBtZXRhQ2xhc3MpIHtcbiAgICAgICAgLy9iaW5kIG40VHlwZSBwcm9wZXJ0eSBtZXRhY2xhc3MgaW5zdGFuY2VcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGN0b3IsICduNHR5cGUnLCB7XG4gICAgICAgICAgICB2YWx1ZTogbWV0YUNsYXNzLFxuICAgICAgICAgICAgZW51bWVyYWJsZTogZmFsc2VcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy9iaW5kIG1ldGEgY2xhc3MgaW5zdGFuY2UgbWVtYmVycyB0byB0aGF0IGluc3RhbmNlIChzbyBtZW1iZXItPm93bmVyKVxuICAgICAgICAvLyhvd25lci0+bWVtYmVyIHJlbGF0aW9uIGlzIHNldCB3aGVuIGNyZWF0aW5nIGluc3RhbmNlIG9mIHRoZSBtZXRhIGNsYXNzKVxuICAgICAgICBtZXRhQ2xhc3Mub3duZWRNZW1iZXJzLmZvckVhY2goZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtLCAnb3duZXInLCB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IG1ldGFDbGFzcyxcbiAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vYmluZCBvd25lZCBONE1ldGhvZHMgKG9mIHRoZSBtZXRhIGNsYXNzKSB0byBGdW5jdGlvbnMgKHRoZWlyIGNvbnN0cnVjdG9ycykgYW5kIHZpY2VWZXJzYVxuICAgICAgICBtZXRhQ2xhc3Mub3duZWRNZW1iZXJzLmZvckVhY2goZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgICAgIGlmIChtIGluc3RhbmNlb2YgTjRNZXRob2QpIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobSwgJ2pzRnVuY3Rpb24nLCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBtLmNvbnN0cnVjdG9yLFxuICAgICAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIG0uY29uc3RydWN0b3IubjRtZW1iZXIgPSBtO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZWZpbmVUYXJnZXRQcm9wKGFubm90YXRpb24pIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGFubm90YXRpb24sIFwidGFyZ2V0XCIsIHsgdmFsdWU6IHRoaXMsIGVudW1lcmFibGU6IGZhbHNlIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzZXRUYXJnZXRPZkFubm90YXRpb25zKHRhcmdldCkge1xuICAgICAgICBpZiAodGFyZ2V0LmFubm90YXRpb25zKSB7XG4gICAgICAgICAgICB0YXJnZXQuYW5ub3RhdGlvbnMuZm9yRWFjaChkZWZpbmVUYXJnZXRQcm9wLCB0YXJnZXQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gPT09PT0gZGVmaW5lIGZ1bmN0aW9ucyB1c2VkIGxhdGVyIGFzIGN0b3JzIG9mIE40QnVpbHRJbkNsYXNzZXNcblxuICAgIHZhciBONE9iamVjdCA9IGZ1bmN0aW9uIE40T2JqZWN0KHNwZWMpIHtcbiAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIHNwZWMpO1xuICAgICAgICAvLyBkZWZpbmVkIGluIHR5cGVzIG1vZGVsLCBhZGRlZCBieSAkY3JlYXRlTWV0YUluZm9cbiAgICAgICAgLyogcHVibGljIHN0YXRpYyBONENsYXNzIGdldCBuNHR5cGUoKSB7IHJldHVybiBudWxsOyB9ICovXG4gICAgfTtcblxuICAgIHZhciBONEVsZW1lbnQgPSBmdW5jdGlvbiBONEVsZW1lbnQoc3BlYykge1xuICAgICAgICBONE9iamVjdC5wcm90b3R5cGUuY29uc3RydWN0b3IuY2FsbCh0aGlzLCBzcGVjKTtcbiAgICAgICAgdGhpcy5vcmlnaW4gPSBzcGVjLm9yaWdpbjtcbiAgICAgICAgdGhpcy5hbm5vdGF0aW9ucyA9IHNwZWMuYW5ub3RhdGlvbnMgfHwgW107XG4gICAgICAgIHNldFRhcmdldE9mQW5ub3RhdGlvbnModGhpcyk7XG4gICAgfTtcblxuICAgIHZhciBONE5hbWVkRWxlbWVudCA9IGZ1bmN0aW9uIE40TmFtZWRFbGVtZW50KHNwZWMpIHtcbiAgICAgICAgTjRFbGVtZW50LnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIHNwZWMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBzcGVjLm5hbWU7XG4gICAgfTtcblxuICAgIHZhciBONFR5cGUgPSBmdW5jdGlvbiBONFR5cGUoc3BlYykge1xuICAgICAgICBONE5hbWVkRWxlbWVudC5wcm90b3R5cGUuY29uc3RydWN0b3IuY2FsbCh0aGlzLCBzcGVjKTtcbiAgICAgICAgdGhpcy5mcW4gPSBzcGVjLmZxbjtcbiAgICB9O1xuXG4gICAgdmFyIE40Q2xhc3NpZmllciA9IGZ1bmN0aW9uIE40Q2xhc3NpZmllcihzcGVjKSB7XG4gICAgICAgIE40VHlwZS5wcm90b3R5cGUuY29uc3RydWN0b3IuY2FsbCh0aGlzLCBzcGVjKTtcbiAgICAgICAgdGhpcy5uNHN1cGVyVHlwZSA9IHNwZWMubjRzdXBlclR5cGU7XG4gICAgICAgIHRoaXMuYWxsSW1wbGVtZW50ZWRJbnRlcmZhY2VzID0gc3BlYy5hbGxJbXBsZW1lbnRlZEludGVyZmFjZXM7XG4gICAgICAgIHRoaXMuYW5ub3RhdGlvbnMgPSBzcGVjLmFubm90YXRpb25zO1xuICAgICAgICB0aGlzLm93bmVkTWVtYmVycyA9IHNwZWMub3duZWRNZW1iZXJzIHx8IFtdO1xuICAgICAgICB0aGlzLmNvbnN1bWVkTWVtYmVycyA9IHNwZWMuY29uc3VtZWRNZW1iZXJzIHx8IFtdOyAvL3dlIGtub3cgaXQgaXMgZW1wdHkgYXJyYXlcblxuICAgICAgICB0aGlzLm93bmVkTWVtYmVycy5mb3JFYWNoKGZ1bmN0aW9uKG0pIHtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtLCAnb3duZXInLCB7IHZhbHVlOiB0aGlzLCBlbnVtZXJhYmxlOiBmYWxzZSB9KTtcbiAgICAgICAgICAgIHNldFRhcmdldE9mQW5ub3RhdGlvbnMobSk7XG4gICAgICAgIH0sIHRoaXMpO1xuICAgIH07XG5cbiAgICB2YXIgTjRDbGFzcyA9IGZ1bmN0aW9uIE40Q2xhc3Moc3BlYykge1xuICAgICAgICBONENsYXNzaWZpZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgc3BlYyk7XG4gICAgfTtcblxuICAgIHZhciBONEludGVyZmFjZSA9IGZ1bmN0aW9uIE40SW50ZXJmYWNlKHNwZWMpIHtcbiAgICAgICAgTjRDbGFzc2lmaWVyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIHNwZWMpO1xuICAgIH07XG5cbiAgICB2YXIgTjRNZW1iZXIgPSBmdW5jdGlvbiBONE1lbWJlcihzcGVjKSB7XG4gICAgICAgIE40TmFtZWRFbGVtZW50LnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIHNwZWMpO1xuICAgICAgICB0aGlzLm93bmVyID0gc3BlYy5vd25lcjtcbiAgICAgICAgdGhpcy5pc1N0YXRpYyA9IHNwZWMuaXNTdGF0aWMgfHwgZmFsc2U7XG4gICAgfTtcblxuICAgIHZhciBONE1ldGhvZCA9IGZ1bmN0aW9uIE40TWV0aG9kKHNwZWMpIHtcbiAgICAgICAgTjRNZW1iZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgc3BlYyk7XG4gICAgICAgIHRoaXMuanNGdW5jdGlvbiA9IHNwZWMuanNGdW5jdGlvbjtcbiAgICB9O1xuXG4gICAgdmFyIE40RGF0YUZpZWxkID0gZnVuY3Rpb24gTjREYXRhRmllbGQoc3BlYykge1xuICAgICAgICBONE1lbWJlci5wcm90b3R5cGUuY29uc3RydWN0b3IuY2FsbCh0aGlzLCBzcGVjKTtcbiAgICB9O1xuXG4gICAgdmFyIE40QWNjZXNzb3IgPSBmdW5jdGlvbiBONEFjY2Vzc29yKHNwZWMpIHtcbiAgICAgICAgTjRNZW1iZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgc3BlYyk7XG4gICAgICAgIHRoaXMuZ2V0dGVyID0gc3BlYy5nZXR0ZXI7XG4gICAgfTtcblxuICAgIHZhciBONEVudW1UeXBlID0gZnVuY3Rpb24gTjRFbnVtVHlwZShzcGVjKSB7XG4gICAgICAgIE40VHlwZS5wcm90b3R5cGUuY29uc3RydWN0b3IuY2FsbCh0aGlzLCBzcGVjKTtcbiAgICB9O1xuXG4gICAgdmFyIE40RW51bSA9IGZ1bmN0aW9uIE40RW51bShzcGVjKSB7XG4gICAgICAgIE9iamVjdC5wcm90b3R5cGUuY29uc3RydWN0b3IuY2FsbCh0aGlzLCBzcGVjKTtcbiAgICB9O1xuXG4gICAgdmFyIE40U3RyaW5nQmFzZWRFbnVtVHlwZSA9IGZ1bmN0aW9uIE40U3RyaW5nQmFzZWRFbnVtVHlwZShzcGVjKSB7XG4gICAgICAgIE40VHlwZS5wcm90b3R5cGUuY29uc3RydWN0b3IuY2FsbCh0aGlzLCBzcGVjKTtcbiAgICB9O1xuXG4gICAgdmFyIE40U3RyaW5nQmFzZWRFbnVtID0gZnVuY3Rpb24gTjRTdHJpbmdCYXNlZEVudW0oc3BlYykge1xuICAgICAgICBPYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgc3BlYyk7XG4gICAgfTtcblxuICAgIHZhciBONEFubm90YXRpb24gPSBmdW5jdGlvbiBONEFubm90YXRpb24oc3BlYykge1xuICAgICAgICBONE9iamVjdC5wcm90b3R5cGUuY29uc3RydWN0b3IuY2FsbCh0aGlzLCBzcGVjKTtcbiAgICAgICAgdGhpcy5uYW1lID0gc3BlYy5uYW1lO1xuICAgICAgICB0aGlzLmRldGFpbHMgPSBzcGVjLmRldGFpbHM7XG4gICAgICAgIHRoaXMudGFyZ2V0ID0gc3BlYy50YXJnZXQ7XG4gICAgfTtcblxuICAgIHZhciBONFByb3ZpZGVyID0gZnVuY3Rpb24gTjRQcm92aWRlcihzcGVjKSB7XG4gICAgICAgIE9iamVjdC5wcm90b3R5cGUuY29uc3RydWN0b3IuY2FsbCh0aGlzLCBzcGVjKTtcbiAgICB9O1xuXG4gICAgdmFyIE40QXBpTm90SW1wbGVtZW50ZWRFcnJvciA9IGZ1bmN0aW9uIE40QXBpTm90SW1wbGVtZW50ZWRFcnJvcihzcGVjKSB7XG4gICAgICAgIHRoaXMuJF9fbjRlcnIgPSBuZXcgRXJyb3Ioc3BlYyk7XG4gICAgfTtcblxuICAgIC8vIE40SURMLXJlbGF0ZWQgYnVpbHQtaW4gdHlwZXNcbiAgICB2YXIgTWlncmF0aW9uQ29udHJvbGxlciA9IGZ1bmN0aW9uIE1pZ3JhdGlvbkNvbnRyb2xsZXIoc3BlYykge1xuICAgICAgICBPYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgc3BlYyk7XG4gICAgfVxuXG4gICAgdmFyIE1pZ3JhdGlvbkNvbnRleHQgPSBmdW5jdGlvbiBNaWdyYXRpb25Db250ZXh0KHNwZWMpIHtcbiAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIHNwZWMpO1xuICAgIH1cblxuICAgIC8vID09PT09IG1ha2UgTjRCdWlsdEluQ2xhc3NlcyAodHJhbnNmb3JtIGN0b3IgZnVuY3Rpb25zIHRvIHdvcmsgYXMgQ2xhc3NlcylcblxuICAgICRtYWtlTjRCdWlsdEluQ2xhc3MoTjRPYmplY3QsIE9iamVjdCwge30sIHt9KTtcblxuICAgICRtYWtlTjRCdWlsdEluQ2xhc3MoTjRFbGVtZW50LCBONE9iamVjdCwge1xuICAgICAgICBoYXNBbm5vdGF0aW9uOiB7XG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb25cbiAgICAgICAgICAgIGhhc0Fubm90YXRpb24obmFtZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFubm90YXRpb25zLnNvbWUoZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEubmFtZSA9PT0gbmFtZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgYW55QW5ub3RhdGlvbjoge1xuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uXG4gICAgICAgICAgICBhbnlBbm5vdGF0aW9uKG5hbWUpIHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5hbm5vdGF0aW9ucy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IHRoaXMuYW5ub3RhdGlvbnNbaV07XG4gICAgICAgICAgICAgICAgICAgIGlmIChhLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBhbGxBbm5vdGF0aW9uczoge1xuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uXG4gICAgICAgICAgICBhbGxBbm5vdGF0aW9ucyhuYW1lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYW5ub3RhdGlvbnMuZmlsdGVyKGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhLm5hbWUgPT09IG5hbWU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCB7fSk7XG5cbiAgICAkbWFrZU40QnVpbHRJbkNsYXNzKE40TmFtZWRFbGVtZW50LCBONEVsZW1lbnQsIHt9LCB7fSk7XG5cbiAgICAkbWFrZU40QnVpbHRJbkNsYXNzKE40VHlwZSwgTjROYW1lZEVsZW1lbnQsIHtcbiAgICAgICAgaXNDbGFzczoge1xuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvblxuICAgICAgICAgICAgZ2V0SXNDbGFzcygpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgaXNJbnRlcmZhY2U6IHtcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb25cbiAgICAgICAgICAgIGdldElzSW50ZXJmYWNlKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgaXNFbnVtOiB7XG4gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uXG4gICAgICAgICAgICBnZXRJc0VudW0oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSwge1xuICAgICAgICBvZjoge1xuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIG9mKG40b2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG40b2JqZWN0ID8gbjRvYmplY3QubjR0eXBlIHx8IG40b2JqZWN0LmNvbnN0cnVjdG9yLm40dHlwZSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgJG1ha2VONEJ1aWx0SW5DbGFzcyhONENsYXNzaWZpZXIsIE40VHlwZSwge1xuICAgICAgICBtZW1iZXJzOiB7XG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gbWVtYmVycyhjb25zdW1lZCwgaW5oZXJpdGVkLCBfc3RhdGljKSB7XG4gICAgICAgICAgICAgICAgdmFyIGFyciA9IHRoaXMub3duZWRNZW1iZXJzLnNsaWNlKCk7XG4gICAgICAgICAgICAgICAgaWYgKGNvbnN1bWVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyciA9IGFyci5jb25jYXQodGhpcy5jb25zdW1lZE1lbWJlcnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaW5oZXJpdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm40c3VwZXJUeXBlIGluc3RhbmNlb2YgTjRDbGFzc2lmaWVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG1wID0gdGhpcy5uNHN1cGVyVHlwZS5tZW1iZXJzKGNvbnN1bWVkLCBpbmhlcml0ZWQsIF9zdGF0aWMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJyID0gYXJyLmNvbmNhdCh0bXApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghX3N0YXRpYykge1xuICAgICAgICAgICAgICAgICAgICBhcnIgPSBhcnIuZmlsdGVyKGZ1bmN0aW9uIChtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIW0uaXNTdGF0aWM7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYXJyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtZW1iZXJzV2l0aEFubm90YXRpb246IHtcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBtZW1iZXJzV2l0aEFubm90YXRpb24obmFtZSwgY29uc3VtZWQsIGluaGVyaXRlZCwgX3N0YXRpYykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1lbWJlcnMoY29uc3VtZWQsIGluaGVyaXRlZCwgX3N0YXRpYykuZmlsdGVyKGZ1bmN0aW9uIChtKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtLmhhc0Fubm90YXRpb24obmFtZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGRhdGFGaWVsZHM6IHtcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBkYXRhRmllbGRzKGNvbnN1bWVkLCBpbmhlcml0ZWQsIF9zdGF0aWMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tZW1iZXJzKGNvbnN1bWVkLCBpbmhlcml0ZWQsIF9zdGF0aWMpLmZpbHRlcihmdW5jdGlvbiAobSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbSBpbnN0YW5jZW9mIE40RGF0YUZpZWxkO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBkYXRhRmllbGRzV2l0aEFubm90YXRpb246IHtcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBkYXRhRmllbGRzV2l0aEFubm90YXRpb24obmFtZSwgY29uc3VtZWQsIGluaGVyaXRlZCwgX3N0YXRpYykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1lbWJlcnNXaXRoQW5ub3RhdGlvbihuYW1lLCBjb25zdW1lZCwgaW5oZXJpdGVkLCBfc3RhdGljKS5maWx0ZXIoZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG0gaW5zdGFuY2VvZiBONERhdGFGaWVsZDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWV0aG9kczoge1xuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIG1ldGhvZHMoY29uc3VtZWQsIGluaGVyaXRlZCwgX3N0YXRpYykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1lbWJlcnMoY29uc3VtZWQsIGluaGVyaXRlZCwgX3N0YXRpYykuZmlsdGVyKGZ1bmN0aW9uIChtKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtIGluc3RhbmNlb2YgTjRNZXRob2Q7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1ldGhvZHNXaXRoQW5ub3RhdGlvbjoge1xuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uXG4gICAgICAgICAgICBtZXRob2RzV2l0aEFubm90YXRpb24obmFtZSwgY29uc3VtZWQsIGluaGVyaXRlZCwgX3N0YXRpYykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1lbWJlcnNXaXRoQW5ub3RhdGlvbihuYW1lLCBjb25zdW1lZCwgaW5oZXJpdGVkLCBfc3RhdGljKS5maWx0ZXIoZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG0gaW5zdGFuY2VvZiBONE1ldGhvZDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sIHt9KTtcblxuICAgICRtYWtlTjRCdWlsdEluQ2xhc3MoTjRDbGFzcywgTjRDbGFzc2lmaWVyLCB7XG4gICAgICAgIGlzQ2xhc3M6IHtcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb25cbiAgICAgICAgICAgIGdldElzQ2xhc3MoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCB7fSk7XG5cbiAgICAkbWFrZU40QnVpbHRJbkNsYXNzKE40SW50ZXJmYWNlLCBONENsYXNzaWZpZXIsIHtcbiAgICAgICAgaXNJbnRlcmZhY2U6IHtcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb25cbiAgICAgICAgICAgIGdldElzSW50ZXJmYWNlKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSwge30pO1xuXG4gICAgJG1ha2VONEJ1aWx0SW5DbGFzcyhONE1lbWJlciwgTjROYW1lZEVsZW1lbnQsIHt9LCB7fSk7XG5cbiAgICAkbWFrZU40QnVpbHRJbkNsYXNzKE40TWV0aG9kLCBONE1lbWJlciwge30sIHt9KTtcblxuICAgICRtYWtlTjRCdWlsdEluQ2xhc3MoTjREYXRhRmllbGQsIE40TWVtYmVyLCB7fSwge30pO1xuXG4gICAgJG1ha2VONEJ1aWx0SW5DbGFzcyhONEFjY2Vzc29yLCBONE1lbWJlciwge1xuICAgICAgICBpc0dldHRlcjoge1xuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uXG4gICAgICAgICAgICBpc0dldHRlcigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXR0ZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGlzU2V0dGVyOiB7XG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb25cbiAgICAgICAgICAgIGlzU2V0dGVyKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAhdGhpcy5nZXR0ZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCB7fSk7XG5cbiAgICAkbWFrZU40QnVpbHRJbkNsYXNzKE40RW51bVR5cGUsIE40VHlwZSwge1xuICAgICAgICBpc0VudW06IHtcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb25cbiAgICAgICAgICAgIGdldElzRW51bSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sIHt9KTtcblxuICAgICRtYWtlTjRCdWlsdEluQ2xhc3MoTjRFbnVtLCBPYmplY3QsIHtcbiAgICAgICAgdG9TdHJpbmc6IHtcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sIHtcbiAgICAgICAgZmluZExpdGVyYWxCeU5hbWU6IHtcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBmaW5kTGl0ZXJhbEJ5TmFtZShuYW1lKSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMubGl0ZXJhbHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubGl0ZXJhbHNbaV0ubmFtZSA9PT0gbmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubGl0ZXJhbHNbaV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZmluZExpdGVyYWxCeVZhbHVlOiB7XG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZmluZExpdGVyYWxCeVZhbHVlKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMubGl0ZXJhbHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubGl0ZXJhbHNbaV0udmFsdWUgPT09IHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5saXRlcmFsc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICAkbWFrZU40QnVpbHRJbkNsYXNzKE40U3RyaW5nQmFzZWRFbnVtVHlwZSwgTjRUeXBlLCB7XG4gICAgICAgIGlzRW51bToge1xuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvblxuICAgICAgICAgICAgZ2V0SXNFbnVtKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSwge30pO1xuXG4gICAgJG1ha2VONEJ1aWx0SW5DbGFzcyhONFN0cmluZ0Jhc2VkRW51bSwgT2JqZWN0LCB7XG4gICAgICAgIHRvU3RyaW5nOiB7XG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCB7XG4gICAgICAgIGZpbmRMaXRlcmFsQnlWYWx1ZToge1xuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGZpbmRMaXRlcmFsQnlWYWx1ZSh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSB0aGlzLmxpdGVyYWxzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmxpdGVyYWxzW2ldID09PSB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubGl0ZXJhbHNbaV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgJG1ha2VONEJ1aWx0SW5DbGFzcyhONEFubm90YXRpb24sIE40T2JqZWN0LCB7fSwge30pO1xuXG4gICAgJG1ha2VONEJ1aWx0SW5DbGFzcyhONEFwaU5vdEltcGxlbWVudGVkRXJyb3IsIEVycm9yLCB7fSwge30pO1xuXG4gICAgLy8gPT09PT0gYWRkIG1ldGEgaW5mb3JtYXRpb24gZm9yIE40QnVpbHRJbkNsYXNzZXNcblxuICAgICRjcmVhdGVNZXRhSW5mbyhONE9iamVjdCxcbiAgICAgICAgbmV3IE40Q2xhc3Moe1xuICAgICAgICAgICAgbmFtZTogJ040T2JqZWN0JyxcbiAgICAgICAgICAgIG9yaWdpbjogJ240anMtcnVudGltZScsXG4gICAgICAgICAgICBmcW46ICdONEJ1aWx0SW5DbGFzc2VzLk40T2JqZWN0JyxcbiAgICAgICAgICAgIG40c3VwZXJUeXBlOiBONE9iamVjdC5uNHR5cGUsXG4gICAgICAgICAgICBhbGxJbXBsZW1lbnRlZEludGVyZmFjZXM6IFtdLFxuICAgICAgICAgICAgYW5ub3RhdGlvbnM6IFtdLFxuICAgICAgICAgICAgb3duZWRNZW1iZXJzOiBbXSxcbiAgICAgICAgICAgIGNvbnN1bWVkTWVtZWJlcnM6IFtdXG4gICAgICAgIH0pKTtcblxuICAgICRjcmVhdGVNZXRhSW5mbyhONEVsZW1lbnQsXG4gICAgICAgIG5ldyBONENsYXNzKHtcbiAgICAgICAgICAgIG5hbWU6ICdONEVsZW1lbnQnLFxuICAgICAgICAgICAgb3JpZ2luOiAnbjRqcy1ydW50aW1lJyxcbiAgICAgICAgICAgIGZxbjogJ040QnVpbHRJbkNsYXNzZXMuTjRFbGVtZW50JyxcbiAgICAgICAgICAgIG40c3VwZXJUeXBlOiBONE9iamVjdC5uNHR5cGUsXG4gICAgICAgICAgICBhbGxJbXBsZW1lbnRlZEludGVyZmFjZXM6IFtdLFxuICAgICAgICAgICAgYW5ub3RhdGlvbnM6IFtdLFxuICAgICAgICAgICAgb3duZWRNZW1iZXJzOiBbbmV3IE40QWNjZXNzb3Ioe1xuICAgICAgICAgICAgICAgIG5hbWU6ICdhbm5vdGF0aW9ucycsXG4gICAgICAgICAgICAgICAgZ2V0dGVyOiB0cnVlXG4gICAgICAgICAgICB9KSwgbmV3IE40TWV0aG9kKHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnaGFzQW5ub3RhdGlvbicsXG4gICAgICAgICAgICAgICAganNGdW5jdGlvbjogTjRFbGVtZW50WydoYXNBbm5vdGF0aW9uJ11cbiAgICAgICAgICAgIH0pLCBuZXcgTjRNZXRob2Qoe1xuICAgICAgICAgICAgICAgIG5hbWU6ICdhbnlBbm5vdGF0aW9uJyxcbiAgICAgICAgICAgICAgICBqc0Z1bmN0aW9uOiBONEVsZW1lbnRbJ2FueUFubm90YXRpb24nXVxuICAgICAgICAgICAgfSksIG5ldyBONE1ldGhvZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2FsbEFubm90YXRpb25zJyxcbiAgICAgICAgICAgICAgICBqc0Z1bmN0aW9uOiBONEVsZW1lbnRbJ2FsbEFubm90YXRpb25zJ11cbiAgICAgICAgICAgIH0pLCBuZXcgTjRBY2Nlc3Nvcih7XG4gICAgICAgICAgICAgICAgbmFtZTogJ29yaWdpbicsXG4gICAgICAgICAgICAgICAgZ2V0dGVyOiB0cnVlXG4gICAgICAgICAgICB9KV0sXG4gICAgICAgICAgICBjb25zdW1lZE1lbWViZXJzOiBbXVxuICAgICAgICB9KSk7XG5cbiAgICAkY3JlYXRlTWV0YUluZm8oTjROYW1lZEVsZW1lbnQsXG4gICAgICAgIG5ldyBONENsYXNzKHtcbiAgICAgICAgICAgIG5hbWU6ICdONE5hbWVkRWxlbWVudCcsXG4gICAgICAgICAgICBvcmlnaW46ICduNGpzLXJ1bnRpbWUnLFxuICAgICAgICAgICAgZnFuOiAnTjRCdWlsdEluQ2xhc3Nlcy5ONE5hbWVkRWxlbWVudCcsXG4gICAgICAgICAgICBuNHN1cGVyVHlwZTogTjRFbGVtZW50Lm40dHlwZSxcbiAgICAgICAgICAgIGFsbEltcGxlbWVudGVkSW50ZXJmYWNlczogW10sXG4gICAgICAgICAgICBhbm5vdGF0aW9uczogW10sXG4gICAgICAgICAgICBvd25lZE1lbWJlcnM6IFtuZXcgTjRBY2Nlc3Nvcih7XG4gICAgICAgICAgICAgICAgbmFtZTogJ25hbWUnLFxuICAgICAgICAgICAgICAgIGdldHRlcjogdHJ1ZVxuICAgICAgICAgICAgfSldLFxuICAgICAgICAgICAgY29uc3VtZWRNZW1lYmVyczogW11cbiAgICAgICAgfSkpO1xuXG4gICAgJGNyZWF0ZU1ldGFJbmZvKE40VHlwZSxcbiAgICAgICAgbmV3IE40Q2xhc3Moe1xuICAgICAgICAgICAgbmFtZTogJ040VHlwZScsXG4gICAgICAgICAgICBvcmlnaW46ICduNGpzLXJ1bnRpbWUnLFxuICAgICAgICAgICAgZnFuOiAnTjRCdWlsdEluQ2xhc3Nlcy5ONFR5cGUnLFxuICAgICAgICAgICAgbjRzdXBlclR5cGU6IE40TmFtZWRFbGVtZW50Lm40dHlwZSxcbiAgICAgICAgICAgIGFsbEltcGxlbWVudGVkSW50ZXJmYWNlczogW10sXG4gICAgICAgICAgICBhbm5vdGF0aW9uczogW10sXG4gICAgICAgICAgICBvd25lZE1lbWJlcnM6IFtuZXcgTjRBY2Nlc3Nvcih7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2ZxbicsXG4gICAgICAgICAgICAgICAgZ2V0dGVyOiB0cnVlXG4gICAgICAgICAgICB9KSwgbmV3IE40TWV0aG9kKHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnb2YnLFxuICAgICAgICAgICAgICAgIGpzRnVuY3Rpb246IE40VHlwZVsnb2YnXSxcbiAgICAgICAgICAgICAgICBpc1N0YXRpYzogdHJ1ZVxuICAgICAgICAgICAgfSksIG5ldyBONEFjY2Vzc29yKHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnaXNDbGFzcycsXG4gICAgICAgICAgICAgICAgZ2V0dGVyOiB0cnVlXG4gICAgICAgICAgICB9KSwgbmV3IE40QWNjZXNzb3Ioe1xuICAgICAgICAgICAgICAgIG5hbWU6ICdpc0ludGVyZmFjZScsXG4gICAgICAgICAgICAgICAgZ2V0dGVyOiB0cnVlXG4gICAgICAgICAgICB9KSwgbmV3IE40QWNjZXNzb3Ioe1xuICAgICAgICAgICAgICAgIG5hbWU6ICdpc0VudW0nLFxuICAgICAgICAgICAgICAgIGdldHRlcjogdHJ1ZVxuICAgICAgICAgICAgfSldLFxuICAgICAgICAgICAgY29uc3VtZWRNZW1lYmVyczogW11cbiAgICAgICAgfSkpO1xuXG4gICAgJGNyZWF0ZU1ldGFJbmZvKE40Q2xhc3NpZmllcixcbiAgICAgICAgbmV3IE40Q2xhc3Moe1xuICAgICAgICAgICAgbmFtZTogJ040Q2xhc3NpZmllcicsXG4gICAgICAgICAgICBvcmlnaW46ICduNGpzLXJ1bnRpbWUnLFxuICAgICAgICAgICAgZnFuOiAnTjRCdWlsdEluQ2xhc3Nlcy5ONENsYXNzaWZpZXInLFxuICAgICAgICAgICAgbjRzdXBlclR5cGU6IE40VHlwZS5uNHR5cGUsXG4gICAgICAgICAgICBhbGxJbXBsZW1lbnRlZEludGVyZmFjZXM6IFtdLFxuICAgICAgICAgICAgYW5ub3RhdGlvbnM6IFtdLFxuICAgICAgICAgICAgb3duZWRNZW1iZXJzOiBbbmV3IE40QWNjZXNzb3Ioe1xuICAgICAgICAgICAgICAgIG5hbWU6ICduNHN1cGVyVHlwZScsXG4gICAgICAgICAgICAgICAgZ2V0dGVyOiB0cnVlXG4gICAgICAgICAgICB9KSwgbmV3IE40QWNjZXNzb3Ioe1xuICAgICAgICAgICAgICAgIG5hbWU6ICdhbGxJbXBsZW1lbnRlZEludGVyZmFjZXMnLFxuICAgICAgICAgICAgICAgIGdldHRlcjogdHJ1ZVxuICAgICAgICAgICAgfSksIG5ldyBONERhdGFGaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogJ293bmVkTWVtYmVycydcbiAgICAgICAgICAgIH0pLCBuZXcgTjREYXRhRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6ICdjb25zdW1lZE1lbWJlcnMnXG4gICAgICAgICAgICB9KSwgbmV3IE40TWV0aG9kKHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnY29uc3RydWN0b3InXG4gICAgICAgICAgICB9KSwgbmV3IE40TWV0aG9kKHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnbWVtYmVycycsXG4gICAgICAgICAgICAgICAganNGdW5jdGlvbjogTjRDbGFzc2lmaWVyWydtZW1iZXJzJ11cbiAgICAgICAgICAgIH0pLCBuZXcgTjRNZXRob2Qoe1xuICAgICAgICAgICAgICAgIG5hbWU6ICdtZW1iZXJzV2l0aEFubm90YXRpb24nLFxuICAgICAgICAgICAgICAgIGpzRnVuY3Rpb246IE40Q2xhc3NpZmllclsnbWVtYmVyc1dpdGhBbm5vdGF0aW9uJ11cbiAgICAgICAgICAgIH0pLCBuZXcgTjRNZXRob2Qoe1xuICAgICAgICAgICAgICAgIG5hbWU6ICdkYXRhRmllbGRzJyxcbiAgICAgICAgICAgICAgICBqc0Z1bmN0aW9uOiBONENsYXNzaWZpZXJbJ2RhdGFGaWVsZHMnXVxuICAgICAgICAgICAgfSksIG5ldyBONE1ldGhvZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2RhdGFGaWVsZHNXaXRoQW5ub3RhdGlvbicsXG4gICAgICAgICAgICAgICAganNGdW5jdGlvbjogTjRDbGFzc2lmaWVyWydkYXRhRmllbGRzV2l0aEFubm90YXRpb24nXVxuICAgICAgICAgICAgfSksIG5ldyBONE1ldGhvZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogJ21ldGhvZHMnLFxuICAgICAgICAgICAgICAgIGpzRnVuY3Rpb246IE40Q2xhc3NpZmllclsnbWV0aG9kcyddXG4gICAgICAgICAgICB9KSwgbmV3IE40TWV0aG9kKHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnbWV0aG9kc1dpdGhBbm5vdGF0aW9uJyxcbiAgICAgICAgICAgICAgICBqc0Z1bmN0aW9uOiBONENsYXNzaWZpZXJbJ21ldGhvZHNXaXRoQW5ub3RhdGlvbiddXG4gICAgICAgICAgICB9KV0sXG4gICAgICAgICAgICBjb25zdW1lZE1lbWViZXJzOiBbXVxuICAgICAgICB9KSk7XG5cbiAgICAkY3JlYXRlTWV0YUluZm8oTjRDbGFzcyxcbiAgICAgICAgbmV3IE40Q2xhc3Moe1xuICAgICAgICAgICAgbmFtZTogJ040Q2xhc3MnLFxuICAgICAgICAgICAgb3JpZ2luOiAnbjRqcy1ydW50aW1lJyxcbiAgICAgICAgICAgIGZxbjogJ040QnVpbHRJbkNsYXNzZXMuTjRDbGFzcycsXG4gICAgICAgICAgICBuNHN1cGVyVHlwZTogTjRDbGFzc2lmaWVyLm40dHlwZSxcbiAgICAgICAgICAgIGFsbEltcGxlbWVudGVkSW50ZXJmYWNlczogW10sXG4gICAgICAgICAgICBhbm5vdGF0aW9uczogW10sXG4gICAgICAgICAgICBvd25lZE1lbWJlcnM6IFtuZXcgTjRBY2Nlc3Nvcih7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2lzQ2xhc3MnLFxuICAgICAgICAgICAgICAgIGdldHRlcjogdHJ1ZVxuICAgICAgICAgICAgfSldLFxuICAgICAgICAgICAgY29uc3VtZWRNZW1lYmVyczogW11cbiAgICAgICAgfSkpO1xuXG4gICAgJGNyZWF0ZU1ldGFJbmZvKE40SW50ZXJmYWNlLFxuICAgICAgICBuZXcgTjRDbGFzcyh7XG4gICAgICAgICAgICBuYW1lOiAnTjRJbnRlcmZhY2UnLFxuICAgICAgICAgICAgb3JpZ2luOiAnbjRqcy1ydW50aW1lJyxcbiAgICAgICAgICAgIGZxbjogJ040QnVpbHRJbkNsYXNzZXMuTjRJbnRlcmZhY2UnLFxuICAgICAgICAgICAgbjRzdXBlclR5cGU6IE40Q2xhc3NpZmllci5uNHR5cGUsXG4gICAgICAgICAgICBhbGxJbXBsZW1lbnRlZEludGVyZmFjZXM6IFtdLFxuICAgICAgICAgICAgYW5ub3RhdGlvbnM6IFtdLFxuICAgICAgICAgICAgb3duZWRNZW1iZXJzOiBbbmV3IE40QWNjZXNzb3Ioe1xuICAgICAgICAgICAgICAgIG5hbWU6ICdpc0ludGVyZmFjZScsXG4gICAgICAgICAgICAgICAgZ2V0dGVyOiB0cnVlXG4gICAgICAgICAgICB9KV0sXG4gICAgICAgICAgICBjb25zdW1lZE1lbWViZXJzOiBbXVxuICAgICAgICB9KSk7XG5cbiAgICAkY3JlYXRlTWV0YUluZm8oTjRNZW1iZXIsXG4gICAgICAgIG5ldyBONENsYXNzKHtcbiAgICAgICAgICAgIG5hbWU6ICdONE1lbWJlcicsXG4gICAgICAgICAgICBvcmlnaW46ICduNGpzLXJ1bnRpbWUnLFxuICAgICAgICAgICAgZnFuOiAnTjRCdWlsdEluQ2xhc3Nlcy5ONE1lbWJlcicsXG4gICAgICAgICAgICBuNHN1cGVyVHlwZTogTjROYW1lZEVsZW1lbnQubjR0eXBlLFxuICAgICAgICAgICAgYWxsSW1wbGVtZW50ZWRJbnRlcmZhY2VzOiBbXSxcbiAgICAgICAgICAgIGFubm90YXRpb25zOiBbXSxcbiAgICAgICAgICAgIG93bmVkTWVtYmVyczogW25ldyBONEFjY2Vzc29yKHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnb3duZXInLFxuICAgICAgICAgICAgICAgIGdldHRlcjogdHJ1ZVxuICAgICAgICAgICAgfSksIG5ldyBONEFjY2Vzc29yKHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnaXNTdGF0aWMnLFxuICAgICAgICAgICAgICAgIGdldHRlcjogdHJ1ZVxuICAgICAgICAgICAgfSldLFxuICAgICAgICAgICAgY29uc3VtZWRNZW1lYmVyczogW11cbiAgICAgICAgfSkpO1xuXG4gICAgJGNyZWF0ZU1ldGFJbmZvKE40TWV0aG9kLFxuICAgICAgICBuZXcgTjRDbGFzcyh7XG4gICAgICAgICAgICBuYW1lOiAnTjRNZXRob2QnLFxuICAgICAgICAgICAgb3JpZ2luOiAnbjRqcy1ydW50aW1lJyxcbiAgICAgICAgICAgIGZxbjogJ040QnVpbHRJbkNsYXNzZXMuTjRNZXRob2QnLFxuICAgICAgICAgICAgbjRzdXBlclR5cGU6IE40TWVtYmVyLm40dHlwZSxcbiAgICAgICAgICAgIGFsbEltcGxlbWVudGVkSW50ZXJmYWNlczogW10sXG4gICAgICAgICAgICBhbm5vdGF0aW9uczogW10sXG4gICAgICAgICAgICBvd25lZE1lbWJlcnM6IFtuZXcgTjRBY2Nlc3Nvcih7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2pzRnVuY3Rpb24nLFxuICAgICAgICAgICAgICAgIGdldHRlcjogdHJ1ZVxuICAgICAgICAgICAgfSldLFxuICAgICAgICAgICAgY29uc3VtZWRNZW1lYmVyczogW11cbiAgICAgICAgfSkpO1xuXG4gICAgJGNyZWF0ZU1ldGFJbmZvKE40RGF0YUZpZWxkLFxuICAgICAgICBuZXcgTjRDbGFzcyh7XG4gICAgICAgICAgICBuYW1lOiAnTjREYXRhRmllbGQnLFxuICAgICAgICAgICAgb3JpZ2luOiAnbjRqcy1ydW50aW1lJyxcbiAgICAgICAgICAgIGZxbjogJ040QnVpbHRJbkNsYXNzZXMuTjREYXRhRmllbGQnLFxuICAgICAgICAgICAgbjRzdXBlclR5cGU6IE40TWVtYmVyLm40dHlwZSxcbiAgICAgICAgICAgIGFsbEltcGxlbWVudGVkSW50ZXJmYWNlczogW10sXG4gICAgICAgICAgICBhbm5vdGF0aW9uczogW10sXG4gICAgICAgICAgICBvd25lZE1lbWJlcnM6IFtdLFxuICAgICAgICAgICAgY29uc3VtZWRNZW1lYmVyczogW11cbiAgICAgICAgfSkpO1xuXG4gICAgJGNyZWF0ZU1ldGFJbmZvKE40QWNjZXNzb3IsXG4gICAgICAgIG5ldyBONENsYXNzKHtcbiAgICAgICAgICAgIG5hbWU6ICdONEFjY2Vzc29yJyxcbiAgICAgICAgICAgIG9yaWdpbjogJ240anMtcnVudGltZScsXG4gICAgICAgICAgICBmcW46ICdONEJ1aWx0SW5DbGFzc2VzLk40QWNjZXNzb3InLFxuICAgICAgICAgICAgbjRzdXBlclR5cGU6IE40TWVtYmVyLm40dHlwZSxcbiAgICAgICAgICAgIGFsbEltcGxlbWVudGVkSW50ZXJmYWNlczogW10sXG4gICAgICAgICAgICBhbm5vdGF0aW9uczogW10sXG4gICAgICAgICAgICBvd25lZE1lbWJlcnM6IFtuZXcgTjREYXRhRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6ICdnZXR0ZXInXG4gICAgICAgICAgICB9KSwgbmV3IE40TWV0aG9kKHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnaXNHZXR0ZXInLFxuICAgICAgICAgICAgICAgIGpzRnVuY3Rpb246IE40QWNjZXNzb3JbJ2lzR2V0dGVyJ11cbiAgICAgICAgICAgIH0pLCBuZXcgTjRNZXRob2Qoe1xuICAgICAgICAgICAgICAgIG5hbWU6ICdpc1NldHRlcicsXG4gICAgICAgICAgICAgICAganNGdW5jdGlvbjogTjRBY2Nlc3NvclsnaXNTZXR0ZXInXVxuICAgICAgICAgICAgfSldLFxuICAgICAgICAgICAgY29uc3VtZWRNZW1lYmVyczogW11cbiAgICAgICAgfSkpO1xuXG4gICAgJGNyZWF0ZU1ldGFJbmZvKE40RW51bVR5cGUsXG4gICAgICAgIG5ldyBONENsYXNzKHtcbiAgICAgICAgICAgIG5hbWU6ICdONEVudW1UeXBlJyxcbiAgICAgICAgICAgIG9yaWdpbjogJ240anMtcnVudGltZScsXG4gICAgICAgICAgICBmcW46ICdONEJ1aWx0SW5DbGFzc2VzLk40RW51bVR5cGUnLFxuICAgICAgICAgICAgbjRzdXBlclR5cGU6IE40VHlwZS5uNHR5cGUsXG4gICAgICAgICAgICBhbGxJbXBsZW1lbnRlZEludGVyZmFjZXM6IFtdLFxuICAgICAgICAgICAgYW5ub3RhdGlvbnM6IFtdLFxuICAgICAgICAgICAgb3duZWRNZW1iZXJzOiBbbmV3IE40QWNjZXNzb3Ioe1xuICAgICAgICAgICAgICAgIG5hbWU6ICdpc0VudW0nLFxuICAgICAgICAgICAgICAgIGdldHRlcjogdHJ1ZVxuICAgICAgICAgICAgfSldLFxuICAgICAgICAgICAgY29uc3VtZWRNZW1lYmVyczogW11cbiAgICAgICAgfSkpO1xuXG4gICAgJGNyZWF0ZU1ldGFJbmZvKE40RW51bSxcbiAgICAgICAgbmV3IE40Q2xhc3Moe1xuICAgICAgICAgICAgbmFtZTogJ040RW51bScsXG4gICAgICAgICAgICBvcmlnaW46ICduNGpzLXJ1bnRpbWUnLFxuICAgICAgICAgICAgZnFuOiAnTjRCdWlsdEluQ2xhc3Nlcy5ONEVudW0nLFxuICAgICAgICAgICAgbjRzdXBlclR5cGU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGFsbEltcGxlbWVudGVkSW50ZXJmYWNlczogW10sXG4gICAgICAgICAgICBhbm5vdGF0aW9uczogW10sXG4gICAgICAgICAgICBvd25lZE1lbWJlcnM6IFtuZXcgTjRNZXRob2Qoe1xuICAgICAgICAgICAgICAgIG5hbWU6ICd0b1N0cmluZycsXG4gICAgICAgICAgICAgICAganNGdW5jdGlvbjogTjRFbnVtWyd0b1N0cmluZyddXG4gICAgICAgICAgICB9KSwgbmV3IE40TWV0aG9kKHtcbiAgICAgICAgICAgICAgICBuYW1lOiAndmFsdWVCeU5hbWUnLFxuICAgICAgICAgICAgICAgIGpzRnVuY3Rpb246IE40RW51bVsndmFsdWVCeU5hbWUnXSxcbiAgICAgICAgICAgICAgICBpc1N0YXRpYzogdHJ1ZVxuICAgICAgICAgICAgfSksIG5ldyBONEFjY2Vzc29yKHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnbmFtZScsXG4gICAgICAgICAgICAgICAgZ2V0dGVyOiB0cnVlXG4gICAgICAgICAgICB9KSwgbmV3IE40QWNjZXNzb3Ioe1xuICAgICAgICAgICAgICAgIG5hbWU6ICd2YWx1ZScsXG4gICAgICAgICAgICAgICAgZ2V0dGVyOiB0cnVlXG4gICAgICAgICAgICB9KSwgbmV3IE40QWNjZXNzb3Ioe1xuICAgICAgICAgICAgICAgIG5hbWU6ICd2YWx1ZXMnLFxuICAgICAgICAgICAgICAgIGdldHRlcjogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpc1N0YXRpYzogdHJ1ZVxuICAgICAgICAgICAgfSksIG5ldyBONEFjY2Vzc29yKHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnbjR0eXBlJyxcbiAgICAgICAgICAgICAgICBnZXR0ZXI6IHRydWVcbiAgICAgICAgICAgIH0pXSxcbiAgICAgICAgICAgIGNvbnN1bWVkTWVtZWJlcnM6IFtdXG4gICAgICAgIH0pKTtcblxuICAgICRjcmVhdGVNZXRhSW5mbyhONFN0cmluZ0Jhc2VkRW51bVR5cGUsXG4gICAgICAgIG5ldyBONENsYXNzKHtcbiAgICAgICAgICAgIG5hbWU6ICdONFN0cmluZ0Jhc2VkRW51bVR5cGUnLFxuICAgICAgICAgICAgb3JpZ2luOiAnbjRqcy1ydW50aW1lJyxcbiAgICAgICAgICAgIGZxbjogJ040QnVpbHRJbkNsYXNzZXMuTjRTdHJpbmdCYXNlZEVudW1UeXBlJyxcbiAgICAgICAgICAgIG40c3VwZXJUeXBlOiBONFR5cGUubjR0eXBlLFxuICAgICAgICAgICAgYWxsSW1wbGVtZW50ZWRJbnRlcmZhY2VzOiBbXSxcbiAgICAgICAgICAgIGFubm90YXRpb25zOiBbXSxcbiAgICAgICAgICAgIG93bmVkTWVtYmVyczogW25ldyBONEFjY2Vzc29yKHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnaXNFbnVtJyxcbiAgICAgICAgICAgICAgICBnZXR0ZXI6IHRydWVcbiAgICAgICAgICAgIH0pXSxcbiAgICAgICAgICAgIGNvbnN1bWVkTWVtZWJlcnM6IFtdXG4gICAgICAgIH0pKTtcblxuICAgICRjcmVhdGVNZXRhSW5mbyhONFN0cmluZ0Jhc2VkRW51bSxcbiAgICAgICAgbmV3IE40Q2xhc3Moe1xuICAgICAgICAgICAgbmFtZTogJ040U3RyaW5nQmFzZWRFbnVtJyxcbiAgICAgICAgICAgIG9yaWdpbjogJ240anMtcnVudGltZScsXG4gICAgICAgICAgICBmcW46ICdONEJ1aWx0SW5DbGFzc2VzLk40U3RyaW5nQmFzZWRFbnVtJyxcbiAgICAgICAgICAgIG40c3VwZXJUeXBlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBhbGxJbXBsZW1lbnRlZEludGVyZmFjZXM6IFtdLFxuICAgICAgICAgICAgYW5ub3RhdGlvbnM6IFtdLFxuICAgICAgICAgICAgb3duZWRNZW1iZXJzOiBbbmV3IE40TWV0aG9kKHtcbiAgICAgICAgICAgICAgICBuYW1lOiAndG9TdHJpbmcnLFxuICAgICAgICAgICAgICAgIGpzRnVuY3Rpb246IE40U3RyaW5nQmFzZWRFbnVtWyd0b1N0cmluZyddXG4gICAgICAgICAgICB9KSwgbmV3IE40TWV0aG9kKHtcbiAgICAgICAgICAgICAgICBuYW1lOiAndmFsdWVCeU5hbWUnLFxuICAgICAgICAgICAgICAgIGpzRnVuY3Rpb246IE40U3RyaW5nQmFzZWRFbnVtWyd2YWx1ZUJ5TmFtZSddLFxuICAgICAgICAgICAgICAgIGlzU3RhdGljOiB0cnVlXG4gICAgICAgICAgICB9KSwgbmV3IE40QWNjZXNzb3Ioe1xuICAgICAgICAgICAgICAgIG5hbWU6ICduYW1lJyxcbiAgICAgICAgICAgICAgICBnZXR0ZXI6IHRydWVcbiAgICAgICAgICAgIH0pLCBuZXcgTjRBY2Nlc3Nvcih7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3ZhbHVlJyxcbiAgICAgICAgICAgICAgICBnZXR0ZXI6IHRydWVcbiAgICAgICAgICAgIH0pLCBuZXcgTjRBY2Nlc3Nvcih7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3ZhbHVlcycsXG4gICAgICAgICAgICAgICAgZ2V0dGVyOiB0cnVlLFxuICAgICAgICAgICAgICAgIGlzU3RhdGljOiB0cnVlXG4gICAgICAgICAgICB9KSwgbmV3IE40QWNjZXNzb3Ioe1xuICAgICAgICAgICAgICAgIG5hbWU6ICduNHR5cGUnLFxuICAgICAgICAgICAgICAgIGdldHRlcjogdHJ1ZVxuICAgICAgICAgICAgfSldLFxuICAgICAgICAgICAgY29uc3VtZWRNZW1lYmVyczogW11cbiAgICAgICAgfSkpO1xuXG4gICAgJGNyZWF0ZU1ldGFJbmZvKE40QW5ub3RhdGlvbixcbiAgICAgICAgbmV3IE40Q2xhc3Moe1xuICAgICAgICAgICAgbmFtZTogJ040QW5ub3RhdGlvbicsXG4gICAgICAgICAgICBvcmlnaW46ICduNGpzLXJ1bnRpbWUnLFxuICAgICAgICAgICAgZnFuOiAnTjRCdWlsdEluQ2xhc3Nlcy5ONEFubm90YXRpb24nLFxuICAgICAgICAgICAgbjRzdXBlclR5cGU6IE40T2JqZWN0Lm40dHlwZSxcbiAgICAgICAgICAgIGFsbEltcGxlbWVudGVkSW50ZXJmYWNlczogW10sXG4gICAgICAgICAgICBhbm5vdGF0aW9uczogW10sXG4gICAgICAgICAgICBvd25lZE1lbWJlcnM6IFtuZXcgTjRBY2Nlc3Nvcih7XG4gICAgICAgICAgICAgICAgbmFtZTogJ25hbWUnLFxuICAgICAgICAgICAgICAgIGdldHRlcjogdHJ1ZVxuICAgICAgICAgICAgfSksIG5ldyBONEFjY2Vzc29yKHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnZGV0YWlscycsXG4gICAgICAgICAgICAgICAgZ2V0dGVyOiB0cnVlXG4gICAgICAgICAgICB9KSwgbmV3IE40QWNjZXNzb3Ioe1xuICAgICAgICAgICAgICAgIG5hbWU6ICd0YXJnZXQnLFxuICAgICAgICAgICAgICAgIGdldHRlcjogdHJ1ZVxuICAgICAgICAgICAgfSldLFxuICAgICAgICAgICAgY29uc3VtZWRNZW1lYmVyczogW11cbiAgICAgICAgfSkpO1xuXG4gICAgJGNyZWF0ZU1ldGFJbmZvKE40UHJvdmlkZXIsXG4gICAgICAgIG5ldyBONEludGVyZmFjZSh7XG4gICAgICAgICAgICBuYW1lOiAnTjRQcm92aWRlcicsXG4gICAgICAgICAgICBvcmlnaW46ICduNGpzLXJ1bnRpbWUnLFxuICAgICAgICAgICAgZnFuOiAnTjRCdWlsdEluQ2xhc3Nlcy5ONFByb3ZpZGVyJyxcbiAgICAgICAgICAgIG40c3VwZXJUeXBlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBhbGxJbXBsZW1lbnRlZEludGVyZmFjZXM6IFtdLFxuICAgICAgICAgICAgYW5ub3RhdGlvbnM6IFtdLFxuICAgICAgICAgICAgb3duZWRNZW1iZXJzOiBbbmV3IE40TWV0aG9kKHsgbmFtZTogJ2dldCcsIGpzRnVuY3Rpb246IE40UHJvdmlkZXJbJ2dldCddLCBhbm5vdGF0aW9uczogW10gfSldLFxuICAgICAgICAgICAgY29uc3VtZWRNZW1iZXJzOiBbXVxuICAgICAgICB9KSk7XG5cbiAgICAkY3JlYXRlTWV0YUluZm8oTjRBcGlOb3RJbXBsZW1lbnRlZEVycm9yLFxuICAgICAgICBuZXcgTjRDbGFzcyh7XG4gICAgICAgICAgICBuYW1lOiAnTjRBcGlOb3RJbXBsZW1lbnRlZEVycm9yJyxcbiAgICAgICAgICAgIG9yaWdpbjogJ040QnVpbHRJbkNsYXNzZXMnLFxuICAgICAgICAgICAgZnFuOiAnTjRCdWlsdEluQ2xhc3Nlcy5ONEFwaU5vdEltcGxlbWVudGVkRXJyb3InLFxuICAgICAgICAgICAgbjRzdXBlclR5cGU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGFsbEltcGxlbWVudGVkSW50ZXJmYWNlczogW10sXG4gICAgICAgICAgICBhbm5vdGF0aW9uczogW10sXG4gICAgICAgICAgICBvd25lZE1lbWJlcnM6IFtdLFxuICAgICAgICAgICAgY29uc3VtZWRNZW1lYmVyczogW11cbiAgICAgICAgfSkpO1xuXG4gICAgLy8gTjRJREwtcmVsYXRlZCBpbnRlcmZhY2VzXG4gICAgJGNyZWF0ZU1ldGFJbmZvKE1pZ3JhdGlvbkNvbnRyb2xsZXIsXG4gICAgICAgIG5ldyBONEludGVyZmFjZSh7XG4gICAgICAgICAgICBuYW1lOiAnTWlncmF0aW9uQ29udHJvbGxlcicsXG4gICAgICAgICAgICBvcmlnaW46ICduNGpzLXJ1bnRpbWUnLFxuICAgICAgICAgICAgZnFuOiAnTjRCdWlsdEluQ2xhc3Nlcy5NaWdyYXRpb25Db250cm9sbGVyJyxcbiAgICAgICAgICAgIG40c3VwZXJUeXBlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBhbGxJbXBsZW1lbnRlZEludGVyZmFjZXM6IFtdLFxuICAgICAgICAgICAgYW5ub3RhdGlvbnM6IFtdLFxuICAgICAgICAgICAgb3duZWRNZW1iZXJzOiBbXG4gICAgICAgICAgICAgICAgbmV3IE40TWV0aG9kKHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ21pZ3JhdGUnLFxuICAgICAgICAgICAgICAgICAgICBpc1N0YXRpYzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGFubm90YXRpb25zOiBbXVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIG5ldyBONE1ldGhvZCh7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdtaWdyYXRlV2l0aCcsXG4gICAgICAgICAgICAgICAgICAgIGlzU3RhdGljOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgYW5ub3RhdGlvbnM6IFtdXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgbmV3IE40QWNjZXNzb3Ioe1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnY29udGV4dCcsXG4gICAgICAgICAgICAgICAgICAgIGdldHRlcjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgaXNTdGF0aWM6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBhbm5vdGF0aW9uczogW11cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGNvbnN1bWVkTWVtYmVyczogW11cbiAgICAgICAgfSkpO1xuICAgIFxuICAgICRjcmVhdGVNZXRhSW5mbyhNaWdyYXRpb25Db250ZXh0LFxuICAgICAgICBuZXcgTjRJbnRlcmZhY2Uoe1xuICAgICAgICAgICAgbmFtZTogJ01pZ3JhdGlvbkNvbnRleHQnLFxuICAgICAgICAgICAgb3JpZ2luOiAnbjRqcy1ydW50aW1lJyxcbiAgICAgICAgICAgIGZxbjogJ040QnVpbHRJbkNsYXNzZXMuTWlncmF0aW9uQ29udGV4dCcsXG4gICAgICAgICAgICBuNHN1cGVyVHlwZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgYWxsSW1wbGVtZW50ZWRJbnRlcmZhY2VzOiBbXSxcbiAgICAgICAgICAgIGFubm90YXRpb25zOiBbXSxcbiAgICAgICAgICAgIG93bmVkTWVtYmVyczogW1xuICAgICAgICAgICAgICAgIG5ldyBONE1ldGhvZCh7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdnZXRUcmFjZScsXG4gICAgICAgICAgICAgICAgICAgIGlzU3RhdGljOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgYW5ub3RhdGlvbnM6IFtdXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgbmV3IE40TWV0aG9kKHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2lzTW9kaWZpZWQnLFxuICAgICAgICAgICAgICAgICAgICBpc1N0YXRpYzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGFubm90YXRpb25zOiBbXVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIG5ldyBONE1ldGhvZCh7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdzZXRVc2VyRGF0YScsXG4gICAgICAgICAgICAgICAgICAgIGlzU3RhdGljOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgYW5ub3RhdGlvbnM6IFtdXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgbmV3IE40TWV0aG9kKHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2dldFVzZXJEYXRhJyxcbiAgICAgICAgICAgICAgICAgICAgaXNTdGF0aWM6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBhbm5vdGF0aW9uczogW11cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGNvbnN1bWVkTWVtYmVyczogW11cbiAgICAgICAgfSkpO1xuXG4gICAgLy89PT09PT0gcHJldmVudCBtb2RpZmljYXRpb25zIGF0IHJ1bnRpbWUgcnVudGltZVxuICAgIE9iamVjdC5mcmVlemUoTjRPYmplY3QpO1xuICAgIE9iamVjdC5mcmVlemUoTjRFbGVtZW50KTtcbiAgICBPYmplY3QuZnJlZXplKE40TmFtZWRFbGVtZW50KTtcbiAgICBPYmplY3QuZnJlZXplKE40VHlwZSk7XG4gICAgT2JqZWN0LmZyZWV6ZShONENsYXNzaWZpZXIpO1xuICAgIE9iamVjdC5mcmVlemUoTjRDbGFzcyk7XG4gICAgT2JqZWN0LmZyZWV6ZShONEludGVyZmFjZSk7XG4gICAgT2JqZWN0LmZyZWV6ZShONE1lbWJlcik7XG4gICAgT2JqZWN0LmZyZWV6ZShONE1ldGhvZCk7XG4gICAgT2JqZWN0LmZyZWV6ZShONERhdGFGaWVsZCk7XG4gICAgT2JqZWN0LmZyZWV6ZShONEFjY2Vzc29yKTtcbiAgICBPYmplY3QuZnJlZXplKE40RW51bVR5cGUpO1xuICAgIE9iamVjdC5mcmVlemUoTjRFbnVtKTtcbiAgICBPYmplY3QuZnJlZXplKE40U3RyaW5nQmFzZWRFbnVtVHlwZSk7XG4gICAgT2JqZWN0LmZyZWV6ZShONFN0cmluZ0Jhc2VkRW51bSk7XG4gICAgT2JqZWN0LmZyZWV6ZShONFByb3ZpZGVyKTtcbiAgICBPYmplY3QuZnJlZXplKE40QXBpTm90SW1wbGVtZW50ZWRFcnJvcik7XG4gICAgT2JqZWN0LmZyZWV6ZShNaWdyYXRpb25Db250cm9sbGVyKTtcbiAgICBPYmplY3QuZnJlZXplKE1pZ3JhdGlvbkNvbnRleHQpO1xuXG4gICAgLy89PT09PT0gbWFrZSBnbG9iYWxseSBhdmFpbGFibGVcblxuICAgIGdsb2JhbC5ONE9iamVjdCA9IE40T2JqZWN0O1xuICAgIGdsb2JhbC5ONEVsZW1lbnQgPSBONEVsZW1lbnQ7XG4gICAgZ2xvYmFsLk40TmFtZWRFbGVtZW50ID0gTjROYW1lZEVsZW1lbnQ7XG4gICAgZ2xvYmFsLk40VHlwZSA9IE40VHlwZTtcbiAgICBnbG9iYWwuTjRDbGFzc2lmaWVyID0gTjRDbGFzc2lmaWVyO1xuICAgIGdsb2JhbC5ONENsYXNzID0gTjRDbGFzcztcbiAgICBnbG9iYWwuTjRJbnRlcmZhY2UgPSBONEludGVyZmFjZTtcbiAgICBnbG9iYWwuTjRNZW1iZXIgPSBONE1lbWJlcjtcbiAgICBnbG9iYWwuTjRNZXRob2QgPSBONE1ldGhvZDtcbiAgICBnbG9iYWwuTjREYXRhRmllbGQgPSBONERhdGFGaWVsZDtcbiAgICBnbG9iYWwuTjRBY2Nlc3NvciA9IE40QWNjZXNzb3I7XG4gICAgZ2xvYmFsLk40RW51bVR5cGUgPSBONEVudW1UeXBlO1xuICAgIGdsb2JhbC5ONEVudW0gPSBONEVudW07XG4gICAgZ2xvYmFsLk40U3RyaW5nQmFzZWRFbnVtVHlwZSA9IE40U3RyaW5nQmFzZWRFbnVtVHlwZTtcbiAgICBnbG9iYWwuTjRTdHJpbmdCYXNlZEVudW0gPSBONFN0cmluZ0Jhc2VkRW51bTtcbiAgICBnbG9iYWwuTjRBbm5vdGF0aW9uID0gTjRBbm5vdGF0aW9uO1xuICAgIGdsb2JhbC5ONFByb3ZpZGVyID0gTjRQcm92aWRlcjtcbiAgICBnbG9iYWwuTjRBcGlOb3RJbXBsZW1lbnRlZEVycm9yID0gTjRBcGlOb3RJbXBsZW1lbnRlZEVycm9yO1xuICAgIGdsb2JhbC5NaWdyYXRpb25Db250cm9sbGVyID0gTWlncmF0aW9uQ29udHJvbGxlcjtcbiAgICBnbG9iYWwuTWlncmF0aW9uQ29udGV4dCA9IE1pZ3JhdGlvbkNvbnRleHQ7XG5cbn0pKHR5cGVvZiBnbG9iYWwgPT09IFwib2JqZWN0XCIgPyBnbG9iYWwgOiBzZWxmKTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTcgTnVtYmVyRm91ciBBRy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHNcbiAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMFxuICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXRcbiAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sXG4gKlxuICogQ29udHJpYnV0b3JzOlxuICogICBOdW1iZXJGb3VyIEFHIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uXG4gKi9cbi8qZXNsaW50LWRpc2FibGUgbmV3LWNhcCwgbm8tcHJvdG8sIHN0cmljdCAqL1xuXG4oZnVuY3Rpb24gKGdsb2JhbCkge1xuICAgIFwidXNlIHN0cmljdFwiO1xuXG4gICAgdmFyIEFycmF5U2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UsXG4gICAgICAgIG5vb3AgPSBmdW5jdGlvbigpIHt9O1xuXG4gICAgaWYgKHR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICB2YXIgZGVmaW5lUHJvcGVydGllcyA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzLmJpbmQoT2JqZWN0KSxcbiAgICAgICAgICAgIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5LmJpbmQoT2JqZWN0KTtcblxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyA9IGZ1bmN0aW9uKGZuLCBwcm9wcykge1xuICAgICAgICAgICAgZm9yICh2YXIgayBpbiBwcm9wcykge1xuICAgICAgICAgICAgICAgIHZhciBwcm9wID0gcHJvcHNba107XG4gICAgICAgICAgICAgICAgcHJvcC5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGlmIChwcm9wLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb3Aud3JpdGFibGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkZWZpbmVQcm9wZXJ0aWVzKGZuLCBwcm9wcyk7XG4gICAgICAgIH07XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uKGZuLCBuYW1lLCBwcm9wKSB7XG4gICAgICAgICAgICBwcm9wLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgICAgICAgICBpZiAocHJvcC52YWx1ZSkge1xuICAgICAgICAgICAgICAgIHByb3Aud3JpdGFibGUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGRlZmluZVByb3BlcnR5KGZuLCBuYW1lLCBwcm9wKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKiogQ2FsbCBjb250ZXh0IGlzIHByb3RvdHlwZSBvYmplY3QuICovXG4gICAgZnVuY3Rpb24gbWl4aW5EZWZhdWx0TWV0aG9kKG1ldGhvZCkge1xuICAgICAgICB2YXIgbmFtZSA9IG1ldGhvZCAmJiBtZXRob2QubmFtZTtcbiAgICAgICAgaWYgKG5hbWUgJiYgIShuYW1lIGluIHRoaXMpICYmICFtZXRob2QuaXNTdGF0aWMgJiYgbWV0aG9kLmpzRnVuY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXNbbmFtZV0gPSBtZXRob2QuanNGdW5jdGlvbi52YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKiogQ2FsbCBjb250ZXh0IGlzIHByb3RvdHlwZSBvYmplY3QuICovXG4gICAgZnVuY3Rpb24gbWl4aW5EZWZhdWx0TWV0aG9kcyhpZmFjZSkge1xuICAgICAgICB2YXIgbjR0eXBlID0gaWZhY2UgJiYgaWZhY2UubjR0eXBlO1xuICAgICAgICBpZiAobjR0eXBlKSB7XG4gICAgICAgICAgICBuNHR5cGUub3duZWRNZW1iZXJzLmZvckVhY2gobWl4aW5EZWZhdWx0TWV0aG9kLCB0aGlzKTtcbiAgICAgICAgICAgIG40dHlwZS5jb25zdW1lZE1lbWJlcnMuZm9yRWFjaChtaXhpbkRlZmF1bHRNZXRob2QsIHRoaXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0dXAgYSBjb25zdHJ1Y3RvciBmdW5jdGlvbiB0byB3b3JrIGFzIGEgY2xhc3MuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY3RvciAtIFRoZSBjb25zdHJ1Y3RvciBmdW5jdGlvblxuICAgICAqIEBwYXJhbSBzdXBlckN0b3IgLSBUaGUgY29uc3RydWN0b3IgZnVuY3Rpb24gb2YgdGhlIHN1cGVyIGNsYXNzXG4gICAgICogQHBhcmFtIGltcGxlbWVudGVkSW50ZXJmYWNlcyAtIEFycmF5IG9mIGRpcmVjdGx5IGltcGxlbWVudGVkIGludGVyZmFjZXMsIGV4Y2x1ZGluZyBidWlsdC1pbiB0eXBlcyBhbmRcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlcyBkZWZpbmVkIGluIGRlZmluaXRpb24gZmlsZXMgd2l0aG91dCBhbm5vdGF0aW9uIEBONEpTLlxuICAgICAqIEBwYXJhbSBpbnN0YW5jZU1ldGhvZHMgLSBBbiBvYmplY3QgaG9sZGluZyB0aGUgbWV0aG9kcyBmb3IgdGhlIGNsYXNzIGluc3RhbmNlIGFuZCBtaXhlZCBpbiBtZXRob2RzXG4gICAgICogQHBhcmFtIHN0YXRpY01ldGhvZHMgLSBBbiBvYmplY3QgaG9sZGluZyB0aGUgZGVzY3JpcHRvcnMgZm9yIHRoZSBjbGFzcyBzdGF0aWMgbWV0aG9kc1xuICAgICAqIEBwYXJhbSBuNHR5cGVGbiAtIFRoZSBmYWN0b3J5IGZ1bmN0aW9uIHRvIGNyZWF0ZSB0aGUgbWV0YSB0eXBlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uICRtYWtlQ2xhc3MoY3Rvciwgc3VwZXJDdG9yLCBpbXBsZW1lbnRlZEludGVyZmFjZXMsIGluc3RhbmNlTWV0aG9kcywgc3RhdGljTWV0aG9kcywgbjR0eXBlRm4pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzdXBlckN0b3IgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGN0b3IsIHN1cGVyQ3Rvcik7XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY3Rvciwgc3RhdGljTWV0aG9kcyk7XG5cbiAgICAgICAgdmFyIHByb3RvID0gT2JqZWN0LmNyZWF0ZShzdXBlckN0b3IucHJvdG90eXBlLCBpbnN0YW5jZU1ldGhvZHMpO1xuICAgICAgICBpbXBsZW1lbnRlZEludGVyZmFjZXMuZm9yRWFjaChtaXhpbkRlZmF1bHRNZXRob2RzLCBwcm90byk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm90bywgXCJjb25zdHJ1Y3RvclwiLCB7IHZhbHVlOiBjdG9yIH0pO1xuXG4gICAgICAgIHZhciBuNHR5cGUgPSBuNHR5cGVGbihwcm90bywgY3Rvcik7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjdG9yLCBcIm40dHlwZVwiLCB7IHZhbHVlOiBuNHR5cGUgfSk7XG5cbiAgICAgICAgY3Rvci5wcm90b3R5cGUgPSBwcm90bztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXR1cCBhIGludGVyZmFjZS4gTWV0aG9kcyBhbmQgZmllbGQgaW5pdGlhbGl6ZXJzIGFyZSBhbHJlYWR5IG1lcmdlZCBpbnRvIHRoZSBpbnRlcmZhY2Ugb2JqZWN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHRpbnRlcmZhY2UgLSBUaGUgaW50ZXJmYWNlIG9iamVjdC5cbiAgICAgKiBAcGFyYW0gbjR0eXBlRm4gLSBUaGUgZmFjdG9yeSBmdW5jdGlvbiB0byBjcmVhdGUgdGhlIG1ldGEgdHlwZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiAkbWFrZUludGVyZmFjZSh0aW50ZXJmYWNlLCBuNHR5cGVGbikge1xuICAgICAgICB2YXIgcHJvdG8gPSB0aW50ZXJmYWNlLiRtZXRob2RzLFxuICAgICAgICAgICAgbjR0eXBlID0gbjR0eXBlRm4ocHJvdG8sIHRpbnRlcmZhY2UpO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGludGVyZmFjZSwgXCJuNHR5cGVcIiwgeyB2YWx1ZTogbjR0eXBlIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBlbnVtZXJhdGlvbiB0eXBlIHdpdGggdGhlIGdpdmVuIEZRTiBhbmQgbWVtYmVycy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBlbnVtZXJhdGlvbiAtIHRoZSBlbnVtZXJhdGlvbiBjb25zdHJ1Y3RvciBmdW5jdGlvblxuICAgICAqIEBwYXJhbSBtZW1iZXJzIC0gQW4gYXJyYXkgb2YgPFN0cmluZywgU3RyaW5nPiB0dXBsZXMgY29udGFpbmluZ1xuICAgICAqICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGVudW0gbWVtYmVyc1xuICAgICAqIEBwYXJhbSBuNHR5cGUgLSBUaGUgZmFjdG9yeSBmdW5jdGlvbiBmb3IgdGhlIG1ldGF0eXBlXG4gICAgICogQHJldHVybiBUaGUgY29uc3RydWN0ZWQgZW51bWVyYXRpb24gdHlwZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uICRtYWtlRW51bShlbnVtZXJhdGlvbiwgc3RyaW5nQmFzZWQvKiBUT0RPIG9ic29sZXRlICovLCBtZW1iZXJzLCBuNHR5cGUpIHtcbiAgICAgICAgdmFyIGxlbmd0aCwgaW5kZXgsIG1lbWJlciwgbmFtZSwgdmFsdWUsIHZhbHVlcywgbGl0ZXJhbDtcblxuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoZW51bWVyYXRpb24sIGdsb2JhbC5ONEVudW0pO1xuICAgICAgICBlbnVtZXJhdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGdsb2JhbC5ONEVudW0ucHJvdG90eXBlLCB7fSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbnVtZXJhdGlvbiwgJ240dHlwZScsIHtcbiAgICAgICAgICAgIHZhbHVlOiBuNHR5cGUobm9vcClcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbnVtZXJhdGlvbi5wcm90b3R5cGUsIFwiY29uc3RydWN0b3JcIiwgeyB2YWx1ZTogZW51bWVyYXRpb24gfSk7XG5cbiAgICAgICAgbGVuZ3RoID0gbWVtYmVycy5sZW5ndGg7XG4gICAgICAgIHZhbHVlcyA9IG5ldyBBcnJheShsZW5ndGgpO1xuICAgICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7ICsraW5kZXgpIHtcbiAgICAgICAgICAgIG1lbWJlciA9IG1lbWJlcnNbaW5kZXhdO1xuICAgICAgICAgICAgbmFtZSA9IG1lbWJlclswXTtcbiAgICAgICAgICAgIHZhbHVlID0gbWVtYmVyWzFdO1xuXG4gICAgICAgICAgICBsaXRlcmFsID0gbmV3IGVudW1lcmF0aW9uKG5hbWUsIHZhbHVlKTtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbnVtZXJhdGlvbiwgbGl0ZXJhbC5uYW1lLCB7XG4gICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogbGl0ZXJhbFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB2YWx1ZXNbaW5kZXhdID0gbGl0ZXJhbDtcbiAgICAgICAgfVxuXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbnVtZXJhdGlvbiwgJ2xpdGVyYWxzJywge1xuICAgICAgICAgICAgdmFsdWU6IHZhbHVlc1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVjayB3aGV0aGVyIGEgdmFsdWUgaXMgaW5zdGFuY2Ugb2YgYSBjbGFzcyBpbXBsZW1lbnRpbmcgYW4gaW50ZXJmYWNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGluc3RhbmNlIC0gVGhlIGluc3RhbmNlIHdoaWNoIHR5cGUgaXMgdG8gYmUgY2hlY2tlZCB3aGV0aGVyIGl0IGltcGxlbWVudHMgdGhlIGludGVyZmFjZVxuICAgICAqIEBwYXJhbSBpbXBsZW1lbnRlZEludGVyZmFjZSAtIFRoZSBmdWxseSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgaW50ZXJmYWNlIGluY2x1ZGluZyB0aGUgcGFja2FnZSBpZGVudGlmaWVyXG4gICAgICogQHJldHVybiBib29sZWFuXG4gICAgICovXG4gICAgZnVuY3Rpb24gJGltcGxlbWVudHMoaW5zdGFuY2UsIGltcGxlbWVudGVkSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICghaW5zdGFuY2UgfHwgIWluc3RhbmNlLmNvbnN0cnVjdG9yIHx8ICFpbnN0YW5jZS5jb25zdHJ1Y3Rvci5uNHR5cGUgfHwgIWluc3RhbmNlLmNvbnN0cnVjdG9yLm40dHlwZS5hbGxJbXBsZW1lbnRlZEludGVyZmFjZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5zdGFuY2UuY29uc3RydWN0b3IubjR0eXBlLmFsbEltcGxlbWVudGVkSW50ZXJmYWNlcy5pbmRleE9mKGltcGxlbWVudGVkSW50ZXJmYWNlKSAhPT0gLTE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW5zdGFuY2VvZi13cmFwcGVyIGRlbGVnYXRpbmcgdG8gJGltcGxlbWVudHMgaW4gY2FzZSBvZiBwb3RlbnRpYWwgaW50ZXJmYWNlcyBvbiB0aGUgcmlnaHQgaGFuZCBzaWRlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGluc3RhbmNlIC0gVGhlIGluc3RhbmNlIHdoaWNoIHR5cGUgaXMgdG8gYmUgY2hlY2tlZCB3aGV0aGVyIGl0IGltcGxlbWVudHMgdGhlIGludGVyZmFjZVxuICAgICAqIEBwYXJhbSBzdXBlcnRweWUgLSB0eXBlIHRvIGNoZWNrIGFnYWluc3RcbiAgICAgKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiBpbnN0YW5jZS1wYXJhbWV0ZXIgaXMgYW4gaW5zdGFuY2Ugb2Ygc3VwZXJ0eXBlLXBhcmFtZXRlclxuICAgICAqL1xuICAgIGZ1bmN0aW9uICRpbnN0YW5jZW9mKGluc3RhbmNlLCBzdXBlcnR5cGUpIHtcbiAgICAgICAgc3dpdGNoICh0eXBlb2YgaW5zdGFuY2UpIHtcbiAgICAgICAgICAgIGNhc2UgXCJvYmplY3RcIjpcbiAgICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc3VwZXJ0eXBlID09PSBcIm9iamVjdFwiKSB7IC8vIGludGVyZmFjZSB0eXBlXG4gICAgICAgICAgICAgICAgICAgIHZhciB0ID0gKHN1cGVydHlwZVtcIm40dHlwZVwiXSB8fCBudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZxbiA9IHQgPyB0LmZxbiA6IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkaW1wbGVtZW50cyhpbnN0YW5jZSwgZnFuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlIGluc3RhbmNlb2Ygc3VwZXJ0eXBlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIZWxwZXIgZnVuY3Rpb24gdXNlZCB3aGVuIHRyYW5zcGlsaW5nIGRlc3RydWN0dXJpbmcgcGF0dGVybnMuIFJldHVybiBhbiBhcnJheSBvZiB0aGUgZmlyc3QgJ21heCdcbiAgICAgKiBlbGVtZW50cyBmcm9tIGl0ZXJhYmxlICdhcnInLiBJZiB0aGUgSXRlcmFibGUgZG9lcyBub3QgcHJvdmlkZSBlbm91Z2ggZWxlbWVudHMsIGEgc2hvcnRlciBhcnJheVxuICAgICAqIGlzIHJldHVybmVkLiBTbyBsZW5ndGggb2YgcmV0dXJuZWQgYXJyYXkgaXMgYmV0d2VlbiAwIGFuZCAnbWF4Jy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBhcnIgLSB0aGUgSXRlcmFibGUgdGhhdCBpcyB0byBiZSB0dXJuZWQgaW50byBhbiBhcnJheS5cbiAgICAgKiBAcGFyYW0gbWF4IC0gbWF4aW11bSBudW1iZXIgb2YgZWxlbWVudHMgcmV0dXJuZWQuXG4gICAgICovXG4gICAgZnVuY3Rpb24gJHNsaWNlVG9BcnJheUZvckRlc3RydWN0KGFyciwgbWF4KSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGFycikpIHtcbiAgICAgICAgICAgIHJldHVybiBhcnI7XG4gICAgICAgIH0gZWxzZSBpZiAoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChhcnIpKSB7XG4gICAgICAgICAgICB2YXIgcmV0ID0gW10sXG4gICAgICAgICAgICAgICAgaXQgPSBhcnJbU3ltYm9sLml0ZXJhdG9yXSgpLFxuICAgICAgICAgICAgICAgIGVudHJ5O1xuICAgICAgICAgICAgd2hpbGUgKCEoZW50cnkgPSBpdC5uZXh0KCkpLmRvbmUpIHtcbiAgICAgICAgICAgICAgICByZXQucHVzaChlbnRyeS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKHJldC5sZW5ndGggPj0gbWF4KSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZVwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV4ZWN1dGVzIHRoZSBnaXZlbiBnZW5lcmF0b3Igc3RlcCBieSBzdGVwIGNoYWluaW5nIHVwIHByb21pc2VzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGdlbiAtIGdlbmVyYXRvciBvYmplY3QgdG8gYmUgc2VxdWVudGlhbGx5IGV4ZWN1dGVkLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uICRzcGF3bihnZW4pIHtcbiAgICAgICAgZnVuY3Rpb24gZXhlYyhzdGVwLCB2KSB7XG4gICAgICAgICAgICB2YXIgcmVzO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXMgPSB0aGlzW3N0ZXBdKHYpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXhjKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGV4Yyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVzLmRvbmUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlcy52YWx1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVzLnZhbHVlKS50aGVuKG5leHQsIHRocm93cik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbmV4dCA9IGV4ZWMuYmluZChnZW4sIFwibmV4dFwiKSxcbiAgICAgICAgICAgIHRocm93ciA9IGV4ZWMuYmluZChnZW4sIFwidGhyb3dcIik7XG4gICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gJG40cHJvbWlzaWZ5RnVuY3Rpb24oY2JCYXNlZEZuLCBhcmdzLCBtdWx0aVN1Y2Nlc3NWYWx1ZXMsIG5vRXJyb3JWYWx1ZSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICBhcmdzLnB1c2goZnVuY3Rpb24ocmVzdWx0MCwgcmVzdWx0MSkge1xuICAgICAgICAgICAgICAgIGlmIChub0Vycm9yVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShtdWx0aVN1Y2Nlc3NWYWx1ZXMgPyBBcnJheVNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKSA6IHJlc3VsdDApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QocmVzdWx0MCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKG11bHRpU3VjY2Vzc1ZhbHVlcyA/IEFycmF5U2xpY2UuY2FsbChhcmd1bWVudHMsIDEpIDogcmVzdWx0MSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNiQmFzZWRGbi5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uICRuNHByb21pc2lmeU1ldGhvZChyZWNlaXZlciwgbWV0aG9kTmFtZSwgYXJncywgbXVsdGlTdWNjZXNzVmFsdWVzLCBub0Vycm9yVmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgYXJncy5wdXNoKGZ1bmN0aW9uKHJlc3VsdDAsIHJlc3VsdDEpIHtcbiAgICAgICAgICAgICAgICBpZiAobm9FcnJvclZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUobXVsdGlTdWNjZXNzVmFsdWVzID8gQXJyYXlTbGljZS5jYWxsKGFyZ3VtZW50cywgMCkgOiByZXN1bHQwKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0MCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHJlc3VsdDApO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShtdWx0aVN1Y2Nlc3NWYWx1ZXMgPyBBcnJheVNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSA6IHJlc3VsdDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZWNlaXZlclttZXRob2ROYW1lXS5hcHBseShyZWNlaXZlciwgYXJncyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vZXhwb3NlIGluIGdsb2JhbCBzY29wZVxuICAgIGdsb2JhbC4kbWFrZUNsYXNzID0gJG1ha2VDbGFzcztcbiAgICBnbG9iYWwuJG1ha2VJbnRlcmZhY2UgPSAkbWFrZUludGVyZmFjZTtcbiAgICBnbG9iYWwuJG1ha2VFbnVtID0gJG1ha2VFbnVtO1xuICAgIGdsb2JhbC4kaW1wbGVtZW50cyA9ICRpbXBsZW1lbnRzO1xuICAgIGdsb2JhbC4kaW5zdGFuY2VvZiA9ICRpbnN0YW5jZW9mO1xuICAgIGdsb2JhbC4kc2xpY2VUb0FycmF5Rm9yRGVzdHJ1Y3QgPSAkc2xpY2VUb0FycmF5Rm9yRGVzdHJ1Y3Q7XG4gICAgZ2xvYmFsLiRzcGF3biA9ICRzcGF3bjtcbiAgICBnbG9iYWwuJG40cHJvbWlzaWZ5RnVuY3Rpb24gPSAkbjRwcm9taXNpZnlGdW5jdGlvbjtcbiAgICBnbG9iYWwuJG40cHJvbWlzaWZ5TWV0aG9kID0gJG40cHJvbWlzaWZ5TWV0aG9kO1xuXG59KSh0eXBlb2YgZ2xvYmFsID09PSBcIm9iamVjdFwiID8gZ2xvYmFsIDogc2VsZik7XG4iLCJmdW5jdGlvbiB3ZWJwYWNrRW1wdHlBc3luY0NvbnRleHQocmVxKSB7XG5cdC8vIEhlcmUgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigpIGlzIHVzZWQgaW5zdGVhZCBvZiBuZXcgUHJvbWlzZSgpIHRvIHByZXZlbnRcblx0Ly8gdW5jYXVnaHQgZXhjZXB0aW9uIHBvcHBpbmcgdXAgaW4gZGV2dG9vbHNcblx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9KTtcbn1cbndlYnBhY2tFbXB0eUFzeW5jQ29udGV4dC5rZXlzID0gZnVuY3Rpb24oKSB7IHJldHVybiBbXTsgfTtcbndlYnBhY2tFbXB0eUFzeW5jQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0VtcHR5QXN5bmNDb250ZXh0O1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrRW1wdHlBc3luY0NvbnRleHQ7XG53ZWJwYWNrRW1wdHlBc3luY0NvbnRleHQuaWQgPSA3OyIsIi8qKiBAbGljZW5zZSBSZWFjdCB2MTYuOC42XG4gKiByZWFjdC5wcm9kdWN0aW9uLm1pbi5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0Jzt2YXIgaz1yZXF1aXJlKFwib2JqZWN0LWFzc2lnblwiKSxuPVwiZnVuY3Rpb25cIj09PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5mb3IscD1uP1N5bWJvbC5mb3IoXCJyZWFjdC5lbGVtZW50XCIpOjYwMTAzLHE9bj9TeW1ib2wuZm9yKFwicmVhY3QucG9ydGFsXCIpOjYwMTA2LHI9bj9TeW1ib2wuZm9yKFwicmVhY3QuZnJhZ21lbnRcIik6NjAxMDcsdD1uP1N5bWJvbC5mb3IoXCJyZWFjdC5zdHJpY3RfbW9kZVwiKTo2MDEwOCx1PW4/U3ltYm9sLmZvcihcInJlYWN0LnByb2ZpbGVyXCIpOjYwMTE0LHY9bj9TeW1ib2wuZm9yKFwicmVhY3QucHJvdmlkZXJcIik6NjAxMDksdz1uP1N5bWJvbC5mb3IoXCJyZWFjdC5jb250ZXh0XCIpOjYwMTEwLHg9bj9TeW1ib2wuZm9yKFwicmVhY3QuY29uY3VycmVudF9tb2RlXCIpOjYwMTExLHk9bj9TeW1ib2wuZm9yKFwicmVhY3QuZm9yd2FyZF9yZWZcIik6NjAxMTIsej1uP1N5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZVwiKTo2MDExMyxhYT1uP1N5bWJvbC5mb3IoXCJyZWFjdC5tZW1vXCIpOlxuNjAxMTUsYmE9bj9TeW1ib2wuZm9yKFwicmVhY3QubGF6eVwiKTo2MDExNixBPVwiZnVuY3Rpb25cIj09PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvcjtmdW5jdGlvbiBjYShhLGIsZCxjLGUsZyxoLGYpe2lmKCFhKXthPXZvaWQgMDtpZih2b2lkIDA9PT1iKWE9RXJyb3IoXCJNaW5pZmllZCBleGNlcHRpb24gb2NjdXJyZWQ7IHVzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCBmb3IgdGhlIGZ1bGwgZXJyb3IgbWVzc2FnZSBhbmQgYWRkaXRpb25hbCBoZWxwZnVsIHdhcm5pbmdzLlwiKTtlbHNle3ZhciBsPVtkLGMsZSxnLGgsZl0sbT0wO2E9RXJyb3IoYi5yZXBsYWNlKC8lcy9nLGZ1bmN0aW9uKCl7cmV0dXJuIGxbbSsrXX0pKTthLm5hbWU9XCJJbnZhcmlhbnQgVmlvbGF0aW9uXCJ9YS5mcmFtZXNUb1BvcD0xO3Rocm93IGE7fX1cbmZ1bmN0aW9uIEIoYSl7Zm9yKHZhciBiPWFyZ3VtZW50cy5sZW5ndGgtMSxkPVwiaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL2Vycm9yLWRlY29kZXIuaHRtbD9pbnZhcmlhbnQ9XCIrYSxjPTA7YzxiO2MrKylkKz1cIiZhcmdzW109XCIrZW5jb2RlVVJJQ29tcG9uZW50KGFyZ3VtZW50c1tjKzFdKTtjYSghMSxcIk1pbmlmaWVkIFJlYWN0IGVycm9yICNcIithK1wiOyB2aXNpdCAlcyBmb3IgdGhlIGZ1bGwgbWVzc2FnZSBvciB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgZm9yIGZ1bGwgZXJyb3JzIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuIFwiLGQpfXZhciBDPXtpc01vdW50ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZW5xdWV1ZUZvcmNlVXBkYXRlOmZ1bmN0aW9uKCl7fSxlbnF1ZXVlUmVwbGFjZVN0YXRlOmZ1bmN0aW9uKCl7fSxlbnF1ZXVlU2V0U3RhdGU6ZnVuY3Rpb24oKXt9fSxEPXt9O1xuZnVuY3Rpb24gRShhLGIsZCl7dGhpcy5wcm9wcz1hO3RoaXMuY29udGV4dD1iO3RoaXMucmVmcz1EO3RoaXMudXBkYXRlcj1kfHxDfUUucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9e307RS5wcm90b3R5cGUuc2V0U3RhdGU9ZnVuY3Rpb24oYSxiKXtcIm9iamVjdFwiIT09dHlwZW9mIGEmJlwiZnVuY3Rpb25cIiE9PXR5cGVvZiBhJiZudWxsIT1hP0IoXCI4NVwiKTp2b2lkIDA7dGhpcy51cGRhdGVyLmVucXVldWVTZXRTdGF0ZSh0aGlzLGEsYixcInNldFN0YXRlXCIpfTtFLnByb3RvdHlwZS5mb3JjZVVwZGF0ZT1mdW5jdGlvbihhKXt0aGlzLnVwZGF0ZXIuZW5xdWV1ZUZvcmNlVXBkYXRlKHRoaXMsYSxcImZvcmNlVXBkYXRlXCIpfTtmdW5jdGlvbiBGKCl7fUYucHJvdG90eXBlPUUucHJvdG90eXBlO2Z1bmN0aW9uIEcoYSxiLGQpe3RoaXMucHJvcHM9YTt0aGlzLmNvbnRleHQ9Yjt0aGlzLnJlZnM9RDt0aGlzLnVwZGF0ZXI9ZHx8Q312YXIgSD1HLnByb3RvdHlwZT1uZXcgRjtcbkguY29uc3RydWN0b3I9RztrKEgsRS5wcm90b3R5cGUpO0guaXNQdXJlUmVhY3RDb21wb25lbnQ9ITA7dmFyIEk9e2N1cnJlbnQ6bnVsbH0sSj17Y3VycmVudDpudWxsfSxLPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksTD17a2V5OiEwLHJlZjohMCxfX3NlbGY6ITAsX19zb3VyY2U6ITB9O1xuZnVuY3Rpb24gTShhLGIsZCl7dmFyIGM9dm9pZCAwLGU9e30sZz1udWxsLGg9bnVsbDtpZihudWxsIT1iKWZvcihjIGluIHZvaWQgMCE9PWIucmVmJiYoaD1iLnJlZiksdm9pZCAwIT09Yi5rZXkmJihnPVwiXCIrYi5rZXkpLGIpSy5jYWxsKGIsYykmJiFMLmhhc093blByb3BlcnR5KGMpJiYoZVtjXT1iW2NdKTt2YXIgZj1hcmd1bWVudHMubGVuZ3RoLTI7aWYoMT09PWYpZS5jaGlsZHJlbj1kO2Vsc2UgaWYoMTxmKXtmb3IodmFyIGw9QXJyYXkoZiksbT0wO208ZjttKyspbFttXT1hcmd1bWVudHNbbSsyXTtlLmNoaWxkcmVuPWx9aWYoYSYmYS5kZWZhdWx0UHJvcHMpZm9yKGMgaW4gZj1hLmRlZmF1bHRQcm9wcyxmKXZvaWQgMD09PWVbY10mJihlW2NdPWZbY10pO3JldHVybnskJHR5cGVvZjpwLHR5cGU6YSxrZXk6ZyxyZWY6aCxwcm9wczplLF9vd25lcjpKLmN1cnJlbnR9fVxuZnVuY3Rpb24gZGEoYSxiKXtyZXR1cm57JCR0eXBlb2Y6cCx0eXBlOmEudHlwZSxrZXk6YixyZWY6YS5yZWYscHJvcHM6YS5wcm9wcyxfb3duZXI6YS5fb3duZXJ9fWZ1bmN0aW9uIE4oYSl7cmV0dXJuXCJvYmplY3RcIj09PXR5cGVvZiBhJiZudWxsIT09YSYmYS4kJHR5cGVvZj09PXB9ZnVuY3Rpb24gZXNjYXBlKGEpe3ZhciBiPXtcIj1cIjpcIj0wXCIsXCI6XCI6XCI9MlwifTtyZXR1cm5cIiRcIisoXCJcIithKS5yZXBsYWNlKC9bPTpdL2csZnVuY3Rpb24oYSl7cmV0dXJuIGJbYV19KX12YXIgTz0vXFwvKy9nLFA9W107ZnVuY3Rpb24gUShhLGIsZCxjKXtpZihQLmxlbmd0aCl7dmFyIGU9UC5wb3AoKTtlLnJlc3VsdD1hO2Uua2V5UHJlZml4PWI7ZS5mdW5jPWQ7ZS5jb250ZXh0PWM7ZS5jb3VudD0wO3JldHVybiBlfXJldHVybntyZXN1bHQ6YSxrZXlQcmVmaXg6YixmdW5jOmQsY29udGV4dDpjLGNvdW50OjB9fVxuZnVuY3Rpb24gUihhKXthLnJlc3VsdD1udWxsO2Eua2V5UHJlZml4PW51bGw7YS5mdW5jPW51bGw7YS5jb250ZXh0PW51bGw7YS5jb3VudD0wOzEwPlAubGVuZ3RoJiZQLnB1c2goYSl9XG5mdW5jdGlvbiBTKGEsYixkLGMpe3ZhciBlPXR5cGVvZiBhO2lmKFwidW5kZWZpbmVkXCI9PT1lfHxcImJvb2xlYW5cIj09PWUpYT1udWxsO3ZhciBnPSExO2lmKG51bGw9PT1hKWc9ITA7ZWxzZSBzd2l0Y2goZSl7Y2FzZSBcInN0cmluZ1wiOmNhc2UgXCJudW1iZXJcIjpnPSEwO2JyZWFrO2Nhc2UgXCJvYmplY3RcIjpzd2l0Y2goYS4kJHR5cGVvZil7Y2FzZSBwOmNhc2UgcTpnPSEwfX1pZihnKXJldHVybiBkKGMsYSxcIlwiPT09Yj9cIi5cIitUKGEsMCk6YiksMTtnPTA7Yj1cIlwiPT09Yj9cIi5cIjpiK1wiOlwiO2lmKEFycmF5LmlzQXJyYXkoYSkpZm9yKHZhciBoPTA7aDxhLmxlbmd0aDtoKyspe2U9YVtoXTt2YXIgZj1iK1QoZSxoKTtnKz1TKGUsZixkLGMpfWVsc2UgaWYobnVsbD09PWF8fFwib2JqZWN0XCIhPT10eXBlb2YgYT9mPW51bGw6KGY9QSYmYVtBXXx8YVtcIkBAaXRlcmF0b3JcIl0sZj1cImZ1bmN0aW9uXCI9PT10eXBlb2YgZj9mOm51bGwpLFwiZnVuY3Rpb25cIj09PXR5cGVvZiBmKWZvcihhPWYuY2FsbChhKSxoPVxuMDshKGU9YS5uZXh0KCkpLmRvbmU7KWU9ZS52YWx1ZSxmPWIrVChlLGgrKyksZys9UyhlLGYsZCxjKTtlbHNlXCJvYmplY3RcIj09PWUmJihkPVwiXCIrYSxCKFwiMzFcIixcIltvYmplY3QgT2JqZWN0XVwiPT09ZD9cIm9iamVjdCB3aXRoIGtleXMge1wiK09iamVjdC5rZXlzKGEpLmpvaW4oXCIsIFwiKStcIn1cIjpkLFwiXCIpKTtyZXR1cm4gZ31mdW5jdGlvbiBVKGEsYixkKXtyZXR1cm4gbnVsbD09YT8wOlMoYSxcIlwiLGIsZCl9ZnVuY3Rpb24gVChhLGIpe3JldHVyblwib2JqZWN0XCI9PT10eXBlb2YgYSYmbnVsbCE9PWEmJm51bGwhPWEua2V5P2VzY2FwZShhLmtleSk6Yi50b1N0cmluZygzNil9ZnVuY3Rpb24gZWEoYSxiKXthLmZ1bmMuY2FsbChhLmNvbnRleHQsYixhLmNvdW50KyspfVxuZnVuY3Rpb24gZmEoYSxiLGQpe3ZhciBjPWEucmVzdWx0LGU9YS5rZXlQcmVmaXg7YT1hLmZ1bmMuY2FsbChhLmNvbnRleHQsYixhLmNvdW50KyspO0FycmF5LmlzQXJyYXkoYSk/VihhLGMsZCxmdW5jdGlvbihhKXtyZXR1cm4gYX0pOm51bGwhPWEmJihOKGEpJiYoYT1kYShhLGUrKCFhLmtleXx8YiYmYi5rZXk9PT1hLmtleT9cIlwiOihcIlwiK2Eua2V5KS5yZXBsYWNlKE8sXCIkJi9cIikrXCIvXCIpK2QpKSxjLnB1c2goYSkpfWZ1bmN0aW9uIFYoYSxiLGQsYyxlKXt2YXIgZz1cIlwiO251bGwhPWQmJihnPShcIlwiK2QpLnJlcGxhY2UoTyxcIiQmL1wiKStcIi9cIik7Yj1RKGIsZyxjLGUpO1UoYSxmYSxiKTtSKGIpfWZ1bmN0aW9uIFcoKXt2YXIgYT1JLmN1cnJlbnQ7bnVsbD09PWE/QihcIjMyMVwiKTp2b2lkIDA7cmV0dXJuIGF9XG52YXIgWD17Q2hpbGRyZW46e21hcDpmdW5jdGlvbihhLGIsZCl7aWYobnVsbD09YSlyZXR1cm4gYTt2YXIgYz1bXTtWKGEsYyxudWxsLGIsZCk7cmV0dXJuIGN9LGZvckVhY2g6ZnVuY3Rpb24oYSxiLGQpe2lmKG51bGw9PWEpcmV0dXJuIGE7Yj1RKG51bGwsbnVsbCxiLGQpO1UoYSxlYSxiKTtSKGIpfSxjb3VudDpmdW5jdGlvbihhKXtyZXR1cm4gVShhLGZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LG51bGwpfSx0b0FycmF5OmZ1bmN0aW9uKGEpe3ZhciBiPVtdO1YoYSxiLG51bGwsZnVuY3Rpb24oYSl7cmV0dXJuIGF9KTtyZXR1cm4gYn0sb25seTpmdW5jdGlvbihhKXtOKGEpP3ZvaWQgMDpCKFwiMTQzXCIpO3JldHVybiBhfX0sY3JlYXRlUmVmOmZ1bmN0aW9uKCl7cmV0dXJue2N1cnJlbnQ6bnVsbH19LENvbXBvbmVudDpFLFB1cmVDb21wb25lbnQ6RyxjcmVhdGVDb250ZXh0OmZ1bmN0aW9uKGEsYil7dm9pZCAwPT09YiYmKGI9bnVsbCk7YT17JCR0eXBlb2Y6dyxfY2FsY3VsYXRlQ2hhbmdlZEJpdHM6Yixcbl9jdXJyZW50VmFsdWU6YSxfY3VycmVudFZhbHVlMjphLF90aHJlYWRDb3VudDowLFByb3ZpZGVyOm51bGwsQ29uc3VtZXI6bnVsbH07YS5Qcm92aWRlcj17JCR0eXBlb2Y6dixfY29udGV4dDphfTtyZXR1cm4gYS5Db25zdW1lcj1hfSxmb3J3YXJkUmVmOmZ1bmN0aW9uKGEpe3JldHVybnskJHR5cGVvZjp5LHJlbmRlcjphfX0sbGF6eTpmdW5jdGlvbihhKXtyZXR1cm57JCR0eXBlb2Y6YmEsX2N0b3I6YSxfc3RhdHVzOi0xLF9yZXN1bHQ6bnVsbH19LG1lbW86ZnVuY3Rpb24oYSxiKXtyZXR1cm57JCR0eXBlb2Y6YWEsdHlwZTphLGNvbXBhcmU6dm9pZCAwPT09Yj9udWxsOmJ9fSx1c2VDYWxsYmFjazpmdW5jdGlvbihhLGIpe3JldHVybiBXKCkudXNlQ2FsbGJhY2soYSxiKX0sdXNlQ29udGV4dDpmdW5jdGlvbihhLGIpe3JldHVybiBXKCkudXNlQ29udGV4dChhLGIpfSx1c2VFZmZlY3Q6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gVygpLnVzZUVmZmVjdChhLGIpfSx1c2VJbXBlcmF0aXZlSGFuZGxlOmZ1bmN0aW9uKGEsXG5iLGQpe3JldHVybiBXKCkudXNlSW1wZXJhdGl2ZUhhbmRsZShhLGIsZCl9LHVzZURlYnVnVmFsdWU6ZnVuY3Rpb24oKXt9LHVzZUxheW91dEVmZmVjdDpmdW5jdGlvbihhLGIpe3JldHVybiBXKCkudXNlTGF5b3V0RWZmZWN0KGEsYil9LHVzZU1lbW86ZnVuY3Rpb24oYSxiKXtyZXR1cm4gVygpLnVzZU1lbW8oYSxiKX0sdXNlUmVkdWNlcjpmdW5jdGlvbihhLGIsZCl7cmV0dXJuIFcoKS51c2VSZWR1Y2VyKGEsYixkKX0sdXNlUmVmOmZ1bmN0aW9uKGEpe3JldHVybiBXKCkudXNlUmVmKGEpfSx1c2VTdGF0ZTpmdW5jdGlvbihhKXtyZXR1cm4gVygpLnVzZVN0YXRlKGEpfSxGcmFnbWVudDpyLFN0cmljdE1vZGU6dCxTdXNwZW5zZTp6LGNyZWF0ZUVsZW1lbnQ6TSxjbG9uZUVsZW1lbnQ6ZnVuY3Rpb24oYSxiLGQpe251bGw9PT1hfHx2b2lkIDA9PT1hP0IoXCIyNjdcIixhKTp2b2lkIDA7dmFyIGM9dm9pZCAwLGU9ayh7fSxhLnByb3BzKSxnPWEua2V5LGg9YS5yZWYsZj1hLl9vd25lcjtpZihudWxsIT1cbmIpe3ZvaWQgMCE9PWIucmVmJiYoaD1iLnJlZixmPUouY3VycmVudCk7dm9pZCAwIT09Yi5rZXkmJihnPVwiXCIrYi5rZXkpO3ZhciBsPXZvaWQgMDthLnR5cGUmJmEudHlwZS5kZWZhdWx0UHJvcHMmJihsPWEudHlwZS5kZWZhdWx0UHJvcHMpO2ZvcihjIGluIGIpSy5jYWxsKGIsYykmJiFMLmhhc093blByb3BlcnR5KGMpJiYoZVtjXT12b2lkIDA9PT1iW2NdJiZ2b2lkIDAhPT1sP2xbY106YltjXSl9Yz1hcmd1bWVudHMubGVuZ3RoLTI7aWYoMT09PWMpZS5jaGlsZHJlbj1kO2Vsc2UgaWYoMTxjKXtsPUFycmF5KGMpO2Zvcih2YXIgbT0wO208YzttKyspbFttXT1hcmd1bWVudHNbbSsyXTtlLmNoaWxkcmVuPWx9cmV0dXJueyQkdHlwZW9mOnAsdHlwZTphLnR5cGUsa2V5OmcscmVmOmgscHJvcHM6ZSxfb3duZXI6Zn19LGNyZWF0ZUZhY3Rvcnk6ZnVuY3Rpb24oYSl7dmFyIGI9TS5iaW5kKG51bGwsYSk7Yi50eXBlPWE7cmV0dXJuIGJ9LGlzVmFsaWRFbGVtZW50Ok4sdmVyc2lvbjpcIjE2LjguNlwiLFxudW5zdGFibGVfQ29uY3VycmVudE1vZGU6eCx1bnN0YWJsZV9Qcm9maWxlcjp1LF9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEOntSZWFjdEN1cnJlbnREaXNwYXRjaGVyOkksUmVhY3RDdXJyZW50T3duZXI6Sixhc3NpZ246a319LFk9e2RlZmF1bHQ6WH0sWj1ZJiZYfHxZO21vZHVsZS5leHBvcnRzPVouZGVmYXVsdHx8WjtcbiIsIi8qXG5vYmplY3QtYXNzaWduXG4oYykgU2luZHJlIFNvcmh1c1xuQGxpY2Vuc2UgTUlUXG4qL1xuXG4ndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xudmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG5mdW5jdGlvbiB0b09iamVjdCh2YWwpIHtcblx0aWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkJyk7XG5cdH1cblxuXHRyZXR1cm4gT2JqZWN0KHZhbCk7XG59XG5cbmZ1bmN0aW9uIHNob3VsZFVzZU5hdGl2ZSgpIHtcblx0dHJ5IHtcblx0XHRpZiAoIU9iamVjdC5hc3NpZ24pIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBEZXRlY3QgYnVnZ3kgcHJvcGVydHkgZW51bWVyYXRpb24gb3JkZXIgaW4gb2xkZXIgVjggdmVyc2lvbnMuXG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD00MTE4XG5cdFx0dmFyIHRlc3QxID0gbmV3IFN0cmluZygnYWJjJyk7ICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ldy13cmFwcGVyc1xuXHRcdHRlc3QxWzVdID0gJ2RlJztcblx0XHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDEpWzBdID09PSAnNScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XG5cdFx0dmFyIHRlc3QyID0ge307XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG5cdFx0XHR0ZXN0MlsnXycgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGkpXSA9IGk7XG5cdFx0fVxuXHRcdHZhciBvcmRlcjIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MikubWFwKGZ1bmN0aW9uIChuKSB7XG5cdFx0XHRyZXR1cm4gdGVzdDJbbl07XG5cdFx0fSk7XG5cdFx0aWYgKG9yZGVyMi5qb2luKCcnKSAhPT0gJzAxMjM0NTY3ODknKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MyA9IHt9O1xuXHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGxldHRlcikge1xuXHRcdFx0dGVzdDNbbGV0dGVyXSA9IGxldHRlcjtcblx0XHR9KTtcblx0XHRpZiAoT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSwgdGVzdDMpKS5qb2luKCcnKSAhPT1cblx0XHRcdFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlcnIpIHtcblx0XHQvLyBXZSBkb24ndCBleHBlY3QgYW55IG9mIHRoZSBhYm92ZSB0byB0aHJvdywgYnV0IGJldHRlciB0byBiZSBzYWZlLlxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNob3VsZFVzZU5hdGl2ZSgpID8gT2JqZWN0LmFzc2lnbiA6IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuXHR2YXIgZnJvbTtcblx0dmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTtcblx0dmFyIHN5bWJvbHM7XG5cblx0Zm9yICh2YXIgcyA9IDE7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspIHtcblx0XHRmcm9tID0gT2JqZWN0KGFyZ3VtZW50c1tzXSk7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuXHRcdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwoZnJvbSwga2V5KSkge1xuXHRcdFx0XHR0b1trZXldID0gZnJvbVtrZXldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcblx0XHRcdHN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkge1xuXHRcdFx0XHRcdHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0bztcbn07XG4iLCIvLyBHZW5lcmF0ZWQgYnkgTjRKUyB0cmFuc3BpbGVyOyBmb3IgY29weXJpZ2h0IHNlZSBvcmlnaW5hbCBONEpTIHNvdXJjZSBmaWxlLlxuXG5pbXBvcnQgJ240anMtcnVudGltZSdcblxuZXhwb3J0IGZ1bmN0aW9uIENvb3JkaW5hdGUoc3BlYykge1xuXHR0aGlzLnJvdyA9IHNwZWMgJiYgJ3JvdycgaW4gc3BlYyA/IHNwZWMucm93IDogdW5kZWZpbmVkO1xuXHR0aGlzLmNvbCA9IHNwZWMgJiYgJ2NvbCcgaW4gc3BlYyA/IHNwZWMuY29sIDogdW5kZWZpbmVkO1xuXHRpZiAoc3BlYykge31cbn1cbiRtYWtlQ2xhc3MoQ29vcmRpbmF0ZSwgTjRPYmplY3QsIFtdLCB7XG5cdGVxdWFsczoge1xuXHRcdHZhbHVlOiBmdW5jdGlvbiBlcXVhbHNfX19uNChvdGhlcikge1xuXHRcdFx0cmV0dXJuICh0aGlzLnJvdyA9PSBvdGhlci5yb3cpICYmICh0aGlzLmNvbCA9PSBvdGhlci5jb2wpO1xuXHRcdH1cblx0fSxcblx0Z2V0Qm9hcmRDb29yZGluYXRlUmVwcmVzZW50YXRpb246IHtcblx0XHR2YWx1ZTogZnVuY3Rpb24gZ2V0Qm9hcmRDb29yZGluYXRlUmVwcmVzZW50YXRpb25fX19uNCgpIHtcblx0XHRcdGNvbnN0IHJvd0xhYmVsID0gOCAtIHRoaXMucm93O1xuXHRcdFx0Y29uc3QgY29sTGFiZWwgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKCdhJy5jaGFyQ29kZUF0KDApICsgdGhpcy5jb2wpO1xuXHRcdFx0cmV0dXJuIGAoJHtyb3dMYWJlbCArICcsJyArIGNvbExhYmVsfSlgO1xuXHRcdH1cblx0fSxcblx0dG9TdHJpbmc6IHtcblx0XHR2YWx1ZTogZnVuY3Rpb24gdG9TdHJpbmdfX19uNCgpIHtcblx0XHRcdHJldHVybiBgKCR7dGhpcy5yb3d9LCR7dGhpcy5jb2x9KWA7XG5cdFx0fVxuXHR9LFxuXHRyb3c6IHtcblx0XHR2YWx1ZTogdW5kZWZpbmVkLFxuXHRcdHdyaXRhYmxlOiB0cnVlXG5cdH0sXG5cdGNvbDoge1xuXHRcdHZhbHVlOiB1bmRlZmluZWQsXG5cdFx0d3JpdGFibGU6IHRydWVcblx0fVxufSwge30sIGZ1bmN0aW9uKGluc3RhbmNlUHJvdG8sIHN0YXRpY1Byb3RvKSB7XG5cdHZhciBtZXRhQ2xhc3MgPSBuZXcgTjRDbGFzcyh7XG5cdFx0bmFtZTogJ0Nvb3JkaW5hdGUnLFxuXHRcdG9yaWdpbjogJ2NoZXNzLXJlYWN0Jyxcblx0XHRmcW46ICdDb29yZGluYXRlLkNvb3JkaW5hdGUnLFxuXHRcdG40c3VwZXJUeXBlOiBONE9iamVjdC5uNHR5cGUsXG5cdFx0YWxsSW1wbGVtZW50ZWRJbnRlcmZhY2VzOiBbXSxcblx0XHRvd25lZE1lbWJlcnM6IFtcblx0XHRcdG5ldyBONERhdGFGaWVsZCh7XG5cdFx0XHRcdG5hbWU6ICdyb3cnLFxuXHRcdFx0XHRpc1N0YXRpYzogZmFsc2UsXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjREYXRhRmllbGQoe1xuXHRcdFx0XHRuYW1lOiAnY29sJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRhbm5vdGF0aW9uczogW11cblx0XHRcdH0pLFxuXHRcdFx0bmV3IE40TWV0aG9kKHtcblx0XHRcdFx0bmFtZTogJ2NvbnN0cnVjdG9yJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRqc0Z1bmN0aW9uOiBpbnN0YW5jZVByb3RvWydjb25zdHJ1Y3RvciddLFxuXHRcdFx0XHRhbm5vdGF0aW9uczogW11cblx0XHRcdH0pLFxuXHRcdFx0bmV3IE40TWV0aG9kKHtcblx0XHRcdFx0bmFtZTogJ2VxdWFscycsXG5cdFx0XHRcdGlzU3RhdGljOiBmYWxzZSxcblx0XHRcdFx0anNGdW5jdGlvbjogaW5zdGFuY2VQcm90b1snZXF1YWxzJ10sXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjRNZXRob2Qoe1xuXHRcdFx0XHRuYW1lOiAnZ2V0Qm9hcmRDb29yZGluYXRlUmVwcmVzZW50YXRpb24nLFxuXHRcdFx0XHRpc1N0YXRpYzogZmFsc2UsXG5cdFx0XHRcdGpzRnVuY3Rpb246IGluc3RhbmNlUHJvdG9bJ2dldEJvYXJkQ29vcmRpbmF0ZVJlcHJlc2VudGF0aW9uJ10sXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjRNZXRob2Qoe1xuXHRcdFx0XHRuYW1lOiAndG9TdHJpbmcnLFxuXHRcdFx0XHRpc1N0YXRpYzogZmFsc2UsXG5cdFx0XHRcdGpzRnVuY3Rpb246IGluc3RhbmNlUHJvdG9bJ3RvU3RyaW5nJ10sXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSlcblx0XHRdLFxuXHRcdGNvbnN1bWVkTWVtYmVyczogW10sXG5cdFx0YW5ub3RhdGlvbnM6IFtdXG5cdH0pO1xuXHRyZXR1cm4gbWV0YUNsYXNzO1xufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Db29yZGluYXRlLm1hcFxuIiwiLy8gR2VuZXJhdGVkIGJ5IE40SlMgdHJhbnNwaWxlcjsgZm9yIGNvcHlyaWdodCBzZWUgb3JpZ2luYWwgTjRKUyBzb3VyY2UgZmlsZS5cblxuaW1wb3J0ICduNGpzLXJ1bnRpbWUnXG5cbmV4cG9ydCBmdW5jdGlvbiBNb3ZlKHNwZWMpIHtcblx0dGhpcy5waWVjZSA9IHNwZWMgJiYgJ3BpZWNlJyBpbiBzcGVjID8gc3BlYy5waWVjZSA6IHVuZGVmaW5lZDtcblx0dGhpcy5mcm9tUG9zID0gc3BlYyAmJiAnZnJvbVBvcycgaW4gc3BlYyA/IHNwZWMuZnJvbVBvcyA6IHVuZGVmaW5lZDtcblx0dGhpcy50b1BvcyA9IHNwZWMgJiYgJ3RvUG9zJyBpbiBzcGVjID8gc3BlYy50b1BvcyA6IHVuZGVmaW5lZDtcblx0aWYgKHNwZWMpIHt9XG59XG4kbWFrZUNsYXNzKE1vdmUsIE40T2JqZWN0LCBbXSwge1xuXHR0b1N0cmluZzoge1xuXHRcdHZhbHVlOiBmdW5jdGlvbiB0b1N0cmluZ19fX240KCkge1xuXHRcdFx0cmV0dXJuIHRoaXMucGllY2UgKyAnICcgKyB0aGlzLmZyb21Qb3MuZ2V0Qm9hcmRDb29yZGluYXRlUmVwcmVzZW50YXRpb24oKSArICfihpInICsgdGhpcy50b1Bvcy5nZXRCb2FyZENvb3JkaW5hdGVSZXByZXNlbnRhdGlvbigpO1xuXHRcdH1cblx0fSxcblx0cGllY2U6IHtcblx0XHR2YWx1ZTogdW5kZWZpbmVkLFxuXHRcdHdyaXRhYmxlOiB0cnVlXG5cdH0sXG5cdGZyb21Qb3M6IHtcblx0XHR2YWx1ZTogdW5kZWZpbmVkLFxuXHRcdHdyaXRhYmxlOiB0cnVlXG5cdH0sXG5cdHRvUG9zOiB7XG5cdFx0dmFsdWU6IHVuZGVmaW5lZCxcblx0XHR3cml0YWJsZTogdHJ1ZVxuXHR9XG59LCB7fSwgZnVuY3Rpb24oaW5zdGFuY2VQcm90bywgc3RhdGljUHJvdG8pIHtcblx0dmFyIG1ldGFDbGFzcyA9IG5ldyBONENsYXNzKHtcblx0XHRuYW1lOiAnTW92ZScsXG5cdFx0b3JpZ2luOiAnY2hlc3MtcmVhY3QnLFxuXHRcdGZxbjogJ01vdmUuTW92ZScsXG5cdFx0bjRzdXBlclR5cGU6IE40T2JqZWN0Lm40dHlwZSxcblx0XHRhbGxJbXBsZW1lbnRlZEludGVyZmFjZXM6IFtdLFxuXHRcdG93bmVkTWVtYmVyczogW1xuXHRcdFx0bmV3IE40RGF0YUZpZWxkKHtcblx0XHRcdFx0bmFtZTogJ3BpZWNlJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRhbm5vdGF0aW9uczogW11cblx0XHRcdH0pLFxuXHRcdFx0bmV3IE40RGF0YUZpZWxkKHtcblx0XHRcdFx0bmFtZTogJ2Zyb21Qb3MnLFxuXHRcdFx0XHRpc1N0YXRpYzogZmFsc2UsXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjREYXRhRmllbGQoe1xuXHRcdFx0XHRuYW1lOiAndG9Qb3MnLFxuXHRcdFx0XHRpc1N0YXRpYzogZmFsc2UsXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjRNZXRob2Qoe1xuXHRcdFx0XHRuYW1lOiAnY29uc3RydWN0b3InLFxuXHRcdFx0XHRpc1N0YXRpYzogZmFsc2UsXG5cdFx0XHRcdGpzRnVuY3Rpb246IGluc3RhbmNlUHJvdG9bJ2NvbnN0cnVjdG9yJ10sXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjRNZXRob2Qoe1xuXHRcdFx0XHRuYW1lOiAndG9TdHJpbmcnLFxuXHRcdFx0XHRpc1N0YXRpYzogZmFsc2UsXG5cdFx0XHRcdGpzRnVuY3Rpb246IGluc3RhbmNlUHJvdG9bJ3RvU3RyaW5nJ10sXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSlcblx0XHRdLFxuXHRcdGNvbnN1bWVkTWVtYmVyczogW10sXG5cdFx0YW5ub3RhdGlvbnM6IFtdXG5cdH0pO1xuXHRyZXR1cm4gbWV0YUNsYXNzO1xufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Nb3ZlLm1hcFxuIiwiLy8gR2VuZXJhdGVkIGJ5IE40SlMgdHJhbnNwaWxlcjsgZm9yIGNvcHlyaWdodCBzZWUgb3JpZ2luYWwgTjRKUyBzb3VyY2UgZmlsZS5cblxuaW1wb3J0ICduNGpzLXJ1bnRpbWUnXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuZXhwb3J0IHZhciBDb29yZGluYXRlU3F1YXJlUHJvcHMgPSB7fTtcbkNvb3JkaW5hdGVTcXVhcmVQcm9wcy4kZmllbGRJbml0ID0gZnVuY3Rpb24gQ29vcmRpbmF0ZVNxdWFyZVByb3BzX2ZpZWxkSW5pdChzcGVjLCBtaXhpbkV4Y2x1c2lvbikge1xuXHRpZiAoc3BlYykge1xuXHRcdGlmICghKG1peGluRXhjbHVzaW9uLmhhc093blByb3BlcnR5KCdsYWJlbCcpIHx8IHRoaXMuaGFzT3duUHJvcGVydHkoJ2xhYmVsJykpKSB7XG5cdFx0XHR0aGlzLmxhYmVsID0gJ2xhYmVsJyBpbiBzcGVjID8gc3BlYy5sYWJlbCA6IHVuZGVmaW5lZDtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0aWYgKCEobWl4aW5FeGNsdXNpb24uaGFzT3duUHJvcGVydHkoJ2xhYmVsJykgfHwgdGhpcy5oYXNPd25Qcm9wZXJ0eSgnbGFiZWwnKSkpIHtcblx0XHRcdHRoaXMubGFiZWwgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9XG59O1xuQ29vcmRpbmF0ZVNxdWFyZVByb3BzLiRtZXRob2RzID0ge307XG4kbWFrZUludGVyZmFjZShDb29yZGluYXRlU3F1YXJlUHJvcHMsIGZ1bmN0aW9uKGluc3RhbmNlUHJvdG8sIHN0YXRpY1Byb3RvKSB7XG5cdHZhciBtZXRhQ2xhc3MgPSBuZXcgTjRJbnRlcmZhY2Uoe1xuXHRcdG5hbWU6ICdDb29yZGluYXRlU3F1YXJlUHJvcHMnLFxuXHRcdG9yaWdpbjogJ2NoZXNzLXJlYWN0Jyxcblx0XHRmcW46ICdjb21wb25lbnRzLkNvb3JkaW5hdGVTcXVhcmUuQ29vcmRpbmF0ZVNxdWFyZVByb3BzJyxcblx0XHRuNHN1cGVyVHlwZTogdW5kZWZpbmVkLFxuXHRcdGFsbEltcGxlbWVudGVkSW50ZXJmYWNlczogW10sXG5cdFx0b3duZWRNZW1iZXJzOiBbXG5cdFx0XHRuZXcgTjREYXRhRmllbGQoe1xuXHRcdFx0XHRuYW1lOiAnbGFiZWwnLFxuXHRcdFx0XHRpc1N0YXRpYzogZmFsc2UsXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSlcblx0XHRdLFxuXHRcdGNvbnN1bWVkTWVtYmVyczogW10sXG5cdFx0YW5ub3RhdGlvbnM6IFtdXG5cdH0pO1xuXHRyZXR1cm4gbWV0YUNsYXNzO1xufSk7XG5jb25zdCBsYWJlbFNxdWFyZVN0eWxlcyA9IHtcblx0Zm9udFNpemU6ICcydncnLFxuXHR0ZXh0QWxpZ246ICdjZW50ZXInLFxuXHRkaXNwbGF5OiAnZmxleCcsXG5cdGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcblx0YWxpZ25JdGVtczogJ2NlbnRlcicsXG5cdHdpZHRoOiAnMTAwJScsXG5cdGhlaWdodDogJzEwMCUnXG59O1xuZXhwb3J0IGZ1bmN0aW9uIExhYmVsU3F1YXJlKHByb3BzKSB7XG5cdFJlYWN0LkNvbXBvbmVudC5wcm90b3R5cGUuY29uc3RydWN0b3IuY2FsbCh0aGlzLCBwcm9wcyk7XG59XG4kbWFrZUNsYXNzKExhYmVsU3F1YXJlLCBSZWFjdC5Db21wb25lbnQsIFtdLCB7XG5cdHJlbmRlcjoge1xuXHRcdHZhbHVlOiBmdW5jdGlvbiByZW5kZXJfX19uNCgpIHtcblx0XHRcdHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudCgnZGl2JywgT2JqZWN0LmFzc2lnbih7XG5cdFx0XHRcdHN0eWxlOiBsYWJlbFNxdWFyZVN0eWxlc1xuXHRcdFx0fSksIHRoaXMucHJvcHMubGFiZWwpKTtcblx0XHR9XG5cdH1cbn0sIHt9LCBmdW5jdGlvbihpbnN0YW5jZVByb3RvLCBzdGF0aWNQcm90bykge1xuXHR2YXIgbWV0YUNsYXNzID0gbmV3IE40Q2xhc3Moe1xuXHRcdG5hbWU6ICdMYWJlbFNxdWFyZScsXG5cdFx0b3JpZ2luOiAnY2hlc3MtcmVhY3QnLFxuXHRcdGZxbjogJ2NvbXBvbmVudHMuQ29vcmRpbmF0ZVNxdWFyZS5MYWJlbFNxdWFyZScsXG5cdFx0bjRzdXBlclR5cGU6IHVuZGVmaW5lZCxcblx0XHRhbGxJbXBsZW1lbnRlZEludGVyZmFjZXM6IFtdLFxuXHRcdG93bmVkTWVtYmVyczogW1xuXHRcdFx0bmV3IE40TWV0aG9kKHtcblx0XHRcdFx0bmFtZTogJ3JlbmRlcicsXG5cdFx0XHRcdGlzU3RhdGljOiBmYWxzZSxcblx0XHRcdFx0anNGdW5jdGlvbjogaW5zdGFuY2VQcm90b1sncmVuZGVyJ10sXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSlcblx0XHRdLFxuXHRcdGNvbnN1bWVkTWVtYmVyczogW10sXG5cdFx0YW5ub3RhdGlvbnM6IFtdXG5cdH0pO1xuXHRyZXR1cm4gbWV0YUNsYXNzO1xufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTGFiZWxTcXVhcmUsICckZGknLCB7XG5cdHZhbHVlOiB7XG5cdFx0c3VwZXJUeXBlOiBSZWFjdC5Db21wb25lbnQsXG5cdFx0ZmllbGRzSW5qZWN0ZWRUeXBlczogW11cblx0fVxufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Db29yZGluYXRlU3F1YXJlLm1hcFxuIiwiLy8gR2VuZXJhdGVkIGJ5IE40SlMgdHJhbnNwaWxlcjsgZm9yIGNvcHlyaWdodCBzZWUgb3JpZ2luYWwgTjRKUyBzb3VyY2UgZmlsZS5cblxuaW1wb3J0ICduNGpzLXJ1bnRpbWUnXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuZXhwb3J0IHZhciBTcXVhcmVQcm9wcyA9IHt9O1xuU3F1YXJlUHJvcHMuJGZpZWxkSW5pdCA9IGZ1bmN0aW9uIFNxdWFyZVByb3BzX2ZpZWxkSW5pdChzcGVjLCBtaXhpbkV4Y2x1c2lvbikge1xuXHRpZiAoc3BlYykge1xuXHRcdGlmICghKG1peGluRXhjbHVzaW9uLmhhc093blByb3BlcnR5KCdpc1doaXRlJykgfHwgdGhpcy5oYXNPd25Qcm9wZXJ0eSgnaXNXaGl0ZScpKSkge1xuXHRcdFx0dGhpcy5pc1doaXRlID0gJ2lzV2hpdGUnIGluIHNwZWMgPyBzcGVjLmlzV2hpdGUgOiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmICghKG1peGluRXhjbHVzaW9uLmhhc093blByb3BlcnR5KCdwaWVjZScpIHx8IHRoaXMuaGFzT3duUHJvcGVydHkoJ3BpZWNlJykpKSB7XG5cdFx0XHR0aGlzLnBpZWNlID0gJ3BpZWNlJyBpbiBzcGVjID8gc3BlYy5waWVjZSA6IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0aWYgKCEobWl4aW5FeGNsdXNpb24uaGFzT3duUHJvcGVydHkoJ29uQ2xpY2snKSB8fCB0aGlzLmhhc093blByb3BlcnR5KCdvbkNsaWNrJykpKSB7XG5cdFx0XHR0aGlzLm9uQ2xpY2sgPSAnb25DbGljaycgaW4gc3BlYyA/IHNwZWMub25DbGljayA6IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0aWYgKCEobWl4aW5FeGNsdXNpb24uaGFzT3duUHJvcGVydHkoJ2lzUGlja2VkJykgfHwgdGhpcy5oYXNPd25Qcm9wZXJ0eSgnaXNQaWNrZWQnKSkpIHtcblx0XHRcdHRoaXMuaXNQaWNrZWQgPSAnaXNQaWNrZWQnIGluIHNwZWMgPyBzcGVjLmlzUGlja2VkIDogdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRpZiAoIShtaXhpbkV4Y2x1c2lvbi5oYXNPd25Qcm9wZXJ0eSgnaXNWYWxpZERlc3RpbmF0aW9uJykgfHwgdGhpcy5oYXNPd25Qcm9wZXJ0eSgnaXNWYWxpZERlc3RpbmF0aW9uJykpKSB7XG5cdFx0XHR0aGlzLmlzVmFsaWREZXN0aW5hdGlvbiA9ICdpc1ZhbGlkRGVzdGluYXRpb24nIGluIHNwZWMgPyBzcGVjLmlzVmFsaWREZXN0aW5hdGlvbiA6IHVuZGVmaW5lZDtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0aWYgKCEobWl4aW5FeGNsdXNpb24uaGFzT3duUHJvcGVydHkoJ2lzV2hpdGUnKSB8fCB0aGlzLmhhc093blByb3BlcnR5KCdpc1doaXRlJykpKSB7XG5cdFx0XHR0aGlzLmlzV2hpdGUgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmICghKG1peGluRXhjbHVzaW9uLmhhc093blByb3BlcnR5KCdwaWVjZScpIHx8IHRoaXMuaGFzT3duUHJvcGVydHkoJ3BpZWNlJykpKSB7XG5cdFx0XHR0aGlzLnBpZWNlID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRpZiAoIShtaXhpbkV4Y2x1c2lvbi5oYXNPd25Qcm9wZXJ0eSgnb25DbGljaycpIHx8IHRoaXMuaGFzT3duUHJvcGVydHkoJ29uQ2xpY2snKSkpIHtcblx0XHRcdHRoaXMub25DbGljayA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0aWYgKCEobWl4aW5FeGNsdXNpb24uaGFzT3duUHJvcGVydHkoJ2lzUGlja2VkJykgfHwgdGhpcy5oYXNPd25Qcm9wZXJ0eSgnaXNQaWNrZWQnKSkpIHtcblx0XHRcdHRoaXMuaXNQaWNrZWQgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmICghKG1peGluRXhjbHVzaW9uLmhhc093blByb3BlcnR5KCdpc1ZhbGlkRGVzdGluYXRpb24nKSB8fCB0aGlzLmhhc093blByb3BlcnR5KCdpc1ZhbGlkRGVzdGluYXRpb24nKSkpIHtcblx0XHRcdHRoaXMuaXNWYWxpZERlc3RpbmF0aW9uID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxufTtcblNxdWFyZVByb3BzLiRtZXRob2RzID0ge307XG4kbWFrZUludGVyZmFjZShTcXVhcmVQcm9wcywgZnVuY3Rpb24oaW5zdGFuY2VQcm90bywgc3RhdGljUHJvdG8pIHtcblx0dmFyIG1ldGFDbGFzcyA9IG5ldyBONEludGVyZmFjZSh7XG5cdFx0bmFtZTogJ1NxdWFyZVByb3BzJyxcblx0XHRvcmlnaW46ICdjaGVzcy1yZWFjdCcsXG5cdFx0ZnFuOiAnY29tcG9uZW50cy5TcXVhcmUuU3F1YXJlUHJvcHMnLFxuXHRcdG40c3VwZXJUeXBlOiB1bmRlZmluZWQsXG5cdFx0YWxsSW1wbGVtZW50ZWRJbnRlcmZhY2VzOiBbXSxcblx0XHRvd25lZE1lbWJlcnM6IFtcblx0XHRcdG5ldyBONERhdGFGaWVsZCh7XG5cdFx0XHRcdG5hbWU6ICdpc1doaXRlJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRhbm5vdGF0aW9uczogW11cblx0XHRcdH0pLFxuXHRcdFx0bmV3IE40RGF0YUZpZWxkKHtcblx0XHRcdFx0bmFtZTogJ3BpZWNlJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRhbm5vdGF0aW9uczogW11cblx0XHRcdH0pLFxuXHRcdFx0bmV3IE40RGF0YUZpZWxkKHtcblx0XHRcdFx0bmFtZTogJ29uQ2xpY2snLFxuXHRcdFx0XHRpc1N0YXRpYzogZmFsc2UsXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjREYXRhRmllbGQoe1xuXHRcdFx0XHRuYW1lOiAnaXNQaWNrZWQnLFxuXHRcdFx0XHRpc1N0YXRpYzogZmFsc2UsXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjREYXRhRmllbGQoe1xuXHRcdFx0XHRuYW1lOiAnaXNWYWxpZERlc3RpbmF0aW9uJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRhbm5vdGF0aW9uczogW11cblx0XHRcdH0pXG5cdFx0XSxcblx0XHRjb25zdW1lZE1lbWJlcnM6IFtdLFxuXHRcdGFubm90YXRpb25zOiBbXVxuXHR9KTtcblx0cmV0dXJuIG1ldGFDbGFzcztcbn0pO1xuY29uc3QgYm9hcmRTcXVhcmVTdHlsZXMgPSB7XG5cdGRpc3BsYXk6ICdmbGV4Jyxcblx0anVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuXHRhbGlnbkl0ZW1zOiAnY2VudGVyJyxcblx0d2lkdGg6ICcxMDAlJyxcblx0aGVpZ2h0OiAnMTAwJScsXG5cdGZvbnRTaXplOiAnNXZ3J1xufTtcbmV4cG9ydCBmdW5jdGlvbiBTcXVhcmUocHJvcHMpIHtcblx0bGV0IGJhY2tncm91bmRDb2xvciA9IHByb3BzLmlzV2hpdGUgPyAnI0VBREFCOScgOiAnI0MyQTQ4Mic7XG5cdGlmIChwcm9wcy5pc1BpY2tlZCkge1xuXHRcdGJhY2tncm91bmRDb2xvciA9ICdsaW1lJztcblx0fSBlbHNlIGlmIChwcm9wcy5pc1ZhbGlkRGVzdGluYXRpb24pIHtcblx0XHRiYWNrZ3JvdW5kQ29sb3IgPSAneWVsbG93Jztcblx0fVxuXHRyZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoJ2RpdicsIE9iamVjdC5hc3NpZ24oe1xuXHRcdHN0eWxlOiBPYmplY3QuYXNzaWduKHt9LCBib2FyZFNxdWFyZVN0eWxlcywge1xuXHRcdFx0YmFja2dyb3VuZENvbG9yOiBiYWNrZ3JvdW5kQ29sb3Jcblx0XHR9KSxcblx0XHRvbkNsaWNrOiBwcm9wcy5vbkNsaWNrXG5cdH0pLCBwcm9wcy5waWVjZSkpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9U3F1YXJlLm1hcFxuIiwiLy8gR2VuZXJhdGVkIGJ5IE40SlMgdHJhbnNwaWxlcjsgZm9yIGNvcHlyaWdodCBzZWUgb3JpZ2luYWwgTjRKUyBzb3VyY2UgZmlsZS5cblxuaW1wb3J0ICduNGpzLXJ1bnRpbWUnXG5pbXBvcnQge0Nvb3JkaW5hdGV9IGZyb20gJy4uL0Nvb3JkaW5hdGUnXG5pbXBvcnQge0xhYmVsU3F1YXJlfSBmcm9tICcuL0Nvb3JkaW5hdGVTcXVhcmUnXG5pbXBvcnQge1NxdWFyZX0gZnJvbSAnLi9TcXVhcmUnXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuZXhwb3J0IHZhciBCb2FyZFByb3BzID0ge307XG5Cb2FyZFByb3BzLiRmaWVsZEluaXQgPSBmdW5jdGlvbiBCb2FyZFByb3BzX2ZpZWxkSW5pdChzcGVjLCBtaXhpbkV4Y2x1c2lvbikge1xuXHRpZiAoc3BlYykge1xuXHRcdGlmICghKG1peGluRXhjbHVzaW9uLmhhc093blByb3BlcnR5KCdzcXVhcmVzJykgfHwgdGhpcy5oYXNPd25Qcm9wZXJ0eSgnc3F1YXJlcycpKSkge1xuXHRcdFx0dGhpcy5zcXVhcmVzID0gJ3NxdWFyZXMnIGluIHNwZWMgPyBzcGVjLnNxdWFyZXMgOiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmICghKG1peGluRXhjbHVzaW9uLmhhc093blByb3BlcnR5KCdwaWNrZWRTcXVhcmUnKSB8fCB0aGlzLmhhc093blByb3BlcnR5KCdwaWNrZWRTcXVhcmUnKSkpIHtcblx0XHRcdHRoaXMucGlja2VkU3F1YXJlID0gJ3BpY2tlZFNxdWFyZScgaW4gc3BlYyA/IHNwZWMucGlja2VkU3F1YXJlIDogdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRpZiAoIShtaXhpbkV4Y2x1c2lvbi5oYXNPd25Qcm9wZXJ0eSgndmFsaWREZXN0aW5hdGlvbnMnKSB8fCB0aGlzLmhhc093blByb3BlcnR5KCd2YWxpZERlc3RpbmF0aW9ucycpKSkge1xuXHRcdFx0dGhpcy52YWxpZERlc3RpbmF0aW9ucyA9ICd2YWxpZERlc3RpbmF0aW9ucycgaW4gc3BlYyA/IHNwZWMudmFsaWREZXN0aW5hdGlvbnMgOiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmICghKG1peGluRXhjbHVzaW9uLmhhc093blByb3BlcnR5KCdvbkNsaWNrJykgfHwgdGhpcy5oYXNPd25Qcm9wZXJ0eSgnb25DbGljaycpKSkge1xuXHRcdFx0dGhpcy5vbkNsaWNrID0gJ29uQ2xpY2snIGluIHNwZWMgPyBzcGVjLm9uQ2xpY2sgOiB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGlmICghKG1peGluRXhjbHVzaW9uLmhhc093blByb3BlcnR5KCdzcXVhcmVzJykgfHwgdGhpcy5oYXNPd25Qcm9wZXJ0eSgnc3F1YXJlcycpKSkge1xuXHRcdFx0dGhpcy5zcXVhcmVzID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRpZiAoIShtaXhpbkV4Y2x1c2lvbi5oYXNPd25Qcm9wZXJ0eSgncGlja2VkU3F1YXJlJykgfHwgdGhpcy5oYXNPd25Qcm9wZXJ0eSgncGlja2VkU3F1YXJlJykpKSB7XG5cdFx0XHR0aGlzLnBpY2tlZFNxdWFyZSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0aWYgKCEobWl4aW5FeGNsdXNpb24uaGFzT3duUHJvcGVydHkoJ3ZhbGlkRGVzdGluYXRpb25zJykgfHwgdGhpcy5oYXNPd25Qcm9wZXJ0eSgndmFsaWREZXN0aW5hdGlvbnMnKSkpIHtcblx0XHRcdHRoaXMudmFsaWREZXN0aW5hdGlvbnMgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmICghKG1peGluRXhjbHVzaW9uLmhhc093blByb3BlcnR5KCdvbkNsaWNrJykgfHwgdGhpcy5oYXNPd25Qcm9wZXJ0eSgnb25DbGljaycpKSkge1xuXHRcdFx0dGhpcy5vbkNsaWNrID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxufTtcbkJvYXJkUHJvcHMuJG1ldGhvZHMgPSB7fTtcbiRtYWtlSW50ZXJmYWNlKEJvYXJkUHJvcHMsIGZ1bmN0aW9uKGluc3RhbmNlUHJvdG8sIHN0YXRpY1Byb3RvKSB7XG5cdHZhciBtZXRhQ2xhc3MgPSBuZXcgTjRJbnRlcmZhY2Uoe1xuXHRcdG5hbWU6ICdCb2FyZFByb3BzJyxcblx0XHRvcmlnaW46ICdjaGVzcy1yZWFjdCcsXG5cdFx0ZnFuOiAnY29tcG9uZW50cy5Cb2FyZC5Cb2FyZFByb3BzJyxcblx0XHRuNHN1cGVyVHlwZTogdW5kZWZpbmVkLFxuXHRcdGFsbEltcGxlbWVudGVkSW50ZXJmYWNlczogW10sXG5cdFx0b3duZWRNZW1iZXJzOiBbXG5cdFx0XHRuZXcgTjREYXRhRmllbGQoe1xuXHRcdFx0XHRuYW1lOiAnc3F1YXJlcycsXG5cdFx0XHRcdGlzU3RhdGljOiBmYWxzZSxcblx0XHRcdFx0YW5ub3RhdGlvbnM6IFtdXG5cdFx0XHR9KSxcblx0XHRcdG5ldyBONERhdGFGaWVsZCh7XG5cdFx0XHRcdG5hbWU6ICdwaWNrZWRTcXVhcmUnLFxuXHRcdFx0XHRpc1N0YXRpYzogZmFsc2UsXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjREYXRhRmllbGQoe1xuXHRcdFx0XHRuYW1lOiAndmFsaWREZXN0aW5hdGlvbnMnLFxuXHRcdFx0XHRpc1N0YXRpYzogZmFsc2UsXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjREYXRhRmllbGQoe1xuXHRcdFx0XHRuYW1lOiAnb25DbGljaycsXG5cdFx0XHRcdGlzU3RhdGljOiBmYWxzZSxcblx0XHRcdFx0YW5ub3RhdGlvbnM6IFtdXG5cdFx0XHR9KVxuXHRcdF0sXG5cdFx0Y29uc3VtZWRNZW1iZXJzOiBbXSxcblx0XHRhbm5vdGF0aW9uczogW11cblx0fSk7XG5cdHJldHVybiBtZXRhQ2xhc3M7XG59KTtcbmNvbnN0IGJvYXJkU3R5bGVzID0ge1xuXHRkaXNwbGF5OiAnZmxleCcsXG5cdGZsZXhXcmFwOiAnd3JhcCcsXG5cdHdpZHRoOiAnMTAwJScsXG5cdGhlaWdodDogJzEwMCUnXG59O1xuY29uc3Qgc3F1YXJlU3R5bGVzID0ge1xuXHR3aWR0aDogJzEwJScsXG5cdGhlaWdodDogJzEwJSdcbn07XG5leHBvcnQgZnVuY3Rpb24gQm9hcmQocHJvcHMpIHtcblx0UmVhY3QuQ29tcG9uZW50LnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIHByb3BzKTtcbn1cbiRtYWtlQ2xhc3MoQm9hcmQsIFJlYWN0LkNvbXBvbmVudCwgW10sIHtcblx0cmVuZGVyU3F1YXJlOiB7XG5cdFx0dmFsdWU6IGZ1bmN0aW9uIHJlbmRlclNxdWFyZV9fX240KHBvcywgaXNXaGl0ZSwgaXNQaWNrZWQsIGlzVmFsaWREZXN0aW5hdGlvbiwgcGllY2UpIHtcblx0XHRcdHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudCgnZGl2JywgT2JqZWN0LmFzc2lnbih7XG5cdFx0XHRcdHN0eWxlOiBzcXVhcmVTdHlsZXNcblx0XHRcdH0pLCBSZWFjdC5jcmVhdGVFbGVtZW50KFNxdWFyZSwgT2JqZWN0LmFzc2lnbih7XG5cdFx0XHRcdGlzV2hpdGU6IGlzV2hpdGUsXG5cdFx0XHRcdGlzUGlja2VkOiBpc1BpY2tlZCxcblx0XHRcdFx0aXNWYWxpZERlc3RpbmF0aW9uOiBpc1ZhbGlkRGVzdGluYXRpb24sXG5cdFx0XHRcdHBpZWNlOiBwaWVjZSxcblx0XHRcdFx0b25DbGljazogKCk9PnRoaXMucHJvcHMub25DbGljayhwb3MpXG5cdFx0XHR9KSkpKTtcblx0XHR9XG5cdH0sXG5cdHJlbmRlckNvb3JkaW5hdGVTcXVhcmU6IHtcblx0XHR2YWx1ZTogZnVuY3Rpb24gcmVuZGVyQ29vcmRpbmF0ZVNxdWFyZV9fX240KGxhYmVsKSB7XG5cdFx0XHRyZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoJ2RpdicsIE9iamVjdC5hc3NpZ24oe1xuXHRcdFx0XHRzdHlsZTogc3F1YXJlU3R5bGVzXG5cdFx0XHR9KSwgUmVhY3QuY3JlYXRlRWxlbWVudChMYWJlbFNxdWFyZSwgT2JqZWN0LmFzc2lnbih7XG5cdFx0XHRcdGxhYmVsOiBsYWJlbFxuXHRcdFx0fSkpKSk7XG5cdFx0fVxuXHR9LFxuXHRyZW5kZXJTcXVhcmVzOiB7XG5cdFx0dmFsdWU6IGZ1bmN0aW9uIHJlbmRlclNxdWFyZXNfX19uNCgpIHtcblx0XHRcdGNvbnN0IHNxdWFyZXMgPSBuZXcgQXJyYXkoKTtcblx0XHRcdGxldCBpc1doaXRlSW5pdGlhbCA9IHRydWU7XG5cdFx0XHRzcXVhcmVzLnB1c2godGhpcy5yZW5kZXJDb29yZGluYXRlU3F1YXJlKCcnKSk7XG5cdFx0XHRmb3IobGV0IGkgPSAwO2kgPCA4O2krKykge1xuXHRcdFx0XHRzcXVhcmVzLnB1c2godGhpcy5yZW5kZXJDb29yZGluYXRlU3F1YXJlKFN0cmluZy5mcm9tQ2hhckNvZGUoJ2EnLmNoYXJDb2RlQXQoMCkgKyBpKSkpO1xuXHRcdFx0fVxuXHRcdFx0c3F1YXJlcy5wdXNoKHRoaXMucmVuZGVyQ29vcmRpbmF0ZVNxdWFyZSgnJykpO1xuXHRcdFx0Zm9yKGxldCByb3cgPSAwO3JvdyA8IDg7cm93KyspIHtcblx0XHRcdFx0c3F1YXJlcy5wdXNoKHRoaXMucmVuZGVyQ29vcmRpbmF0ZVNxdWFyZSgoOCAtIHJvdykudG9TdHJpbmcoKSkpO1xuXHRcdFx0XHRsZXQgaXNXaGl0ZSA9IGlzV2hpdGVJbml0aWFsO1xuXHRcdFx0XHRmb3IobGV0IGNvbCA9IDA7Y29sIDwgODtjb2wrKykge1xuXHRcdFx0XHRcdGNvbnN0IHBvcyA9IG5ldyBDb29yZGluYXRlKHtcblx0XHRcdFx0XHRcdHJvdzogcm93LFxuXHRcdFx0XHRcdFx0Y29sOiBjb2xcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRjb25zdCBpc1BvdGVudGlhbERlc3RpbmF0aW9uID0gdGhpcy5wcm9wcy52YWxpZERlc3RpbmF0aW9ucy5maW5kSW5kZXgoKHBvdGVudGlhbERlc3QpPT5wb3RlbnRpYWxEZXN0LmVxdWFscyhwb3MpKSA+PSAwO1xuXHRcdFx0XHRcdHNxdWFyZXMucHVzaCh0aGlzLnJlbmRlclNxdWFyZShwb3MsIGlzV2hpdGUsIHRoaXMucHJvcHMucGlja2VkU3F1YXJlICYmIHRoaXMucHJvcHMucGlja2VkU3F1YXJlLmVxdWFscyhwb3MpID8gdHJ1ZSA6IGZhbHNlLCBpc1BvdGVudGlhbERlc3RpbmF0aW9uLCB0aGlzLnByb3BzLnNxdWFyZXNbcG9zLnJvd11bcG9zLmNvbF0pKTtcblx0XHRcdFx0XHRpc1doaXRlID0gIWlzV2hpdGU7XG5cdFx0XHRcdH1cblx0XHRcdFx0aXNXaGl0ZUluaXRpYWwgPSAhaXNXaGl0ZUluaXRpYWw7XG5cdFx0XHRcdHNxdWFyZXMucHVzaCh0aGlzLnJlbmRlckNvb3JkaW5hdGVTcXVhcmUoKDggLSByb3cpLnRvU3RyaW5nKCkpKTtcblx0XHRcdH1cblx0XHRcdHNxdWFyZXMucHVzaCh0aGlzLnJlbmRlckNvb3JkaW5hdGVTcXVhcmUoJycpKTtcblx0XHRcdGZvcihsZXQgaSA9IDA7aSA8IDg7aSsrKSB7XG5cdFx0XHRcdHNxdWFyZXMucHVzaCh0aGlzLnJlbmRlckNvb3JkaW5hdGVTcXVhcmUoU3RyaW5nLmZyb21DaGFyQ29kZSgnYScuY2hhckNvZGVBdCgwKSArIGkpKSk7XG5cdFx0XHR9XG5cdFx0XHRzcXVhcmVzLnB1c2godGhpcy5yZW5kZXJDb29yZGluYXRlU3F1YXJlKCcnKSk7XG5cdFx0XHRyZXR1cm4gc3F1YXJlcztcblx0XHR9XG5cdH0sXG5cdHJlbmRlcjoge1xuXHRcdHZhbHVlOiBmdW5jdGlvbiByZW5kZXJfX19uNCgpIHtcblx0XHRcdHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudCgnZGl2JywgT2JqZWN0LmFzc2lnbih7XG5cdFx0XHRcdHN0eWxlOiBib2FyZFN0eWxlc1xuXHRcdFx0fSksIHRoaXMucmVuZGVyU3F1YXJlcygpKSk7XG5cdFx0fVxuXHR9XG59LCB7fSwgZnVuY3Rpb24oaW5zdGFuY2VQcm90bywgc3RhdGljUHJvdG8pIHtcblx0dmFyIG1ldGFDbGFzcyA9IG5ldyBONENsYXNzKHtcblx0XHRuYW1lOiAnQm9hcmQnLFxuXHRcdG9yaWdpbjogJ2NoZXNzLXJlYWN0Jyxcblx0XHRmcW46ICdjb21wb25lbnRzLkJvYXJkLkJvYXJkJyxcblx0XHRuNHN1cGVyVHlwZTogdW5kZWZpbmVkLFxuXHRcdGFsbEltcGxlbWVudGVkSW50ZXJmYWNlczogW10sXG5cdFx0b3duZWRNZW1iZXJzOiBbXG5cdFx0XHRuZXcgTjRNZXRob2Qoe1xuXHRcdFx0XHRuYW1lOiAncmVuZGVyU3F1YXJlJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRqc0Z1bmN0aW9uOiBpbnN0YW5jZVByb3RvWydyZW5kZXJTcXVhcmUnXSxcblx0XHRcdFx0YW5ub3RhdGlvbnM6IFtdXG5cdFx0XHR9KSxcblx0XHRcdG5ldyBONE1ldGhvZCh7XG5cdFx0XHRcdG5hbWU6ICdyZW5kZXJDb29yZGluYXRlU3F1YXJlJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRqc0Z1bmN0aW9uOiBpbnN0YW5jZVByb3RvWydyZW5kZXJDb29yZGluYXRlU3F1YXJlJ10sXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjRNZXRob2Qoe1xuXHRcdFx0XHRuYW1lOiAncmVuZGVyU3F1YXJlcycsXG5cdFx0XHRcdGlzU3RhdGljOiBmYWxzZSxcblx0XHRcdFx0anNGdW5jdGlvbjogaW5zdGFuY2VQcm90b1sncmVuZGVyU3F1YXJlcyddLFxuXHRcdFx0XHRhbm5vdGF0aW9uczogW11cblx0XHRcdH0pLFxuXHRcdFx0bmV3IE40TWV0aG9kKHtcblx0XHRcdFx0bmFtZTogJ3JlbmRlcicsXG5cdFx0XHRcdGlzU3RhdGljOiBmYWxzZSxcblx0XHRcdFx0anNGdW5jdGlvbjogaW5zdGFuY2VQcm90b1sncmVuZGVyJ10sXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSlcblx0XHRdLFxuXHRcdGNvbnN1bWVkTWVtYmVyczogW10sXG5cdFx0YW5ub3RhdGlvbnM6IFtdXG5cdH0pO1xuXHRyZXR1cm4gbWV0YUNsYXNzO1xufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQm9hcmQsICckZGknLCB7XG5cdHZhbHVlOiB7XG5cdFx0c3VwZXJUeXBlOiBSZWFjdC5Db21wb25lbnQsXG5cdFx0ZmllbGRzSW5qZWN0ZWRUeXBlczogW11cblx0fVxufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Cb2FyZC5tYXBcbiIsIi8vIEdlbmVyYXRlZCBieSBONEpTIHRyYW5zcGlsZXI7IGZvciBjb3B5cmlnaHQgc2VlIG9yaWdpbmFsIE40SlMgc291cmNlIGZpbGUuXG5cbmltcG9ydCAnbjRqcy1ydW50aW1lJ1xuaW1wb3J0IHtDb29yZGluYXRlfSBmcm9tICcuLi9Db29yZGluYXRlJ1xuaW1wb3J0IHtNb3ZlfSBmcm9tICcuLi9Nb3ZlJ1xuaW1wb3J0IHtCb2FyZH0gZnJvbSAnLi9Cb2FyZCdcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG52YXIgU25hcHNob3QgPSB7fTtcblNuYXBzaG90LiRmaWVsZEluaXQgPSBmdW5jdGlvbiBTbmFwc2hvdF9maWVsZEluaXQoc3BlYywgbWl4aW5FeGNsdXNpb24pIHtcblx0aWYgKHNwZWMpIHtcblx0XHRpZiAoIShtaXhpbkV4Y2x1c2lvbi5oYXNPd25Qcm9wZXJ0eSgnc3F1YXJlcycpIHx8IHRoaXMuaGFzT3duUHJvcGVydHkoJ3NxdWFyZXMnKSkpIHtcblx0XHRcdHRoaXMuc3F1YXJlcyA9ICdzcXVhcmVzJyBpbiBzcGVjID8gc3BlYy5zcXVhcmVzIDogdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRpZiAoIShtaXhpbkV4Y2x1c2lvbi5oYXNPd25Qcm9wZXJ0eSgnbGFzdE1vdmVzJykgfHwgdGhpcy5oYXNPd25Qcm9wZXJ0eSgnbGFzdE1vdmVzJykpKSB7XG5cdFx0XHR0aGlzLmxhc3RNb3ZlcyA9ICdsYXN0TW92ZXMnIGluIHNwZWMgPyBzcGVjLmxhc3RNb3ZlcyA6IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0aWYgKCEobWl4aW5FeGNsdXNpb24uaGFzT3duUHJvcGVydHkoJ3doaXRlS2luZ01vdmVkJykgfHwgdGhpcy5oYXNPd25Qcm9wZXJ0eSgnd2hpdGVLaW5nTW92ZWQnKSkpIHtcblx0XHRcdHRoaXMud2hpdGVLaW5nTW92ZWQgPSAnd2hpdGVLaW5nTW92ZWQnIGluIHNwZWMgPyBzcGVjLndoaXRlS2luZ01vdmVkIDogdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRpZiAoIShtaXhpbkV4Y2x1c2lvbi5oYXNPd25Qcm9wZXJ0eSgnbGVmdFdoaXRlUm9va01vdmVkJykgfHwgdGhpcy5oYXNPd25Qcm9wZXJ0eSgnbGVmdFdoaXRlUm9va01vdmVkJykpKSB7XG5cdFx0XHR0aGlzLmxlZnRXaGl0ZVJvb2tNb3ZlZCA9ICdsZWZ0V2hpdGVSb29rTW92ZWQnIGluIHNwZWMgPyBzcGVjLmxlZnRXaGl0ZVJvb2tNb3ZlZCA6IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0aWYgKCEobWl4aW5FeGNsdXNpb24uaGFzT3duUHJvcGVydHkoJ3JpZ2h0V2hpdGVSb29rTW92ZWQnKSB8fCB0aGlzLmhhc093blByb3BlcnR5KCdyaWdodFdoaXRlUm9va01vdmVkJykpKSB7XG5cdFx0XHR0aGlzLnJpZ2h0V2hpdGVSb29rTW92ZWQgPSAncmlnaHRXaGl0ZVJvb2tNb3ZlZCcgaW4gc3BlYyA/IHNwZWMucmlnaHRXaGl0ZVJvb2tNb3ZlZCA6IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0aWYgKCEobWl4aW5FeGNsdXNpb24uaGFzT3duUHJvcGVydHkoJ2JsYWNrS2luZ01vdmVkJykgfHwgdGhpcy5oYXNPd25Qcm9wZXJ0eSgnYmxhY2tLaW5nTW92ZWQnKSkpIHtcblx0XHRcdHRoaXMuYmxhY2tLaW5nTW92ZWQgPSAnYmxhY2tLaW5nTW92ZWQnIGluIHNwZWMgPyBzcGVjLmJsYWNrS2luZ01vdmVkIDogdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRpZiAoIShtaXhpbkV4Y2x1c2lvbi5oYXNPd25Qcm9wZXJ0eSgnbGVmdEJsYWNrUm9va01vdmVkJykgfHwgdGhpcy5oYXNPd25Qcm9wZXJ0eSgnbGVmdEJsYWNrUm9va01vdmVkJykpKSB7XG5cdFx0XHR0aGlzLmxlZnRCbGFja1Jvb2tNb3ZlZCA9ICdsZWZ0QmxhY2tSb29rTW92ZWQnIGluIHNwZWMgPyBzcGVjLmxlZnRCbGFja1Jvb2tNb3ZlZCA6IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0aWYgKCEobWl4aW5FeGNsdXNpb24uaGFzT3duUHJvcGVydHkoJ3JpZ2h0QmxhY2tSb29rTW92ZWQnKSB8fCB0aGlzLmhhc093blByb3BlcnR5KCdyaWdodEJsYWNrUm9va01vdmVkJykpKSB7XG5cdFx0XHR0aGlzLnJpZ2h0QmxhY2tSb29rTW92ZWQgPSAncmlnaHRCbGFja1Jvb2tNb3ZlZCcgaW4gc3BlYyA/IHNwZWMucmlnaHRCbGFja1Jvb2tNb3ZlZCA6IHVuZGVmaW5lZDtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0aWYgKCEobWl4aW5FeGNsdXNpb24uaGFzT3duUHJvcGVydHkoJ3NxdWFyZXMnKSB8fCB0aGlzLmhhc093blByb3BlcnR5KCdzcXVhcmVzJykpKSB7XG5cdFx0XHR0aGlzLnNxdWFyZXMgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmICghKG1peGluRXhjbHVzaW9uLmhhc093blByb3BlcnR5KCdsYXN0TW92ZXMnKSB8fCB0aGlzLmhhc093blByb3BlcnR5KCdsYXN0TW92ZXMnKSkpIHtcblx0XHRcdHRoaXMubGFzdE1vdmVzID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRpZiAoIShtaXhpbkV4Y2x1c2lvbi5oYXNPd25Qcm9wZXJ0eSgnd2hpdGVLaW5nTW92ZWQnKSB8fCB0aGlzLmhhc093blByb3BlcnR5KCd3aGl0ZUtpbmdNb3ZlZCcpKSkge1xuXHRcdFx0dGhpcy53aGl0ZUtpbmdNb3ZlZCA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0aWYgKCEobWl4aW5FeGNsdXNpb24uaGFzT3duUHJvcGVydHkoJ2xlZnRXaGl0ZVJvb2tNb3ZlZCcpIHx8IHRoaXMuaGFzT3duUHJvcGVydHkoJ2xlZnRXaGl0ZVJvb2tNb3ZlZCcpKSkge1xuXHRcdFx0dGhpcy5sZWZ0V2hpdGVSb29rTW92ZWQgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmICghKG1peGluRXhjbHVzaW9uLmhhc093blByb3BlcnR5KCdyaWdodFdoaXRlUm9va01vdmVkJykgfHwgdGhpcy5oYXNPd25Qcm9wZXJ0eSgncmlnaHRXaGl0ZVJvb2tNb3ZlZCcpKSkge1xuXHRcdFx0dGhpcy5yaWdodFdoaXRlUm9va01vdmVkID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRpZiAoIShtaXhpbkV4Y2x1c2lvbi5oYXNPd25Qcm9wZXJ0eSgnYmxhY2tLaW5nTW92ZWQnKSB8fCB0aGlzLmhhc093blByb3BlcnR5KCdibGFja0tpbmdNb3ZlZCcpKSkge1xuXHRcdFx0dGhpcy5ibGFja0tpbmdNb3ZlZCA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0aWYgKCEobWl4aW5FeGNsdXNpb24uaGFzT3duUHJvcGVydHkoJ2xlZnRCbGFja1Jvb2tNb3ZlZCcpIHx8IHRoaXMuaGFzT3duUHJvcGVydHkoJ2xlZnRCbGFja1Jvb2tNb3ZlZCcpKSkge1xuXHRcdFx0dGhpcy5sZWZ0QmxhY2tSb29rTW92ZWQgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmICghKG1peGluRXhjbHVzaW9uLmhhc093blByb3BlcnR5KCdyaWdodEJsYWNrUm9va01vdmVkJykgfHwgdGhpcy5oYXNPd25Qcm9wZXJ0eSgncmlnaHRCbGFja1Jvb2tNb3ZlZCcpKSkge1xuXHRcdFx0dGhpcy5yaWdodEJsYWNrUm9va01vdmVkID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxufTtcblNuYXBzaG90LiRtZXRob2RzID0ge307XG4kbWFrZUludGVyZmFjZShTbmFwc2hvdCwgZnVuY3Rpb24oaW5zdGFuY2VQcm90bywgc3RhdGljUHJvdG8pIHtcblx0dmFyIG1ldGFDbGFzcyA9IG5ldyBONEludGVyZmFjZSh7XG5cdFx0bmFtZTogJ1NuYXBzaG90Jyxcblx0XHRvcmlnaW46ICdjaGVzcy1yZWFjdCcsXG5cdFx0ZnFuOiAnY29tcG9uZW50cy5HYW1lLlNuYXBzaG90Jyxcblx0XHRuNHN1cGVyVHlwZTogdW5kZWZpbmVkLFxuXHRcdGFsbEltcGxlbWVudGVkSW50ZXJmYWNlczogW10sXG5cdFx0b3duZWRNZW1iZXJzOiBbXG5cdFx0XHRuZXcgTjREYXRhRmllbGQoe1xuXHRcdFx0XHRuYW1lOiAnc3F1YXJlcycsXG5cdFx0XHRcdGlzU3RhdGljOiBmYWxzZSxcblx0XHRcdFx0YW5ub3RhdGlvbnM6IFtdXG5cdFx0XHR9KSxcblx0XHRcdG5ldyBONERhdGFGaWVsZCh7XG5cdFx0XHRcdG5hbWU6ICdsYXN0TW92ZXMnLFxuXHRcdFx0XHRpc1N0YXRpYzogZmFsc2UsXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjREYXRhRmllbGQoe1xuXHRcdFx0XHRuYW1lOiAnd2hpdGVLaW5nTW92ZWQnLFxuXHRcdFx0XHRpc1N0YXRpYzogZmFsc2UsXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjREYXRhRmllbGQoe1xuXHRcdFx0XHRuYW1lOiAnbGVmdFdoaXRlUm9va01vdmVkJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRhbm5vdGF0aW9uczogW11cblx0XHRcdH0pLFxuXHRcdFx0bmV3IE40RGF0YUZpZWxkKHtcblx0XHRcdFx0bmFtZTogJ3JpZ2h0V2hpdGVSb29rTW92ZWQnLFxuXHRcdFx0XHRpc1N0YXRpYzogZmFsc2UsXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjREYXRhRmllbGQoe1xuXHRcdFx0XHRuYW1lOiAnYmxhY2tLaW5nTW92ZWQnLFxuXHRcdFx0XHRpc1N0YXRpYzogZmFsc2UsXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjREYXRhRmllbGQoe1xuXHRcdFx0XHRuYW1lOiAnbGVmdEJsYWNrUm9va01vdmVkJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRhbm5vdGF0aW9uczogW11cblx0XHRcdH0pLFxuXHRcdFx0bmV3IE40RGF0YUZpZWxkKHtcblx0XHRcdFx0bmFtZTogJ3JpZ2h0QmxhY2tSb29rTW92ZWQnLFxuXHRcdFx0XHRpc1N0YXRpYzogZmFsc2UsXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSlcblx0XHRdLFxuXHRcdGNvbnN1bWVkTWVtYmVyczogW10sXG5cdFx0YW5ub3RhdGlvbnM6IFtdXG5cdH0pO1xuXHRyZXR1cm4gbWV0YUNsYXNzO1xufSk7XG52YXIgR2FtZVN0YXRlID0ge307XG5HYW1lU3RhdGUuJGZpZWxkSW5pdCA9IGZ1bmN0aW9uIEdhbWVTdGF0ZV9maWVsZEluaXQoc3BlYywgbWl4aW5FeGNsdXNpb24pIHtcblx0aWYgKHNwZWMpIHtcblx0XHRpZiAoIShtaXhpbkV4Y2x1c2lvbi5oYXNPd25Qcm9wZXJ0eSgnaGlzdG9yeScpIHx8IHRoaXMuaGFzT3duUHJvcGVydHkoJ2hpc3RvcnknKSkpIHtcblx0XHRcdHRoaXMuaGlzdG9yeSA9ICdoaXN0b3J5JyBpbiBzcGVjID8gc3BlYy5oaXN0b3J5IDogdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRpZiAoIShtaXhpbkV4Y2x1c2lvbi5oYXNPd25Qcm9wZXJ0eSgnc3RlcE51bWJlcicpIHx8IHRoaXMuaGFzT3duUHJvcGVydHkoJ3N0ZXBOdW1iZXInKSkpIHtcblx0XHRcdHRoaXMuc3RlcE51bWJlciA9ICdzdGVwTnVtYmVyJyBpbiBzcGVjID8gc3BlYy5zdGVwTnVtYmVyIDogdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRpZiAoIShtaXhpbkV4Y2x1c2lvbi5oYXNPd25Qcm9wZXJ0eSgnd2hpdGVJc05leHQnKSB8fCB0aGlzLmhhc093blByb3BlcnR5KCd3aGl0ZUlzTmV4dCcpKSkge1xuXHRcdFx0dGhpcy53aGl0ZUlzTmV4dCA9ICd3aGl0ZUlzTmV4dCcgaW4gc3BlYyA/IHNwZWMud2hpdGVJc05leHQgOiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmICghKG1peGluRXhjbHVzaW9uLmhhc093blByb3BlcnR5KCdwaWNrZWRTcXVhcmUnKSB8fCB0aGlzLmhhc093blByb3BlcnR5KCdwaWNrZWRTcXVhcmUnKSkpIHtcblx0XHRcdHRoaXMucGlja2VkU3F1YXJlID0gJ3BpY2tlZFNxdWFyZScgaW4gc3BlYyA/IHNwZWMucGlja2VkU3F1YXJlIDogdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRpZiAoIShtaXhpbkV4Y2x1c2lvbi5oYXNPd25Qcm9wZXJ0eSgndmFsaWREZXN0aW5hdGlvbnMnKSB8fCB0aGlzLmhhc093blByb3BlcnR5KCd2YWxpZERlc3RpbmF0aW9ucycpKSkge1xuXHRcdFx0dGhpcy52YWxpZERlc3RpbmF0aW9ucyA9ICd2YWxpZERlc3RpbmF0aW9ucycgaW4gc3BlYyA/IHNwZWMudmFsaWREZXN0aW5hdGlvbnMgOiB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGlmICghKG1peGluRXhjbHVzaW9uLmhhc093blByb3BlcnR5KCdoaXN0b3J5JykgfHwgdGhpcy5oYXNPd25Qcm9wZXJ0eSgnaGlzdG9yeScpKSkge1xuXHRcdFx0dGhpcy5oaXN0b3J5ID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRpZiAoIShtaXhpbkV4Y2x1c2lvbi5oYXNPd25Qcm9wZXJ0eSgnc3RlcE51bWJlcicpIHx8IHRoaXMuaGFzT3duUHJvcGVydHkoJ3N0ZXBOdW1iZXInKSkpIHtcblx0XHRcdHRoaXMuc3RlcE51bWJlciA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0aWYgKCEobWl4aW5FeGNsdXNpb24uaGFzT3duUHJvcGVydHkoJ3doaXRlSXNOZXh0JykgfHwgdGhpcy5oYXNPd25Qcm9wZXJ0eSgnd2hpdGVJc05leHQnKSkpIHtcblx0XHRcdHRoaXMud2hpdGVJc05leHQgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmICghKG1peGluRXhjbHVzaW9uLmhhc093blByb3BlcnR5KCdwaWNrZWRTcXVhcmUnKSB8fCB0aGlzLmhhc093blByb3BlcnR5KCdwaWNrZWRTcXVhcmUnKSkpIHtcblx0XHRcdHRoaXMucGlja2VkU3F1YXJlID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRpZiAoIShtaXhpbkV4Y2x1c2lvbi5oYXNPd25Qcm9wZXJ0eSgndmFsaWREZXN0aW5hdGlvbnMnKSB8fCB0aGlzLmhhc093blByb3BlcnR5KCd2YWxpZERlc3RpbmF0aW9ucycpKSkge1xuXHRcdFx0dGhpcy52YWxpZERlc3RpbmF0aW9ucyA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cbn07XG5HYW1lU3RhdGUuJG1ldGhvZHMgPSB7fTtcbiRtYWtlSW50ZXJmYWNlKEdhbWVTdGF0ZSwgZnVuY3Rpb24oaW5zdGFuY2VQcm90bywgc3RhdGljUHJvdG8pIHtcblx0dmFyIG1ldGFDbGFzcyA9IG5ldyBONEludGVyZmFjZSh7XG5cdFx0bmFtZTogJ0dhbWVTdGF0ZScsXG5cdFx0b3JpZ2luOiAnY2hlc3MtcmVhY3QnLFxuXHRcdGZxbjogJ2NvbXBvbmVudHMuR2FtZS5HYW1lU3RhdGUnLFxuXHRcdG40c3VwZXJUeXBlOiB1bmRlZmluZWQsXG5cdFx0YWxsSW1wbGVtZW50ZWRJbnRlcmZhY2VzOiBbXSxcblx0XHRvd25lZE1lbWJlcnM6IFtcblx0XHRcdG5ldyBONERhdGFGaWVsZCh7XG5cdFx0XHRcdG5hbWU6ICdoaXN0b3J5Jyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRhbm5vdGF0aW9uczogW11cblx0XHRcdH0pLFxuXHRcdFx0bmV3IE40RGF0YUZpZWxkKHtcblx0XHRcdFx0bmFtZTogJ3N0ZXBOdW1iZXInLFxuXHRcdFx0XHRpc1N0YXRpYzogZmFsc2UsXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjREYXRhRmllbGQoe1xuXHRcdFx0XHRuYW1lOiAnd2hpdGVJc05leHQnLFxuXHRcdFx0XHRpc1N0YXRpYzogZmFsc2UsXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjREYXRhRmllbGQoe1xuXHRcdFx0XHRuYW1lOiAncGlja2VkU3F1YXJlJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRhbm5vdGF0aW9uczogW11cblx0XHRcdH0pLFxuXHRcdFx0bmV3IE40RGF0YUZpZWxkKHtcblx0XHRcdFx0bmFtZTogJ3ZhbGlkRGVzdGluYXRpb25zJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRhbm5vdGF0aW9uczogW11cblx0XHRcdH0pXG5cdFx0XSxcblx0XHRjb25zdW1lZE1lbWJlcnM6IFtdLFxuXHRcdGFubm90YXRpb25zOiBbXVxuXHR9KTtcblx0cmV0dXJuIG1ldGFDbGFzcztcbn0pO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gR2FtZShwcm9wcykge1xuXHRSZWFjdC5Db21wb25lbnQucHJvdG90eXBlLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgcHJvcHMpO1xuXHRjb25zdCBpbml0aWFsU3F1YXJlcyA9IFtcblx0XHRbXG5cdFx0XHQn4pmWJyxcblx0XHRcdCfimZgnLFxuXHRcdFx0J+KZlycsXG5cdFx0XHQn4pmVJyxcblx0XHRcdCfimZQnLFxuXHRcdFx0J+KZlycsXG5cdFx0XHQn4pmYJyxcblx0XHRcdCfimZYnXG5cdFx0XSxcblx0XHRbXG5cdFx0XHQn4pmZJyxcblx0XHRcdCfimZknLFxuXHRcdFx0J+KZmScsXG5cdFx0XHQn4pmZJyxcblx0XHRcdCfimZknLFxuXHRcdFx0J+KZmScsXG5cdFx0XHQn4pmZJyxcblx0XHRcdCfimZknXG5cdFx0XSxcblx0XHRbXG5cdFx0XHRudWxsLFxuXHRcdFx0bnVsbCxcblx0XHRcdG51bGwsXG5cdFx0XHRudWxsLFxuXHRcdFx0bnVsbCxcblx0XHRcdG51bGwsXG5cdFx0XHRudWxsLFxuXHRcdFx0bnVsbFxuXHRcdF0sXG5cdFx0W1xuXHRcdFx0bnVsbCxcblx0XHRcdG51bGwsXG5cdFx0XHRudWxsLFxuXHRcdFx0bnVsbCxcblx0XHRcdG51bGwsXG5cdFx0XHRudWxsLFxuXHRcdFx0bnVsbCxcblx0XHRcdG51bGxcblx0XHRdLFxuXHRcdFtcblx0XHRcdG51bGwsXG5cdFx0XHRudWxsLFxuXHRcdFx0bnVsbCxcblx0XHRcdG51bGwsXG5cdFx0XHRudWxsLFxuXHRcdFx0bnVsbCxcblx0XHRcdG51bGwsXG5cdFx0XHRudWxsXG5cdFx0XSxcblx0XHRbXG5cdFx0XHRudWxsLFxuXHRcdFx0bnVsbCxcblx0XHRcdG51bGwsXG5cdFx0XHRudWxsLFxuXHRcdFx0bnVsbCxcblx0XHRcdG51bGwsXG5cdFx0XHRudWxsLFxuXHRcdFx0bnVsbFxuXHRcdF0sXG5cdFx0W1xuXHRcdFx0J+KZnycsXG5cdFx0XHQn4pmfJyxcblx0XHRcdCfimZ8nLFxuXHRcdFx0J+KZnycsXG5cdFx0XHQn4pmfJyxcblx0XHRcdCfimZ8nLFxuXHRcdFx0J+KZnycsXG5cdFx0XHQn4pmfJ1xuXHRcdF0sXG5cdFx0W1xuXHRcdFx0J+KZnCcsXG5cdFx0XHQn4pmeJyxcblx0XHRcdCfimZ0nLFxuXHRcdFx0J+KZmycsXG5cdFx0XHQn4pmaJyxcblx0XHRcdCfimZ0nLFxuXHRcdFx0J+KZnicsXG5cdFx0XHQn4pmcJ1xuXHRcdF1cblx0XTtcblx0dGhpcy5zdGF0ZSA9IHtcblx0XHRoaXN0b3J5OiBbXG5cdFx0XHR7XG5cdFx0XHRcdHNxdWFyZXM6IGluaXRpYWxTcXVhcmVzLFxuXHRcdFx0XHRsYXN0TW92ZXM6IG5ldyBBcnJheSgpLFxuXHRcdFx0XHR3aGl0ZUtpbmdNb3ZlZDogZmFsc2UsXG5cdFx0XHRcdGxlZnRXaGl0ZVJvb2tNb3ZlZDogZmFsc2UsXG5cdFx0XHRcdHJpZ2h0V2hpdGVSb29rTW92ZWQ6IGZhbHNlLFxuXHRcdFx0XHRibGFja0tpbmdNb3ZlZDogZmFsc2UsXG5cdFx0XHRcdGxlZnRCbGFja1Jvb2tNb3ZlZDogZmFsc2UsXG5cdFx0XHRcdHJpZ2h0QmxhY2tSb29rTW92ZWQ6IGZhbHNlXG5cdFx0XHR9XG5cdFx0XSxcblx0XHRzdGVwTnVtYmVyOiAwLFxuXHRcdHdoaXRlSXNOZXh0OiB0cnVlLFxuXHRcdHBpY2tlZFNxdWFyZTogbnVsbCxcblx0XHR2YWxpZERlc3RpbmF0aW9uczogbmV3IEFycmF5KClcblx0fTtcbn1cbiRtYWtlQ2xhc3MoR2FtZSwgUmVhY3QuQ29tcG9uZW50LCBbXSwge1xuXHRoYW5kbGVDbGljazoge1xuXHRcdHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVDbGlja19fX240KHNlbGVjdGVkUG9zKSB7XG5cdFx0XHRjb25zdCByb3cgPSBzZWxlY3RlZFBvcy5yb3c7XG5cdFx0XHRjb25zdCBjb2wgPSBzZWxlY3RlZFBvcy5jb2w7XG5cdFx0XHRjb25zdCBoaXN0b3J5ID0gdGhpcy5zdGF0ZS5oaXN0b3J5LnNsaWNlKDAsIHRoaXMuc3RhdGUuc3RlcE51bWJlciArIDEpO1xuXHRcdFx0Y29uc3QgY3VycmVudCA9IGhpc3RvcnlbaGlzdG9yeS5sZW5ndGggLSAxXTtcblx0XHRcdGNvbnN0IHBpY2tlZFNxdWFyZSA9IHRoaXMuc3RhdGUucGlja2VkU3F1YXJlO1xuXHRcdFx0bGV0IHNxdWFyZXMgPSBjdXJyZW50LnNxdWFyZXM7XG5cdFx0XHRpZiAodGhpcy5jYWxjdWxhdGVXaW5uZXIoc3F1YXJlcykpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgY3VycmVudHBpZWNlID0gc3F1YXJlc1tyb3ddW2NvbF07XG5cdFx0XHRpZiAoKCh0aGlzLmlzV2hpdGVwaWVjZShjdXJyZW50cGllY2UpICYmIHRoaXMuc3RhdGUud2hpdGVJc05leHQpKSB8fCAoKHRoaXMuaXNCbGFja3BpZWNlKGN1cnJlbnRwaWVjZSkgJiYgIXRoaXMuc3RhdGUud2hpdGVJc05leHQpKSkge1xuXHRcdFx0XHRjb25zdCB2YWxpZERlc3RpbmF0aW9ucyA9IHRoaXMuY2FsY3VsYXRlVmFsaWREZXN0aW5hdGlvbnMoc3F1YXJlcywgY3VycmVudHBpZWNlLCBzZWxlY3RlZFBvcyk7XG5cdFx0XHRcdHRoaXMuc2V0U3RhdGUoe1xuXHRcdFx0XHRcdHBpY2tlZFNxdWFyZTogc2VsZWN0ZWRQb3MsXG5cdFx0XHRcdFx0dmFsaWREZXN0aW5hdGlvbnM6IHZhbGlkRGVzdGluYXRpb25zXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRpZiAoIXBpY2tlZFNxdWFyZSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBhdHRlbXB0ZWRNb3ZlID0gbmV3IE1vdmUoe1xuXHRcdFx0XHRwaWVjZTogc3F1YXJlc1twaWNrZWRTcXVhcmUucm93XVtwaWNrZWRTcXVhcmUuY29sXSxcblx0XHRcdFx0ZnJvbVBvczogcGlja2VkU3F1YXJlLFxuXHRcdFx0XHR0b1Bvczogc2VsZWN0ZWRQb3Ncblx0XHRcdH0pO1xuXHRcdFx0aWYgKHRoaXMuaXNWYWxpZE1vdmUoc3F1YXJlcywgYXR0ZW1wdGVkTW92ZSkpIHtcblx0XHRcdFx0Y29uc3Qge1xuXHRcdFx0XHRcdHNxdWFyZXM6IG5ld1NxdWFyZXMsXG5cdFx0XHRcdFx0bW92ZXNcblx0XHRcdFx0fSA9IHRoaXMubW92ZShhdHRlbXB0ZWRNb3ZlKTtcblx0XHRcdFx0bGV0IHdoaXRlS2luZ01vdmVkID0gY3VycmVudC53aGl0ZUtpbmdNb3ZlZDtcblx0XHRcdFx0bGV0IGxlZnRXaGl0ZVJvb2tNb3ZlZCA9IGN1cnJlbnQubGVmdFdoaXRlUm9va01vdmVkO1xuXHRcdFx0XHRsZXQgcmlnaHRXaGl0ZVJvb2tNb3ZlZCA9IGN1cnJlbnQucmlnaHRXaGl0ZVJvb2tNb3ZlZDtcblx0XHRcdFx0bGV0IGJsYWNrS2luZ01vdmVkID0gY3VycmVudC5ibGFja0tpbmdNb3ZlZDtcblx0XHRcdFx0bGV0IGxlZnRCbGFja1Jvb2tNb3ZlZCA9IGN1cnJlbnQubGVmdEJsYWNrUm9va01vdmVkO1xuXHRcdFx0XHRsZXQgcmlnaHRCbGFja1Jvb2tNb3ZlZCA9IGN1cnJlbnQucmlnaHRCbGFja1Jvb2tNb3ZlZDtcblx0XHRcdFx0aWYgKHRoaXMuaXNXaGl0ZXBpZWNlKGF0dGVtcHRlZE1vdmUucGllY2UpKSB7XG5cdFx0XHRcdFx0d2hpdGVLaW5nTW92ZWQgPSB3aGl0ZUtpbmdNb3ZlZCB8fCAoYXR0ZW1wdGVkTW92ZS5waWVjZSA9PSAn4pmUJyk7XG5cdFx0XHRcdFx0bGVmdFdoaXRlUm9va01vdmVkID0gbGVmdFdoaXRlUm9va01vdmVkIHx8ICgoYXR0ZW1wdGVkTW92ZS5waWVjZSA9PSAn4pmWJykgJiYgcGlja2VkU3F1YXJlLmNvbCA9PSAwKTtcblx0XHRcdFx0XHRyaWdodFdoaXRlUm9va01vdmVkID0gcmlnaHRXaGl0ZVJvb2tNb3ZlZCB8fCAoKGF0dGVtcHRlZE1vdmUucGllY2UgPT0gJ+KZlicpICYmIHBpY2tlZFNxdWFyZS5jb2wgPT0gNyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YmxhY2tLaW5nTW92ZWQgPSBibGFja0tpbmdNb3ZlZCB8fCAoYXR0ZW1wdGVkTW92ZS5waWVjZSA9PSAn4pmaJyk7XG5cdFx0XHRcdFx0bGVmdEJsYWNrUm9va01vdmVkID0gbGVmdEJsYWNrUm9va01vdmVkIHx8ICgoYXR0ZW1wdGVkTW92ZS5waWVjZSA9PSAn4pmcJykgJiYgcGlja2VkU3F1YXJlLmNvbCA9PSAwKTtcblx0XHRcdFx0XHRyaWdodEJsYWNrUm9va01vdmVkID0gcmlnaHRCbGFja1Jvb2tNb3ZlZCB8fCAoKGF0dGVtcHRlZE1vdmUucGllY2UgPT0gJ+KZnCcpICYmIHBpY2tlZFNxdWFyZS5jb2wgPT0gNyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5zZXRTdGF0ZSh7XG5cdFx0XHRcdFx0aGlzdG9yeTogaGlzdG9yeS5jb25jYXQoW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRzcXVhcmVzOiBuZXdTcXVhcmVzLFxuXHRcdFx0XHRcdFx0XHRsYXN0TW92ZXM6IG1vdmVzLFxuXHRcdFx0XHRcdFx0XHR3aGl0ZUtpbmdNb3ZlZDogd2hpdGVLaW5nTW92ZWQsXG5cdFx0XHRcdFx0XHRcdGxlZnRXaGl0ZVJvb2tNb3ZlZDogbGVmdFdoaXRlUm9va01vdmVkLFxuXHRcdFx0XHRcdFx0XHRyaWdodFdoaXRlUm9va01vdmVkOiByaWdodFdoaXRlUm9va01vdmVkLFxuXHRcdFx0XHRcdFx0XHRibGFja0tpbmdNb3ZlZDogYmxhY2tLaW5nTW92ZWQsXG5cdFx0XHRcdFx0XHRcdGxlZnRCbGFja1Jvb2tNb3ZlZDogbGVmdEJsYWNrUm9va01vdmVkLFxuXHRcdFx0XHRcdFx0XHRyaWdodEJsYWNrUm9va01vdmVkOiByaWdodEJsYWNrUm9va01vdmVkXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XSksXG5cdFx0XHRcdFx0c3RlcE51bWJlcjogaGlzdG9yeS5sZW5ndGgsXG5cdFx0XHRcdFx0d2hpdGVJc05leHQ6ICF0aGlzLnN0YXRlLndoaXRlSXNOZXh0LFxuXHRcdFx0XHRcdHBpY2tlZFNxdWFyZTogbnVsbCxcblx0XHRcdFx0XHR2YWxpZERlc3RpbmF0aW9uczogbmV3IEFycmF5KClcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLnNldFN0YXRlKHtcblx0XHRcdFx0XHRwaWNrZWRTcXVhcmU6IG51bGwsXG5cdFx0XHRcdFx0dmFsaWREZXN0aW5hdGlvbnM6IG5ldyBBcnJheSgpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0Z29Ub1N0ZXA6IHtcblx0XHR2YWx1ZTogZnVuY3Rpb24gZ29Ub1N0ZXBfX19uNChzdGVwKSB7XG5cdFx0XHR0aGlzLnNldFN0YXRlKHtcblx0XHRcdFx0c3RlcE51bWJlcjogc3RlcCxcblx0XHRcdFx0d2hpdGVJc05leHQ6IChzdGVwICUgMikgPT09IDAsXG5cdFx0XHRcdHBpY2tlZFNxdWFyZTogbnVsbCxcblx0XHRcdFx0dmFsaWREZXN0aW5hdGlvbnM6IG5ldyBBcnJheSgpXG5cdFx0XHR9KTtcblx0XHR9XG5cdH0sXG5cdGdldEFsbFBpZWNlc1NhbWVDb2xvcjoge1xuXHRcdHZhbHVlOiBmdW5jdGlvbiBnZXRBbGxQaWVjZXNTYW1lQ29sb3JfX19uNChzcXVhcmVzLCBpc1doaXRlKSB7XG5cdFx0XHRjb25zdCByZXN1bHQgPSBuZXcgQXJyYXkoKTtcblx0XHRcdGZvcihsZXQgcm93ID0gMDtyb3cgPCA4O3JvdysrKSB7XG5cdFx0XHRcdGZvcihsZXQgY29sID0gMDtjb2wgPCA4O2NvbCsrKSB7XG5cdFx0XHRcdFx0aWYgKChpc1doaXRlICYmIHRoaXMuaXNXaGl0ZXBpZWNlKHNxdWFyZXNbcm93XVtjb2xdKSkgfHwgKCFpc1doaXRlICYmIHRoaXMuaXNCbGFja3BpZWNlKHNxdWFyZXNbcm93XVtjb2xdKSkpIHtcblx0XHRcdFx0XHRcdHJlc3VsdC5wdXNoKHtcblx0XHRcdFx0XHRcdFx0cGllY2U6IHNxdWFyZXNbcm93XVtjb2xdLFxuXHRcdFx0XHRcdFx0XHRwb3M6IG5ldyBDb29yZGluYXRlKHtcblx0XHRcdFx0XHRcdFx0XHRyb3c6IHJvdyxcblx0XHRcdFx0XHRcdFx0XHRjb2w6IGNvbFxuXHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH1cblx0fSxcblx0Zm9yQWxsOiB7XG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGZvckFsbF9fX240KGEsIHByZWRpY2F0ZSkge1xuXHRcdFx0cmV0dXJuIGEucmVkdWNlKChhY2MsIGVsZW0pPT5hY2MgJiYgcHJlZGljYXRlKGVsZW0pLCB0cnVlKTtcblx0XHR9XG5cdH0sXG5cdGNhbGN1bGF0ZVdpbm5lcjoge1xuXHRcdHZhbHVlOiBmdW5jdGlvbiBjYWxjdWxhdGVXaW5uZXJfX19uNChzcXVhcmVzKSB7XG5cdFx0XHRjb25zdCBpc1doaXRlID0gdGhpcy5zdGF0ZS53aGl0ZUlzTmV4dDtcblx0XHRcdGNvbnN0IGFsbFBpZWNlcyA9IHRoaXMuZ2V0QWxsUGllY2VzU2FtZUNvbG9yKHNxdWFyZXMsIGlzV2hpdGUpO1xuXHRcdFx0Y29uc3QgY2hlY2tNYXRlID0gdGhpcy5mb3JBbGwoYWxsUGllY2VzLCAocCk9PnRoaXMuY2FsY3VsYXRlVmFsaWREZXN0aW5hdGlvbnMoc3F1YXJlcywgcC5waWVjZSwgcC5wb3MpLmxlbmd0aCA9PSAwKTtcblx0XHRcdGlmIChjaGVja01hdGUpIHtcblx0XHRcdFx0cmV0dXJuIGlzV2hpdGUgPyAnQmxhY2snIDogJ1doaXRlJztcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0Y2FsY3VsYXRlVmFsaWREZXN0aW5hdGlvbnM6IHtcblx0XHR2YWx1ZTogZnVuY3Rpb24gY2FsY3VsYXRlVmFsaWREZXN0aW5hdGlvbnNfX19uNChzcXVhcmVzLCBwaWVjZSwgcG9zKSB7XG5cdFx0XHRjb25zdCByZXN1bHQgPSB0aGlzLmNhbGN1bGF0ZUF0dGFja2VkRGVzdGluYXRpb25zKHNxdWFyZXMsIHBpZWNlLCBwb3MpO1xuXHRcdFx0Y29uc3QgaXNXaGl0ZSA9IHRoaXMuaXNXaGl0ZXBpZWNlKHBpZWNlKTtcblx0XHRcdGlmIChwaWVjZSA9PSAn4pmZJyB8fCBwaWVjZSA9PSAn4pmfJykge1xuXHRcdFx0XHRpZiAoaXNXaGl0ZSAmJiAocG9zLnJvdyA8IDcpKSB7XG5cdFx0XHRcdFx0Y29uc3QgbmV4dFBvcyA9IG5ldyBDb29yZGluYXRlKHtcblx0XHRcdFx0XHRcdHJvdzogcG9zLnJvdyArIDEsXG5cdFx0XHRcdFx0XHRjb2w6IHBvcy5jb2xcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRpZiAoIXNxdWFyZXNbbmV4dFBvcy5yb3ddW25leHRQb3MuY29sXSkge1xuXHRcdFx0XHRcdFx0cmVzdWx0LnB1c2gobmV4dFBvcyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChwb3Mucm93IDw9IDEpIHtcblx0XHRcdFx0XHRcdGNvbnN0IG5leHROZXh0UG9zID0gbmV3IENvb3JkaW5hdGUoe1xuXHRcdFx0XHRcdFx0XHRyb3c6IHBvcy5yb3cgKyAyLFxuXHRcdFx0XHRcdFx0XHRjb2w6IHBvcy5jb2xcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0aWYgKCFzcXVhcmVzW25leHRQb3Mucm93XVtuZXh0UG9zLmNvbF0gJiYgIXNxdWFyZXNbbmV4dE5leHRQb3Mucm93XVtuZXh0TmV4dFBvcy5jb2xdKSB7XG5cdFx0XHRcdFx0XHRcdHJlc3VsdC5wdXNoKG5leHROZXh0UG9zKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAoIWlzV2hpdGUgJiYgKHBvcy5yb3cgPiAwKSkge1xuXHRcdFx0XHRcdGNvbnN0IG5leHRQb3MgPSBuZXcgQ29vcmRpbmF0ZSh7XG5cdFx0XHRcdFx0XHRyb3c6IHBvcy5yb3cgLSAxLFxuXHRcdFx0XHRcdFx0Y29sOiBwb3MuY29sXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0aWYgKCFzcXVhcmVzW25leHRQb3Mucm93XVtuZXh0UG9zLmNvbF0pIHtcblx0XHRcdFx0XHRcdHJlc3VsdC5wdXNoKG5leHRQb3MpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAocG9zLnJvdyA+PSA2KSB7XG5cdFx0XHRcdFx0XHRjb25zdCBuZXh0TmV4dFBvcyA9IG5ldyBDb29yZGluYXRlKHtcblx0XHRcdFx0XHRcdFx0cm93OiBwb3Mucm93IC0gMixcblx0XHRcdFx0XHRcdFx0Y29sOiBwb3MuY29sXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdGlmICghc3F1YXJlc1tuZXh0UG9zLnJvd11bbmV4dFBvcy5jb2xdICYmICFzcXVhcmVzW25leHROZXh0UG9zLnJvd11bbmV4dE5leHRQb3MuY29sXSkge1xuXHRcdFx0XHRcdFx0XHRyZXN1bHQucHVzaChuZXh0TmV4dFBvcyk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBjdXJyZW50ID0gdGhpcy5zdGF0ZS5oaXN0b3J5W3RoaXMuc3RhdGUuc3RlcE51bWJlcl07XG5cdFx0XHRpZiAoKHBpZWNlID09ICfimZQnKSAmJiBpc1doaXRlICYmICFjdXJyZW50LndoaXRlS2luZ01vdmVkKSB7XG5cdFx0XHRcdGlmICghY3VycmVudC5sZWZ0V2hpdGVSb29rTW92ZWQgJiYgIXNxdWFyZXNbcG9zLnJvd11bcG9zLmNvbCAtIDFdICYmICFzcXVhcmVzW3Bvcy5yb3ddW3Bvcy5jb2wgLSAyXSAmJiAhc3F1YXJlc1twb3Mucm93XVtwb3MuY29sIC0gM10pIHtcblx0XHRcdFx0XHRyZXN1bHQucHVzaChuZXcgQ29vcmRpbmF0ZSh7XG5cdFx0XHRcdFx0XHRyb3c6IHBvcy5yb3csXG5cdFx0XHRcdFx0XHRjb2w6IHBvcy5jb2wgLSAyXG5cdFx0XHRcdFx0fSkpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICghY3VycmVudC5yaWdodFdoaXRlUm9va01vdmVkICYmICFzcXVhcmVzW3Bvcy5yb3ddW3Bvcy5jb2wgKyAxXSAmJiAhc3F1YXJlc1twb3Mucm93XVtwb3MuY29sICsgMl0pIHtcblx0XHRcdFx0XHRyZXN1bHQucHVzaChuZXcgQ29vcmRpbmF0ZSh7XG5cdFx0XHRcdFx0XHRyb3c6IHBvcy5yb3csXG5cdFx0XHRcdFx0XHRjb2w6IHBvcy5jb2wgKyAyXG5cdFx0XHRcdFx0fSkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKChwaWVjZSA9PSAn4pmaJykgJiYgIWlzV2hpdGUgJiYgIWN1cnJlbnQuYmxhY2tLaW5nTW92ZWQpIHtcblx0XHRcdFx0aWYgKCFjdXJyZW50LmxlZnRCbGFja1Jvb2tNb3ZlZCAmJiAhc3F1YXJlc1twb3Mucm93XVtwb3MuY29sIC0gMV0gJiYgIXNxdWFyZXNbcG9zLnJvd11bcG9zLmNvbCAtIDJdICYmICFzcXVhcmVzW3Bvcy5yb3ddW3Bvcy5jb2wgLSAzXSkge1xuXHRcdFx0XHRcdHJlc3VsdC5wdXNoKG5ldyBDb29yZGluYXRlKHtcblx0XHRcdFx0XHRcdHJvdzogcG9zLnJvdyxcblx0XHRcdFx0XHRcdGNvbDogcG9zLmNvbCAtIDJcblx0XHRcdFx0XHR9KSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCFjdXJyZW50LnJpZ2h0QmxhY2tSb29rTW92ZWQgJiYgIXNxdWFyZXNbcG9zLnJvd11bcG9zLmNvbCArIDFdICYmICFzcXVhcmVzW3Bvcy5yb3ddW3Bvcy5jb2wgKyAyXSkge1xuXHRcdFx0XHRcdHJlc3VsdC5wdXNoKG5ldyBDb29yZGluYXRlKHtcblx0XHRcdFx0XHRcdHJvdzogcG9zLnJvdyxcblx0XHRcdFx0XHRcdGNvbDogcG9zLmNvbCArIDJcblx0XHRcdFx0XHR9KSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiByZXN1bHQuZmlsdGVyKCh0b1Bvcyk9PiF0aGlzLmlzS2luZ0luQ2hlY2tJZk1vdmUobmV3IE1vdmUoe1xuXHRcdFx0XHRwaWVjZTogcGllY2UsXG5cdFx0XHRcdGZyb21Qb3M6IHBvcyxcblx0XHRcdFx0dG9Qb3M6IHRvUG9zXG5cdFx0XHR9KSkpO1xuXHRcdH1cblx0fSxcblx0aXNWYWxpZE1vdmU6IHtcblx0XHR2YWx1ZTogZnVuY3Rpb24gaXNWYWxpZE1vdmVfX19uNChzcXVhcmVzLCBtb3ZlKSB7XG5cdFx0XHRjb25zdCB2YWxpZERlc3RpbmF0aW9ucyA9IHRoaXMuY2FsY3VsYXRlVmFsaWREZXN0aW5hdGlvbnMoc3F1YXJlcywgbW92ZS5waWVjZSwgbW92ZS5mcm9tUG9zKTtcblx0XHRcdHJldHVybiB2YWxpZERlc3RpbmF0aW9ucy5maW5kSW5kZXgoKHBvcyk9PnBvcy5lcXVhbHMobW92ZS50b1BvcykpID49IDA7XG5cdFx0fVxuXHR9LFxuXHRpc0luc2lkZUJvYXJkOiB7XG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGlzSW5zaWRlQm9hcmRfX19uNChjb29yZCkge1xuXHRcdFx0cmV0dXJuICgwIDw9IGNvb3JkLnJvdykgJiYgKGNvb3JkLnJvdyA8IDgpICYmICgwIDw9IGNvb3JkLmNvbCkgJiYgKGNvb3JkLmNvbCA8IDgpO1xuXHRcdH1cblx0fSxcblx0Y2FsY3VsYXRlS25pZ2h0QXR0YWNraW5nRGVzdGluYXRpb25zOiB7XG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGNhbGN1bGF0ZUtuaWdodEF0dGFja2luZ0Rlc3RpbmF0aW9uc19fX240KHNxdWFyZXMsIHBpZWNlLCBwb3MpIHtcblx0XHRcdGNvbnN0IGRlbHRhcyA9IFtcblx0XHRcdFx0W1xuXHRcdFx0XHRcdC0xLFxuXHRcdFx0XHRcdC0yXG5cdFx0XHRcdF0sXG5cdFx0XHRcdFtcblx0XHRcdFx0XHQtMixcblx0XHRcdFx0XHQtMVxuXHRcdFx0XHRdLFxuXHRcdFx0XHRbXG5cdFx0XHRcdFx0LTIsXG5cdFx0XHRcdFx0MVxuXHRcdFx0XHRdLFxuXHRcdFx0XHRbXG5cdFx0XHRcdFx0LTEsXG5cdFx0XHRcdFx0MlxuXHRcdFx0XHRdLFxuXHRcdFx0XHRbXG5cdFx0XHRcdFx0MSxcblx0XHRcdFx0XHQyXG5cdFx0XHRcdF0sXG5cdFx0XHRcdFtcblx0XHRcdFx0XHQyLFxuXHRcdFx0XHRcdDFcblx0XHRcdFx0XSxcblx0XHRcdFx0W1xuXHRcdFx0XHRcdDIsXG5cdFx0XHRcdFx0LTFcblx0XHRcdFx0XSxcblx0XHRcdFx0W1xuXHRcdFx0XHRcdDEsXG5cdFx0XHRcdFx0LTJcblx0XHRcdFx0XVxuXHRcdFx0XTtcblx0XHRcdGNvbnN0IHJlc3VsdCA9IChkZWx0YXMubWFwKChkZWx0YSk9Pm5ldyBDb29yZGluYXRlKHtcblx0XHRcdFx0cm93OiBwb3Mucm93ICsgZGVsdGFbMF0sXG5cdFx0XHRcdGNvbDogcG9zLmNvbCArIGRlbHRhWzFdXG5cdFx0XHR9KSkpLmZpbHRlcigoY29vcmQpPT50aGlzLmlzSW5zaWRlQm9hcmQoY29vcmQpICYmICF0aGlzLmlzUG9zaXRpb25PY2N1cGllZEJ5cGllY2VTYW1lQ29sb3Ioc3F1YXJlcywgcGllY2UsIGNvb3JkKSk7XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH1cblx0fSxcblx0Y2FsY3VsYXRlUm9va0F0dGFja2luZ0Rlc3RpbmF0aW9uczoge1xuXHRcdHZhbHVlOiBmdW5jdGlvbiBjYWxjdWxhdGVSb29rQXR0YWNraW5nRGVzdGluYXRpb25zX19fbjQoc3F1YXJlcywgcGllY2UsIHBvcykge1xuXHRcdFx0Y29uc3Qgcm93ID0gcG9zLnJvdztcblx0XHRcdGNvbnN0IGNvbCA9IHBvcy5jb2w7XG5cdFx0XHRjb25zdCByZXN1bHQgPSBuZXcgQXJyYXkoKTtcblx0XHRcdGNvbnN0IGRlbHRhcyA9IFtcblx0XHRcdFx0W1xuXHRcdFx0XHRcdC0xLFxuXHRcdFx0XHRcdDBcblx0XHRcdFx0XSxcblx0XHRcdFx0W1xuXHRcdFx0XHRcdDEsXG5cdFx0XHRcdFx0MFxuXHRcdFx0XHRdLFxuXHRcdFx0XHRbXG5cdFx0XHRcdFx0MCxcblx0XHRcdFx0XHQtMVxuXHRcdFx0XHRdLFxuXHRcdFx0XHRbXG5cdFx0XHRcdFx0MCxcblx0XHRcdFx0XHQrMVxuXHRcdFx0XHRdXG5cdFx0XHRdO1xuXHRcdFx0Zm9yKGxldCBkZWx0YSBvZiBkZWx0YXMpIHtcblx0XHRcdFx0bGV0IG5ld1BvcyA9IG5ldyBDb29yZGluYXRlKHtcblx0XHRcdFx0XHRyb3c6IHJvdyArIGRlbHRhWzBdLFxuXHRcdFx0XHRcdGNvbDogY29sICsgZGVsdGFbMV1cblx0XHRcdFx0fSk7XG5cdFx0XHRcdHdoaWxlKHRoaXMuaXNJbnNpZGVCb2FyZChuZXdQb3MpKSB7XG5cdFx0XHRcdFx0aWYgKCFzcXVhcmVzW25ld1Bvcy5yb3ddW25ld1Bvcy5jb2xdKSB7XG5cdFx0XHRcdFx0XHRyZXN1bHQucHVzaChuZXdQb3MpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRpZiAodGhpcy5pc1Bvc2l0aW9uT2NjdXBpZWRCeXBpZWNlU2FtZUNvbG9yKHNxdWFyZXMsIHBpZWNlLCBuZXdQb3MpKSB7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKHRoaXMuaXNQb3NpdGlvbk9jY3VwaWVkQnlwaWVjZU90aGVyQ29sb3Ioc3F1YXJlcywgcGllY2UsIG5ld1BvcykpIHtcblx0XHRcdFx0XHRcdFx0cmVzdWx0LnB1c2gobmV3UG9zKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdG5ld1BvcyA9IG5ldyBDb29yZGluYXRlKHtcblx0XHRcdFx0XHRcdHJvdzogbmV3UG9zLnJvdyArIGRlbHRhWzBdLFxuXHRcdFx0XHRcdFx0Y29sOiBuZXdQb3MuY29sICsgZGVsdGFbMV1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cdH0sXG5cdGNhbGN1bGF0ZUJpc2hvcEF0dGFja2luZ0Rlc3RpbmF0aW9uczoge1xuXHRcdHZhbHVlOiBmdW5jdGlvbiBjYWxjdWxhdGVCaXNob3BBdHRhY2tpbmdEZXN0aW5hdGlvbnNfX19uNChzcXVhcmVzLCBwaWVjZSwgcG9zKSB7XG5cdFx0XHRjb25zdCByb3cgPSBwb3Mucm93O1xuXHRcdFx0Y29uc3QgY29sID0gcG9zLmNvbDtcblx0XHRcdGNvbnN0IHJlc3VsdCA9IG5ldyBBcnJheSgpO1xuXHRcdFx0Y29uc3QgZGVsdGFzID0gW1xuXHRcdFx0XHRbXG5cdFx0XHRcdFx0LTEsXG5cdFx0XHRcdFx0LTFcblx0XHRcdFx0XSxcblx0XHRcdFx0W1xuXHRcdFx0XHRcdC0xLFxuXHRcdFx0XHRcdDFcblx0XHRcdFx0XSxcblx0XHRcdFx0W1xuXHRcdFx0XHRcdDEsXG5cdFx0XHRcdFx0MVxuXHRcdFx0XHRdLFxuXHRcdFx0XHRbXG5cdFx0XHRcdFx0MSxcblx0XHRcdFx0XHQtMVxuXHRcdFx0XHRdXG5cdFx0XHRdO1xuXHRcdFx0Zm9yKGxldCBkZWx0YSBvZiBkZWx0YXMpIHtcblx0XHRcdFx0bGV0IG5ld1BvcyA9IG5ldyBDb29yZGluYXRlKHtcblx0XHRcdFx0XHRyb3c6IHJvdyArIGRlbHRhWzBdLFxuXHRcdFx0XHRcdGNvbDogY29sICsgZGVsdGFbMV1cblx0XHRcdFx0fSk7XG5cdFx0XHRcdHdoaWxlKHRoaXMuaXNJbnNpZGVCb2FyZChuZXdQb3MpKSB7XG5cdFx0XHRcdFx0aWYgKCFzcXVhcmVzW25ld1Bvcy5yb3ddW25ld1Bvcy5jb2xdKSB7XG5cdFx0XHRcdFx0XHRyZXN1bHQucHVzaChuZXdQb3MpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRpZiAodGhpcy5pc1Bvc2l0aW9uT2NjdXBpZWRCeXBpZWNlU2FtZUNvbG9yKHNxdWFyZXMsIHBpZWNlLCBuZXdQb3MpKSB7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKHRoaXMuaXNQb3NpdGlvbk9jY3VwaWVkQnlwaWVjZU90aGVyQ29sb3Ioc3F1YXJlcywgcGllY2UsIG5ld1BvcykpIHtcblx0XHRcdFx0XHRcdFx0cmVzdWx0LnB1c2gobmV3UG9zKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdG5ld1BvcyA9IG5ldyBDb29yZGluYXRlKHtcblx0XHRcdFx0XHRcdHJvdzogbmV3UG9zLnJvdyArIGRlbHRhWzBdLFxuXHRcdFx0XHRcdFx0Y29sOiBuZXdQb3MuY29sICsgZGVsdGFbMV1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cdH0sXG5cdGNhbGN1bGF0ZVF1ZWVuQXR0YWNraW5nRGVzdGluYXRpb25zOiB7XG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGNhbGN1bGF0ZVF1ZWVuQXR0YWNraW5nRGVzdGluYXRpb25zX19fbjQoc3F1YXJlcywgcGllY2UsIHBvcykge1xuXHRcdFx0Y29uc3QgaXNXaGl0ZSA9IHRoaXMuaXNXaGl0ZXBpZWNlKHBpZWNlKTtcblx0XHRcdGlmIChpc1doaXRlKSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmNhbGN1bGF0ZVJvb2tBdHRhY2tpbmdEZXN0aW5hdGlvbnMoc3F1YXJlcywgJ+KZlicsIHBvcykuY29uY2F0KHRoaXMuY2FsY3VsYXRlQmlzaG9wQXR0YWNraW5nRGVzdGluYXRpb25zKHNxdWFyZXMsICfimZcnLCBwb3MpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmNhbGN1bGF0ZVJvb2tBdHRhY2tpbmdEZXN0aW5hdGlvbnMoc3F1YXJlcywgJ+KZnCcsIHBvcykuY29uY2F0KHRoaXMuY2FsY3VsYXRlQmlzaG9wQXR0YWNraW5nRGVzdGluYXRpb25zKHNxdWFyZXMsICfimZ0nLCBwb3MpKTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdGNhbGN1bGF0ZUtpbmdBdHRhY2tpbmdEZXN0aW5hdGlvbnM6IHtcblx0XHR2YWx1ZTogZnVuY3Rpb24gY2FsY3VsYXRlS2luZ0F0dGFja2luZ0Rlc3RpbmF0aW9uc19fX240KHNxdWFyZXMsIHBpZWNlLCBwb3MpIHtcblx0XHRcdGNvbnN0IGRlbHRhcyA9IFtcblx0XHRcdFx0W1xuXHRcdFx0XHRcdC0xLFxuXHRcdFx0XHRcdC0xXG5cdFx0XHRcdF0sXG5cdFx0XHRcdFtcblx0XHRcdFx0XHQtMSxcblx0XHRcdFx0XHQwXG5cdFx0XHRcdF0sXG5cdFx0XHRcdFtcblx0XHRcdFx0XHQtMSxcblx0XHRcdFx0XHQxXG5cdFx0XHRcdF0sXG5cdFx0XHRcdFtcblx0XHRcdFx0XHQwLFxuXHRcdFx0XHRcdDFcblx0XHRcdFx0XSxcblx0XHRcdFx0W1xuXHRcdFx0XHRcdDEsXG5cdFx0XHRcdFx0MVxuXHRcdFx0XHRdLFxuXHRcdFx0XHRbXG5cdFx0XHRcdFx0MSxcblx0XHRcdFx0XHQwXG5cdFx0XHRcdF0sXG5cdFx0XHRcdFtcblx0XHRcdFx0XHQxLFxuXHRcdFx0XHRcdC0xXG5cdFx0XHRcdF0sXG5cdFx0XHRcdFtcblx0XHRcdFx0XHQwLFxuXHRcdFx0XHRcdC0xXG5cdFx0XHRcdF1cblx0XHRcdF07XG5cdFx0XHRjb25zdCByZXN1bHQgPSAoZGVsdGFzLm1hcCgoZGVsdGEpPT5uZXcgQ29vcmRpbmF0ZSh7XG5cdFx0XHRcdHJvdzogcG9zLnJvdyArIGRlbHRhWzBdLFxuXHRcdFx0XHRjb2w6IHBvcy5jb2wgKyBkZWx0YVsxXVxuXHRcdFx0fSkpKS5maWx0ZXIoKGNvb3JkKT0+dGhpcy5pc0luc2lkZUJvYXJkKGNvb3JkKSAmJiAhdGhpcy5pc1Bvc2l0aW9uT2NjdXBpZWRCeXBpZWNlU2FtZUNvbG9yKHNxdWFyZXMsIHBpZWNlLCBjb29yZCkpO1xuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cdH0sXG5cdGNhbGN1bGF0ZVBhd25BdHRhY2tpbmdEZXN0aW5hdGlvbnM6IHtcblx0XHR2YWx1ZTogZnVuY3Rpb24gY2FsY3VsYXRlUGF3bkF0dGFja2luZ0Rlc3RpbmF0aW9uc19fX240KHNxdWFyZXMsIHBpZWNlLCBwb3MpIHtcblx0XHRcdGNvbnN0IHJlc3VsdCA9IG5ldyBBcnJheSgpO1xuXHRcdFx0Y29uc3QgaXNXaGl0ZSA9IHRoaXMuaXNXaGl0ZXBpZWNlKHBpZWNlKTtcblx0XHRcdGlmIChpc1doaXRlICYmIChwb3Mucm93IDwgNykpIHtcblx0XHRcdFx0Zm9yKGxldCBkYyBvZiBbXG5cdFx0XHRcdFx0MSxcblx0XHRcdFx0XHQtMVxuXHRcdFx0XHRdKSB7XG5cdFx0XHRcdFx0Y29uc3QgYXR0YWNrUG9zID0gbmV3IENvb3JkaW5hdGUoe1xuXHRcdFx0XHRcdFx0cm93OiBwb3Mucm93ICsgMSxcblx0XHRcdFx0XHRcdGNvbDogcG9zLmNvbCArIGRjXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0aWYgKHRoaXMuaXNJbnNpZGVCb2FyZChhdHRhY2tQb3MpICYmIHRoaXMuaXNQb3NpdGlvbk9jY3VwaWVkQnlwaWVjZU90aGVyQ29sb3Ioc3F1YXJlcywgcGllY2UsIGF0dGFja1BvcykpIHtcblx0XHRcdFx0XHRcdHJlc3VsdC5wdXNoKGF0dGFja1Bvcyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKCFpc1doaXRlICYmIChwb3Mucm93ID4gMCkpIHtcblx0XHRcdFx0Zm9yKGxldCBkYyBvZiBbXG5cdFx0XHRcdFx0MSxcblx0XHRcdFx0XHQtMVxuXHRcdFx0XHRdKSB7XG5cdFx0XHRcdFx0Y29uc3QgYXR0YWNrUG9zID0gbmV3IENvb3JkaW5hdGUoe1xuXHRcdFx0XHRcdFx0cm93OiBwb3Mucm93IC0gMSxcblx0XHRcdFx0XHRcdGNvbDogcG9zLmNvbCArIGRjXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0aWYgKHRoaXMuaXNJbnNpZGVCb2FyZChhdHRhY2tQb3MpICYmIHRoaXMuaXNQb3NpdGlvbk9jY3VwaWVkQnlwaWVjZU90aGVyQ29sb3Ioc3F1YXJlcywgcGllY2UsIGF0dGFja1BvcykpIHtcblx0XHRcdFx0XHRcdHJlc3VsdC5wdXNoKGF0dGFja1Bvcyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH1cblx0fSxcblx0Y2FsY3VsYXRlQXR0YWNrZWREZXN0aW5hdGlvbnM6IHtcblx0XHR2YWx1ZTogZnVuY3Rpb24gY2FsY3VsYXRlQXR0YWNrZWREZXN0aW5hdGlvbnNfX19uNChzcXVhcmVzLCBwaWVjZSwgcG9zKSB7XG5cdFx0XHRsZXQgcmVzdWx0ID0gbmV3IEFycmF5KCk7XG5cdFx0XHRzd2l0Y2gocGllY2UpIHtcblx0XHRcdFx0Y2FzZSAoJ+KZmCcpOlxuXHRcdFx0XHRjYXNlICgn4pmeJyk6XG5cdFx0XHRcdFx0cmVzdWx0ID0gdGhpcy5jYWxjdWxhdGVLbmlnaHRBdHRhY2tpbmdEZXN0aW5hdGlvbnMoc3F1YXJlcywgcGllY2UsIHBvcyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgKCfimZYnKTpcblx0XHRcdFx0Y2FzZSAoJ+KZnCcpOlxuXHRcdFx0XHRcdHJlc3VsdCA9IHRoaXMuY2FsY3VsYXRlUm9va0F0dGFja2luZ0Rlc3RpbmF0aW9ucyhzcXVhcmVzLCBwaWVjZSwgcG9zKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAoJ+KZlycpOlxuXHRcdFx0XHRjYXNlICgn4pmdJyk6XG5cdFx0XHRcdFx0cmVzdWx0ID0gdGhpcy5jYWxjdWxhdGVCaXNob3BBdHRhY2tpbmdEZXN0aW5hdGlvbnMoc3F1YXJlcywgcGllY2UsIHBvcyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgKCfimZUnKTpcblx0XHRcdFx0Y2FzZSAoJ+KZmycpOlxuXHRcdFx0XHRcdHJlc3VsdCA9IHRoaXMuY2FsY3VsYXRlUXVlZW5BdHRhY2tpbmdEZXN0aW5hdGlvbnMoc3F1YXJlcywgcGllY2UsIHBvcyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgKCfimZQnKTpcblx0XHRcdFx0Y2FzZSAoJ+KZmicpOlxuXHRcdFx0XHRcdHJlc3VsdCA9IHRoaXMuY2FsY3VsYXRlS2luZ0F0dGFja2luZ0Rlc3RpbmF0aW9ucyhzcXVhcmVzLCBwaWVjZSwgcG9zKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAoJ+KZlCcpOlxuXHRcdFx0XHRjYXNlICgn4pmaJyk6XG5cdFx0XHRcdFx0cmVzdWx0ID0gdGhpcy5jYWxjdWxhdGVLaW5nQXR0YWNraW5nRGVzdGluYXRpb25zKHNxdWFyZXMsIHBpZWNlLCBwb3MpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICgn4pmZJyk6XG5cdFx0XHRcdGNhc2UgKCfimZ8nKTpcblx0XHRcdFx0XHRyZXN1bHQgPSB0aGlzLmNhbGN1bGF0ZVBhd25BdHRhY2tpbmdEZXN0aW5hdGlvbnMoc3F1YXJlcywgcGllY2UsIHBvcyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH1cblx0fSxcblx0aXNLaW5nSW5DaGVja0lmTW92ZToge1xuXHRcdHZhbHVlOiBmdW5jdGlvbiBpc0tpbmdJbkNoZWNrSWZNb3ZlX19fbjQoYXR0ZW1wdGVkTW92ZSkge1xuXHRcdFx0Y29uc3Qge1xuXHRcdFx0XHRzcXVhcmVzOiBjaGFuZ2VkU3F1YXJlc1xuXHRcdFx0fSA9IHRoaXMubW92ZShhdHRlbXB0ZWRNb3ZlKTtcblx0XHRcdGNvbnN0IGlzV2hpdGUgPSB0aGlzLmlzV2hpdGVwaWVjZShhdHRlbXB0ZWRNb3ZlLnBpZWNlKTtcblx0XHRcdGNvbnN0IGtpbmdQb3MgPSB0aGlzLmdldEtpbmdQb3NpdGlvbihjaGFuZ2VkU3F1YXJlcywgaXNXaGl0ZSk7XG5cdFx0XHRpZiAoIWtpbmdQb3MpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXMuaXNLaW5nSW5DaGVjayhjaGFuZ2VkU3F1YXJlcywgaXNXaGl0ZSA/ICfimZQnIDogJ+KZmicsIGtpbmdQb3MpO1xuXHRcdH1cblx0fSxcblx0aXNLaW5nSW5DaGVjazoge1xuXHRcdHZhbHVlOiBmdW5jdGlvbiBpc0tpbmdJbkNoZWNrX19fbjQoc3F1YXJlcywga2luZywgcG9zKSB7XG5cdFx0XHRpZiAoKGtpbmcgIT0gJ+KZlCcpICYmIChraW5nICE9ICfimZonKSkge1xuXHRcdFx0XHR0aHJvdyBcIlRoZSBpbnB1dCBwaWVjZSBpcyBub3QgYSBraW5nXCI7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBpc1doaXRlS2luZyA9IGtpbmcgPT0gJ+KZlCc7XG5cdFx0XHRjb25zdCBvcHBvbmVudHBpZWNlcyA9IGlzV2hpdGVLaW5nID8gdGhpcy5nZXRQaWVjZXNPZlNhbWVDb2xvcihzcXVhcmVzLCBmYWxzZSkgOiB0aGlzLmdldFBpZWNlc09mU2FtZUNvbG9yKHNxdWFyZXMsIHRydWUpO1xuXHRcdFx0bGV0IHJlc3VsdCA9IG5ldyBBcnJheSgpO1xuXHRcdFx0Zm9yKGxldCBvcHBvbmVudHBpZWNlIG9mIG9wcG9uZW50cGllY2VzKSB7XG5cdFx0XHRcdGNvbnN0IHIgPSB0aGlzLmNhbGN1bGF0ZUF0dGFja2VkRGVzdGluYXRpb25zKHNxdWFyZXMsIG9wcG9uZW50cGllY2UucGllY2UsIG9wcG9uZW50cGllY2UucG9zKTtcblx0XHRcdFx0cmVzdWx0ID0gcmVzdWx0LmNvbmNhdChyKTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGIgPSByZXN1bHQuZmluZCgocCk9PnAuZXF1YWxzKHBvcykpID8gdHJ1ZSA6IGZhbHNlO1xuXHRcdFx0cmV0dXJuIGI7XG5cdFx0fVxuXHR9LFxuXHRnZXRQaWVjZXNPZlNhbWVDb2xvcjoge1xuXHRcdHZhbHVlOiBmdW5jdGlvbiBnZXRQaWVjZXNPZlNhbWVDb2xvcl9fX240KHNxdWFyZXMsIHdoaXRlKSB7XG5cdFx0XHRjb25zdCByZXN1bHQgPSBuZXcgQXJyYXkoKTtcblx0XHRcdGZvcihsZXQgaSA9IDA7aSA8IHNxdWFyZXMubGVuZ3RoO2krKykge1xuXHRcdFx0XHRmb3IobGV0IGogPSAwO2ogPCBzcXVhcmVzW2ldLmxlbmd0aDtqKyspIHtcblx0XHRcdFx0XHRpZiAod2hpdGUgPyB0aGlzLmlzV2hpdGVwaWVjZShzcXVhcmVzW2ldW2pdKSA6IHRoaXMuaXNCbGFja3BpZWNlKHNxdWFyZXNbaV1bal0pKSB7XG5cdFx0XHRcdFx0XHRyZXN1bHQucHVzaCh7XG5cdFx0XHRcdFx0XHRcdHBpZWNlOiBzcXVhcmVzW2ldW2pdLFxuXHRcdFx0XHRcdFx0XHRwb3M6IG5ldyBDb29yZGluYXRlKHtcblx0XHRcdFx0XHRcdFx0XHRyb3c6IGksXG5cdFx0XHRcdFx0XHRcdFx0Y29sOiBqXG5cdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fVxuXHR9LFxuXHRnZXRLaW5nUG9zaXRpb246IHtcblx0XHR2YWx1ZTogZnVuY3Rpb24gZ2V0S2luZ1Bvc2l0aW9uX19fbjQoc3F1YXJlcywgaXNXaGl0ZSkge1xuXHRcdFx0Zm9yKGxldCBpID0gMDtpIDwgc3F1YXJlcy5sZW5ndGg7aSsrKSB7XG5cdFx0XHRcdGZvcihsZXQgaiA9IDA7aiA8IHNxdWFyZXNbaV0ubGVuZ3RoO2orKykge1xuXHRcdFx0XHRcdGlmIChpc1doaXRlID8gc3F1YXJlc1tpXVtqXSA9PSAn4pmUJyA6IHNxdWFyZXNbaV1bal0gPT0gJ+KZmicpIHtcblx0XHRcdFx0XHRcdHJldHVybiBuZXcgQ29vcmRpbmF0ZSh7XG5cdFx0XHRcdFx0XHRcdHJvdzogaSxcblx0XHRcdFx0XHRcdFx0Y29sOiBqXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblx0fSxcblx0aXNQb3NpdGlvbk9jY3VwaWVkQnlwaWVjZVNhbWVDb2xvcjoge1xuXHRcdHZhbHVlOiBmdW5jdGlvbiBpc1Bvc2l0aW9uT2NjdXBpZWRCeXBpZWNlU2FtZUNvbG9yX19fbjQoc3F1YXJlcywgcGllY2UsIG5ld1Bvcykge1xuXHRcdFx0Y29uc3QgaXNXaGl0ZSA9IHRoaXMuaXNXaGl0ZXBpZWNlKHBpZWNlKTtcblx0XHRcdGlmIChpc1doaXRlICYmIHRoaXMuaXNXaGl0ZXBpZWNlKHNxdWFyZXNbbmV3UG9zLnJvd11bbmV3UG9zLmNvbF0pKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCFpc1doaXRlICYmIHRoaXMuaXNCbGFja3BpZWNlKHNxdWFyZXNbbmV3UG9zLnJvd11bbmV3UG9zLmNvbF0pKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fSxcblx0aXNQb3NpdGlvbk9jY3VwaWVkQnlwaWVjZU90aGVyQ29sb3I6IHtcblx0XHR2YWx1ZTogZnVuY3Rpb24gaXNQb3NpdGlvbk9jY3VwaWVkQnlwaWVjZU90aGVyQ29sb3JfX19uNChzcXVhcmVzLCBwaWVjZSwgbmV3UG9zKSB7XG5cdFx0XHRjb25zdCBpc1doaXRlID0gdGhpcy5pc1doaXRlcGllY2UocGllY2UpO1xuXHRcdFx0aWYgKGlzV2hpdGUgJiYgdGhpcy5pc0JsYWNrcGllY2Uoc3F1YXJlc1tuZXdQb3Mucm93XVtuZXdQb3MuY29sXSkpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIWlzV2hpdGUgJiYgdGhpcy5pc1doaXRlcGllY2Uoc3F1YXJlc1tuZXdQb3Mucm93XVtuZXdQb3MuY29sXSkpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9LFxuXHRnZXRDdXJyZW50U25hcHNob3Q6IHtcblx0XHR2YWx1ZTogZnVuY3Rpb24gZ2V0Q3VycmVudFNuYXBzaG90X19fbjQoKSB7XG5cdFx0XHRjb25zdCBoaXN0b3J5ID0gdGhpcy5zdGF0ZS5oaXN0b3J5O1xuXHRcdFx0cmV0dXJuIGhpc3RvcnlbdGhpcy5zdGF0ZS5zdGVwTnVtYmVyXTtcblx0XHR9XG5cdH0sXG5cdG1vdmU6IHtcblx0XHR2YWx1ZTogZnVuY3Rpb24gbW92ZV9fX240KGF0dGVtcHRlZE1vdmUpIHtcblx0XHRcdGNvbnN0IHBpZWNlID0gYXR0ZW1wdGVkTW92ZS5waWVjZTtcblx0XHRcdGNvbnN0IGZyb21Qb3MgPSBhdHRlbXB0ZWRNb3ZlLmZyb21Qb3M7XG5cdFx0XHRjb25zdCB0b1BvcyA9IGF0dGVtcHRlZE1vdmUudG9Qb3M7XG5cdFx0XHRjb25zdCBjdXJyZW50U25hcHNob3QgPSB0aGlzLmdldEN1cnJlbnRTbmFwc2hvdCgpO1xuXHRcdFx0Y29uc3Qgc3F1YXJlcyA9IGN1cnJlbnRTbmFwc2hvdC5zcXVhcmVzO1xuXHRcdFx0Y29uc3QgbmV3U3F1YXJlcyA9IHNxdWFyZXMubWFwKChyb3dzKT0+cm93cy5zbGljZSgpKTtcblx0XHRcdGNvbnN0IG1vdmVzID0gbmV3IEFycmF5KCk7XG5cdFx0XHRpZiAodGhpcy5pc0Nhc3RsaW5nTW92ZShwaWVjZSwgZnJvbVBvcywgdG9Qb3MpKSB7XG5cdFx0XHRcdG1vdmVzLnB1c2gobmV3IE1vdmUoe1xuXHRcdFx0XHRcdHBpZWNlOiBwaWVjZSxcblx0XHRcdFx0XHRmcm9tUG9zOiBuZXcgQ29vcmRpbmF0ZSh7XG5cdFx0XHRcdFx0XHRyb3c6IGZyb21Qb3Mucm93LFxuXHRcdFx0XHRcdFx0Y29sOiBmcm9tUG9zLmNvbFxuXHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdHRvUG9zOiBuZXcgQ29vcmRpbmF0ZSh7XG5cdFx0XHRcdFx0XHRyb3c6IHRvUG9zLnJvdyxcblx0XHRcdFx0XHRcdGNvbDogdG9Qb3MuY29sXG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0fSkpO1xuXHRcdFx0XHRuZXdTcXVhcmVzW3RvUG9zLnJvd11bdG9Qb3MuY29sXSA9IHBpZWNlO1xuXHRcdFx0XHRuZXdTcXVhcmVzW2Zyb21Qb3Mucm93XVtmcm9tUG9zLmNvbF0gPSBudWxsO1xuXHRcdFx0XHRsZXQgcm9va0Zyb21Qb3M7XG5cdFx0XHRcdGxldCByb29rVG9Qb3M7XG5cdFx0XHRcdGlmIChwaWVjZSA9PSAn4pmUJykge1xuXHRcdFx0XHRcdGlmICh0b1Bvcy5jb2wgPCBmcm9tUG9zLmNvbCkge1xuXHRcdFx0XHRcdFx0cm9va0Zyb21Qb3MgPSBuZXcgQ29vcmRpbmF0ZSh7XG5cdFx0XHRcdFx0XHRcdHJvdzogMCxcblx0XHRcdFx0XHRcdFx0Y29sOiAwXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdHJvb2tUb1BvcyA9IG5ldyBDb29yZGluYXRlKHtcblx0XHRcdFx0XHRcdFx0cm93OiAwLFxuXHRcdFx0XHRcdFx0XHRjb2w6IDNcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyb29rRnJvbVBvcyA9IG5ldyBDb29yZGluYXRlKHtcblx0XHRcdFx0XHRcdFx0cm93OiAwLFxuXHRcdFx0XHRcdFx0XHRjb2w6IDdcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0cm9va1RvUG9zID0gbmV3IENvb3JkaW5hdGUoe1xuXHRcdFx0XHRcdFx0XHRyb3c6IDAsXG5cdFx0XHRcdFx0XHRcdGNvbDogNVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGlmICh0b1Bvcy5jb2wgPCBmcm9tUG9zLmNvbCkge1xuXHRcdFx0XHRcdFx0cm9va0Zyb21Qb3MgPSBuZXcgQ29vcmRpbmF0ZSh7XG5cdFx0XHRcdFx0XHRcdHJvdzogNyxcblx0XHRcdFx0XHRcdFx0Y29sOiAwXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdHJvb2tUb1BvcyA9IG5ldyBDb29yZGluYXRlKHtcblx0XHRcdFx0XHRcdFx0cm93OiA3LFxuXHRcdFx0XHRcdFx0XHRjb2w6IDNcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyb29rRnJvbVBvcyA9IG5ldyBDb29yZGluYXRlKHtcblx0XHRcdFx0XHRcdFx0cm93OiA3LFxuXHRcdFx0XHRcdFx0XHRjb2w6IDdcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0cm9va1RvUG9zID0gbmV3IENvb3JkaW5hdGUoe1xuXHRcdFx0XHRcdFx0XHRyb3c6IDcsXG5cdFx0XHRcdFx0XHRcdGNvbDogNVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdG1vdmVzLnB1c2gobmV3IE1vdmUoe1xuXHRcdFx0XHRcdHBpZWNlOiBzcXVhcmVzW3Jvb2tGcm9tUG9zLnJvd11bcm9va0Zyb21Qb3MuY29sXSxcblx0XHRcdFx0XHRmcm9tUG9zOiByb29rRnJvbVBvcyxcblx0XHRcdFx0XHR0b1Bvczogcm9va1RvUG9zXG5cdFx0XHRcdH0pKTtcblx0XHRcdFx0bmV3U3F1YXJlc1tyb29rVG9Qb3Mucm93XVtyb29rVG9Qb3MuY29sXSA9IHNxdWFyZXNbcm9va0Zyb21Qb3Mucm93XVtyb29rRnJvbVBvcy5jb2xdO1xuXHRcdFx0XHRuZXdTcXVhcmVzW3Jvb2tGcm9tUG9zLnJvd11bcm9va0Zyb21Qb3MuY29sXSA9IG51bGw7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBwaWVjZSA9IHNxdWFyZXNbZnJvbVBvcy5yb3ddW2Zyb21Qb3MuY29sXTtcblx0XHRcdFx0bmV3U3F1YXJlc1t0b1Bvcy5yb3ddW3RvUG9zLmNvbF0gPSBwaWVjZTtcblx0XHRcdFx0bmV3U3F1YXJlc1tmcm9tUG9zLnJvd11bZnJvbVBvcy5jb2xdID0gbnVsbDtcblx0XHRcdFx0bW92ZXMucHVzaChhdHRlbXB0ZWRNb3ZlKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHNxdWFyZXM6IG5ld1NxdWFyZXMsXG5cdFx0XHRcdG1vdmVzOiBtb3Zlc1xuXHRcdFx0fTtcblx0XHR9XG5cdH0sXG5cdGlzQ2FzdGxpbmdNb3ZlOiB7XG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGlzQ2FzdGxpbmdNb3ZlX19fbjQocGllY2UsIGZyb21Qb3MsIHRvUG9zKSB7XG5cdFx0XHRjb25zdCBjdXJyZW50U25hcHNob3QgPSB0aGlzLmdldEN1cnJlbnRTbmFwc2hvdCgpO1xuXHRcdFx0aWYgKHBpZWNlID09ICfimZQnICYmICFjdXJyZW50U25hcHNob3Qud2hpdGVLaW5nTW92ZWQgJiYgTWF0aC5hYnModG9Qb3MuY29sIC0gZnJvbVBvcy5jb2wpID09IDIpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0XHRpZiAocGllY2UgPT0gJ+KZmicgJiYgIWN1cnJlbnRTbmFwc2hvdC5ibGFja0tpbmdNb3ZlZCAmJiBNYXRoLmFicyh0b1Bvcy5jb2wgLSBmcm9tUG9zLmNvbCkgPT0gMikge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH0sXG5cdGlzTGVmdFdoaXRlUm9vazoge1xuXHRcdHZhbHVlOiBmdW5jdGlvbiBpc0xlZnRXaGl0ZVJvb2tfX19uNChwaWVjZSwgcG9zKSB7XG5cdFx0XHRyZXR1cm4gKHBpZWNlID09ICfimZYnKSAmJiAocG9zLnJvdyA9PSAwKSAmJiAocG9zLmNvbCA9PSAwKTtcblx0XHR9XG5cdH0sXG5cdGlzV2hpdGVwaWVjZToge1xuXHRcdHZhbHVlOiBmdW5jdGlvbiBpc1doaXRlcGllY2VfX19uNChwaWVjZSkge1xuXHRcdFx0c3dpdGNoKHBpZWNlKSB7XG5cdFx0XHRcdGNhc2UgJ+KZmSc6XG5cdFx0XHRcdGNhc2UgJ+KZlic6XG5cdFx0XHRcdGNhc2UgJ+KZmCc6XG5cdFx0XHRcdGNhc2UgJ+KZlyc6XG5cdFx0XHRcdGNhc2UgJ+KZlSc6XG5cdFx0XHRcdGNhc2UgJ+KZlCc6XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0aXNCbGFja3BpZWNlOiB7XG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGlzQmxhY2twaWVjZV9fX240KHBpZWNlKSB7XG5cdFx0XHRzd2l0Y2gocGllY2UpIHtcblx0XHRcdFx0Y2FzZSAn4pmfJzpcblx0XHRcdFx0Y2FzZSAn4pmcJzpcblx0XHRcdFx0Y2FzZSAn4pmeJzpcblx0XHRcdFx0Y2FzZSAn4pmdJzpcblx0XHRcdFx0Y2FzZSAn4pmbJzpcblx0XHRcdFx0Y2FzZSAn4pmaJzpcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRyZW5kZXI6IHtcblx0XHR2YWx1ZTogZnVuY3Rpb24gcmVuZGVyX19fbjQoKSB7XG5cdFx0XHRjb25zdCBoaXN0b3J5ID0gdGhpcy5zdGF0ZS5oaXN0b3J5O1xuXHRcdFx0Y29uc3QgY3VycmVudCA9IGhpc3RvcnlbdGhpcy5zdGF0ZS5zdGVwTnVtYmVyXTtcblx0XHRcdGNvbnN0IHdpbm5lciA9IHRoaXMuY2FsY3VsYXRlV2lubmVyKGN1cnJlbnQuc3F1YXJlcyk7XG5cdFx0XHRjb25zdCBtb3ZlcyA9IGhpc3RvcnkubWFwKChzbmFwc2hvdCwgc3RlcCk9Pntcblx0XHRcdFx0Y29uc3QgYWN0aW9uTGFiZWwgPSBzdGVwID8gJ0dvIHRvIG1vdmUgIycgKyBzdGVwIDogJ0dvIHRvIGdhbWUgc3RhcnQnO1xuXHRcdFx0XHRjb25zdCB0YWJsZUNlbGxTdHlsZXMgPSB7XG5cdFx0XHRcdFx0dGV4dEFsaWduOiAnY2VudGVyJyxcblx0XHRcdFx0XHR2ZXJ0aWNhbEFsaWduOiAnbWlkZGxlJyxcblx0XHRcdFx0XHRwYWRkaW5nOiAnNXB4Jyxcblx0XHRcdFx0XHRwb3NpdGlvbjogJ3JlbGF0aXZlJ1xuXHRcdFx0XHR9O1xuXHRcdFx0XHRjb25zdCBhY3Rpb25CdXR0b25TdHlsZXMgPSB7XG5cdFx0XHRcdFx0YmFja2dyb3VuZENvbG9yOiAnZ3JlZW4nLFxuXHRcdFx0XHRcdGJvcmRlcjogJ25vbmUnLFxuXHRcdFx0XHRcdGNvbG9yOiAnd2hpdGUnLFxuXHRcdFx0XHRcdHBhZGRpbmc6ICc0cHgnLFxuXHRcdFx0XHRcdHRleHRBbGlnbjogJ2NlbnRlcicsXG5cdFx0XHRcdFx0dGV4dERlY29yYXRpb246ICdub25lJyxcblx0XHRcdFx0XHRkaXNwbGF5OiAnaW5saW5lLWJsb2NrJ1xuXHRcdFx0XHR9O1xuXHRcdFx0XHRyZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsIFJlYWN0LmNyZWF0ZUVsZW1lbnQoJ3RyJywgbnVsbCwgUmVhY3QuY3JlYXRlRWxlbWVudCgndGQnLCBPYmplY3QuYXNzaWduKHtcblx0XHRcdFx0XHRzdHlsZTogdGFibGVDZWxsU3R5bGVzXG5cdFx0XHRcdH0pLCBzdGVwKSwgUmVhY3QuY3JlYXRlRWxlbWVudCgndGQnLCBPYmplY3QuYXNzaWduKHtcblx0XHRcdFx0XHRzdHlsZTogdGFibGVDZWxsU3R5bGVzXG5cdFx0XHRcdH0pLCBzbmFwc2hvdC5sYXN0TW92ZXMuam9pbignLCcpKSwgUmVhY3QuY3JlYXRlRWxlbWVudCgndGQnLCBPYmplY3QuYXNzaWduKHtcblx0XHRcdFx0XHRzdHlsZTogdGFibGVDZWxsU3R5bGVzXG5cdFx0XHRcdH0pLCBSZWFjdC5jcmVhdGVFbGVtZW50KCdidXR0b24nLCBPYmplY3QuYXNzaWduKHtcblx0XHRcdFx0XHRzdHlsZTogYWN0aW9uQnV0dG9uU3R5bGVzLFxuXHRcdFx0XHRcdG9uQ2xpY2s6ICgpPT50aGlzLmdvVG9TdGVwKHN0ZXApXG5cdFx0XHRcdH0pLCBhY3Rpb25MYWJlbCkpKSkpO1xuXHRcdFx0fSk7XG5cdFx0XHRsZXQgc3RhdHVzO1xuXHRcdFx0aWYgKHdpbm5lcikge1xuXHRcdFx0XHRzdGF0dXMgPSBcIldpbm5lcjogXCIgKyB3aW5uZXI7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzdGF0dXMgPSBcIk5leHQgcGxheWVyOiBcIiArICh0aGlzLnN0YXRlLndoaXRlSXNOZXh0ID8gXCJXaGl0ZVwiIDogXCJCbGFja1wiKTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHRhYmxlU3R5bGVzID0ge1xuXHRcdFx0XHR3aWR0aDogJzEwMCUnXG5cdFx0XHR9O1xuXHRcdFx0Y29uc3Qgc3RlcFN0eWxlcyA9IHtcblx0XHRcdFx0d2lkdGg6ICcxMCUnXG5cdFx0XHR9O1xuXHRcdFx0Y29uc3QgbW92ZVN0eWxlcyA9IHtcblx0XHRcdFx0d2lkdGg6ICc0NSUnXG5cdFx0XHR9O1xuXHRcdFx0Y29uc3QgYWN0aW9uU3R5bGVzID0ge1xuXHRcdFx0XHR3aWR0aDogJzQ1JSdcblx0XHRcdH07XG5cdFx0XHRjb25zdCBnYW1lU3R5bGVzID0ge1xuXHRcdFx0XHRkaXNwbGF5OiAnZmxleCcsXG5cdFx0XHRcdGZsZXhEaXJlY3Rpb246ICdyb3cnXG5cdFx0XHR9O1xuXHRcdFx0Y29uc3QgZ2FtZUluZm9TdHlsZXMgPSB7XG5cdFx0XHRcdG1hcmdpblRvcDogJzIwcHgnLFxuXHRcdFx0XHRtYXJnaW5MZWZ0OiAnMjBweCcsXG5cdFx0XHRcdHdpZHRoOiAnNDB2dycsXG5cdFx0XHRcdGZvbnRTaXplOiAnMS41dncnXG5cdFx0XHR9O1xuXHRcdFx0Y29uc3QgZ2FtZWJvYXJkU3R5bGVzID0ge1xuXHRcdFx0XHR3aWR0aDogJzYwdncnLFxuXHRcdFx0XHRoZWlnaHQ6ICc2MHZ3J1xuXHRcdFx0fTtcblx0XHRcdHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudCgnZGl2JywgT2JqZWN0LmFzc2lnbih7XG5cdFx0XHRcdHN0eWxlOiBnYW1lU3R5bGVzXG5cdFx0XHR9KSwgUmVhY3QuY3JlYXRlRWxlbWVudCgnZGl2JywgT2JqZWN0LmFzc2lnbih7XG5cdFx0XHRcdHN0eWxlOiBnYW1lYm9hcmRTdHlsZXNcblx0XHRcdH0pLCBSZWFjdC5jcmVhdGVFbGVtZW50KEJvYXJkLCBPYmplY3QuYXNzaWduKHtcblx0XHRcdFx0c3F1YXJlczogY3VycmVudC5zcXVhcmVzLFxuXHRcdFx0XHRwaWNrZWRTcXVhcmU6IHRoaXMuc3RhdGUucGlja2VkU3F1YXJlLFxuXHRcdFx0XHR2YWxpZERlc3RpbmF0aW9uczogdGhpcy5zdGF0ZS52YWxpZERlc3RpbmF0aW9ucyxcblx0XHRcdFx0b25DbGljazogKHBvcyk9PnRoaXMuaGFuZGxlQ2xpY2socG9zKVxuXHRcdFx0fSkpKSwgUmVhY3QuY3JlYXRlRWxlbWVudCgnZGl2JywgT2JqZWN0LmFzc2lnbih7XG5cdFx0XHRcdHN0eWxlOiBnYW1lSW5mb1N0eWxlc1xuXHRcdFx0fSksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoJ2RpdicsIG51bGwsIHN0YXR1cyksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoJ3AnLCBudWxsKSwgUmVhY3QuY3JlYXRlRWxlbWVudCgndGFibGUnLCBPYmplY3QuYXNzaWduKHtcblx0XHRcdFx0c3R5bGU6IHRhYmxlU3R5bGVzXG5cdFx0XHR9KSwgUmVhY3QuY3JlYXRlRWxlbWVudCgndHInLCBudWxsLCBSZWFjdC5jcmVhdGVFbGVtZW50KCd0aCcsIE9iamVjdC5hc3NpZ24oe1xuXHRcdFx0XHRzdHlsZTogc3RlcFN0eWxlc1xuXHRcdFx0fSksIFwiU3RlcFwiKSwgUmVhY3QuY3JlYXRlRWxlbWVudCgndGgnLCBPYmplY3QuYXNzaWduKHtcblx0XHRcdFx0c3R5bGU6IG1vdmVTdHlsZXNcblx0XHRcdH0pLCBcIk1vdmVcIiksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoJ3RoJywgT2JqZWN0LmFzc2lnbih7XG5cdFx0XHRcdHN0eWxlOiBhY3Rpb25TdHlsZXNcblx0XHRcdH0pLCBcIkFjdGlvblwiKSksIG1vdmVzKSkpKTtcblx0XHR9XG5cdH1cbn0sIHt9LCBmdW5jdGlvbihpbnN0YW5jZVByb3RvLCBzdGF0aWNQcm90bykge1xuXHR2YXIgbWV0YUNsYXNzID0gbmV3IE40Q2xhc3Moe1xuXHRcdG5hbWU6ICdHYW1lJyxcblx0XHRvcmlnaW46ICdjaGVzcy1yZWFjdCcsXG5cdFx0ZnFuOiAnY29tcG9uZW50cy5HYW1lLkdhbWUnLFxuXHRcdG40c3VwZXJUeXBlOiB1bmRlZmluZWQsXG5cdFx0YWxsSW1wbGVtZW50ZWRJbnRlcmZhY2VzOiBbXSxcblx0XHRvd25lZE1lbWJlcnM6IFtcblx0XHRcdG5ldyBONE1ldGhvZCh7XG5cdFx0XHRcdG5hbWU6ICdjb25zdHJ1Y3RvcicsXG5cdFx0XHRcdGlzU3RhdGljOiBmYWxzZSxcblx0XHRcdFx0anNGdW5jdGlvbjogaW5zdGFuY2VQcm90b1snY29uc3RydWN0b3InXSxcblx0XHRcdFx0YW5ub3RhdGlvbnM6IFtdXG5cdFx0XHR9KSxcblx0XHRcdG5ldyBONE1ldGhvZCh7XG5cdFx0XHRcdG5hbWU6ICdoYW5kbGVDbGljaycsXG5cdFx0XHRcdGlzU3RhdGljOiBmYWxzZSxcblx0XHRcdFx0anNGdW5jdGlvbjogaW5zdGFuY2VQcm90b1snaGFuZGxlQ2xpY2snXSxcblx0XHRcdFx0YW5ub3RhdGlvbnM6IFtdXG5cdFx0XHR9KSxcblx0XHRcdG5ldyBONE1ldGhvZCh7XG5cdFx0XHRcdG5hbWU6ICdnb1RvU3RlcCcsXG5cdFx0XHRcdGlzU3RhdGljOiBmYWxzZSxcblx0XHRcdFx0anNGdW5jdGlvbjogaW5zdGFuY2VQcm90b1snZ29Ub1N0ZXAnXSxcblx0XHRcdFx0YW5ub3RhdGlvbnM6IFtdXG5cdFx0XHR9KSxcblx0XHRcdG5ldyBONE1ldGhvZCh7XG5cdFx0XHRcdG5hbWU6ICdnZXRBbGxQaWVjZXNTYW1lQ29sb3InLFxuXHRcdFx0XHRpc1N0YXRpYzogZmFsc2UsXG5cdFx0XHRcdGpzRnVuY3Rpb246IGluc3RhbmNlUHJvdG9bJ2dldEFsbFBpZWNlc1NhbWVDb2xvciddLFxuXHRcdFx0XHRhbm5vdGF0aW9uczogW11cblx0XHRcdH0pLFxuXHRcdFx0bmV3IE40TWV0aG9kKHtcblx0XHRcdFx0bmFtZTogJ2ZvckFsbCcsXG5cdFx0XHRcdGlzU3RhdGljOiBmYWxzZSxcblx0XHRcdFx0anNGdW5jdGlvbjogaW5zdGFuY2VQcm90b1snZm9yQWxsJ10sXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjRNZXRob2Qoe1xuXHRcdFx0XHRuYW1lOiAnY2FsY3VsYXRlV2lubmVyJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRqc0Z1bmN0aW9uOiBpbnN0YW5jZVByb3RvWydjYWxjdWxhdGVXaW5uZXInXSxcblx0XHRcdFx0YW5ub3RhdGlvbnM6IFtdXG5cdFx0XHR9KSxcblx0XHRcdG5ldyBONE1ldGhvZCh7XG5cdFx0XHRcdG5hbWU6ICdjYWxjdWxhdGVWYWxpZERlc3RpbmF0aW9ucycsXG5cdFx0XHRcdGlzU3RhdGljOiBmYWxzZSxcblx0XHRcdFx0anNGdW5jdGlvbjogaW5zdGFuY2VQcm90b1snY2FsY3VsYXRlVmFsaWREZXN0aW5hdGlvbnMnXSxcblx0XHRcdFx0YW5ub3RhdGlvbnM6IFtdXG5cdFx0XHR9KSxcblx0XHRcdG5ldyBONE1ldGhvZCh7XG5cdFx0XHRcdG5hbWU6ICdpc1ZhbGlkTW92ZScsXG5cdFx0XHRcdGlzU3RhdGljOiBmYWxzZSxcblx0XHRcdFx0anNGdW5jdGlvbjogaW5zdGFuY2VQcm90b1snaXNWYWxpZE1vdmUnXSxcblx0XHRcdFx0YW5ub3RhdGlvbnM6IFtdXG5cdFx0XHR9KSxcblx0XHRcdG5ldyBONE1ldGhvZCh7XG5cdFx0XHRcdG5hbWU6ICdpc0luc2lkZUJvYXJkJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRqc0Z1bmN0aW9uOiBpbnN0YW5jZVByb3RvWydpc0luc2lkZUJvYXJkJ10sXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjRNZXRob2Qoe1xuXHRcdFx0XHRuYW1lOiAnY2FsY3VsYXRlS25pZ2h0QXR0YWNraW5nRGVzdGluYXRpb25zJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRqc0Z1bmN0aW9uOiBpbnN0YW5jZVByb3RvWydjYWxjdWxhdGVLbmlnaHRBdHRhY2tpbmdEZXN0aW5hdGlvbnMnXSxcblx0XHRcdFx0YW5ub3RhdGlvbnM6IFtdXG5cdFx0XHR9KSxcblx0XHRcdG5ldyBONE1ldGhvZCh7XG5cdFx0XHRcdG5hbWU6ICdjYWxjdWxhdGVSb29rQXR0YWNraW5nRGVzdGluYXRpb25zJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRqc0Z1bmN0aW9uOiBpbnN0YW5jZVByb3RvWydjYWxjdWxhdGVSb29rQXR0YWNraW5nRGVzdGluYXRpb25zJ10sXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjRNZXRob2Qoe1xuXHRcdFx0XHRuYW1lOiAnY2FsY3VsYXRlQmlzaG9wQXR0YWNraW5nRGVzdGluYXRpb25zJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRqc0Z1bmN0aW9uOiBpbnN0YW5jZVByb3RvWydjYWxjdWxhdGVCaXNob3BBdHRhY2tpbmdEZXN0aW5hdGlvbnMnXSxcblx0XHRcdFx0YW5ub3RhdGlvbnM6IFtdXG5cdFx0XHR9KSxcblx0XHRcdG5ldyBONE1ldGhvZCh7XG5cdFx0XHRcdG5hbWU6ICdjYWxjdWxhdGVRdWVlbkF0dGFja2luZ0Rlc3RpbmF0aW9ucycsXG5cdFx0XHRcdGlzU3RhdGljOiBmYWxzZSxcblx0XHRcdFx0anNGdW5jdGlvbjogaW5zdGFuY2VQcm90b1snY2FsY3VsYXRlUXVlZW5BdHRhY2tpbmdEZXN0aW5hdGlvbnMnXSxcblx0XHRcdFx0YW5ub3RhdGlvbnM6IFtdXG5cdFx0XHR9KSxcblx0XHRcdG5ldyBONE1ldGhvZCh7XG5cdFx0XHRcdG5hbWU6ICdjYWxjdWxhdGVLaW5nQXR0YWNraW5nRGVzdGluYXRpb25zJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRqc0Z1bmN0aW9uOiBpbnN0YW5jZVByb3RvWydjYWxjdWxhdGVLaW5nQXR0YWNraW5nRGVzdGluYXRpb25zJ10sXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjRNZXRob2Qoe1xuXHRcdFx0XHRuYW1lOiAnY2FsY3VsYXRlUGF3bkF0dGFja2luZ0Rlc3RpbmF0aW9ucycsXG5cdFx0XHRcdGlzU3RhdGljOiBmYWxzZSxcblx0XHRcdFx0anNGdW5jdGlvbjogaW5zdGFuY2VQcm90b1snY2FsY3VsYXRlUGF3bkF0dGFja2luZ0Rlc3RpbmF0aW9ucyddLFxuXHRcdFx0XHRhbm5vdGF0aW9uczogW11cblx0XHRcdH0pLFxuXHRcdFx0bmV3IE40TWV0aG9kKHtcblx0XHRcdFx0bmFtZTogJ2NhbGN1bGF0ZUF0dGFja2VkRGVzdGluYXRpb25zJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRqc0Z1bmN0aW9uOiBpbnN0YW5jZVByb3RvWydjYWxjdWxhdGVBdHRhY2tlZERlc3RpbmF0aW9ucyddLFxuXHRcdFx0XHRhbm5vdGF0aW9uczogW11cblx0XHRcdH0pLFxuXHRcdFx0bmV3IE40TWV0aG9kKHtcblx0XHRcdFx0bmFtZTogJ2lzS2luZ0luQ2hlY2tJZk1vdmUnLFxuXHRcdFx0XHRpc1N0YXRpYzogZmFsc2UsXG5cdFx0XHRcdGpzRnVuY3Rpb246IGluc3RhbmNlUHJvdG9bJ2lzS2luZ0luQ2hlY2tJZk1vdmUnXSxcblx0XHRcdFx0YW5ub3RhdGlvbnM6IFtdXG5cdFx0XHR9KSxcblx0XHRcdG5ldyBONE1ldGhvZCh7XG5cdFx0XHRcdG5hbWU6ICdpc0tpbmdJbkNoZWNrJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRqc0Z1bmN0aW9uOiBpbnN0YW5jZVByb3RvWydpc0tpbmdJbkNoZWNrJ10sXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjRNZXRob2Qoe1xuXHRcdFx0XHRuYW1lOiAnZ2V0UGllY2VzT2ZTYW1lQ29sb3InLFxuXHRcdFx0XHRpc1N0YXRpYzogZmFsc2UsXG5cdFx0XHRcdGpzRnVuY3Rpb246IGluc3RhbmNlUHJvdG9bJ2dldFBpZWNlc09mU2FtZUNvbG9yJ10sXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjRNZXRob2Qoe1xuXHRcdFx0XHRuYW1lOiAnZ2V0S2luZ1Bvc2l0aW9uJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRqc0Z1bmN0aW9uOiBpbnN0YW5jZVByb3RvWydnZXRLaW5nUG9zaXRpb24nXSxcblx0XHRcdFx0YW5ub3RhdGlvbnM6IFtdXG5cdFx0XHR9KSxcblx0XHRcdG5ldyBONE1ldGhvZCh7XG5cdFx0XHRcdG5hbWU6ICdpc1Bvc2l0aW9uT2NjdXBpZWRCeXBpZWNlU2FtZUNvbG9yJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRqc0Z1bmN0aW9uOiBpbnN0YW5jZVByb3RvWydpc1Bvc2l0aW9uT2NjdXBpZWRCeXBpZWNlU2FtZUNvbG9yJ10sXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjRNZXRob2Qoe1xuXHRcdFx0XHRuYW1lOiAnaXNQb3NpdGlvbk9jY3VwaWVkQnlwaWVjZU90aGVyQ29sb3InLFxuXHRcdFx0XHRpc1N0YXRpYzogZmFsc2UsXG5cdFx0XHRcdGpzRnVuY3Rpb246IGluc3RhbmNlUHJvdG9bJ2lzUG9zaXRpb25PY2N1cGllZEJ5cGllY2VPdGhlckNvbG9yJ10sXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjRNZXRob2Qoe1xuXHRcdFx0XHRuYW1lOiAnZ2V0Q3VycmVudFNuYXBzaG90Jyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRqc0Z1bmN0aW9uOiBpbnN0YW5jZVByb3RvWydnZXRDdXJyZW50U25hcHNob3QnXSxcblx0XHRcdFx0YW5ub3RhdGlvbnM6IFtdXG5cdFx0XHR9KSxcblx0XHRcdG5ldyBONE1ldGhvZCh7XG5cdFx0XHRcdG5hbWU6ICdtb3ZlJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRqc0Z1bmN0aW9uOiBpbnN0YW5jZVByb3RvWydtb3ZlJ10sXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjRNZXRob2Qoe1xuXHRcdFx0XHRuYW1lOiAnaXNDYXN0bGluZ01vdmUnLFxuXHRcdFx0XHRpc1N0YXRpYzogZmFsc2UsXG5cdFx0XHRcdGpzRnVuY3Rpb246IGluc3RhbmNlUHJvdG9bJ2lzQ2FzdGxpbmdNb3ZlJ10sXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjRNZXRob2Qoe1xuXHRcdFx0XHRuYW1lOiAnaXNMZWZ0V2hpdGVSb29rJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRqc0Z1bmN0aW9uOiBpbnN0YW5jZVByb3RvWydpc0xlZnRXaGl0ZVJvb2snXSxcblx0XHRcdFx0YW5ub3RhdGlvbnM6IFtdXG5cdFx0XHR9KSxcblx0XHRcdG5ldyBONE1ldGhvZCh7XG5cdFx0XHRcdG5hbWU6ICdpc1doaXRlcGllY2UnLFxuXHRcdFx0XHRpc1N0YXRpYzogZmFsc2UsXG5cdFx0XHRcdGpzRnVuY3Rpb246IGluc3RhbmNlUHJvdG9bJ2lzV2hpdGVwaWVjZSddLFxuXHRcdFx0XHRhbm5vdGF0aW9uczogW11cblx0XHRcdH0pLFxuXHRcdFx0bmV3IE40TWV0aG9kKHtcblx0XHRcdFx0bmFtZTogJ2lzQmxhY2twaWVjZScsXG5cdFx0XHRcdGlzU3RhdGljOiBmYWxzZSxcblx0XHRcdFx0anNGdW5jdGlvbjogaW5zdGFuY2VQcm90b1snaXNCbGFja3BpZWNlJ10sXG5cdFx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgTjRNZXRob2Qoe1xuXHRcdFx0XHRuYW1lOiAncmVuZGVyJyxcblx0XHRcdFx0aXNTdGF0aWM6IGZhbHNlLFxuXHRcdFx0XHRqc0Z1bmN0aW9uOiBpbnN0YW5jZVByb3RvWydyZW5kZXInXSxcblx0XHRcdFx0YW5ub3RhdGlvbnM6IFtdXG5cdFx0XHR9KVxuXHRcdF0sXG5cdFx0Y29uc3VtZWRNZW1iZXJzOiBbXSxcblx0XHRhbm5vdGF0aW9uczogW11cblx0fSk7XG5cdHJldHVybiBtZXRhQ2xhc3M7XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShHYW1lLCAnJGRpJywge1xuXHR2YWx1ZToge1xuXHRcdHN1cGVyVHlwZTogUmVhY3QuQ29tcG9uZW50LFxuXHRcdGZpZWxkc0luamVjdGVkVHlwZXM6IFtdXG5cdH1cbn0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9R2FtZS5tYXBcbiIsIi8vIEdlbmVyYXRlZCBieSBONEpTIHRyYW5zcGlsZXI7IGZvciBjb3B5cmlnaHQgc2VlIG9yaWdpbmFsIE40SlMgc291cmNlIGZpbGUuXG5cbmltcG9ydCAnbjRqcy1ydW50aW1lJ1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QvaW5kZXgnXG5pbXBvcnQgR2FtZSBmcm9tICcuL2NvbXBvbmVudHMvR2FtZSdcbmltcG9ydCAqIGFzIFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSdcblxuUmVhY3RET00ucmVuZGVyKFJlYWN0LmNyZWF0ZUVsZW1lbnQoR2FtZSwgbnVsbCksIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiY2hlc3NBcHBNb3VudFBvaW50XCIpKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1haW4ubWFwXG4iXSwic291cmNlUm9vdCI6IiJ9 |